diff --git a/.gitignore b/.gitignore index ec71154..d985f34 100644 --- a/.gitignore +++ b/.gitignore @@ -209,6 +209,10 @@ $RECYCLE.BIN/ # Internal tools not ready for public use yet tools/flowseq/ +### Geo databases downloaded at runtime ### +geoip.dat +geosite.dat + ### Web UI ### # The built UI in web/dist IS committed, since it is embedded into the binary. web/frontend/node_modules/ diff --git a/README.ja.md b/README.ja.md index 21edeb6..16d141c 100644 --- a/README.ja.md +++ b/README.ja.md @@ -37,6 +37,10 @@ OpenGFW にはオプションのウェブダッシュボードが同梱されて アナライザのプロパティを含むイベントフィード、そしてルールを検証してホットリロードできるルールエディタが利用できます。 スマートフォンでもデスクトップでも使えるレスポンシブ対応です。 +ルールは条件のリストとして作成できます。フィールド(SNI、DNS 名、HTTP Host、IP、ポート、検出されたプロトコル)と +条件(ワイルドカード、CIDR、GeoIP の国、GeoSite カテゴリ、範囲、正規表現)、そして 1 つ以上の値を選ぶだけです。 +もちろん expr 式や YAML を直接編集することもできます。 + 設定ファイルで有効にします: ```yaml diff --git a/README.md b/README.md index ca0ac11..7509667 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,11 @@ OpenGFW ships with an optional web dashboard: live traffic statistics, a real-ti feed with per-stream analyzer properties, and a rule editor that validates and hot reloads the ruleset. It works on phones as well as on desktops. +Rules can be written as a list of conditions — pick a field (SNI, DNS name, HTTP host, +IP, port, detected protocol), an operator (wildcard, CIDR, GeoIP country, GeoSite +category, range, regex) and one or more values — or as raw expr expressions and YAML. +Countries and site categories are picked from the geo databases the engine loaded. + Enable it in your config file: ```yaml diff --git a/README.zh.md b/README.zh.md index 14413c5..ddfedb4 100644 --- a/README.zh.md +++ b/README.zh.md @@ -36,6 +36,10 @@ Telegram 群组: https://t.me/OpGFW OpenGFW 内置了一个可选的 Web 控制面板:实时流量统计、带解析器属性的实时事件流,以及可以校验并热加载规则的规则编辑器。 界面同时适配手机和桌面浏览器。 +规则既可以用条件列表来写——选择字段(SNI、DNS 域名、HTTP Host、IP、端口、识别到的协议)、 +条件(通配符、CIDR、GeoIP 国家/地区、GeoSite 分类、端口区间、正则)以及一个或多个值—— +也可以直接编写 expr 表达式或 YAML。国家/地区与站点分类直接从引擎加载的 geo 数据库中选择。 + 在配置文件中启用: ```yaml diff --git a/cmd/web.go b/cmd/web.go index d7fbffa..ae2fba6 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -13,6 +13,7 @@ import ( "github.com/apernet/OpenGFW/engine" "github.com/apernet/OpenGFW/modifier" "github.com/apernet/OpenGFW/ruleset" + "github.com/apernet/OpenGFW/ruleset/builtins/geo" "github.com/apernet/OpenGFW/web" "go.uber.org/zap" @@ -197,6 +198,7 @@ func startWebServer(ctx context.Context, config *cliConfig, rm *ruleManager) err Rules: rm, Meta: webMeta(), Info: func() web.Info { return webInfo(config, rm) }, + Geo: func() web.GeoData { return webGeoData(config) }, Logf: func(format string, args ...interface{}) { logger.Info(fmt.Sprintf(format, args...)) }, @@ -266,6 +268,33 @@ func webInfo(config *cliConfig, rm *ruleManager) web.Info { } } +// webGeoData lists what the configured geo databases contain, so that the rule +// builder can offer a picker instead of a free text field. Loading the files is +// expensive, but the web server only calls this on demand and caches the result. +func webGeoData(config *cliConfig) web.GeoData { + matcher := geo.NewGeoMatcher(config.Ruleset.GeoSite, config.Ruleset.GeoIp) + var data web.GeoData + if entries, err := matcher.ListGeoIP(); err != nil { + data.IPError = err.Error() + } else { + for _, e := range entries { + data.IP = append(data.IP, web.GeoEntry{Code: e.Code, Count: e.CIDRs}) + } + } + if entries, err := matcher.ListGeoSite(); err != nil { + data.SiteError = err.Error() + } else { + for _, e := range entries { + data.Site = append(data.Site, web.GeoEntry{ + Code: e.Code, + Count: e.Domains, + Attributes: e.Attributes, + }) + } + } + return data +} + // hubInfo converts engine stream info into the shape the hub understands. func hubInfo(info ruleset.StreamInfo) web.StreamInfo { return web.StreamInfo{ diff --git a/ruleset/builtins/geo/geo_matcher.go b/ruleset/builtins/geo/geo_matcher.go index 1bb0f30..ab20abb 100644 --- a/ruleset/builtins/geo/geo_matcher.go +++ b/ruleset/builtins/geo/geo_matcher.go @@ -2,6 +2,7 @@ package geo import ( "net" + "sort" "strings" "sync" ) @@ -97,6 +98,69 @@ func (g *GeoMatcher) LoadGeoSite() error { return err } +// GeoIPEntry describes one entry of a GeoIP database. +type GeoIPEntry struct { + // Code is the lowercase key to pass to geoip(), usually a country code. + Code string + // CIDRs is the number of networks the entry covers. + CIDRs int +} + +// GeoSiteEntry describes one entry of a GeoSite database. +type GeoSiteEntry struct { + // Code is the lowercase key to pass to geosite(). + Code string + // Attributes are the suffixes usable as `code@attribute`. + Attributes []string + // Domains is the number of domain rules the entry covers. + Domains int +} + +// ListGeoIP returns every entry of the GeoIP database, sorted by code. +// It is meant for UIs that let the user pick a country instead of typing one. +func (g *GeoMatcher) ListGeoIP() ([]GeoIPEntry, error) { + gMap, err := g.geoLoader.LoadGeoIP() + if err != nil { + return nil, err + } + entries := make([]GeoIPEntry, 0, len(gMap)) + for code, list := range gMap { + entries = append(entries, GeoIPEntry{Code: code, CIDRs: len(list.GetCidr())}) + } + sort.Slice(entries, func(i, j int) bool { return entries[i].Code < entries[j].Code }) + return entries, nil +} + +// ListGeoSite returns every entry of the GeoSite database, sorted by code, +// including the attributes each entry supports. +func (g *GeoMatcher) ListGeoSite() ([]GeoSiteEntry, error) { + gMap, err := g.geoLoader.LoadGeoSite() + if err != nil { + return nil, err + } + entries := make([]GeoSiteEntry, 0, len(gMap)) + for code, list := range gMap { + attrSet := make(map[string]struct{}) + for _, domain := range list.GetDomain() { + for _, attr := range domain.GetAttribute() { + attrSet[strings.ToLower(attr.GetKey())] = struct{}{} + } + } + attrs := make([]string, 0, len(attrSet)) + for attr := range attrSet { + attrs = append(attrs, attr) + } + sort.Strings(attrs) + entries = append(entries, GeoSiteEntry{ + Code: code, + Attributes: attrs, + Domains: len(list.GetDomain()), + }) + } + sort.Slice(entries, func(i, j int) bool { return entries[i].Code < entries[j].Code }) + return entries, nil +} + func (g *GeoMatcher) LoadGeoIP() error { _, err := g.geoLoader.LoadGeoIP() return err diff --git a/ruleset/expr_test.go b/ruleset/expr_test.go new file mode 100644 index 0000000..356df88 --- /dev/null +++ b/ruleset/expr_test.go @@ -0,0 +1,76 @@ +package ruleset + +import ( + "context" + "net" + "strings" + "testing" + + "github.com/apernet/OpenGFW/analyzer" + "github.com/apernet/OpenGFW/analyzer/tcp" + "github.com/apernet/OpenGFW/analyzer/udp" + "github.com/apernet/OpenGFW/modifier" + modUDP "github.com/apernet/OpenGFW/modifier/udp" +) + +// builderExpressions are the canonical expressions produced by the visual rule +// builder of the web UI (see web/frontend/src/lib/rule/compile.ts). They are +// pinned here so that a change to the expression language, the analyzers or the +// built-in functions cannot silently break the builder. +var builderExpressions = []string{ + // Domain or subdomain, single and multiple values + `(string(tls?.req?.sni) == "example.com" || string(tls?.req?.sni) endsWith ".example.com")`, + `((string(tls?.req?.sni) == "example.com" || string(tls?.req?.sni) endsWith ".example.com") || (string(tls?.req?.sni) == "evil.test" || string(tls?.req?.sni) endsWith ".evil.test")) && proto == "tcp"`, + // CIDR and GeoIP, including negation + `(cidr(ip.dst, "10.0.0.0/8") || cidr(ip.dst, "fd00::/8")) || !(geoip(ip.dst, "cn") || geoip(ip.dst, "hk"))`, + // Port equality and ranges + `(port.dst >= 1000 && port.dst <= 2000) && (port.src == 80 || port.src == 443)`, + // Wildcards over DNS questions + `any(dns?.questions ?? [], {(string(.name) endsWith ".ads.com" || string(.name) startsWith "x.")})`, + // GeoSite over DNS questions + `any(dns?.questions ?? [], {geosite(string(.name), "category-ads-all")})`, + // HTTP fields: negation, regular expressions and header lookups + `!(string(http?.req?.headers?.host) contains "tracker") && string(http?.req?.path) matches "^/api/v\\d+/" && string(get(http?.req?.headers, "user-agent")) startsWith "curl"`, + // Protocol detection + `(ssh != nil || trojan != nil)`, + // Wildcard edge cases: "any value" and a star in the middle + `string(quic?.req?.sni) != "" && string(tls?.req?.sni) matches "^www\\..*\\.com$" && ip.src == "1.2.3.4" && string(http?.req?.method) == "POST"`, +} + +func TestCompileBuilderExpressions(t *testing.T) { + analyzers := []analyzer.Analyzer{ + &tcp.FETAnalyzer{}, &tcp.HTTPAnalyzer{}, &tcp.SocksAnalyzer{}, &tcp.SSHAnalyzer{}, + &tcp.TLSAnalyzer{}, &tcp.TrojanAnalyzer{}, &udp.DNSAnalyzer{}, &udp.OpenVPNAnalyzer{}, + &udp.QUICAnalyzer{}, &udp.WireGuardAnalyzer{}, + } + modifiers := []modifier.Modifier{&modUDP.DNSModifier{}} + config := &BuiltinConfig{ + Logger: nopLogger{}, + // Point at a file that does not exist: expressions still have to + // compile, only loading the database is expected to fail. + GeoSiteFilename: "testdata/missing-geosite.dat", + GeoIpFilename: "testdata/missing-geoip.dat", + ProtectedDialContext: func(ctx context.Context, network, address string) (net.Conn, error) { + return (&net.Dialer{}).DialContext(ctx, network, address) + }, + } + + for _, expr := range builderExpressions { + rules := []ExprRule{{Name: "test", Action: "block", Expr: expr}} + _, err := CompileExprRules(rules, analyzers, modifiers, config) + if err == nil { + continue + } + // geoip()/geosite() need a database, which this test does not ship. + // Reaching the initialization step means the expression itself is fine. + if strings.Contains(err.Error(), "failed to initialize function") { + continue + } + t.Errorf("expression failed to compile: %s\n %v", expr, err) + } +} + +type nopLogger struct{} + +func (nopLogger) Log(StreamInfo, string) {} +func (nopLogger) MatchError(StreamInfo, string, error) {} diff --git a/web/README.md b/web/README.md index 69eba4b..60243e1 100644 --- a/web/README.md +++ b/web/README.md @@ -8,8 +8,9 @@ the OpenGFW binary and served by the `web` package. blocked destinations and triggered rules - **Events** — real-time feed of verdicts, rule logs and errors with filters and a detail view showing raw analyzer properties -- **Rules** — visual rule editor and a raw YAML editor, both validated by the engine - itself; saving writes the rule file and hot reloads the running engine +- **Rules** — a visual condition builder, a raw expression editor and a YAML editor, + all validated by the engine itself; saving writes the rule file and hot reloads the + running engine - **Analyzers** — which analyzers are compiled in and how much traffic each one saw - **Settings** — theme (light/dark/system), language (English/中文) and instance info @@ -30,6 +31,49 @@ web: If `secret` is empty a random password is generated and printed to the log on startup. +## Rule builder + +Rules are still plain expr expressions in the rule file; the builder is only a way to +write them without memorising the syntax. Conditions are rows of *field + operator + +values*, joined with AND or OR, each row negatable: + +| Field group | Fields | +| ----------- | --------------------------------------------------------------- | +| Connection | transport protocol, source/destination IP, source/destination port | +| Domain | TLS SNI, QUIC SNI, DNS query name | +| HTTP | Host, path, method, User-Agent | +| Protocol | detected protocol (any analyzer) | + +Operators cover the things rules usually need: + +| Operator | Generated expression | +| ----------------------- | ---------------------------------------------------------- | +| domain or subdomain of | `(S == "x.com" \|\| S endsWith ".x.com")` | +| matches wildcard | `*.x.com` → `endsWith`, `x.*` → `startsWith`, `*ad*` → `contains`, `a.*.c` → `matches` | +| in CIDR | `cidr(ip.dst, "10.0.0.0/8")`, validated as you type | +| in GeoIP country | `geoip(ip.dst, "cn")`, picked from the loaded database | +| in GeoSite category | `geosite(string(.name), "category-ads-all@cn")` | +| in range | `(port.dst >= 1000 && port.dst <= 2000)` | +| is / contains / starts / ends / regex | the matching expr operator | + +Multiple values in one row are OR-ed together, so one row can hold a whole domain or +country list. The generated expression is shown live and validated by the engine before +the rule is accepted. + +Opening an existing rule parses its expression back into conditions. Anything the +builder cannot represent — hand written expressions, functions like `lookup()` — opens +in the expression editor with a warning instead of being rewritten. + +The GeoIP picker lists whatever the configured `geoip.dat` contains: country codes plus, +with the default Loyalsoldier database, provider groups such as `cloudflare`, `google` +and `telegram`. Matching by AS number is not something the v2geo data format supports, +so use those groups or an explicit CIDR list instead. + +`web/frontend/src/lib/rule/` holds the whole thing: `fields.ts` (catalog), `compile.ts` +(builder → expr), `parse.ts` (expr → builder) and `validate.ts`. The canonical +expressions are pinned in `ruleset/expr_test.go`, which compiles them with the real +engine. + ## Layout ``` @@ -83,6 +127,7 @@ endpoints only accept the bearer token, which makes them immune to CSRF. | `POST` | `/logout` | invalidate the current session | | `GET` | `/info` | version, platform and engine configuration | | `GET` | `/meta` | available analyzers, modifiers, actions, functions | +| `GET` | `/geo` | GeoIP/GeoSite entries for the rule builder pickers | | `GET` | `/metrics` | counters, time series and top N lists | | `GET` | `/events?limit=` | recent events from the ring buffer | | `GET` | `/live` | server-sent events: `event` and `metrics` frames | diff --git a/web/api.go b/web/api.go index f697e26..943045e 100644 --- a/web/api.go +++ b/web/api.go @@ -204,6 +204,29 @@ func (s *Server) handleLive(w http.ResponseWriter, r *http.Request) { } } +// GET /api/v1/geo - the entries of the configured geo databases. +func (s *Server) handleGeo(w http.ResponseWriter, r *http.Request) { + if !methodAllowed(w, r, http.MethodGet) { + return + } + if s.config.Geo == nil { + writeJSON(w, http.StatusOK, GeoData{ + IPError: "geo databases are unavailable", + SiteError: "geo databases are unavailable", + }) + return + } + s.geoMu.Lock() + defer s.geoMu.Unlock() + fresh := s.geoCache != nil && time.Since(s.geoLoaded) < geoCacheTTL + if !fresh || r.URL.Query().Get("reload") == "1" { + data := s.config.Geo() + s.geoCache = &data + s.geoLoaded = time.Now() + } + writeJSON(w, http.StatusOK, s.geoCache) +} + type rulesRequest struct { Raw string `json:"raw"` Rules []Rule `json:"rules"` diff --git a/web/devserver/main.go b/web/devserver/main.go index 7920df5..cd95d56 100644 --- a/web/devserver/main.go +++ b/web/devserver/main.go @@ -13,13 +13,22 @@ import ( "fmt" "log" "math/rand" + "net" "os" "os/signal" "runtime" "syscall" "time" + "github.com/apernet/OpenGFW/analyzer" + "github.com/apernet/OpenGFW/analyzer/tcp" + "github.com/apernet/OpenGFW/analyzer/udp" + "github.com/apernet/OpenGFW/modifier" + modUDP "github.com/apernet/OpenGFW/modifier/udp" + "github.com/apernet/OpenGFW/ruleset" + "github.com/apernet/OpenGFW/ruleset/builtins/geo" "github.com/apernet/OpenGFW/web" + "gopkg.in/yaml.v3" ) @@ -64,6 +73,7 @@ func main() { }, } }, + Geo: geoData, Logf: log.Printf, }) if err != nil { @@ -161,8 +171,9 @@ func generate(ctx context.Context, hub *web.Hub) { } } -// memoryRules is an in-memory web.RuleManager: it validates the YAML shape but -// does not compile expressions, which is enough for UI work. +// memoryRules is an in-memory web.RuleManager. Rules are compiled with the real +// ruleset compiler and the real analyzers, so expression errors show up here +// exactly like they would in the engine; only the "apply" step is faked. type memoryRules struct { raw string rules []web.Rule @@ -209,21 +220,68 @@ func (m *memoryRules) Apply(raw string) ([]web.Rule, error) { return rules, nil } +var ( + analyzers = []analyzer.Analyzer{ + &tcp.FETAnalyzer{}, &tcp.HTTPAnalyzer{}, &tcp.SocksAnalyzer{}, &tcp.SSHAnalyzer{}, + &tcp.TLSAnalyzer{}, &tcp.TrojanAnalyzer{}, &udp.DNSAnalyzer{}, &udp.OpenVPNAnalyzer{}, + &udp.QUICAnalyzer{}, &udp.WireGuardAnalyzer{}, + } + modifiers = []modifier.Modifier{&modUDP.DNSModifier{}} +) + +// parse compiles rules the same way the engine does. func parse(raw string) ([]web.Rule, error) { - var rules []web.Rule - if err := yaml.Unmarshal([]byte(raw), &rules); err != nil { + exprRules, err := ruleset.ExprRulesFromYAMLBytes([]byte(raw)) + if err != nil { + return nil, fmt.Errorf("failed to parse rules: %w", err) + } + _, err = ruleset.CompileExprRules(exprRules, analyzers, modifiers, &ruleset.BuiltinConfig{ + Logger: nopRulesetLogger{}, + GeoSiteFilename: os.Getenv("OPENGFW_GEOSITE"), + GeoIpFilename: os.Getenv("OPENGFW_GEOIP"), + ProtectedDialContext: func(ctx context.Context, network, address string) (net.Conn, error) { + return (&net.Dialer{}).DialContext(ctx, network, address) + }, + }) + if err != nil { return nil, err } - for i, r := range rules { - if r.Name == "" { - return nil, fmt.Errorf("rule #%d has no name", i+1) + out := make([]web.Rule, 0, len(exprRules)) + for _, r := range exprRules { + wr := web.Rule{Name: r.Name, Action: r.Action, Log: r.Log, Expr: r.Expr} + if r.Modifier.Name != "" { + wr.Modifier = &web.RuleModifier{Name: r.Modifier.Name, Args: r.Modifier.Args} } - if r.Expr == "" { - return nil, fmt.Errorf("rule %q has no expression", r.Name) - } - if r.Action == "" && !r.Log { - return nil, fmt.Errorf("rule %q must have at least one of action or log", r.Name) + out = append(out, wr) + } + return out, nil +} + +type nopRulesetLogger struct{} + +func (nopRulesetLogger) Log(ruleset.StreamInfo, string) {} +func (nopRulesetLogger) MatchError(ruleset.StreamInfo, string, error) {} + +// geoData lists the geo databases, if they are available in the working +// directory (or wherever OPENGFW_GEOIP / OPENGFW_GEOSITE point). +func geoData() web.GeoData { + matcher := geo.NewGeoMatcher(os.Getenv("OPENGFW_GEOSITE"), os.Getenv("OPENGFW_GEOIP")) + var data web.GeoData + if entries, err := matcher.ListGeoIP(); err != nil { + data.IPError = err.Error() + } else { + for _, e := range entries { + data.IP = append(data.IP, web.GeoEntry{Code: e.Code, Count: e.CIDRs}) } } - return rules, nil + if entries, err := matcher.ListGeoSite(); err != nil { + data.SiteError = err.Error() + } else { + for _, e := range entries { + data.Site = append(data.Site, web.GeoEntry{ + Code: e.Code, Count: e.Domains, Attributes: e.Attributes, + }) + } + } + return data } diff --git a/web/dist/assets/AnalyzersView-CHLlPReV.js b/web/dist/assets/AnalyzersView-Bm4Tu3Lm.js similarity index 87% rename from web/dist/assets/AnalyzersView-CHLlPReV.js rename to web/dist/assets/AnalyzersView-Bm4Tu3Lm.js index e0f1090..c0d24b3 100644 --- a/web/dist/assets/AnalyzersView-CHLlPReV.js +++ b/web/dist/assets/AnalyzersView-Bm4Tu3Lm.js @@ -1,4 +1,4 @@ -import{_ as b}from"./PageHeader.vue_vue_type_script_setup_true_lang-CDyKzgiP.js";import{_ as y}from"./Badge.vue_vue_type_script_setup_true_lang--8bF8KCa.js";import{c as M,d as B,K as L,M as j,a as o,p as t,u as e,l as r,F as f,r as p,b as u,w as s,_ as g,m as F,g as v,o as n,h,t as l,k as i,j as N,q}from"./index-D3ZCYstt.js";import{_ as k,a as x,b as z,c as w}from"./CardTitle.vue_vue_type_script_setup_true_lang-BcE23HB-.js";import{_ as A}from"./Skeleton.vue_vue_type_script_setup_true_lang-C9uTg8Ty.js";import{c as C}from"./format-B6sc_rZ4.js";/** +import{_ as b}from"./PageHeader.vue_vue_type_script_setup_true_lang-CPDhGTO6.js";import{_ as y}from"./Badge.vue_vue_type_script_setup_true_lang-i2F91fYk.js";import{c as M,d as B,O as L,$ as j,a as o,p as t,u as e,l as r,F as f,r as p,b as u,w as s,_ as g,m as F,g as v,o as n,h,t as l,k as i,j as N,q}from"./index-BKPz7Obh.js";import{_ as k,a as x,b as z,c as w}from"./CardTitle.vue_vue_type_script_setup_true_lang-BHtPbA-o.js";import{_ as A}from"./Skeleton.vue_vue_type_script_setup_true_lang-DG3HTLWx.js";import{c as C}from"./format-B6sc_rZ4.js";/** * @license lucide-vue-next v0.469.0 - ISC * * This source code is licensed under the ISC license. @@ -8,4 +8,4 @@ import{_ as b}from"./PageHeader.vue_vue_type_script_setup_true_lang-CDyKzgiP.js" * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const I=M("SquareFunctionIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["path",{d:"M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3",key:"m1af9g"}],["path",{d:"M9 11.2h5.7",key:"3zgcl2"}]]),S={key:0,class:"grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4"},Z={class:"grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4"},E={class:"flex items-center justify-between gap-2"},K={class:"truncate font-mono text-sm font-medium"},T={class:"mt-2 text-xl font-semibold tabular-nums"},G={class:"text-muted-foreground text-xs"},H={class:"mt-3 grid gap-3 md:grid-cols-2"},J={key:0,class:"text-muted-foreground text-xs"},Y=B({__name:"AnalyzersView",setup(O){const{metrics:V}=q(),c=F(null);L(async()=>{try{c.value=await j.meta()}catch{c.value={analyzers:[],modifiers:[],actions:[],functions:[]}}});const _=v(()=>{var m;const d=new Map;for(const a of((m=V.value)==null?void 0:m.analyzers)??[])d.set(a.name,a.count);return d}),$=v(()=>{var d;return[...((d=c.value)==null?void 0:d.analyzers)??[]].sort((m,a)=>(_.value.get(a.name)??0)-(_.value.get(m.name)??0))});return(d,m)=>(n(),o("div",null,[t(b,{title:e(r)("analyzers.title"),description:e(r)("analyzers.subtitle")},null,8,["title","description"]),c.value?(n(),o(f,{key:1},[u("div",Z,[(n(!0),o(f,null,p($.value,a=>(n(),h(e(g),{key:a.name,class:"p-3.5 sm:p-4"},{default:s(()=>[u("div",E,[u("span",K,l(a.name),1),t(e(y),{variant:a.proto==="udp"?"udp":"tcp",class:"uppercase"},{default:s(()=>[i(l(a.proto),1)]),_:2},1032,["variant"])]),u("p",T,l(e(C)(_.value.get(a.name)??0)),1),u("p",G,l(e(r)("analyzers.hits")),1)]),_:2},1024))),128))]),u("div",H,[t(e(g),null,{default:s(()=>[t(e(k),null,{default:s(()=>[t(e(x),{class:"flex items-center gap-2"},{default:s(()=>[t(e(D),{class:"size-4"}),i(" "+l(e(r)("analyzers.modifiers")),1)]),_:1}),t(e(z),null,{default:s(()=>[i(l(e(r)("analyzers.modifiersDesc")),1)]),_:1})]),_:1}),t(e(w),{class:"flex flex-wrap gap-1.5"},{default:s(()=>[(n(!0),o(f,null,p(c.value.modifiers,a=>(n(),h(e(y),{key:a,variant:"secondary",class:"font-mono"},{default:s(()=>[i(l(a),1)]),_:2},1024))),128)),c.value.modifiers.length?N("",!0):(n(),o("span",J,"—"))]),_:1})]),_:1}),t(e(g),null,{default:s(()=>[t(e(k),null,{default:s(()=>[t(e(x),{class:"flex items-center gap-2"},{default:s(()=>[t(e(I),{class:"size-4"}),i(" "+l(e(r)("analyzers.functions")),1)]),_:1}),t(e(z),null,{default:s(()=>[i(l(e(r)("analyzers.functionsDesc")),1)]),_:1})]),_:1}),t(e(w),{class:"flex flex-wrap gap-1.5"},{default:s(()=>[(n(!0),o(f,null,p(c.value.functions,a=>(n(),h(e(y),{key:a,variant:"secondary",class:"font-mono"},{default:s(()=>[i(l(a)+"() ",1)]),_:2},1024))),128))]),_:1})]),_:1})])],64)):(n(),o("div",S,[(n(),o(f,null,p(8,a=>t(e(A),{key:a,class:"h-24"})),64))]))]))}});export{Y as default}; + */const I=M("SquareFunctionIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["path",{d:"M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3",key:"m1af9g"}],["path",{d:"M9 11.2h5.7",key:"3zgcl2"}]]),S={key:0,class:"grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4"},Z={class:"grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4"},E={class:"flex items-center justify-between gap-2"},O={class:"truncate font-mono text-sm font-medium"},T={class:"mt-2 text-xl font-semibold tabular-nums"},G={class:"text-muted-foreground text-xs"},H={class:"mt-3 grid gap-3 md:grid-cols-2"},J={key:0,class:"text-muted-foreground text-xs"},Y=B({__name:"AnalyzersView",setup(K){const{metrics:V}=q(),c=F(null);L(async()=>{try{c.value=await j.meta()}catch{c.value={analyzers:[],modifiers:[],actions:[],functions:[]}}});const _=v(()=>{var m;const d=new Map;for(const a of((m=V.value)==null?void 0:m.analyzers)??[])d.set(a.name,a.count);return d}),$=v(()=>{var d;return[...((d=c.value)==null?void 0:d.analyzers)??[]].sort((m,a)=>(_.value.get(a.name)??0)-(_.value.get(m.name)??0))});return(d,m)=>(n(),o("div",null,[t(b,{title:e(r)("analyzers.title"),description:e(r)("analyzers.subtitle")},null,8,["title","description"]),c.value?(n(),o(f,{key:1},[u("div",Z,[(n(!0),o(f,null,p($.value,a=>(n(),h(e(g),{key:a.name,class:"p-3.5 sm:p-4"},{default:s(()=>[u("div",E,[u("span",O,l(a.name),1),t(e(y),{variant:a.proto==="udp"?"udp":"tcp",class:"uppercase"},{default:s(()=>[i(l(a.proto),1)]),_:2},1032,["variant"])]),u("p",T,l(e(C)(_.value.get(a.name)??0)),1),u("p",G,l(e(r)("analyzers.hits")),1)]),_:2},1024))),128))]),u("div",H,[t(e(g),null,{default:s(()=>[t(e(k),null,{default:s(()=>[t(e(x),{class:"flex items-center gap-2"},{default:s(()=>[t(e(D),{class:"size-4"}),i(" "+l(e(r)("analyzers.modifiers")),1)]),_:1}),t(e(z),null,{default:s(()=>[i(l(e(r)("analyzers.modifiersDesc")),1)]),_:1})]),_:1}),t(e(w),{class:"flex flex-wrap gap-1.5"},{default:s(()=>[(n(!0),o(f,null,p(c.value.modifiers,a=>(n(),h(e(y),{key:a,variant:"secondary",class:"font-mono"},{default:s(()=>[i(l(a),1)]),_:2},1024))),128)),c.value.modifiers.length?N("",!0):(n(),o("span",J,"—"))]),_:1})]),_:1}),t(e(g),null,{default:s(()=>[t(e(k),null,{default:s(()=>[t(e(x),{class:"flex items-center gap-2"},{default:s(()=>[t(e(I),{class:"size-4"}),i(" "+l(e(r)("analyzers.functions")),1)]),_:1}),t(e(z),null,{default:s(()=>[i(l(e(r)("analyzers.functionsDesc")),1)]),_:1})]),_:1}),t(e(w),{class:"flex flex-wrap gap-1.5"},{default:s(()=>[(n(!0),o(f,null,p(c.value.functions,a=>(n(),h(e(y),{key:a,variant:"secondary",class:"font-mono"},{default:s(()=>[i(l(a)+"() ",1)]),_:2},1024))),128))]),_:1})]),_:1})])],64)):(n(),o("div",S,[(n(),o(f,null,p(8,a=>t(e(A),{key:a,class:"h-24"})),64))]))]))}});export{Y as default}; diff --git a/web/dist/assets/Badge.vue_vue_type_script_setup_true_lang--8bF8KCa.js b/web/dist/assets/Badge.vue_vue_type_script_setup_true_lang-i2F91fYk.js similarity index 87% rename from web/dist/assets/Badge.vue_vue_type_script_setup_true_lang--8bF8KCa.js rename to web/dist/assets/Badge.vue_vue_type_script_setup_true_lang-i2F91fYk.js index 345c84e..2142038 100644 --- a/web/dist/assets/Badge.vue_vue_type_script_setup_true_lang--8bF8KCa.js +++ b/web/dist/assets/Badge.vue_vue_type_script_setup_true_lang-i2F91fYk.js @@ -1 +1 @@ -import{d as o,a as n,e as d,u as e,f as s,H as l,o as p,a0 as c}from"./index-D3ZCYstt.js";const b=c("inline-flex items-center justify-center gap-1 rounded-md border px-1.5 py-0.5 text-[11px] font-medium whitespace-nowrap tabular-nums",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground",secondary:"border-transparent bg-secondary text-secondary-foreground",outline:"text-foreground",muted:"border-transparent bg-muted text-muted-foreground",allow:"border-allow/25 bg-allow/12 text-allow",block:"border-block/25 bg-block/12 text-block",drop:"border-drop/25 bg-drop/12 text-drop",modify:"border-modify/25 bg-modify/12 text-modify",log:"border-log/25 bg-log/12 text-log",tcp:"border-tcp/25 bg-tcp/12 text-tcp",udp:"border-udp/25 bg-udp/12 text-udp"}},defaultVariants:{variant:"default"}}),g=o({__name:"Badge",props:{variant:{},class:{}},setup(t){const r=t;return(a,u)=>(p(),n("span",{class:d(e(s)(e(b)({variant:r.variant}),r.class))},[l(a.$slots,"default")],2))}});export{g as _}; +import{d as o,a as n,e as d,u as e,f as s,H as l,o as p,a8 as c}from"./index-BKPz7Obh.js";const b=c("inline-flex items-center justify-center gap-1 rounded-md border px-1.5 py-0.5 text-[11px] font-medium whitespace-nowrap tabular-nums",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground",secondary:"border-transparent bg-secondary text-secondary-foreground",outline:"text-foreground",muted:"border-transparent bg-muted text-muted-foreground",allow:"border-allow/25 bg-allow/12 text-allow",block:"border-block/25 bg-block/12 text-block",drop:"border-drop/25 bg-drop/12 text-drop",modify:"border-modify/25 bg-modify/12 text-modify",log:"border-log/25 bg-log/12 text-log",tcp:"border-tcp/25 bg-tcp/12 text-tcp",udp:"border-udp/25 bg-udp/12 text-udp"}},defaultVariants:{variant:"default"}}),g=o({__name:"Badge",props:{variant:{},class:{}},setup(t){const r=t;return(a,u)=>(p(),n("span",{class:d(e(s)(e(b)({variant:r.variant}),r.class))},[l(a.$slots,"default")],2))}});export{g as _}; diff --git a/web/dist/assets/CardTitle.vue_vue_type_script_setup_true_lang-BcE23HB-.js b/web/dist/assets/CardTitle.vue_vue_type_script_setup_true_lang-BHtPbA-o.js similarity index 92% rename from web/dist/assets/CardTitle.vue_vue_type_script_setup_true_lang-BcE23HB-.js rename to web/dist/assets/CardTitle.vue_vue_type_script_setup_true_lang-BHtPbA-o.js index 4950dc3..24546cd 100644 --- a/web/dist/assets/CardTitle.vue_vue_type_script_setup_true_lang-BcE23HB-.js +++ b/web/dist/assets/CardTitle.vue_vue_type_script_setup_true_lang-BHtPbA-o.js @@ -1 +1 @@ -import{d as a,o as n,a as r,e as c,u as o,f as p,H as l}from"./index-D3ZCYstt.js";const u=a({__name:"CardContent",props:{class:{}},setup(s){const e=s;return(t,m)=>(n(),r("div",{class:c(o(p)("px-4 pb-4 sm:px-5 sm:pb-5",e.class))},[l(t.$slots,"default")],2))}}),d=a({__name:"CardDescription",props:{class:{}},setup(s){const e=s;return(t,m)=>(n(),r("p",{class:c(o(p)("text-muted-foreground text-xs sm:text-sm",e.class))},[l(t.$slots,"default")],2))}}),f=a({__name:"CardHeader",props:{class:{}},setup(s){const e=s;return(t,m)=>(n(),r("div",{class:c(o(p)("flex flex-col gap-1 px-4 pt-4 pb-3 sm:px-5 sm:pt-5",e.class))},[l(t.$slots,"default")],2))}}),i=a({__name:"CardTitle",props:{class:{}},setup(s){const e=s;return(t,m)=>(n(),r("h3",{class:c(o(p)("text-sm leading-none font-semibold tracking-tight sm:text-base",e.class))},[l(t.$slots,"default")],2))}});export{f as _,i as a,d as b,u as c}; +import{d as a,o as n,a as r,e as c,u as o,f as p,H as l}from"./index-BKPz7Obh.js";const u=a({__name:"CardContent",props:{class:{}},setup(s){const e=s;return(t,m)=>(n(),r("div",{class:c(o(p)("px-4 pb-4 sm:px-5 sm:pb-5",e.class))},[l(t.$slots,"default")],2))}}),d=a({__name:"CardDescription",props:{class:{}},setup(s){const e=s;return(t,m)=>(n(),r("p",{class:c(o(p)("text-muted-foreground text-xs sm:text-sm",e.class))},[l(t.$slots,"default")],2))}}),f=a({__name:"CardHeader",props:{class:{}},setup(s){const e=s;return(t,m)=>(n(),r("div",{class:c(o(p)("flex flex-col gap-1 px-4 pt-4 pb-3 sm:px-5 sm:pt-5",e.class))},[l(t.$slots,"default")],2))}}),i=a({__name:"CardTitle",props:{class:{}},setup(s){const e=s;return(t,m)=>(n(),r("h3",{class:c(o(p)("text-sm leading-none font-semibold tracking-tight sm:text-base",e.class))},[l(t.$slots,"default")],2))}});export{f as _,i as a,d as b,u as c}; diff --git a/web/dist/assets/Collection-BaXBMWO5.js b/web/dist/assets/Collection-BaXBMWO5.js new file mode 100644 index 0000000..c2fc0ca --- /dev/null +++ b/web/dist/assets/Collection-BaXBMWO5.js @@ -0,0 +1 @@ +import{aB as h,aC as x,m as v,g as p,aD as R,al as S,d as g,aj as b,ap as w,aE as y,x as P,aF as k}from"./index-BKPz7Obh.js";function D(e,l){const t=typeof e=="string"&&!l?`${e}Context`:l,o=Symbol(t);return[a=>{const c=h(o,a);if(c||c===null)return c;throw new Error(`Injection \`${o.toString()}\` not found. Component must be used within ${Array.isArray(e)?`one of the following components: ${e.join(", ")}`:`\`${e}\``}`)},a=>(x(o,a),a)]}function _(){let e=document.activeElement;if(e==null)return null;for(;e!=null&&e.shadowRoot!=null&&e.shadowRoot.activeElement!=null;)e=e.shadowRoot.activeElement;return e}const[A]=D("ConfigProvider");function z(e){const l=A({dir:v("ltr")});return p(()=>{var t;return(e==null?void 0:e.value)||((t=l.dir)==null?void 0:t.value)||"ltr"})}function K(e,l="reka"){var n;let t;const o=A({useId:void 0});return o.useId?t=o.useId():t=(n=R)==null?void 0:n(),l?`${l}-${t}`:t}function I(){const e=v(),l=p(()=>{var t,o;return["#text","#comment"].includes((t=e.value)==null?void 0:t.$el.nodeName)?(o=e.value)==null?void 0:o.$el.nextElementSibling:S(e)});return{primitiveElement:e,currentElement:l}}const $="data-reka-collection-item";function q(e={}){const{key:l="",isProvider:t=!1}=e,o=`${l}CollectionProvider`;let n;if(t){const u=v(new Map);n={collectionRef:v(),itemMap:u},x(o,n)}else n=h(o);const C=(u=!1)=>{const r=n.collectionRef.value;if(!r)return[];const f=Array.from(r.querySelectorAll(`[${$}]`)),m=new Map(f.map((i,E)=>[i,E])),d=Array.from(n.itemMap.value.values()).sort((i,E)=>(m.get(i.ref)??-1)-(m.get(E.ref)??-1));return u?d:d.filter(i=>i.ref.dataset.disabled!=="")},a=g({name:"CollectionSlot",inheritAttrs:!1,setup(u,{slots:r,attrs:f}){const{primitiveElement:m,currentElement:s}=I();return P(s,()=>{n.collectionRef.value=s.value}),()=>w(y,{ref:m,...f},r)}}),c=g({name:"CollectionItem",inheritAttrs:!1,props:{value:{validator:()=>!0}},setup(u,{slots:r,attrs:f}){const{primitiveElement:m,currentElement:s}=I();return b(d=>{if(s.value){const i=k(s.value);n.itemMap.value.set(i,{ref:s.value,value:u.value}),d(()=>n.itemMap.value.delete(i))}}),()=>w(y,{...f,[$]:"",ref:m},r)}}),M=p(()=>Array.from(n.itemMap.value.values())),j=p(()=>n.itemMap.value.size);return{getItems:C,reactiveItems:M,itemMapSize:j,CollectionSlot:a,CollectionItem:c}}export{q as a,z as b,D as c,K as d,_ as g,A as i,I as u}; diff --git a/web/dist/assets/Collection-D-pf6tmY.js b/web/dist/assets/Collection-D-pf6tmY.js deleted file mode 100644 index c9970c7..0000000 --- a/web/dist/assets/Collection-D-pf6tmY.js +++ /dev/null @@ -1 +0,0 @@ -import{ax as I,ay as $,m as v,g as p,az as j,af as S,d as C,ad as b,ak as g,aA as w,x as k,aB as P}from"./index-D3ZCYstt.js";function T(e,i){const t=typeof e=="string"&&!i?`${e}Context`:i,o=Symbol(t);return[a=>{const c=I(o,a);if(c||c===null)return c;throw new Error(`Injection \`${o.toString()}\` not found. Component must be used within ${Array.isArray(e)?`one of the following components: ${e.join(", ")}`:`\`${e}\``}`)},a=>($(o,a),a)]}function D(){let e=document.activeElement;if(e==null)return null;for(;e!=null&&e.shadowRoot!=null&&e.shadowRoot.activeElement!=null;)e=e.shadowRoot.activeElement;return e}const[h]=T("ConfigProvider");function _(e){const i=h({dir:v("ltr")});return p(()=>{var t;return(e==null?void 0:e.value)||((t=i.dir)==null?void 0:t.value)||"ltr"})}function K(e,i="reka"){var n;let t;const o=h({useId:void 0});return o.useId?t=o.useId():t=(n=j)==null?void 0:n(),i?`${i}-${t}`:t}function x(){const e=v(),i=p(()=>{var t,o;return["#text","#comment"].includes((t=e.value)==null?void 0:t.$el.nodeName)?(o=e.value)==null?void 0:o.$el.nextElementSibling:S(e)});return{primitiveElement:e,currentElement:i}}const A="data-reka-collection-item";function q(e={}){const{key:i="",isProvider:t=!1}=e,o=`${i}CollectionProvider`;let n;if(t){const u=v(new Map);n={collectionRef:v(),itemMap:u},$(o,n)}else n=I(o);const y=(u=!1)=>{const r=n.collectionRef.value;if(!r)return[];const f=Array.from(r.querySelectorAll(`[${A}]`)),m=new Map(f.map((l,E)=>[l,E])),d=Array.from(n.itemMap.value.values()).sort((l,E)=>(m.get(l.ref)??-1)-(m.get(E.ref)??-1));return u?d:d.filter(l=>l.ref.dataset.disabled!=="")},a=C({name:"CollectionSlot",inheritAttrs:!1,setup(u,{slots:r,attrs:f}){const{primitiveElement:m,currentElement:s}=x();return k(s,()=>{n.collectionRef.value=s.value}),()=>g(w,{ref:m,...f},r)}}),c=C({name:"CollectionItem",inheritAttrs:!1,props:{value:{validator:()=>!0}},setup(u,{slots:r,attrs:f}){const{primitiveElement:m,currentElement:s}=x();return b(d=>{if(s.value){const l=P(s.value);n.itemMap.value.set(l,{ref:s.value,value:u.value}),d(()=>n.itemMap.value.delete(l))}}),()=>g(w,{...f,[A]:"",ref:m},r)}}),M=p(()=>Array.from(n.itemMap.value.values())),R=p(()=>n.itemMap.value.size);return{getItems:y,reactiveItems:M,itemMapSize:R,CollectionSlot:a,CollectionItem:c}}export{_ as a,q as b,T as c,K as d,D as g,h as i,x as u}; diff --git a/web/dist/assets/DashboardView-BnrlcswN.js b/web/dist/assets/DashboardView-BD4i_GCA.js similarity index 96% rename from web/dist/assets/DashboardView-BnrlcswN.js rename to web/dist/assets/DashboardView-BD4i_GCA.js index f5e13e1..e48400a 100644 --- a/web/dist/assets/DashboardView-BnrlcswN.js +++ b/web/dist/assets/DashboardView-BD4i_GCA.js @@ -1,4 +1,4 @@ -import{c as A,d as H,o as c,a as r,F as w,r as M,b as l,n as q,e as C,u as e,f as W,t as n,g as b,h as X,w as u,_ as z,i as ee,j as S,k as v,l as s,m as Q,p as t,T as te,q as le,s as se,v as ae}from"./index-D3ZCYstt.js";import{c as y,t as oe,p as ne,d as ue}from"./format-B6sc_rZ4.js";import{A as ce,_ as de}from"./EventItem.vue_vue_type_script_setup_true_lang-DS497KtL.js";import{_ as re}from"./PageHeader.vue_vue_type_script_setup_true_lang-CDyKzgiP.js";import{_ as j,a as P,b as Z,c as T}from"./CardTitle.vue_vue_type_script_setup_true_lang-BcE23HB-.js";import{_ as ie}from"./Skeleton.vue_vue_type_script_setup_true_lang-C9uTg8Ty.js";import{_ as me,a as pe,b as G}from"./TabsTrigger.vue_vue_type_script_setup_true_lang-DTNukDpV.js";import"./Badge.vue_vue_type_script_setup_true_lang--8bF8KCa.js";import"./Collection-D-pf6tmY.js";/** +import{c as A,d as H,o as c,a as r,F as w,r as M,b as l,n as q,e as C,u as e,f as W,t as n,g as b,h as X,w as u,_ as z,i as ee,j as S,k as v,l as s,m as Q,p as t,T as te,q as le,s as se,v as ae}from"./index-BKPz7Obh.js";import{c as y,t as oe,p as ne,d as ue}from"./format-B6sc_rZ4.js";import{A as ce,_ as de}from"./EventItem.vue_vue_type_script_setup_true_lang-JeqwaMaY.js";import{_ as re}from"./PageHeader.vue_vue_type_script_setup_true_lang-CPDhGTO6.js";import{_ as j,a as P,b as Z,c as T}from"./CardTitle.vue_vue_type_script_setup_true_lang-BHtPbA-o.js";import{_ as ie}from"./Skeleton.vue_vue_type_script_setup_true_lang-DG3HTLWx.js";import{_ as me,a as pe,b as G}from"./TabsTrigger.vue_vue_type_script_setup_true_lang-_qQ6JBVg.js";import"./Badge.vue_vue_type_script_setup_true_lang-i2F91fYk.js";import"./Collection-BaXBMWO5.js";/** * @license lucide-vue-next v0.469.0 - ISC * * This source code is licensed under the ISC license. diff --git a/web/dist/assets/EventItem.vue_vue_type_script_setup_true_lang-DS497KtL.js b/web/dist/assets/EventItem.vue_vue_type_script_setup_true_lang-JeqwaMaY.js similarity index 92% rename from web/dist/assets/EventItem.vue_vue_type_script_setup_true_lang-DS497KtL.js rename to web/dist/assets/EventItem.vue_vue_type_script_setup_true_lang-JeqwaMaY.js index 387be7e..42810af 100644 --- a/web/dist/assets/EventItem.vue_vue_type_script_setup_true_lang-DS497KtL.js +++ b/web/dist/assets/EventItem.vue_vue_type_script_setup_true_lang-JeqwaMaY.js @@ -1,4 +1,4 @@ -import{_ as a}from"./Badge.vue_vue_type_script_setup_true_lang--8bF8KCa.js";import{c as h,d as x,o,h as m,u as t,w as c,k as i,t as n,g as v,l as d,a as k,b as r,p,j as f}from"./index-D3ZCYstt.js";import{t as b,e as _}from"./format-B6sc_rZ4.js";/** +import{_ as a}from"./Badge.vue_vue_type_script_setup_true_lang-i2F91fYk.js";import{c as h,d as x,o,h as m,u as t,w as c,k as i,t as n,g as v,l as d,a as k,b as r,p,j as f}from"./index-BKPz7Obh.js";import{t as b,e as _}from"./format-B6sc_rZ4.js";/** * @license lucide-vue-next v0.469.0 - ISC * * This source code is licensed under the ISC license. diff --git a/web/dist/assets/EventsView-Blmx8SEw.js b/web/dist/assets/EventsView-Blmx8SEw.js new file mode 100644 index 0000000..0786c87 --- /dev/null +++ b/web/dist/assets/EventsView-Blmx8SEw.js @@ -0,0 +1,16 @@ +import{_ as D,a as F}from"./EventItem.vue_vue_type_script_setup_true_lang-JeqwaMaY.js";import{_ as J}from"./PageHeader.vue_vue_type_script_setup_true_lang-CPDhGTO6.js";import{_ as N}from"./Badge.vue_vue_type_script_setup_true_lang-i2F91fYk.js";import{c as V,d as A,x as M,a as i,p as r,w as c,u as e,l as t,b as l,y as G,t as s,j as p,_ as H,m as f,g as _,o as n,s as g,h as P,k,F as x,r as S,z as T,A as K,q as Q}from"./index-BKPz7Obh.js";import{S as R,_ as W,T as X}from"./Modal.vue_vue_type_script_setup_true_lang-Bd1uxkqS.js";import{_ as O}from"./Select.vue_vue_type_script_setup_true_lang-CONzBLld.js";import{a as Y,e as U}from"./format-B6sc_rZ4.js";import"./Collection-BaXBMWO5.js";/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z=V("CopyIcon",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ee=V("PauseIcon",[["rect",{x:"14",y:"4",width:"4",height:"16",rx:"1",key:"zuxfzm"}],["rect",{x:"6",y:"4",width:"4",height:"16",rx:"1",key:"1okwgv"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const te=V("PlayIcon",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]),se={class:"hidden sm:inline"},le={class:"hidden sm:inline"},ae={class:"mb-3 flex flex-col gap-2 sm:flex-row"},oe={class:"relative flex-1"},ne={class:"grid grid-cols-2 gap-2 sm:flex"},re={key:0,class:"text-muted-foreground mb-2 flex items-center justify-between gap-2 text-xs"},ue={key:0},ie={key:0,class:"flex flex-col"},de={key:1,class:"text-muted-foreground py-12 text-center text-sm"},ce={key:0,class:"flex flex-col gap-3 text-sm"},ve={class:"flex flex-wrap items-center gap-2"},me={class:"text-muted-foreground text-xs"},pe={class:"grid grid-cols-[auto_1fr] gap-x-4 gap-y-2 text-xs sm:text-sm"},fe={class:"text-muted-foreground"},_e={class:"font-mono break-all"},xe={class:"text-muted-foreground"},he={class:"font-mono break-all"},ye={class:"text-muted-foreground"},ge={class:"font-mono break-all"},ke={class:"text-muted-foreground"},be={class:"font-mono break-all"},we={class:"text-muted-foreground"},Ce={class:"break-all"},Pe={class:"text-muted-foreground"},Ve={class:"text-destructive break-all"},ze={class:"text-muted-foreground mb-1.5 text-xs font-medium"},$e={key:0,class:"flex flex-col gap-2"},Ie={class:"border-b px-2.5 py-1.5 text-xs font-medium"},Le={class:"overflow-x-auto px-2.5 py-2 font-mono text-[11px] leading-relaxed"},Ne={key:1,class:"text-muted-foreground text-xs"},Fe=A({__name:"EventsView",setup(Se){const{events:b}=Q(),v=f(!1),h=f([]),w=f(""),m=f("all"),y=f("all"),a=f(null);M(v,d=>{h.value=d?b.value:[]});const z=_(()=>v.value?h.value:b.value),$=_(()=>v.value?Math.max(0,b.value.length-h.value.length):0),I=_(()=>{const d=w.value.trim().toLowerCase();return z.value.filter(o=>{if(m.value!=="all"){if(m.value==="log"||m.value==="error"){if(o.kind!==m.value)return!1}else if(o.kind!=="action"||o.action!==m.value)return!1}return y.value!=="all"&&o.proto!==y.value?!1:d?o.srcIP.toLowerCase().includes(d)||o.dstIP.toLowerCase().includes(d)||(o.host??"").toLowerCase().includes(d)||(o.rule??"").toLowerCase().includes(d):!0})}),j=_(()=>[{value:"all",label:t("common.all")},{value:"block",label:t("action.block")},{value:"drop",label:t("action.drop")},{value:"allow",label:t("action.allow")},{value:"modify",label:t("action.modify")},{value:"log",label:t("action.log")},{value:"error",label:t("action.error")}]),q=_(()=>[{value:"all",label:t("common.all")},{value:"tcp",label:"TCP"},{value:"udp",label:"UDP"}]),L=_(()=>{var d;return Object.entries(((d=a.value)==null?void 0:d.props)??{})});async function B(){if(a.value)try{await navigator.clipboard.writeText(JSON.stringify(a.value,null,2)),T.success(t("common.copied"))}catch{T.error(t("common.error"))}}function E(){K(),h.value=[]}return(d,o)=>(n(),i("div",null,[r(J,{title:e(t)("events.title"),description:e(t)("events.subtitle")},{actions:c(()=>[r(e(g),{variant:"outline",size:"sm",onClick:o[0]||(o[0]=u=>v.value=!v.value)},{default:c(()=>[v.value?(n(),P(e(te),{key:0,class:"size-3.5"})):(n(),P(e(ee),{key:1,class:"size-3.5"})),l("span",se,s(v.value?e(t)("events.resume"):e(t)("events.pause")),1)]),_:1}),r(e(g),{variant:"outline",size:"sm",onClick:E},{default:c(()=>[r(e(X),{class:"size-3.5"}),l("span",le,s(e(t)("events.clear")),1)]),_:1})]),_:1},8,["title","description"]),l("div",ae,[l("div",oe,[r(e(R),{class:"text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2"}),r(e(G),{modelValue:w.value,"onUpdate:modelValue":o[1]||(o[1]=u=>w.value=u),placeholder:e(t)("events.searchPlaceholder"),class:"pl-9",type:"search"},null,8,["modelValue","placeholder"])]),l("div",ne,[r(e(O),{modelValue:m.value,"onUpdate:modelValue":o[2]||(o[2]=u=>m.value=u),options:j.value,"aria-label":e(t)("events.filterAction"),class:"sm:w-32"},null,8,["modelValue","options","aria-label"]),r(e(O),{modelValue:y.value,"onUpdate:modelValue":o[3]||(o[3]=u=>y.value=u),options:q.value,"aria-label":e(t)("events.filterProto"),class:"sm:w-28"},null,8,["modelValue","options","aria-label"])])]),v.value?(n(),i("div",re,[r(e(N),{variant:"drop"},{default:c(()=>[k(s(e(t)("events.paused")),1)]),_:1}),$.value>0?(n(),i("span",ue,s(e(t)("events.buffered",{n:$.value})),1)):p("",!0)])):p("",!0),r(e(H),{class:"px-1.5 py-1.5 sm:px-2.5"},{default:c(()=>[I.value.length?(n(),i("div",ie,[(n(!0),i(x,null,S(I.value,u=>(n(),P(D,{key:u.seq,event:u,onSelect:o[4]||(o[4]=C=>a.value=C)},null,8,["event"]))),128))])):(n(),i("p",de,s(z.value.length?e(t)("events.emptyFiltered"):e(t)("events.empty")),1))]),_:1}),r(e(W),{open:a.value!==null,title:e(t)("events.detail"),"onUpdate:open":o[6]||(o[6]=u=>!u&&(a.value=null))},{footer:c(()=>[r(e(g),{variant:"outline",onClick:B},{default:c(()=>[r(e(Z),{class:"size-4"}),k(" "+s(e(t)("events.copyJson")),1)]),_:1}),r(e(g),{onClick:o[5]||(o[5]=u=>a.value=null)},{default:c(()=>[k(s(e(t)("common.close")),1)]),_:1})]),default:c(()=>[a.value?(n(),i("div",ce,[l("div",ve,[r(F,{event:a.value},null,8,["event"]),r(e(N),{variant:a.value.proto==="udp"?"udp":"tcp",class:"uppercase"},{default:c(()=>[k(s(a.value.proto),1)]),_:1},8,["variant"]),l("span",me,s(e(Y)(a.value.time)),1)]),l("dl",pe,[l("dt",fe,s(e(t)("events.stream")),1),l("dd",_e,s(a.value.id),1),l("dt",xe,s(e(t)("events.source")),1),l("dd",he,s(e(U)(a.value.srcIP,a.value.srcPort)),1),l("dt",ye,s(e(t)("events.destination")),1),l("dd",ge,s(e(U)(a.value.dstIP,a.value.dstPort)),1),a.value.host?(n(),i(x,{key:0},[l("dt",ke,s(e(t)("events.host")),1),l("dd",be,s(a.value.host),1)],64)):p("",!0),a.value.rule?(n(),i(x,{key:1},[l("dt",we,s(e(t)("events.rule")),1),l("dd",Ce,s(a.value.rule),1)],64)):p("",!0),a.value.message?(n(),i(x,{key:2},[l("dt",Pe,s(e(t)("common.error")),1),l("dd",Ve,s(a.value.message),1)],64)):p("",!0)]),l("div",null,[l("p",ze,s(e(t)("events.props")),1),L.value.length?(n(),i("div",$e,[(n(!0),i(x,null,S(L.value,([u,C])=>(n(),i("div",{key:u,class:"rounded-lg border"},[l("div",Ie,s(u),1),l("pre",Le,s(JSON.stringify(C,null,2)),1)]))),128))])):(n(),i("p",Ne,s(e(t)("events.noProps")),1))])])):p("",!0)]),_:1},8,["open","title"])]))}});export{Fe as default}; diff --git a/web/dist/assets/EventsView-DvVZcEec.js b/web/dist/assets/EventsView-DvVZcEec.js deleted file mode 100644 index 05cd279..0000000 --- a/web/dist/assets/EventsView-DvVZcEec.js +++ /dev/null @@ -1,21 +0,0 @@ -import{_ as D,a as F}from"./EventItem.vue_vue_type_script_setup_true_lang-DS497KtL.js";import{_ as J}from"./PageHeader.vue_vue_type_script_setup_true_lang-CDyKzgiP.js";import{_ as q}from"./Badge.vue_vue_type_script_setup_true_lang--8bF8KCa.js";import{c as b,d as A,x as M,a as i,p as r,w as d,u as e,l as t,b as l,y as G,t as s,j as p,_ as H,m as f,g as _,o as n,s as g,h as V,k,F as x,r as N,z as S,A as K,q as Q}from"./index-D3ZCYstt.js";import{_ as R,T as W}from"./Modal.vue_vue_type_script_setup_true_lang-gNNtNPLv.js";import{_ as T}from"./Select.vue_vue_type_script_setup_true_lang-C15l-n0X.js";import{a as X,e as j}from"./format-B6sc_rZ4.js";import"./Collection-D-pf6tmY.js";/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Y=b("CopyIcon",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Z=b("PauseIcon",[["rect",{x:"14",y:"4",width:"4",height:"16",rx:"1",key:"zuxfzm"}],["rect",{x:"6",y:"4",width:"4",height:"16",rx:"1",key:"1okwgv"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ee=b("PlayIcon",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const te=b("SearchIcon",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]),se={class:"hidden sm:inline"},le={class:"hidden sm:inline"},ae={class:"mb-3 flex flex-col gap-2 sm:flex-row"},oe={class:"relative flex-1"},ne={class:"grid grid-cols-2 gap-2 sm:flex"},re={key:0,class:"text-muted-foreground mb-2 flex items-center justify-between gap-2 text-xs"},ue={key:0},ie={key:0,class:"flex flex-col"},ce={key:1,class:"text-muted-foreground py-12 text-center text-sm"},de={key:0,class:"flex flex-col gap-3 text-sm"},ve={class:"flex flex-wrap items-center gap-2"},me={class:"text-muted-foreground text-xs"},pe={class:"grid grid-cols-[auto_1fr] gap-x-4 gap-y-2 text-xs sm:text-sm"},fe={class:"text-muted-foreground"},_e={class:"font-mono break-all"},xe={class:"text-muted-foreground"},he={class:"font-mono break-all"},ye={class:"text-muted-foreground"},ge={class:"font-mono break-all"},ke={class:"text-muted-foreground"},be={class:"font-mono break-all"},we={class:"text-muted-foreground"},Ce={class:"break-all"},Pe={class:"text-muted-foreground"},Ve={class:"text-destructive break-all"},ze={class:"text-muted-foreground mb-1.5 text-xs font-medium"},$e={key:0,class:"flex flex-col gap-2"},Ie={class:"border-b px-2.5 py-1.5 text-xs font-medium"},Le={class:"overflow-x-auto px-2.5 py-2 font-mono text-[11px] leading-relaxed"},qe={key:1,class:"text-muted-foreground text-xs"},Fe=A({__name:"EventsView",setup(Ne){const{events:w}=Q(),v=f(!1),h=f([]),C=f(""),m=f("all"),y=f("all"),a=f(null);M(v,c=>{h.value=c?w.value:[]});const z=_(()=>v.value?h.value:w.value),$=_(()=>v.value?Math.max(0,w.value.length-h.value.length):0),I=_(()=>{const c=C.value.trim().toLowerCase();return z.value.filter(o=>{if(m.value!=="all"){if(m.value==="log"||m.value==="error"){if(o.kind!==m.value)return!1}else if(o.kind!=="action"||o.action!==m.value)return!1}return y.value!=="all"&&o.proto!==y.value?!1:c?o.srcIP.toLowerCase().includes(c)||o.dstIP.toLowerCase().includes(c)||(o.host??"").toLowerCase().includes(c)||(o.rule??"").toLowerCase().includes(c):!0})}),O=_(()=>[{value:"all",label:t("common.all")},{value:"block",label:t("action.block")},{value:"drop",label:t("action.drop")},{value:"allow",label:t("action.allow")},{value:"modify",label:t("action.modify")},{value:"log",label:t("action.log")},{value:"error",label:t("action.error")}]),U=_(()=>[{value:"all",label:t("common.all")},{value:"tcp",label:"TCP"},{value:"udp",label:"UDP"}]),L=_(()=>{var c;return Object.entries(((c=a.value)==null?void 0:c.props)??{})});async function B(){if(a.value)try{await navigator.clipboard.writeText(JSON.stringify(a.value,null,2)),S.success(t("common.copied"))}catch{S.error(t("common.error"))}}function E(){K(),h.value=[]}return(c,o)=>(n(),i("div",null,[r(J,{title:e(t)("events.title"),description:e(t)("events.subtitle")},{actions:d(()=>[r(e(g),{variant:"outline",size:"sm",onClick:o[0]||(o[0]=u=>v.value=!v.value)},{default:d(()=>[v.value?(n(),V(e(ee),{key:0,class:"size-3.5"})):(n(),V(e(Z),{key:1,class:"size-3.5"})),l("span",se,s(v.value?e(t)("events.resume"):e(t)("events.pause")),1)]),_:1}),r(e(g),{variant:"outline",size:"sm",onClick:E},{default:d(()=>[r(e(W),{class:"size-3.5"}),l("span",le,s(e(t)("events.clear")),1)]),_:1})]),_:1},8,["title","description"]),l("div",ae,[l("div",oe,[r(e(te),{class:"text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2"}),r(e(G),{modelValue:C.value,"onUpdate:modelValue":o[1]||(o[1]=u=>C.value=u),placeholder:e(t)("events.searchPlaceholder"),class:"pl-9",type:"search"},null,8,["modelValue","placeholder"])]),l("div",ne,[r(e(T),{modelValue:m.value,"onUpdate:modelValue":o[2]||(o[2]=u=>m.value=u),options:O.value,"aria-label":e(t)("events.filterAction"),class:"sm:w-32"},null,8,["modelValue","options","aria-label"]),r(e(T),{modelValue:y.value,"onUpdate:modelValue":o[3]||(o[3]=u=>y.value=u),options:U.value,"aria-label":e(t)("events.filterProto"),class:"sm:w-28"},null,8,["modelValue","options","aria-label"])])]),v.value?(n(),i("div",re,[r(e(q),{variant:"drop"},{default:d(()=>[k(s(e(t)("events.paused")),1)]),_:1}),$.value>0?(n(),i("span",ue,s(e(t)("events.buffered",{n:$.value})),1)):p("",!0)])):p("",!0),r(e(H),{class:"px-1.5 py-1.5 sm:px-2.5"},{default:d(()=>[I.value.length?(n(),i("div",ie,[(n(!0),i(x,null,N(I.value,u=>(n(),V(D,{key:u.seq,event:u,onSelect:o[4]||(o[4]=P=>a.value=P)},null,8,["event"]))),128))])):(n(),i("p",ce,s(z.value.length?e(t)("events.emptyFiltered"):e(t)("events.empty")),1))]),_:1}),r(e(R),{open:a.value!==null,title:e(t)("events.detail"),"onUpdate:open":o[6]||(o[6]=u=>!u&&(a.value=null))},{footer:d(()=>[r(e(g),{variant:"outline",onClick:B},{default:d(()=>[r(e(Y),{class:"size-4"}),k(" "+s(e(t)("events.copyJson")),1)]),_:1}),r(e(g),{onClick:o[5]||(o[5]=u=>a.value=null)},{default:d(()=>[k(s(e(t)("common.close")),1)]),_:1})]),default:d(()=>[a.value?(n(),i("div",de,[l("div",ve,[r(F,{event:a.value},null,8,["event"]),r(e(q),{variant:a.value.proto==="udp"?"udp":"tcp",class:"uppercase"},{default:d(()=>[k(s(a.value.proto),1)]),_:1},8,["variant"]),l("span",me,s(e(X)(a.value.time)),1)]),l("dl",pe,[l("dt",fe,s(e(t)("events.stream")),1),l("dd",_e,s(a.value.id),1),l("dt",xe,s(e(t)("events.source")),1),l("dd",he,s(e(j)(a.value.srcIP,a.value.srcPort)),1),l("dt",ye,s(e(t)("events.destination")),1),l("dd",ge,s(e(j)(a.value.dstIP,a.value.dstPort)),1),a.value.host?(n(),i(x,{key:0},[l("dt",ke,s(e(t)("events.host")),1),l("dd",be,s(a.value.host),1)],64)):p("",!0),a.value.rule?(n(),i(x,{key:1},[l("dt",we,s(e(t)("events.rule")),1),l("dd",Ce,s(a.value.rule),1)],64)):p("",!0),a.value.message?(n(),i(x,{key:2},[l("dt",Pe,s(e(t)("common.error")),1),l("dd",Ve,s(a.value.message),1)],64)):p("",!0)]),l("div",null,[l("p",ze,s(e(t)("events.props")),1),L.value.length?(n(),i("div",$e,[(n(!0),i(x,null,N(L.value,([u,P])=>(n(),i("div",{key:u,class:"rounded-lg border"},[l("div",Ie,s(u),1),l("pre",Le,s(JSON.stringify(P,null,2)),1)]))),128))])):(n(),i("p",qe,s(e(t)("events.noProps")),1))])])):p("",!0)]),_:1},8,["open","title"])]))}});export{Fe as default}; diff --git a/web/dist/assets/Modal.vue_vue_type_script_setup_true_lang-gNNtNPLv.js b/web/dist/assets/Modal.vue_vue_type_script_setup_true_lang-Bd1uxkqS.js similarity index 73% rename from web/dist/assets/Modal.vue_vue_type_script_setup_true_lang-gNNtNPLv.js rename to web/dist/assets/Modal.vue_vue_type_script_setup_true_lang-Bd1uxkqS.js index 2c5688f..392f46f 100644 --- a/web/dist/assets/Modal.vue_vue_type_script_setup_true_lang-gNNtNPLv.js +++ b/web/dist/assets/Modal.vue_vue_type_script_setup_true_lang-Bd1uxkqS.js @@ -1,6 +1,11 @@ -import{c as V,d as y,E as N,D as S,H as g,u as e,m as w,G as O,o as m,h as _,w as p,C as D,P,K as j,p as C,x as I,g as E,W as k,X as x,J as z,j as M,Y as L,Z as U,e as X,f as G,b as h,k as $,t as A,$ as J,a as W}from"./index-D3ZCYstt.js";import{c as Y,d as R,g as H}from"./Collection-D-pf6tmY.js";import{D as Z,g as Q,F as ee,a as F,b as te,P as T,c as oe,T as se}from"./Select.vue_vue_type_script_setup_true_lang-C15l-n0X.js";/** +import{c as T,d as y,G as K,E as N,H as g,u as e,m as w,R as O,o as m,h as _,w as p,D,P as k,O as j,p as C,x as I,g as E,a6 as P,a7 as x,M as z,j as M,V as L,W as U,e as G,f as W,b as B,k as $,t as A,Z as X,a as Z}from"./index-BKPz7Obh.js";import{c as J,d as R,g as H}from"./Collection-BaXBMWO5.js";import{D as Q,m as Y,F as ee,n as F,e as te,k as S,c as oe,T as se}from"./Select.vue_vue_type_script_setup_true_lang-CONzBLld.js";/** * @license lucide-vue-next v0.469.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const $e=V("Trash2Icon",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]),[b,ae]=Y("DialogRoot");var re=y({inheritAttrs:!1,__name:"DialogRoot",props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1,default:!1},modal:{type:Boolean,required:!1,default:!0},unmountOnHide:{type:Boolean,required:!1,default:!0}},emits:["update:open"],setup(u,{emit:r}){const o=u,t=N(o,"open",r,{defaultValue:o.defaultOpen,passive:o.open===void 0}),n=w(),f=w(),{modal:i,unmountOnHide:d}=S(o);return ae({open:t,modal:i,unmountOnHide:d,openModal:()=>{t.value=!0},onOpenChange:a=>{t.value=a},onOpenToggle:()=>{t.value=!t.value},contentId:"",titleId:"",descriptionId:"",triggerElement:n,contentElement:f}),(a,c)=>g(a.$slots,"default",{open:e(t),close:()=>t.value=!1})}}),ne=re,le=y({__name:"DialogClose",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(u){const r=u;O();const o=b();return(s,t)=>(m(),_(e(P),D(r,{type:s.as==="button"?"button":void 0,onClick:t[0]||(t[0]=n=>e(o).onOpenChange(!1))}),{default:p(()=>[g(s.$slots,"default")]),_:3},16,["type"]))}}),ue=le,ie=y({__name:"DialogContentImpl",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(u,{emit:r}){const o=u,s=r,t=b(),{forwardRef:n,currentElement:f}=O();return t.titleId||(t.titleId=R(void 0,"reka-dialog-title")),t.descriptionId||(t.descriptionId=R(void 0,"reka-dialog-description")),j(()=>{t.contentElement=f,H()!==document.body&&(t.triggerElement.value=H())}),(i,d)=>(m(),_(e(ee),{"as-child":"",loop:"",trapped:o.trapFocus,present:o.present,onMountAutoFocus:d[5]||(d[5]=a=>s("openAutoFocus",a)),onUnmountAutoFocus:d[6]||(d[6]=a=>s("closeAutoFocus",a))},{default:p(()=>[C(e(Z),D({id:e(t).contentId,ref:e(n),as:i.as,"as-child":i.asChild,present:o.present,"disable-outside-pointer-events":i.disableOutsidePointerEvents,role:"dialog","aria-describedby":e(t).descriptionId,"aria-labelledby":e(t).titleId,"data-state":e(Q)(e(t).open.value)},i.$attrs,{onDismiss:d[0]||(d[0]=a=>e(t).onOpenChange(!1)),onEscapeKeyDown:d[1]||(d[1]=a=>s("escapeKeyDown",a)),onFocusOutside:d[2]||(d[2]=a=>s("focusOutside",a)),onInteractOutside:d[3]||(d[3]=a=>s("interactOutside",a)),onPointerDownOutside:d[4]||(d[4]=a=>s("pointerDownOutside",a))}),{default:p(()=>[g(i.$slots,"default")]),_:3},16,["id","as","as-child","present","disable-outside-pointer-events","aria-describedby","aria-labelledby","data-state"])]),_:3},8,["trapped","present"]))}}),K=ie,de=y({__name:"DialogContentModal",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!0}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(u,{emit:r}){const o=u,s=r,t=b(),n=F(s),{forwardRef:f,currentElement:i}=O(),d=E(()=>o.present?i.value:void 0);te(d);const a=E(()=>{const{present:c,...l}=o;return l});return I(()=>o.present,(c,l)=>{var v;!c&&l&&((v=t.triggerElement.value)==null||v.focus())}),(c,l)=>(m(),_(K,D({...a.value,...e(n)},{ref:e(f),present:c.present,"trap-focus":e(t).open.value,"disable-outside-pointer-events":o.disableOutsidePointerEvents,onCloseAutoFocus:l[0]||(l[0]=v=>{var q;v.defaultPrevented||(v.preventDefault(),(q=e(t).triggerElement.value)==null||q.focus())}),onPointerDownOutside:l[1]||(l[1]=v=>{const q=v.detail.originalEvent,B=q.button===0&&q.ctrlKey===!0;(q.button===2||B)&&v.preventDefault()}),onFocusOutside:l[2]||(l[2]=v=>{v.preventDefault()})}),{default:p(()=>[g(c.$slots,"default")]),_:3},16,["present","trap-focus","disable-outside-pointer-events"]))}}),pe=de,fe=y({__name:"DialogContentNonModal",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!0}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(u,{emit:r}){const o=u,t=F(r);O();const n=b(),f=w(!1),i=w(!1),d=E(()=>{const{present:a,...c}=o;return c});return I(()=>o.present,(a,c)=>{var l;!a&&c&&(f.value||(l=n.triggerElement.value)==null||l.focus(),f.value=!1,i.value=!1)}),(a,c)=>(m(),_(K,D({...d.value,...e(t)},{present:a.present,"trap-focus":!1,"disable-outside-pointer-events":!1,onCloseAutoFocus:c[0]||(c[0]=l=>{var v;l.defaultPrevented||(f.value||(v=e(n).triggerElement.value)==null||v.focus(),l.preventDefault()),f.value=!1,i.value=!1}),onInteractOutside:c[1]||(c[1]=l=>{var B;l.defaultPrevented||(f.value=!0,l.detail.originalEvent.type==="pointerdown"&&(i.value=!0));const v=l.target;((B=e(n).triggerElement.value)==null?void 0:B.contains(v))&&l.preventDefault(),l.detail.originalEvent.type==="focusin"&&i.value&&l.preventDefault()})}),{default:p(()=>[g(a.$slots,"default")]),_:3},16,["present"]))}}),ce=fe,ve=y({__name:"DialogContent",props:{forceMount:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1,default:void 0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(u,{emit:r}){const o=u,s=r,t=b(),n=F(s),{forwardRef:f}=O();return(i,d)=>(m(),_(e(T),{present:i.forceMount||e(t).open.value,"force-mount":i.forceMount||!e(t).unmountOnHide.value},{default:p(({present:a})=>[e(t).modal.value?k((m(),_(pe,D({key:0,ref:e(f),present:e(t).unmountOnHide.value||a},{...o,...e(n),...i.$attrs}),{default:p(()=>[g(i.$slots,"default")]),_:2},1040,["present"])),[[x,e(t).unmountOnHide.value||a]]):k((m(),_(ce,D({key:1,ref:e(f),present:e(t).unmountOnHide.value||a},{...o,...e(n),...i.$attrs}),{default:p(()=>[g(i.$slots,"default")]),_:2},1040,["present"])),[[x,e(t).unmountOnHide.value||a]])]),_:3},8,["present","force-mount"]))}}),me=ve,_e=y({__name:"DialogDescription",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"p"}},setup(u){const r=u;O();const o=b();return(s,t)=>(m(),_(e(P),D(r,{id:e(o).descriptionId}),{default:p(()=>[g(s.$slots,"default")]),_:3},16,["id"]))}}),ge=_e,ye=y({__name:"DialogOverlayImpl",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!1,default:!0}},setup(u){const r=u,o=b(),s=oe(r.present);return I(()=>r.present,t=>s.value=t),O(),(t,n)=>(m(),_(e(P),{as:t.as,"as-child":t.asChild,"data-state":e(o).open.value?"open":"closed",style:{"pointer-events":"auto"},onPointerdown:n[0]||(n[0]=z(()=>{},["left","self","prevent"]))},{default:p(()=>[g(t.$slots,"default")]),_:3},8,["as","as-child","data-state"]))}}),De=ye,Oe=y({__name:"DialogOverlay",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(u){const r=b(),{forwardRef:o}=O();return(s,t)=>{var n;return(n=e(r))!=null&&n.modal.value?(m(),_(e(T),{key:0,present:s.forceMount||e(r).open.value,"force-mount":s.forceMount||!e(r).unmountOnHide.value},{default:p(({present:f})=>[k(C(De,D(s.$attrs,{ref:e(o),as:s.as,"as-child":s.asChild,present:e(r).unmountOnHide.value||f}),{default:p(()=>[g(s.$slots,"default")]),_:2},1040,["as","as-child","present"]),[[x,e(r).unmountOnHide.value||f]])]),_:3},8,["present","force-mount"])):M("v-if",!0)}}}),be=Oe,Ce=y({__name:"DialogPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(u){const r=u;return(o,s)=>(m(),_(e(se),L(U(r)),{default:p(()=>[g(o.$slots,"default")]),_:3},16))}}),qe=Ce,Be=y({__name:"DialogTitle",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"h2"}},setup(u){const r=u,o=b();return O(),(s,t)=>(m(),_(e(P),D(r,{id:e(o).titleId}),{default:p(()=>[g(s.$slots,"default")]),_:3},16,["id"]))}}),he=Be;const we={class:"flex items-start justify-between gap-4"},Pe={class:"flex flex-col gap-1"},Ee={class:"min-h-0 flex-1 overflow-y-auto"},ke={key:0,class:"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end"},Ae=y({__name:"Modal",props:{open:{type:Boolean},title:{},description:{},class:{}},emits:["update:open"],setup(u,{emit:r}){const o=u,s=r;return(t,n)=>(m(),_(e(ne),{open:o.open,"onUpdate:open":n[0]||(n[0]=f=>s("update:open",f))},{default:p(()=>[C(e(qe),null,{default:p(()=>[C(e(be),{class:"animate-fade-in fixed inset-0 z-50 bg-black/60 backdrop-blur-[2px]"}),C(e(me),{class:X(e(G)("bg-background fixed z-50 flex flex-col gap-4 border shadow-lg outline-none","animate-slide-up inset-x-0 bottom-0 max-h-[92vh] rounded-t-2xl border-b-0 p-4 pb-[max(1rem,env(safe-area-inset-bottom))]","sm:top-1/2 sm:bottom-auto sm:left-1/2 sm:max-h-[85vh] sm:w-full sm:max-w-lg sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-xl sm:border-b sm:p-6",o.class))},{default:p(()=>[n[1]||(n[1]=h("div",{class:"bg-muted-foreground/25 mx-auto -mt-1 mb-1 h-1 w-10 shrink-0 rounded-full sm:hidden"},null,-1)),h("div",we,[h("div",Pe,[C(e(he),{class:"text-base font-semibold"},{default:p(()=>[$(A(o.title),1)]),_:1}),o.description?(m(),_(e(ge),{key:0,class:"text-muted-foreground text-sm"},{default:p(()=>[$(A(o.description),1)]),_:1})):M("",!0)]),C(e(ue),{class:"text-muted-foreground hover:bg-accent hover:text-foreground focus-visible:ring-ring/40 -mt-1 -mr-1 rounded-md p-1.5 transition-colors outline-none focus-visible:ring-[3px]"},{default:p(()=>[C(e(J),{class:"size-4"})]),_:1})]),h("div",Ee,[g(t.$slots,"default")]),t.$slots.footer?(m(),W("div",ke,[g(t.$slots,"footer")])):M("",!0)]),_:3},8,["class"])]),_:3})]),_:3},8,["open"]))}});export{$e as T,Ae as _}; + */const $e=T("SearchIcon",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ae=T("Trash2Icon",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]),[b,ae]=J("DialogRoot");var re=y({inheritAttrs:!1,__name:"DialogRoot",props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1,default:!1},modal:{type:Boolean,required:!1,default:!0},unmountOnHide:{type:Boolean,required:!1,default:!0}},emits:["update:open"],setup(u,{emit:r}){const o=u,t=K(o,"open",r,{defaultValue:o.defaultOpen,passive:o.open===void 0}),n=w(),f=w(),{modal:i,unmountOnHide:d}=N(o);return ae({open:t,modal:i,unmountOnHide:d,openModal:()=>{t.value=!0},onOpenChange:a=>{t.value=a},onOpenToggle:()=>{t.value=!t.value},contentId:"",titleId:"",descriptionId:"",triggerElement:n,contentElement:f}),(a,c)=>g(a.$slots,"default",{open:e(t),close:()=>t.value=!1})}}),ne=re,le=y({__name:"DialogClose",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(u){const r=u;O();const o=b();return(s,t)=>(m(),_(e(k),D(r,{type:s.as==="button"?"button":void 0,onClick:t[0]||(t[0]=n=>e(o).onOpenChange(!1))}),{default:p(()=>[g(s.$slots,"default")]),_:3},16,["type"]))}}),ue=le,ie=y({__name:"DialogContentImpl",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(u,{emit:r}){const o=u,s=r,t=b(),{forwardRef:n,currentElement:f}=O();return t.titleId||(t.titleId=R(void 0,"reka-dialog-title")),t.descriptionId||(t.descriptionId=R(void 0,"reka-dialog-description")),j(()=>{t.contentElement=f,H()!==document.body&&(t.triggerElement.value=H())}),(i,d)=>(m(),_(e(ee),{"as-child":"",loop:"",trapped:o.trapFocus,present:o.present,onMountAutoFocus:d[5]||(d[5]=a=>s("openAutoFocus",a)),onUnmountAutoFocus:d[6]||(d[6]=a=>s("closeAutoFocus",a))},{default:p(()=>[C(e(Q),D({id:e(t).contentId,ref:e(n),as:i.as,"as-child":i.asChild,present:o.present,"disable-outside-pointer-events":i.disableOutsidePointerEvents,role:"dialog","aria-describedby":e(t).descriptionId,"aria-labelledby":e(t).titleId,"data-state":e(Y)(e(t).open.value)},i.$attrs,{onDismiss:d[0]||(d[0]=a=>e(t).onOpenChange(!1)),onEscapeKeyDown:d[1]||(d[1]=a=>s("escapeKeyDown",a)),onFocusOutside:d[2]||(d[2]=a=>s("focusOutside",a)),onInteractOutside:d[3]||(d[3]=a=>s("interactOutside",a)),onPointerDownOutside:d[4]||(d[4]=a=>s("pointerDownOutside",a))}),{default:p(()=>[g(i.$slots,"default")]),_:3},16,["id","as","as-child","present","disable-outside-pointer-events","aria-describedby","aria-labelledby","data-state"])]),_:3},8,["trapped","present"]))}}),V=ie,de=y({__name:"DialogContentModal",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!0}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(u,{emit:r}){const o=u,s=r,t=b(),n=F(s),{forwardRef:f,currentElement:i}=O(),d=E(()=>o.present?i.value:void 0);te(d);const a=E(()=>{const{present:c,...l}=o;return l});return I(()=>o.present,(c,l)=>{var v;!c&&l&&((v=t.triggerElement.value)==null||v.focus())}),(c,l)=>(m(),_(V,D({...a.value,...e(n)},{ref:e(f),present:c.present,"trap-focus":e(t).open.value,"disable-outside-pointer-events":o.disableOutsidePointerEvents,onCloseAutoFocus:l[0]||(l[0]=v=>{var q;v.defaultPrevented||(v.preventDefault(),(q=e(t).triggerElement.value)==null||q.focus())}),onPointerDownOutside:l[1]||(l[1]=v=>{const q=v.detail.originalEvent,h=q.button===0&&q.ctrlKey===!0;(q.button===2||h)&&v.preventDefault()}),onFocusOutside:l[2]||(l[2]=v=>{v.preventDefault()})}),{default:p(()=>[g(c.$slots,"default")]),_:3},16,["present","trap-focus","disable-outside-pointer-events"]))}}),pe=de,fe=y({__name:"DialogContentNonModal",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!0}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(u,{emit:r}){const o=u,t=F(r);O();const n=b(),f=w(!1),i=w(!1),d=E(()=>{const{present:a,...c}=o;return c});return I(()=>o.present,(a,c)=>{var l;!a&&c&&(f.value||(l=n.triggerElement.value)==null||l.focus(),f.value=!1,i.value=!1)}),(a,c)=>(m(),_(V,D({...d.value,...e(t)},{present:a.present,"trap-focus":!1,"disable-outside-pointer-events":!1,onCloseAutoFocus:c[0]||(c[0]=l=>{var v;l.defaultPrevented||(f.value||(v=e(n).triggerElement.value)==null||v.focus(),l.preventDefault()),f.value=!1,i.value=!1}),onInteractOutside:c[1]||(c[1]=l=>{var h;l.defaultPrevented||(f.value=!0,l.detail.originalEvent.type==="pointerdown"&&(i.value=!0));const v=l.target;((h=e(n).triggerElement.value)==null?void 0:h.contains(v))&&l.preventDefault(),l.detail.originalEvent.type==="focusin"&&i.value&&l.preventDefault()})}),{default:p(()=>[g(a.$slots,"default")]),_:3},16,["present"]))}}),ce=fe,ve=y({__name:"DialogContent",props:{forceMount:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1,default:void 0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(u,{emit:r}){const o=u,s=r,t=b(),n=F(s),{forwardRef:f}=O();return(i,d)=>(m(),_(e(S),{present:i.forceMount||e(t).open.value,"force-mount":i.forceMount||!e(t).unmountOnHide.value},{default:p(({present:a})=>[e(t).modal.value?P((m(),_(pe,D({key:0,ref:e(f),present:e(t).unmountOnHide.value||a},{...o,...e(n),...i.$attrs}),{default:p(()=>[g(i.$slots,"default")]),_:2},1040,["present"])),[[x,e(t).unmountOnHide.value||a]]):P((m(),_(ce,D({key:1,ref:e(f),present:e(t).unmountOnHide.value||a},{...o,...e(n),...i.$attrs}),{default:p(()=>[g(i.$slots,"default")]),_:2},1040,["present"])),[[x,e(t).unmountOnHide.value||a]])]),_:3},8,["present","force-mount"]))}}),me=ve,_e=y({__name:"DialogDescription",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"p"}},setup(u){const r=u;O();const o=b();return(s,t)=>(m(),_(e(k),D(r,{id:e(o).descriptionId}),{default:p(()=>[g(s.$slots,"default")]),_:3},16,["id"]))}}),ge=_e,ye=y({__name:"DialogOverlayImpl",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!1,default:!0}},setup(u){const r=u,o=b(),s=oe(r.present);return I(()=>r.present,t=>s.value=t),O(),(t,n)=>(m(),_(e(k),{as:t.as,"as-child":t.asChild,"data-state":e(o).open.value?"open":"closed",style:{"pointer-events":"auto"},onPointerdown:n[0]||(n[0]=z(()=>{},["left","self","prevent"]))},{default:p(()=>[g(t.$slots,"default")]),_:3},8,["as","as-child","data-state"]))}}),De=ye,Oe=y({__name:"DialogOverlay",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(u){const r=b(),{forwardRef:o}=O();return(s,t)=>{var n;return(n=e(r))!=null&&n.modal.value?(m(),_(e(S),{key:0,present:s.forceMount||e(r).open.value,"force-mount":s.forceMount||!e(r).unmountOnHide.value},{default:p(({present:f})=>[P(C(De,D(s.$attrs,{ref:e(o),as:s.as,"as-child":s.asChild,present:e(r).unmountOnHide.value||f}),{default:p(()=>[g(s.$slots,"default")]),_:2},1040,["as","as-child","present"]),[[x,e(r).unmountOnHide.value||f]])]),_:3},8,["present","force-mount"])):M("v-if",!0)}}}),be=Oe,Ce=y({__name:"DialogPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(u){const r=u;return(o,s)=>(m(),_(e(se),L(U(r)),{default:p(()=>[g(o.$slots,"default")]),_:3},16))}}),qe=Ce,he=y({__name:"DialogTitle",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"h2"}},setup(u){const r=u,o=b();return O(),(s,t)=>(m(),_(e(k),D(r,{id:e(o).titleId}),{default:p(()=>[g(s.$slots,"default")]),_:3},16,["id"]))}}),Be=he;const we={class:"flex items-start justify-between gap-4"},ke={class:"flex flex-col gap-1"},Ee={class:"min-h-0 flex-1 overflow-y-auto"},Pe={key:0,class:"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end"},Re=y({__name:"Modal",props:{open:{type:Boolean},title:{},description:{},class:{}},emits:["update:open"],setup(u,{emit:r}){const o=u,s=r;return(t,n)=>(m(),_(e(ne),{open:o.open,"onUpdate:open":n[0]||(n[0]=f=>s("update:open",f))},{default:p(()=>[C(e(qe),null,{default:p(()=>[C(e(be),{class:"animate-fade-in fixed inset-0 z-50 bg-black/60 backdrop-blur-[2px]"}),C(e(me),{class:G(e(W)("bg-background fixed z-50 flex flex-col gap-4 border shadow-lg outline-none","animate-slide-up inset-x-0 bottom-0 max-h-[92vh] rounded-t-2xl border-b-0 p-4 pb-[max(1rem,env(safe-area-inset-bottom))]","sm:top-1/2 sm:bottom-auto sm:left-1/2 sm:max-h-[85vh] sm:w-full sm:max-w-lg sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-xl sm:border-b sm:p-6",o.class))},{default:p(()=>[n[1]||(n[1]=B("div",{class:"bg-muted-foreground/25 mx-auto -mt-1 mb-1 h-1 w-10 shrink-0 rounded-full sm:hidden"},null,-1)),B("div",we,[B("div",ke,[C(e(Be),{class:"text-base font-semibold"},{default:p(()=>[$(A(o.title),1)]),_:1}),o.description?(m(),_(e(ge),{key:0,class:"text-muted-foreground text-sm"},{default:p(()=>[$(A(o.description),1)]),_:1})):M("",!0)]),C(e(ue),{class:"text-muted-foreground hover:bg-accent hover:text-foreground focus-visible:ring-ring/40 -mt-1 -mr-1 rounded-md p-1.5 transition-colors outline-none focus-visible:ring-[3px]"},{default:p(()=>[C(e(X),{class:"size-4"})]),_:1})]),B("div",Ee,[g(t.$slots,"default")]),t.$slots.footer?(m(),Z("div",Pe,[g(t.$slots,"footer")])):M("",!0)]),_:3},8,["class"])]),_:3})]),_:3},8,["open"]))}});export{$e as S,Ae as T,Re as _}; diff --git a/web/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-CDyKzgiP.js b/web/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-CPDhGTO6.js similarity index 90% rename from web/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-CDyKzgiP.js rename to web/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-CPDhGTO6.js index aef7ab2..a0cc132 100644 --- a/web/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-CDyKzgiP.js +++ b/web/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-CPDhGTO6.js @@ -1 +1 @@ -import{d as c,a as t,b as n,t as i,j as a,H as d,o as s}from"./index-D3ZCYstt.js";const l={class:"mb-4 flex flex-wrap items-end justify-between gap-3 sm:mb-6"},m={class:"min-w-0"},p={class:"text-lg font-semibold tracking-tight sm:text-2xl"},_={key:0,class:"text-muted-foreground mt-0.5 text-xs sm:text-sm"},x={key:0,class:"flex shrink-0 items-center gap-2"},g=c({__name:"PageHeader",props:{title:{},description:{}},setup(r){const e=r;return(o,f)=>(s(),t("div",l,[n("div",m,[n("h1",p,i(e.title),1),e.description?(s(),t("p",_,i(e.description),1)):a("",!0)]),o.$slots.actions?(s(),t("div",x,[d(o.$slots,"actions")])):a("",!0)]))}});export{g as _}; +import{d as c,a as t,b as n,t as i,j as a,H as d,o as s}from"./index-BKPz7Obh.js";const l={class:"mb-4 flex flex-wrap items-end justify-between gap-3 sm:mb-6"},m={class:"min-w-0"},p={class:"text-lg font-semibold tracking-tight sm:text-2xl"},_={key:0,class:"text-muted-foreground mt-0.5 text-xs sm:text-sm"},x={key:0,class:"flex shrink-0 items-center gap-2"},g=c({__name:"PageHeader",props:{title:{},description:{}},setup(r){const e=r;return(o,f)=>(s(),t("div",l,[n("div",m,[n("h1",p,i(e.title),1),e.description?(s(),t("p",_,i(e.description),1)):a("",!0)]),o.$slots.actions?(s(),t("div",x,[d(o.$slots,"actions")])):a("",!0)]))}});export{g as _}; diff --git a/web/dist/assets/RulesView-SxOStRNP.js b/web/dist/assets/RulesView-SxOStRNP.js deleted file mode 100644 index fac631a..0000000 --- a/web/dist/assets/RulesView-SxOStRNP.js +++ /dev/null @@ -1,36 +0,0 @@ -import{c as E,B as ge,d as M,x as be,o as c,h as C,C as F,g as B,a as q,j as $,F as N,r as ie,D as ke,E as xe,G as Q,p as u,w as o,H as L,u as e,I as we,J as de,P as W,m as V,K as ce,L as Ve,n as Ce,e as X,f as Y,M as T,N as j,l as n,b as g,t as r,s as I,O as qe,Q as $e,k as b,_ as Se,R as P,y as Ie,z as K}from"./index-D3ZCYstt.js";import{_ as ze}from"./PageHeader.vue_vue_type_script_setup_true_lang-CDyKzgiP.js";import{_ as O}from"./Badge.vue_vue_type_script_setup_true_lang--8bF8KCa.js";import{_ as te,T as Ae}from"./Modal.vue_vue_type_script_setup_true_lang-gNNtNPLv.js";import{V as Be,u as Me,P as Re,_ as se}from"./Select.vue_vue_type_script_setup_true_lang-C15l-n0X.js";import{u as Ee,c as Te}from"./Collection-D-pf6tmY.js";import{i as Pe,m as Ue,c as He,_ as ue,a as je,b as ne}from"./TabsTrigger.vue_vue_type_script_setup_true_lang-DTNukDpV.js";/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Oe=E("ArrowDownIcon",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Fe=E("ArrowUpIcon",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ne=E("FileCode2Icon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4",key:"1pf5j1"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"m5 12-3 3 3 3",key:"oke12k"}],["path",{d:"m9 18 3-3-3-3",key:"112psh"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Le=E("PencilIcon",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const De=E("PlusIcon",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Je=E("RotateCcwIcon",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ke=E("SaveIcon",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);function Ge(){var l,t;const k=(t=(l=ge())==null?void 0:l.vnode)==null?void 0:t.scopeId;return k?{[k]:""}:{}}var Qe=M({inheritAttrs:!1,__name:"VisuallyHiddenInputBubble",props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:"fully-hidden"}},setup(k){const l=k,{primitiveElement:t,currentElement:i}=Ee(),m=B(()=>l.checked??l.value);return be(m,(f,p)=>{if(!i.value)return;const _=i.value,w=window.HTMLInputElement.prototype,v=Object.getOwnPropertyDescriptor(w,"value").set;if(v&&f!==p){const A=new Event("input",{bubbles:!0}),S=new Event("change",{bubbles:!0});v.call(_,f),_.dispatchEvent(A),_.dispatchEvent(S)}}),(f,p)=>(c(),C(Be,F({ref_key:"primitiveElement",ref:t},{...l,...f.$attrs},{as:"input"}),null,16))}}),oe=Qe,We=M({inheritAttrs:!1,__name:"VisuallyHiddenInput",props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:"fully-hidden"}},setup(k){const l=k,t=B(()=>typeof l.value=="object"&&Array.isArray(l.value)&&l.value.length===0&&l.required),i=B(()=>typeof l.value=="string"||typeof l.value=="number"||typeof l.value=="boolean"||l.value===null||l.value===void 0?[{name:l.name,value:l.value}]:typeof l.value=="object"&&Array.isArray(l.value)?l.value.flatMap((m,f)=>typeof m=="object"?Object.entries(m).map(([p,_])=>({name:`${l.name}[${f}][${p}]`,value:_})):{name:`${l.name}[${f}]`,value:m}):l.value!==null&&typeof l.value=="object"&&!Array.isArray(l.value)?Object.entries(l.value).map(([m,f])=>({name:`${l.name}[${m}]`,value:f})):[]);return(m,f)=>(c(),q(N,null,[$(" We render single input if it's required "),t.value?(c(),C(oe,F({key:m.name},{...l,...m.$attrs},{name:m.name,value:m.value}),null,16,["name","value"])):(c(!0),q(N,{key:1},ie(i.value,p=>(c(),C(oe,F({key:p.name},{ref_for:!0},{...l,...m.$attrs},{name:p.name,value:p.value}),null,16,["name","value"]))),128))],2112))}}),Xe=We;const[Ye,Ze]=Te("SwitchRoot");var ea=M({inheritAttrs:!1,__name:"SwitchRoot",props:{defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1,default:void 0},disabled:{type:Boolean,required:!1},id:{type:String,required:!1},value:{type:String,required:!1,default:"on"},trueValue:{type:null,required:!1,default:()=>!0},falseValue:{type:null,required:!1,default:()=>!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue"],setup(k,{emit:l}){const t=k,i=l,{disabled:m}=ke(t),f=xe(t,"modelValue",i,{defaultValue:t.defaultValue??t.falseValue,passive:t.modelValue===void 0}),p=B(()=>f.value===t.trueValue);function _(){m.value||(f.value=p.value?t.falseValue:t.trueValue)}const{forwardRef:w,currentElement:h}=Q(),v=Me(h),A=Ge(),S=B(()=>{var x;return t.id&&h.value?(x=document.querySelector(`[for="${t.id}"]`))==null?void 0:x.innerText:void 0});return Ze({checked:p,toggleCheck:_,disabled:m}),(x,D)=>(c(),q(N,null,[u(e(W),F({id:x.id,ref:e(w),role:"switch",type:x.as==="button"?"button":void 0,value:x.value,"aria-label":x.$attrs["aria-label"]||S.value,"aria-checked":p.value,"aria-required":x.required,"data-state":p.value?"checked":"unchecked","data-disabled":e(m)?"":void 0,"as-child":x.asChild,as:x.as,disabled:e(m)},{...e(A),...x.$attrs},{onClick:_,onKeydown:we(de(_,["prevent"]),["enter"])}),{default:o(()=>[L(x.$slots,"default",{modelValue:e(f),checked:p.value})]),_:3},16,["id","type","value","aria-label","aria-checked","aria-required","data-state","data-disabled","as-child","as","disabled","onKeydown"]),e(v)&&x.name?(c(),C(e(Xe),F({key:0,type:"checkbox",name:x.name,disabled:e(m),required:x.required,value:x.value,checked:p.value},e(A)),null,16,["name","disabled","required","value","checked"])):$("v-if",!0)],64))}}),aa=ea,la=M({__name:"SwitchThumb",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(k){const l=Ye();return Q(),(t,i)=>(c(),C(e(W),{"data-state":e(l).checked.value?"checked":"unchecked","data-disabled":e(l).disabled.value?"":void 0,"as-child":t.asChild,as:t.as},{default:o(()=>[L(t.$slots,"default")]),_:3},8,["data-state","data-disabled","as-child","as"]))}}),ta=la,sa=M({__name:"TabsContent",props:{value:{type:[String,Number],required:!0},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(k){const l=k,{forwardRef:t}=Q(),i=Pe(),m=B(()=>Ue(i.baseId,l.value)),f=B(()=>He(i.baseId,l.value)),p=B(()=>l.value===i.modelValue.value),_=V(p.value);return ce(()=>{i.registerContent(l.value),requestAnimationFrame(()=>{_.value=!1})}),Ve(()=>{i.unregisterContent(l.value)}),(w,h)=>(c(),C(e(Re),{present:w.forceMount||p.value,"force-mount":""},{default:o(({present:v})=>[u(e(W),{id:f.value,ref:e(t),"as-child":w.asChild,as:w.as,role:"tabpanel","data-state":p.value?"active":"inactive","data-orientation":e(i).orientation.value,"aria-labelledby":m.value,hidden:!v,tabindex:"0",style:Ce({animationDuration:_.value?"0s":void 0})},{default:o(()=>[!e(i).unmountOnHide.value||v?L(w.$slots,"default",{key:0}):$("v-if",!0)]),_:2},1032,["id","as-child","as","data-state","data-orientation","aria-labelledby","hidden","style"])]),_:3},8,["present"]))}}),ua=sa;const na=M({__name:"Switch",props:{class:{},modelValue:{type:Boolean},id:{}},emits:["update:modelValue"],setup(k,{emit:l}){const t=k,i=l;return(m,f)=>(c(),C(e(aa),{id:t.id,"model-value":t.modelValue,class:X(e(Y)("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border border-transparent transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-50",t.class)),"onUpdate:modelValue":f[0]||(f[0]=p=>i("update:modelValue",p))},{default:o(()=>[u(e(ta),{class:"bg-background pointer-events-none block size-4 rounded-full shadow-sm ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5"})]),_:1},8,["id","model-value","class"]))}}),re=M({__name:"TabsContent",props:{class:{},value:{}},setup(k){const l=k;return(t,i)=>(c(),C(e(ua),{value:l.value,class:X(e(Y)("outline-none",l.class))},{default:o(()=>[L(t.$slots,"default")]),_:3},8,["value","class"]))}}),oa=["value"],G=M({__name:"Textarea",props:{class:{},modelValue:{}},emits:["update:modelValue"],setup(k,{emit:l}){const t=k,i=l;return(m,f)=>(c(),q("textarea",{value:t.modelValue,class:X(e(Y)("border-input bg-background flex min-h-20 w-full rounded-md border px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none sm:text-sm","placeholder:text-muted-foreground field-sizing-content","focus-visible:border-ring focus-visible:ring-ring/40 focus-visible:ring-[3px]","disabled:cursor-not-allowed disabled:opacity-50",t.class)),onInput:f[0]||(f[0]=p=>i("update:modelValue",p.target.value))},null,42,oa))}}),ra={class:"hidden sm:inline"},ia={class:"hidden sm:inline"},da={class:"mb-3 flex flex-wrap items-center gap-2"},ca={key:1,class:"text-muted-foreground ml-auto hidden truncate font-mono text-[11px] sm:inline"},va={key:0,class:"border-destructive/40 bg-destructive/10 text-destructive mb-3 rounded-lg border px-3 py-2 font-mono text-xs break-words whitespace-pre-wrap"},ma={key:0,class:"text-muted-foreground py-12 text-center text-sm"},fa={key:1,class:"flex flex-col gap-2"},pa={class:"flex items-start justify-between gap-3"},_a={class:"flex min-w-0 flex-col gap-1.5"},ya={class:"flex flex-wrap items-center gap-1.5"},ha={class:"text-muted-foreground font-mono text-[11px] tabular-nums"},ga={class:"truncate text-sm font-medium"},ba={class:"text-muted-foreground bg-muted/60 rounded-md px-2 py-1.5 font-mono text-[11px] leading-relaxed break-all sm:text-xs"},ka={class:"flex shrink-0 flex-col gap-1 sm:flex-row"},xa={key:0,class:"text-muted-foreground py-10 text-center text-sm"},wa={class:"text-muted-foreground mt-2 text-xs"},Va={class:"flex flex-col gap-2"},Ca={class:"grid gap-4 sm:grid-cols-2"},qa={class:"flex flex-col gap-2"},$a={class:"flex flex-col justify-end gap-2"},Sa={class:"flex h-9 items-center"},Ia={key:0,class:"flex flex-col gap-4"},za={class:"flex flex-col gap-2"},Aa={class:"flex flex-col gap-2"},Ba={class:"flex flex-col gap-2"},Ma={key:1,class:"text-destructive text-sm"},Oa=M({__name:"RulesView",setup(k){const l=V("visual"),t=V([]),i=V(""),m=V(""),f=V(null),p=V(!0),_=V(!1),w=V(!1),h=V(""),v=V(null),A=V(-1),S=V(-1),x=B(()=>{var a;return[{value:"",label:n("rules.actionNone")},...(((a=f.value)==null?void 0:a.actions)??[]).map(s=>({value:s,label:n(`action.${s}`)}))]}),D=B(()=>{var a;return(((a=f.value)==null?void 0:a.modifiers)??[]).map(s=>({value:s,label:s}))}),ve=a=>{switch(a){case"allow":return"allow";case"block":return"block";case"drop":return"drop";case"modify":return"modify";default:return"muted"}};ce(async()=>{try{const[a,s]=await Promise.all([T.rules(),T.meta()]);t.value=a.rules??[],i.value=a.raw,m.value=a.path,f.value=s}catch(a){h.value=a instanceof j?a.message:String(a)}finally{p.value=!1}});async function Z(a){if(!(a===l.value||_.value)){_.value=!0,h.value="";try{const s=await T.validateRules(a==="yaml"?{rules:t.value}:{raw:i.value});if(a==="yaml")i.value=s.raw;else{if(!s.valid){h.value=s.error??n("rules.invalid");return}t.value=s.rules??[]}l.value=a}catch(s){h.value=s instanceof j?s.message:String(s)}finally{_.value=!1}}}function ee(){return l.value==="yaml"?{raw:i.value}:{rules:t.value}}async function me(){_.value=!0,h.value="";try{const a=await T.validateRules(ee());a.valid?K.success(n("rules.valid")):h.value=a.error??n("rules.invalid")}catch(a){h.value=a instanceof j?a.message:String(a)}finally{_.value=!1}}async function fe(){_.value=!0,h.value="";try{const a=await T.saveRules(ee());t.value=a.rules??[],i.value=a.raw,w.value=!1,K.success(n("rules.saved"),n("rules.count",{n:t.value.length}))}catch(a){h.value=a instanceof j?a.message:String(a),K.error(n("rules.invalid"),h.value)}finally{_.value=!1}}async function pe(){_.value=!0,h.value="";try{const a=await T.rules();t.value=a.rules??[],i.value=a.raw,w.value=!1}catch(a){h.value=a instanceof j?a.message:String(a)}finally{_.value=!1}}function ae(a,s){const z=a+s;if(z<0||z>=t.value.length)return;const d=[...t.value],[y]=d.splice(a,1);d.splice(z,0,y),t.value=d,w.value=!0}function _e(){A.value=-1,v.value={name:"",action:"block",log:!1,expr:""},U.value="{}"}function ye(a){var s;A.value=a,v.value={...t.value[a]},U.value=JSON.stringify(((s=t.value[a].modifier)==null?void 0:s.args)??{},null,2)}const U=V("{}"),R=V("");function le(){var z,d;const a=v.value;if(!a)return;if(!a.name.trim()){R.value=n("rules.nameRequired");return}if(!a.expr.trim()){R.value=n("rules.exprRequired");return}if(a.action==="modify")try{const y=JSON.parse(U.value||"{}");a.modifier={name:((z=a.modifier)==null?void 0:z.name)??((d=D.value[0])==null?void 0:d.value)??"",args:y}}catch{R.value="JSON";return}else a.modifier=null;const s=[...t.value];A.value>=0?s[A.value]=a:s.push(a),t.value=s,w.value=!0,v.value=null,R.value=""}function he(a){t.value=t.value.filter((s,z)=>z!==a),w.value=!0,S.value=-1}return(a,s)=>{var z;return c(),q("div",null,[u(ze,{title:e(n)("rules.title"),description:e(n)("rules.subtitle")},{actions:o(()=>[u(e(I),{variant:"ghost",size:"sm",disabled:_.value,onClick:pe},{default:o(()=>[u(e(Je),{class:"size-3.5"}),g("span",ra,r(e(n)("common.refresh")),1)]),_:1},8,["disabled"]),u(e(I),{variant:"outline",size:"sm",disabled:_.value,onClick:me},{default:o(()=>[u(e(qe),{class:"size-3.5"}),g("span",ia,r(e(n)("rules.validate")),1)]),_:1},8,["disabled"]),u(e(I),{size:"sm",disabled:_.value,onClick:fe},{default:o(()=>[_.value?(c(),C(e($e),{key:0,class:"size-3.5 animate-spin"})):(c(),C(e(Ke),{key:1,class:"size-3.5"})),b(" "+r(e(n)("rules.save")),1)]),_:1},8,["disabled"])]),_:1},8,["title","description"]),g("div",da,[u(e(ue),{"model-value":l.value,"onUpdate:modelValue":Z},{default:o(()=>[u(e(je),null,{default:o(()=>[u(e(ne),{value:"visual"},{default:o(()=>[b(r(e(n)("rules.visual")),1)]),_:1}),u(e(ne),{value:"yaml"},{default:o(()=>[u(e(Ne)),b(" "+r(e(n)("rules.yaml")),1)]),_:1})]),_:1})]),_:1},8,["model-value"]),u(e(O),{variant:"secondary"},{default:o(()=>[b(r(e(n)("rules.count",{n:t.value.length})),1)]),_:1}),w.value?(c(),C(e(O),{key:0,variant:"drop"},{default:o(()=>[b(r(e(n)("rules.unsaved")),1)]),_:1})):$("",!0),m.value?(c(),q("span",ca,r(m.value),1)):$("",!0)]),h.value?(c(),q("p",va,r(h.value),1)):$("",!0),u(e(ue),{"model-value":l.value,"onUpdate:modelValue":Z},{default:o(()=>[u(e(re),{value:"visual"},{default:o(()=>[p.value?(c(),q("div",ma,r(e(n)("common.loading")),1)):(c(),q("div",fa,[(c(!0),q(N,null,ie(t.value,(d,y)=>(c(),C(e(Se),{key:`${d.name}-${y}`,class:"p-3 sm:p-4"},{default:o(()=>{var H;return[g("div",pa,[g("div",_a,[g("div",ya,[g("span",ha,"#"+r(y+1),1),g("span",ga,r(d.name),1),d.action?(c(),C(e(O),{key:0,variant:ve(d.action),class:"uppercase"},{default:o(()=>[b(r(e(n)(`action.${d.action}`)),1)]),_:2},1032,["variant"])):$("",!0),d.log?(c(),C(e(O),{key:1,variant:"log"},{default:o(()=>[b(r(e(n)("action.log")),1)]),_:1})):$("",!0),(H=d.modifier)!=null&&H.name?(c(),C(e(O),{key:2,variant:"outline"},{default:o(()=>[b(r(d.modifier.name),1)]),_:2},1024)):$("",!0)]),g("code",ba,r(d.expr),1)]),g("div",ka,[u(e(I),{variant:"ghost",size:"icon-sm","aria-label":e(n)("rules.moveUp"),disabled:y===0,onClick:J=>ae(y,-1)},{default:o(()=>[u(e(Fe),{class:"size-3.5"})]),_:1},8,["aria-label","disabled","onClick"]),u(e(I),{variant:"ghost",size:"icon-sm","aria-label":e(n)("rules.moveDown"),disabled:y===t.value.length-1,onClick:J=>ae(y,1)},{default:o(()=>[u(e(Oe),{class:"size-3.5"})]),_:1},8,["aria-label","disabled","onClick"]),u(e(I),{variant:"ghost",size:"icon-sm","aria-label":e(n)("common.edit"),onClick:J=>ye(y)},{default:o(()=>[u(e(Le),{class:"size-3.5"})]),_:1},8,["aria-label","onClick"]),u(e(I),{variant:"ghost",size:"icon-sm",class:"text-destructive","aria-label":e(n)("common.delete"),onClick:J=>S.value=y},{default:o(()=>[u(e(Ae),{class:"size-3.5"})]),_:1},8,["aria-label","onClick"])])])]}),_:2},1024))),128)),t.value.length?$("",!0):(c(),q("p",xa,r(e(n)("rules.empty")),1)),u(e(I),{variant:"outline",class:"mt-1 w-full",onClick:_e},{default:o(()=>[u(e(De),{class:"size-4"}),b(" "+r(e(n)("rules.add")),1)]),_:1})]))]),_:1}),u(e(re),{value:"yaml"},{default:o(()=>[u(e(G),{modelValue:i.value,"onUpdate:modelValue":[s[0]||(s[0]=d=>i.value=d),s[1]||(s[1]=d=>w.value=!0)],spellcheck:"false",class:"h-[60vh] resize-y font-mono text-xs leading-relaxed"},null,8,["modelValue"]),g("p",wa,r(e(n)("rules.hint")),1)]),_:1})]),_:1},8,["model-value"]),u(e(te),{open:v.value!==null,title:A.value>=0?e(n)("rules.editTitle"):e(n)("rules.addTitle"),"onUpdate:open":s[9]||(s[9]=d=>!d&&(v.value=null,R.value=""))},{footer:o(()=>[u(e(I),{variant:"outline",onClick:s[8]||(s[8]=d=>(v.value=null,R.value=""))},{default:o(()=>[b(r(e(n)("common.cancel")),1)]),_:1}),u(e(I),{onClick:le},{default:o(()=>[b(r(e(n)("common.save")),1)]),_:1})]),default:o(()=>{var d;return[v.value?(c(),q("form",{key:0,class:"flex flex-col gap-4",onSubmit:de(le,["prevent"])},[g("div",Va,[u(e(P),{for:"rule-name"},{default:o(()=>[b(r(e(n)("rules.name")),1)]),_:1}),u(e(Ie),{id:"rule-name",modelValue:v.value.name,"onUpdate:modelValue":s[2]||(s[2]=y=>v.value.name=y),placeholder:e(n)("rules.namePlaceholder")},null,8,["modelValue","placeholder"])]),g("div",Ca,[g("div",qa,[u(e(P),null,{default:o(()=>[b(r(e(n)("rules.action")),1)]),_:1}),u(e(se),{"model-value":v.value.action??"",options:x.value,"onUpdate:modelValue":s[3]||(s[3]=y=>v.value.action=y)},null,8,["model-value","options"])]),g("div",$a,[u(e(P),{for:"rule-log"},{default:o(()=>[b(r(e(n)("rules.log")),1)]),_:1}),g("div",Sa,[u(e(na),{id:"rule-log",modelValue:v.value.log,"onUpdate:modelValue":s[4]||(s[4]=y=>v.value.log=y)},null,8,["modelValue"])])])]),v.value.action==="modify"?(c(),q("div",Ia,[g("div",za,[u(e(P),null,{default:o(()=>[b(r(e(n)("rules.modifier")),1)]),_:1}),u(e(se),{"model-value":((d=v.value.modifier)==null?void 0:d.name)??"",options:D.value,"onUpdate:modelValue":s[5]||(s[5]=y=>{var H;return v.value.modifier={name:y,args:(H=v.value.modifier)==null?void 0:H.args}})},null,8,["model-value","options"])]),g("div",Aa,[u(e(P),{for:"rule-args"},{default:o(()=>[b(r(e(n)("rules.modifierArgs")),1)]),_:1}),u(e(G),{id:"rule-args",modelValue:U.value,"onUpdate:modelValue":s[6]||(s[6]=y=>U.value=y),class:"font-mono text-xs",rows:"4"},null,8,["modelValue"])])])):$("",!0),g("div",Ba,[u(e(P),{for:"rule-expr"},{default:o(()=>[b(r(e(n)("rules.expr")),1)]),_:1}),u(e(G),{id:"rule-expr",modelValue:v.value.expr,"onUpdate:modelValue":s[7]||(s[7]=y=>v.value.expr=y),spellcheck:"false",placeholder:e(n)("rules.exprPlaceholder"),class:"min-h-28 font-mono text-xs leading-relaxed"},null,8,["modelValue","placeholder"])]),R.value?(c(),q("p",Ma,r(R.value),1)):$("",!0)],32)):$("",!0)]}),_:1},8,["open","title"]),u(e(te),{open:S.value>=0,title:e(n)("common.delete"),description:S.value>=0?e(n)("rules.deleteConfirm",{name:((z=t.value[S.value])==null?void 0:z.name)??""}):"","onUpdate:open":s[12]||(s[12]=d=>!d&&(S.value=-1))},{footer:o(()=>[u(e(I),{variant:"outline",onClick:s[10]||(s[10]=d=>S.value=-1)},{default:o(()=>[b(r(e(n)("common.cancel")),1)]),_:1}),u(e(I),{variant:"destructive",onClick:s[11]||(s[11]=d=>he(S.value))},{default:o(()=>[b(r(e(n)("common.delete")),1)]),_:1})]),_:1},8,["open","title","description"])])}}});export{Oa as default}; diff --git a/web/dist/assets/RulesView-f8xcsZeo.js b/web/dist/assets/RulesView-f8xcsZeo.js new file mode 100644 index 0000000..27846bd --- /dev/null +++ b/web/dist/assets/RulesView-f8xcsZeo.js @@ -0,0 +1,46 @@ +import{c as he,B as pe,m as A,g as F,u as t,C as It,d as U,x as Ke,o as m,h as B,D as ae,a as S,j as G,F as ee,r as de,E as we,G as _e,w as h,H as J,P as te,I as Me,J as jt,K as Gt,p as v,L as me,M as Ae,N as Xt,O as ge,Q as rt,R as re,S as St,U as Et,i as Jt,k as H,V as Bt,t as $,W as Yt,X as Qt,n as Zt,Y as ea,e as fe,f as ve,Z as At,$ as ye,b as O,l as x,a0 as ta,s as oe,y as tt,a1 as Ee,a2 as aa,a3 as mt,_ as la,a4 as Be,z as Je}from"./index-BKPz7Obh.js";import{_ as na}from"./PageHeader.vue_vue_type_script_setup_true_lang-CPDhGTO6.js";import{u as Fe,a as De,b as st,c as be,d as Ge,g as oa}from"./Collection-BaXBMWO5.js";import{i as He,V as ra,u as sa,a as it,h as ia,P as ua,b as da,c as ca,d as pa,e as fa,f as va,F as ma,D as ha,g as ga,j as ya,k as Ft,T as ba,l as xa,C as _a,_ as je}from"./Select.vue_vue_type_script_setup_true_lang-CONzBLld.js";import{g as Ca,i as ka,m as wa,c as qa,_ as Ye,a as ht,b as Ue}from"./TabsTrigger.vue_vue_type_script_setup_true_lang-_qQ6JBVg.js";import{S as Va,T as Ot,_ as gt}from"./Modal.vue_vue_type_script_setup_true_lang-Bd1uxkqS.js";import{_ as Te}from"./Badge.vue_vue_type_script_setup_true_lang-i2F91fYk.js";/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $a=he("ArrowDownIcon",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ia=he("ArrowUpIcon",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sa=he("ChevronsUpDownIcon",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yt=he("FileCode2Icon",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4",key:"1pf5j1"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"m5 12-3 3 3 3",key:"oke12k"}],["path",{d:"m9 18 3-3-3-3",key:"112psh"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ea=he("PencilIcon",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Tt=he("PlusIcon",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ba=he("RotateCcwIcon",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Aa=he("SaveIcon",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fa=he("WandSparklesIcon",[["path",{d:"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72",key:"ul74o6"}],["path",{d:"m14 7 3 3",key:"1r5n42"}],["path",{d:"M5 6v4",key:"ilb8ba"}],["path",{d:"M19 14v4",key:"blhpug"}],["path",{d:"M10 2v2",key:"7u0qdc"}],["path",{d:"M7 8H3",key:"zfb6yr"}],["path",{d:"M21 16h-4",key:"1cnmox"}],["path",{d:"M11 3H9",key:"1obp7u"}]]);function Oa(l,a,e){const o=l.findIndex(s=>He(s,a)),n=l.findIndex(s=>He(s,e));if(o===-1||n===-1)return[];const[r,i]=[o,n].sort((s,u)=>s-u);return l.slice(r,i+1)}const Ta=["INPUT","TEXTAREA"];function Ra(l,a,e,o={}){if(!a||o.enableIgnoredElement&&Ta.includes(a.nodeName))return null;const{arrowKeyOptions:n="both",attributeName:r="[data-reka-collection-item]",itemsArray:i=[],loop:s=!0,dir:u="ltr",preventScroll:_=!0,focus:d=!1}=o,[C,I,k,y,f,g]=[l.key==="ArrowRight",l.key==="ArrowLeft",l.key==="ArrowUp",l.key==="ArrowDown",l.key==="Home",l.key==="End"],p=k||y,q=C||I;if(!f&&!g&&(!p&&!q||n==="vertical"&&q||n==="horizontal"&&p))return null;const E=i;if(!E.length)return null;_&&l.preventDefault();let V=null;return q||p?V=Rt(E,a,{goForward:p?y:u==="ltr"?C:I,loop:s}):f?V=E.at(0)||null:g&&(V=E.at(-1)||null),d&&(V==null||V.focus()),V}function Rt(l,a,e,o=l.includes(a)?l.length:l.length+1){if(--o===0)return null;const n=l.indexOf(a);let r;if(n===-1?r=e.goForward?0:l.length-1:r=e.goForward?n+1:n-1,!e.loop&&(r<0||r>=l.length))return null;const i=(r+l.length)%l.length,s=l[i];return s?s.hasAttribute("disabled")&&s.getAttribute("disabled")!=="false"?Rt(l,s,e,o):s:null}function ut(l){const a=A(!1);function e(){a.value=!0}function o(n){pe(()=>{a.value=!1,l==null||l(n)})}return{isComposing:a,handleCompositionStart:e,handleCompositionEnd:o}}function za(l){const a=F(()=>t(l)),e=F(()=>new Intl.Collator("en",{usage:"search",...a.value}));return{startsWith:(i,s)=>s.length===0?!0:(i=i.normalize("NFC"),s=s.normalize("NFC"),e.value.compare(i.slice(0,s.length),s)===0),endsWith:(i,s)=>s.length===0?!0:(i=i.normalize("NFC"),s=s.normalize("NFC"),e.value.compare(i.slice(-s.length),s)===0),contains:(i,s)=>{if(s.length===0)return!0;i=i.normalize("NFC"),s=s.normalize("NFC");let u=0;const _=s.length;for(;u+_<=i.length;u++){const d=i.slice(u,u+_);if(e.value.compare(s,d)===0)return!0}return!1}}}function Pa(){var a,e;const l=(e=(a=It())==null?void 0:a.vnode)==null?void 0:e.scopeId;return l?{[l]:""}:{}}function Da(){return{ALT:"Alt",ARROW_DOWN:"ArrowDown",ARROW_LEFT:"ArrowLeft",ARROW_RIGHT:"ArrowRight",ARROW_UP:"ArrowUp",BACKSPACE:"Backspace",CAPS_LOCK:"CapsLock",CONTROL:"Control",DELETE:"Delete",END:"End",ENTER:"Enter",ESCAPE:"Escape",F1:"F1",F10:"F10",F11:"F11",F12:"F12",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",HOME:"Home",META:"Meta",PAGE_DOWN:"PageDown",PAGE_UP:"PageUp",SHIFT:"Shift",SPACE:" ",TAB:"Tab",CTRL:"Control",ASTERISK:"*",SPACE_CODE:"Space"}}var La=U({inheritAttrs:!1,__name:"VisuallyHiddenInputBubble",props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:"fully-hidden"}},setup(l){const a=l,{primitiveElement:e,currentElement:o}=Fe(),n=F(()=>a.checked??a.value);return Ke(n,(r,i)=>{if(!o.value)return;const s=o.value,u=window.HTMLInputElement.prototype,d=Object.getOwnPropertyDescriptor(u,"value").set;if(d&&r!==i){const C=new Event("input",{bubbles:!0}),I=new Event("change",{bubbles:!0});d.call(s,r),s.dispatchEvent(C),s.dispatchEvent(I)}}),(r,i)=>(m(),B(ra,ae({ref_key:"primitiveElement",ref:e},{...a,...r.$attrs},{as:"input"}),null,16))}}),bt=La,Na=U({inheritAttrs:!1,__name:"VisuallyHiddenInput",props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:"fully-hidden"}},setup(l){const a=l,e=F(()=>typeof a.value=="object"&&Array.isArray(a.value)&&a.value.length===0&&a.required),o=F(()=>typeof a.value=="string"||typeof a.value=="number"||typeof a.value=="boolean"||a.value===null||a.value===void 0?[{name:a.name,value:a.value}]:typeof a.value=="object"&&Array.isArray(a.value)?a.value.flatMap((n,r)=>typeof n=="object"?Object.entries(n).map(([i,s])=>({name:`${a.name}[${r}][${i}]`,value:s})):{name:`${a.name}[${r}]`,value:n}):a.value!==null&&typeof a.value=="object"&&!Array.isArray(a.value)?Object.entries(a.value).map(([n,r])=>({name:`${a.name}[${n}]`,value:r})):[]);return(n,r)=>(m(),S(ee,null,[G(" We render single input if it's required "),e.value?(m(),B(bt,ae({key:n.name},{...a,...n.$attrs},{name:n.name,value:n.value}),null,16,["name","value"])):(m(!0),S(ee,{key:1},de(o.value,i=>(m(),B(bt,ae({key:i.name},{ref_for:!0},{...a,...n.$attrs},{name:i.name,value:i.value}),null,16,["name","value"]))),128))],2112))}}),dt=Na;function Ua(l,a,e){return l===void 0?!1:Array.isArray(l)?l.some(o=>ze(o,a,e)):ze(l,a,e)}function ze(l,a,e){return l===void 0||a===void 0?!1:typeof l=="string"?l===a:typeof e=="function"?e(l,a):typeof e=="string"?(l==null?void 0:l[e])===(a==null?void 0:a[e]):He(l,a)}const[Xe,Ma]=be("ListboxRoot");var Wa=U({__name:"ListboxRoot",props:{modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},multiple:{type:Boolean,required:!1},orientation:{type:String,required:!1,default:"vertical"},dir:{type:String,required:!1},disabled:{type:Boolean,required:!1},selectionBehavior:{type:String,required:!1,default:"toggle"},highlightOnHover:{type:Boolean,required:!1},by:{type:[String,Function],required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue","highlight","entryFocus","leave"],setup(l,{expose:a,emit:e}){const o=l,n=e,{multiple:r,highlightOnHover:i,orientation:s,disabled:u,selectionBehavior:_,dir:d}=we(o),{getItems:C}=De({isProvider:!0}),{handleTypeaheadSearch:I}=sa(),{primitiveElement:k,currentElement:y}=Fe(),f=Da(),g=st(d),p=it(y),q=A(),E=A(!1),V=A(!0),P=_e(o,"modelValue",n,{defaultValue:o.defaultValue??(r.value?[]:void 0),passive:o.modelValue===void 0,deep:!0});function ue(w){if(E.value=!0,o.multiple){const z=Array.isArray(P.value)?[...P.value]:[],D=z.findIndex(Z=>ze(Z,w,o.by));o.selectionBehavior==="toggle"?(D===-1?z.push(w):z.splice(D,1),P.value=z):(P.value=[w],q.value=w)}else o.selectionBehavior==="toggle"&&ze(P.value,w,o.by)?P.value=void 0:P.value=w;setTimeout(()=>{E.value=!1},1)}const j=A(null),T=A(null),M=A(!1),X=A(!1),Y=Me(),W=Me(),ne=Me();function le(){return C().map(w=>w.ref).filter(w=>w.dataset.disabled!=="")}function K(w,z=!0,D){if(!w)return;j.value=w,(D??V.value)&&j.value.focus(),z&&j.value.scrollIntoView({block:"nearest"});const Z=C().find(ie=>ie.ref===w);n("highlight",Z)}function Ve(w){if(M.value)ne.trigger(w);else{const z=C().find(D=>ze(D.value,w,o.by));z&&(j.value=z.ref,K(z.ref))}}function $e(w){if(j.value&&j.value.isConnected){if(w.ctrlKey||w.metaKey||w.altKey)return;w.preventDefault(),w.stopPropagation(),X.value||j.value.click()}}function Ie(w){if(V.value){if(E.value=!0,M.value)W.trigger(w);else{const z=w.altKey||w.ctrlKey||w.metaKey;if(z&&w.key==="a"&&r.value){const D=C(),Z=D.map(Se=>Se.value);P.value=[...Z],w.preventDefault();const ie=D.at(-1);ie&&K(ie.ref)}else if(!z){const D=I(w.key,C());D&&K(D)}}setTimeout(()=>{E.value=!1},1)}}function c(){X.value=!0}function b(){pe(()=>{X.value=!1})}function L(){pe(()=>{const w=new KeyboardEvent("keydown",{key:"PageUp"});Q(w)})}function R(w){const z=j.value;z!=null&&z.isConnected&&(T.value=z),j.value=null,n("leave",w)}function N(w){var D,Z;const z=new CustomEvent("listbox.entryFocus",{bubbles:!1,cancelable:!0});if((D=w.currentTarget)==null||D.dispatchEvent(z),n("entryFocus",z),!z.defaultPrevented)if(T.value)K(T.value);else{const ie=(Z=le())==null?void 0:Z[0];K(ie)}}function Q(w){const z=Ca(w,s.value,g.value);if(!z)return;let D=le();if(j.value){if(z==="last")D.reverse();else if(z==="prev"||z==="next"){z==="prev"&&D.reverse();const Z=D.indexOf(j.value);D=D.slice(Z+1)}ce(w,D[0])}if(D.length){const Z=!j.value&&z==="prev"?D.length-1:0;K(D[Z])}if(M.value)return W.trigger(w)}function ce(w,z){var Z,ie,Se;if(!(M.value||o.selectionBehavior!=="replace"||!r.value||!Array.isArray(P.value)||(w.altKey||w.ctrlKey||w.metaKey)&&!w.shiftKey)&&w.shiftKey){const Le=C().filter(Oe=>Oe.ref.dataset.disabled!=="");let Ne=(Z=Le.find(Oe=>Oe.ref===z))==null?void 0:Z.value;if(w.key===f.END?Ne=(ie=Le.at(-1))==null?void 0:ie.value:w.key===f.HOME&&(Ne=(Se=Le[0])==null?void 0:Se.value),!Ne||!q.value)return;const Ht=Oa(Le.map(Oe=>Oe.value),q.value,Ne);P.value=Ht}}async function ft(w,z=!0){if(jt)if(await pe(),M.value)Y.trigger({event:w,scroll:z});else{const D=le(),Z=D.find(Se=>Se.dataset.state==="checked"),ie=z?void 0:!1;Z?K(Z,z,ie):D.length&&K(D[0],z,ie)}}let vt=!1;return Ke(P,()=>{if(!E.value){const w=vt;vt=!0,pe(()=>{ft(void 0,w)})}},{immediate:!0,deep:!0}),a({highlightedElement:j,highlightItem:Ve,highlightFirstItem:L,highlightSelected:ft,getItems:C}),Ma({modelValue:P,onValueChange:ue,multiple:r,orientation:s,dir:g,disabled:u,highlightOnHover:i,highlightedElement:j,isVirtual:M,virtualFocusHook:Y,virtualKeydownHook:W,virtualHighlightHook:ne,by:o.by,firstValue:q,selectionBehavior:_,focusable:V,onLeave:R,onEnter:N,changeHighlight:K,onKeydownEnter:$e,onKeydownNavigation:Q,onKeydownTypeAhead:Ie,onCompositionStart:c,onCompositionEnd:b,highlightFirstItem:L}),(w,z)=>(m(),B(t(te),{ref_key:"primitiveElement",ref:k,as:w.as,"as-child":w.asChild,dir:t(g),"data-disabled":t(u)?"":void 0,onPointerleave:R,onFocusout:z[0]||(z[0]=async D=>{const Z=D.relatedTarget||D.target;await pe(),j.value&&t(y)&&!t(y).contains(Z)&&R(D)})},{default:h(()=>[J(w.$slots,"default",{modelValue:t(P)}),t(p)&&w.name?(m(),B(t(dt),{key:0,name:w.name,value:t(P),disabled:t(u),required:w.required},null,8,["name","value","disabled","required"])):G("v-if",!0)]),_:3},8,["as","as-child","dir","data-disabled"]))}}),Ka=Wa,Ha=U({__name:"ListboxContent",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(l){const{CollectionSlot:a}=De(),e=Xe(),o=Gt(!1,10);return(n,r)=>(m(),B(t(a),null,{default:h(()=>[v(t(te),{role:"listbox",as:n.as,"as-child":n.asChild,tabindex:t(e).focusable.value?t(e).highlightedElement.value?"-1":"0":"-1","aria-orientation":t(e).orientation.value,"aria-multiselectable":!!t(e).multiple.value,"data-orientation":t(e).orientation.value,onMousedown:r[0]||(r[0]=Ae(i=>o.value=!0,["left"])),onFocus:r[1]||(r[1]=i=>{t(o)||t(e).onEnter(i)}),onKeydown:[r[2]||(r[2]=me(i=>{t(e).orientation.value==="vertical"&&(i.key==="ArrowLeft"||i.key==="ArrowRight")||t(e).orientation.value==="horizontal"&&(i.key==="ArrowUp"||i.key==="ArrowDown")||(i.preventDefault(),t(e).focusable.value&&t(e).onKeydownNavigation(i))},["down","up","left","right","home","end"])),me(t(e).onKeydownEnter,["enter"]),t(e).onKeydownTypeAhead]},{default:h(()=>[J(n.$slots,"default")]),_:3},8,["as","as-child","tabindex","aria-orientation","aria-multiselectable","data-orientation","onKeydown"])]),_:3}))}}),ja=Ha,Ga=U({__name:"ListboxFilter",props:{modelValue:{type:String,required:!1},autoFocus:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"input"}},emits:["update:modelValue"],setup(l,{emit:a}){const e=l,n=_e(e,"modelValue",a,{defaultValue:"",passive:e.modelValue===void 0}),r=Xe(),{primitiveElement:i,currentElement:s}=Fe(),u=F(()=>e.disabled||r.disabled.value||!1),_=A();Xt(()=>{var p;return _.value=(p=r.highlightedElement.value)==null?void 0:p.id}),ge(()=>{r.focusable.value=!1,setTimeout(()=>{var p;e.autoFocus&&((p=s.value)==null||p.focus())},1)}),rt(()=>{r.focusable.value=!0});const{isComposing:d,handleCompositionStart:C,handleCompositionEnd:I}=ut(p=>{n.value=p.target.value,r.onCompositionEnd(),r.highlightFirstItem()});function k(){r.onCompositionStart(),C()}function y(p){d.value||(n.value=p.target.value,r.highlightFirstItem())}function f(p){d.value||(p.preventDefault(),r.onKeydownNavigation(p))}function g(p){d.value||r.onKeydownEnter(p)}return(p,q)=>(m(),B(t(te),{ref_key:"primitiveElement",ref:i,as:p.as,"as-child":p.asChild,value:t(n),disabled:u.value?"":void 0,"data-disabled":u.value?"":void 0,"aria-disabled":u.value??void 0,"aria-activedescendant":_.value,type:"text",onKeydown:[me(f,["down","up","home","end"]),me(g,["enter"])],onInput:y,onCompositionstart:k,onCompositionend:t(I)},{default:h(()=>[J(p.$slots,"default",{modelValue:t(n)})]),_:3},8,["as","as-child","value","disabled","data-disabled","aria-disabled","aria-activedescendant","onCompositionend"]))}}),Xa=Ga;const Ja="listbox.select",[Io,Ya]=be("ListboxItem");var Qa=U({__name:"ListboxItem",props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"div"}},emits:["select"],setup(l,{emit:a}){const e=l,o=a,n=Ge(void 0,"reka-listbox-item"),{CollectionItem:r}=De(),{forwardRef:i,currentElement:s}=re(),u=Xe(),_=F(()=>s.value!=null&&s.value===u.highlightedElement.value),d=F(()=>Ua(u.modelValue.value,e.value,u.by)),C=F(()=>u.disabled.value||e.disabled);async function I(y){o("select",y),!(y!=null&&y.defaultPrevented)&&!C.value&&y&&(u.onValueChange(e.value),u.changeHighlight(s.value))}function k(y){const f={originalEvent:y,value:e.value};ia(Ja,I,f)}return Ya({isSelected:d}),(y,f)=>(m(),B(t(r),{value:y.value},{default:h(()=>[St([_.value,d.value,C.value,t(u).focusable.value],()=>v(t(te),ae({id:t(n)},y.$attrs,{ref:t(i),role:"option",tabindex:t(u).focusable.value?_.value?"0":"-1":-1,"aria-selected":d.value,as:y.as,"as-child":y.asChild,disabled:C.value?"":void 0,"data-disabled":C.value?"":void 0,"data-highlighted":_.value?"":void 0,"data-state":d.value?"checked":"unchecked",onClick:k,onKeydown:me(Ae(k,["prevent"]),["space"]),onPointermove:f[0]||(f[0]=()=>{t(u).highlightedElement.value!==t(s)&&t(u).highlightOnHover.value&&t(u).changeHighlight(t(s),!1,!1)})}),{default:h(()=>[J(y.$slots,"default")]),_:3},16,["id","tabindex","aria-selected","as","as-child","disabled","data-disabled","data-highlighted","data-state","onKeydown"]),f,1)]),_:3},8,["value"]))}}),Za=Qa;const[qe,el]=be("ComboboxRoot");var tl=U({__name:"ComboboxRoot",props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1},resetSearchTermOnBlur:{type:Boolean,required:!1,default:!0},resetSearchTermOnSelect:{type:Boolean,required:!1,default:!0},openOnFocus:{type:Boolean,required:!1,default:!1},openOnClick:{type:Boolean,required:!1,default:!1},ignoreFilter:{type:Boolean,required:!1},resetModelValueOnClear:{type:Boolean,required:!1,default:!1},modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},multiple:{type:Boolean,required:!1},dir:{type:String,required:!1},disabled:{type:Boolean,required:!1},highlightOnHover:{type:Boolean,required:!1,default:!0},by:{type:[String,Function],required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue","highlight","update:open"],setup(l,{expose:a,emit:e}){var Ve,$e,Ie;const o=l,n=e,{primitiveElement:r,currentElement:i}=Fe(),{multiple:s,disabled:u,ignoreFilter:_,resetSearchTermOnSelect:d,openOnFocus:C,openOnClick:I,dir:k,resetModelValueOnClear:y,highlightOnHover:f}=we(o),g=st(k),p=_e(o,"modelValue",n,{defaultValue:o.defaultValue??(s.value?[]:void 0),passive:o.modelValue===void 0,deep:!0}),q=_e(o,"open",n,{defaultValue:o.defaultOpen,passive:o.open===void 0});async function E(c){var b,L;q.value=c,ne.value="",c?(await pe(),(b=r.value)==null||b.highlightSelected(),P.value=!0,(L=j.value)==null||L.focus()):(P.value=!1,setTimeout(()=>{!c&&o.resetSearchTermOnBlur&&V.trigger()},1))}const V=Me(),P=A(!1),ue=A(!1),j=A(),T=A(),M=F(()=>{var c;return((c=r.value)==null?void 0:c.highlightedElement)??void 0}),X=A(new Map),Y=A(new Map),{contains:W}=za({sensitivity:"base"}),ne=A(""),le=F(c=>{if(!ne.value||o.ignoreFilter||ue.value)return{count:X.value.size,items:(c==null?void 0:c.items)??new Map,groups:(c==null?void 0:c.groups)??new Set(Y.value.keys())};let b=0;const L=new Map,R=new Set;for(const[N,Q]of X.value){const ce=W(Q,ne.value);L.set(N,ce?1:0),ce&&b++}for(const[N,Q]of Y.value)for(const ce of Q)if(L.get(ce)>0){R.add(N);break}return{count:b,items:L,groups:R}}),K=It();return ge(()=>{var c,b,L;K!=null&&K.exposed&&(K.exposed.highlightItem=(c=r.value)==null?void 0:c.highlightItem,K.exposed.highlightFirstItem=(b=r.value)==null?void 0:b.highlightFirstItem,K.exposed.highlightSelected=(L=r.value)==null?void 0:L.highlightSelected)}),a({filtered:le,highlightedElement:M,highlightItem:(Ve=r.value)==null?void 0:Ve.highlightItem,highlightFirstItem:($e=r.value)==null?void 0:$e.highlightFirstItem,highlightSelected:(Ie=r.value)==null?void 0:Ie.highlightSelected}),el({modelValue:p,multiple:s,disabled:u,open:q,onOpenChange:E,contentId:"",isUserInputted:P,isVirtual:ue,inputElement:j,highlightedElement:M,onInputElementChange:c=>j.value=c,triggerElement:T,onTriggerElementChange:c=>T.value=c,parentElement:i,resetSearchTermOnSelect:d,onResetSearchTerm:V.on,allItems:X,allGroups:Y,filterSearch:ne,filterState:le,ignoreFilter:_,openOnFocus:C,openOnClick:I,resetModelValueOnClear:y}),(c,b)=>(m(),B(t(ua),null,{default:h(()=>[v(t(Ka),ae({ref_key:"primitiveElement",ref:r},c.$attrs,{modelValue:t(p),"onUpdate:modelValue":b[0]||(b[0]=L=>Et(p)?p.value=L:null),style:{pointerEvents:t(q)?"auto":void 0},as:c.as,"as-child":c.asChild,dir:t(g),multiple:t(s),name:c.name,required:c.required,disabled:t(u),"highlight-on-hover":t(f),by:o.by,onHighlight:b[1]||(b[1]=L=>n("highlight",L))}),{default:h(()=>[J(c.$slots,"default",{open:t(q),modelValue:t(p)})]),_:3},16,["modelValue","style","as","as-child","dir","multiple","name","required","disabled","highlight-on-hover","by"])]),_:3}))}}),al=tl,ll=U({__name:"ComboboxAnchor",props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(l){const{forwardRef:a}=re();return(e,o)=>(m(),B(t(da),{"as-child":"",reference:e.reference},{default:h(()=>[v(t(te),ae({ref:t(a),"as-child":e.asChild,as:e.as},e.$attrs),{default:h(()=>[J(e.$slots,"default")]),_:3},16,["as-child","as"])]),_:3},8,["reference"]))}}),nl=ll;const[So,ol]=be("ComboboxContent");var rl=U({__name:"ComboboxContentImpl",props:{position:{type:String,required:!1,default:"inline"},bodyLock:{type:Boolean,required:!1},hideWhenEmpty:{type:Boolean,required:!1},memoDependencies:{type:Array,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(l,{emit:a}){const e=l,o=a,{position:n}=we(e),r=qe(),i=F(()=>r.ignoreFilter.value?r.allItems.value.size===0:r.filterState.value.count===0),{forwardRef:s,currentElement:u}=re();ca(e.bodyLock),pa(),fa(r.parentElement);const _=F(()=>e.position==="popper"?e:{}),d=va(_.value),C={boxSizing:"border-box","--reka-combobox-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-combobox-content-available-width":"var(--reka-popper-available-width)","--reka-combobox-content-available-height":"var(--reka-popper-available-height)","--reka-combobox-trigger-width":"var(--reka-popper-anchor-width)","--reka-combobox-trigger-height":"var(--reka-popper-anchor-height)"};ol({position:n});const I=A(!1);ge(()=>{r.inputElement.value&&(I.value=u.value.contains(r.inputElement.value),I.value&&r.inputElement.value.focus())}),rt(()=>{var f;const y=oa();I.value&&(!y||y===document.body)&&((f=r.triggerElement.value)==null||f.focus())});function k(y){var p,q;if((p=r.parentElement.value)!=null&&p.contains(y))return!0;const f=y instanceof Element?y.closest("label"):null,g=f==null?void 0:f.control;return!!g&&!!((q=r.parentElement.value)!=null&&q.contains(g))}return(y,f)=>(m(),B(t(ja),{"as-child":""},{default:h(()=>[v(t(ma),{"as-child":"",onMountAutoFocus:f[5]||(f[5]=Ae(()=>{},["prevent"])),onUnmountAutoFocus:f[6]||(f[6]=Ae(()=>{},["prevent"]))},{default:h(()=>[v(t(ha),{"as-child":"","disable-outside-pointer-events":y.disableOutsidePointerEvents,onDismiss:f[0]||(f[0]=g=>t(r).onOpenChange(!1)),onFocusOutside:f[1]||(f[1]=g=>{k(g.target)&&g.preventDefault(),o("focusOutside",g)}),onInteractOutside:f[2]||(f[2]=g=>o("interactOutside",g)),onEscapeKeyDown:f[3]||(f[3]=g=>o("escapeKeyDown",g)),onPointerDownOutside:f[4]||(f[4]=g=>{k(g.target)&&g.preventDefault(),o("pointerDownOutside",g)})},{default:h(()=>[(m(),B(Jt(t(n)==="popper"?t(ga):t(te)),ae({...y.$attrs,...t(d)},{id:t(r).contentId,ref:t(s),"memo-dependencies":t(n)==="popper"?[t(r).filterSearch.value,t(r).filterState.value]:void 0,"data-state":t(r).open.value?"open":"closed","data-empty":i.value?"":void 0,style:{display:e.hideWhenEmpty&&i.value?"none":"flex",flexDirection:"column",outline:"none",...t(n)==="popper"?C:{}}}),{default:h(()=>[J(y.$slots,"default")]),_:3},16,["id","memo-dependencies","data-state","data-empty","style"]))]),_:3},8,["disable-outside-pointer-events"])]),_:3})]),_:3}))}}),sl=rl,il=U({__name:"ComboboxContent",props:{forceMount:{type:Boolean,required:!1},position:{type:String,required:!1},bodyLock:{type:Boolean,required:!1},hideWhenEmpty:{type:Boolean,required:!1},memoDependencies:{type:Array,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(l,{emit:a}){const n=ya(l,a),{forwardRef:r}=re(),i=qe();return i.contentId||(i.contentId=Ge(void 0,"reka-combobox-content")),(s,u)=>(m(),B(t(Ft),{present:s.forceMount||t(i).open.value},{default:h(()=>[v(sl,ae({...t(n),...s.$attrs},{ref:t(r)}),{default:h(()=>[J(s.$slots,"default")]),_:3},16)]),_:3},8,["present"]))}}),ul=il,dl=U({__name:"ComboboxEmpty",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(l){const a=l,e=qe(),o=F(()=>e.ignoreFilter.value?e.allItems.value.size===0:e.filterState.value.count===0);return(n,r)=>o.value?(m(),B(t(te),Bt(ae({key:0},a)),{default:h(()=>[J(n.$slots,"default",{},()=>[r[0]||(r[0]=H("No options"))])]),_:3},16)):G("v-if",!0)}}),cl=dl;const[pl]=be("ComboboxGroup");var fl=U({__name:"ComboboxInput",props:{displayValue:{type:Function,required:!1},modelValue:{type:String,required:!1},autoFocus:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"input"}},emits:["update:modelValue"],setup(l,{emit:a}){const e=l,o=a,n=qe(),r=Xe(),{primitiveElement:i,currentElement:s}=Fe(),u=_e(e,"modelValue",o,{passive:e.modelValue===void 0});ge(()=>{s.value&&n.onInputElementChange(s.value)});const{isComposing:_,handleCompositionStart:d,handleCompositionEnd:C}=ut(E=>{const V=E.target;V&&k(V.value)});function I(E){_.value||(E.preventDefault(),n.open.value||n.onOpenChange(!0))}function k(E){n.open.value?n.filterSearch.value=E:(n.onOpenChange(!0),pe(()=>{E&&(n.filterSearch.value=E,r.highlightFirstItem())}))}function y(E){_.value||k(E.target.value)}function f(){n.openOnFocus.value&&!n.open.value&&n.onOpenChange(!0)}function g(E){var j,T;if(!n.open.value)return;const V=E.relatedTarget;if(!V)return;const P=(j=n.parentElement.value)==null?void 0:j.contains(V),ue=(T=document.getElementById(n.contentId))==null?void 0:T.contains(V);!P&&!ue&&requestAnimationFrame(()=>{var Y,W;if(!n.open.value)return;const M=document.activeElement;!((Y=n.parentElement.value)!=null&&Y.contains(M))&&!((W=document.getElementById(n.contentId))!=null&&W.contains(M))&&n.onOpenChange(!1)})}function p(){n.openOnClick.value&&!n.open.value&&n.onOpenChange(!0)}function q(){const E=n.modelValue.value;e.displayValue?u.value=e.displayValue(E):!n.multiple.value&&E&&!Array.isArray(E)&&typeof E!="object"?u.value=E.toString():u.value="",pe(()=>{u.value=u.value})}return n.onResetSearchTerm(()=>{q()}),Ke(n.modelValue,async()=>{!n.isUserInputted.value&&n.resetSearchTermOnSelect.value&&q()},{immediate:!0,deep:!0}),Ke(n.filterState,(E,V)=>{!n.isVirtual.value&&V.count===0&&r.highlightFirstItem()}),(E,V)=>(m(),B(t(Xa),{ref_key:"primitiveElement",ref:i,modelValue:t(u),"onUpdate:modelValue":V[0]||(V[0]=P=>Et(u)?u.value=P:null),as:E.as,"as-child":E.asChild,"auto-focus":E.autoFocus,disabled:E.disabled,"aria-expanded":t(n).open.value,"aria-controls":t(n).contentId,"aria-autocomplete":"list",role:"combobox",autocomplete:"off",onClick:p,onInput:y,onKeydown:me(I,["down","up"]),onFocus:f,onBlur:g,onCompositionstart:t(d),onCompositionend:t(C)},{default:h(()=>[J(E.$slots,"default")]),_:3},8,["modelValue","as","as-child","auto-focus","disabled","aria-expanded","aria-controls","onCompositionstart","onCompositionend"]))}}),vl=fl,ml=U({__name:"ComboboxItem",props:{textValue:{type:String,required:!1},value:{type:null,required:!0},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select"],setup(l,{emit:a}){const e=l,o=a,n=Ge(void 0,"reka-combobox-item"),r=qe(),i=pl(null),{primitiveElement:s,currentElement:u}=Fe();if(e.value==="")throw new Error("A must have a value prop that is not an empty string. This is because the Combobox value can be set to an empty string to clear the selection and show the placeholder.");const _=F(()=>{if(r.isVirtual.value||r.ignoreFilter.value||!r.filterSearch.value)return!0;{const d=r.filterState.value.items.get(n);return d===void 0?!0:d>0}});return ge(()=>{var C;r.allItems.value.set(n,e.textValue||u.value.textContent||u.value.innerText);const d=i==null?void 0:i.id;d&&(r.allGroups.value.has(d)?(C=r.allGroups.value.get(d))==null||C.add(n):r.allGroups.value.set(d,new Set([n])))}),rt(()=>{r.allItems.value.delete(n)}),(d,C)=>_.value?St([_.value,t(r).filterSearch.value,t(r).disabled.value,d.disabled,e.value,e.as,e.asChild,...Object.values(d.$attrs)],()=>(m(),B(t(Za),ae({key:0},e,{id:t(n),ref_key:"primitiveElement",ref:s,disabled:t(r).disabled.value||d.disabled,onSelect:C[0]||(C[0]=I=>{var k;o("select",I),!I.defaultPrevented&&(!t(r).multiple.value&&!d.disabled&&!t(r).disabled.value?(I.preventDefault(),t(r).onOpenChange(!1),t(r).modelValue.value=e.value):t(r).multiple.value&&((k=t(r).inputElement.value)==null||k.focus()))})}),{default:h(()=>[J(d.$slots,"default",{},()=>[H($(d.value),1)])]),_:3},16,["id","disabled"])),C,1):G("v-if",!0)}}),hl=ml,gl=U({__name:"ComboboxPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(l){const a=l;return(e,o)=>(m(),B(t(ba),Bt(Yt(a)),{default:h(()=>[J(e.$slots,"default")]),_:3},16))}}),yl=gl,bl=U({__name:"ComboboxTrigger",props:{disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(l){const a=l,{forwardRef:e,currentElement:o}=re(),n=qe(),r=F(()=>a.disabled||n.disabled.value||!1);return ge(()=>{o.value&&n.onTriggerElementChange(o.value)}),(i,s)=>(m(),B(t(te),ae(a,{ref:t(e),type:i.as==="button"?"button":void 0,tabindex:"-1","aria-label":"Show popup","aria-haspopup":"listbox","aria-expanded":t(n).open.value,"aria-controls":t(n).contentId,"data-state":t(n).open.value?"open":"closed",disabled:r.value,"data-disabled":r.value?"":void 0,"aria-disabled":r.value??void 0,onClick:s[0]||(s[0]=u=>t(n).onOpenChange(!t(n).open.value))}),{default:h(()=>[J(i.$slots,"default")]),_:3},16,["type","aria-expanded","aria-controls","data-state","disabled","data-disabled","aria-disabled"]))}}),xl=bl,_l=U({__name:"ComboboxViewport",props:{nonce:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(l){const a=l,{forwardRef:e}=re(),{nonce:o}=we(a),n=xa(o),r=qe();return(i,s)=>(m(),S(ee,null,[v(t(te),ae({...i.$attrs,...a},{ref:t(e),"data-reka-combobox-viewport":"",role:"presentation",style:{position:"relative",flex:t(r).isVirtual.value?void 0:1,overflow:"auto"}}),{default:h(()=>[J(i.$slots,"default")]),_:3},16,["style"]),v(t(te),{as:"style",nonce:t(n)},{default:h(()=>s[0]||(s[0]=[H(" /* Hide scrollbars cross-browser and enable momentum scroll for touch devices */ [data-reka-combobox-viewport] { scrollbar-width:none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } [data-reka-combobox-viewport]::-webkit-scrollbar { display: none; } ")])),_:1,__:[0]},8,["nonce"])],64))}}),Cl=_l;const[kl,wl]=be("SwitchRoot");var ql=U({inheritAttrs:!1,__name:"SwitchRoot",props:{defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1,default:void 0},disabled:{type:Boolean,required:!1},id:{type:String,required:!1},value:{type:String,required:!1,default:"on"},trueValue:{type:null,required:!1,default:()=>!0},falseValue:{type:null,required:!1,default:()=>!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue"],setup(l,{emit:a}){const e=l,o=a,{disabled:n}=we(e),r=_e(e,"modelValue",o,{defaultValue:e.defaultValue??e.falseValue,passive:e.modelValue===void 0}),i=F(()=>r.value===e.trueValue);function s(){n.value||(r.value=i.value?e.falseValue:e.trueValue)}const{forwardRef:u,currentElement:_}=re(),d=it(_),C=Pa(),I=F(()=>{var k;return e.id&&_.value?(k=document.querySelector(`[for="${e.id}"]`))==null?void 0:k.innerText:void 0});return wl({checked:i,toggleCheck:s,disabled:n}),(k,y)=>(m(),S(ee,null,[v(t(te),ae({id:k.id,ref:t(u),role:"switch",type:k.as==="button"?"button":void 0,value:k.value,"aria-label":k.$attrs["aria-label"]||I.value,"aria-checked":i.value,"aria-required":k.required,"data-state":i.value?"checked":"unchecked","data-disabled":t(n)?"":void 0,"as-child":k.asChild,as:k.as,disabled:t(n)},{...t(C),...k.$attrs},{onClick:s,onKeydown:me(Ae(s,["prevent"]),["enter"])}),{default:h(()=>[J(k.$slots,"default",{modelValue:t(r),checked:i.value})]),_:3},16,["id","type","value","aria-label","aria-checked","aria-required","data-state","data-disabled","as-child","as","disabled","onKeydown"]),t(d)&&k.name?(m(),B(t(dt),ae({key:0,type:"checkbox",name:k.name,disabled:t(n),required:k.required,value:k.value,checked:i.value},t(C)),null,16,["name","disabled","required","value","checked"])):G("v-if",!0)],64))}}),Vl=ql,$l=U({__name:"SwitchThumb",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(l){const a=kl();return re(),(e,o)=>(m(),B(t(te),{"data-state":t(a).checked.value?"checked":"unchecked","data-disabled":t(a).disabled.value?"":void 0,"as-child":e.asChild,as:e.as},{default:h(()=>[J(e.$slots,"default")]),_:3},8,["data-state","data-disabled","as-child","as"]))}}),Il=$l,Sl=U({__name:"TabsContent",props:{value:{type:[String,Number],required:!0},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(l){const a=l,{forwardRef:e}=re(),o=ka(),n=F(()=>wa(o.baseId,a.value)),r=F(()=>qa(o.baseId,a.value)),i=F(()=>a.value===o.modelValue.value),s=A(i.value);return ge(()=>{o.registerContent(a.value),requestAnimationFrame(()=>{s.value=!1})}),Qt(()=>{o.unregisterContent(a.value)}),(u,_)=>(m(),B(t(Ft),{present:u.forceMount||i.value,"force-mount":""},{default:h(({present:d})=>[v(t(te),{id:r.value,ref:t(e),"as-child":u.asChild,as:u.as,role:"tabpanel","data-state":i.value?"active":"inactive","data-orientation":t(o).orientation.value,"aria-labelledby":n.value,hidden:!d,tabindex:"0",style:Zt({animationDuration:s.value?"0s":void 0})},{default:h(()=>[!t(o).unmountOnHide.value||d?J(u.$slots,"default",{key:0}):G("v-if",!0)]),_:2},1032,["id","as-child","as","data-state","data-orientation","aria-labelledby","hidden","style"])]),_:3},8,["present"]))}}),El=Sl;const[ct,Bl]=be("TagsInputRoot");var Al=U({__name:"TagsInputRoot",props:{modelValue:{type:[Array,null],required:!1},defaultValue:{type:Array,required:!1,default:()=>[]},addOnPaste:{type:Boolean,required:!1},addOnTab:{type:Boolean,required:!1},addOnBlur:{type:Boolean,required:!1},duplicate:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},delimiter:{type:null,required:!1,default:","},dir:{type:String,required:!1},max:{type:Number,required:!1,default:0},id:{type:String,required:!1},convertValue:{type:Function,required:!1},displayValue:{type:Function,required:!1,default:l=>l.toString()},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue","invalid","addTag","removeTag"],setup(l,{emit:a}){const e=l,o=a,{addOnPaste:n,disabled:r,delimiter:i,max:s,id:u,dir:_,addOnBlur:d,addOnTab:C}=we(e),I=st(_),k=_e(e,"modelValue",o,{defaultValue:e.defaultValue,passive:!0,deep:!0}),{forwardRef:y,currentElement:f}=re(),{focused:g}=ea(f),p=it(f),{getItems:q,CollectionSlot:E}=De({isProvider:!0}),V=A(),P=A(!1),ue=F(()=>Array.isArray(k.value)?[...k.value]:[]);function j(T){if(T!==-1){const M=q().filter(X=>X.ref.dataset.disabled!=="");k.value=k.value.filter((X,Y)=>Y!==T),o("removeTag",M[T].value)}}return Bl({modelValue:k,onAddValue:T=>{const M=[...ue.value],X=M.length>0&&typeof M[0]=="object",Y=M.length>0&&typeof e.defaultValue[0]=="object";if((X||Y)&&typeof e.convertValue!="function")throw new Error("You must provide a `convertValue` function when using objects as values.");const W=e.convertValue?e.convertValue(T):T;if(M.length>=s.value&&s.value)return o("invalid",W),!1;if(e.duplicate)return k.value=[...M,W],o("addTag",W),!0;if(M.includes(W))P.value=!0;else return k.value=[...M,W],o("addTag",W),!0;return o("invalid",W),!1},onRemoveValue:j,onInputKeydown:T=>{if(T.isComposing)return;const M=T.target,X=q().map(W=>W.ref).filter(W=>W.dataset.disabled!=="");if(!X.length)return;const Y=X.at(-1);switch(T.key){case"Delete":case"Backspace":{if(M.selectionStart!==0||M.selectionEnd!==0)break;if(V.value){const W=X.findIndex(ne=>ne===V.value);j(W),V.value=V.value===Y?X.at(W-1):X.at(W+1),T.preventDefault()}else T.key==="Backspace"&&(V.value=Y,T.preventDefault());break}case"Home":case"End":case"ArrowRight":case"ArrowLeft":{const W=T.key==="ArrowRight"&&I.value==="ltr"||T.key==="ArrowLeft"&&I.value==="rtl",ne=!W;if(M.selectionStart!==0||M.selectionEnd!==0)break;if(ne&&!V.value)V.value=Y,T.preventDefault();else if(W&&Y&&V.value===Y)V.value=void 0,T.preventDefault();else if(V.value){const le=Ra(T,V.value,void 0,{itemsArray:X,loop:!1,dir:I.value});le&&(V.value=le),T.preventDefault()}break}case"ArrowUp":case"ArrowDown":{V.value&&T.preventDefault();break}default:V.value=void 0}},selectedElement:V,isInvalidInput:P,addOnPaste:n,addOnBlur:d,addOnTab:C,dir:I,disabled:r,delimiter:i,max:s,id:u,displayValue:e.displayValue}),(T,M)=>(m(),B(t(E),null,{default:h(()=>[v(t(te),{ref:t(y),dir:t(I),as:T.as,"as-child":T.asChild,"data-invalid":P.value?"":void 0,"data-disabled":t(r)?"":void 0,"data-focused":t(g)?"":void 0},{default:h(()=>[J(T.$slots,"default",{modelValue:t(k)}),t(p)&&T.name?(m(),B(t(dt),{key:0,name:T.name,value:t(k),required:T.required,disabled:t(r)},null,8,["name","value","required","disabled"])):G("v-if",!0)]),_:3},8,["dir","as","as-child","data-invalid","data-disabled","data-focused"])]),_:3}))}}),Fl=Al,Ol=U({__name:"TagsInputInput",props:{placeholder:{type:String,required:!1},autoFocus:{type:Boolean,required:!1},maxLength:{type:Number,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"input"}},setup(l){const a=l,e=ct(),{forwardRef:o,currentElement:n}=re();function r(y){if(e.selectedElement.value=void 0,!e.addOnBlur.value)return;const f=y.target,g=y.relatedTarget,p=f.getAttribute("aria-controls");if(p&&(g!=null&&g.closest(`#${CSS.escape(p)}`))||!f.value)return;e.onAddValue(f.value)&&(f.value="")}function i(y){e.addOnTab.value&&d(y)}const{isComposing:s,handleCompositionStart:u,handleCompositionEnd:_}=ut();async function d(y){if(s.value||(await pe(),y.defaultPrevented))return;const f=y.target;if(!f.value)return;e.onAddValue(f.value)&&(f.value=""),y.preventDefault()}function C(y){if(s.value||(e.isInvalidInput.value=!1,y.data===null))return;const f=e.delimiter.value;if(f===y.data||f instanceof RegExp&&f.test(y.data)){const p=y.target;if(p.value=p.value.replace(f,""),p.value.trim()===""){p.value="";return}e.onAddValue(p.value)&&(p.value="")}}function I(y){s.value||e.onInputKeydown(y)}function k(y){if(e.addOnPaste.value){y.preventDefault();const f=y.clipboardData;if(!f)return;const g=f.getData("text");e.delimiter.value?g.split(e.delimiter.value).forEach(q=>{e.onAddValue(q)}):e.onAddValue(g)}}return ge(()=>{const y=n.value.nodeName==="INPUT"?n.value:n.value.querySelector("input");y&&setTimeout(()=>{a.autoFocus&&(y==null||y.focus())},1)}),(y,f)=>{var g;return m(),B(t(te),{id:(g=t(e).id)==null?void 0:g.value,ref:t(o),type:"text",autocomplete:"off",autocorrect:"off",autocapitalize:"off",as:y.as,"as-child":y.asChild,maxlength:y.maxLength,placeholder:y.placeholder,disabled:t(e).disabled.value,"data-invalid":t(e).isInvalidInput.value?"":void 0,onInput:C,onKeydown:[me(d,["enter"]),me(i,["tab"]),I],onBlur:r,onCompositionstart:t(u),onCompositionend:t(_),onPaste:k},{default:h(()=>[J(y.$slots,"default")]),_:3},8,["id","as","as-child","maxlength","placeholder","disabled","data-invalid","onCompositionstart","onCompositionend"])}}}),Tl=Ol;const[zt,Rl]=be("TagsInputItem");var zl=U({__name:"TagsInputItem",props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(l){const a=l,{value:e}=we(a),o=ct(),{forwardRef:n,currentElement:r}=re(),{CollectionItem:i}=De(),s=F(()=>o.selectedElement.value===r.value),u=F(()=>a.disabled||o.disabled.value),_=Rl({value:e,isSelected:s,disabled:u,textId:"",displayValue:F(()=>o.displayValue(e.value))});return(d,C)=>(m(),B(t(i),{value:t(e)},{default:h(()=>[v(t(te),{ref:t(n),as:d.as,"as-child":d.asChild,"aria-labelledby":t(_).textId,"aria-current":s.value,"data-disabled":u.value?"":void 0,"data-state":s.value?"active":"inactive"},{default:h(()=>[J(d.$slots,"default")]),_:3},8,["as","as-child","aria-labelledby","aria-current","data-disabled","data-state"])]),_:3},8,["value"]))}}),Pl=zl,Dl=U({__name:"TagsInputItemDelete",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(l){const a=l;re();const e=ct(),o=zt(),n=F(()=>{var i;return((i=o.disabled)==null?void 0:i.value)||e.disabled.value});function r(){if(n.value)return;const i=e.modelValue.value.findIndex(s=>He(s,o.value.value));e.onRemoveValue(i)}return(i,s)=>(m(),B(t(te),ae({tabindex:"-1"},a,{"aria-labelledby":t(o).textId,"aria-current":t(o).isSelected.value,"data-state":t(o).isSelected.value?"active":"inactive","data-disabled":n.value?"":void 0,type:i.as==="button"?"button":void 0,onClick:r}),{default:h(()=>[J(i.$slots,"default")]),_:3},16,["aria-labelledby","aria-current","data-state","data-disabled","type"]))}}),Ll=Dl,Nl=U({__name:"TagsInputItemText",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(l){const a=l,e=zt();return re(),e.textId||(e.textId=Ge(void 0,"reka-tags-input-item-text")),(o,n)=>(m(),B(t(te),ae(a,{id:t(e).textId}),{default:h(()=>[J(o.$slots,"default",{},()=>[H($(t(e).displayValue.value),1)])]),_:3},16,["id"]))}}),Ul=Nl;const Ml=U({__name:"Switch",props:{class:{},modelValue:{type:Boolean},id:{}},emits:["update:modelValue"],setup(l,{emit:a}){const e=l,o=a;return(n,r)=>(m(),B(t(Vl),{id:e.id,"model-value":e.modelValue,class:fe(t(ve)("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border border-transparent transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-50",e.class)),"onUpdate:modelValue":r[0]||(r[0]=i=>o("update:modelValue",i))},{default:h(()=>[v(t(Il),{class:"bg-background pointer-events-none block size-4 rounded-full shadow-sm ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5"})]),_:1},8,["id","model-value","class"]))}}),Wl={class:"flex flex-col gap-1.5"},Pt=U({__name:"TagsInput",props:{modelValue:{},placeholder:{},validate:{type:Function},class:{}},emits:["update:modelValue"],setup(l,{emit:a}){const e=l,o=a,n=F(()=>e.validate?new Set(e.modelValue.filter(i=>{var s;return(s=e.validate)==null?void 0:s.call(e,i)})):new Set),r=F(()=>{if(!e.validate)return[];const i=new Set;for(const s of e.modelValue){const u=e.validate(s);u&&i.add(u)}return[...i]});return(i,s)=>(m(),S("div",Wl,[v(t(Fl),{"model-value":e.modelValue,delimiter:",","add-on-paste":!0,class:fe(t(ve)("border-input bg-background focus-within:border-ring focus-within:ring-ring/40 flex min-h-9 w-full flex-wrap items-center gap-1.5 rounded-md border px-2 py-1.5 shadow-xs transition-[color,box-shadow] focus-within:ring-[3px]",e.class)),"onUpdate:modelValue":s[0]||(s[0]=u=>o("update:modelValue",u))},{default:h(()=>[(m(!0),S(ee,null,de(e.modelValue,u=>(m(),B(t(Pl),{key:u,value:u,class:fe(t(ve)("flex items-center gap-1 rounded-md border px-1.5 py-0.5 font-mono text-xs",n.value.has(u)?"border-destructive/50 bg-destructive/10 text-destructive":"bg-secondary text-secondary-foreground border-transparent"))},{default:h(()=>[v(t(Ul)),v(t(Ll),{class:"hover:text-foreground opacity-60 transition-opacity hover:opacity-100"},{default:h(()=>[v(t(At),{class:"size-3"})]),_:1})]),_:1},8,["value","class"]))),128)),v(t(Tl),{placeholder:e.modelValue.length?"":e.placeholder,class:"placeholder:text-muted-foreground min-w-24 flex-1 bg-transparent px-1 text-sm outline-none"},null,8,["placeholder"])]),_:1},8,["model-value","class"]),(m(!0),S(ee,null,de(r.value,u=>(m(),S("p",{key:u,class:"text-destructive text-xs"},$(u),1))),128))]))}}),xt=U({__name:"TabsContent",props:{class:{},value:{}},setup(l){const a=l;return(e,o)=>(m(),B(t(El),{value:a.value,class:fe(t(ve)("outline-none",a.class))},{default:h(()=>[J(e.$slots,"default")]),_:3},8,["value","class"]))}}),Kl=["value"],Qe=U({__name:"Textarea",props:{class:{},modelValue:{}},emits:["update:modelValue"],setup(l,{emit:a}){const e=l,o=a;return(n,r)=>(m(),S("textarea",{value:e.modelValue,class:fe(t(ve)("border-input bg-background flex min-h-20 w-full rounded-md border px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none sm:text-sm","placeholder:text-muted-foreground field-sizing-content","focus-visible:border-ring focus-visible:ring-ring/40 focus-visible:ring-[3px]","disabled:cursor-not-allowed disabled:opacity-50",e.class)),onInput:r[0]||(r[0]=i=>o("update:modelValue",i.target.value))},null,42,Kl))}}),We=A(null),at=A({ip:"",site:""}),lt=A(!1);let Re=null;async function Hl(l=!1){if(!(We.value&&!l))return Re||(lt.value=!0,Re=(async()=>{try{const a=await ye.geo(l);We.value=a,at.value={ip:a.ipError??"",site:a.siteError??""}}catch(a){const e=a instanceof Error?a.message:String(a);at.value={ip:e,site:e},We.value={ip:[],site:[]}}finally{lt.value=!1,Re=null}})(),Re)}function jl(){return{geo:We,error:at,loading:lt,load:Hl}}const Ze=new Map;function Gl(l){const a=l==="zh"?"zh-CN":"en";if(!Ze.has(a))try{Ze.set(a,new Intl.DisplayNames([a],{type:"region"}))}catch{return null}return Ze.get(a)??null}function Xl(l,a){var o;if(!/^[a-z]{2}$/i.test(l))return null;const e=l.toUpperCase();try{const n=(o=Gl(a))==null?void 0:o.of(e);return n&&n!==e?n:null}catch{return null}}function Jl(l){if(!/^[a-z]{2}$/i.test(l))return"";const a=127462,e=l.toUpperCase();return String.fromCodePoint(a+e.charCodeAt(0)-65,a+e.charCodeAt(1)-65)}const Yl={class:"flex flex-col gap-1.5"},Ql={class:"text-muted-foreground text-xs"},Zl={key:0,class:"font-mono"},en={key:0,class:"flex flex-wrap gap-1.5"},tn=["aria-label","onClick"],an={key:1,class:"text-muted-foreground text-xs"},ln={key:0,class:"shrink-0"},nn={class:"truncate"},on={class:"text-muted-foreground ml-auto shrink-0 text-[11px] tabular-nums"},rn=U({__name:"GeoPicker",props:{modelValue:{},kind:{}},emits:["update:modelValue"],setup(l,{emit:a}){const e=l,o=a,{lang:n}=ta(),{geo:r,error:i,loading:s,load:u}=jl(),_=A(""),d=F(()=>{var q,E;const g=(e.kind==="geoip"?(q=r.value)==null?void 0:q.ip:(E=r.value)==null?void 0:E.site)??[],p=[];for(const V of g)if(e.kind==="geoip"){const P=Xl(V.code,n.value);p.push({value:V.code,label:P??V.code,hint:`${V.code.toUpperCase()} · ${V.count}`,flag:Jl(V.code)})}else{p.push({value:V.code,label:V.code,hint:String(V.count),flag:""});for(const P of V.attributes??[])p.push({value:`${V.code}@${P}`,label:`${V.code}@${P}`,hint:x("rules.geo.attribute"),flag:""})}return p}),C=F(()=>{const g=_.value.trim().toLowerCase();return(g?d.value.filter(q=>q.value.includes(g)||q.label.toLowerCase().includes(g)):d.value).slice(0,300)}),I=F(()=>!s.value&&d.value.length===0),k=F(()=>e.kind==="geoip"?i.value.ip:i.value.site);function y(g){o("update:modelValue",e.modelValue.filter(p=>p!==g))}function f(g){const p=d.value.find(q=>q.value===g);return p?`${p.flag} ${p.label}`.trim():g}return u(),(g,p)=>(m(),S("div",Yl,[I.value?(m(),S(ee,{key:0},[v(t(Pt),{"model-value":e.modelValue,placeholder:e.kind==="geoip"?"cn, us, private":"category-ads-all","onUpdate:modelValue":p[0]||(p[0]=q=>o("update:modelValue",q))},null,8,["model-value","placeholder"]),O("p",Ql,[H($(t(x)("rules.geo.unavailable"))+" ",1),k.value?(m(),S("span",Zl,"("+$(k.value)+")",1)):G("",!0)])],64)):(m(),S(ee,{key:1},[e.modelValue.length?(m(),S("div",en,[(m(!0),S(ee,null,de(e.modelValue,q=>(m(),S("span",{key:q,class:"bg-secondary text-secondary-foreground inline-flex items-center gap-1 rounded-md px-1.5 py-0.5 text-xs"},[H($(f(q))+" ",1),O("button",{type:"button",class:"opacity-60 transition-opacity hover:opacity-100","aria-label":t(x)("common.delete"),onClick:E=>y(q)},[v(t(At),{class:"size-3"})],8,tn)]))),128))])):G("",!0),t(s)?(m(),S("p",an,$(t(x)("rules.geo.loading")),1)):G("",!0),v(t(al),{"model-value":e.modelValue,multiple:"","ignore-filter":"","reset-search-term-on-blur":!1,"onUpdate:modelValue":p[2]||(p[2]=q=>o("update:modelValue",q??[]))},{default:h(()=>[v(t(nl),{class:"border-input bg-background focus-within:border-ring focus-within:ring-ring/40 flex h-9 w-full items-center gap-2 rounded-md border px-3 shadow-xs transition-[color,box-shadow] focus-within:ring-[3px]"},{default:h(()=>[v(t(Va),{class:"text-muted-foreground size-4 shrink-0"}),v(t(vl),{modelValue:_.value,"onUpdate:modelValue":p[1]||(p[1]=q=>_.value=q),placeholder:e.kind==="geoip"?t(x)("rules.geo.searchCountry"):t(x)("rules.geo.searchSite"),class:"placeholder:text-muted-foreground w-full bg-transparent text-sm outline-none"},null,8,["modelValue","placeholder"]),v(t(xl),{class:"text-muted-foreground shrink-0"},{default:h(()=>[v(t(Sa),{class:"size-4"})]),_:1})]),_:1}),v(t(yl),null,{default:h(()=>[v(t(ul),{position:"popper","side-offset":4,class:"bg-popover text-popover-foreground animate-fade-in z-50 max-h-72 w-[var(--reka-combobox-trigger-width)] overflow-hidden rounded-md border shadow-md"},{default:h(()=>[v(t(Cl),{class:"max-h-72 overflow-y-auto p-1"},{default:h(()=>[v(t(cl),{class:"text-muted-foreground px-2 py-4 text-center text-xs"},{default:h(()=>[H($(t(x)("common.empty")),1)]),_:1}),(m(!0),S(ee,null,de(C.value,q=>(m(),B(t(hl),{key:q.value,value:q.value,class:fe(t(ve)("data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none"))},{default:h(()=>[q.flag?(m(),S("span",ln,$(q.flag),1)):G("",!0),O("span",nn,$(q.label),1),O("span",on,$(q.hint),1),e.modelValue.includes(q.value)?(m(),B(t(_a),{key:1,class:"absolute right-2 size-4"})):G("",!0)]),_:2},1032,["value","class"]))),128))]),_:1})]),_:1})]),_:1})]),_:1},8,["model-value"])],64))]))}}),Ce=[{key:"proto",group:"basic",type:"proto",expr:"proto"},{key:"ip.dst",group:"basic",type:"ip",expr:"ip.dst"},{key:"ip.src",group:"basic",type:"ip",expr:"ip.src"},{key:"port.dst",group:"basic",type:"port",expr:"port.dst"},{key:"port.src",group:"basic",type:"port",expr:"port.src"},{key:"tls.sni",group:"domain",type:"domain",expr:"string(tls?.req?.sni)",analyzer:"tls"},{key:"quic.sni",group:"domain",type:"domain",expr:"string(quic?.req?.sni)",analyzer:"quic"},{key:"dns.name",group:"domain",type:"domain",analyzer:"dns",iter:"dns?.questions ?? []",item:"string(.name)"},{key:"http.host",group:"http",type:"domain",expr:"string(http?.req?.headers?.host)",analyzer:"http"},{key:"http.path",group:"http",type:"text",expr:"string(http?.req?.path)",analyzer:"http"},{key:"http.method",group:"http",type:"text",expr:"string(http?.req?.method)",analyzer:"http"},{key:"http.ua",group:"http",type:"text",expr:'string(get(http?.req?.headers, "user-agent"))',analyzer:"http"},{key:"analyzer",group:"protocol",type:"analyzer"}],nt=Object.fromEntries(Ce.map(l=>[l.key,l])),Dt={proto:["is"],ip:["cidr","geoip","is"],port:["is","range"],domain:["subdomain","wildcard","is","contains","endsWith","startsWith","regex","geosite"],text:["contains","is","startsWith","endsWith","regex"],analyzer:["detected"]},sn=["tcp","udp"];function un(l){return Dt[l][0]}function _t(l){return Dt[l.type]}function se(l){return`"${l.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}const dn=/[.+?^${}()|[\]\\]/g;function Ct(l){return`^${l.replace(dn,"\\$&").replace(/\*/g,".*")}$`}function Lt(l){const a=l.trim();if(a==="*")return{kind:"any",value:""};if(!a.includes("*"))return{kind:"exact",value:a};const e=a.startsWith("*"),o=a.endsWith("*"),n=a.replace(/^\*/,"").replace(/\*$/,"");return n.includes("*")?{kind:"regex",value:Ct(a)}:e&&o?{kind:"contains",value:n}:e?{kind:"suffix",value:n}:o?{kind:"prefix",value:n}:{kind:"regex",value:Ct(a)}}function cn(l,a){const e=Lt(a);switch(e.kind){case"any":return`${l} != ""`;case"exact":return`${l} == ${se(e.value)}`;case"suffix":return`${l} endsWith ${se(e.value)}`;case"prefix":return`${l} startsWith ${se(e.value)}`;case"contains":return`${l} contains ${se(e.value)}`;case"regex":return`${l} matches ${se(e.value)}`}}function pn(l,a,e,o){const n=o.trim();switch(a){case"is":return l.type==="port"?`${e} == ${n}`:`${e} == ${se(n)}`;case"subdomain":return`(${e} == ${se(n)} || ${e} endsWith ${se("."+n)})`;case"wildcard":return cn(e,n);case"contains":case"startsWith":case"endsWith":return`${e} ${a} ${se(n)}`;case"regex":return`${e} matches ${se(n)}`;case"geosite":return`geosite(${e}, ${se(n.toLowerCase())})`;case"cidr":return`cidr(${e}, ${se(n)})`;case"geoip":return`geoip(${e}, ${se(n.toLowerCase())})`;case"detected":return`${n} != nil`;case"range":return""}}function fn(l){const a=nt[l.field];if(!a)return"";const e=l.values.map(n=>n.trim()).filter(Boolean);let o;if(l.op==="range"){const[n,r]=l.values;if(!(n!=null&&n.trim())||!(r!=null&&r.trim()))return"";o=`(${a.expr} >= ${n.trim()} && ${a.expr} <= ${r.trim()})`}else{if(e.length===0)return"";const n=a.iter?a.item:a.expr,r=e.map(s=>pn(a,l.op,n,s)),i=r.length>1?`(${r.join(" || ")})`:r[0];o=a.iter?`any(${a.iter}, {${i}})`:i}return l.negate?o.startsWith("(")&&o.endsWith(")")?`!${o}`:`!(${o})`:o}function ot(l){const a=l.conditions.map(fn).filter(Boolean);return a.length===0?"":a.length===1?a[0]:a.join(l.mode==="and"?" && ":" || ")}const vn=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;function Nt(l){const a=vn.exec(l);return a?a.slice(1).every(e=>Number(e)<=255&&String(Number(e))===e):!1}function Ut(l){return!l.includes(":")||!/^[0-9a-fA-F:.]+$/.test(l)?!1:(l.match(/::/g)??[]).length<=1&&l.split(":").length<=9}function mn(l){return Nt(l)||Ut(l)}function hn(l){const a=l.lastIndexOf("/");if(a<0)return!1;const e=l.slice(0,a),o=l.slice(a+1);if(!/^\d{1,3}$/.test(o))return!1;const n=Number(o);return Nt(e)?n<=32:Ut(e)?n<=128:!1}function gn(l){return/^\d{1,5}$/.test(l)&&Number(l)<=65535}function yn(l,a,e){const o=e.trim();if(!o)return"";switch(a){case"cidr":return hn(o)?"":x("rules.invalidCidr");case"regex":try{return new RegExp(o),""}catch{return x("rules.invalidRegex")}case"geoip":case"geosite":return/^[a-z0-9-]+(@[a-z0-9-]+)*$/i.test(o)?"":x("rules.invalidGeo");case"wildcard":return/^[a-z0-9.*_-]+$/i.test(o)?"":x("rules.invalidDomain")}if((l==="domain"||l==="text")&&o.includes("*"))return x("rules.starHint");switch(l){case"ip":return mn(o)?"":x("rules.invalidIp");case"port":return gn(o)?"":x("rules.invalidPort");case"domain":return/^[a-z0-9.*_-]+$/i.test(o)?"":x("rules.invalidDomain");default:return""}}const bn={class:"bg-muted/40 flex flex-col gap-2 rounded-lg border p-2.5"},xn={class:"flex flex-wrap items-center gap-2"},_n=["aria-pressed"],Cn={key:0,class:"flex flex-wrap gap-1.5"},kn=["onClick"],wn={key:1,class:"flex flex-wrap gap-1.5"},qn=["onClick"],Vn={key:2,class:"flex items-center gap-2"},$n=U({__name:"ConditionRow",props:{condition:{},analyzers:{},removable:{type:Boolean}},emits:["update","remove"],setup(l,{emit:a}){const e=l,o=a,n=F(()=>nt[e.condition.field]??Ce[0]),r=f=>`rules.field.${f.replace(/\./g,"_")}`,i=F(()=>Ce.map(f=>({value:f.key,label:`${x(`rules.group.${f.group}`)} · ${x(r(f.key))}`}))),s=F(()=>_t(n.value).map(f=>({value:f,label:x(`rules.op.${f}`)})));function u(f){o("update",{...e.condition,...f})}function _(f){const g=nt[f];if(!g)return;const p=_t(g).includes(e.condition.op);u({field:f,op:p?e.condition.op:un(g.type),values:p&&g.type===n.value.type?e.condition.values:[]})}function d(f){u({op:f,values:[]})}function C(f){const g=e.condition.values.includes(f)?e.condition.values.filter(p=>p!==f):[...e.condition.values,f];u({values:g})}const I=f=>yn(n.value.type,e.condition.op,f),k=F(()=>{switch(e.condition.op){case"cidr":return"10.0.0.0/8, 2001:db8::/32";case"wildcard":return"*.example.com";case"regex":return"^/api/v\\d+/"}switch(n.value.type){case"ip":return"1.2.3.4";case"port":return"443";case"domain":return"example.com";default:return x("rules.valuePlaceholder")}}),y=F(()=>e.condition.op!=="wildcard"?[]:e.condition.values.filter(Boolean).slice(0,4).map(f=>{const g=Lt(f);return`${f} → ${x(`rules.wildcard.${g.kind}`,{value:g.value})}`}));return(f,g)=>(m(),S("div",bn,[O("div",xn,[v(t(je),{"model-value":l.condition.field,options:i.value,"aria-label":t(x)("rules.builder.field"),class:"h-8 min-w-0 flex-1 basis-45 text-xs sm:basis-56","onUpdate:modelValue":_},null,8,["model-value","options","aria-label"]),v(t(je),{"model-value":l.condition.op,options:s.value,"aria-label":t(x)("rules.builder.operator"),class:"h-8 min-w-0 flex-1 basis-32 text-xs sm:basis-40 sm:flex-none","onUpdate:modelValue":d},null,8,["model-value","options","aria-label"]),O("button",{type:"button",class:fe(t(ve)("h-8 shrink-0 rounded-md border px-2 text-xs font-medium transition-colors",l.condition.negate?"border-block/40 bg-block/10 text-block":"text-muted-foreground hover:bg-accent")),"aria-pressed":l.condition.negate,onClick:g[0]||(g[0]=p=>u({negate:!l.condition.negate}))},$(t(x)("rules.builder.not")),11,_n),l.removable?(m(),B(t(oe),{key:0,variant:"ghost",size:"icon-sm",class:"text-muted-foreground hover:text-destructive shrink-0","aria-label":t(x)("common.delete"),onClick:g[1]||(g[1]=p=>o("remove"))},{default:h(()=>[v(t(Ot),{class:"size-3.5"})]),_:1},8,["aria-label"])):G("",!0)]),n.value.type==="proto"?(m(),S("div",Cn,[(m(!0),S(ee,null,de(t(sn),p=>(m(),S("button",{key:p,type:"button",class:fe(t(ve)("rounded-md border px-2.5 py-1 font-mono text-xs uppercase transition-colors",l.condition.values.includes(p)?"border-primary/40 bg-primary/10 text-foreground":"text-muted-foreground hover:bg-accent")),onClick:q=>C(p)},$(p),11,kn))),128))])):n.value.type==="analyzer"?(m(),S("div",wn,[(m(!0),S(ee,null,de(l.analyzers,p=>(m(),S("button",{key:p,type:"button",class:fe(t(ve)("rounded-md border px-2.5 py-1 font-mono text-xs transition-colors",l.condition.values.includes(p)?"border-primary/40 bg-primary/10 text-foreground":"text-muted-foreground hover:bg-accent")),onClick:q=>C(p)},$(p),11,qn))),128))])):l.condition.op==="range"?(m(),S("div",Vn,[v(t(tt),{"model-value":l.condition.values[0]??"",inputmode:"numeric",placeholder:"1024",class:"h-8 w-28 text-xs","onUpdate:modelValue":g[2]||(g[2]=p=>u({values:[p,l.condition.values[1]??""]}))},null,8,["model-value"]),g[6]||(g[6]=O("span",{class:"text-muted-foreground text-xs"},"–",-1)),v(t(tt),{"model-value":l.condition.values[1]??"",inputmode:"numeric",placeholder:"65535",class:"h-8 w-28 text-xs","onUpdate:modelValue":g[3]||(g[3]=p=>u({values:[l.condition.values[0]??"",p]}))},null,8,["model-value"])])):l.condition.op==="geoip"||l.condition.op==="geosite"?(m(),B(rn,{key:3,"model-value":l.condition.values,kind:l.condition.op,"onUpdate:modelValue":g[4]||(g[4]=p=>u({values:p}))},null,8,["model-value","kind"])):(m(),S(ee,{key:4},[v(t(Pt),{"model-value":l.condition.values,placeholder:k.value,validate:I,"onUpdate:modelValue":g[5]||(g[5]=p=>u({values:p}))},null,8,["model-value","placeholder"]),(m(!0),S(ee,null,de(y.value,p=>(m(),S("p",{key:p,class:"text-muted-foreground font-mono text-[11px]"},$(p),1))),128))],64))]))}});let kt=0;function xe(l={}){return kt+=1,{id:`c${kt}`,field:"tls.sni",op:"subdomain",negate:!1,values:[],...l}}function et(){return{mode:"and",conditions:[xe()]}}const In={class:"flex flex-col gap-3"},Sn={class:"flex flex-wrap items-center gap-2 text-sm"},En={class:"text-muted-foreground"},Bn={class:"bg-muted inline-flex rounded-md p-0.5"},An=["onClick"],Fn={class:"text-muted-foreground"},On={class:"flex flex-col gap-2"},Tn={key:0,class:"flex items-center gap-2"},Rn={class:"text-muted-foreground text-[11px] font-medium uppercase"},zn={class:"flex flex-col gap-1"},Pn={class:"text-muted-foreground text-xs font-medium"},Dn={class:"bg-muted/60 text-muted-foreground block rounded-md px-2.5 py-2 font-mono text-[11px] leading-relaxed break-all"},Ln=U({__name:"RuleBuilder",props:{modelValue:{},analyzers:{}},emits:["update:modelValue"],setup(l,{emit:a}){const e=l,o=a,n=F(()=>ot(e.modelValue));function r(_){o("update:modelValue",{...e.modelValue,..._})}function i(_,d){const C=[...e.modelValue.conditions];C[_]=d,r({conditions:C})}function s(_){r({conditions:e.modelValue.conditions.filter((d,C)=>C!==_)})}function u(){r({conditions:[...e.modelValue.conditions,xe()]})}return(_,d)=>(m(),S("div",In,[O("div",Sn,[O("span",En,$(t(x)("rules.builder.match")),1),O("div",Bn,[(m(),S(ee,null,de(["and","or"],C=>O("button",{key:C,type:"button",class:fe(t(ve)("rounded-[5px] px-2.5 py-1 text-xs font-medium transition-colors",e.modelValue.mode===C?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground")),onClick:I=>r({mode:C})},$(t(x)(`rules.builder.${C}`)),11,An)),64))]),O("span",Fn,$(t(x)("rules.builder.matchSuffix")),1)]),O("div",On,[(m(!0),S(ee,null,de(e.modelValue.conditions,(C,I)=>(m(),S(ee,{key:C.id},[I>0?(m(),S("div",Tn,[d[0]||(d[0]=O("span",{class:"bg-border h-px flex-1"},null,-1)),O("span",Rn,$(t(x)(`rules.builder.${e.modelValue.mode}`)),1),d[1]||(d[1]=O("span",{class:"bg-border h-px flex-1"},null,-1))])):G("",!0),v($n,{condition:C,analyzers:e.analyzers,removable:e.modelValue.conditions.length>1,onUpdate:k=>i(I,k),onRemove:k=>s(I)},null,8,["condition","analyzers","removable","onUpdate","onRemove"])],64))),128))]),v(t(oe),{variant:"outline",size:"sm",class:"w-full",onClick:u},{default:h(()=>[v(t(Tt),{class:"size-3.5"}),H(" "+$(t(x)("rules.builder.addCondition")),1)]),_:1}),O("div",zn,[O("span",Pn,$(t(x)("rules.builder.preview")),1),O("code",Dn,$(n.value||t(x)("rules.builder.empty")),1)])]))}});function wt(l){const a=l.trim();if(!a)return null;let e="and",o=ke(a,"&&");if(o.length===1){const r=ke(a,"||");r.length>1&&(e="or",o=r)}const n=[];for(const r of o){const i=Nn(r);if(!i)return null;n.push(i)}return{mode:e,conditions:n}}function Nn(l){let a=l.trim(),e=!1;a.startsWith("!")&&(e=!0,a=a.slice(1).trim());const o=Pe(a);if(o)return xe({field:o.field.key,op:o.op,negate:e,values:[o.value]});const n=pt(a),r=Mt(n,"any");if(r!==null){const[s,u]=ke(r,",").map(d=>d.trim());if(!(u!=null&&u.startsWith("{"))||!u.endsWith("}"))return null;const _=Ce.find(d=>d.iter===s);return _?qt(_,u.slice(1,-1).trim(),e,_.item):null}const i=ke(n,"&&");if(i.length===2){const s=/^(\S+)\s*>=\s*(\d+)$/.exec(i[0].trim()),u=/^(\S+)\s*<=\s*(\d+)$/.exec(i[1].trim());if(s&&u&&s[1]===u[1]){const _=Ce.find(d=>d.expr===s[1]&&d.type==="port");return _?xe({field:_.key,op:"range",negate:e,values:[s[2],u[2]]}):null}return null}return i.length>1?null:qt(null,n,e)}function qt(l,a,e,o){const n=Pe(a.trim(),o);if(n&&(!l||n.field.key===l.key))return xe({field:n.field.key,op:n.op,negate:e,values:[n.value]});const r=ke(pt(a),"||");if(r.length<2)return null;const i=[];let s=l;for(const d of r){const C=Pe(d.trim(),o);if(!C||(s||(s=C.field),C.field.key!==s.key))return null;i.push(C)}if(!s)return null;if(new Set(i.map(d=>d.op)).size===1)return xe({field:s.key,op:i[0].op,negate:e,values:i.map(d=>d.value)});const _=i.map(d=>Un(d.op,d.value));return _.some(d=>d===null)?null:xe({field:s.key,op:"wildcard",negate:e,values:_})}function Un(l,a){switch(l){case"wildcard":return a;case"is":return a.includes("*")?null:a;case"endsWith":return`*${a}`;case"startsWith":return`${a}*`;case"contains":return`*${a}*`;default:return null}}const Mn={geoip:"geoip",geosite:"geosite",cidr:"cidr"},Wn={"==":"is",contains:"contains",startsWith:"startsWith",endsWith:"endsWith",matches:"regex"};function Vt(l){const a=[];for(const e of Ce)e.item&&a.push({subject:e.item,field:e}),e.expr&&a.push({subject:e.expr,field:e});return a.sort((e,o)=>+(o.subject===l)-+(e.subject===l)||o.subject.length-e.subject.length)}function Pe(l,a){const e=l.trim(),o=/^([a-z][\w]*)\s*!=\s*nil$/.exec(e);if(o){const n=Ce.find(r=>r.type==="analyzer");if(n)return{field:n,subject:"",op:"detected",value:o[1]}}if(e.startsWith("(")&&Kt(e)){const n=ke(pt(e),"||");if(n.length===2){const r=Pe(n[0].trim(),a),i=Pe(n[1].trim(),a);if(r&&i&&r.op==="is"&&i.op==="endsWith"&&r.field.key===i.field.key&&i.value===`.${r.value}`)return{...r,op:"subdomain"}}return null}for(const[n,r]of Object.entries(Mn)){const i=Mt(e,n);if(i===null)continue;const s=ke(i,",").map(d=>d.trim());if(s.length!==2)return null;const u=Vt(a).find(d=>d.subject===s[0]),_=$t(s[1]);return!u||_===null?null:{field:u.field,subject:u.subject,op:r,value:_}}for(const{subject:n,field:r}of Vt(a)){if(!e.startsWith(n))continue;const i=e.slice(n.length).trim();if(i==='!= ""')return{field:r,subject:n,op:"wildcard",value:"*"};for(const[s,u]of Object.entries(Wn)){if(!i.startsWith(s))continue;const _=i.slice(s.length).trim();if(r.type==="port"&&/^\d+$/.test(_)&&u==="is")return{field:r,subject:n,op:u,value:_};const d=$t(_);if(d!==null)return{field:r,subject:n,op:u,value:d}}return null}return null}function Mt(l,a){const e=`${a}(`;if(!l.startsWith(e)||!l.endsWith(")"))return null;const o=l.slice(e.length,-1);return Wt(o)?o:null}function $t(l){if(l.length<2||l[0]!=='"'||l[l.length-1]!=='"')return null;const a=l.slice(1,-1);let e="";for(let o=0;oi.trim()).filter(i=>i.length>0)}function Wt(l){let a=0,e=!1;for(let o=0;o{var c;return(((c=r.value)==null?void 0:c.analyzers)??[]).map(b=>b.name)}),q=F(()=>{var c;return[{value:"",label:x("rules.actionNone")},...(((c=r.value)==null?void 0:c.actions)??[]).map(b=>({value:b,label:x(`action.${b}`)}))]}),E=F(()=>{var c;return(((c=r.value)==null?void 0:c.modifiers)??[]).map(b=>({value:b,label:b}))}),V=c=>{switch(c){case"allow":return"allow";case"block":return"block";case"drop":return"drop";case"modify":return"modify";default:return"muted"}};ge(async()=>{try{const[c,b]=await Promise.all([ye.rules(),ye.meta()]);e.value=c.rules??[],o.value=c.raw,n.value=c.path,r.value=b}catch(c){_.value=c instanceof Ee?c.message:String(c)}finally{i.value=!1}});async function P(c){if(!(c===a.value||s.value)){s.value=!0,_.value="";try{const b=await ye.validateRules(c==="yaml"?{rules:e.value}:{raw:o.value});if(c==="yaml")o.value=b.raw;else{if(!b.valid){_.value=b.error??x("rules.invalid");return}e.value=b.rules??[]}a.value=c}catch(b){_.value=b instanceof Ee?b.message:String(b)}finally{s.value=!1}}}function ue(){return a.value==="yaml"?{raw:o.value}:{rules:e.value}}async function j(){s.value=!0,_.value="";try{const c=await ye.validateRules(ue());c.valid?Je.success(x("rules.valid")):_.value=c.error??x("rules.invalid")}catch(c){_.value=c instanceof Ee?c.message:String(c)}finally{s.value=!1}}async function T(){s.value=!0,_.value="";try{const c=await ye.saveRules(ue());e.value=c.rules??[],o.value=c.raw,u.value=!1,Je.success(x("rules.saved"),x("rules.count",{n:e.value.length}))}catch(c){_.value=c instanceof Ee?c.message:String(c),Je.error(x("rules.invalid"),_.value)}finally{s.value=!1}}async function M(){s.value=!0,_.value="";try{const c=await ye.rules();e.value=c.rules??[],o.value=c.raw,u.value=!1}catch(c){_.value=c instanceof Ee?c.message:String(c)}finally{s.value=!1}}function X(c,b){const L=c+b;if(L<0||L>=e.value.length)return;const R=[...e.value],[N]=R.splice(c,1);R.splice(L,0,N),e.value=R,u.value=!0}function Y(){C.value=-1,d.value={name:"",action:"block",log:!1,expr:""},le.value="{}",y.value=et(),f.value=!1,k.value="builder",K.value=""}function W(c){var R;const b=e.value[c];C.value=c,d.value={...b},le.value=JSON.stringify(((R=b.modifier)==null?void 0:R.args)??{},null,2);const L=wt(b.expr);f.value=L===null,y.value=L??et(),k.value=L?"builder":"expr",K.value=""}function ne(c){if(!(c===k.value||!d.value)){if(c==="expr"){const b=ot(y.value);b&&(d.value.expr=b)}else{const b=wt(d.value.expr);f.value=b===null,b&&(y.value=b)}k.value=c}}const le=A("{}"),K=A(""),Ve=F(()=>{var c;return k.value==="builder"?ot(y.value):((c=d.value)==null?void 0:c.expr)??""});async function $e(){var R,N;const c=d.value;if(!c||g.value)return;if(K.value="",!c.name.trim()){K.value=x("rules.nameRequired");return}const b=Ve.value.trim();if(!b){K.value=x("rules.exprRequired");return}if(c.expr=b,c.action==="modify")try{const Q=JSON.parse(le.value||"{}");c.modifier={name:((R=c.modifier)==null?void 0:R.name)??((N=E.value[0])==null?void 0:N.value)??"",args:Q}}catch{K.value=x("rules.invalidJson");return}else c.modifier=null;g.value=!0;try{const Q=await ye.validateRules({rules:[{...c,name:c.name.trim()}]});if(!Q.valid){K.value=Q.error??x("rules.invalid");return}}catch(Q){K.value=Q instanceof Ee?Q.message:String(Q);return}finally{g.value=!1}const L=[...e.value];C.value>=0?L[C.value]=c:L.push(c),e.value=L,u.value=!0,d.value=null}function Ie(c){e.value=e.value.filter((b,L)=>L!==c),u.value=!0,I.value=-1}return(c,b)=>{var L;return m(),S("div",null,[v(na,{title:t(x)("rules.title"),description:t(x)("rules.subtitle")},{actions:h(()=>[v(t(oe),{variant:"ghost",size:"sm",disabled:s.value,onClick:M},{default:h(()=>[v(t(Ba),{class:"size-3.5"}),O("span",Kn,$(t(x)("common.refresh")),1)]),_:1},8,["disabled"]),v(t(oe),{variant:"outline",size:"sm",disabled:s.value,onClick:j},{default:h(()=>[v(t(aa),{class:"size-3.5"}),O("span",Hn,$(t(x)("rules.validate")),1)]),_:1},8,["disabled"]),v(t(oe),{size:"sm",disabled:s.value,onClick:T},{default:h(()=>[s.value?(m(),B(t(mt),{key:0,class:"size-3.5 animate-spin"})):(m(),B(t(Aa),{key:1,class:"size-3.5"})),H(" "+$(t(x)("rules.save")),1)]),_:1},8,["disabled"])]),_:1},8,["title","description"]),O("div",jn,[v(t(Ye),{"model-value":a.value,"onUpdate:modelValue":P},{default:h(()=>[v(t(ht),null,{default:h(()=>[v(t(Ue),{value:"visual"},{default:h(()=>[H($(t(x)("rules.visual")),1)]),_:1}),v(t(Ue),{value:"yaml"},{default:h(()=>[v(t(yt)),H(" "+$(t(x)("rules.yaml")),1)]),_:1})]),_:1})]),_:1},8,["model-value"]),v(t(Te),{variant:"secondary"},{default:h(()=>[H($(t(x)("rules.count",{n:e.value.length})),1)]),_:1}),u.value?(m(),B(t(Te),{key:0,variant:"drop"},{default:h(()=>[H($(t(x)("rules.unsaved")),1)]),_:1})):G("",!0),n.value?(m(),S("span",Gn,$(n.value),1)):G("",!0)]),_.value?(m(),S("p",Xn,$(_.value),1)):G("",!0),v(t(Ye),{"model-value":a.value,"onUpdate:modelValue":P},{default:h(()=>[v(t(xt),{value:"visual"},{default:h(()=>[i.value?(m(),S("div",Jn,$(t(x)("common.loading")),1)):(m(),S("div",Yn,[(m(!0),S(ee,null,de(e.value,(R,N)=>(m(),B(t(la),{key:`${R.name}-${N}`,class:"p-3 sm:p-4"},{default:h(()=>{var Q;return[O("div",Qn,[O("div",Zn,[O("div",eo,[O("span",to,"#"+$(N+1),1),O("span",ao,$(R.name),1),R.action?(m(),B(t(Te),{key:0,variant:V(R.action),class:"uppercase"},{default:h(()=>[H($(t(x)(`action.${R.action}`)),1)]),_:2},1032,["variant"])):G("",!0),R.log?(m(),B(t(Te),{key:1,variant:"log"},{default:h(()=>[H($(t(x)("action.log")),1)]),_:1})):G("",!0),(Q=R.modifier)!=null&&Q.name?(m(),B(t(Te),{key:2,variant:"outline"},{default:h(()=>[H($(R.modifier.name),1)]),_:2},1024)):G("",!0)]),O("code",lo,$(R.expr),1)]),O("div",no,[v(t(oe),{variant:"ghost",size:"icon-sm","aria-label":t(x)("rules.moveUp"),disabled:N===0,onClick:ce=>X(N,-1)},{default:h(()=>[v(t(Ia),{class:"size-3.5"})]),_:1},8,["aria-label","disabled","onClick"]),v(t(oe),{variant:"ghost",size:"icon-sm","aria-label":t(x)("rules.moveDown"),disabled:N===e.value.length-1,onClick:ce=>X(N,1)},{default:h(()=>[v(t($a),{class:"size-3.5"})]),_:1},8,["aria-label","disabled","onClick"]),v(t(oe),{variant:"ghost",size:"icon-sm","aria-label":t(x)("common.edit"),onClick:ce=>W(N)},{default:h(()=>[v(t(Ea),{class:"size-3.5"})]),_:1},8,["aria-label","onClick"]),v(t(oe),{variant:"ghost",size:"icon-sm",class:"text-destructive","aria-label":t(x)("common.delete"),onClick:ce=>I.value=N},{default:h(()=>[v(t(Ot),{class:"size-3.5"})]),_:1},8,["aria-label","onClick"])])])]}),_:2},1024))),128)),e.value.length?G("",!0):(m(),S("p",oo,$(t(x)("rules.empty")),1)),v(t(oe),{variant:"outline",class:"mt-1 w-full",onClick:Y},{default:h(()=>[v(t(Tt),{class:"size-4"}),H(" "+$(t(x)("rules.add")),1)]),_:1})]))]),_:1}),v(t(xt),{value:"yaml"},{default:h(()=>[v(t(Qe),{modelValue:o.value,"onUpdate:modelValue":[b[0]||(b[0]=R=>o.value=R),b[1]||(b[1]=R=>u.value=!0)],spellcheck:"false",class:"h-[60vh] resize-y font-mono text-xs leading-relaxed"},null,8,["modelValue"]),O("p",ro,$(t(x)("rules.hint")),1)]),_:1})]),_:1},8,["model-value"]),v(t(gt),{open:d.value!==null,title:C.value>=0?t(x)("rules.editTitle"):t(x)("rules.addTitle"),class:"sm:max-w-2xl","onUpdate:open":b[11]||(b[11]=R=>!R&&(d.value=null,K.value=""))},{footer:h(()=>[v(t(oe),{variant:"outline",onClick:b[10]||(b[10]=R=>(d.value=null,K.value=""))},{default:h(()=>[H($(t(x)("common.cancel")),1)]),_:1}),v(t(oe),{disabled:g.value,onClick:$e},{default:h(()=>[g.value?(m(),B(t(mt),{key:0,class:"size-4 animate-spin"})):G("",!0),H(" "+$(t(x)("common.save")),1)]),_:1},8,["disabled"])]),default:h(()=>{var R;return[d.value?(m(),S("form",{key:0,class:"flex flex-col gap-4",onSubmit:b[9]||(b[9]=Ae(()=>{},["prevent"]))},[O("div",so,[v(t(Be),{for:"rule-name"},{default:h(()=>[H($(t(x)("rules.name")),1)]),_:1}),v(t(tt),{id:"rule-name",modelValue:d.value.name,"onUpdate:modelValue":b[2]||(b[2]=N=>d.value.name=N),placeholder:t(x)("rules.namePlaceholder")},null,8,["modelValue","placeholder"])]),O("div",io,[O("div",uo,[v(t(Be),null,{default:h(()=>[H($(t(x)("rules.action")),1)]),_:1}),v(t(je),{"model-value":d.value.action??"",options:q.value,"onUpdate:modelValue":b[3]||(b[3]=N=>d.value.action=N)},null,8,["model-value","options"])]),O("div",co,[v(t(Be),{for:"rule-log"},{default:h(()=>[H($(t(x)("rules.log")),1)]),_:1}),O("div",po,[v(t(Ml),{id:"rule-log",modelValue:d.value.log,"onUpdate:modelValue":b[4]||(b[4]=N=>d.value.log=N)},null,8,["modelValue"])])])]),d.value.action==="modify"?(m(),S("div",fo,[O("div",vo,[v(t(Be),null,{default:h(()=>[H($(t(x)("rules.modifier")),1)]),_:1}),v(t(je),{"model-value":((R=d.value.modifier)==null?void 0:R.name)??"",options:E.value,"onUpdate:modelValue":b[5]||(b[5]=N=>{var Q;return d.value.modifier={name:N,args:(Q=d.value.modifier)==null?void 0:Q.args}})},null,8,["model-value","options"])]),O("div",mo,[v(t(Be),{for:"rule-args"},{default:h(()=>[H($(t(x)("rules.modifierArgs")),1)]),_:1}),v(t(Qe),{id:"rule-args",modelValue:le.value,"onUpdate:modelValue":b[6]||(b[6]=N=>le.value=N),class:"font-mono text-xs",rows:"4"},null,8,["modelValue"])])])):G("",!0),O("div",ho,[O("div",go,[v(t(Be),null,{default:h(()=>[H($(t(x)("rules.conditions")),1)]),_:1}),v(t(Ye),{"model-value":k.value,"onUpdate:modelValue":ne},{default:h(()=>[v(t(ht),{class:"h-8"},{default:h(()=>[v(t(Ue),{value:"builder",class:"text-xs"},{default:h(()=>[v(t(Fa)),H(" "+$(t(x)("rules.builder.tab")),1)]),_:1}),v(t(Ue),{value:"expr",class:"text-xs"},{default:h(()=>[v(t(yt)),H(" "+$(t(x)("rules.expr")),1)]),_:1})]),_:1})]),_:1},8,["model-value"])]),f.value&&k.value==="expr"?(m(),S("p",yo,$(t(x)("rules.builder.notParsed")),1)):G("",!0),k.value==="builder"?(m(),B(Ln,{key:1,modelValue:y.value,"onUpdate:modelValue":b[7]||(b[7]=N=>y.value=N),analyzers:p.value},null,8,["modelValue","analyzers"])):(m(),S(ee,{key:2},[v(t(Qe),{modelValue:d.value.expr,"onUpdate:modelValue":b[8]||(b[8]=N=>d.value.expr=N),spellcheck:"false",placeholder:t(x)("rules.exprPlaceholder"),class:"min-h-28 font-mono text-xs leading-relaxed"},null,8,["modelValue","placeholder"]),O("p",bo,$(t(x)("rules.exprHint")),1)],64))]),K.value?(m(),S("p",xo,$(K.value),1)):G("",!0)],32)):G("",!0)]}),_:1},8,["open","title"]),v(t(gt),{open:I.value>=0,title:t(x)("common.delete"),description:I.value>=0?t(x)("rules.deleteConfirm",{name:((L=e.value[I.value])==null?void 0:L.name)??""}):"","onUpdate:open":b[14]||(b[14]=R=>!R&&(I.value=-1))},{footer:h(()=>[v(t(oe),{variant:"outline",onClick:b[12]||(b[12]=R=>I.value=-1)},{default:h(()=>[H($(t(x)("common.cancel")),1)]),_:1}),v(t(oe),{variant:"destructive",onClick:b[13]||(b[13]=R=>Ie(I.value))},{default:h(()=>[H($(t(x)("common.delete")),1)]),_:1})]),_:1},8,["open","title","description"])])}}});export{Eo as default}; diff --git a/web/dist/assets/Select.vue_vue_type_script_setup_true_lang-C15l-n0X.js b/web/dist/assets/Select.vue_vue_type_script_setup_true_lang-CONzBLld.js similarity index 98% rename from web/dist/assets/Select.vue_vue_type_script_setup_true_lang-C15l-n0X.js rename to web/dist/assets/Select.vue_vue_type_script_setup_true_lang-CONzBLld.js index 7eec7ee..eaa3f84 100644 --- a/web/dist/assets/Select.vue_vue_type_script_setup_true_lang-C15l-n0X.js +++ b/web/dist/assets/Select.vue_vue_type_script_setup_true_lang-CONzBLld.js @@ -1,4 +1,4 @@ -var kt=e=>{throw TypeError(e)};var In=(e,t,n)=>t.has(e)||kt("Cannot "+n);var Re=(e,t,n)=>(In(e,t,"read from private field"),n?n.call(e):t.get(e)),It=(e,t,n)=>t.has(e)?kt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n);import{i as bt,g as J,c as qe,a as tn,b as Me,d as nn}from"./Collection-D-pf6tmY.js";import{c as on,a6 as $n,a7 as Ln,g as O,m as A,x as H,a8 as be,a9 as $t,aa as Mn,U as X,ab as Fn,ac as rn,B as xt,ad as de,ae as Pe,af as Fe,ag as Nn,S as Ne,K as me,ah as Vn,ai as Wn,d as I,D as Xe,aj as zn,ak as Hn,G as ne,al as jn,o as R,h as B,w as q,H as k,u as g,n as St,P as U,am as an,an as Un,ao as sn,j as ke,ap as Kn,aq as ln,ar as Ee,V as Yn,as as Xn,at as Gn,a as ce,au as Jn,C as Q,av as Zn,E as Lt,r as un,F as _t,b as Qn,p as M,J as Be,i as eo,aw as to,Y as cn,Z as dn,k as Ct,t as fn,e as no,f as oo}from"./index-D3ZCYstt.js";/** +var kt=e=>{throw TypeError(e)};var In=(e,t,n)=>t.has(e)||kt("Cannot "+n);var Re=(e,t,n)=>(In(e,t,"read from private field"),n?n.call(e):t.get(e)),It=(e,t,n)=>t.has(e)?kt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n);import{i as bt,g as J,c as qe,b as tn,a as Me,d as nn}from"./Collection-BaXBMWO5.js";import{c as on,ad as $n,ae as Ln,g as O,m as A,x as H,J as be,af as $t,ag as Mn,B as X,ah as Fn,ai as rn,C as xt,aj as de,ak as Pe,al as Fe,am as Nn,Q as Ne,O as me,K as Vn,an as Wn,d as I,E as Xe,ao as zn,ap as Hn,R as ne,aq as jn,o as R,h as B,w as q,H as k,u as g,n as St,P as U,ar as an,as as Un,at as sn,j as ke,au as Kn,av as ln,aw as Ee,a5 as Yn,ax as Xn,ay as Gn,a as ce,S as Jn,D as Q,az as Zn,G as Lt,r as un,F as _t,b as Qn,p as M,M as Be,i as eo,aA as to,V as cn,W as dn,k as Ct,t as fn,e as no,f as oo}from"./index-BKPz7Obh.js";/** * @license lucide-vue-next v0.469.0 - ISC * * This source code is licensed under the ISC license. @@ -10,4 +10,4 @@ var kt=e=>{throw TypeError(e)};var In=(e,t,n)=>t.has(e)||kt("Cannot "+n);var Re= * See the LICENSE file in the root directory of this source tree. */const io=on("ChevronDownIcon",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);function Mt(e){return typeof e=="string"?`'${e}'`:new ao().serialize(e)}const ao=(function(){var t;class e{constructor(){It(this,t,new Map)}compare(o,r){const i=typeof o,a=typeof r;return i==="string"&&a==="string"?o.localeCompare(r):i==="number"&&a==="number"?o-r:String.prototype.localeCompare.call(this.serialize(o,!0),this.serialize(r,!0))}serialize(o,r){if(o===null)return"null";switch(typeof o){case"string":return r?o:`'${o}'`;case"bigint":return`${o}n`;case"object":return this.$object(o);case"function":return this.$function(o)}return String(o)}serializeObject(o){const r=Object.prototype.toString.call(o);if(r!=="[object Object]")return this.serializeBuiltInType(r.length<10?`unknown:${r}`:r.slice(8,-1),o);const i=o.constructor,a=i===Object||i===void 0?"":i.name;if(a!==""&&globalThis[a]===i)return this.serializeBuiltInType(a,o);if(typeof o.toJSON=="function"){const s=o.toJSON();return a+(s!==null&&typeof s=="object"?this.$object(s):`(${this.serialize(s)})`)}return this.serializeObjectEntries(a,Object.entries(o))}serializeBuiltInType(o,r){const i=this["$"+o];if(i)return i.call(this,r);if(typeof(r==null?void 0:r.entries)=="function")return this.serializeObjectEntries(o,r.entries());throw new Error(`Cannot serialize ${o}`)}serializeObjectEntries(o,r){const i=Array.from(r).sort((s,c)=>this.compare(s[0],c[0]));let a=`${o}{`;for(let s=0;sthis.compare(r,i)))}`}$Map(o){return this.serializeObjectEntries("Map",o.entries())}}t=new WeakMap;for(const n of["Error","RegExp","URL"])e.prototype["$"+n]=function(o){return`${n}(${o})`};for(const n of["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array"])e.prototype["$"+n]=function(o){return`${n}[${o.join(",")}]`};for(const n of["BigInt64Array","BigUint64Array"])e.prototype["$"+n]=function(o){return`${n}[${o.join("n,")}${o.length>0?"n":""}]`};return e})();function so(e,t){return e===t||Mt(e)===Mt(t)}function Ft(e,t=Number.NEGATIVE_INFINITY,n=Number.POSITIVE_INFINITY){return Math.min(n,Math.max(t,e))}function Et(e,t,n){const o=n.originalEvent.target,r=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&o.addEventListener(e,t,{once:!0}),o.dispatchEvent(r)}function pt(e){return e==null}function at(e){if(e===null||typeof e!="object")return!1;const t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null||Symbol.iterator in e?!1:Symbol.toStringTag in e?Object.prototype.toString.call(e)==="[object Module]":!0}function mt(e,t,n=".",o){if(!at(t))return mt(e,{},n,o);const r={...t};for(const i of Object.keys(e)){if(i==="__proto__"||i==="constructor")continue;const a=e[i];a!=null&&(o&&o(r,i,a,n)||(Array.isArray(a)&&Array.isArray(r[i])?r[i]=[...a,...r[i]]:at(a)&&at(r[i])?r[i]=mt(a,r[i],(n?`${n}.`:"")+i.toString(),o):r[i]=a))}return r}function lo(e){return(...t)=>t.reduce((n,o)=>mt(n,o,"",e),{})}const uo=lo(),co=Ln(()=>{const e=A(new Map),t=A(),n=O(()=>{for(const a of e.value.values())if(a)return!0;return!1}),o=bt({scrollBody:A(!0)});let r=null;const i=()=>{document.body.style.paddingRight="",document.body.style.marginRight="",document.body.style.pointerEvents="",document.documentElement.style.removeProperty("--scrollbar-width"),document.body.style.overflow=t.value??"",$t&&(r==null||r()),t.value=void 0};return H(n,(a,s)=>{var l;if(!be)return;if(!a){s&&i();return}t.value===void 0&&(t.value=document.body.style.overflow);const c=window.innerWidth-document.documentElement.clientWidth,f={padding:c,margin:0},p=(l=o.scrollBody)!=null&&l.value?typeof o.scrollBody.value=="object"?uo({padding:o.scrollBody.value.padding===!0?c:o.scrollBody.value.padding,margin:o.scrollBody.value.margin===!0?c:o.scrollBody.value.margin},f):f:{padding:0,margin:0};c>0&&(document.body.style.paddingRight=typeof p.padding=="number"?`${p.padding}px`:String(p.padding),document.body.style.marginRight=typeof p.margin=="number"?`${p.margin}px`:String(p.margin),document.documentElement.style.setProperty("--scrollbar-width",`${c}px`),document.body.style.overflow="hidden"),$t&&(r=Mn(document,"touchmove",d=>po(d),{passive:!1})),X(()=>{n.value&&(document.body.style.pointerEvents="none",document.body.style.overflow="hidden")})},{immediate:!0,flush:"sync"}),e});function fo(e){const t=Math.random().toString(36).substring(2,7),n=co();n.value.set(t,e??!1);const o=O({get:()=>n.value.get(t)??!1,set:r=>n.value.set(t,r)});return $n(()=>{n.value.delete(t)}),o}function pn(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.cancelable&&t.preventDefault(),!1)}function mo(e){const t=xt(),n=t==null?void 0:t.type.emits,o={};return n!=null&&n.length||console.warn(`No emitted event found. Please check component: ${t==null?void 0:t.type.__name}`),n==null||n.forEach(r=>{o[Fn(rn(r))]=(...i)=>e(r,...i)}),o}let st=0;function vo(){de(e=>{if(!be)return;const t=document.querySelectorAll("[data-reka-focus-guard]");document.body.insertAdjacentElement("afterbegin",t[0]??Nt()),document.body.insertAdjacentElement("beforeend",t[1]??Nt()),st++,e(()=>{st===1&&document.querySelectorAll("[data-reka-focus-guard]").forEach(n=>n.remove()),st--})})}function Nt(){const e=document.createElement("span");return e.setAttribute("data-reka-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}function ho(e){return O(()=>{var t;return Pe(e)?!!((t=Fe(e))!=null&&t.closest("form")):!0})}function At(e){const t=xt(),n=Object.keys((t==null?void 0:t.type.props)??{}).reduce((r,i)=>{const a=(t==null?void 0:t.type.props[i]).default;return a!==void 0&&(r[i]=a),r},{}),o=Nn(e);return O(()=>{const r={},i=(t==null?void 0:t.vnode.props)??{};return Object.keys(i).forEach(a=>{r[rn(a)]=i[a]}),Object.keys({...n,...r}).reduce((a,s)=>(o.value[s]!==void 0&&(a[s]=o.value[s]),a),{})})}function yo(e,t){const n=At(e),o=t?mo(t):{};return O(()=>({...n.value,...o}))}var go=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Ae=new WeakMap,We=new WeakMap,ze={},lt=0,mn=function(e){return e&&(e.host||mn(e.parentNode))},wo=function(e,t){return t.map(function(n){if(e.contains(n))return n;var o=mn(n);return o&&e.contains(o)?o:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},bo=function(e,t,n,o){var r=wo(t,Array.isArray(e)?e:[e]);ze[n]||(ze[n]=new WeakMap);var i=ze[n],a=[],s=new Set,c=new Set(r),f=function(l){!l||s.has(l)||(s.add(l),f(l.parentNode))};r.forEach(f);var p=function(l){!l||c.has(l)||Array.prototype.forEach.call(l.children,function(d){if(s.has(d))p(d);else try{var u=d.getAttribute(o),m=u!==null&&u!=="false",y=(Ae.get(d)||0)+1,x=(i.get(d)||0)+1;Ae.set(d,y),i.set(d,x),a.push(d),y===1&&m&&We.set(d,!0),x===1&&d.setAttribute(n,"true"),m||d.setAttribute(o,"true")}catch(v){console.error("aria-hidden: cannot operate on ",d,v)}})};return p(t),s.clear(),lt++,function(){a.forEach(function(l){var d=Ae.get(l)-1,u=i.get(l)-1;Ae.set(l,d),i.set(l,u),d||(We.has(l)||l.removeAttribute(o),We.delete(l)),u||l.removeAttribute(n)}),lt--,lt||(Ae=new WeakMap,Ae=new WeakMap,We=new WeakMap,ze={})}},xo=function(e,t,n){n===void 0&&(n="data-aria-hidden");var o=Array.from(Array.isArray(e)?e:[e]),r=go(e);return r?(o.push.apply(o,Array.from(r.querySelectorAll("[aria-live], script"))),bo(o,r,n,"aria-hidden")):function(){return null}};function So(e){let t;H(()=>Fe(e),n=>{let o=!1;try{o=!!(n!=null&&n.closest("[popover]:not(:popover-open)"))}catch{}n&&!o?t=xo(n):t&&t()}),Ne(()=>{t&&t()})}function _o(e){const t=A(),n=O(()=>{var i;return((i=t.value)==null?void 0:i.width)??0}),o=O(()=>{var i;return((i=t.value)==null?void 0:i.height)??0});let r;return me(()=>{const i=Fe(e);i?(t.value={width:i.offsetWidth,height:i.offsetHeight},r=new ResizeObserver(a=>{if(!Array.isArray(a)||!a.length)return;const s=a[0];let c,f;if("borderBoxSize"in s){const p=s.borderBoxSize,l=Array.isArray(p)?p[0]:p;c=l.inlineSize,f=l.blockSize}else c=i.offsetWidth,f=i.offsetHeight;t.value={width:c,height:f}}),r.observe(i,{box:"border-box"})):t.value=void 0}),Ne(()=>{r==null||r.disconnect(),r=void 0}),{width:n,height:o}}function Co(e,t){const n=A(e);function o(i){return t[n.value][i]??n.value}return{state:n,dispatch:i=>{n.value=o(i)}}}function vn(e){const t=Vn("",1e3);return{search:t,handleTypeaheadSearch:(r,i)=>{t.value=t.value+r;{const a=J(),s=i.map(d=>{var u,m;return{...d,textValue:((u=d.value)==null?void 0:u.textValue)??((m=d.ref.textContent)==null?void 0:m.trim())??""}}),c=s.find(d=>d.ref===a),f=s.map(d=>d.textValue),p=Ao(f,t.value,c==null?void 0:c.textValue),l=s.find(d=>d.textValue===p);return l&&l.ref.focus(),l==null?void 0:l.ref}},resetTypeahead:()=>{t.value=""}}}function Eo(e,t){return e.map((n,o)=>e[(t+o)%e.length])}function Ao(e,t,n){const r=t.length>1&&Array.from(t).every(f=>f===t[0])?t[0]:t,i=n?e.indexOf(n):-1;let a=Eo(e,Math.max(i,0));r.length===1&&(a=a.filter(f=>f!==n));const c=a.find(f=>f.toLowerCase().startsWith(r.toLowerCase()));return c!==n?c:void 0}function Oo(e,t){var x;const n=A({}),o=A("none"),r=A(e),i=e.value?"mounted":"unmounted";let a;const s=((x=t.value)==null?void 0:x.ownerDocument.defaultView)??Wn,{state:c,dispatch:f}=Co(i,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}}),p=v=>{var b;if(be){const C=new CustomEvent(v,{bubbles:!1,cancelable:!1});(b=t.value)==null||b.dispatchEvent(C)}};H(e,async(v,b)=>{var h;const C=b!==v;if(await X(),C){const _=o.value,w=He(t.value);v?(f("MOUNT"),p("enter"),w==="none"&&p("after-enter")):w==="none"||w==="undefined"||((h=n.value)==null?void 0:h.display)==="none"?(f("UNMOUNT"),p("leave"),p("after-leave")):b&&_!==w?(f("ANIMATION_OUT"),p("leave")):(f("UNMOUNT"),p("after-leave"))}},{immediate:!0});const l=v=>{const b=He(t.value),C=b.includes(CSS.escape(v.animationName)),h=c.value==="mounted"?"enter":"leave";if(v.target===t.value&&C&&(p(`after-${h}`),f("ANIMATION_END"),!r.value)){const _=t.value.style.animationFillMode;t.value.style.animationFillMode="forwards",a=s==null?void 0:s.setTimeout(()=>{var w;((w=t.value)==null?void 0:w.style.animationFillMode)==="forwards"&&(t.value.style.animationFillMode=_)})}v.target===t.value&&b==="none"&&f("ANIMATION_END")},d=v=>{v.target===t.value&&(o.value=He(t.value))},u=H(t,(v,b)=>{v?(n.value=getComputedStyle(v),v.addEventListener("animationstart",d),v.addEventListener("animationcancel",l),v.addEventListener("animationend",l)):(f("ANIMATION_END"),a!==void 0&&(s==null||s.clearTimeout(a)),b==null||b.removeEventListener("animationstart",d),b==null||b.removeEventListener("animationcancel",l),b==null||b.removeEventListener("animationend",l))},{immediate:!0}),m=H(c,()=>{const v=He(t.value);o.value=c.value==="mounted"?v:"none"});return Ne(()=>{u(),m(),t.value&&(t.value.removeEventListener("animationstart",d),t.value.removeEventListener("animationcancel",l),t.value.removeEventListener("animationend",l)),a!==void 0&&(s==null||s.clearTimeout(a))}),{isPresent:O(()=>["mounted","unmountSuspended"].includes(c.value))}}function He(e){return e&&getComputedStyle(e).animationName||"none"}var Po=I({name:"Presence",props:{present:{type:Boolean,required:!0},forceMount:{type:Boolean}},slots:{},setup(e,{slots:t,expose:n}){var f;const{present:o,forceMount:r}=Xe(e),i=A(),{isPresent:a}=Oo(o,i);n({present:a});let s=t.default({present:a.value});s=zn(s||[]);const c=xt();if(s&&(s==null?void 0:s.length)>1){const p=(f=c==null?void 0:c.parent)!=null&&f.type.name?`<${c.parent.type.name} />`:"component";throw new Error([`Detected an invalid children for \`${p}\` for \`Presence\` component.`,"","Note: Presence works similarly to `v-if` directly, but it waits for animation/transition to finished before unmounting. So it expect only one direct child of valid VNode type.","You can apply a few solutions:",["Provide a single child element so that `presence` directive attach correctly.","Ensure the first child is an actual element instead of a raw text node or comment node."].map(l=>` - ${l}`).join(` `)].join(` -`))}return()=>r.value||o.value||a.value?Hn(t.default({present:a.value})[0],{ref:p=>{const l=Fe(p);return typeof(l==null?void 0:l.hasAttribute)>"u"||(l!=null&&l.hasAttribute("data-reka-popper-content-wrapper")?i.value=l.firstElementChild:i.value=l),l}}):null}});const To="dismissableLayer.pointerDownOutside",qo="dismissableLayer.focusOutside";function hn(e,t){if(!(t instanceof Element))return!1;const n=t.closest("[data-dismissable-layer]"),o=e.dataset.dismissableLayer===""?e:e.querySelector("[data-dismissable-layer]"),r=Array.from(e.ownerDocument.querySelectorAll("[data-dismissable-layer]"));return!!(n&&(o===n||r.indexOf(o){});return de(s=>{if(!be||!Pe(n))return;const c=async p=>{const l=p.target;if(!(!(t!=null&&t.value)||!l)){if(hn(t.value,l)){r.value=!1;return}if(p.target&&!r.value){let u=function(){Et(To,e,d)};const d={originalEvent:p};p.pointerType==="touch"?(o.removeEventListener("click",i.value),i.value=u,o.addEventListener("click",i.value,{once:!0})):u()}else o.removeEventListener("click",i.value);r.value=!1}},f=window.setTimeout(()=>{o.addEventListener("pointerdown",c)},0);s(()=>{window.clearTimeout(f),o.removeEventListener("pointerdown",c),o.removeEventListener("click",i.value)})}),{onPointerDownCapture:()=>{Pe(n)&&(r.value=!0)}}}function Ro(e,t,n=!0){var i;const o=((i=t==null?void 0:t.value)==null?void 0:i.ownerDocument)??(globalThis==null?void 0:globalThis.document),r=A(!1);return de(a=>{if(!be||!Pe(n))return;const s=async c=>{if(!(t!=null&&t.value))return;await X(),await X();const f=c.target;!t.value||!f||hn(t.value,f)||c.target&&!r.value&&Et(qo,e,{originalEvent:c})};o.addEventListener("focusin",s),a(()=>o.removeEventListener("focusin",s))}),{onFocusCapture:()=>{Pe(n)&&(r.value=!0)},onBlurCapture:()=>{Pe(n)&&(r.value=!1)}}}const Y=an({layersRoot:new Set,layersWithOutsidePointerEventsDisabled:new Set,originalBodyPointerEvents:void 0,branches:new Set});var Bo=I({__name:"DismissableLayer",props:{disableOutsidePointerEvents:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!1,default:!0}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","dismiss"],setup(e,{emit:t}){const n=e,o=t,{forwardRef:r,currentElement:i}=ne(),a=O(()=>{var u;return((u=i.value)==null?void 0:u.ownerDocument)??globalThis.document}),s=O(()=>Y.layersRoot),c=O(()=>i.value?Array.from(s.value).indexOf(i.value):-1),f=O(()=>Y.layersWithOutsidePointerEventsDisabled.size>0),p=O(()=>{const u=Array.from(s.value),[m]=[...Y.layersWithOutsidePointerEventsDisabled].slice(-1),y=u.indexOf(m);return c.value>=y}),l=Do(async u=>{const m=[...Y.branches].some(y=>y==null?void 0:y.contains(u.target));!n.present||!p.value||m||(o("pointerDownOutside",u),o("interactOutside",u),await X(),u.defaultPrevented||o("dismiss"))},i),d=Ro(u=>{const m=[...Y.branches].some(y=>y==null?void 0:y.contains(u.target));!n.present||m||(o("focusOutside",u),o("interactOutside",u),u.defaultPrevented||o("dismiss"))},i);return jn("Escape",u=>{!n.present||!(c.value===s.value.size-1)||(o("escapeKeyDown",u),u.defaultPrevented||o("dismiss"))}),H([i,()=>n.disableOutsidePointerEvents,()=>n.present],([u,m,y],x,v)=>{!u||!y||m&&(Y.layersWithOutsidePointerEventsDisabled.size===0&&(Y.originalBodyPointerEvents=a.value.body.style.pointerEvents,a.value.body.style.pointerEvents="none"),Y.layersWithOutsidePointerEventsDisabled.add(u),v(()=>{Y.layersWithOutsidePointerEventsDisabled.delete(u),Y.layersWithOutsidePointerEventsDisabled.size===0&&!pt(Y.originalBodyPointerEvents)&&(a.value.body.style.pointerEvents=Y.originalBodyPointerEvents)}))},{immediate:!0}),H([i,()=>n.present],([u,m],y,x)=>{!u||!m||(s.value.add(u),x(()=>{s.value.delete(u)}))},{immediate:!0}),de(u=>{u(()=>{i.value&&(s.value.delete(i.value),Y.layersWithOutsidePointerEventsDisabled.delete(i.value))})}),(u,m)=>(R(),B(g(U),{ref:g(r),"as-child":u.asChild,as:u.as,"data-dismissable-layer":"",style:St({pointerEvents:f.value?p.value?"auto":"none":void 0}),onFocusCapture:g(d).onFocusCapture,onBlurCapture:g(d).onBlurCapture,onPointerdownCapture:g(l).onPointerDownCapture},{default:q(()=>[k(u.$slots,"default")]),_:3},8,["as-child","as","style","onFocusCapture","onBlurCapture","onPointerdownCapture"]))}}),ko=Bo;const Io=Un(()=>A([]));function $o(){const e=Io();return{add(t){const n=e.value[0];t!==n&&(n==null||n.pause()),e.value=Vt(e.value,t),e.value.unshift(t)},remove(t){var n;e.value=Vt(e.value,t),(n=e.value[0])==null||n.resume()}}}function Vt(e,t){const n=[...e],o=n.indexOf(t);return o!==-1&&n.splice(o,1),n}const ut="focusScope.autoFocusOnMount",ct="focusScope.autoFocusOnUnmount",Wt={bubbles:!1,cancelable:!0};function Lo(e,{select:t=!1}={}){const n=J();for(const o of e)if(ue(o,{select:t}),J()!==n)return!0}function Mo(e){const t=yn(e),n=zt(t,e),o=zt(t.reverse(),e);return[n,o]}function yn(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const r=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||r?NodeFilter.FILTER_SKIP:o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function zt(e,t){for(const n of e)if(!Fo(n,{upTo:t}))return n}function Fo(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function No(e){return e instanceof HTMLInputElement&&"select"in e}function ue(e,{select:t=!1}={}){if(e&&e.focus){const n=J();e.focus({preventScroll:!0}),e!==n&&No(e)&&t&&e.select()}}var Vo=I({__name:"FocusScope",props:{loop:{type:Boolean,required:!1,default:!1},trapped:{type:Boolean,required:!1,default:!1},present:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["mountAutoFocus","unmountAutoFocus"],setup(e,{emit:t}){const n=e,o=t,{currentRef:r,currentElement:i}=ne(),a=A(null),s=$o(),c=an({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}});de(l=>{if(!be)return;const d=i.value;if(!n.trapped)return;function u(v){if(c.paused||!d)return;const b=v.target;d.contains(b)?a.value=b:ue(a.value,{select:!0})}function m(v){if(c.paused||!d)return;const b=v.relatedTarget;b!==null&&(d.contains(b)||ue(a.value,{select:!0}))}function y(v){const b=a.value;if(b===null||!v.some(_=>_.removedNodes.length>0))return;d.contains(b)||ue(d)}document.addEventListener("focusin",u),document.addEventListener("focusout",m);const x=new MutationObserver(y);d&&x.observe(d,{childList:!0,subtree:!0}),l(()=>{document.removeEventListener("focusin",u),document.removeEventListener("focusout",m),x.disconnect()})});function f(l,d){const u=new CustomEvent(ut,Wt),m=y=>o("mountAutoFocus",y);l.addEventListener(ut,m),l.dispatchEvent(u),l.removeEventListener(ut,m),u.defaultPrevented||(Lo(yn(l),{select:!0}),J()===d&&ue(l))}de(async l=>{const d=i.value;if(await X(),!d)return;n.present!==!1&&s.add(c);const u=J();!d.contains(u)&&n.present!==!1&&f(d,u),l(()=>{const y=new CustomEvent(ct,Wt),x=v=>{o("unmountAutoFocus",v)};d.addEventListener(ct,x),d.dispatchEvent(y),d.setAttribute("data-focus-scope-unmounting",""),setTimeout(()=>{y.defaultPrevented||ue(u??document.body,{select:!0}),d.removeEventListener(ct,x),s.remove(c),d.removeAttribute("data-focus-scope-unmounting")},0)})}),H(()=>n.present,async(l,d)=>{if(!be)return;if(l===!1&&d===!0){s.remove(c);return}if(l!==!0||d!==!1)return;s.add(c),await X();const u=i.value;if(!u)return;const m=J();u.contains(m)||f(u,m)});function p(l){if(!n.loop&&!n.trapped||c.paused)return;const d=l.key==="Tab"&&!l.altKey&&!l.ctrlKey&&!l.metaKey,u=J();if(d&&u){const m=l.currentTarget,[y,x]=Mo(m);y&&x?!l.shiftKey&&u===x?(l.preventDefault(),n.loop&&ue(y,{select:!0})):l.shiftKey&&u===y&&(l.preventDefault(),n.loop&&ue(x,{select:!0})):u===m&&l.preventDefault()}}return(l,d)=>(R(),B(g(U),{ref_key:"currentRef",ref:r,tabindex:"-1","as-child":l.asChild,as:l.as,onKeydown:p},{default:q(()=>[k(l.$slots,"default")]),_:3},8,["as-child","as"]))}}),Wo=Vo;function Hi(e){return e?"open":"closed"}function Ht(e){const t=J();for(const n of e)if(n===t||(n.focus(),J()!==t))return}var zo=I({__name:"Teleport",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=e,n=bt({}),o=O(()=>{var i;return t.to??((i=n.teleportTo)==null?void 0:i.value)??"body"}),r=Kn();return(i,a)=>g(r)||i.forceMount?(R(),B(sn,{key:0,to:o.value,disabled:i.disabled,defer:i.defer},[k(i.$slots,"default")],8,["to","disabled","defer"])):ke("v-if",!0)}}),Ho=zo,jo=I({__name:"VisuallyHidden",props:{feature:{type:String,required:!1,default:"focusable"},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){return(t,n)=>(R(),B(g(U),{as:t.as,"as-child":t.asChild,"aria-hidden":t.feature==="focusable"||t.feature==="fully-hidden"?"true":void 0,"data-hidden":t.feature==="fully-hidden"?"":void 0,tabindex:t.feature==="fully-hidden"?"-1":void 0,style:{position:"absolute",border:0,width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",clipPath:"inset(50%)",whiteSpace:"nowrap",wordWrap:"normal",top:"-1px",left:"-1px"}},{default:q(()=>[k(t.$slots,"default")]),_:3},8,["as","as-child","aria-hidden","data-hidden","tabindex"]))}}),Uo=jo;const[gn,Ko]=qe("PopperRoot");var Yo=I({inheritAttrs:!1,__name:"PopperRoot",setup(e){const t=A();return Ko({anchor:t,onAnchorChange:n=>t.value=n}),(n,o)=>k(n.$slots,"default")}}),Xo=Yo,Go=I({__name:"PopperAnchor",props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,{forwardRef:n,currentElement:o}=ne(),r=gn();return ln(()=>{r.onAnchorChange(t.reference??o.value)}),(i,a)=>(R(),B(g(U),{ref:g(n),as:i.as,"as-child":i.asChild},{default:q(()=>[k(i.$slots,"default")]),_:3},8,["as","as-child"]))}}),Jo=Go;function Zo(e){return e!==null}function Qo(e){return{name:"transformOrigin",options:e,fn(t){var v,b,C;const{placement:n,rects:o,middlewareData:r}=t,a=((v=r.arrow)==null?void 0:v.centerOffset)!==0,s=a?0:e.arrowWidth,c=a?0:e.arrowHeight,[f,p]=vt(n),l={start:e.dir==="rtl"?"100%":"0%",center:"50%",end:e.dir==="rtl"?"0%":"100%"}[p],d={start:"0%",center:"50%",end:"100%"}[p],u=(((b=r.arrow)==null?void 0:b.x)??0)+s/2,m=(((C=r.arrow)==null?void 0:C.y)??0)+c/2;let y="",x="";return f==="bottom"?(y=a?l:`${u}px`,x=`${-c}px`):f==="top"?(y=a?l:`${u}px`,x=`${o.floating.height+c}px`):f==="right"?(y=`${-c}px`,x=a?d:`${m}px`):f==="left"&&(y=`${o.floating.width+c}px`,x=a?d:`${m}px`),{data:{x:y,y:x}}}}}function vt(e){const[t,n="center"]=e.split("-");return[t,n]}const er=["top","right","bottom","left"],fe=Math.min,re=Math.max,Ue=Math.round,je=Math.floor,ie=e=>({x:e,y:e}),tr={left:"right",right:"left",bottom:"top",top:"bottom"};function wn(e,t,n){return re(e,fe(t,n))}function ae(e,t){return typeof e=="function"?e(t):e}function pe(e){return e.split("-")[0]}function De(e){return e.split("-")[1]}function Ot(e){return e==="x"?"y":"x"}function Pt(e){return e==="y"?"height":"width"}function Z(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function Tt(e){return Ot(Z(e))}function nr(e,t,n){n===void 0&&(n=!1);const o=De(e),r=Tt(e),i=Pt(r);let a=r==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return t.reference[i]>t.floating[i]&&(a=Ke(a)),[a,Ke(a)]}function or(e){const t=Ke(e);return[ht(e),t,ht(t)]}function ht(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const jt=["left","right"],Ut=["right","left"],rr=["top","bottom"],ir=["bottom","top"];function ar(e,t,n){switch(e){case"top":case"bottom":return n?t?Ut:jt:t?jt:Ut;case"left":case"right":return t?rr:ir;default:return[]}}function sr(e,t,n,o){const r=De(e);let i=ar(pe(e),n==="start",o);return r&&(i=i.map(a=>a+"-"+r),t&&(i=i.concat(i.map(ht)))),i}function Ke(e){const t=pe(e);return tr[t]+e.slice(t.length)}function lr(e){var t,n,o,r;return{top:(t=e.top)!=null?t:0,right:(n=e.right)!=null?n:0,bottom:(o=e.bottom)!=null?o:0,left:(r=e.left)!=null?r:0}}function bn(e){return typeof e!="number"?lr(e):{top:e,right:e,bottom:e,left:e}}function Ye(e){const{x:t,y:n,width:o,height:r}=e;return{width:o,height:r,top:n,left:t,right:t+o,bottom:n+r,x:t,y:n}}function Kt(e,t,n){let{reference:o,floating:r}=e;const i=Z(t),a=Tt(t),s=Pt(a),c=pe(t),f=i==="y",p=o.x+o.width/2-r.width/2,l=o.y+o.height/2-r.height/2,d=o[s]/2-r[s]/2;let u;switch(c){case"top":u={x:p,y:o.y-r.height};break;case"bottom":u={x:p,y:o.y+o.height};break;case"right":u={x:o.x+o.width,y:l};break;case"left":u={x:o.x-r.width,y:l};break;default:u={x:o.x,y:o.y}}const m=De(t);return m&&(u[a]+=d*(m==="end"?1:-1)*(n&&f?-1:1)),u}async function ur(e,t){var n;t===void 0&&(t={});const{x:o,y:r,platform:i,rects:a,elements:s,strategy:c}=e,{boundary:f="clippingAncestors",rootBoundary:p="viewport",elementContext:l="floating",altBoundary:d=!1,padding:u=0}=ae(t,e),m=bn(u),x=s[d?l==="floating"?"reference":"floating":l],v=Ye(await i.getClippingRect({element:(n=await(i.isElement==null?void 0:i.isElement(x)))==null||n?x:x.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(s.floating)),boundary:f,rootBoundary:p,strategy:c})),b=l==="floating"?{x:o,y:r,width:a.floating.width,height:a.floating.height}:a.reference,C=await(i.getOffsetParent==null?void 0:i.getOffsetParent(s.floating)),h=await(i.isElement==null?void 0:i.isElement(C))&&await(i.getScale==null?void 0:i.getScale(C))||{x:1,y:1},_=Ye(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:b,offsetParent:C,strategy:c}):b);return{top:(v.top-_.top+m.top)/h.y,bottom:(_.bottom-v.bottom+m.bottom)/h.y,left:(v.left-_.left+m.left)/h.x,right:(_.right-v.right+m.right)/h.x}}const cr=50,dr=async(e,t,n)=>{const{placement:o="bottom",strategy:r="absolute",middleware:i=[],platform:a}=n,s=a.detectOverflow?a:{...a,detectOverflow:ur},c=await(a.isRTL==null?void 0:a.isRTL(t));let f=await a.getElementRects({reference:e,floating:t,strategy:r}),{x:p,y:l}=Kt(f,o,c),d=o,u=0;const m={};for(let y=0;y({name:"arrow",options:e,async fn(t){const{x:n,y:o,placement:r,rects:i,platform:a,elements:s,middlewareData:c}=t,{element:f,padding:p=0}=ae(e,t)||{};if(f==null)return{};const l=bn(p),d={x:n,y:o},u=Tt(r),m=Pt(u),y=await a.getDimensions(f),x=u==="y",v=x?"top":"left",b=x?"bottom":"right",C=x?"clientHeight":"clientWidth",h=i.reference[m]+i.reference[u]-d[u]-i.floating[m],_=d[u]-i.reference[u],w=await(a.getOffsetParent==null?void 0:a.getOffsetParent(f));let S=w?w[C]:0;(!S||!await(a.isElement==null?void 0:a.isElement(w)))&&(S=s.floating[C]||i.floating[m]);const E=h/2-_/2,P=S/2-y[m]/2-1,T=fe(l[v],P),L=fe(l[b],P),K=S-y[m]-L,D=S/2-y[m]/2+E,$=wn(T,D,K),N=!c.arrow&&De(r)!=null&&D!==$&&i.reference[m]/2-(D$<=0)){var L,K;const $=(((L=i.flip)==null?void 0:L.index)||0)+1,N=S[$];if(N&&(!(l==="alignment"?b!==Z(N):!1)||T.every(W=>Z(W.placement)===b?W.overflows[0]>0:!0)))return{data:{index:$,overflows:T},reset:{placement:N}};let F=(K=T.filter(V=>V.overflows[0]<=0).sort((V,W)=>V.overflows[1]-W.overflows[1])[0])==null?void 0:K.placement;if(!F)switch(u){case"bestFit":{var D;const V=(D=T.filter(W=>{if(w){const z=Z(W.placement);return z===b||z==="y"}return!0}).map(W=>[W.placement,W.overflows.filter(z=>z>0).reduce((z,Ce)=>z+Ce,0)]).sort((W,z)=>W[1]-z[1])[0])==null?void 0:D[0];V&&(F=V);break}case"initialPlacement":F=s;break}if(r!==F)return{reset:{placement:F}}}return{}}}};function Yt(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function Xt(e){return er.some(t=>e[t]>=0)}const mr=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n,platform:o}=t,{strategy:r="referenceHidden",...i}=ae(e,t);switch(r){case"referenceHidden":{const a=await o.detectOverflow(t,{...i,elementContext:"reference"}),s=Yt(a,n.reference);return{data:{referenceHiddenOffsets:s,referenceHidden:Xt(s)}}}case"escaped":{const a=await o.detectOverflow(t,{...i,altBoundary:!0}),s=Yt(a,n.floating);return{data:{escapedOffsets:s,escaped:Xt(s)}}}default:return{}}}}},xn=new Set(["left","top"]);async function vr(e,t){const{placement:n,platform:o,elements:r}=e,i=await(o.isRTL==null?void 0:o.isRTL(r.floating)),a=pe(n),s=De(n),c=Z(n)==="y",f=xn.has(a)?-1:1,p=i&&c?-1:1,l=ae(t,e);let{mainAxis:d,crossAxis:u,alignmentAxis:m}=typeof l=="number"?{mainAxis:l,crossAxis:0,alignmentAxis:null}:{mainAxis:l.mainAxis||0,crossAxis:l.crossAxis||0,alignmentAxis:l.alignmentAxis};return s&&typeof m=="number"&&(u=s==="end"?m*-1:m),c?{x:u*p,y:d*f}:{x:d*f,y:u*p}}const hr=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,o;const{x:r,y:i,placement:a,middlewareData:s}=t,c=await vr(t,e);return a===((n=s.offset)==null?void 0:n.placement)&&(o=s.arrow)!=null&&o.alignmentOffset?{}:{x:r+c.x,y:i+c.y,data:{...c,placement:a}}}}},yr=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:o,placement:r,platform:i}=t,{mainAxis:a=!0,crossAxis:s=!1,limiter:c={fn:b=>{let{x:C,y:h}=b;return{x:C,y:h}}},...f}=ae(e,t),p={x:n,y:o},l=await i.detectOverflow(t,f),d=Z(r),u=Ot(d);let m=p[u],y=p[d];const x=(b,C)=>wn(C+l[b==="y"?"top":"left"],C,C-l[b==="y"?"bottom":"right"]);a&&(m=x(u,m)),s&&(y=x(d,y));const v=c.fn({...t,[u]:m,[d]:y});return{...v,data:{x:v.x-n,y:v.y-o,enabled:{[u]:a,[d]:s}}}}}},gr=function(e){return e===void 0&&(e={}),{options:e,fn(t){var n,o;const{x:r,y:i,placement:a,rects:s,middlewareData:c}=t,{offset:f=0,mainAxis:p=!0,crossAxis:l=!0}=ae(e,t),d={x:r,y:i},u=Z(a),m=Ot(u);let y=d[m],x=d[u];const v=ae(f,t),b=typeof v=="number"?{mainAxis:v,crossAxis:0}:{mainAxis:(n=v.mainAxis)!=null?n:0,crossAxis:(o=v.crossAxis)!=null?o:0};if(p){const _=m==="y"?"height":"width",w=s.reference[m]-s.floating[_]+b.mainAxis,S=s.reference[m]+s.reference[_]-b.mainAxis;yS&&(y=S)}if(l){var C,h;const _=m==="y"?"width":"height",w=xn.has(pe(a)),S=s.reference[u]-s.floating[_]+(w&&((C=c.offset)==null?void 0:C[u])||0)+(w?0:b.crossAxis),E=s.reference[u]+s.reference[_]+(w?0:((h=c.offset)==null?void 0:h[u])||0)-(w?b.crossAxis:0);xE&&(x=E)}return{[m]:y,[u]:x}}}},wr=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:n,rects:o,platform:r,elements:i}=t,{apply:a=()=>{},...s}=ae(e,t),c=await r.detectOverflow(t,s),f=pe(n),p=De(n),l=Z(n)==="y",{width:d,height:u}=o.floating;let m,y;f==="top"||f==="bottom"?(m=f,y=p===(await(r.isRTL==null?void 0:r.isRTL(i.floating))?"start":"end")?"left":"right"):(y=f,m=p==="end"?"top":"bottom");const x=u-c.top-c.bottom,v=d-c.left-c.right,b=fe(u-c[m],x),C=fe(d-c[y],v),h=t.middlewareData.shift,_=!h;let w=b,S=C;h!=null&&h.enabled.x&&(S=v),h!=null&&h.enabled.y&&(w=x),_&&!p&&(l?S=d-2*re(c.left,c.right):w=u-2*re(c.top,c.bottom)),await a({...t,availableWidth:S,availableHeight:w});const E=await r.getDimensions(i.floating);return d!==E.width||u!==E.height?{reset:{rects:!0}}:{}}}};function Ge(){return typeof window<"u"}function _e(e){return qt(e)?(e.nodeName||"").toLowerCase():"#document"}function j(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function se(e){var t;return(t=(qt(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function qt(e){return Ge()?e instanceof Node||e instanceof j(e).Node:!1}function ee(e){return Ge()?e instanceof Element||e instanceof j(e).Element:!1}function ve(e){return Ge()?e instanceof HTMLElement||e instanceof j(e).HTMLElement:!1}function Gt(e){return!Ge()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof j(e).ShadowRoot}function Je(e){const{overflow:t,overflowX:n,overflowY:o,display:r}=te(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+n)&&r!=="inline"&&r!=="contents"}function br(e){return/^(table|td|th)$/.test(_e(e))}function Ze(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const xr=/transform|translate|scale|rotate|perspective|filter/,Sr=/paint|layout|strict|content/,we=e=>!!e&&e!=="none";let dt;function Dt(e){const t=ee(e)?te(e):e;return we(t.transform)||we(t.translate)||we(t.scale)||we(t.rotate)||we(t.perspective)||!Rt()&&(we(t.backdropFilter)||we(t.filter))||xr.test(t.willChange||"")||Sr.test(t.contain||"")}function _r(e){let t=xe(e);for(;ve(t)&&!Ie(t);){if(Dt(t))return t;if(Ze(t))return null;t=xe(t)}return null}function Rt(){return dt==null&&(dt=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),dt}function Ie(e){return/^(html|body|#document)$/.test(_e(e))}function te(e){return j(e).getComputedStyle(e)}function Qe(e){return ee(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function xe(e){if(_e(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Gt(e)&&e.host||se(e);return Gt(t)?t.host:t}function Sn(e){const t=xe(e);return Ie(t)?(e.ownerDocument||e).body:ve(t)&&Je(t)?t:Sn(t)}function $e(e,t,n){var o;t===void 0&&(t=[]),n===void 0&&(n=!0);const r=Sn(e),i=r===((o=e.ownerDocument)==null?void 0:o.body),a=j(r);if(i){const s=yt(a);return t.concat(a,a.visualViewport||[],Je(r)?r:[],s&&n?$e(s):[])}else return t.concat(r,$e(r,[],n))}function yt(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function _n(e){const t=te(e);let n=parseFloat(t.width)||0,o=parseFloat(t.height)||0;const r=ve(e),i=r?e.offsetWidth:n,a=r?e.offsetHeight:o,s=Ue(n)!==i||Ue(o)!==a;return s&&(n=i,o=a),{width:n,height:o,$:s}}function Bt(e){return ee(e)?e:e.contextElement}function Te(e){const t=Bt(e);if(!ve(t))return ie(1);const n=t.getBoundingClientRect(),{width:o,height:r,$:i}=_n(t);let a=(i?Ue(n.width):n.width)/o,s=(i?Ue(n.height):n.height)/r;return(!a||!Number.isFinite(a))&&(a=1),(!s||!Number.isFinite(s))&&(s=1),{x:a,y:s}}const Cr=ie(0);function Cn(e){const t=j(e);return!Rt()||!t.visualViewport?Cr:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function Er(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===j(e)}function Se(e,t,n,o){t===void 0&&(t=!1),n===void 0&&(n=!1);const r=e.getBoundingClientRect(),i=Bt(e);let a=ie(1);t&&(o?ee(o)&&(a=Te(o)):a=Te(e));const s=Er(i,n,o)?Cn(i):ie(0);let c=(r.left+s.x)/a.x,f=(r.top+s.y)/a.y,p=r.width/a.x,l=r.height/a.y;if(i&&o){const d=j(i),u=ee(o)?j(o):o;let m=d,y=yt(m);for(;y&&u!==m;){const x=Te(y),v=y.getBoundingClientRect(),b=te(y),C=v.left+(y.clientLeft+parseFloat(b.paddingLeft))*x.x,h=v.top+(y.clientTop+parseFloat(b.paddingTop))*x.y;c*=x.x,f*=x.y,p*=x.x,l*=x.y,c+=C,f+=h,m=j(y),y=yt(m)}}return Ye({width:p,height:l,x:c,y:f})}function et(e,t){const n=Qe(e).scrollLeft;return t?t.left+n:Se(se(e)).left+n}function En(e,t){const n=e.getBoundingClientRect(),o=n.left+t.scrollLeft-et(e,n),r=n.top+t.scrollTop;return{x:o,y:r}}function Ar(e){let{elements:t,rect:n,offsetParent:o,strategy:r}=e;const i=r==="fixed",a=se(o),s=t?Ze(t.floating):!1;if(o===a||s&&i)return n;let c={scrollLeft:0,scrollTop:0},f=ie(1);const p=ie(0),l=ve(o);if((l||!i)&&((_e(o)!=="body"||Je(a))&&(c=Qe(o)),l)){const u=Se(o);f=Te(o),p.x=u.x+o.clientLeft,p.y=u.y+o.clientTop}const d=a&&!l&&!i?En(a,c):ie(0);return{width:n.width*f.x,height:n.height*f.y,x:n.x*f.x-c.scrollLeft*f.x+p.x+d.x,y:n.y*f.y-c.scrollTop*f.y+p.y+d.y}}function Or(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function Pr(e){const t=Qe(e),n=e.ownerDocument.body,o=re(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),r=re(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight);let i=-t.scrollLeft+et(e);const a=-t.scrollTop;return te(n).direction==="rtl"&&(i+=re(e.clientWidth,n.clientWidth)-o),{width:o,height:r,x:i,y:a}}const Tr=25;function qr(e,t,n){n===void 0&&(n="viewport");const o=n==="layoutViewport",r=j(e),i=se(e),a=r.visualViewport;let s=i.clientWidth,c=i.clientHeight,f=0,p=0;if(a){const d=!Rt()||t==="fixed";o?d||(f=-a.offsetLeft,p=-a.offsetTop):(s=a.width,c=a.height,d&&(f=a.offsetLeft,p=a.offsetTop))}if(et(i)<=0){const d=i.ownerDocument,u=d.body,m=getComputedStyle(u),y=d.compatMode==="CSS1Compat"&&parseFloat(m.marginLeft)+parseFloat(m.marginRight)||0,x=Math.abs(i.clientWidth-u.clientWidth-y),v=getComputedStyle(i).scrollbarGutter==="stable both-edges"?x/2:x;v<=Tr&&(s-=v)}return{width:s,height:c,x:f,y:p}}function Dr(e,t){const n=Se(e,!0,t==="fixed"),o=n.top+e.clientTop,r=n.left+e.clientLeft,i=Te(e),a=e.clientWidth*i.x,s=e.clientHeight*i.y,c=r*i.x,f=o*i.y;return{width:a,height:s,x:c,y:f}}function Jt(e,t,n){let o;if(t==="viewport"||t==="layoutViewport")o=qr(e,n,t);else if(t==="document")o=Pr(se(e));else if(ee(t))o=Dr(t,n);else{const r=Cn(e);o={x:t.x-r.x,y:t.y-r.y,width:t.width,height:t.height}}return Ye(o)}function Rr(e,t){const n=t.get(e);if(n)return n;let o=$e(e,[],!1).filter(s=>ee(s)&&_e(s)!=="body"),r=null;const i=te(e).position==="fixed";let a=i?xe(e):e;for(;ee(a)&&!Ie(a);){const s=te(a),c=Dt(a),f=r?r.position:i?"fixed":"";!c&&(f==="fixed"||f==="absolute"&&s.position==="static")?o=o.filter(l=>l!==a):r=s,a=xe(a)}return t.set(e,o),o}function Br(e){let{element:t,boundary:n,rootBoundary:o,strategy:r}=e;const a=[...n==="clippingAncestors"?Ze(t)?[]:Rr(t,this._c):[].concat(n),o],s=Jt(t,a[0],r);let c=s.top,f=s.right,p=s.bottom,l=s.left;for(let d=1;d{s(!1,1e-7)},1e3)}S=!1}try{o=new IntersectionObserver(E,{...w,root:i.ownerDocument})}catch{o=new IntersectionObserver(E,w)}o.observe(e)}const c=j(e),f=()=>s(n);return c.addEventListener("resize",f),s(!0),()=>{c.removeEventListener("resize",f),a()}}function Nr(e,t,n,o){o===void 0&&(o={});const{ancestorScroll:r=!0,ancestorResize:i=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,f=Bt(e),p=r||i?[...f?$e(f):[],...t?$e(t):[]]:[];p.forEach(v=>{r&&v.addEventListener("scroll",n),i&&v.addEventListener("resize",n)});const l=f&&s?Fr(f,n,i):null;let d=-1,u=null;a&&(u=new ResizeObserver(v=>{let[b]=v;b&&b.target===f&&u&&t&&(u.unobserve(t),cancelAnimationFrame(d),d=requestAnimationFrame(()=>{var C;(C=u)==null||C.observe(t)})),n()}),f&&!c&&u.observe(f),t&&u.observe(t));let m,y=c?Se(e):null;c&&x();function x(){const v=Se(e);y&&!On(y,v)&&n(),y=v,m=requestAnimationFrame(x)}return n(),()=>{var v;p.forEach(b=>{r&&b.removeEventListener("scroll",n),i&&b.removeEventListener("resize",n)}),l==null||l(),(v=u)==null||v.disconnect(),u=null,c&&cancelAnimationFrame(m)}}const Vr=hr,Wr=yr,Qt=pr,zr=wr,Hr=mr,jr=fr,Ur=gr,Kr=(e,t,n)=>{const o=new Map,r=n??{},i={...Mr,...r.platform,_c:o};return dr(e,t,{...r,platform:i})};function Yr(e){return e!=null&&typeof e=="object"&&"$el"in e}function gt(e){if(Yr(e)){const t=e.$el;return qt(t)&&_e(t)==="#comment"?null:t}return e}function Oe(e){return typeof e=="function"?e():g(e)}function Xr(e){return{name:"arrow",options:e,fn(t){const n=gt(Oe(e.element));return n==null?{}:jr({element:n,padding:e.padding}).fn(t)}}}function Pn(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function en(e,t){const n=Pn(e);return Math.round(t*n)/n}function Gr(e,t,n){n===void 0&&(n={});const o=n.whileElementsMounted,r=O(()=>{var S;return(S=Oe(n.open))!=null?S:!0}),i=O(()=>Oe(n.middleware)),a=O(()=>{var S;return(S=Oe(n.placement))!=null?S:"bottom"}),s=O(()=>{var S;return(S=Oe(n.strategy))!=null?S:"absolute"}),c=O(()=>{var S;return(S=Oe(n.transform))!=null?S:!0}),f=O(()=>gt(e.value)),p=O(()=>gt(t.value)),l=A(0),d=A(0),u=A(s.value),m=A(a.value),y=Yn({}),x=A(!1),v=O(()=>{const S={position:u.value,left:"0",top:"0"};if(!p.value)return S;const E=en(p.value,l.value),P=en(p.value,d.value);return c.value?{...S,transform:"translate("+E+"px, "+P+"px)",...Pn(p.value)>=1.5&&{willChange:"transform"}}:{position:u.value,left:E+"px",top:P+"px"}});let b;function C(){if(f.value==null||p.value==null)return;const S=r.value;Kr(f.value,p.value,{middleware:i.value,placement:a.value,strategy:s.value}).then(E=>{l.value=E.x,d.value=E.y,u.value=E.strategy,m.value=E.placement,y.value=E.middlewareData,x.value=S!==!1})}function h(){typeof b=="function"&&(b(),b=void 0)}function _(){if(h(),o===void 0){C();return}if(f.value!=null&&p.value!=null){b=o(f.value,p.value,C);return}}function w(){r.value||(x.value=!1)}return H([i,a,s,r],C,{flush:"sync"}),H([f,p],_,{flush:"sync"}),H(r,w,{flush:"sync"}),Xn()&&Gn(h),{x:Ee(l),y:Ee(d),strategy:Ee(u),placement:Ee(m),middlewareData:Ee(y),isPositioned:Ee(x),floatingStyles:v,update:C}}const Jr=["dir"],Zr={side:"bottom",sideOffset:0,sideFlip:!0,align:"center",alignOffset:0,alignFlip:!0,arrowPadding:0,hideShiftedArrow:!0,avoidCollisions:!0,collisionBoundary:()=>[],collisionPadding:0,sticky:"partial",hideWhenDetached:!1,positionStrategy:"fixed",updatePositionStrategy:"optimized",prioritizePosition:!1},[ji,Qr]=qe("PopperContent");var ei=I({inheritAttrs:!1,__name:"PopperContent",props:Zn({memoDependencies:{type:Array,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},{...Zr}),emits:["placed"],setup(e,{emit:t}){const n=e,o=t,r=gn(),{forwardRef:i,currentElement:a}=ne(),s=tn(O(()=>n.dir)),c=A(),f=A(),{width:p,height:l}=_o(f),d=O(()=>n.side+(n.align!=="center"?`-${n.align}`:"")),u=O(()=>typeof n.collisionPadding=="number"?n.collisionPadding:{top:0,right:0,bottom:0,left:0,...n.collisionPadding}),m=O(()=>Array.isArray(n.collisionBoundary)?n.collisionBoundary:[n.collisionBoundary]),y=O(()=>({padding:u.value,boundary:m.value.filter(Zo),altBoundary:m.value.length>0})),x=O(()=>({mainAxis:n.sideFlip,crossAxis:n.alignFlip})),v=O(()=>[Vr({mainAxis:n.sideOffset+l.value,alignmentAxis:n.alignOffset}),n.prioritizePosition&&n.avoidCollisions&&Qt({...y.value,...x.value}),n.avoidCollisions&&Wr({mainAxis:!0,crossAxis:!!n.prioritizePosition,limiter:n.sticky==="partial"?Ur():void 0,...y.value}),!n.prioritizePosition&&n.avoidCollisions&&Qt({...y.value,...x.value}),zr({...y.value,apply:({elements:D,rects:$,availableWidth:N,availableHeight:F})=>{const{width:V,height:W}=$.reference,z=D.floating.style;z.setProperty("--reka-popper-available-width",`${N}px`),z.setProperty("--reka-popper-available-height",`${F}px`),z.setProperty("--reka-popper-anchor-width",`${V}px`),z.setProperty("--reka-popper-anchor-height",`${W}px`)}}),f.value&&Xr({element:f.value,padding:n.arrowPadding}),Qo({arrowWidth:p.value,arrowHeight:l.value,dir:s.value}),n.hideWhenDetached&&Hr({strategy:"referenceHidden",...y.value})]),b=O(()=>n.reference??r.anchor.value),{floatingStyles:C,placement:h,isPositioned:_,middlewareData:w}=Gr(b,c,{strategy:n.positionStrategy,placement:d,whileElementsMounted:(...D)=>Nr(...D,{layoutShift:!n.disableUpdateOnLayoutShift,animationFrame:n.updatePositionStrategy==="always"}),middleware:v}),S=O(()=>vt(h.value)[0]),E=O(()=>vt(h.value)[1]);ln(()=>{_.value&&o("placed")});const P=O(()=>{var $;const D=(($=w.value.arrow)==null?void 0:$.centerOffset)!==0;return n.hideShiftedArrow&&D}),T=A("");de(()=>{a.value&&(T.value=window.getComputedStyle(a.value).zIndex)});const L=O(()=>{var D;return((D=w.value.arrow)==null?void 0:D.x)??0}),K=O(()=>{var D;return((D=w.value.arrow)==null?void 0:D.y)??0});return Qr({placedSide:S,onArrowChange:D=>f.value=D,arrowX:L,arrowY:K,shouldHideArrow:P}),(D,$)=>{var N,F,V;return R(),ce("div",{ref_key:"floatingRef",ref:c,"data-reka-popper-content-wrapper":"",dir:g(s),style:St({...g(C),transform:g(_)?g(C).transform:"translate(0, -200%)",minWidth:"max-content",zIndex:T.value,"--reka-popper-transform-origin":[(N=g(w).transformOrigin)==null?void 0:N.x,(F=g(w).transformOrigin)==null?void 0:F.y].join(" "),...((V=g(w).hide)==null?void 0:V.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}})},[n.memoDependencies?Jn([n.asChild,n.as,S.value,E.value,g(_),...Object.values(D.$attrs),...n.memoDependencies],()=>(R(),B(g(U),Q({key:0,ref:g(i)},D.$attrs,{"as-child":n.asChild,as:n.as,"data-side":S.value,"data-align":E.value,style:{animation:g(_)?void 0:"none"}}),{default:q(()=>[k(D.$slots,"default")]),_:3},16,["as-child","as","data-side","data-align","style"])),$,0):(R(),B(g(U),Q({key:1,ref:g(i)},D.$attrs,{"as-child":n.asChild,as:n.as,"data-side":S.value,"data-align":E.value,dir:g(s),style:{animation:g(_)?void 0:"none"}}),{default:q(()=>[k(D.$slots,"default")]),_:3},16,["as-child","as","data-side","data-align","dir","style"]))],12,Jr)}}}),ti=ei;function ni(e){const t=bt({nonce:A()});return O(()=>{var n;return(e==null?void 0:e.value)||((n=t.nonce)==null?void 0:n.value)})}const oi=[" ","Enter","ArrowUp","ArrowDown"],ri=[" ","Enter"],G=10;function Le(e,t,n){return e===void 0?!1:Array.isArray(e)?e.some(o=>wt(o,t,n)):wt(e,t,n)}function wt(e,t,n){return e===void 0||t===void 0?!1:typeof e=="string"?e===t:typeof n=="function"?n(e,t):typeof n=="string"?(e==null?void 0:e[n])===(t==null?void 0:t[n]):so(e,t)}function ii(e){return e==null||e===""||Array.isArray(e)&&e.length===0}const ai=["value"],[he,Tn]=qe("SelectRoot");var si=I({inheritAttrs:!1,__name:"SelectRoot",props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1},defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1,default:void 0},nullableValue:{type:String,required:!1,default:""},by:{type:[String,Function],required:!1},dir:{type:String,required:!1},multiple:{type:Boolean,required:!1},autocomplete:{type:String,required:!1},disabled:{type:Boolean,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue","update:open"],setup(e,{emit:t}){const n=e,o=t,{required:r,disabled:i,multiple:a,dir:s}=Xe(n),c=Lt(n,"modelValue",o,{defaultValue:n.defaultValue??(a.value?[]:void 0),passive:n.modelValue===void 0,deep:!0}),f=Lt(n,"open",o,{defaultValue:n.defaultOpen,passive:n.open===void 0}),p=A(),l=A(),d=A({x:0,y:0}),u=O(()=>{var h;return a.value&&Array.isArray(c.value)?((h=c.value)==null?void 0:h.length)===0:pt(c.value)});Me({isProvider:!0});const m=tn(s),y=ho(p),x=A(new Set),v=O(()=>Array.from(x.value).map(h=>h.value).join(";"));function b(h){if(a.value){const _=Array.isArray(c.value)?[...c.value]:[],w=_.findIndex(S=>wt(S,h,n.by));w===-1?_.push(h):_.splice(w,1),c.value=[..._]}else c.value=h}function C(h){return Array.from(x.value).find(_=>Le(h,_.value,n.by))}return Tn({triggerElement:p,onTriggerChange:h=>{p.value=h},valueElement:l,onValueElementChange:h=>{l.value=h},contentId:"",modelValue:c,onValueChange:b,by:n.by,open:f,multiple:a,required:r,onOpenChange:h=>{f.value=h},dir:m,triggerPointerDownPosRef:d,disabled:i,isEmptyModelValue:u,optionsSet:x,onOptionAdd:h=>{const _=C(h.value);_&&x.value.delete(_),x.value.add(h)},onOptionRemove:h=>{const _=C(h.value);_&&x.value.delete(_)}}),(h,_)=>(R(),B(g(Xo),null,{default:q(()=>[k(h.$slots,"default",{modelValue:g(c),open:g(f)}),g(y)&&h.name?(R(),B(ci,{key:v.value,"aria-hidden":"true",tabindex:"-1",multiple:g(a),required:g(r),name:h.name,autocomplete:h.autocomplete,disabled:g(i),value:g(c)},{default:q(()=>[g(pt)(g(c))?(R(),ce("option",{key:0,value:h.nullableValue},null,8,ai)):ke("v-if",!0),(R(!0),ce(_t,null,un(Array.from(x.value),w=>(R(),ce("option",Q({key:w.value??""},{ref_for:!0},w),null,16))),128))]),_:1},8,["multiple","required","name","autocomplete","disabled","value"])):ke("v-if",!0)]),_:3}))}}),li=si,ui=I({__name:"BubbleSelect",props:{autocomplete:{type:String,required:!1},autofocus:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},form:{type:String,required:!1},multiple:{type:Boolean,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1},size:{type:Number,required:!1},value:{type:null,required:!1}},setup(e){const t=e,n=A(),o=he();H(()=>t.value,(i,a)=>{const s=window.HTMLSelectElement.prototype,f=Object.getOwnPropertyDescriptor(s,"value").set;if(i!==a&&f&&n.value){const p=new Event("change",{bubbles:!0});f.call(n.value,i),n.value.dispatchEvent(p)}});function r(i){o.onValueChange(i.target.value)}return(i,a)=>(R(),B(g(Uo),{"as-child":""},{default:q(()=>[Qn("select",Q({ref_key:"selectElement",ref:n},t,{onInput:r}),[k(i.$slots,"default")],16)]),_:3}))}}),ci=ui,di=I({__name:"SelectPopperPosition",props:{memoDependencies:{type:Array,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1,default:"start"},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1,default:G},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const n=At(e);return(o,r)=>(R(),B(g(ti),Q(g(n),{style:{boxSizing:"border-box","--reka-select-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-select-content-available-width":"var(--reka-popper-available-width)","--reka-select-content-available-height":"var(--reka-popper-available-height)","--reka-select-trigger-width":"var(--reka-popper-anchor-width)","--reka-select-trigger-height":"var(--reka-popper-anchor-height)"}}),{default:q(()=>[k(o.$slots,"default")]),_:3},16))}}),fi=di;const pi={onViewportChange:()=>{},itemTextRefCallback:()=>{},itemRefCallback:()=>{}},[tt,qn]=qe("SelectContent");var mi=I({__name:"SelectContentImpl",props:{position:{type:String,required:!1,default:"item-aligned"},bodyLock:{type:Boolean,required:!1,default:!0},memoDependencies:{type:Array,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1,default:"start"},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1,default:!0}},emits:["closeAutoFocus","escapeKeyDown","pointerDownOutside"],setup(e,{emit:t}){const n=e,o=t,r=he();vo(),fo(n.bodyLock);const{CollectionSlot:i,getItems:a}=Me(),s=A();So(s);const{search:c,handleTypeaheadSearch:f}=vn(),p=A(),l=A(),d=A(),u=A(!1),m=A(!1),y=A(!1);function x(){l.value&&s.value&&Ht([l.value,s.value])}H(u,()=>{x()});const{onOpenChange:v,triggerPointerDownPosRef:b}=r;de(w=>{if(!s.value)return;let S={x:0,y:0};const E=T=>{var L,K;S={x:Math.abs(Math.round(T.pageX)-(((L=b.value)==null?void 0:L.x)??0)),y:Math.abs(Math.round(T.pageY)-(((K=b.value)==null?void 0:K.y)??0))}},P=T=>{var L;T.pointerType!=="touch"&&(S.x<=10&&S.y<=10?T.preventDefault():(L=s.value)!=null&&L.contains(T.target)||v(!1),document.removeEventListener("pointermove",E),b.value=null)};b.value!==null&&(document.addEventListener("pointermove",E),document.addEventListener("pointerup",P,{capture:!0,once:!0})),w(()=>{document.removeEventListener("pointermove",E),document.removeEventListener("pointerup",P,{capture:!0})})});function C(w){const S=w.ctrlKey||w.altKey||w.metaKey;if(w.key==="Tab"&&w.preventDefault(),!S&&w.key.length===1&&f(w.key,a()),["ArrowUp","ArrowDown","Home","End"].includes(w.key)){let P=[...a().map(T=>T.ref)];if(["ArrowUp","End"].includes(w.key)&&(P=P.slice().reverse()),["ArrowUp","ArrowDown"].includes(w.key)){const T=w.target,L=P.indexOf(T);P=P.slice(L+1)}setTimeout(()=>Ht(P)),w.preventDefault()}}const h=O(()=>n.position==="popper"?n:{}),_=At(h.value);return qn({content:s,viewport:p,onViewportChange:w=>{p.value=w},itemRefCallback:(w,S,E)=>{const P=!m.value&&!E,T=Le(r.modelValue.value,S,r.by);if(r.multiple.value){if(y.value)return;(T||P)&&(l.value=w,T&&(y.value=!0))}else(T||P)&&(l.value=w);P&&(m.value=!0)},selectedItem:l,selectedItemText:d,onItemLeave:()=>{var w;(w=s.value)==null||w.focus()},itemTextRefCallback:(w,S,E)=>{const P=!m.value&&!E;(Le(r.modelValue.value,S,r.by)||P)&&(d.value=w)},focusSelectedItem:x,position:n.position,isPositioned:u,searchRef:c}),(w,S)=>(R(),B(g(i),null,{default:q(()=>[M(g(Wo),{"as-child":"",onMountAutoFocus:S[6]||(S[6]=Be(()=>{},["prevent"])),onUnmountAutoFocus:S[7]||(S[7]=E=>{var P;o("closeAutoFocus",E),!E.defaultPrevented&&((P=g(r).triggerElement.value)==null||P.focus({preventScroll:!0}),E.preventDefault())})},{default:q(()=>[M(g(ko),{"as-child":"","disable-outside-pointer-events":w.disableOutsidePointerEvents,onFocusOutside:S[2]||(S[2]=Be(()=>{},["prevent"])),onDismiss:S[3]||(S[3]=E=>g(r).onOpenChange(!1)),onEscapeKeyDown:S[4]||(S[4]=E=>o("escapeKeyDown",E)),onPointerDownOutside:S[5]||(S[5]=E=>o("pointerDownOutside",E))},{default:q(()=>[(R(),B(eo(w.position==="popper"?fi:wi),Q({...w.$attrs,...g(_)},{id:g(r).contentId,ref:E=>{if(!E)return;const P=g(Fe)(E);P!=null&&P.hasAttribute("data-reka-popper-content-wrapper")?s.value=P.firstElementChild:s.value=P},role:"listbox","data-state":g(r).open.value?"open":"closed",dir:g(r).dir.value,style:{display:"flex",flexDirection:"column",outline:"none"},onContextmenu:S[0]||(S[0]=Be(()=>{},["prevent"])),onPlaced:S[1]||(S[1]=E=>u.value=!0),onKeydown:C}),{default:q(()=>[k(w.$slots,"default")]),_:3},16,["id","data-state","dir","onKeydown"]))]),_:3},8,["disable-outside-pointer-events"])]),_:3})]),_:3}))}}),vi=mi;const[hi,yi]=qe("SelectItemAlignedPosition");var gi=I({inheritAttrs:!1,__name:"SelectItemAlignedPosition",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["placed"],setup(e,{emit:t}){const n=e,o=t,{getItems:r}=Me(),i=he(),a=tt(),s=A(!1),c=A(!0),f=A(),{forwardRef:p,currentElement:l}=ne(),{viewport:d,selectedItem:u,selectedItemText:m,focusSelectedItem:y}=a;function x(){if(i.triggerElement.value&&i.valueElement.value&&f.value&&l.value&&(d!=null&&d.value)&&(u!=null&&u.value)&&(m!=null&&m.value)){const C=i.triggerElement.value.getBoundingClientRect(),h=l.value.getBoundingClientRect(),_=i.valueElement.value.getBoundingClientRect(),w=m.value.getBoundingClientRect();if(i.dir.value!=="rtl"){const oe=w.left-h.left,le=_.left-oe,ye=C.left-le,ge=C.width+ye,ot=Math.max(ge,h.width),rt=window.innerWidth-G,it=Ft(le,G,Math.max(G,rt-ot));f.value.style.minWidth=`${ge}px`,f.value.style.left=`${it}px`}else{const oe=h.right-w.right,le=window.innerWidth-_.right-oe,ye=window.innerWidth-C.right-le,ge=C.width+ye,ot=Math.max(ge,h.width),rt=window.innerWidth-G,it=Ft(le,G,Math.max(G,rt-ot));f.value.style.minWidth=`${ge}px`,f.value.style.right=`${it}px`}const S=r().map(oe=>oe.ref),E=window.innerHeight-G*2,P=d.value.scrollHeight,T=window.getComputedStyle(l.value),L=Number.parseInt(T.borderTopWidth,10),K=Number.parseInt(T.paddingTop,10),D=Number.parseInt(T.borderBottomWidth,10),$=Number.parseInt(T.paddingBottom,10),N=L+K+P+$+D,F=Math.min(u.value.offsetHeight*5,N),V=window.getComputedStyle(d.value),W=Number.parseInt(V.paddingTop,10),z=Number.parseInt(V.paddingBottom,10),Ce=C.top+C.height/2-G,Rn=E-Ce,nt=u.value.offsetHeight/2,Bn=u.value.offsetTop+nt,Ve=L+K+Bn,kn=N-Ve;if(Ve<=Ce){const oe=u.value===S.at(-1);f.value.style.bottom="0px";const le=l.value.clientHeight-d.value.offsetTop-d.value.offsetHeight,ye=Math.max(Rn,nt+(oe?z:0)+le+D),ge=Ve+ye;f.value.style.height=`${ge}px`}else{const oe=u.value===S[0];f.value.style.top="0px";const ye=Math.max(Ce,L+d.value.offsetTop+(oe?W:0)+nt)+kn;f.value.style.height=`${ye}px`,d.value.scrollTop=Ve-Ce+d.value.offsetTop}f.value.style.margin=`${G}px 0`,f.value.style.minHeight=`${F}px`,f.value.style.maxHeight=`${E}px`,o("placed"),requestAnimationFrame(()=>s.value=!0)}}const v=A("");me(async()=>{await X(),x(),l.value&&(v.value=window.getComputedStyle(l.value).zIndex)});function b(C){C&&c.value===!0&&(x(),y==null||y(),c.value=!1)}return to(i.triggerElement,()=>{x()}),yi({contentWrapper:f,shouldExpandOnScrollRef:s,onScrollButtonChange:b}),(C,h)=>(R(),ce("div",{ref_key:"contentWrapperElement",ref:f,style:St({display:"flex",flexDirection:"column",position:"fixed",zIndex:v.value})},[M(g(U),Q({ref:g(p),style:{boxSizing:"border-box",maxHeight:"100%"}},{...C.$attrs,...n}),{default:q(()=>[k(C.$slots,"default")]),_:3},16)],4))}}),wi=gi,bi=I({inheritAttrs:!1,__name:"SelectProvider",props:{context:{type:Object,required:!0}},setup(e){return Tn(e.context),qn(pi),(n,o)=>k(n.$slots,"default")}}),xi=bi;const Si={key:1};var _i=I({inheritAttrs:!1,__name:"SelectContent",props:{forceMount:{type:Boolean,required:!1},position:{type:String,required:!1},bodyLock:{type:Boolean,required:!1},memoDependencies:{type:Array,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["closeAutoFocus","escapeKeyDown","pointerDownOutside"],setup(e,{emit:t}){const n=e,r=yo(n,t),i=he(),a=A();me(()=>{a.value=new DocumentFragment});const s=A(),c=O(()=>n.forceMount||i.open.value),f=A(c.value);let p;function l(){p&&(clearTimeout(p),p=void 0)}return H(c,(d,u,m)=>{l(),p=setTimeout(()=>{f.value=c.value,p=void 0}),m(l)}),Ne(l),(d,u)=>{var m;return c.value||f.value||(m=s.value)!=null&&m.present?(R(),B(g(Po),{key:0,ref_key:"presenceRef",ref:s,present:c.value},{default:q(()=>[M(vi,cn(dn({...g(r),...d.$attrs})),{default:q(()=>[k(d.$slots,"default")]),_:3},16)]),_:3},8,["present"])):a.value?(R(),ce("div",Si,[(R(),B(sn,{to:a.value},[M(xi,{context:g(i)},{default:q(()=>[k(d.$slots,"default")]),_:3},8,["context"])],8,["to"]))])):ke("v-if",!0)}}}),Ci=_i;const[Dn,Ei]=qe("SelectItem");var Ai=I({__name:"SelectItem",props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select"],setup(e,{emit:t}){const n=e,o=t,{disabled:r}=Xe(n),i=he(),a=tt(),{forwardRef:s,currentElement:c}=ne(),{CollectionItem:f}=Me(),p=O(()=>{var h;return Le((h=i.modelValue)==null?void 0:h.value,n.value,i.by)}),l=A(!1),d=A(n.textValue??""),u=nn(void 0,"reka-select-item-text"),m="select.select";async function y(h){if(h.defaultPrevented)return;const _={originalEvent:h,value:n.value};Et(m,x,_)}async function x(h){await X(),o("select",h),!h.defaultPrevented&&(r.value||(i.onValueChange(n.value),i.multiple.value||i.onOpenChange(!1)))}async function v(h){var _,w;await X(),!h.defaultPrevented&&(r.value?(_=a.onItemLeave)==null||_.call(a):(w=h.currentTarget)==null||w.focus({preventScroll:!0}))}async function b(h){var _;await X(),!h.defaultPrevented&&h.currentTarget===J()&&((_=a.onItemLeave)==null||_.call(a))}async function C(h){var w;await X(),!(h.defaultPrevented||((w=a.searchRef)==null?void 0:w.value)!==""&&h.key===" ")&&(ri.includes(h.key)&&y(h),h.key===" "&&h.preventDefault())}if(n.value==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return me(()=>{c.value&&a.itemRefCallback(c.value,n.value,n.disabled)}),Ei({value:n.value,disabled:r,textId:u,isSelected:p,onItemTextChange:h=>{d.value=((d.value||(h==null?void 0:h.textContent))??"").trim()}}),(h,_)=>(R(),B(g(f),{value:{textValue:d.value}},{default:q(()=>[M(g(U),{ref:g(s),role:"option","aria-labelledby":g(u),"data-highlighted":l.value?"":void 0,"aria-selected":p.value,"data-state":p.value?"checked":"unchecked","aria-disabled":g(r)||void 0,"data-disabled":g(r)?"":void 0,tabindex:g(r)?void 0:-1,as:h.as,"as-child":h.asChild,onFocus:_[0]||(_[0]=w=>l.value=!0),onBlur:_[1]||(_[1]=w=>l.value=!1),onPointerup:y,onPointerdown:_[2]||(_[2]=w=>{w.currentTarget.focus({preventScroll:!0})}),onTouchend:_[3]||(_[3]=Be(()=>{},["prevent","stop"])),onPointermove:v,onPointerleave:b,onKeydown:C},{default:q(()=>[k(h.$slots,"default")]),_:3},8,["aria-labelledby","data-highlighted","aria-selected","data-state","aria-disabled","data-disabled","tabindex","as","as-child"])]),_:3},8,["value"]))}}),Oi=Ai,Pi=I({__name:"SelectItemIndicator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){const t=e,n=Dn();return(o,r)=>g(n).isSelected.value?(R(),B(g(U),Q({key:0,"aria-hidden":"true"},t),{default:q(()=>[k(o.$slots,"default")]),_:3},16)):ke("v-if",!0)}}),Ti=Pi,qi=I({inheritAttrs:!1,__name:"SelectItemText",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){const t=e,n=he(),o=tt(),r=Dn(),{forwardRef:i,currentElement:a}=ne(),s=O(()=>{var c,f;return{value:r.value,disabled:r.disabled.value,textContent:((c=a.value)==null?void 0:c.textContent)??((f=r.value)==null?void 0:f.toString())??""}});return me(()=>{a.value&&(r.onItemTextChange(a.value),o.itemTextRefCallback(a.value,r.value,r.disabled.value),n.onOptionAdd(s.value))}),Ne(()=>{n.onOptionRemove(s.value)}),(c,f)=>(R(),B(g(U),Q({id:g(r).textId,ref:g(i)},{...t,...c.$attrs}),{default:q(()=>[k(c.$slots,"default")]),_:3},16,["id"]))}}),Di=qi,Ri=I({__name:"SelectPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=e;return(n,o)=>(R(),B(g(Ho),cn(dn(t)),{default:q(()=>[k(n.$slots,"default")]),_:3},16))}}),Bi=Ri,ki=I({__name:"SelectTrigger",props:{disabled:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const t=e,n=he(),{forwardRef:o,currentElement:r}=ne(),i=O(()=>{var v;return((v=n.disabled)==null?void 0:v.value)||t.disabled});n.contentId||(n.contentId=nn(void 0,"reka-select-content")),me(()=>{n.onTriggerChange(r.value)});const{getItems:a}=Me(),{search:s,handleTypeaheadSearch:c,resetTypeahead:f}=vn();function p(){i.value||(n.onOpenChange(!0),f())}function l(v){p(),n.triggerPointerDownPosRef.value={x:Math.round(v.pageX),y:Math.round(v.pageY)}}function d(v){return v.button===0&&v.ctrlKey===!1}let u=!1;function m(v){if(v.pointerType==="touch")return v.preventDefault();const b=v.target;b.hasPointerCapture(v.pointerId)&&b.releasePointerCapture(v.pointerId),d(v)&&(l(v),u=!0)}function y(v){d(v)&&v.preventDefault()}function x(v){var b;u||(b=v.currentTarget)==null||b.focus(),u=!1}return(v,b)=>(R(),B(g(Jo),{"as-child":"",reference:v.reference},{default:q(()=>{var C,h,_,w;return[M(g(U),{ref:g(o),role:"combobox",type:v.as==="button"?"button":void 0,"aria-controls":g(n).contentId,"aria-expanded":g(n).open.value||!1,"aria-required":(C=g(n).required)==null?void 0:C.value,"aria-autocomplete":"none",disabled:i.value,dir:(h=g(n))==null?void 0:h.dir.value,"data-state":(_=g(n))!=null&&_.open.value?"open":"closed","data-disabled":i.value?"":void 0,"data-placeholder":g(ii)((w=g(n).modelValue)==null?void 0:w.value)?"":void 0,"as-child":v.asChild,as:v.as,onClick:x,onPointerdown:m,onMousedown:y,onPointerup:b[0]||(b[0]=Be(S=>{S.pointerType==="touch"&&l(S)},["prevent"])),onKeydown:b[1]||(b[1]=S=>{const E=g(s)!=="";!(S.ctrlKey||S.altKey||S.metaKey)&&S.key.length===1&&E&&S.key===" "||(g(c)(S.key,g(a)()),g(oi).includes(S.key)&&(p(),S.preventDefault()))})},{default:q(()=>[k(v.$slots,"default")]),_:3},8,["type","aria-controls","aria-expanded","aria-required","disabled","dir","data-state","data-disabled","data-placeholder","as-child","as"])]}),_:3},8,["reference"]))}}),Ii=ki,$i=I({__name:"SelectValue",props:{placeholder:{type:String,required:!1,default:""},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){const t=e,{forwardRef:n,currentElement:o}=ne(),r=he();me(()=>{r.valueElement=o});const i=O(()=>{var p;let s=[];const c=Array.from(r.optionsSet.value),f=l=>c.find(d=>Le(l,d.value,r.by));return Array.isArray(r.modelValue.value)?s=r.modelValue.value.map(l=>{var d;return((d=f(l))==null?void 0:d.textContent)??""}):s=[((p=f(r.modelValue.value))==null?void 0:p.textContent)??""],s.filter(Boolean)}),a=O(()=>i.value.length?i.value.join(", "):t.placeholder);return(s,c)=>(R(),B(g(U),{ref:g(n),as:s.as,"as-child":s.asChild,style:{pointerEvents:"none"},"data-placeholder":i.value.length?void 0:t.placeholder},{default:q(()=>[k(s.$slots,"default",{selectedLabel:i.value,modelValue:g(r).modelValue.value},()=>[Ct(fn(a.value),1)])]),_:3},8,["as","as-child","data-placeholder"]))}}),Li=$i,Mi=I({__name:"SelectViewport",props:{nonce:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,{nonce:n}=Xe(t),o=ni(n),r=tt(),i=r.position==="item-aligned"?hi():void 0,{forwardRef:a,currentElement:s}=ne();me(()=>{r==null||r.onViewportChange(s.value)});const c=A(0);function f(p){const l=p.currentTarget,{shouldExpandOnScrollRef:d,contentWrapper:u}=i??{};if(d!=null&&d.value&&(u!=null&&u.value)){const m=Math.abs(c.value-l.scrollTop);if(m>0){const y=window.innerHeight-G*2,x=Number.parseFloat(u.value.style.minHeight),v=Number.parseFloat(u.value.style.height),b=Math.max(x,v);if(b0?_:0,u.value.style.justifyContent="flex-end")}}}c.value=l.scrollTop}return(p,l)=>(R(),ce(_t,null,[M(g(U),Q({ref:g(a),"data-reka-select-viewport":"",role:"presentation"},{...p.$attrs,...t},{style:{position:"relative",flex:1,overflow:"hidden auto"},onScroll:f}),{default:q(()=>[k(p.$slots,"default")]),_:3},16),M(g(U),{as:"style",nonce:g(o)},{default:q(()=>l[0]||(l[0]=[Ct(" /* Hide scrollbars cross-browser and enable momentum scroll for touch devices */ [data-reka-select-viewport] { scrollbar-width:none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } [data-reka-select-viewport]::-webkit-scrollbar { display: none; } ")])),_:1,__:[0]},8,["nonce"])],64))}}),Fi=Mi;const Ui=I({__name:"Select",props:{modelValue:{},options:{},placeholder:{},ariaLabel:{},class:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,o=t;return(r,i)=>(R(),B(g(li),{"model-value":n.modelValue,"onUpdate:modelValue":i[0]||(i[0]=a=>o("update:modelValue",String(a)))},{default:q(()=>[M(g(Ii),{"aria-label":n.ariaLabel,class:no(g(oo)("border-input bg-background flex h-9 w-full items-center justify-between gap-2 rounded-md border px-3 py-1 text-sm shadow-xs transition-[color,box-shadow] outline-none","focus-visible:border-ring focus-visible:ring-ring/40 focus-visible:ring-[3px]","data-[placeholder]:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",n.class))},{default:q(()=>[M(g(Li),{placeholder:n.placeholder??"",class:"truncate"},null,8,["placeholder"]),M(g(io),{class:"size-4 shrink-0 opacity-50"})]),_:1},8,["aria-label","class"]),M(g(Bi),null,{default:q(()=>[M(g(Ci),{position:"popper","side-offset":4,class:"bg-popover text-popover-foreground animate-fade-in relative z-50 max-h-72 min-w-[var(--reka-select-trigger-width)] overflow-hidden rounded-md border shadow-md"},{default:q(()=>[M(g(Fi),{class:"p-1"},{default:q(()=>[(R(!0),ce(_t,null,un(n.options,a=>(R(),B(g(Oi),{key:a.value,value:a.value,class:"focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50"},{default:q(()=>[M(g(Di),null,{default:q(()=>[Ct(fn(a.label),1)]),_:2},1024),M(g(Ti),{class:"absolute right-2 flex items-center"},{default:q(()=>[M(g(ro),{class:"size-4"})]),_:1})]),_:2},1032,["value"]))),128))]),_:1})]),_:1})]),_:1})]),_:1},8,["model-value"]))}});export{ko as D,Wo as F,Po as P,Ho as T,Uo as V,Ui as _,mo as a,So as b,fo as c,Hi as g,ho as u}; +`))}return()=>r.value||o.value||a.value?Hn(t.default({present:a.value})[0],{ref:p=>{const l=Fe(p);return typeof(l==null?void 0:l.hasAttribute)>"u"||(l!=null&&l.hasAttribute("data-reka-popper-content-wrapper")?i.value=l.firstElementChild:i.value=l),l}}):null}});const To="dismissableLayer.pointerDownOutside",qo="dismissableLayer.focusOutside";function hn(e,t){if(!(t instanceof Element))return!1;const n=t.closest("[data-dismissable-layer]"),o=e.dataset.dismissableLayer===""?e:e.querySelector("[data-dismissable-layer]"),r=Array.from(e.ownerDocument.querySelectorAll("[data-dismissable-layer]"));return!!(n&&(o===n||r.indexOf(o){});return de(s=>{if(!be||!Pe(n))return;const c=async p=>{const l=p.target;if(!(!(t!=null&&t.value)||!l)){if(hn(t.value,l)){r.value=!1;return}if(p.target&&!r.value){let u=function(){Et(To,e,d)};const d={originalEvent:p};p.pointerType==="touch"?(o.removeEventListener("click",i.value),i.value=u,o.addEventListener("click",i.value,{once:!0})):u()}else o.removeEventListener("click",i.value);r.value=!1}},f=window.setTimeout(()=>{o.addEventListener("pointerdown",c)},0);s(()=>{window.clearTimeout(f),o.removeEventListener("pointerdown",c),o.removeEventListener("click",i.value)})}),{onPointerDownCapture:()=>{Pe(n)&&(r.value=!0)}}}function Ro(e,t,n=!0){var i;const o=((i=t==null?void 0:t.value)==null?void 0:i.ownerDocument)??(globalThis==null?void 0:globalThis.document),r=A(!1);return de(a=>{if(!be||!Pe(n))return;const s=async c=>{if(!(t!=null&&t.value))return;await X(),await X();const f=c.target;!t.value||!f||hn(t.value,f)||c.target&&!r.value&&Et(qo,e,{originalEvent:c})};o.addEventListener("focusin",s),a(()=>o.removeEventListener("focusin",s))}),{onFocusCapture:()=>{Pe(n)&&(r.value=!0)},onBlurCapture:()=>{Pe(n)&&(r.value=!1)}}}const Y=an({layersRoot:new Set,layersWithOutsidePointerEventsDisabled:new Set,originalBodyPointerEvents:void 0,branches:new Set});var Bo=I({__name:"DismissableLayer",props:{disableOutsidePointerEvents:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!1,default:!0}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","dismiss"],setup(e,{emit:t}){const n=e,o=t,{forwardRef:r,currentElement:i}=ne(),a=O(()=>{var u;return((u=i.value)==null?void 0:u.ownerDocument)??globalThis.document}),s=O(()=>Y.layersRoot),c=O(()=>i.value?Array.from(s.value).indexOf(i.value):-1),f=O(()=>Y.layersWithOutsidePointerEventsDisabled.size>0),p=O(()=>{const u=Array.from(s.value),[m]=[...Y.layersWithOutsidePointerEventsDisabled].slice(-1),y=u.indexOf(m);return c.value>=y}),l=Do(async u=>{const m=[...Y.branches].some(y=>y==null?void 0:y.contains(u.target));!n.present||!p.value||m||(o("pointerDownOutside",u),o("interactOutside",u),await X(),u.defaultPrevented||o("dismiss"))},i),d=Ro(u=>{const m=[...Y.branches].some(y=>y==null?void 0:y.contains(u.target));!n.present||m||(o("focusOutside",u),o("interactOutside",u),u.defaultPrevented||o("dismiss"))},i);return jn("Escape",u=>{!n.present||!(c.value===s.value.size-1)||(o("escapeKeyDown",u),u.defaultPrevented||o("dismiss"))}),H([i,()=>n.disableOutsidePointerEvents,()=>n.present],([u,m,y],x,v)=>{!u||!y||m&&(Y.layersWithOutsidePointerEventsDisabled.size===0&&(Y.originalBodyPointerEvents=a.value.body.style.pointerEvents,a.value.body.style.pointerEvents="none"),Y.layersWithOutsidePointerEventsDisabled.add(u),v(()=>{Y.layersWithOutsidePointerEventsDisabled.delete(u),Y.layersWithOutsidePointerEventsDisabled.size===0&&!pt(Y.originalBodyPointerEvents)&&(a.value.body.style.pointerEvents=Y.originalBodyPointerEvents)}))},{immediate:!0}),H([i,()=>n.present],([u,m],y,x)=>{!u||!m||(s.value.add(u),x(()=>{s.value.delete(u)}))},{immediate:!0}),de(u=>{u(()=>{i.value&&(s.value.delete(i.value),Y.layersWithOutsidePointerEventsDisabled.delete(i.value))})}),(u,m)=>(R(),B(g(U),{ref:g(r),"as-child":u.asChild,as:u.as,"data-dismissable-layer":"",style:St({pointerEvents:f.value?p.value?"auto":"none":void 0}),onFocusCapture:g(d).onFocusCapture,onBlurCapture:g(d).onBlurCapture,onPointerdownCapture:g(l).onPointerDownCapture},{default:q(()=>[k(u.$slots,"default")]),_:3},8,["as-child","as","style","onFocusCapture","onBlurCapture","onPointerdownCapture"]))}}),ko=Bo;const Io=Un(()=>A([]));function $o(){const e=Io();return{add(t){const n=e.value[0];t!==n&&(n==null||n.pause()),e.value=Vt(e.value,t),e.value.unshift(t)},remove(t){var n;e.value=Vt(e.value,t),(n=e.value[0])==null||n.resume()}}}function Vt(e,t){const n=[...e],o=n.indexOf(t);return o!==-1&&n.splice(o,1),n}const ut="focusScope.autoFocusOnMount",ct="focusScope.autoFocusOnUnmount",Wt={bubbles:!1,cancelable:!0};function Lo(e,{select:t=!1}={}){const n=J();for(const o of e)if(ue(o,{select:t}),J()!==n)return!0}function Mo(e){const t=yn(e),n=zt(t,e),o=zt(t.reverse(),e);return[n,o]}function yn(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const r=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||r?NodeFilter.FILTER_SKIP:o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function zt(e,t){for(const n of e)if(!Fo(n,{upTo:t}))return n}function Fo(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function No(e){return e instanceof HTMLInputElement&&"select"in e}function ue(e,{select:t=!1}={}){if(e&&e.focus){const n=J();e.focus({preventScroll:!0}),e!==n&&No(e)&&t&&e.select()}}var Vo=I({__name:"FocusScope",props:{loop:{type:Boolean,required:!1,default:!1},trapped:{type:Boolean,required:!1,default:!1},present:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["mountAutoFocus","unmountAutoFocus"],setup(e,{emit:t}){const n=e,o=t,{currentRef:r,currentElement:i}=ne(),a=A(null),s=$o(),c=an({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}});de(l=>{if(!be)return;const d=i.value;if(!n.trapped)return;function u(v){if(c.paused||!d)return;const b=v.target;d.contains(b)?a.value=b:ue(a.value,{select:!0})}function m(v){if(c.paused||!d)return;const b=v.relatedTarget;b!==null&&(d.contains(b)||ue(a.value,{select:!0}))}function y(v){const b=a.value;if(b===null||!v.some(_=>_.removedNodes.length>0))return;d.contains(b)||ue(d)}document.addEventListener("focusin",u),document.addEventListener("focusout",m);const x=new MutationObserver(y);d&&x.observe(d,{childList:!0,subtree:!0}),l(()=>{document.removeEventListener("focusin",u),document.removeEventListener("focusout",m),x.disconnect()})});function f(l,d){const u=new CustomEvent(ut,Wt),m=y=>o("mountAutoFocus",y);l.addEventListener(ut,m),l.dispatchEvent(u),l.removeEventListener(ut,m),u.defaultPrevented||(Lo(yn(l),{select:!0}),J()===d&&ue(l))}de(async l=>{const d=i.value;if(await X(),!d)return;n.present!==!1&&s.add(c);const u=J();!d.contains(u)&&n.present!==!1&&f(d,u),l(()=>{const y=new CustomEvent(ct,Wt),x=v=>{o("unmountAutoFocus",v)};d.addEventListener(ct,x),d.dispatchEvent(y),d.setAttribute("data-focus-scope-unmounting",""),setTimeout(()=>{y.defaultPrevented||ue(u??document.body,{select:!0}),d.removeEventListener(ct,x),s.remove(c),d.removeAttribute("data-focus-scope-unmounting")},0)})}),H(()=>n.present,async(l,d)=>{if(!be)return;if(l===!1&&d===!0){s.remove(c);return}if(l!==!0||d!==!1)return;s.add(c),await X();const u=i.value;if(!u)return;const m=J();u.contains(m)||f(u,m)});function p(l){if(!n.loop&&!n.trapped||c.paused)return;const d=l.key==="Tab"&&!l.altKey&&!l.ctrlKey&&!l.metaKey,u=J();if(d&&u){const m=l.currentTarget,[y,x]=Mo(m);y&&x?!l.shiftKey&&u===x?(l.preventDefault(),n.loop&&ue(y,{select:!0})):l.shiftKey&&u===y&&(l.preventDefault(),n.loop&&ue(x,{select:!0})):u===m&&l.preventDefault()}}return(l,d)=>(R(),B(g(U),{ref_key:"currentRef",ref:r,tabindex:"-1","as-child":l.asChild,as:l.as,onKeydown:p},{default:q(()=>[k(l.$slots,"default")]),_:3},8,["as-child","as"]))}}),Wo=Vo;function Hi(e){return e?"open":"closed"}function Ht(e){const t=J();for(const n of e)if(n===t||(n.focus(),J()!==t))return}var zo=I({__name:"Teleport",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=e,n=bt({}),o=O(()=>{var i;return t.to??((i=n.teleportTo)==null?void 0:i.value)??"body"}),r=Kn();return(i,a)=>g(r)||i.forceMount?(R(),B(sn,{key:0,to:o.value,disabled:i.disabled,defer:i.defer},[k(i.$slots,"default")],8,["to","disabled","defer"])):ke("v-if",!0)}}),Ho=zo,jo=I({__name:"VisuallyHidden",props:{feature:{type:String,required:!1,default:"focusable"},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){return(t,n)=>(R(),B(g(U),{as:t.as,"as-child":t.asChild,"aria-hidden":t.feature==="focusable"||t.feature==="fully-hidden"?"true":void 0,"data-hidden":t.feature==="fully-hidden"?"":void 0,tabindex:t.feature==="fully-hidden"?"-1":void 0,style:{position:"absolute",border:0,width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",clipPath:"inset(50%)",whiteSpace:"nowrap",wordWrap:"normal",top:"-1px",left:"-1px"}},{default:q(()=>[k(t.$slots,"default")]),_:3},8,["as","as-child","aria-hidden","data-hidden","tabindex"]))}}),Uo=jo;const[gn,Ko]=qe("PopperRoot");var Yo=I({inheritAttrs:!1,__name:"PopperRoot",setup(e){const t=A();return Ko({anchor:t,onAnchorChange:n=>t.value=n}),(n,o)=>k(n.$slots,"default")}}),Xo=Yo,Go=I({__name:"PopperAnchor",props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,{forwardRef:n,currentElement:o}=ne(),r=gn();return ln(()=>{r.onAnchorChange(t.reference??o.value)}),(i,a)=>(R(),B(g(U),{ref:g(n),as:i.as,"as-child":i.asChild},{default:q(()=>[k(i.$slots,"default")]),_:3},8,["as","as-child"]))}}),Jo=Go;function Zo(e){return e!==null}function Qo(e){return{name:"transformOrigin",options:e,fn(t){var v,b,C;const{placement:n,rects:o,middlewareData:r}=t,a=((v=r.arrow)==null?void 0:v.centerOffset)!==0,s=a?0:e.arrowWidth,c=a?0:e.arrowHeight,[f,p]=vt(n),l={start:e.dir==="rtl"?"100%":"0%",center:"50%",end:e.dir==="rtl"?"0%":"100%"}[p],d={start:"0%",center:"50%",end:"100%"}[p],u=(((b=r.arrow)==null?void 0:b.x)??0)+s/2,m=(((C=r.arrow)==null?void 0:C.y)??0)+c/2;let y="",x="";return f==="bottom"?(y=a?l:`${u}px`,x=`${-c}px`):f==="top"?(y=a?l:`${u}px`,x=`${o.floating.height+c}px`):f==="right"?(y=`${-c}px`,x=a?d:`${m}px`):f==="left"&&(y=`${o.floating.width+c}px`,x=a?d:`${m}px`),{data:{x:y,y:x}}}}}function vt(e){const[t,n="center"]=e.split("-");return[t,n]}const er=["top","right","bottom","left"],fe=Math.min,re=Math.max,Ue=Math.round,je=Math.floor,ie=e=>({x:e,y:e}),tr={left:"right",right:"left",bottom:"top",top:"bottom"};function wn(e,t,n){return re(e,fe(t,n))}function ae(e,t){return typeof e=="function"?e(t):e}function pe(e){return e.split("-")[0]}function De(e){return e.split("-")[1]}function Ot(e){return e==="x"?"y":"x"}function Pt(e){return e==="y"?"height":"width"}function Z(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function Tt(e){return Ot(Z(e))}function nr(e,t,n){n===void 0&&(n=!1);const o=De(e),r=Tt(e),i=Pt(r);let a=r==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return t.reference[i]>t.floating[i]&&(a=Ke(a)),[a,Ke(a)]}function or(e){const t=Ke(e);return[ht(e),t,ht(t)]}function ht(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const jt=["left","right"],Ut=["right","left"],rr=["top","bottom"],ir=["bottom","top"];function ar(e,t,n){switch(e){case"top":case"bottom":return n?t?Ut:jt:t?jt:Ut;case"left":case"right":return t?rr:ir;default:return[]}}function sr(e,t,n,o){const r=De(e);let i=ar(pe(e),n==="start",o);return r&&(i=i.map(a=>a+"-"+r),t&&(i=i.concat(i.map(ht)))),i}function Ke(e){const t=pe(e);return tr[t]+e.slice(t.length)}function lr(e){var t,n,o,r;return{top:(t=e.top)!=null?t:0,right:(n=e.right)!=null?n:0,bottom:(o=e.bottom)!=null?o:0,left:(r=e.left)!=null?r:0}}function bn(e){return typeof e!="number"?lr(e):{top:e,right:e,bottom:e,left:e}}function Ye(e){const{x:t,y:n,width:o,height:r}=e;return{width:o,height:r,top:n,left:t,right:t+o,bottom:n+r,x:t,y:n}}function Kt(e,t,n){let{reference:o,floating:r}=e;const i=Z(t),a=Tt(t),s=Pt(a),c=pe(t),f=i==="y",p=o.x+o.width/2-r.width/2,l=o.y+o.height/2-r.height/2,d=o[s]/2-r[s]/2;let u;switch(c){case"top":u={x:p,y:o.y-r.height};break;case"bottom":u={x:p,y:o.y+o.height};break;case"right":u={x:o.x+o.width,y:l};break;case"left":u={x:o.x-r.width,y:l};break;default:u={x:o.x,y:o.y}}const m=De(t);return m&&(u[a]+=d*(m==="end"?1:-1)*(n&&f?-1:1)),u}async function ur(e,t){var n;t===void 0&&(t={});const{x:o,y:r,platform:i,rects:a,elements:s,strategy:c}=e,{boundary:f="clippingAncestors",rootBoundary:p="viewport",elementContext:l="floating",altBoundary:d=!1,padding:u=0}=ae(t,e),m=bn(u),x=s[d?l==="floating"?"reference":"floating":l],v=Ye(await i.getClippingRect({element:(n=await(i.isElement==null?void 0:i.isElement(x)))==null||n?x:x.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(s.floating)),boundary:f,rootBoundary:p,strategy:c})),b=l==="floating"?{x:o,y:r,width:a.floating.width,height:a.floating.height}:a.reference,C=await(i.getOffsetParent==null?void 0:i.getOffsetParent(s.floating)),h=await(i.isElement==null?void 0:i.isElement(C))&&await(i.getScale==null?void 0:i.getScale(C))||{x:1,y:1},_=Ye(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:b,offsetParent:C,strategy:c}):b);return{top:(v.top-_.top+m.top)/h.y,bottom:(_.bottom-v.bottom+m.bottom)/h.y,left:(v.left-_.left+m.left)/h.x,right:(_.right-v.right+m.right)/h.x}}const cr=50,dr=async(e,t,n)=>{const{placement:o="bottom",strategy:r="absolute",middleware:i=[],platform:a}=n,s=a.detectOverflow?a:{...a,detectOverflow:ur},c=await(a.isRTL==null?void 0:a.isRTL(t));let f=await a.getElementRects({reference:e,floating:t,strategy:r}),{x:p,y:l}=Kt(f,o,c),d=o,u=0;const m={};for(let y=0;y({name:"arrow",options:e,async fn(t){const{x:n,y:o,placement:r,rects:i,platform:a,elements:s,middlewareData:c}=t,{element:f,padding:p=0}=ae(e,t)||{};if(f==null)return{};const l=bn(p),d={x:n,y:o},u=Tt(r),m=Pt(u),y=await a.getDimensions(f),x=u==="y",v=x?"top":"left",b=x?"bottom":"right",C=x?"clientHeight":"clientWidth",h=i.reference[m]+i.reference[u]-d[u]-i.floating[m],_=d[u]-i.reference[u],w=await(a.getOffsetParent==null?void 0:a.getOffsetParent(f));let S=w?w[C]:0;(!S||!await(a.isElement==null?void 0:a.isElement(w)))&&(S=s.floating[C]||i.floating[m]);const E=h/2-_/2,P=S/2-y[m]/2-1,T=fe(l[v],P),L=fe(l[b],P),K=S-y[m]-L,D=S/2-y[m]/2+E,$=wn(T,D,K),N=!c.arrow&&De(r)!=null&&D!==$&&i.reference[m]/2-(D$<=0)){var L,K;const $=(((L=i.flip)==null?void 0:L.index)||0)+1,N=S[$];if(N&&(!(l==="alignment"?b!==Z(N):!1)||T.every(W=>Z(W.placement)===b?W.overflows[0]>0:!0)))return{data:{index:$,overflows:T},reset:{placement:N}};let F=(K=T.filter(V=>V.overflows[0]<=0).sort((V,W)=>V.overflows[1]-W.overflows[1])[0])==null?void 0:K.placement;if(!F)switch(u){case"bestFit":{var D;const V=(D=T.filter(W=>{if(w){const z=Z(W.placement);return z===b||z==="y"}return!0}).map(W=>[W.placement,W.overflows.filter(z=>z>0).reduce((z,Ce)=>z+Ce,0)]).sort((W,z)=>W[1]-z[1])[0])==null?void 0:D[0];V&&(F=V);break}case"initialPlacement":F=s;break}if(r!==F)return{reset:{placement:F}}}return{}}}};function Yt(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function Xt(e){return er.some(t=>e[t]>=0)}const mr=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n,platform:o}=t,{strategy:r="referenceHidden",...i}=ae(e,t);switch(r){case"referenceHidden":{const a=await o.detectOverflow(t,{...i,elementContext:"reference"}),s=Yt(a,n.reference);return{data:{referenceHiddenOffsets:s,referenceHidden:Xt(s)}}}case"escaped":{const a=await o.detectOverflow(t,{...i,altBoundary:!0}),s=Yt(a,n.floating);return{data:{escapedOffsets:s,escaped:Xt(s)}}}default:return{}}}}},xn=new Set(["left","top"]);async function vr(e,t){const{placement:n,platform:o,elements:r}=e,i=await(o.isRTL==null?void 0:o.isRTL(r.floating)),a=pe(n),s=De(n),c=Z(n)==="y",f=xn.has(a)?-1:1,p=i&&c?-1:1,l=ae(t,e);let{mainAxis:d,crossAxis:u,alignmentAxis:m}=typeof l=="number"?{mainAxis:l,crossAxis:0,alignmentAxis:null}:{mainAxis:l.mainAxis||0,crossAxis:l.crossAxis||0,alignmentAxis:l.alignmentAxis};return s&&typeof m=="number"&&(u=s==="end"?m*-1:m),c?{x:u*p,y:d*f}:{x:d*f,y:u*p}}const hr=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,o;const{x:r,y:i,placement:a,middlewareData:s}=t,c=await vr(t,e);return a===((n=s.offset)==null?void 0:n.placement)&&(o=s.arrow)!=null&&o.alignmentOffset?{}:{x:r+c.x,y:i+c.y,data:{...c,placement:a}}}}},yr=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:o,placement:r,platform:i}=t,{mainAxis:a=!0,crossAxis:s=!1,limiter:c={fn:b=>{let{x:C,y:h}=b;return{x:C,y:h}}},...f}=ae(e,t),p={x:n,y:o},l=await i.detectOverflow(t,f),d=Z(r),u=Ot(d);let m=p[u],y=p[d];const x=(b,C)=>wn(C+l[b==="y"?"top":"left"],C,C-l[b==="y"?"bottom":"right"]);a&&(m=x(u,m)),s&&(y=x(d,y));const v=c.fn({...t,[u]:m,[d]:y});return{...v,data:{x:v.x-n,y:v.y-o,enabled:{[u]:a,[d]:s}}}}}},gr=function(e){return e===void 0&&(e={}),{options:e,fn(t){var n,o;const{x:r,y:i,placement:a,rects:s,middlewareData:c}=t,{offset:f=0,mainAxis:p=!0,crossAxis:l=!0}=ae(e,t),d={x:r,y:i},u=Z(a),m=Ot(u);let y=d[m],x=d[u];const v=ae(f,t),b=typeof v=="number"?{mainAxis:v,crossAxis:0}:{mainAxis:(n=v.mainAxis)!=null?n:0,crossAxis:(o=v.crossAxis)!=null?o:0};if(p){const _=m==="y"?"height":"width",w=s.reference[m]-s.floating[_]+b.mainAxis,S=s.reference[m]+s.reference[_]-b.mainAxis;yS&&(y=S)}if(l){var C,h;const _=m==="y"?"width":"height",w=xn.has(pe(a)),S=s.reference[u]-s.floating[_]+(w&&((C=c.offset)==null?void 0:C[u])||0)+(w?0:b.crossAxis),E=s.reference[u]+s.reference[_]+(w?0:((h=c.offset)==null?void 0:h[u])||0)-(w?b.crossAxis:0);xE&&(x=E)}return{[m]:y,[u]:x}}}},wr=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:n,rects:o,platform:r,elements:i}=t,{apply:a=()=>{},...s}=ae(e,t),c=await r.detectOverflow(t,s),f=pe(n),p=De(n),l=Z(n)==="y",{width:d,height:u}=o.floating;let m,y;f==="top"||f==="bottom"?(m=f,y=p===(await(r.isRTL==null?void 0:r.isRTL(i.floating))?"start":"end")?"left":"right"):(y=f,m=p==="end"?"top":"bottom");const x=u-c.top-c.bottom,v=d-c.left-c.right,b=fe(u-c[m],x),C=fe(d-c[y],v),h=t.middlewareData.shift,_=!h;let w=b,S=C;h!=null&&h.enabled.x&&(S=v),h!=null&&h.enabled.y&&(w=x),_&&!p&&(l?S=d-2*re(c.left,c.right):w=u-2*re(c.top,c.bottom)),await a({...t,availableWidth:S,availableHeight:w});const E=await r.getDimensions(i.floating);return d!==E.width||u!==E.height?{reset:{rects:!0}}:{}}}};function Ge(){return typeof window<"u"}function _e(e){return qt(e)?(e.nodeName||"").toLowerCase():"#document"}function j(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function se(e){var t;return(t=(qt(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function qt(e){return Ge()?e instanceof Node||e instanceof j(e).Node:!1}function ee(e){return Ge()?e instanceof Element||e instanceof j(e).Element:!1}function ve(e){return Ge()?e instanceof HTMLElement||e instanceof j(e).HTMLElement:!1}function Gt(e){return!Ge()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof j(e).ShadowRoot}function Je(e){const{overflow:t,overflowX:n,overflowY:o,display:r}=te(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+n)&&r!=="inline"&&r!=="contents"}function br(e){return/^(table|td|th)$/.test(_e(e))}function Ze(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const xr=/transform|translate|scale|rotate|perspective|filter/,Sr=/paint|layout|strict|content/,we=e=>!!e&&e!=="none";let dt;function Dt(e){const t=ee(e)?te(e):e;return we(t.transform)||we(t.translate)||we(t.scale)||we(t.rotate)||we(t.perspective)||!Rt()&&(we(t.backdropFilter)||we(t.filter))||xr.test(t.willChange||"")||Sr.test(t.contain||"")}function _r(e){let t=xe(e);for(;ve(t)&&!Ie(t);){if(Dt(t))return t;if(Ze(t))return null;t=xe(t)}return null}function Rt(){return dt==null&&(dt=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),dt}function Ie(e){return/^(html|body|#document)$/.test(_e(e))}function te(e){return j(e).getComputedStyle(e)}function Qe(e){return ee(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function xe(e){if(_e(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Gt(e)&&e.host||se(e);return Gt(t)?t.host:t}function Sn(e){const t=xe(e);return Ie(t)?(e.ownerDocument||e).body:ve(t)&&Je(t)?t:Sn(t)}function $e(e,t,n){var o;t===void 0&&(t=[]),n===void 0&&(n=!0);const r=Sn(e),i=r===((o=e.ownerDocument)==null?void 0:o.body),a=j(r);if(i){const s=yt(a);return t.concat(a,a.visualViewport||[],Je(r)?r:[],s&&n?$e(s):[])}else return t.concat(r,$e(r,[],n))}function yt(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function _n(e){const t=te(e);let n=parseFloat(t.width)||0,o=parseFloat(t.height)||0;const r=ve(e),i=r?e.offsetWidth:n,a=r?e.offsetHeight:o,s=Ue(n)!==i||Ue(o)!==a;return s&&(n=i,o=a),{width:n,height:o,$:s}}function Bt(e){return ee(e)?e:e.contextElement}function Te(e){const t=Bt(e);if(!ve(t))return ie(1);const n=t.getBoundingClientRect(),{width:o,height:r,$:i}=_n(t);let a=(i?Ue(n.width):n.width)/o,s=(i?Ue(n.height):n.height)/r;return(!a||!Number.isFinite(a))&&(a=1),(!s||!Number.isFinite(s))&&(s=1),{x:a,y:s}}const Cr=ie(0);function Cn(e){const t=j(e);return!Rt()||!t.visualViewport?Cr:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function Er(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===j(e)}function Se(e,t,n,o){t===void 0&&(t=!1),n===void 0&&(n=!1);const r=e.getBoundingClientRect(),i=Bt(e);let a=ie(1);t&&(o?ee(o)&&(a=Te(o)):a=Te(e));const s=Er(i,n,o)?Cn(i):ie(0);let c=(r.left+s.x)/a.x,f=(r.top+s.y)/a.y,p=r.width/a.x,l=r.height/a.y;if(i&&o){const d=j(i),u=ee(o)?j(o):o;let m=d,y=yt(m);for(;y&&u!==m;){const x=Te(y),v=y.getBoundingClientRect(),b=te(y),C=v.left+(y.clientLeft+parseFloat(b.paddingLeft))*x.x,h=v.top+(y.clientTop+parseFloat(b.paddingTop))*x.y;c*=x.x,f*=x.y,p*=x.x,l*=x.y,c+=C,f+=h,m=j(y),y=yt(m)}}return Ye({width:p,height:l,x:c,y:f})}function et(e,t){const n=Qe(e).scrollLeft;return t?t.left+n:Se(se(e)).left+n}function En(e,t){const n=e.getBoundingClientRect(),o=n.left+t.scrollLeft-et(e,n),r=n.top+t.scrollTop;return{x:o,y:r}}function Ar(e){let{elements:t,rect:n,offsetParent:o,strategy:r}=e;const i=r==="fixed",a=se(o),s=t?Ze(t.floating):!1;if(o===a||s&&i)return n;let c={scrollLeft:0,scrollTop:0},f=ie(1);const p=ie(0),l=ve(o);if((l||!i)&&((_e(o)!=="body"||Je(a))&&(c=Qe(o)),l)){const u=Se(o);f=Te(o),p.x=u.x+o.clientLeft,p.y=u.y+o.clientTop}const d=a&&!l&&!i?En(a,c):ie(0);return{width:n.width*f.x,height:n.height*f.y,x:n.x*f.x-c.scrollLeft*f.x+p.x+d.x,y:n.y*f.y-c.scrollTop*f.y+p.y+d.y}}function Or(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function Pr(e){const t=Qe(e),n=e.ownerDocument.body,o=re(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),r=re(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight);let i=-t.scrollLeft+et(e);const a=-t.scrollTop;return te(n).direction==="rtl"&&(i+=re(e.clientWidth,n.clientWidth)-o),{width:o,height:r,x:i,y:a}}const Tr=25;function qr(e,t,n){n===void 0&&(n="viewport");const o=n==="layoutViewport",r=j(e),i=se(e),a=r.visualViewport;let s=i.clientWidth,c=i.clientHeight,f=0,p=0;if(a){const d=!Rt()||t==="fixed";o?d||(f=-a.offsetLeft,p=-a.offsetTop):(s=a.width,c=a.height,d&&(f=a.offsetLeft,p=a.offsetTop))}if(et(i)<=0){const d=i.ownerDocument,u=d.body,m=getComputedStyle(u),y=d.compatMode==="CSS1Compat"&&parseFloat(m.marginLeft)+parseFloat(m.marginRight)||0,x=Math.abs(i.clientWidth-u.clientWidth-y),v=getComputedStyle(i).scrollbarGutter==="stable both-edges"?x/2:x;v<=Tr&&(s-=v)}return{width:s,height:c,x:f,y:p}}function Dr(e,t){const n=Se(e,!0,t==="fixed"),o=n.top+e.clientTop,r=n.left+e.clientLeft,i=Te(e),a=e.clientWidth*i.x,s=e.clientHeight*i.y,c=r*i.x,f=o*i.y;return{width:a,height:s,x:c,y:f}}function Jt(e,t,n){let o;if(t==="viewport"||t==="layoutViewport")o=qr(e,n,t);else if(t==="document")o=Pr(se(e));else if(ee(t))o=Dr(t,n);else{const r=Cn(e);o={x:t.x-r.x,y:t.y-r.y,width:t.width,height:t.height}}return Ye(o)}function Rr(e,t){const n=t.get(e);if(n)return n;let o=$e(e,[],!1).filter(s=>ee(s)&&_e(s)!=="body"),r=null;const i=te(e).position==="fixed";let a=i?xe(e):e;for(;ee(a)&&!Ie(a);){const s=te(a),c=Dt(a),f=r?r.position:i?"fixed":"";!c&&(f==="fixed"||f==="absolute"&&s.position==="static")?o=o.filter(l=>l!==a):r=s,a=xe(a)}return t.set(e,o),o}function Br(e){let{element:t,boundary:n,rootBoundary:o,strategy:r}=e;const a=[...n==="clippingAncestors"?Ze(t)?[]:Rr(t,this._c):[].concat(n),o],s=Jt(t,a[0],r);let c=s.top,f=s.right,p=s.bottom,l=s.left;for(let d=1;d{s(!1,1e-7)},1e3)}S=!1}try{o=new IntersectionObserver(E,{...w,root:i.ownerDocument})}catch{o=new IntersectionObserver(E,w)}o.observe(e)}const c=j(e),f=()=>s(n);return c.addEventListener("resize",f),s(!0),()=>{c.removeEventListener("resize",f),a()}}function Nr(e,t,n,o){o===void 0&&(o={});const{ancestorScroll:r=!0,ancestorResize:i=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,f=Bt(e),p=r||i?[...f?$e(f):[],...t?$e(t):[]]:[];p.forEach(v=>{r&&v.addEventListener("scroll",n),i&&v.addEventListener("resize",n)});const l=f&&s?Fr(f,n,i):null;let d=-1,u=null;a&&(u=new ResizeObserver(v=>{let[b]=v;b&&b.target===f&&u&&t&&(u.unobserve(t),cancelAnimationFrame(d),d=requestAnimationFrame(()=>{var C;(C=u)==null||C.observe(t)})),n()}),f&&!c&&u.observe(f),t&&u.observe(t));let m,y=c?Se(e):null;c&&x();function x(){const v=Se(e);y&&!On(y,v)&&n(),y=v,m=requestAnimationFrame(x)}return n(),()=>{var v;p.forEach(b=>{r&&b.removeEventListener("scroll",n),i&&b.removeEventListener("resize",n)}),l==null||l(),(v=u)==null||v.disconnect(),u=null,c&&cancelAnimationFrame(m)}}const Vr=hr,Wr=yr,Qt=pr,zr=wr,Hr=mr,jr=fr,Ur=gr,Kr=(e,t,n)=>{const o=new Map,r=n??{},i={...Mr,...r.platform,_c:o};return dr(e,t,{...r,platform:i})};function Yr(e){return e!=null&&typeof e=="object"&&"$el"in e}function gt(e){if(Yr(e)){const t=e.$el;return qt(t)&&_e(t)==="#comment"?null:t}return e}function Oe(e){return typeof e=="function"?e():g(e)}function Xr(e){return{name:"arrow",options:e,fn(t){const n=gt(Oe(e.element));return n==null?{}:jr({element:n,padding:e.padding}).fn(t)}}}function Pn(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function en(e,t){const n=Pn(e);return Math.round(t*n)/n}function Gr(e,t,n){n===void 0&&(n={});const o=n.whileElementsMounted,r=O(()=>{var S;return(S=Oe(n.open))!=null?S:!0}),i=O(()=>Oe(n.middleware)),a=O(()=>{var S;return(S=Oe(n.placement))!=null?S:"bottom"}),s=O(()=>{var S;return(S=Oe(n.strategy))!=null?S:"absolute"}),c=O(()=>{var S;return(S=Oe(n.transform))!=null?S:!0}),f=O(()=>gt(e.value)),p=O(()=>gt(t.value)),l=A(0),d=A(0),u=A(s.value),m=A(a.value),y=Yn({}),x=A(!1),v=O(()=>{const S={position:u.value,left:"0",top:"0"};if(!p.value)return S;const E=en(p.value,l.value),P=en(p.value,d.value);return c.value?{...S,transform:"translate("+E+"px, "+P+"px)",...Pn(p.value)>=1.5&&{willChange:"transform"}}:{position:u.value,left:E+"px",top:P+"px"}});let b;function C(){if(f.value==null||p.value==null)return;const S=r.value;Kr(f.value,p.value,{middleware:i.value,placement:a.value,strategy:s.value}).then(E=>{l.value=E.x,d.value=E.y,u.value=E.strategy,m.value=E.placement,y.value=E.middlewareData,x.value=S!==!1})}function h(){typeof b=="function"&&(b(),b=void 0)}function _(){if(h(),o===void 0){C();return}if(f.value!=null&&p.value!=null){b=o(f.value,p.value,C);return}}function w(){r.value||(x.value=!1)}return H([i,a,s,r],C,{flush:"sync"}),H([f,p],_,{flush:"sync"}),H(r,w,{flush:"sync"}),Xn()&&Gn(h),{x:Ee(l),y:Ee(d),strategy:Ee(u),placement:Ee(m),middlewareData:Ee(y),isPositioned:Ee(x),floatingStyles:v,update:C}}const Jr=["dir"],Zr={side:"bottom",sideOffset:0,sideFlip:!0,align:"center",alignOffset:0,alignFlip:!0,arrowPadding:0,hideShiftedArrow:!0,avoidCollisions:!0,collisionBoundary:()=>[],collisionPadding:0,sticky:"partial",hideWhenDetached:!1,positionStrategy:"fixed",updatePositionStrategy:"optimized",prioritizePosition:!1},[ji,Qr]=qe("PopperContent");var ei=I({inheritAttrs:!1,__name:"PopperContent",props:Zn({memoDependencies:{type:Array,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},{...Zr}),emits:["placed"],setup(e,{emit:t}){const n=e,o=t,r=gn(),{forwardRef:i,currentElement:a}=ne(),s=tn(O(()=>n.dir)),c=A(),f=A(),{width:p,height:l}=_o(f),d=O(()=>n.side+(n.align!=="center"?`-${n.align}`:"")),u=O(()=>typeof n.collisionPadding=="number"?n.collisionPadding:{top:0,right:0,bottom:0,left:0,...n.collisionPadding}),m=O(()=>Array.isArray(n.collisionBoundary)?n.collisionBoundary:[n.collisionBoundary]),y=O(()=>({padding:u.value,boundary:m.value.filter(Zo),altBoundary:m.value.length>0})),x=O(()=>({mainAxis:n.sideFlip,crossAxis:n.alignFlip})),v=O(()=>[Vr({mainAxis:n.sideOffset+l.value,alignmentAxis:n.alignOffset}),n.prioritizePosition&&n.avoidCollisions&&Qt({...y.value,...x.value}),n.avoidCollisions&&Wr({mainAxis:!0,crossAxis:!!n.prioritizePosition,limiter:n.sticky==="partial"?Ur():void 0,...y.value}),!n.prioritizePosition&&n.avoidCollisions&&Qt({...y.value,...x.value}),zr({...y.value,apply:({elements:D,rects:$,availableWidth:N,availableHeight:F})=>{const{width:V,height:W}=$.reference,z=D.floating.style;z.setProperty("--reka-popper-available-width",`${N}px`),z.setProperty("--reka-popper-available-height",`${F}px`),z.setProperty("--reka-popper-anchor-width",`${V}px`),z.setProperty("--reka-popper-anchor-height",`${W}px`)}}),f.value&&Xr({element:f.value,padding:n.arrowPadding}),Qo({arrowWidth:p.value,arrowHeight:l.value,dir:s.value}),n.hideWhenDetached&&Hr({strategy:"referenceHidden",...y.value})]),b=O(()=>n.reference??r.anchor.value),{floatingStyles:C,placement:h,isPositioned:_,middlewareData:w}=Gr(b,c,{strategy:n.positionStrategy,placement:d,whileElementsMounted:(...D)=>Nr(...D,{layoutShift:!n.disableUpdateOnLayoutShift,animationFrame:n.updatePositionStrategy==="always"}),middleware:v}),S=O(()=>vt(h.value)[0]),E=O(()=>vt(h.value)[1]);ln(()=>{_.value&&o("placed")});const P=O(()=>{var $;const D=(($=w.value.arrow)==null?void 0:$.centerOffset)!==0;return n.hideShiftedArrow&&D}),T=A("");de(()=>{a.value&&(T.value=window.getComputedStyle(a.value).zIndex)});const L=O(()=>{var D;return((D=w.value.arrow)==null?void 0:D.x)??0}),K=O(()=>{var D;return((D=w.value.arrow)==null?void 0:D.y)??0});return Qr({placedSide:S,onArrowChange:D=>f.value=D,arrowX:L,arrowY:K,shouldHideArrow:P}),(D,$)=>{var N,F,V;return R(),ce("div",{ref_key:"floatingRef",ref:c,"data-reka-popper-content-wrapper":"",dir:g(s),style:St({...g(C),transform:g(_)?g(C).transform:"translate(0, -200%)",minWidth:"max-content",zIndex:T.value,"--reka-popper-transform-origin":[(N=g(w).transformOrigin)==null?void 0:N.x,(F=g(w).transformOrigin)==null?void 0:F.y].join(" "),...((V=g(w).hide)==null?void 0:V.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}})},[n.memoDependencies?Jn([n.asChild,n.as,S.value,E.value,g(_),...Object.values(D.$attrs),...n.memoDependencies],()=>(R(),B(g(U),Q({key:0,ref:g(i)},D.$attrs,{"as-child":n.asChild,as:n.as,"data-side":S.value,"data-align":E.value,style:{animation:g(_)?void 0:"none"}}),{default:q(()=>[k(D.$slots,"default")]),_:3},16,["as-child","as","data-side","data-align","style"])),$,0):(R(),B(g(U),Q({key:1,ref:g(i)},D.$attrs,{"as-child":n.asChild,as:n.as,"data-side":S.value,"data-align":E.value,dir:g(s),style:{animation:g(_)?void 0:"none"}}),{default:q(()=>[k(D.$slots,"default")]),_:3},16,["as-child","as","data-side","data-align","dir","style"]))],12,Jr)}}}),ti=ei;function ni(e){const t=bt({nonce:A()});return O(()=>{var n;return(e==null?void 0:e.value)||((n=t.nonce)==null?void 0:n.value)})}const oi=[" ","Enter","ArrowUp","ArrowDown"],ri=[" ","Enter"],G=10;function Le(e,t,n){return e===void 0?!1:Array.isArray(e)?e.some(o=>wt(o,t,n)):wt(e,t,n)}function wt(e,t,n){return e===void 0||t===void 0?!1:typeof e=="string"?e===t:typeof n=="function"?n(e,t):typeof n=="string"?(e==null?void 0:e[n])===(t==null?void 0:t[n]):so(e,t)}function ii(e){return e==null||e===""||Array.isArray(e)&&e.length===0}const ai=["value"],[he,Tn]=qe("SelectRoot");var si=I({inheritAttrs:!1,__name:"SelectRoot",props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1},defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1,default:void 0},nullableValue:{type:String,required:!1,default:""},by:{type:[String,Function],required:!1},dir:{type:String,required:!1},multiple:{type:Boolean,required:!1},autocomplete:{type:String,required:!1},disabled:{type:Boolean,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue","update:open"],setup(e,{emit:t}){const n=e,o=t,{required:r,disabled:i,multiple:a,dir:s}=Xe(n),c=Lt(n,"modelValue",o,{defaultValue:n.defaultValue??(a.value?[]:void 0),passive:n.modelValue===void 0,deep:!0}),f=Lt(n,"open",o,{defaultValue:n.defaultOpen,passive:n.open===void 0}),p=A(),l=A(),d=A({x:0,y:0}),u=O(()=>{var h;return a.value&&Array.isArray(c.value)?((h=c.value)==null?void 0:h.length)===0:pt(c.value)});Me({isProvider:!0});const m=tn(s),y=ho(p),x=A(new Set),v=O(()=>Array.from(x.value).map(h=>h.value).join(";"));function b(h){if(a.value){const _=Array.isArray(c.value)?[...c.value]:[],w=_.findIndex(S=>wt(S,h,n.by));w===-1?_.push(h):_.splice(w,1),c.value=[..._]}else c.value=h}function C(h){return Array.from(x.value).find(_=>Le(h,_.value,n.by))}return Tn({triggerElement:p,onTriggerChange:h=>{p.value=h},valueElement:l,onValueElementChange:h=>{l.value=h},contentId:"",modelValue:c,onValueChange:b,by:n.by,open:f,multiple:a,required:r,onOpenChange:h=>{f.value=h},dir:m,triggerPointerDownPosRef:d,disabled:i,isEmptyModelValue:u,optionsSet:x,onOptionAdd:h=>{const _=C(h.value);_&&x.value.delete(_),x.value.add(h)},onOptionRemove:h=>{const _=C(h.value);_&&x.value.delete(_)}}),(h,_)=>(R(),B(g(Xo),null,{default:q(()=>[k(h.$slots,"default",{modelValue:g(c),open:g(f)}),g(y)&&h.name?(R(),B(ci,{key:v.value,"aria-hidden":"true",tabindex:"-1",multiple:g(a),required:g(r),name:h.name,autocomplete:h.autocomplete,disabled:g(i),value:g(c)},{default:q(()=>[g(pt)(g(c))?(R(),ce("option",{key:0,value:h.nullableValue},null,8,ai)):ke("v-if",!0),(R(!0),ce(_t,null,un(Array.from(x.value),w=>(R(),ce("option",Q({key:w.value??""},{ref_for:!0},w),null,16))),128))]),_:1},8,["multiple","required","name","autocomplete","disabled","value"])):ke("v-if",!0)]),_:3}))}}),li=si,ui=I({__name:"BubbleSelect",props:{autocomplete:{type:String,required:!1},autofocus:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},form:{type:String,required:!1},multiple:{type:Boolean,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1},size:{type:Number,required:!1},value:{type:null,required:!1}},setup(e){const t=e,n=A(),o=he();H(()=>t.value,(i,a)=>{const s=window.HTMLSelectElement.prototype,f=Object.getOwnPropertyDescriptor(s,"value").set;if(i!==a&&f&&n.value){const p=new Event("change",{bubbles:!0});f.call(n.value,i),n.value.dispatchEvent(p)}});function r(i){o.onValueChange(i.target.value)}return(i,a)=>(R(),B(g(Uo),{"as-child":""},{default:q(()=>[Qn("select",Q({ref_key:"selectElement",ref:n},t,{onInput:r}),[k(i.$slots,"default")],16)]),_:3}))}}),ci=ui,di=I({__name:"SelectPopperPosition",props:{memoDependencies:{type:Array,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1,default:"start"},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1,default:G},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const n=At(e);return(o,r)=>(R(),B(g(ti),Q(g(n),{style:{boxSizing:"border-box","--reka-select-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-select-content-available-width":"var(--reka-popper-available-width)","--reka-select-content-available-height":"var(--reka-popper-available-height)","--reka-select-trigger-width":"var(--reka-popper-anchor-width)","--reka-select-trigger-height":"var(--reka-popper-anchor-height)"}}),{default:q(()=>[k(o.$slots,"default")]),_:3},16))}}),fi=di;const pi={onViewportChange:()=>{},itemTextRefCallback:()=>{},itemRefCallback:()=>{}},[tt,qn]=qe("SelectContent");var mi=I({__name:"SelectContentImpl",props:{position:{type:String,required:!1,default:"item-aligned"},bodyLock:{type:Boolean,required:!1,default:!0},memoDependencies:{type:Array,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1,default:"start"},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1,default:!0}},emits:["closeAutoFocus","escapeKeyDown","pointerDownOutside"],setup(e,{emit:t}){const n=e,o=t,r=he();vo(),fo(n.bodyLock);const{CollectionSlot:i,getItems:a}=Me(),s=A();So(s);const{search:c,handleTypeaheadSearch:f}=vn(),p=A(),l=A(),d=A(),u=A(!1),m=A(!1),y=A(!1);function x(){l.value&&s.value&&Ht([l.value,s.value])}H(u,()=>{x()});const{onOpenChange:v,triggerPointerDownPosRef:b}=r;de(w=>{if(!s.value)return;let S={x:0,y:0};const E=T=>{var L,K;S={x:Math.abs(Math.round(T.pageX)-(((L=b.value)==null?void 0:L.x)??0)),y:Math.abs(Math.round(T.pageY)-(((K=b.value)==null?void 0:K.y)??0))}},P=T=>{var L;T.pointerType!=="touch"&&(S.x<=10&&S.y<=10?T.preventDefault():(L=s.value)!=null&&L.contains(T.target)||v(!1),document.removeEventListener("pointermove",E),b.value=null)};b.value!==null&&(document.addEventListener("pointermove",E),document.addEventListener("pointerup",P,{capture:!0,once:!0})),w(()=>{document.removeEventListener("pointermove",E),document.removeEventListener("pointerup",P,{capture:!0})})});function C(w){const S=w.ctrlKey||w.altKey||w.metaKey;if(w.key==="Tab"&&w.preventDefault(),!S&&w.key.length===1&&f(w.key,a()),["ArrowUp","ArrowDown","Home","End"].includes(w.key)){let P=[...a().map(T=>T.ref)];if(["ArrowUp","End"].includes(w.key)&&(P=P.slice().reverse()),["ArrowUp","ArrowDown"].includes(w.key)){const T=w.target,L=P.indexOf(T);P=P.slice(L+1)}setTimeout(()=>Ht(P)),w.preventDefault()}}const h=O(()=>n.position==="popper"?n:{}),_=At(h.value);return qn({content:s,viewport:p,onViewportChange:w=>{p.value=w},itemRefCallback:(w,S,E)=>{const P=!m.value&&!E,T=Le(r.modelValue.value,S,r.by);if(r.multiple.value){if(y.value)return;(T||P)&&(l.value=w,T&&(y.value=!0))}else(T||P)&&(l.value=w);P&&(m.value=!0)},selectedItem:l,selectedItemText:d,onItemLeave:()=>{var w;(w=s.value)==null||w.focus()},itemTextRefCallback:(w,S,E)=>{const P=!m.value&&!E;(Le(r.modelValue.value,S,r.by)||P)&&(d.value=w)},focusSelectedItem:x,position:n.position,isPositioned:u,searchRef:c}),(w,S)=>(R(),B(g(i),null,{default:q(()=>[M(g(Wo),{"as-child":"",onMountAutoFocus:S[6]||(S[6]=Be(()=>{},["prevent"])),onUnmountAutoFocus:S[7]||(S[7]=E=>{var P;o("closeAutoFocus",E),!E.defaultPrevented&&((P=g(r).triggerElement.value)==null||P.focus({preventScroll:!0}),E.preventDefault())})},{default:q(()=>[M(g(ko),{"as-child":"","disable-outside-pointer-events":w.disableOutsidePointerEvents,onFocusOutside:S[2]||(S[2]=Be(()=>{},["prevent"])),onDismiss:S[3]||(S[3]=E=>g(r).onOpenChange(!1)),onEscapeKeyDown:S[4]||(S[4]=E=>o("escapeKeyDown",E)),onPointerDownOutside:S[5]||(S[5]=E=>o("pointerDownOutside",E))},{default:q(()=>[(R(),B(eo(w.position==="popper"?fi:wi),Q({...w.$attrs,...g(_)},{id:g(r).contentId,ref:E=>{if(!E)return;const P=g(Fe)(E);P!=null&&P.hasAttribute("data-reka-popper-content-wrapper")?s.value=P.firstElementChild:s.value=P},role:"listbox","data-state":g(r).open.value?"open":"closed",dir:g(r).dir.value,style:{display:"flex",flexDirection:"column",outline:"none"},onContextmenu:S[0]||(S[0]=Be(()=>{},["prevent"])),onPlaced:S[1]||(S[1]=E=>u.value=!0),onKeydown:C}),{default:q(()=>[k(w.$slots,"default")]),_:3},16,["id","data-state","dir","onKeydown"]))]),_:3},8,["disable-outside-pointer-events"])]),_:3})]),_:3}))}}),vi=mi;const[hi,yi]=qe("SelectItemAlignedPosition");var gi=I({inheritAttrs:!1,__name:"SelectItemAlignedPosition",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["placed"],setup(e,{emit:t}){const n=e,o=t,{getItems:r}=Me(),i=he(),a=tt(),s=A(!1),c=A(!0),f=A(),{forwardRef:p,currentElement:l}=ne(),{viewport:d,selectedItem:u,selectedItemText:m,focusSelectedItem:y}=a;function x(){if(i.triggerElement.value&&i.valueElement.value&&f.value&&l.value&&(d!=null&&d.value)&&(u!=null&&u.value)&&(m!=null&&m.value)){const C=i.triggerElement.value.getBoundingClientRect(),h=l.value.getBoundingClientRect(),_=i.valueElement.value.getBoundingClientRect(),w=m.value.getBoundingClientRect();if(i.dir.value!=="rtl"){const oe=w.left-h.left,le=_.left-oe,ye=C.left-le,ge=C.width+ye,ot=Math.max(ge,h.width),rt=window.innerWidth-G,it=Ft(le,G,Math.max(G,rt-ot));f.value.style.minWidth=`${ge}px`,f.value.style.left=`${it}px`}else{const oe=h.right-w.right,le=window.innerWidth-_.right-oe,ye=window.innerWidth-C.right-le,ge=C.width+ye,ot=Math.max(ge,h.width),rt=window.innerWidth-G,it=Ft(le,G,Math.max(G,rt-ot));f.value.style.minWidth=`${ge}px`,f.value.style.right=`${it}px`}const S=r().map(oe=>oe.ref),E=window.innerHeight-G*2,P=d.value.scrollHeight,T=window.getComputedStyle(l.value),L=Number.parseInt(T.borderTopWidth,10),K=Number.parseInt(T.paddingTop,10),D=Number.parseInt(T.borderBottomWidth,10),$=Number.parseInt(T.paddingBottom,10),N=L+K+P+$+D,F=Math.min(u.value.offsetHeight*5,N),V=window.getComputedStyle(d.value),W=Number.parseInt(V.paddingTop,10),z=Number.parseInt(V.paddingBottom,10),Ce=C.top+C.height/2-G,Rn=E-Ce,nt=u.value.offsetHeight/2,Bn=u.value.offsetTop+nt,Ve=L+K+Bn,kn=N-Ve;if(Ve<=Ce){const oe=u.value===S.at(-1);f.value.style.bottom="0px";const le=l.value.clientHeight-d.value.offsetTop-d.value.offsetHeight,ye=Math.max(Rn,nt+(oe?z:0)+le+D),ge=Ve+ye;f.value.style.height=`${ge}px`}else{const oe=u.value===S[0];f.value.style.top="0px";const ye=Math.max(Ce,L+d.value.offsetTop+(oe?W:0)+nt)+kn;f.value.style.height=`${ye}px`,d.value.scrollTop=Ve-Ce+d.value.offsetTop}f.value.style.margin=`${G}px 0`,f.value.style.minHeight=`${F}px`,f.value.style.maxHeight=`${E}px`,o("placed"),requestAnimationFrame(()=>s.value=!0)}}const v=A("");me(async()=>{await X(),x(),l.value&&(v.value=window.getComputedStyle(l.value).zIndex)});function b(C){C&&c.value===!0&&(x(),y==null||y(),c.value=!1)}return to(i.triggerElement,()=>{x()}),yi({contentWrapper:f,shouldExpandOnScrollRef:s,onScrollButtonChange:b}),(C,h)=>(R(),ce("div",{ref_key:"contentWrapperElement",ref:f,style:St({display:"flex",flexDirection:"column",position:"fixed",zIndex:v.value})},[M(g(U),Q({ref:g(p),style:{boxSizing:"border-box",maxHeight:"100%"}},{...C.$attrs,...n}),{default:q(()=>[k(C.$slots,"default")]),_:3},16)],4))}}),wi=gi,bi=I({inheritAttrs:!1,__name:"SelectProvider",props:{context:{type:Object,required:!0}},setup(e){return Tn(e.context),qn(pi),(n,o)=>k(n.$slots,"default")}}),xi=bi;const Si={key:1};var _i=I({inheritAttrs:!1,__name:"SelectContent",props:{forceMount:{type:Boolean,required:!1},position:{type:String,required:!1},bodyLock:{type:Boolean,required:!1},memoDependencies:{type:Array,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["closeAutoFocus","escapeKeyDown","pointerDownOutside"],setup(e,{emit:t}){const n=e,r=yo(n,t),i=he(),a=A();me(()=>{a.value=new DocumentFragment});const s=A(),c=O(()=>n.forceMount||i.open.value),f=A(c.value);let p;function l(){p&&(clearTimeout(p),p=void 0)}return H(c,(d,u,m)=>{l(),p=setTimeout(()=>{f.value=c.value,p=void 0}),m(l)}),Ne(l),(d,u)=>{var m;return c.value||f.value||(m=s.value)!=null&&m.present?(R(),B(g(Po),{key:0,ref_key:"presenceRef",ref:s,present:c.value},{default:q(()=>[M(vi,cn(dn({...g(r),...d.$attrs})),{default:q(()=>[k(d.$slots,"default")]),_:3},16)]),_:3},8,["present"])):a.value?(R(),ce("div",Si,[(R(),B(sn,{to:a.value},[M(xi,{context:g(i)},{default:q(()=>[k(d.$slots,"default")]),_:3},8,["context"])],8,["to"]))])):ke("v-if",!0)}}}),Ci=_i;const[Dn,Ei]=qe("SelectItem");var Ai=I({__name:"SelectItem",props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select"],setup(e,{emit:t}){const n=e,o=t,{disabled:r}=Xe(n),i=he(),a=tt(),{forwardRef:s,currentElement:c}=ne(),{CollectionItem:f}=Me(),p=O(()=>{var h;return Le((h=i.modelValue)==null?void 0:h.value,n.value,i.by)}),l=A(!1),d=A(n.textValue??""),u=nn(void 0,"reka-select-item-text"),m="select.select";async function y(h){if(h.defaultPrevented)return;const _={originalEvent:h,value:n.value};Et(m,x,_)}async function x(h){await X(),o("select",h),!h.defaultPrevented&&(r.value||(i.onValueChange(n.value),i.multiple.value||i.onOpenChange(!1)))}async function v(h){var _,w;await X(),!h.defaultPrevented&&(r.value?(_=a.onItemLeave)==null||_.call(a):(w=h.currentTarget)==null||w.focus({preventScroll:!0}))}async function b(h){var _;await X(),!h.defaultPrevented&&h.currentTarget===J()&&((_=a.onItemLeave)==null||_.call(a))}async function C(h){var w;await X(),!(h.defaultPrevented||((w=a.searchRef)==null?void 0:w.value)!==""&&h.key===" ")&&(ri.includes(h.key)&&y(h),h.key===" "&&h.preventDefault())}if(n.value==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return me(()=>{c.value&&a.itemRefCallback(c.value,n.value,n.disabled)}),Ei({value:n.value,disabled:r,textId:u,isSelected:p,onItemTextChange:h=>{d.value=((d.value||(h==null?void 0:h.textContent))??"").trim()}}),(h,_)=>(R(),B(g(f),{value:{textValue:d.value}},{default:q(()=>[M(g(U),{ref:g(s),role:"option","aria-labelledby":g(u),"data-highlighted":l.value?"":void 0,"aria-selected":p.value,"data-state":p.value?"checked":"unchecked","aria-disabled":g(r)||void 0,"data-disabled":g(r)?"":void 0,tabindex:g(r)?void 0:-1,as:h.as,"as-child":h.asChild,onFocus:_[0]||(_[0]=w=>l.value=!0),onBlur:_[1]||(_[1]=w=>l.value=!1),onPointerup:y,onPointerdown:_[2]||(_[2]=w=>{w.currentTarget.focus({preventScroll:!0})}),onTouchend:_[3]||(_[3]=Be(()=>{},["prevent","stop"])),onPointermove:v,onPointerleave:b,onKeydown:C},{default:q(()=>[k(h.$slots,"default")]),_:3},8,["aria-labelledby","data-highlighted","aria-selected","data-state","aria-disabled","data-disabled","tabindex","as","as-child"])]),_:3},8,["value"]))}}),Oi=Ai,Pi=I({__name:"SelectItemIndicator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){const t=e,n=Dn();return(o,r)=>g(n).isSelected.value?(R(),B(g(U),Q({key:0,"aria-hidden":"true"},t),{default:q(()=>[k(o.$slots,"default")]),_:3},16)):ke("v-if",!0)}}),Ti=Pi,qi=I({inheritAttrs:!1,__name:"SelectItemText",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){const t=e,n=he(),o=tt(),r=Dn(),{forwardRef:i,currentElement:a}=ne(),s=O(()=>{var c,f;return{value:r.value,disabled:r.disabled.value,textContent:((c=a.value)==null?void 0:c.textContent)??((f=r.value)==null?void 0:f.toString())??""}});return me(()=>{a.value&&(r.onItemTextChange(a.value),o.itemTextRefCallback(a.value,r.value,r.disabled.value),n.onOptionAdd(s.value))}),Ne(()=>{n.onOptionRemove(s.value)}),(c,f)=>(R(),B(g(U),Q({id:g(r).textId,ref:g(i)},{...t,...c.$attrs}),{default:q(()=>[k(c.$slots,"default")]),_:3},16,["id"]))}}),Di=qi,Ri=I({__name:"SelectPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=e;return(n,o)=>(R(),B(g(Ho),cn(dn(t)),{default:q(()=>[k(n.$slots,"default")]),_:3},16))}}),Bi=Ri,ki=I({__name:"SelectTrigger",props:{disabled:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const t=e,n=he(),{forwardRef:o,currentElement:r}=ne(),i=O(()=>{var v;return((v=n.disabled)==null?void 0:v.value)||t.disabled});n.contentId||(n.contentId=nn(void 0,"reka-select-content")),me(()=>{n.onTriggerChange(r.value)});const{getItems:a}=Me(),{search:s,handleTypeaheadSearch:c,resetTypeahead:f}=vn();function p(){i.value||(n.onOpenChange(!0),f())}function l(v){p(),n.triggerPointerDownPosRef.value={x:Math.round(v.pageX),y:Math.round(v.pageY)}}function d(v){return v.button===0&&v.ctrlKey===!1}let u=!1;function m(v){if(v.pointerType==="touch")return v.preventDefault();const b=v.target;b.hasPointerCapture(v.pointerId)&&b.releasePointerCapture(v.pointerId),d(v)&&(l(v),u=!0)}function y(v){d(v)&&v.preventDefault()}function x(v){var b;u||(b=v.currentTarget)==null||b.focus(),u=!1}return(v,b)=>(R(),B(g(Jo),{"as-child":"",reference:v.reference},{default:q(()=>{var C,h,_,w;return[M(g(U),{ref:g(o),role:"combobox",type:v.as==="button"?"button":void 0,"aria-controls":g(n).contentId,"aria-expanded":g(n).open.value||!1,"aria-required":(C=g(n).required)==null?void 0:C.value,"aria-autocomplete":"none",disabled:i.value,dir:(h=g(n))==null?void 0:h.dir.value,"data-state":(_=g(n))!=null&&_.open.value?"open":"closed","data-disabled":i.value?"":void 0,"data-placeholder":g(ii)((w=g(n).modelValue)==null?void 0:w.value)?"":void 0,"as-child":v.asChild,as:v.as,onClick:x,onPointerdown:m,onMousedown:y,onPointerup:b[0]||(b[0]=Be(S=>{S.pointerType==="touch"&&l(S)},["prevent"])),onKeydown:b[1]||(b[1]=S=>{const E=g(s)!=="";!(S.ctrlKey||S.altKey||S.metaKey)&&S.key.length===1&&E&&S.key===" "||(g(c)(S.key,g(a)()),g(oi).includes(S.key)&&(p(),S.preventDefault()))})},{default:q(()=>[k(v.$slots,"default")]),_:3},8,["type","aria-controls","aria-expanded","aria-required","disabled","dir","data-state","data-disabled","data-placeholder","as-child","as"])]}),_:3},8,["reference"]))}}),Ii=ki,$i=I({__name:"SelectValue",props:{placeholder:{type:String,required:!1,default:""},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){const t=e,{forwardRef:n,currentElement:o}=ne(),r=he();me(()=>{r.valueElement=o});const i=O(()=>{var p;let s=[];const c=Array.from(r.optionsSet.value),f=l=>c.find(d=>Le(l,d.value,r.by));return Array.isArray(r.modelValue.value)?s=r.modelValue.value.map(l=>{var d;return((d=f(l))==null?void 0:d.textContent)??""}):s=[((p=f(r.modelValue.value))==null?void 0:p.textContent)??""],s.filter(Boolean)}),a=O(()=>i.value.length?i.value.join(", "):t.placeholder);return(s,c)=>(R(),B(g(U),{ref:g(n),as:s.as,"as-child":s.asChild,style:{pointerEvents:"none"},"data-placeholder":i.value.length?void 0:t.placeholder},{default:q(()=>[k(s.$slots,"default",{selectedLabel:i.value,modelValue:g(r).modelValue.value},()=>[Ct(fn(a.value),1)])]),_:3},8,["as","as-child","data-placeholder"]))}}),Li=$i,Mi=I({__name:"SelectViewport",props:{nonce:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,{nonce:n}=Xe(t),o=ni(n),r=tt(),i=r.position==="item-aligned"?hi():void 0,{forwardRef:a,currentElement:s}=ne();me(()=>{r==null||r.onViewportChange(s.value)});const c=A(0);function f(p){const l=p.currentTarget,{shouldExpandOnScrollRef:d,contentWrapper:u}=i??{};if(d!=null&&d.value&&(u!=null&&u.value)){const m=Math.abs(c.value-l.scrollTop);if(m>0){const y=window.innerHeight-G*2,x=Number.parseFloat(u.value.style.minHeight),v=Number.parseFloat(u.value.style.height),b=Math.max(x,v);if(b0?_:0,u.value.style.justifyContent="flex-end")}}}c.value=l.scrollTop}return(p,l)=>(R(),ce(_t,null,[M(g(U),Q({ref:g(a),"data-reka-select-viewport":"",role:"presentation"},{...p.$attrs,...t},{style:{position:"relative",flex:1,overflow:"hidden auto"},onScroll:f}),{default:q(()=>[k(p.$slots,"default")]),_:3},16),M(g(U),{as:"style",nonce:g(o)},{default:q(()=>l[0]||(l[0]=[Ct(" /* Hide scrollbars cross-browser and enable momentum scroll for touch devices */ [data-reka-select-viewport] { scrollbar-width:none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } [data-reka-select-viewport]::-webkit-scrollbar { display: none; } ")])),_:1,__:[0]},8,["nonce"])],64))}}),Fi=Mi;const Ui=I({__name:"Select",props:{modelValue:{},options:{},placeholder:{},ariaLabel:{},class:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,o=t;return(r,i)=>(R(),B(g(li),{"model-value":n.modelValue,"onUpdate:modelValue":i[0]||(i[0]=a=>o("update:modelValue",String(a)))},{default:q(()=>[M(g(Ii),{"aria-label":n.ariaLabel,class:no(g(oo)("border-input bg-background flex h-9 w-full items-center justify-between gap-2 rounded-md border px-3 py-1 text-sm shadow-xs transition-[color,box-shadow] outline-none","focus-visible:border-ring focus-visible:ring-ring/40 focus-visible:ring-[3px]","data-[placeholder]:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",n.class))},{default:q(()=>[M(g(Li),{placeholder:n.placeholder??"",class:"truncate"},null,8,["placeholder"]),M(g(io),{class:"size-4 shrink-0 opacity-50"})]),_:1},8,["aria-label","class"]),M(g(Bi),null,{default:q(()=>[M(g(Ci),{position:"popper","side-offset":4,class:"bg-popover text-popover-foreground animate-fade-in relative z-50 max-h-72 min-w-[var(--reka-select-trigger-width)] overflow-hidden rounded-md border shadow-md"},{default:q(()=>[M(g(Fi),{class:"p-1"},{default:q(()=>[(R(!0),ce(_t,null,un(n.options,a=>(R(),B(g(Oi),{key:a.value,value:a.value,class:"focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50"},{default:q(()=>[M(g(Di),null,{default:q(()=>[Ct(fn(a.label),1)]),_:2},1024),M(g(Ti),{class:"absolute right-2 flex items-center"},{default:q(()=>[M(g(ro),{class:"size-4"})]),_:1})]),_:2},1032,["value"]))),128))]),_:1})]),_:1})]),_:1})]),_:1},8,["model-value"]))}});export{ro as C,ko as D,Wo as F,Xo as P,Ho as T,Uo as V,Ui as _,ho as a,Jo as b,fo as c,vo as d,So as e,At as f,ti as g,Et as h,so as i,yo as j,Po as k,ni as l,Hi as m,mo as n,vn as u}; diff --git a/web/dist/assets/SettingsView-CQy8Fv4M.js b/web/dist/assets/SettingsView-AGyc2AVS.js similarity index 79% rename from web/dist/assets/SettingsView-CQy8Fv4M.js rename to web/dist/assets/SettingsView-AGyc2AVS.js index 91333bb..fec1ddb 100644 --- a/web/dist/assets/SettingsView-CQy8Fv4M.js +++ b/web/dist/assets/SettingsView-AGyc2AVS.js @@ -1,4 +1,4 @@ -import{c as y,d as M,o as u,a as r,e as L,u as t,f as T,K as F,M as z,p as a,l as e,w as n,_ as f,m as R,k as c,t as o,b as i,F as _,r as p,h as D,i as N,s as $,a1 as E,a2 as q,g as v,a3 as H,v as K,a4 as U,a5 as A}from"./index-D3ZCYstt.js";import{_ as G}from"./PageHeader.vue_vue_type_script_setup_true_lang-CDyKzgiP.js";import{_ as x,a as h,c as b,b as J}from"./CardTitle.vue_vue_type_script_setup_true_lang-BcE23HB-.js";import{_ as P}from"./Select.vue_vue_type_script_setup_true_lang-C15l-n0X.js";import"./Collection-D-pf6tmY.js";/** +import{c as y,d as M,o as u,a as r,e as L,u as t,f as T,O as F,$ as z,p as a,l as e,w as n,_ as f,m as R,k as c,t as o,b as i,F as _,r as p,h as D,i as N,s as $,a9 as E,a0 as q,g as v,aa as H,v as U,ab as A,ac as G}from"./index-BKPz7Obh.js";import{_ as J}from"./PageHeader.vue_vue_type_script_setup_true_lang-CPDhGTO6.js";import{_ as x,a as h,c as b,b as K}from"./CardTitle.vue_vue_type_script_setup_true_lang-BHtPbA-o.js";import{_ as P}from"./Select.vue_vue_type_script_setup_true_lang-CONzBLld.js";import"./Collection-BaXBMWO5.js";/** * @license lucide-vue-next v0.469.0 - ISC * * This source code is licensed under the ISC license. @@ -13,4 +13,4 @@ import{c as y,d as M,o as u,a as r,e as L,u as t,f as T,K as F,M as z,p as a,l a * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Y=y("MonitorIcon",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]),Z=M({__name:"Separator",props:{class:{},orientation:{default:"horizontal"}},setup(k){const g=k;return(w,S)=>(u(),r("div",{role:"separator",class:L(t(T)("bg-border shrink-0",g.orientation==="vertical"?"h-full w-px":"h-px w-full",g.class))},null,2))}}),ee={class:"max-w-3xl"},te={class:"flex flex-col gap-2"},se={class:"text-sm font-medium"},ae={class:"bg-muted grid grid-cols-3 gap-1 rounded-lg p-1"},le=["onClick"],ne={class:"flex items-center justify-between gap-4"},oe={class:"text-sm font-medium"},ie={class:"flex flex-col"},ue={class:"text-muted-foreground shrink-0"},re={class:"truncate font-mono text-xs sm:text-[13px]"},ce={class:"flex flex-col"},de={class:"text-muted-foreground shrink-0"},ge={class:"truncate font-mono text-xs sm:text-[13px]"},he=M({__name:"SettingsView",setup(k){const g=K(),{theme:w,setTheme:S}=E(),{lang:V,setLang:C}=q(),m=R(null);F(async()=>{try{m.value=await z.info()}catch{}});const B=v(()=>[{value:"light",label:e("settings.themeLight"),icon:U},{value:"dark",label:e("settings.themeDark"),icon:A},{value:"system",label:e("settings.themeSystem"),icon:Y}]),Q=[{value:"en",label:"English"},{value:"zh",label:"中文"}],j=v(()=>{const s=m.value;return s?[{label:e("settings.version"),value:s.commit?`${s.version} (${s.commit})`:s.version},{label:e("settings.platform"),value:s.platform},{label:e("settings.goVersion"),value:s.goVersion},{label:e("settings.hostname"),value:s.hostname},{label:e("settings.ruleFile"),value:s.ruleFile}]:[]}),I=v(()=>{var l;const s=(l=m.value)==null?void 0:l.config;if(!s)return[];const d=[{label:e("settings.workers"),value:s.workers>0?String(s.workers):e("settings.auto")},{label:e("settings.workerQueueSize"),value:s.workerQueueSize>0?String(s.workerQueueSize):e("settings.auto")},{label:e("settings.ioQueueSize"),value:s.ioQueueSize>0?String(s.ioQueueSize):e("settings.auto")},{label:e("settings.ioLocal"),value:s.ioLocal?e("common.enabled"):e("common.disabled")},{label:e("settings.ioRST"),value:s.ioRST?e("common.enabled"):e("common.disabled")},{label:e("settings.udpMaxStreams"),value:s.udpMaxStreams>0?String(s.udpMaxStreams):e("settings.auto")}];return s.geoip&&d.push({label:e("settings.geoip"),value:s.geoip}),s.geosite&&d.push({label:e("settings.geosite"),value:s.geosite}),d});async function O(){H(),await z.logout(),await g.replace({name:"login"})}return(s,d)=>(u(),r("div",ee,[a(G,{title:t(e)("settings.title"),description:t(e)("settings.subtitle")},null,8,["title","description"]),a(t(f),null,{default:n(()=>[a(t(x),null,{default:n(()=>[a(t(h),null,{default:n(()=>[c(o(t(e)("settings.appearance")),1)]),_:1})]),_:1}),a(t(b),{class:"flex flex-col gap-4"},{default:n(()=>[i("div",te,[i("span",se,o(t(e)("settings.theme")),1),i("div",ae,[(u(!0),r(_,null,p(B.value,l=>(u(),r("button",{key:l.value,type:"button",class:L(["flex items-center justify-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium transition-colors sm:text-sm",t(w)===l.value?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"]),onClick:me=>t(S)(l.value)},[(u(),D(N(l.icon),{class:"size-3.5"})),c(" "+o(l.label),1)],10,le))),128))])]),i("div",ne,[i("span",oe,o(t(e)("settings.language")),1),a(t(P),{"model-value":t(V),options:Q,class:"w-36","aria-label":t(e)("settings.language"),"onUpdate:modelValue":d[0]||(d[0]=l=>t(C)(l))},null,8,["model-value","aria-label"])])]),_:1})]),_:1}),a(t(f),{class:"mt-3"},{default:n(()=>[a(t(x),null,{default:n(()=>[a(t(h),null,{default:n(()=>[c(o(t(e)("settings.instance")),1)]),_:1}),a(t(J),null,{default:n(()=>[c(o(t(e)("settings.engineConfig")),1)]),_:1})]),_:1}),a(t(b),null,{default:n(()=>[i("dl",ie,[(u(!0),r(_,null,p(j.value,l=>(u(),r("div",{key:l.label,class:"flex items-start justify-between gap-4 py-1.5 text-sm"},[i("dt",ue,o(l.label),1),i("dd",re,o(l.value),1)]))),128))]),a(t(Z),{class:"my-3"}),i("dl",ce,[(u(!0),r(_,null,p(I.value,l=>(u(),r("div",{key:l.label,class:"flex items-start justify-between gap-4 py-1.5 text-sm"},[i("dt",de,o(l.label),1),i("dd",ge,o(l.value),1)]))),128))])]),_:1})]),_:1}),a(t(f),{class:"mt-3"},{default:n(()=>[a(t(x),null,{default:n(()=>[a(t(h),null,{default:n(()=>[c(o(t(e)("settings.session")),1)]),_:1})]),_:1}),a(t(b),{class:"flex flex-wrap gap-2"},{default:n(()=>[a(t($),{variant:"destructive",onClick:O},{default:n(()=>[a(t(X),{class:"size-4"}),c(" "+o(t(e)("settings.logout")),1)]),_:1}),a(t($),{variant:"outline",as:"a",href:"https://gfw.dev/",target:"_blank",rel:"noreferrer"},{default:n(()=>[a(t(W),{class:"size-4"}),c(" "+o(t(e)("settings.docs")),1)]),_:1})]),_:1})]),_:1})]))}});export{he as default}; + */const Y=y("MonitorIcon",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]),Z=M({__name:"Separator",props:{class:{},orientation:{default:"horizontal"}},setup(k){const g=k;return(w,S)=>(u(),r("div",{role:"separator",class:L(t(T)("bg-border shrink-0",g.orientation==="vertical"?"h-full w-px":"h-px w-full",g.class))},null,2))}}),ee={class:"max-w-3xl"},te={class:"flex flex-col gap-2"},se={class:"text-sm font-medium"},ae={class:"bg-muted grid grid-cols-3 gap-1 rounded-lg p-1"},le=["onClick"],ne={class:"flex items-center justify-between gap-4"},oe={class:"text-sm font-medium"},ie={class:"flex flex-col"},ue={class:"text-muted-foreground shrink-0"},re={class:"truncate font-mono text-xs sm:text-[13px]"},ce={class:"flex flex-col"},de={class:"text-muted-foreground shrink-0"},ge={class:"truncate font-mono text-xs sm:text-[13px]"},he=M({__name:"SettingsView",setup(k){const g=U(),{theme:w,setTheme:S}=E(),{lang:V,setLang:C}=q(),m=R(null);F(async()=>{try{m.value=await z.info()}catch{}});const B=v(()=>[{value:"light",label:e("settings.themeLight"),icon:A},{value:"dark",label:e("settings.themeDark"),icon:G},{value:"system",label:e("settings.themeSystem"),icon:Y}]),O=[{value:"en",label:"English"},{value:"zh",label:"中文"}],Q=v(()=>{const s=m.value;return s?[{label:e("settings.version"),value:s.commit?`${s.version} (${s.commit})`:s.version},{label:e("settings.platform"),value:s.platform},{label:e("settings.goVersion"),value:s.goVersion},{label:e("settings.hostname"),value:s.hostname},{label:e("settings.ruleFile"),value:s.ruleFile}]:[]}),j=v(()=>{var l;const s=(l=m.value)==null?void 0:l.config;if(!s)return[];const d=[{label:e("settings.workers"),value:s.workers>0?String(s.workers):e("settings.auto")},{label:e("settings.workerQueueSize"),value:s.workerQueueSize>0?String(s.workerQueueSize):e("settings.auto")},{label:e("settings.ioQueueSize"),value:s.ioQueueSize>0?String(s.ioQueueSize):e("settings.auto")},{label:e("settings.ioLocal"),value:s.ioLocal?e("common.enabled"):e("common.disabled")},{label:e("settings.ioRST"),value:s.ioRST?e("common.enabled"):e("common.disabled")},{label:e("settings.udpMaxStreams"),value:s.udpMaxStreams>0?String(s.udpMaxStreams):e("settings.auto")}];return s.geoip&&d.push({label:e("settings.geoip"),value:s.geoip}),s.geosite&&d.push({label:e("settings.geosite"),value:s.geosite}),d});async function I(){H(),await z.logout(),await g.replace({name:"login"})}return(s,d)=>(u(),r("div",ee,[a(J,{title:t(e)("settings.title"),description:t(e)("settings.subtitle")},null,8,["title","description"]),a(t(f),null,{default:n(()=>[a(t(x),null,{default:n(()=>[a(t(h),null,{default:n(()=>[c(o(t(e)("settings.appearance")),1)]),_:1})]),_:1}),a(t(b),{class:"flex flex-col gap-4"},{default:n(()=>[i("div",te,[i("span",se,o(t(e)("settings.theme")),1),i("div",ae,[(u(!0),r(_,null,p(B.value,l=>(u(),r("button",{key:l.value,type:"button",class:L(["flex items-center justify-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium transition-colors sm:text-sm",t(w)===l.value?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"]),onClick:me=>t(S)(l.value)},[(u(),D(N(l.icon),{class:"size-3.5"})),c(" "+o(l.label),1)],10,le))),128))])]),i("div",ne,[i("span",oe,o(t(e)("settings.language")),1),a(t(P),{"model-value":t(V),options:O,class:"w-36","aria-label":t(e)("settings.language"),"onUpdate:modelValue":d[0]||(d[0]=l=>t(C)(l))},null,8,["model-value","aria-label"])])]),_:1})]),_:1}),a(t(f),{class:"mt-3"},{default:n(()=>[a(t(x),null,{default:n(()=>[a(t(h),null,{default:n(()=>[c(o(t(e)("settings.instance")),1)]),_:1}),a(t(K),null,{default:n(()=>[c(o(t(e)("settings.engineConfig")),1)]),_:1})]),_:1}),a(t(b),null,{default:n(()=>[i("dl",ie,[(u(!0),r(_,null,p(Q.value,l=>(u(),r("div",{key:l.label,class:"flex items-start justify-between gap-4 py-1.5 text-sm"},[i("dt",ue,o(l.label),1),i("dd",re,o(l.value),1)]))),128))]),a(t(Z),{class:"my-3"}),i("dl",ce,[(u(!0),r(_,null,p(j.value,l=>(u(),r("div",{key:l.label,class:"flex items-start justify-between gap-4 py-1.5 text-sm"},[i("dt",de,o(l.label),1),i("dd",ge,o(l.value),1)]))),128))])]),_:1})]),_:1}),a(t(f),{class:"mt-3"},{default:n(()=>[a(t(x),null,{default:n(()=>[a(t(h),null,{default:n(()=>[c(o(t(e)("settings.session")),1)]),_:1})]),_:1}),a(t(b),{class:"flex flex-wrap gap-2"},{default:n(()=>[a(t($),{variant:"destructive",onClick:I},{default:n(()=>[a(t(X),{class:"size-4"}),c(" "+o(t(e)("settings.logout")),1)]),_:1}),a(t($),{variant:"outline",as:"a",href:"https://gfw.dev/",target:"_blank",rel:"noreferrer"},{default:n(()=>[a(t(W),{class:"size-4"}),c(" "+o(t(e)("settings.docs")),1)]),_:1})]),_:1})]),_:1})]))}});export{he as default}; diff --git a/web/dist/assets/Skeleton.vue_vue_type_script_setup_true_lang-C9uTg8Ty.js b/web/dist/assets/Skeleton.vue_vue_type_script_setup_true_lang-C9uTg8Ty.js deleted file mode 100644 index dddd413..0000000 --- a/web/dist/assets/Skeleton.vue_vue_type_script_setup_true_lang-C9uTg8Ty.js +++ /dev/null @@ -1 +0,0 @@ -import{d as a,o as n,a as o,e as t,u as c,f as r}from"./index-D3ZCYstt.js";const u=a({__name:"Skeleton",props:{class:{}},setup(e){const s=e;return(l,m)=>(n(),o("div",{class:t(c(r)("bg-muted animate-pulse rounded-md",s.class))},null,2))}});export{u as _}; diff --git a/web/dist/assets/Skeleton.vue_vue_type_script_setup_true_lang-DG3HTLWx.js b/web/dist/assets/Skeleton.vue_vue_type_script_setup_true_lang-DG3HTLWx.js new file mode 100644 index 0000000..d526dec --- /dev/null +++ b/web/dist/assets/Skeleton.vue_vue_type_script_setup_true_lang-DG3HTLWx.js @@ -0,0 +1 @@ +import{d as a,o as n,a as o,e as t,u as c,f as r}from"./index-BKPz7Obh.js";const u=a({__name:"Skeleton",props:{class:{}},setup(e){const s=e;return(l,m)=>(n(),o("div",{class:t(c(r)("bg-muted animate-pulse rounded-md",s.class))},null,2))}});export{u as _}; diff --git a/web/dist/assets/TabsTrigger.vue_vue_type_script_setup_true_lang-DTNukDpV.js b/web/dist/assets/TabsTrigger.vue_vue_type_script_setup_true_lang-DTNukDpV.js deleted file mode 100644 index c19c980..0000000 --- a/web/dist/assets/TabsTrigger.vue_vue_type_script_setup_true_lang-DTNukDpV.js +++ /dev/null @@ -1 +0,0 @@ -import{d as g,D as R,E as $,o as y,h as _,w as v,p as q,u as o,P as S,H as h,m as C,K as Y,S as J,x as Q,g as w,U as W,G as V,V as X,I as Z,J as ee,e as A,f as E}from"./index-D3ZCYstt.js";import{g as M,a as K,b as O,c as D,d as L}from"./Collection-D-pf6tmY.js";const te="rovingFocusGroup.onEntryFocus",ae={bubbles:!1,cancelable:!0},oe={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function se(r,t){return t!=="rtl"?r:r==="ArrowLeft"?"ArrowRight":r==="ArrowRight"?"ArrowLeft":r}function re(r,t,e){const a=se(r.key,e);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(a))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(a)))return oe[a]}function x(r,t=!1){const e=M();for(const a of r)if(a===e||(a.focus({preventScroll:t}),M()!==e))return}function ne(r,t){return r.map((e,a)=>r[(t+a)%r.length])}const[le,ue]=D("RovingFocusGroup");var ie=g({__name:"RovingFocusGroup",props:{orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!1},currentTabStopId:{type:[String,null],required:!1},defaultCurrentTabStopId:{type:String,required:!1},preventScrollOnEntryFocus:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["entryFocus","update:currentTabStopId"],setup(r,{expose:t,emit:e}){const a=r,d=e,{loop:c,orientation:i,dir:u}=R(a),f=K(u),s=$(a,"currentTabStopId",d,{defaultValue:a.defaultCurrentTabStopId,passive:a.currentTabStopId===void 0}),l=C(!1),n=C(!1),p=C(0),{getItems:B,CollectionSlot:k}=O({isProvider:!0});function N(m){const I=!n.value;if(m.currentTarget&&m.target===m.currentTarget&&I&&!l.value){const T=new CustomEvent(te,ae);if(m.currentTarget.dispatchEvent(T),d("entryFocus",T),!T.defaultPrevented){const F=B().map(b=>b.ref).filter(b=>b.dataset.disabled!==""),G=F.find(b=>b.getAttribute("data-active")===""),j=F.find(b=>b.getAttribute("data-highlighted")===""),z=F.find(b=>b.id===s.value),H=[G,j,z,...F].filter(Boolean);x(H,a.preventScrollOnEntryFocus)}}n.value=!1}function P(){setTimeout(()=>{n.value=!1},1)}return t({getItems:B}),ue({loop:c,dir:f,orientation:i,currentTabStopId:s,onItemFocus:m=>{s.value=m},onItemShiftTab:()=>{l.value=!0},onFocusableItemAdd:()=>{p.value++},onFocusableItemRemove:()=>{p.value--}}),(m,I)=>(y(),_(o(k),null,{default:v(()=>[q(o(S),{tabindex:l.value||p.value===0?-1:0,"data-orientation":o(i),as:m.as,"as-child":m.asChild,dir:o(f),style:{outline:"none"},onMousedown:I[0]||(I[0]=T=>n.value=!0),onMouseup:P,onFocus:N,onBlur:I[1]||(I[1]=T=>l.value=!1)},{default:v(()=>[h(m.$slots,"default")]),_:3},8,["tabindex","data-orientation","as","as-child","dir"])]),_:3}))}}),de=ie,ce=g({__name:"RovingFocusItem",props:{tabStopId:{type:String,required:!1},focusable:{type:Boolean,required:!1,default:!0},active:{type:Boolean,required:!1},allowShiftKey:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(r){const t=r,e=le(),a=L(),d=w(()=>t.tabStopId||a),c=w(()=>e.currentTabStopId.value===d.value),{getItems:i,CollectionItem:u}=O();Y(()=>{t.focusable&&e.onFocusableItemAdd()}),J(()=>{t.focusable&&e.onFocusableItemRemove()}),Q(()=>t.focusable,(s,l)=>{s!==l&&(s?e.onFocusableItemAdd():e.onFocusableItemRemove())});function f(s){if(s.key==="Tab"&&s.shiftKey){e.onItemShiftTab();return}if(s.target!==s.currentTarget)return;const l=re(s,e.orientation.value,e.dir.value);if(l!==void 0){if(s.metaKey||s.ctrlKey||s.altKey||!t.allowShiftKey&&s.shiftKey)return;s.preventDefault();let n=[...i().map(p=>p.ref).filter(p=>p.dataset.disabled!=="")];if(l==="last")n.reverse();else if(l==="prev"||l==="next"){l==="prev"&&n.reverse();const p=n.indexOf(s.currentTarget);n=e.loop.value?ne(n,p+1):n.slice(p+1)}W(()=>x(n))}}return(s,l)=>(y(),_(o(u),null,{default:v(()=>[q(o(S),{tabindex:c.value?0:-1,"data-orientation":o(e).orientation.value,"data-active":s.active?"":void 0,"data-disabled":s.focusable?void 0:"",as:s.as,"as-child":s.asChild,onMousedown:l[0]||(l[0]=n=>{s.focusable?o(e).onItemFocus(d.value):n.preventDefault()}),onFocus:l[1]||(l[1]=n=>o(e).onItemFocus(d.value)),onKeydown:f},{default:v(()=>[h(s.$slots,"default")]),_:3},8,["tabindex","data-orientation","data-active","data-disabled","as","as-child"])]),_:3}))}}),fe=ce;const[U,pe]=D("TabsRoot");var ve=g({__name:"TabsRoot",props:{defaultValue:{type:null,required:!1},orientation:{type:String,required:!1,default:"horizontal"},dir:{type:String,required:!1},activationMode:{type:String,required:!1,default:"automatic"},modelValue:{type:null,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:modelValue"],setup(r,{emit:t}){const e=r,a=t,{orientation:d,unmountOnHide:c,dir:i}=R(e),u=K(i);V();const f=$(e,"modelValue",a,{defaultValue:e.defaultValue,passive:e.modelValue===void 0}),s=C(),l=X(new Set);return pe({modelValue:f,changeModelValue:n=>{f.value=n},orientation:d,dir:u,unmountOnHide:c,activationMode:e.activationMode,baseId:L(void 0,"reka-tabs"),tabsList:s,contentIds:l,registerContent:n=>{l.value=new Set([...l.value,n])},unregisterContent:n=>{const p=new Set(l.value);p.delete(n),l.value=p}}),(n,p)=>(y(),_(o(S),{dir:o(u),"data-orientation":o(d),"as-child":n.asChild,as:n.as},{default:v(()=>[h(n.$slots,"default",{modelValue:o(f)})]),_:3},8,["dir","data-orientation","as-child","as"]))}}),me=ve;function be(r,t){return`${r}-trigger-${t}`}function ge(r,t){return`${r}-content-${t}`}var ye=g({__name:"TabsList",props:{loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const t=r,{loop:e}=R(t),{forwardRef:a,currentElement:d}=V(),c=U();return c.tabsList=d,(i,u)=>(y(),_(o(de),{"as-child":"",orientation:o(c).orientation.value,dir:o(c).dir.value,loop:o(e)},{default:v(()=>[q(o(S),{ref:o(a),role:"tablist","as-child":i.asChild,as:i.as,"aria-orientation":o(c).orientation.value},{default:v(()=>[h(i.$slots,"default")]),_:3},8,["as-child","as","aria-orientation"])]),_:3},8,["orientation","dir","loop"]))}}),_e=ye,he=g({__name:"TabsTrigger",props:{value:{type:[String,Number],required:!0},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const t=r,{forwardRef:e}=V(),a=U(),d=w(()=>be(a.baseId,t.value)),c=w(()=>a.contentIds.value.has(t.value)?ge(a.baseId,t.value):void 0),i=w(()=>t.value===a.modelValue.value);return(u,f)=>(y(),_(o(fe),{"as-child":"",focusable:!u.disabled,active:i.value},{default:v(()=>[q(o(S),{id:d.value,ref:o(e),role:"tab",type:u.as==="button"?"button":void 0,as:u.as,"as-child":u.asChild,"aria-selected":i.value?"true":"false","aria-controls":c.value,"data-state":i.value?"active":"inactive",disabled:u.disabled,"data-disabled":u.disabled?"":void 0,"data-orientation":o(a).orientation.value,onMousedown:f[0]||(f[0]=ee(s=>{!u.disabled&&s.ctrlKey===!1?o(a).changeModelValue(u.value):s.preventDefault()},["left"])),onKeydown:f[1]||(f[1]=Z(s=>o(a).changeModelValue(u.value),["enter","space"])),onFocus:f[2]||(f[2]=()=>{const s=o(a).activationMode!=="manual";!i.value&&!u.disabled&&s&&o(a).changeModelValue(u.value)})},{default:v(()=>[h(u.$slots,"default")]),_:3},8,["id","type","as","as-child","aria-selected","aria-controls","data-state","disabled","data-disabled","data-orientation"])]),_:3},8,["focusable","active"]))}}),Ie=he;const Se=g({__name:"Tabs",props:{class:{},modelValue:{}},emits:["update:modelValue"],setup(r,{emit:t}){const e=r,a=t;return(d,c)=>(y(),_(o(me),{"model-value":e.modelValue,class:A(o(E)("flex flex-col gap-3",e.class)),"onUpdate:modelValue":c[0]||(c[0]=i=>a("update:modelValue",String(i)))},{default:v(()=>[h(d.$slots,"default")]),_:3},8,["model-value","class"]))}}),Fe=g({__name:"TabsList",props:{class:{}},setup(r){const t=r;return(e,a)=>(y(),_(o(_e),{class:A(o(E)("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-1",t.class))},{default:v(()=>[h(e.$slots,"default")]),_:3},8,["class"]))}}),Ce=g({__name:"TabsTrigger",props:{class:{},value:{}},setup(r){const t=r;return(e,a)=>(y(),_(o(Ie),{value:t.value,class:A(o(E)("inline-flex flex-1 items-center justify-center gap-1.5 rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all outline-none","data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm","focus-visible:ring-ring/40 focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50","[&_svg]:size-3.5",t.class))},{default:v(()=>[h(e.$slots,"default")]),_:3},8,["value","class"]))}});export{Se as _,Fe as a,Ce as b,ge as c,U as i,be as m}; diff --git a/web/dist/assets/TabsTrigger.vue_vue_type_script_setup_true_lang-_qQ6JBVg.js b/web/dist/assets/TabsTrigger.vue_vue_type_script_setup_true_lang-_qQ6JBVg.js new file mode 100644 index 0000000..2aeaee6 --- /dev/null +++ b/web/dist/assets/TabsTrigger.vue_vue_type_script_setup_true_lang-_qQ6JBVg.js @@ -0,0 +1 @@ +import{d as g,E as R,G as $,o as y,h as _,w as v,p as q,u as o,P as S,H as h,m as C,O as Y,Q,x as J,g as w,B as W,R as A,a5 as X,L as Z,M as ee,e as V,f as E}from"./index-BKPz7Obh.js";import{g as M,b as K,a as O,c as L,d as x}from"./Collection-BaXBMWO5.js";const te="rovingFocusGroup.onEntryFocus",ae={bubbles:!1,cancelable:!0},oe={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function se(r,t){return t!=="rtl"?r:r==="ArrowLeft"?"ArrowRight":r==="ArrowRight"?"ArrowLeft":r}function re(r,t,e){const a=se(r.key,e);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(a))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(a)))return oe[a]}function D(r,t=!1){const e=M();for(const a of r)if(a===e||(a.focus({preventScroll:t}),M()!==e))return}function ne(r,t){return r.map((e,a)=>r[(t+a)%r.length])}const[le,ue]=L("RovingFocusGroup");var ie=g({__name:"RovingFocusGroup",props:{orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!1},currentTabStopId:{type:[String,null],required:!1},defaultCurrentTabStopId:{type:String,required:!1},preventScrollOnEntryFocus:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["entryFocus","update:currentTabStopId"],setup(r,{expose:t,emit:e}){const a=r,d=e,{loop:c,orientation:i,dir:u}=R(a),f=K(u),s=$(a,"currentTabStopId",d,{defaultValue:a.defaultCurrentTabStopId,passive:a.currentTabStopId===void 0}),l=C(!1),n=C(!1),p=C(0),{getItems:B,CollectionSlot:k}=O({isProvider:!0});function N(m){const I=!n.value;if(m.currentTarget&&m.target===m.currentTarget&&I&&!l.value){const T=new CustomEvent(te,ae);if(m.currentTarget.dispatchEvent(T),d("entryFocus",T),!T.defaultPrevented){const F=B().map(b=>b.ref).filter(b=>b.dataset.disabled!==""),G=F.find(b=>b.getAttribute("data-active")===""),j=F.find(b=>b.getAttribute("data-highlighted")===""),z=F.find(b=>b.id===s.value),H=[G,j,z,...F].filter(Boolean);D(H,a.preventScrollOnEntryFocus)}}n.value=!1}function P(){setTimeout(()=>{n.value=!1},1)}return t({getItems:B}),ue({loop:c,dir:f,orientation:i,currentTabStopId:s,onItemFocus:m=>{s.value=m},onItemShiftTab:()=>{l.value=!0},onFocusableItemAdd:()=>{p.value++},onFocusableItemRemove:()=>{p.value--}}),(m,I)=>(y(),_(o(k),null,{default:v(()=>[q(o(S),{tabindex:l.value||p.value===0?-1:0,"data-orientation":o(i),as:m.as,"as-child":m.asChild,dir:o(f),style:{outline:"none"},onMousedown:I[0]||(I[0]=T=>n.value=!0),onMouseup:P,onFocus:N,onBlur:I[1]||(I[1]=T=>l.value=!1)},{default:v(()=>[h(m.$slots,"default")]),_:3},8,["tabindex","data-orientation","as","as-child","dir"])]),_:3}))}}),de=ie,ce=g({__name:"RovingFocusItem",props:{tabStopId:{type:String,required:!1},focusable:{type:Boolean,required:!1,default:!0},active:{type:Boolean,required:!1},allowShiftKey:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(r){const t=r,e=le(),a=x(),d=w(()=>t.tabStopId||a),c=w(()=>e.currentTabStopId.value===d.value),{getItems:i,CollectionItem:u}=O();Y(()=>{t.focusable&&e.onFocusableItemAdd()}),Q(()=>{t.focusable&&e.onFocusableItemRemove()}),J(()=>t.focusable,(s,l)=>{s!==l&&(s?e.onFocusableItemAdd():e.onFocusableItemRemove())});function f(s){if(s.key==="Tab"&&s.shiftKey){e.onItemShiftTab();return}if(s.target!==s.currentTarget)return;const l=re(s,e.orientation.value,e.dir.value);if(l!==void 0){if(s.metaKey||s.ctrlKey||s.altKey||!t.allowShiftKey&&s.shiftKey)return;s.preventDefault();let n=[...i().map(p=>p.ref).filter(p=>p.dataset.disabled!=="")];if(l==="last")n.reverse();else if(l==="prev"||l==="next"){l==="prev"&&n.reverse();const p=n.indexOf(s.currentTarget);n=e.loop.value?ne(n,p+1):n.slice(p+1)}W(()=>D(n))}}return(s,l)=>(y(),_(o(u),null,{default:v(()=>[q(o(S),{tabindex:c.value?0:-1,"data-orientation":o(e).orientation.value,"data-active":s.active?"":void 0,"data-disabled":s.focusable?void 0:"",as:s.as,"as-child":s.asChild,onMousedown:l[0]||(l[0]=n=>{s.focusable?o(e).onItemFocus(d.value):n.preventDefault()}),onFocus:l[1]||(l[1]=n=>o(e).onItemFocus(d.value)),onKeydown:f},{default:v(()=>[h(s.$slots,"default")]),_:3},8,["tabindex","data-orientation","data-active","data-disabled","as","as-child"])]),_:3}))}}),fe=ce;const[U,pe]=L("TabsRoot");var ve=g({__name:"TabsRoot",props:{defaultValue:{type:null,required:!1},orientation:{type:String,required:!1,default:"horizontal"},dir:{type:String,required:!1},activationMode:{type:String,required:!1,default:"automatic"},modelValue:{type:null,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:modelValue"],setup(r,{emit:t}){const e=r,a=t,{orientation:d,unmountOnHide:c,dir:i}=R(e),u=K(i);A();const f=$(e,"modelValue",a,{defaultValue:e.defaultValue,passive:e.modelValue===void 0}),s=C(),l=X(new Set);return pe({modelValue:f,changeModelValue:n=>{f.value=n},orientation:d,dir:u,unmountOnHide:c,activationMode:e.activationMode,baseId:x(void 0,"reka-tabs"),tabsList:s,contentIds:l,registerContent:n=>{l.value=new Set([...l.value,n])},unregisterContent:n=>{const p=new Set(l.value);p.delete(n),l.value=p}}),(n,p)=>(y(),_(o(S),{dir:o(u),"data-orientation":o(d),"as-child":n.asChild,as:n.as},{default:v(()=>[h(n.$slots,"default",{modelValue:o(f)})]),_:3},8,["dir","data-orientation","as-child","as"]))}}),me=ve;function be(r,t){return`${r}-trigger-${t}`}function ge(r,t){return`${r}-content-${t}`}var ye=g({__name:"TabsList",props:{loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const t=r,{loop:e}=R(t),{forwardRef:a,currentElement:d}=A(),c=U();return c.tabsList=d,(i,u)=>(y(),_(o(de),{"as-child":"",orientation:o(c).orientation.value,dir:o(c).dir.value,loop:o(e)},{default:v(()=>[q(o(S),{ref:o(a),role:"tablist","as-child":i.asChild,as:i.as,"aria-orientation":o(c).orientation.value},{default:v(()=>[h(i.$slots,"default")]),_:3},8,["as-child","as","aria-orientation"])]),_:3},8,["orientation","dir","loop"]))}}),_e=ye,he=g({__name:"TabsTrigger",props:{value:{type:[String,Number],required:!0},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const t=r,{forwardRef:e}=A(),a=U(),d=w(()=>be(a.baseId,t.value)),c=w(()=>a.contentIds.value.has(t.value)?ge(a.baseId,t.value):void 0),i=w(()=>t.value===a.modelValue.value);return(u,f)=>(y(),_(o(fe),{"as-child":"",focusable:!u.disabled,active:i.value},{default:v(()=>[q(o(S),{id:d.value,ref:o(e),role:"tab",type:u.as==="button"?"button":void 0,as:u.as,"as-child":u.asChild,"aria-selected":i.value?"true":"false","aria-controls":c.value,"data-state":i.value?"active":"inactive",disabled:u.disabled,"data-disabled":u.disabled?"":void 0,"data-orientation":o(a).orientation.value,onMousedown:f[0]||(f[0]=ee(s=>{!u.disabled&&s.ctrlKey===!1?o(a).changeModelValue(u.value):s.preventDefault()},["left"])),onKeydown:f[1]||(f[1]=Z(s=>o(a).changeModelValue(u.value),["enter","space"])),onFocus:f[2]||(f[2]=()=>{const s=o(a).activationMode!=="manual";!i.value&&!u.disabled&&s&&o(a).changeModelValue(u.value)})},{default:v(()=>[h(u.$slots,"default")]),_:3},8,["id","type","as","as-child","aria-selected","aria-controls","data-state","disabled","data-disabled","data-orientation"])]),_:3},8,["focusable","active"]))}}),Ie=he;const Se=g({__name:"Tabs",props:{class:{},modelValue:{}},emits:["update:modelValue"],setup(r,{emit:t}){const e=r,a=t;return(d,c)=>(y(),_(o(me),{"model-value":e.modelValue,class:V(o(E)("flex flex-col gap-3",e.class)),"onUpdate:modelValue":c[0]||(c[0]=i=>a("update:modelValue",String(i)))},{default:v(()=>[h(d.$slots,"default")]),_:3},8,["model-value","class"]))}}),Fe=g({__name:"TabsList",props:{class:{}},setup(r){const t=r;return(e,a)=>(y(),_(o(_e),{class:V(o(E)("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-1",t.class))},{default:v(()=>[h(e.$slots,"default")]),_:3},8,["class"]))}}),Ce=g({__name:"TabsTrigger",props:{class:{},value:{}},setup(r){const t=r;return(e,a)=>(y(),_(o(Ie),{value:t.value,class:V(o(E)("inline-flex flex-1 items-center justify-center gap-1.5 rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all outline-none","data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm","focus-visible:ring-ring/40 focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50","[&_svg]:size-3.5",t.class))},{default:v(()=>[h(e.$slots,"default")]),_:3},8,["value","class"]))}});export{Se as _,Fe as a,Ce as b,ge as c,re as g,U as i,be as m}; diff --git a/web/dist/assets/index-BKPz7Obh.js b/web/dist/assets/index-BKPz7Obh.js new file mode 100644 index 0000000..199296a --- /dev/null +++ b/web/dist/assets/index-BKPz7Obh.js @@ -0,0 +1,106 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DashboardView-BD4i_GCA.js","assets/format-B6sc_rZ4.js","assets/EventItem.vue_vue_type_script_setup_true_lang-JeqwaMaY.js","assets/Badge.vue_vue_type_script_setup_true_lang-i2F91fYk.js","assets/PageHeader.vue_vue_type_script_setup_true_lang-CPDhGTO6.js","assets/CardTitle.vue_vue_type_script_setup_true_lang-BHtPbA-o.js","assets/Skeleton.vue_vue_type_script_setup_true_lang-DG3HTLWx.js","assets/TabsTrigger.vue_vue_type_script_setup_true_lang-_qQ6JBVg.js","assets/Collection-BaXBMWO5.js","assets/EventsView-Blmx8SEw.js","assets/Modal.vue_vue_type_script_setup_true_lang-Bd1uxkqS.js","assets/Select.vue_vue_type_script_setup_true_lang-CONzBLld.js","assets/RulesView-f8xcsZeo.js","assets/AnalyzersView-Bm4Tu3Lm.js","assets/SettingsView-AGyc2AVS.js"])))=>i.map(i=>d[i]); +var Ga=Object.defineProperty;var Ua=(e,t,n)=>t in e?Ga(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Po=(e,t,n)=>Ua(e,typeof t!="symbol"?t+"":t,n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function n(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(r){if(r.ep)return;r.ep=!0;const o=n(r);fetch(r.href,o)}})();/** +* @vue/shared v3.5.40 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Zr(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ge={},_n=[],wt=()=>{},ji=()=>!1,Ls=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ds=e=>e.startsWith("onUpdate:"),Ce=Object.assign,eo=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},$a=Object.prototype.hasOwnProperty,ue=(e,t)=>$a.call(e,t),$=Array.isArray,xn=e=>os(e)==="[object Map]",Hi=e=>os(e)==="[object Set]",Oo=e=>os(e)==="[object Date]",q=e=>typeof e=="function",ye=e=>typeof e=="string",et=e=>typeof e=="symbol",ae=e=>e!==null&&typeof e=="object",Bi=e=>(ae(e)||q(e))&&q(e.then)&&q(e.catch),Gi=Object.prototype.toString,os=e=>Gi.call(e),Wa=e=>os(e).slice(8,-1),Ui=e=>os(e)==="[object Object]",zs=e=>ye(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Gn=Zr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Fs=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Ka=/-\w/g,Ue=Fs(e=>e.replace(Ka,t=>t.slice(1).toUpperCase())),qa=/\B([A-Z])/g,Yt=Fs(e=>e.replace(qa,"-$1").toLowerCase()),Vs=Fs(e=>e.charAt(0).toUpperCase()+e.slice(1)),or=Fs(e=>e?`on${Vs(e)}`:""),rt=(e,t)=>!Object.is(e,t),ir=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Ja=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Ya=e=>{const t=ye(e)?Number(e):NaN;return isNaN(t)?e:t};let Io;const js=()=>Io||(Io=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Hs(e){if($(e)){const t={};for(let n=0;n{if(n){const s=n.split(Xa);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function $e(e){let t="";if(ye(e))t=e;else if($(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Le=e=>ye(e)?e:e==null?"":$(e)||ae(e)&&(e.toString===Gi||!q(e.toString))?Ki(e)?Le(e.value):JSON.stringify(e,qi,2):String(e),qi=(e,t)=>Ki(t)?qi(e,t.value):xn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],o)=>(n[lr(s,o)+" =>"]=r,n),{})}:Hi(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>lr(n))}:et(t)?lr(t):ae(t)&&!$(t)&&!Ui(t)?String(t):t,lr=(e,t="")=>{var n;return et(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.40 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Re;class Ji{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Re&&(Re.active?(this.parent=Re,this.index=(Re.scopes||(Re.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const s=this.scopes.slice();for(t=0,n=s.length;t0&&--this._on===0){if(Re===this)Re=this.prevScope;else{let t=Re;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if($n){let t=$n;for($n=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Un;){let t=Un;for(Un=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function tl(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function nl(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),ro(s),oc(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Ar(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(sl(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function sl(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Yn)||(e.globalVersion=Yn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ar(e))))return;e.flags|=2;const t=e.dep,n=ve,s=ot;ve=e,ot=!0;try{tl(e);const r=e.fn(e._value);(t.version===0||rt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ve=n,ot=s,nl(e),e.flags&=-3}}function ro(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let o=n.computed.deps;o;o=o.nextDep)ro(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function oc(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let ot=!0;const rl=[];function Lt(){rl.push(ot),ot=!1}function Dt(){const e=rl.pop();ot=e===void 0?!0:e}function No(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ve;ve=void 0;try{t()}finally{ve=n}}}let Yn=0;class ic{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Bs{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!ve||!ot||ve===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ve)n=this.activeLink=new ic(ve,this),ve.deps?(n.prevDep=ve.depsTail,ve.depsTail.nextDep=n,ve.depsTail=n):ve.deps=ve.depsTail=n,ol(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ve.depsTail,n.nextDep=void 0,ve.depsTail.nextDep=n,ve.depsTail=n,ve.deps===n&&(ve.deps=s)}return n}trigger(t){this.version++,Yn++,this.notify(t)}notify(t){no();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{so()}}}function ol(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)ol(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const ws=new WeakMap,ln=Symbol(""),kr=Symbol(""),Qn=Symbol("");function De(e,t,n){if(ot&&ve){let s=ws.get(e);s||ws.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Bs),r.map=s,r.key=n),r.track()}}function It(e,t,n,s,r,o){const i=ws.get(e);if(!i){Yn++;return}const l=a=>{a&&a.trigger()};if(no(),t==="clear")i.forEach(l);else{const a=$(e),c=a&&zs(n);if(a&&n==="length"){const u=Number(s);i.forEach((f,p)=>{(p==="length"||p===Qn||!et(p)&&p>=u)&&l(f)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),c&&l(i.get(Qn)),t){case"add":a?c&&l(i.get("length")):(l(i.get(ln)),xn(e)&&l(i.get(kr)));break;case"delete":a||(l(i.get(ln)),xn(e)&&l(i.get(kr)));break;case"set":xn(e)&&l(i.get(ln));break}}so()}function lc(e,t){const n=ws.get(e);return n&&n.get(t)}function mn(e){const t=ie(e);return t===e?t:(De(t,"iterate",Qn),Xe(e)?t:t.map(lt))}function Gs(e){return De(e=ie(e),"iterate",Qn),e}function _t(e,t){return zt(e)?An(an(e)?lt(t):t):lt(t)}const ac={__proto__:null,[Symbol.iterator](){return cr(this,Symbol.iterator,e=>_t(this,e))},concat(...e){return mn(this).concat(...e.map(t=>$(t)?mn(t):t))},entries(){return cr(this,"entries",e=>(e[1]=_t(this,e[1]),e))},every(e,t){return kt(this,"every",e,t,void 0,arguments)},filter(e,t){return kt(this,"filter",e,t,n=>n.map(s=>_t(this,s)),arguments)},find(e,t){return kt(this,"find",e,t,n=>_t(this,n),arguments)},findIndex(e,t){return kt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return kt(this,"findLast",e,t,n=>_t(this,n),arguments)},findLastIndex(e,t){return kt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return kt(this,"forEach",e,t,void 0,arguments)},includes(...e){return ur(this,"includes",e)},indexOf(...e){return ur(this,"indexOf",e)},join(e){return mn(this).join(e)},lastIndexOf(...e){return ur(this,"lastIndexOf",e)},map(e,t){return kt(this,"map",e,t,void 0,arguments)},pop(){return Nn(this,"pop")},push(...e){return Nn(this,"push",e)},reduce(e,...t){return Mo(this,"reduce",e,t)},reduceRight(e,...t){return Mo(this,"reduceRight",e,t)},shift(){return Nn(this,"shift")},some(e,t){return kt(this,"some",e,t,void 0,arguments)},splice(...e){return Nn(this,"splice",e)},toReversed(){return mn(this).toReversed()},toSorted(e){return mn(this).toSorted(e)},toSpliced(...e){return mn(this).toSpliced(...e)},unshift(...e){return Nn(this,"unshift",e)},values(){return cr(this,"values",e=>_t(this,e))}};function cr(e,t,n){const s=Gs(e),r=s[t]();return s!==e&&!Xe(e)&&(r._next=r.next,r.next=()=>{const o=r._next();return o.done||(o.value=n(o.value)),o}),r}const cc=Array.prototype;function kt(e,t,n,s,r,o){const i=Gs(e),l=i!==e&&!Xe(e),a=i[t];if(a!==cc[t]){const f=a.apply(e,o);return l?lt(f):f}let c=n;i!==e&&(l?c=function(f,p){return n.call(this,_t(e,f),p,e)}:n.length>2&&(c=function(f,p){return n.call(this,f,p,e)}));const u=a.call(i,c,s);return l&&r?r(u):u}function Mo(e,t,n,s){const r=Gs(e),o=r!==e&&!Xe(e);let i=n,l=!1;r!==e&&(o?(l=s.length===0,i=function(c,u,f){return l&&(l=!1,c=_t(e,c)),n.call(this,c,_t(e,u),f,e)}):n.length>3&&(i=function(c,u,f){return n.call(this,c,u,f,e)}));const a=r[t](i,...s);return l?_t(e,a):a}function ur(e,t,n){const s=ie(e);De(s,"iterate",Qn);const r=s[t](...n);return(r===-1||r===!1)&&Ks(n[0])?(n[0]=ie(n[0]),s[t](...n)):r}function Nn(e,t,n=[]){Lt(),no();const s=ie(e)[t].apply(e,n);return so(),Dt(),s}const uc=Zr("__proto__,__v_isRef,__isVue"),il=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(et));function fc(e){et(e)||(e=String(e));const t=ie(this);return De(t,"has",e),t.hasOwnProperty(e)}class ll{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(r?o?pl:dl:o?fl:ul).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=$(t);if(!r){let a;if(i&&(a=ac[n]))return a;if(n==="hasOwnProperty")return fc}const l=Reflect.get(t,n,Oe(t)?t:s);if((et(n)?il.has(n):uc(n))||(r||De(t,"get",n),o))return l;if(Oe(l)){const a=i&&zs(n)?l:l.value;return r&&ae(a)?Tr(a):a}return ae(l)?r?Tr(l):$s(l):l}}class al extends ll{constructor(t=!1){super(!1,t)}set(t,n,s,r){let o=t[n];const i=$(t)&&zs(n);if(!this._isShallow){const c=zt(o);if(!Xe(s)&&!zt(s)&&(o=ie(o),s=ie(s)),!i&&Oe(o)&&!Oe(s))return c||(o.value=s),!0}const l=i?Number(n)e,us=e=>Reflect.getPrototypeOf(e);function gc(e,t,n){return function(...s){const r=this.__v_raw,o=ie(r),i=xn(o),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,c=r[e](...s),u=n?Rr:t?An:lt;return!t&&De(o,"iterate",a?kr:ln),Ce(Object.create(c),{next(){const{value:f,done:p}=c.next();return p?{value:f,done:p}:{value:l?[u(f[0]),u(f[1])]:u(f),done:p}}})}}function fs(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function bc(e,t){const n={get(r){const o=this.__v_raw,i=ie(o),l=ie(r);e||(rt(r,l)&&De(i,"get",r),De(i,"get",l));const{has:a}=us(i),c=t?Rr:e?An:lt;if(a.call(i,r))return c(o.get(r));if(a.call(i,l))return c(o.get(l));o!==i&&o.get(r)},get size(){const r=this.__v_raw;return!e&&De(ie(r),"iterate",ln),r.size},has(r){const o=this.__v_raw,i=ie(o),l=ie(r);return e||(rt(r,l)&&De(i,"has",r),De(i,"has",l)),r===l?o.has(r):o.has(r)||o.has(l)},forEach(r,o){const i=this,l=i.__v_raw,a=ie(l),c=t?Rr:e?An:lt;return!e&&De(a,"iterate",ln),l.forEach((u,f)=>r.call(o,c(u),c(f),i))}};return Ce(n,e?{add:fs("add"),set:fs("set"),delete:fs("delete"),clear:fs("clear")}:{add(r){const o=ie(this),i=us(o),l=ie(r),a=!t&&!Xe(r)&&!zt(r)?l:r;return i.has.call(o,a)||rt(r,a)&&i.has.call(o,r)||rt(l,a)&&i.has.call(o,l)||(o.add(a),It(o,"add",a,a)),this},set(r,o){!t&&!Xe(o)&&!zt(o)&&(o=ie(o));const i=ie(this),{has:l,get:a}=us(i);let c=l.call(i,r);c||(r=ie(r),c=l.call(i,r));const u=a.call(i,r);return i.set(r,o),c?rt(o,u)&&It(i,"set",r,o):It(i,"add",r,o),this},delete(r){const o=ie(this),{has:i,get:l}=us(o);let a=i.call(o,r);a||(r=ie(r),a=i.call(o,r)),l&&l.call(o,r);const c=o.delete(r);return a&&It(o,"delete",r,void 0),c},clear(){const r=ie(this),o=r.size!==0,i=r.clear();return o&&It(r,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=gc(r,e,t)}),n}function Us(e,t){const n=bc(e,t);return(s,r,o)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(ue(n,r)&&r in s?n:s,r,o)}const vc={get:Us(!1,!1)},yc={get:Us(!1,!0)},_c={get:Us(!0,!1)},xc={get:Us(!0,!0)},ul=new WeakMap,fl=new WeakMap,dl=new WeakMap,pl=new WeakMap;function wc(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function $s(e){return zt(e)?e:Ws(e,!1,dc,vc,ul)}function hl(e){return Ws(e,!1,hc,yc,fl)}function Tr(e){return Ws(e,!0,pc,_c,dl)}function mm(e){return Ws(e,!0,mc,xc,pl)}function Ws(e,t,n,s,r){if(!ae(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const o=r.get(e);if(o)return o;const i=wc(Wa(e));if(i===0)return e;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function an(e){return zt(e)?an(e.__v_raw):!!(e&&e.__v_isReactive)}function zt(e){return!!(e&&e.__v_isReadonly)}function Xe(e){return!!(e&&e.__v_isShallow)}function Ks(e){return e?!!e.__v_raw:!1}function ie(e){const t=e&&e.__v_raw;return t?ie(t):e}function Sc(e){return!ue(e,"__v_skip")&&Object.isExtensible(e)&&$i(e,"__v_skip",!0),e}const lt=e=>ae(e)?$s(e):e,An=e=>ae(e)?Tr(e):e;function Oe(e){return e?e.__v_isRef===!0:!1}function Ze(e){return ml(e,!1)}function is(e){return ml(e,!0)}function ml(e,t){return Oe(e)?e:new Ec(e,t)}class Ec{constructor(t,n){this.dep=new Bs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:ie(t),this._value=n?t:lt(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Xe(t)||zt(t);t=s?t:ie(t),rt(t,n)&&(this._rawValue=t,this._value=s?t:lt(t),this.dep.trigger())}}function Cc(e){e.dep&&e.dep.trigger()}function H(e){return Oe(e)?e.value:e}function St(e){return q(e)?e():H(e)}const Ac={get:(e,t,n)=>t==="__v_raw"?e:H(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return Oe(r)&&!Oe(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function gl(e){return an(e)?e:new Proxy(e,Ac)}class kc{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Bs,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Rc(e){return new kc(e)}function gm(e){const t=$(e)?new Array(e.length):{};for(const n in e)t[n]=bl(e,n);return t}class Tc{constructor(t,n,s){this._object=t,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._key=et(n)?n:String(n),this._raw=ie(t);let r=!0,o=t;if(!$(t)||et(this._key)||!zs(this._key))do r=!Ks(o)||Xe(o);while(r&&(o=o.__v_raw));this._shallow=r}get value(){let t=this._object[this._key];return this._shallow&&(t=H(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&Oe(this._raw[this._key])){const n=this._object[this._key];if(Oe(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return lc(this._raw,this._key)}}class Pc{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function bm(e,t,n){return Oe(e)?e:q(e)?new Pc(e):ae(e)&&arguments.length>1?bl(e,t,n):Ze(e)}function bl(e,t,n){return new Tc(e,t,n)}class Oc{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Bs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Yn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&ve!==this)return el(this,!0),!0}get value(){const t=this.dep.track();return sl(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Ic(e,t,n=!1){let s,r;return q(e)?s=e:(s=e.get,r=e.set),new Oc(s,r,n)}const ds={},Ss=new WeakMap;let nn;function Nc(e,t=!1,n=nn){if(n){let s=Ss.get(n);s||Ss.set(n,s=[]),s.push(e)}}function Mc(e,t,n=ge){const{immediate:s,deep:r,once:o,scheduler:i,augmentJob:l,call:a}=n,c=T=>r?T:Xe(T)||r===!1||r===0?Nt(T,1):Nt(T);let u,f,p,m,E=!1,x=!1;if(Oe(e)?(f=()=>e.value,E=Xe(e)):an(e)?(f=()=>c(e),E=!0):$(e)?(x=!0,E=e.some(T=>an(T)||Xe(T)),f=()=>e.map(T=>{if(Oe(T))return T.value;if(an(T))return c(T);if(q(T))return a?a(T,2):T()})):q(e)?t?f=a?()=>a(e,2):e:f=()=>{if(p){Lt();try{p()}finally{Dt()}}const T=nn;nn=u;try{return a?a(e,3,[m]):e(m)}finally{nn=T}}:f=wt,t&&r){const T=f,J=r===!0?1/0:r;f=()=>Nt(T(),J)}const k=Qi(),I=()=>{u.stop(),k&&k.active&&eo(k.effects,u)};if(o&&t){const T=t;t=(...J)=>{const Y=T(...J);return I(),Y}}let _=x?new Array(e.length).fill(ds):ds;const M=T=>{if(!(!(u.flags&1)||!u.dirty&&!T))if(t){const J=u.run();if(T||r||E||(x?J.some((Y,j)=>rt(Y,_[j])):rt(J,_))){p&&p();const Y=nn;nn=u;try{const j=[J,_===ds?void 0:x&&_[0]===ds?[]:_,m];_=J,a?a(t,3,j):t(...j)}finally{nn=Y}}}else u.run()};return l&&l(M),u=new Xi(f),u.scheduler=i?()=>i(M,!1):M,m=T=>Nc(T,!1,u),p=u.onStop=()=>{const T=Ss.get(u);if(T){if(a)a(T,4);else for(const J of T)J();Ss.delete(u)}},t?s?M(!0):_=u.run():i?i(M.bind(null,!0),!0):u.run(),I.pause=u.pause.bind(u),I.resume=u.resume.bind(u),I.stop=I,I}function Nt(e,t=1/0,n){if(t<=0||!ae(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Oe(e))Nt(e.value,t,n);else if($(e))for(let s=0;s{Nt(s,t,n)});else if(Ui(e)){for(const s in e)Nt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Nt(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.40 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function ls(e,t,n,s){try{return s?e(...s):e()}catch(r){qs(r,t,n)}}function nt(e,t,n,s){if(q(e)){const r=ls(e,t,n,s);return r&&Bi(r)&&r.catch(o=>{qs(o,t,n)}),r}if($(e)){const r=[];for(let o=0;o>>1,r=Be[s],o=Xn(r);o=Xn(n)?Be.push(e):Be.splice(Dc(t),0,e),e.flags|=1,yl()}}function yl(){Es||(Es=vl.then(xl))}function zc(e){$(e)?wn.push(...e):$t&&e.id===-1?$t.splice(gn+1,0,e):e.flags&1||(wn.push(e),e.flags|=1),yl()}function Lo(e,t,n=vt+1){for(;nXn(n)-Xn(s));if(wn.length=0,$t){$t.push(...t);return}for($t=t,gn=0;gn<$t.length;gn++){const n=$t[gn];n.flags&4&&(n.flags&=-2),n.flags&8||n(),n.flags&=-2}$t=null,gn=0}}const Xn=e=>e.id==null?e.flags&2?-1:1/0:e.id;function xl(e){try{for(vt=0;vt{s._d&&Rs(-1);const o=Cs(t),i=Mt.length;let l;try{l=e(...r)}finally{for(let a=Mt.length;a>i;a--)ho();Cs(o),s._d&&Rs(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function vm(e,t){if(Me===null)return e;const n=er(Me),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&q(t)?t.call(s&&s.proxy):t}}const Fc=Symbol.for("v-scx"),Vc=()=>it(Fc);function jc(e,t){return as(e,null,t)}function ym(e,t){return as(e,null,{flush:"post"})}function _m(e,t){return as(e,null,{flush:"sync"})}function Et(e,t,n){return as(e,t,n)}function as(e,t,n=ge){const{immediate:s,deep:r,flush:o,once:i}=n,l=Ce({},n),a=t&&s||!t&&o!=="post";let c;if(ts){if(o==="sync"){const m=Vc();c=m.__watcherHandles||(m.__watcherHandles=[])}else if(!a){const m=()=>{};return m.stop=wt,m.resume=wt,m.pause=wt,m}}const u=Fe;l.call=(m,E,x)=>nt(m,u,E,x);let f=!1;o==="post"?l.scheduler=m=>{je(m,u&&u.suspense)}:o!=="sync"&&(f=!0,l.scheduler=(m,E)=>{E?m():io(m)}),l.augmentJob=m=>{t&&(m.flags|=4),f&&(m.flags|=2,u&&(m.id=u.uid,m.i=u))};const p=Mc(e,t,l);return ts&&(c?c.push(p):a&&p()),p}function Hc(e,t,n){const s=this.proxy,r=ye(e)?e.includes(".")?Sl(s,e):()=>s[e]:e.bind(s,s);let o;q(t)?o=t:(o=t.handler,n=t);const i=cs(this),l=as(r,o.bind(s),n);return i(),l}function Sl(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,sn=e=>e&&(e.disabled||e.disabled===""),Gc=e=>e&&(e.defer||e.defer===""),Do=e=>typeof SVGElement<"u"&&e instanceof SVGElement,zo=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Pr=(e,t)=>{const n=e&&e.to;return ye(n)?t?t(n):null:n},Uc={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,o,i,l,a,c){const{mc:u,pc:f,pbc:p,o:{insert:m,querySelector:E,createText:x,createComment:k,parentNode:I}}=c,_=sn(t.props);let{dynamicChildren:M}=t;const T=(j,A,N)=>{j.shapeFlag&16&&u(j.children,A,N,r,o,i,l,a)},J=(j=t)=>{const A=sn(j.props),N=j.target=Pr(j.props,E),Z=Or(N,j,x,m);N&&(i!=="svg"&&Do(N)?i="svg":i!=="mathml"&&zo(N)&&(i="mathml"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add(N),A||(T(j,N,Z),jn(j,!1)))},Y=j=>{const A=()=>{if(Gt.get(j)===A){if(Gt.delete(j),sn(j.props)){const N=I(j.el)||n;T(j,N,j.anchor),jn(j,!0)}J(j)}};Gt.set(j,A),je(A,o)};if(e==null){const j=t.el=x(""),A=t.anchor=x("");if(m(j,n,s),m(A,n,s),Gc(t.props)||o&&o.pendingBranch){Y(t);return}_&&(T(t,n,A),jn(t,!0)),J()}else{t.el=e.el;const j=t.anchor=e.anchor,A=Gt.get(e);if(A){A.flags|=8,Gt.delete(e),Y(t);return}t.targetStart=e.targetStart;const N=t.target=e.target,Z=t.targetAnchor=e.targetAnchor,ne=sn(e.props),L=ne?n:N,te=ne?j:Z;if(i==="svg"||Do(N)?i="svg":(i==="mathml"||zo(N))&&(i="mathml"),M?(p(e.dynamicChildren,M,L,r,o,i,l),po(e,t,!0)):a||f(e,t,L,te,r,o,i,l,!1),_)ne?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):ps(t,n,j,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const be=Pr(t.props,E);be&&(t.target=be,ps(t,be,null,c,0))}else ne&&ps(t,N,Z,c,1);jn(t,_)}},remove(e,t,n,{um:s,o:{remove:r}},o){const{shapeFlag:i,children:l,anchor:a,targetStart:c,targetAnchor:u,target:f,props:p}=e,m=sn(p),E=o||!m,x=Gt.get(e);if(x&&(x.flags|=8,Gt.delete(e)),f&&(r(c),r(u)),o&&r(a),!x&&(m||f)&&i&16)for(let k=0;k{e.isMounted=!0}),ao(()=>{e.isUnmounting=!0}),e}const tt=[Function,Array],Kc={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:tt,onEnter:tt,onAfterEnter:tt,onEnterCancelled:tt,onBeforeLeave:tt,onLeave:tt,onAfterLeave:tt,onLeaveCancelled:tt,onBeforeAppear:tt,onAppear:tt,onAfterAppear:tt,onAppearCancelled:tt};function qc(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Ir(e,t,n,s,r){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:a,onEnter:c,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:p,onLeave:m,onAfterLeave:E,onLeaveCancelled:x,onBeforeAppear:k,onAppear:I,onAfterAppear:_,onAppearCancelled:M}=t,T=String(e.key),J=qc(n,e),Y=(N,Z)=>{N&&nt(N,s,9,Z)},j=(N,Z)=>{const ne=Z[1];Y(N,Z),$(N)?N.every(L=>L.length<=1)&&ne():N.length<=1&&ne()},A={mode:i,persisted:l,beforeEnter(N){let Z=a;if(!n.isMounted)if(o)Z=k||a;else return;N[yt]&&N[yt](!0);const ne=J[T];ne&&bn(e,ne)&&ne.el[yt]&&ne.el[yt](),Y(Z,[N])},enter(N){if(J[T]===e)return;let Z=c,ne=u,L=f;if(!n.isMounted)if(o)Z=I||c,ne=_||u,L=M||f;else return;let te=!1;N[Mn]=Se=>{te||(te=!0,Se?Y(L,[N]):Y(ne,[N]),A.delayedLeave&&A.delayedLeave(),N[Mn]=void 0)};const be=N[Mn].bind(null,!1);Z?j(Z,[N,be]):be()},leave(N,Z){const ne=String(e.key);if(N[Mn]&&N[Mn](!0),n.isUnmounting)return Z();Y(p,[N]);let L=!1;N[yt]=be=>{L||(L=!0,Z(),be?Y(x,[N]):Y(E,[N]),N[yt]=void 0,J[ne]===e&&delete J[ne])};const te=N[yt].bind(null,!1);J[ne]=e,m?j(m,[N,te]):te()},clone(N){return Ir(N,t,n,s)}};return A}function Zn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Zn(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 Cl(e,t=!1,n){let s=[],r=0;for(let o=0;o1)for(let o=0;oWn(x,t&&($(t)?t[k]:t),n,s,r));return}if(Sn(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Wn(e,t,n,s.component.subTree);return}const o=s.shapeFlag&4?er(s.component):s.el,i=r?null:o,{i:l,r:a}=e,c=t&&t.r,u=l.refs===ge?l.refs={}:l.refs,f=l.setupState,p=ie(f),m=f===ge?ji:x=>Fo(u,x)?!1:ue(p,x),E=(x,k)=>!(k&&Fo(u,k));if(c!=null&&c!==a){if(Vo(t),ye(c))u[c]=null,m(c)&&(f[c]=null);else if(Oe(c)){const x=t;E(c,x.k)&&(c.value=null),x.k&&(u[x.k]=null)}}if(q(a))ls(a,l,12,[i,u]);else{const x=ye(a),k=Oe(a);if(x||k){const I=()=>{if(e.f){const _=x?m(a)?f[a]:u[a]:E()||!e.k?a.value:u[e.k];if(r)$(_)&&eo(_,o);else if($(_))_.includes(o)||_.push(o);else if(x)u[a]=[o],m(a)&&(f[a]=u[a]);else{const M=[o];E(a,e.k)&&(a.value=M),e.k&&(u[e.k]=M)}}else x?(u[a]=i,m(a)&&(f[a]=i)):k&&(E(a,e.k)&&(a.value=i),e.k&&(u[e.k]=i))};if(i){const _=()=>{I(),As.delete(e)};_.id=-1,As.set(e,_),je(_,n)}else Vo(e),I()}}}function Vo(e){const t=As.get(e);t&&(t.flags|=8,As.delete(e))}js().requestIdleCallback;js().cancelIdleCallback;const Sn=e=>!!e.type.__asyncLoader,kl=e=>e.type.__isKeepAlive;function Jc(e,t){Rl(e,"a",t)}function Yc(e,t){Rl(e,"da",t)}function Rl(e,t,n=Fe){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Js(t,s,n),n){let r=n.parent;for(;r&&r.parent;)kl(r.parent.vnode)&&Qc(s,t,n,r),r=r.parent}}function Qc(e,t,n,s){const r=Js(t,e,s,!0);co(()=>{eo(s[t],r)},n)}function Js(e,t,n=Fe,s=!1){if(n){const r=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{Lt();const l=cs(n),a=nt(t,n,e,i);return l(),Dt(),a});return s?r.unshift(o):r.push(o),o}}const Vt=e=>(t,n=Fe)=>{(!ts||e==="sp")&&Js(e,(...s)=>t(...s),n)},Xc=Vt("bm"),Ys=Vt("m"),Zc=Vt("bu"),lo=Vt("u"),ao=Vt("bum"),co=Vt("um"),eu=Vt("sp"),tu=Vt("rtg"),nu=Vt("rtc");function su(e,t=Fe){Js("ec",e,t)}const ru="components",Tl=Symbol.for("v-ndc");function fr(e){return ye(e)?ou(ru,e,!1)||e:e||Tl}function ou(e,t,n=!0,s=!1){const r=Me||Fe;if(r){const o=r.type;{const l=Hu(o,!1);if(l&&(l===t||l===Ue(t)||l===Vs(Ue(t))))return o}const i=jo(r[e]||o[e],t)||jo(r.appContext[e],t);return!i&&s?o:i}}function jo(e,t){return e&&(e[t]||e[Ue(t)]||e[Vs(Ue(t))])}function Nr(e,t,n,s){let r;const o=n,i=$(e);if(i||ye(e)){const l=i&&an(e);let a=!1,c=!1;l&&(a=!Xe(e),c=zt(e),e=Gs(e)),r=new Array(e.length);for(let u=0,f=e.length;ut(l,a,void 0,o));else{const l=Object.keys(e);r=new Array(l.length);for(let a=0,c=l.length;a0;return t!=="default"&&(c.name=t),fe(),ze(Pe,null,[de("slot",c,s&&s())],u?-2:64)}let i=e[t];i&&i._c&&(i._d=!1);const l=Mt.length;fe();let a;try{const c=i&&Pl(i(n)),u=n.key||o||c&&c.key;a=ze(Pe,{key:(u&&!et(u)?u:`_${t}`)+(!c&&s?"_fb":"")},c||(s?s():[]),c&&e._===1?64:-2)}catch(c){for(let u=Mt.length;u>l;u--)ho();throw c}finally{i&&i._c&&(i._d=!0)}return a.scopeId&&(a.slotScopeIds=[a.scopeId+"-s"]),a}function Pl(e){return e.some(t=>es(t)?!(t.type===at||t.type===Pe&&!Pl(t.children)):!0)?e:null}const Mr=e=>e?Jl(e)?er(e):Mr(e.parent):null,Kn=Ce(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=>Mr(e.parent),$root:e=>Mr(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Il(e),$forceUpdate:e=>e.f||(e.f=()=>{io(e.update)}),$nextTick:e=>e.n||(e.n=oo.bind(e.proxy)),$watch:e=>Hc.bind(e)}),dr=(e,t)=>e!==ge&&!e.__isScriptSetup&&ue(e,t),iu={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:o,accessCache:i,type:l,appContext:a}=e;if(t[0]!=="$"){const p=i[t];if(p!==void 0)switch(p){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return o[t]}else{if(dr(s,t))return i[t]=1,s[t];if(r!==ge&&ue(r,t))return i[t]=2,r[t];if(ue(o,t))return i[t]=3,o[t];if(n!==ge&&ue(n,t))return i[t]=4,n[t];Dr&&(i[t]=0)}}const c=Kn[t];let u,f;if(c)return t==="$attrs"&&De(e.attrs,"get",""),c(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(n!==ge&&ue(n,t))return i[t]=4,n[t];if(f=a.config.globalProperties,ue(f,t))return f[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:o}=e;return dr(r,t)?(r[t]=n,!0):s!==ge&&ue(s,t)?(s[t]=n,!0):ue(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:o,type:i}},l){let a;return!!(n[l]||e!==ge&&l[0]!=="$"&&ue(e,l)||dr(t,l)||ue(o,l)||ue(s,l)||ue(Kn,l)||ue(r.config.globalProperties,l)||(a=i.__cssModules)&&a[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ue(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Lr(e){return $(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function Sm(e,t){const n=Lr(e);for(const s in t){if(s.startsWith("__skip"))continue;let r=n[s];r?$(r)||q(r)?r=n[s]={type:r,default:t[s]}:r.default=t[s]:r===null&&(r=n[s]={default:t[s]}),r&&t[`__skip_${s}`]&&(r.skipFactory=!0)}return n}let Dr=!0;function lu(e){const t=Il(e),n=e.proxy,s=e.ctx;Dr=!1,t.beforeCreate&&Ho(t.beforeCreate,e,"bc");const{data:r,computed:o,methods:i,watch:l,provide:a,inject:c,created:u,beforeMount:f,mounted:p,beforeUpdate:m,updated:E,activated:x,deactivated:k,beforeDestroy:I,beforeUnmount:_,destroyed:M,unmounted:T,render:J,renderTracked:Y,renderTriggered:j,errorCaptured:A,serverPrefetch:N,expose:Z,inheritAttrs:ne,components:L,directives:te,filters:be}=t;if(c&&au(c,s,null),i)for(const ee in i){const se=i[ee];q(se)&&(s[ee]=se.bind(n))}if(r){const ee=r.call(n,n);ae(ee)&&(e.data=$s(ee))}if(Dr=!0,o)for(const ee in o){const se=o[ee],Ke=q(se)?se.bind(n,n):q(se.get)?se.get.bind(n,n):wt,B=!q(se)&&q(se.set)?se.set.bind(n):wt,qe=_e({get:Ke,set:B});Object.defineProperty(s,ee,{enumerable:!0,configurable:!0,get:()=>qe.value,set:Ie=>qe.value=Ie})}if(l)for(const ee in l)Ol(l[ee],s,n,ee);if(a){const ee=q(a)?a.call(n):a;Reflect.ownKeys(ee).forEach(se=>{vs(se,ee[se])})}u&&Ho(u,e,"c");function re(ee,se){$(se)?se.forEach(Ke=>ee(Ke.bind(n))):se&&ee(se.bind(n))}if(re(Xc,f),re(Ys,p),re(Zc,m),re(lo,E),re(Jc,x),re(Yc,k),re(su,A),re(nu,Y),re(tu,j),re(ao,_),re(co,T),re(eu,N),$(Z))if(Z.length){const ee=e.exposed||(e.exposed={});Z.forEach(se=>{Object.defineProperty(ee,se,{get:()=>n[se],set:Ke=>n[se]=Ke,enumerable:!0})})}else e.exposed||(e.exposed={});J&&e.render===wt&&(e.render=J),ne!=null&&(e.inheritAttrs=ne),L&&(e.components=L),te&&(e.directives=te),N&&Al(e)}function au(e,t,n=wt){$(e)&&(e=zr(e));for(const s in e){const r=e[s];let o;ae(r)?"default"in r?o=it(r.from||s,r.default,!0):o=it(r.from||s):o=it(r),Oe(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[s]=o}}function Ho(e,t,n){nt($(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ol(e,t,n,s){let r=s.includes(".")?Sl(n,s):()=>n[s];if(ye(e)){const o=t[e];q(o)&&Et(r,o)}else if(q(e))Et(r,e.bind(n));else if(ae(e))if($(e))e.forEach(o=>Ol(o,t,n,s));else{const o=q(e.handler)?e.handler.bind(n):t[e.handler];q(o)&&Et(r,o,e)}}function Il(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let a;return l?a=l:!r.length&&!n&&!s?a=t:(a={},r.length&&r.forEach(c=>ks(a,c,i,!0)),ks(a,t,i)),ae(t)&&o.set(t,a),a}function ks(e,t,n,s=!1){const{mixins:r,extends:o}=t;o&&ks(e,o,n,!0),r&&r.forEach(i=>ks(e,i,n,!0));for(const i in t)if(!(s&&i==="expose")){const l=cu[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const cu={data:Bo,props:Go,emits:Go,methods:Hn,computed:Hn,beforeCreate:Ve,created:Ve,beforeMount:Ve,mounted:Ve,beforeUpdate:Ve,updated:Ve,beforeDestroy:Ve,beforeUnmount:Ve,destroyed:Ve,unmounted:Ve,activated:Ve,deactivated:Ve,errorCaptured:Ve,serverPrefetch:Ve,components:Hn,directives:Hn,watch:fu,provide:Bo,inject:uu};function Bo(e,t){return t?e?function(){return Ce(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function uu(e,t){return Hn(zr(e),zr(t))}function zr(e){if($(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ue(t)}Modifiers`]||e[`${Yt(t)}Modifiers`];function mu(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ge;let r=n;const o=t.startsWith("update:"),i=o&&hu(s,t.slice(7));i&&(i.trim&&(r=n.map(u=>ye(u)?u.trim():u)),i.number&&(r=n.map(Ja)));let l,a=s[l=or(t)]||s[l=or(Ue(t))];!a&&o&&(a=s[l=or(Yt(t))]),a&&nt(a,e,6,r);const c=s[l+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,nt(c,e,6,r)}}const gu=new WeakMap;function Ml(e,t,n=!1){const s=n?gu:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const o=e.emits;let i={},l=!1;if(!q(e)){const a=c=>{const u=Ml(c,t,!0);u&&(l=!0,Ce(i,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!l?(ae(e)&&s.set(e,null),null):($(o)?o.forEach(a=>i[a]=null):Ce(i,o),ae(e)&&s.set(e,i),i)}function Xs(e,t){return!e||!Ls(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),ue(e,t[0].toLowerCase()+t.slice(1))||ue(e,Yt(t))||ue(e,t))}function Uo(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[o],slots:i,attrs:l,emit:a,render:c,renderCache:u,props:f,data:p,setupState:m,ctx:E,inheritAttrs:x}=e,k=Cs(e);let I,_;try{if(n.shapeFlag&4){const T=r||s,J=T;I=xt(c.call(J,T,u,f,m,p,E)),_=l}else{const T=t;I=xt(T.length>1?T(f,{attrs:l,slots:i,emit:a}):T(f,null)),_=t.props?l:bu(l)}}catch(T){Mt.length=0,qs(T,e,1),I=de(at)}let M=I;if(_&&x!==!1){const T=Object.keys(_),{shapeFlag:J}=M;T.length&&J&7&&(o&&T.some(Ds)&&(_=vu(_,o)),M=Jt(M,_,!1,!0))}return n.dirs&&(M=Jt(M,null,!1,!0),M.dirs=M.dirs?M.dirs.concat(n.dirs):n.dirs),n.transition&&Zn(M,n.transition),I=M,Cs(k),I}const bu=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ls(n))&&((t||(t={}))[n]=e[n]);return t},vu=(e,t)=>{const n={};for(const s in e)(!Ds(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function yu(e,t,n){const{props:s,children:r,component:o}=e,{props:i,children:l,patchFlag:a}=t,c=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?$o(s,i,c):!!i;if(a&8){const u=t.dynamicProps;for(let f=0;fObject.create(Dl),Fl=e=>Object.getPrototypeOf(e)===Dl;function xu(e,t,n,s=!1){const r={},o=zl();e.propsDefaults=Object.create(null),Vl(e,t,r,o);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);n?e.props=s?r:hl(r):e.type.props?e.props=r:e.props=o,e.attrs=o}function wu(e,t,n,s){const{props:r,attrs:o,vnode:{patchFlag:i}}=e,l=ie(r),[a]=e.propsOptions;let c=!1;if((s||i>0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let f=0;f{a=!0;const[p,m]=jl(f,t,!0);Ce(i,p),m&&l.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!o&&!a)return ae(e)&&s.set(e,_n),_n;if($(o))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",fo=e=>$(e)?e.map(xt):[xt(e)],Eu=(e,t,n)=>{if(t._n)return t;const s=Ye((...r)=>fo(t(...r)),n);return s._c=!1,s},Hl=(e,t,n)=>{const s=e._ctx;for(const r in e){if(uo(r))continue;const o=e[r];if(q(o))t[r]=Eu(r,o,s);else if(o!=null){const i=fo(o);t[r]=()=>i}}},Bl=(e,t)=>{const n=fo(t);e.slots.default=()=>n},Gl=(e,t,n)=>{for(const s in t)(n||!uo(s))&&(e[s]=t[s])},Cu=(e,t,n)=>{const s=e.slots=zl();if(e.vnode.shapeFlag&32){const r=t._;r?(Gl(s,t,n),n&&$i(s,"_",r,!0)):Hl(t,s)}else t&&Bl(e,t)},Au=(e,t,n)=>{const{vnode:s,slots:r}=e;let o=!0,i=ge;if(s.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:Gl(r,t,n):(o=!t.$stable,Hl(t,r)),i=t}else t&&(Bl(e,t),i={default:1});if(o)for(const l in r)!uo(l)&&i[l]==null&&delete r[l]},je=Ou;function ku(e){return Ru(e)}function Ru(e,t){const n=js();n.__VUE__=!0;const{insert:s,remove:r,patchProp:o,createElement:i,createText:l,createComment:a,setText:c,setElementText:u,parentNode:f,nextSibling:p,setScopeId:m=wt,insertStaticContent:E}=e,x=(d,h,g,y=null,w=null,b=null,O=void 0,P=null,R=!!h.dynamicChildren)=>{if(d===h)return;d&&!bn(d,h)&&(y=v(d),Ie(d,w,b,!0),d=null),h.patchFlag===-2&&(R=!1,h.dynamicChildren=null);const{type:S,ref:W,shapeFlag:D}=h;switch(S){case Zs:k(d,h,g,y);break;case at:I(d,h,g,y);break;case hr:d==null&&_(h,g,y,O);break;case Pe:L(d,h,g,y,w,b,O,P,R);break;default:D&1?J(d,h,g,y,w,b,O,P,R):D&6?te(d,h,g,y,w,b,O,P,R):(D&64||D&128)&&S.process(d,h,g,y,w,b,O,P,R,G)}W!=null&&w?Wn(W,d&&d.ref,b,h||d,!h):W==null&&d&&d.ref!=null&&Wn(d.ref,null,b,d,!0)},k=(d,h,g,y)=>{if(d==null)s(h.el=l(h.children),g,y);else{const w=h.el=d.el;h.children!==d.children&&c(w,h.children)}},I=(d,h,g,y)=>{d==null?s(h.el=a(h.children||""),g,y):h.el=d.el},_=(d,h,g,y)=>{[d.el,d.anchor]=E(d.children,h,g,y,d.el,d.anchor)},M=({el:d,anchor:h},g,y)=>{let w;for(;d&&d!==h;)w=p(d),s(d,g,y),d=w;s(h,g,y)},T=({el:d,anchor:h})=>{let g;for(;d&&d!==h;)g=p(d),r(d),d=g;r(h)},J=(d,h,g,y,w,b,O,P,R)=>{if(h.type==="svg"?O="svg":h.type==="math"&&(O="mathml"),d==null)Y(h,g,y,w,b,O,P,R);else{const S=d.el&&d.el._isVueCE?d.el:null;try{S&&S._beginPatch(),N(d,h,w,b,O,P,R)}finally{S&&S._endPatch()}}},Y=(d,h,g,y,w,b,O,P)=>{let R,S;const{props:W,shapeFlag:D,transition:U,dirs:K}=d;if(R=d.el=i(d.type,b,W&&W.is,W),D&8?u(R,d.children):D&16&&A(d.children,R,null,y,w,pr(d,b),O,P),K&&Xt(d,null,y,"created"),j(R,d,d.scopeId,O,y),W){for(const me in W)me!=="value"&&!Gn(me)&&o(R,me,null,W[me],b,y);"value"in W&&o(R,"value",null,W.value,b),(S=W.onVnodeBeforeMount)&&ht(S,y,d)}K&&Xt(d,null,y,"beforeMount");const oe=Tu(w,U);oe&&U.beforeEnter(R),s(R,h,g),((S=W&&W.onVnodeMounted)||oe||K)&&je(()=>{try{S&&ht(S,y,d),oe&&U.enter(R),K&&Xt(d,null,y,"mounted")}finally{}},w)},j=(d,h,g,y,w)=>{if(g&&m(d,g),y)for(let b=0;b{for(let S=R;S{const P=h.el=d.el;let{patchFlag:R,dynamicChildren:S,dirs:W}=h;R|=d.patchFlag&16;const D=d.props||ge,U=h.props||ge;let K;if(g&&Zt(g,!1),(K=U.onVnodeBeforeUpdate)&&ht(K,g,h,d),W&&Xt(h,d,g,"beforeUpdate"),g&&Zt(g,!0),S&&(!d.dynamicChildren||d.dynamicChildren.length!==S.length)&&(R=0,O=!1,S=null),(D.innerHTML&&U.innerHTML==null||D.textContent&&U.textContent==null)&&u(P,""),S?Z(d.dynamicChildren,S,P,g,y,pr(h,w),b):O||se(d,h,P,null,g,y,pr(h,w),b,!1),R>0){if(R&16)ne(P,D,U,g,w);else if(R&2&&D.class!==U.class&&o(P,"class",null,U.class,w),R&4&&o(P,"style",D.style,U.style,w),R&8){const oe=h.dynamicProps;for(let me=0;me{K&&ht(K,g,h,d),W&&Xt(h,d,g,"updated")},y)},Z=(d,h,g,y,w,b,O)=>{for(let P=0;P{if(h!==g){if(h!==ge)for(const b in h)!Gn(b)&&!(b in g)&&o(d,b,h[b],null,w,y);for(const b in g){if(Gn(b))continue;const O=g[b],P=h[b];O!==P&&b!=="value"&&o(d,b,P,O,w,y)}"value"in g&&o(d,"value",h.value,g.value,w)}},L=(d,h,g,y,w,b,O,P,R)=>{const S=h.el=d?d.el:l(""),W=h.anchor=d?d.anchor:l("");let{patchFlag:D,dynamicChildren:U,slotScopeIds:K}=h;K&&(P=P?P.concat(K):K),d==null?(s(S,g,y),s(W,g,y),A(h.children||[],g,W,w,b,O,P,R)):D>0&&D&64&&U&&d.dynamicChildren&&d.dynamicChildren.length===U.length?(Z(d.dynamicChildren,U,g,w,b,O,P),(h.key!=null||w&&h===w.subTree)&&po(d,h,!0)):se(d,h,g,W,w,b,O,P,R)},te=(d,h,g,y,w,b,O,P,R)=>{h.slotScopeIds=P,d==null?h.shapeFlag&512?w.ctx.activate(h,g,y,O,R):be(h,g,y,w,b,O,R):Se(d,h,R)},be=(d,h,g,y,w,b,O)=>{const P=d.component=Du(d,y,w);if(kl(d)&&(P.ctx.renderer=G),zu(P,!1,O),P.asyncDep){if(w&&w.registerDep(P,re,O),!d.el){const R=P.subTree=de(at);I(null,R,h,g),d.placeholder=R.el}}else re(P,d,h,g,w,b,O)},Se=(d,h,g)=>{const y=h.component=d.component;if(yu(d,h,g))if(y.asyncDep&&!y.asyncResolved){ee(y,h,g);return}else y.next=h,y.update();else h.el=d.el,y.vnode=h},re=(d,h,g,y,w,b,O)=>{const P=()=>{if(d.isMounted){let{next:D,bu:U,u:K,parent:oe,vnode:me}=d;{const dt=Ul(d);if(dt){D&&(D.el=me.el,ee(d,D,O)),dt.asyncDep.then(()=>{je(()=>{d.isUnmounted||S()},w)});return}}let he=D,Ee;Zt(d,!1),D?(D.el=me.el,ee(d,D,O)):D=me,U&&ir(U),(Ee=D.props&&D.props.onVnodeBeforeUpdate)&&ht(Ee,oe,D,me),Zt(d,!0);const Ne=Uo(d),ft=d.subTree;d.subTree=Ne,x(ft,Ne,f(ft.el),v(ft),d,w,b),D.el=Ne.el,he===null&&_u(d,Ne.el),K&&je(K,w),(Ee=D.props&&D.props.onVnodeUpdated)&&je(()=>ht(Ee,oe,D,me),w)}else{let D;const{el:U,props:K}=h,{bm:oe,m:me,parent:he,root:Ee,type:Ne}=d,ft=Sn(h);Zt(d,!1),oe&&ir(oe),!ft&&(D=K&&K.onVnodeBeforeMount)&&ht(D,he,h),Zt(d,!0);{Ee.ce&&Ee.ce._hasShadowRoot()&&Ee.ce._injectChildStyle(Ne,d.parent?d.parent.type:void 0);const dt=d.subTree=Uo(d);x(null,dt,g,y,d,w,b),h.el=dt.el}if(me&&je(me,w),!ft&&(D=K&&K.onVnodeMounted)){const dt=h;je(()=>ht(D,he,dt),w)}(h.shapeFlag&256||he&&Sn(he.vnode)&&he.vnode.shapeFlag&256)&&d.a&&je(d.a,w),d.isMounted=!0,h=g=y=null}};d.scope.on();const R=d.effect=new Xi(P);d.scope.off();const S=d.update=R.run.bind(R),W=d.job=R.runIfDirty.bind(R);W.i=d,W.id=d.uid,R.scheduler=()=>io(W),Zt(d,!0),S()},ee=(d,h,g)=>{h.component=d;const y=d.vnode.props;d.vnode=h,d.next=null,wu(d,h.props,y,g),Au(d,h.children,g),Lt(),Lo(d),Dt()},se=(d,h,g,y,w,b,O,P,R=!1)=>{const S=d&&d.children,W=d?d.shapeFlag:0,D=h.children,{patchFlag:U,shapeFlag:K}=h;if(U>0){if(U&128){B(S,D,g,y,w,b,O,P,R);return}else if(U&256){Ke(S,D,g,y,w,b,O,P,R);return}}K&8?(W&16&&pe(S,w,b),D!==S&&u(g,D)):W&16?K&16?B(S,D,g,y,w,b,O,P,R):pe(S,w,b,!0):(W&8&&u(g,""),K&16&&A(D,g,y,w,b,O,P,R))},Ke=(d,h,g,y,w,b,O,P,R)=>{d=d||_n,h=h||_n;const S=d.length,W=h.length,D=Math.min(S,W);let U;for(U=0;UW?pe(d,w,b,!0,!1,D):A(h,g,y,w,b,O,P,R,D)},B=(d,h,g,y,w,b,O,P,R)=>{let S=0;const W=h.length;let D=d.length-1,U=W-1;for(;S<=D&&S<=U;){const K=d[S],oe=h[S]=R?Ot(h[S]):xt(h[S]);if(bn(K,oe))x(K,oe,g,null,w,b,O,P,R);else break;S++}for(;S<=D&&S<=U;){const K=d[D],oe=h[U]=R?Ot(h[U]):xt(h[U]);if(bn(K,oe))x(K,oe,g,null,w,b,O,P,R);else break;D--,U--}if(S>D){if(S<=U){const K=U+1,oe=KU)for(;S<=D;)Ie(d[S],w,b,!0),S++;else{const K=S,oe=S,me=new Map;for(S=oe;S<=U;S++){const Je=h[S]=R?Ot(h[S]):xt(h[S]);Je.key!=null&&me.set(Je.key,S)}let he,Ee=0;const Ne=U-oe+1;let ft=!1,dt=0;const In=new Array(Ne);for(S=0;S=Ne){Ie(Je,w,b,!0);continue}let pt;if(Je.key!=null)pt=me.get(Je.key);else for(he=oe;he<=U;he++)if(In[he-oe]===0&&bn(Je,h[he])){pt=he;break}pt===void 0?Ie(Je,w,b,!0):(In[pt-oe]=S+1,pt>=dt?dt=pt:ft=!0,x(Je,h[pt],g,null,w,b,O,P,R),Ee++)}const ko=ft?Pu(In):_n;for(he=ko.length-1,S=Ne-1;S>=0;S--){const Je=oe+S,pt=h[Je],Ro=h[Je+1],To=Je+1{const{el:b,type:O,transition:P,children:R,shapeFlag:S}=d;if(S&6){qe(d.component.subTree,h,g,y);return}if(S&128){d.suspense.move(h,g,y);return}if(S&64){O.move(d,h,g,G);return}if(O===Pe){s(b,h,g);for(let D=0;DP.enter(b),w));else{const{leave:D,delayLeave:U,afterLeave:K}=P,oe=()=>{d.ctx.isUnmounted?r(b):s(b,h,g)},me=()=>{const he=b._isLeaving||!!b[yt];b._isLeaving&&b[yt](!0),P.persisted&&!he?oe():D(b,()=>{oe(),K&&K()})};U?U(b,oe,me):me()}else s(b,h,g)},Ie=(d,h,g,y=!1,w=!1)=>{const{type:b,props:O,ref:P,children:R,dynamicChildren:S,shapeFlag:W,patchFlag:D,dirs:U,cacheIndex:K,memo:oe}=d;if(D===-2&&(w=!1),P!=null&&(Lt(),Wn(P,null,g,d,!0),Dt()),K!=null&&(h.renderCache[K]=void 0),W&256){h.ctx.deactivate(d);return}const me=W&1&&U,he=!Sn(d);let Ee;if(he&&(Ee=O&&O.onVnodeBeforeUnmount)&&ht(Ee,h,d),W&6)xe(d.component,g,y);else{if(W&128){d.suspense.unmount(g,y);return}me&&Xt(d,null,h,"beforeUnmount"),W&64?d.type.remove(d,h,g,G,y):S&&!S.hasOnce&&(b!==Pe||D>0&&D&64)?pe(S,h,g,!1,!0):(b===Pe&&D&384||!w&&W&16)&&pe(R,h,g),y&&At(d)}const Ne=oe!=null&&K==null;(he&&(Ee=O&&O.onVnodeUnmounted)||me||Ne)&&je(()=>{Ee&&ht(Ee,h,d),me&&Xt(d,null,h,"unmounted"),Ne&&(d.el=null)},g)},At=d=>{const{type:h,el:g,anchor:y,transition:w}=d;if(h===Pe){ut(g,y);return}if(h===hr){T(d);return}const b=()=>{r(g),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(d.shapeFlag&1&&w&&!w.persisted){const{leave:O,delayLeave:P}=w,R=()=>O(g,b);P?P(d.el,b,R):R()}else b()},ut=(d,h)=>{let g;for(;d!==h;)g=p(d),r(d),d=g;r(h)},xe=(d,h,g)=>{const{bum:y,scope:w,job:b,subTree:O,um:P,m:R,a:S}=d;Ko(R),Ko(S),y&&ir(y),w.stop(),b&&(b.flags|=8,Ie(O,d,h,g)),P&&je(P,h),je(()=>{d.isUnmounted=!0},h)},pe=(d,h,g,y=!1,w=!1,b=0)=>{for(let O=b;O{if(d.shapeFlag&6)return v(d.component.subTree);if(d.shapeFlag&128)return d.suspense.next();const h=p(d.anchor||d.el),g=h&&h[El];return g?p(g):h};let z=!1;const C=(d,h,g)=>{let y;d==null?h._vnode&&(Ie(h._vnode,null,null,!0),y=h._vnode.component):x(h._vnode||null,d,h,null,null,null,g),h._vnode=d,z||(z=!0,Lo(y),_l(),z=!1)},G={p:x,um:Ie,m:qe,r:At,mt:be,mc:A,pc:se,pbc:Z,n:v,o:e};return{render:C,hydrate:void 0,createApp:pu(C)}}function pr({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Zt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Tu(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function po(e,t,n=!1){const s=e.children,r=t.children;if($(s)&&$(r))for(let o=0;o>1,e[n[l]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function Ul(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Ul(t)}function Ko(e){if(e)for(let t=0;te.__isSuspense;function Ou(e,t){t&&t.pendingBranch?$(e)?t.effects.push(...e):t.effects.push(e):zc(e)}const Pe=Symbol.for("v-fgt"),Zs=Symbol.for("v-txt"),at=Symbol.for("v-cmt"),hr=Symbol.for("v-stc"),Mt=[];let Ge=null;function fe(e=!1){Mt.push(Ge=e?null:[])}function ho(){Mt.pop(),Ge=Mt[Mt.length-1]||null}let kn=1;function Rs(e,t=!1){kn+=e,e<0&&Ge&&t&&(Ge.hasOnce=!0)}function Kl(e){return e.dynamicChildren=kn>0?Ge||_n:null,ho(),kn>0&&Ge&&Ge.push(e),e}function Qe(e,t,n,s,r,o){return Kl(le(e,t,n,s,r,o,!0))}function ze(e,t,n,s,r){return Kl(de(e,t,n,s,r,!0))}function es(e){return e?e.__v_isVNode===!0:!1}function bn(e,t){return e.type===t.type&&e.key===t.key}const ql=({key:e})=>e??null,ys=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ye(e)||Oe(e)||q(e)?{i:Me,r:e,k:t,f:!!n}:e:null);function le(e,t=null,n=null,s=0,r=null,o=e===Pe?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ql(t),ref:t&&ys(t),scopeId:wl,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Me};return l?(Ps(a,n),o&128&&e.normalize(a)):n&&(a.shapeFlag|=ye(n)?8:16),kn>0&&!i&&Ge&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&Ge.push(a),a}const de=Iu;function Iu(e,t=null,n=null,s=0,r=null,o=!1){if((!e||e===Tl)&&(e=at),es(e)){const l=Jt(e,t,!0);return n&&Ps(l,n),kn>0&&!o&&Ge&&(l.shapeFlag&6?Ge[Ge.indexOf(e)]=l:Ge.push(l)),l.patchFlag=-2,l}if(Bu(e)&&(e=e.__vccOpts),t){t=Nu(t);let{class:l,style:a}=t;l&&!ye(l)&&(t.class=$e(l)),ae(a)&&(Ks(a)&&!$(a)&&(a=Ce({},a)),t.style=Hs(a))}const i=ye(e)?1:Wl(e)?128:Bc(e)?64:ae(e)?4:q(e)?2:0;return le(e,t,n,s,r,i,o,!0)}function Nu(e){return e?Ks(e)||Fl(e)?Ce({},e):e:null}function Jt(e,t,n=!1,s=!1){const{props:r,ref:o,patchFlag:i,children:l,transition:a}=e,c=t?mo(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&ql(c),ref:t&&t.ref?n&&o?$(o)?o.concat(ys(t)):[o,ys(t)]:ys(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Pe?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Jt(e.ssContent),ssFallback:e.ssFallback&&Jt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&Zn(u,a.clone(u)),u}function Cn(e=" ",t=0){return de(Zs,null,e,t)}function Ts(e="",t=!1){return t?(fe(),ze(at,null,e)):de(at,null,e)}function xt(e){return e==null||typeof e=="boolean"?de(at):$(e)?de(Pe,null,e.slice()):es(e)?Ot(e):de(Zs,null,String(e))}function Ot(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Jt(e)}function Ps(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if($(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Ps(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Fl(t)?t._ctx=Me:r===3&&Me&&(Me.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(q(t)){if(s&65){Ps(e,{default:t});return}t={default:t,_ctx:Me},n=32}else t=String(t),s&64?(n=16,t=[Cn(t)]):n=8;e.children=t,e.shapeFlag|=n}function mo(...e){const t={};for(let n=0;nFe||Me;let Os,Vr;{const e=js(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),o=>{r.length>1?r.forEach(i=>i(o)):r[0](o)}};Os=t("__VUE_INSTANCE_SETTERS__",n=>Fe=n),Vr=t("__VUE_SSR_SETTERS__",n=>ts=n)}const cs=e=>{const t=Fe;return Os(e),e.scope.on(),()=>{e.scope.off(),Os(t)}},qo=()=>{Fe&&Fe.scope.off(),Os(null)};function Jl(e){return e.vnode.shapeFlag&4}let ts=!1;function zu(e,t=!1,n=!1){t&&Vr(t);const{props:s,children:r}=e.vnode,o=Jl(e);xu(e,s,o,t),Cu(e,r,n||t);const i=o?Fu(e,t):void 0;return t&&Vr(!1),i}function Fu(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,iu);const{setup:s}=n;if(s){Lt();const r=e.setupContext=s.length>1?ju(e):null,o=cs(e),i=ls(s,e,0,[e.props,r]),l=Bi(i);if(Dt(),o(),(l||e.sp)&&!Sn(e)&&Al(e),l){if(i.then(qo,qo),t)return i.then(a=>{Jo(e,a)}).catch(a=>{qs(a,e,0)});e.asyncDep=i}else Jo(e,i)}else Yl(e)}function Jo(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ae(t)&&(e.setupState=gl(t)),Yl(e)}function Yl(e,t,n){const s=e.type;e.render||(e.render=s.render||wt);{const r=cs(e);Lt();try{lu(e)}finally{Dt(),r()}}}const Vu={get(e,t){return De(e,"get",""),e[t]}};function ju(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Vu),slots:e.slots,emit:e.emit,expose:t}}function er(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(gl(Sc(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Kn)return Kn[n](e)},has(t,n){return n in t||n in Kn}})):e.proxy}function Hu(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function Bu(e){return q(e)&&"__vccOpts"in e}const _e=(e,t)=>Ic(e,t,ts);function qt(e,t,n){try{Rs(-1);const s=arguments.length;return s===2?ae(t)&&!$(t)?es(t)?de(e,null,[t]):de(e,t):de(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&es(n)&&(n=[n]),de(e,t,n))}finally{Rs(1)}}function Em(e,t,n,s){const r=n[s];if(r&&Gu(r,e))return r;const o=t();return o.memo=e.slice(),o.cacheIndex=s,n[s]=o}function Gu(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let s=0;s0&&Ge&&Ge.push(e),!0}const Uu="3.5.40";/** +* @vue/runtime-dom v3.5.40 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let jr;const Yo=typeof window<"u"&&window.trustedTypes;if(Yo)try{jr=Yo.createPolicy("vue",{createHTML:e=>e})}catch{}const Ql=jr?e=>jr.createHTML(e):e=>e,$u="http://www.w3.org/2000/svg",Wu="http://www.w3.org/1998/Math/MathML",Pt=typeof document<"u"?document:null,Qo=Pt&&Pt.createElement("template"),Ku={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Pt.createElementNS($u,e):t==="mathml"?Pt.createElementNS(Wu,e):n?Pt.createElement(e,{is:n}):Pt.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Pt.createTextNode(e),createComment:e=>Pt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Pt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,o){const i=n?n.previousSibling:t.lastChild;if(r&&(r===o||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===o||!(r=r.nextSibling)););else{Qo.innerHTML=Ql(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Qo.content;if(s==="svg"||s==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},jt="transition",Ln="animation",Rn=Symbol("_vtc"),Xl={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},qu=Ce({},Kc,Xl),en=(e,t=[])=>{$(e)?e.forEach(n=>n(...t)):e&&e(...t)},Xo=e=>e?$(e)?e.some(t=>t.length>1):e.length>1:!1;function Ju(e){const t={};for(const L in e)L in Xl||(t[L]=e[L]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=o,appearActiveClass:c=i,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,E=Yu(r),x=E&&E[0],k=E&&E[1],{onBeforeEnter:I,onEnter:_,onEnterCancelled:M,onLeave:T,onLeaveCancelled:J,onBeforeAppear:Y=I,onAppear:j=_,onAppearCancelled:A=M}=t,N=(L,te,be,Se)=>{L._enterCancelled=Se,Ut(L,te?u:l),Ut(L,te?c:i),be&&be()},Z=(L,te)=>{L._isLeaving=!1,Ut(L,f),Ut(L,m),Ut(L,p),te&&te()},ne=L=>(te,be)=>{const Se=L?j:_,re=()=>N(te,L,be);en(Se,[te,re]),Zo(()=>{Ut(te,L?a:o),bt(te,L?u:l),Xo(Se)||ei(te,s,x,re)})};return Ce(t,{onBeforeEnter(L){en(I,[L]),bt(L,o),bt(L,i)},onBeforeAppear(L){en(Y,[L]),bt(L,a),bt(L,c)},onEnter:ne(!1),onAppear:ne(!0),onLeave(L,te){L._isLeaving=!0;const be=()=>Z(L,te);bt(L,f),L._enterCancelled?(bt(L,p),Hr(L)):(Hr(L),bt(L,p)),Zo(()=>{L._isLeaving&&(Ut(L,f),bt(L,m),Xo(T)||ei(L,s,k,be))}),en(T,[L,be])},onEnterCancelled(L){N(L,!1,void 0,!0),en(M,[L])},onAppearCancelled(L){N(L,!0,void 0,!0),en(A,[L])},onLeaveCancelled(L){Z(L),en(J,[L])}})}function Yu(e){if(e==null)return null;if(ae(e))return[mr(e.enter),mr(e.leave)];{const t=mr(e);return[t,t]}}function mr(e){return Ya(e)}function bt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Rn]||(e[Rn]=new Set)).add(t)}function Ut(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Rn];n&&(n.delete(t),n.size||(e[Rn]=void 0))}function Zo(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Qu=0;function ei(e,t,n,s){const r=e._endId=++Qu,o=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(o,n);const{type:i,timeout:l,propCount:a}=Zl(e,t);if(!i)return s();const c=i+"end";let u=0;const f=()=>{e.removeEventListener(c,p),o()},p=m=>{m.target===e&&++u>=a&&f()};setTimeout(()=>{u(n[E]||"").split(", "),r=s(`${jt}Delay`),o=s(`${jt}Duration`),i=ti(r,o),l=s(`${Ln}Delay`),a=s(`${Ln}Duration`),c=ti(l,a);let u=null,f=0,p=0;t===jt?i>0&&(u=jt,f=i,p=o.length):t===Ln?c>0&&(u=Ln,f=c,p=a.length):(f=Math.max(i,c),u=f>0?i>c?jt:Ln:null,p=u?u===jt?o.length:a.length:0);const m=u===jt&&/\b(?:transform|all)(?:,|$)/.test(s(`${jt}Property`).toString());return{type:u,timeout:f,propCount:p,hasTransform:m}}function ti(e,t){for(;e.lengthni(n)+ni(e[s])))}function ni(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Hr(e){return(e?e.ownerDocument:document).body.offsetHeight}function Xu(e,t,n){const s=e[Rn];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Is=Symbol("_vod"),go=Symbol("_vsh"),Cm={name:"show",beforeMount(e,{value:t},{transition:n}){e[Is]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Dn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),Dn(e,!0),s.enter(e)):s.leave(e,()=>{Dn(e,!1)}):Dn(e,t))},beforeUnmount(e,{value:t}){Dn(e,t)}};function Dn(e,t){e.style.display=t?e[Is]:"none",e[go]=!t}const Zu=Symbol(""),ef=/(?:^|;)\s*display\s*:/;function tf(e,t,n){const s=e.style,r=ye(n);let o=!1;if(n&&!r){if(t)if(ye(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&Bn(s,l,"")}else for(const i in t)n[i]==null&&Bn(s,i,"");for(const i in n){i==="display"&&(o=!0);const l=n[i];l!=null?sf(e,i,!ye(t)&&t?t[i]:void 0,l)||Bn(s,i,l):Bn(s,i,"")}}else if(r){if(t!==n){const i=s[Zu];i&&(n+=";"+i),s.cssText=n,o=ef.test(n)}}else t&&e.removeAttribute("style");Is in e&&(e[Is]=o?s.display:"",e[go]&&(s.display="none"))}const si=/\s*!important$/;function Bn(e,t,n){if($(n))n.forEach(s=>Bn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=nf(e,t);si.test(n)?e.setProperty(Yt(s),n.replace(si,""),"important"):e[s]=n}}const ri=["Webkit","Moz","ms"],gr={};function nf(e,t){const n=gr[t];if(n)return n;let s=Ue(t);if(s!=="filter"&&s in e)return gr[t]=s;s=Vs(s);for(let r=0;rbr||(ff.then(()=>br=0),br=Date.now());function pf(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const r=n.value;if($(r)){const o=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{o.call(s),s._stopped=!0};const i=r.slice(),l=[s];for(let a=0;ae.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,hf=(e,t,n,s,r,o)=>{const i=r==="svg";t==="class"?Xu(e,s,i):t==="style"?tf(e,n,s):Ls(t)?Ds(t)||lf(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):mf(e,t,s,i))?(li(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ii(e,t,s,i,o,t!=="value")):e._isVueCE&&(gf(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!ye(s)))?li(e,Ue(t),s,o,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),ii(e,t,s,i))};function mf(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&ci(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return ci(t)&&ye(n)?!1:t in e}function gf(e,t){const n=e._def.props;if(!n)return!1;const s=Ue(t);return Array.isArray(n)?n.some(r=>Ue(r)===s):Object.keys(n).some(r=>Ue(r)===s)}const ea=new WeakMap,ta=new WeakMap,Ns=Symbol("_moveCb"),ui=Symbol("_enterCb"),bf=e=>(delete e.props.mode,e),vf=bf({name:"TransitionGroup",props:Ce({},qu,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=dn(),s=Wc();let r,o;return lo(()=>{if(!r.length)return;const i=e.moveClass||`${e.name||"v"}-move`;if(!Sf(r[0].el,n.vnode.el,i)){r=[];return}r.forEach(_f),r.forEach(xf);const l=r.filter(wf);Hr(n.vnode.el),l.forEach(a=>{const c=a.el,u=c.style;bt(c,i),u.transform=u.webkitTransform=u.transitionDuration="";const f=c[Ns]=p=>{p&&p.target!==c||(!p||p.propertyName.endsWith("transform"))&&(c.removeEventListener("transitionend",f),c[Ns]=null,Ut(c,i))};c.addEventListener("transitionend",f)}),r=[]}),()=>{const i=ie(e),l=Ju(i);let a=i.tag||Pe;if(r=[],o)for(let c=0;c{l.split(/\s+/).forEach(a=>a&&s.classList.remove(a))}),n.split(/\s+/).forEach(l=>l&&s.classList.add(l)),s.style.display="none";const o=t.nodeType===1?t:t.parentNode;o.appendChild(s);const{hasTransform:i}=Zl(s);return o.removeChild(s),i}const Ef=["ctrl","shift","alt","meta"],Cf={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)=>Ef.some(n=>e[`${n}Key`]&&!t.includes(n))},Af=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((r,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(r=>{if(!("key"in r))return;const o=Yt(r.key);if(t.some(i=>i===o||kf[i]===o))return e(r)}))},Rf=Ce({patchProp:hf},Ku);let fi;function Tf(){return fi||(fi=ku(Rf))}const Pf=((...e)=>{const t=Tf().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=If(s);if(!r)return;const o=t._component;!q(o)&&!o.render&&!o.template&&(o.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=n(r,!1,Of(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t});function Of(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function If(e){return ye(e)?document.querySelector(e):e}/*! + * vue-router v4.6.4 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */const vn=typeof document<"u";function sa(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Nf(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&sa(e.default)}const ce=Object.assign;function vr(e,t){const n={};for(const s in t){const r=t[s];n[s]=ct(r)?r.map(e):e(r)}return n}const qn=()=>{},ct=Array.isArray;function di(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const ra=/#/g,Mf=/&/g,Lf=/\//g,Df=/=/g,zf=/\?/g,oa=/\+/g,Ff=/%5B/g,Vf=/%5D/g,ia=/%5E/g,jf=/%60/g,la=/%7B/g,Hf=/%7C/g,aa=/%7D/g,Bf=/%20/g;function bo(e){return e==null?"":encodeURI(""+e).replace(Hf,"|").replace(Ff,"[").replace(Vf,"]")}function Gf(e){return bo(e).replace(la,"{").replace(aa,"}").replace(ia,"^")}function Br(e){return bo(e).replace(oa,"%2B").replace(Bf,"+").replace(ra,"%23").replace(Mf,"%26").replace(jf,"`").replace(la,"{").replace(aa,"}").replace(ia,"^")}function Uf(e){return Br(e).replace(Df,"%3D")}function $f(e){return bo(e).replace(ra,"%23").replace(zf,"%3F")}function Wf(e){return $f(e).replace(Lf,"%2F")}function ns(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const Kf=/\/$/,qf=e=>e.replace(Kf,"");function yr(e,t,n="/"){let s,r={},o="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return a=l>=0&&a>l?-1:a,a>=0&&(s=t.slice(0,a),o=t.slice(a,l>0?l:t.length),r=e(o.slice(1))),l>=0&&(s=s||t.slice(0,l),i=t.slice(l,t.length)),s=Xf(s??t,n),{fullPath:s+o+i,path:s,query:r,hash:ns(i)}}function Jf(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function pi(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Yf(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&Tn(t.matched[s],n.matched[r])&&ca(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Tn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function ca(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Qf(e[n],t[n]))return!1;return!0}function Qf(e,t){return ct(e)?hi(e,t):ct(t)?hi(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function hi(e,t){return ct(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Xf(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let o=n.length-1,i,l;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+s.slice(i).join("/")}const Ht={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let Gr=(function(e){return e.pop="pop",e.push="push",e})({}),_r=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Zf(e){if(!e)if(vn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),qf(e)}const ed=/^[^#]+#/;function td(e,t){return e.replace(ed,"#")+t}function nd(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const tr=()=>({left:window.scrollX,top:window.scrollY});function sd(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=nd(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function mi(e,t){return(history.state?history.state.position-t:-1)+e}const Ur=new Map;function rd(e,t){Ur.set(e,t)}function od(e){const t=Ur.get(e);return Ur.delete(e),t}function id(e){return typeof e=="string"||e&&typeof e=="object"}function ua(e){return typeof e=="string"||typeof e=="symbol"}let we=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const fa=Symbol("");we.MATCHER_NOT_FOUND+"",we.NAVIGATION_GUARD_REDIRECT+"",we.NAVIGATION_ABORTED+"",we.NAVIGATION_CANCELLED+"",we.NAVIGATION_DUPLICATED+"";function Pn(e,t){return ce(new Error,{type:e,[fa]:!0},t)}function Rt(e,t){return e instanceof Error&&fa in e&&(t==null||!!(e.type&t))}const ld=["params","query","hash"];function ad(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of ld)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function cd(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;sr&&Br(r)):[s&&Br(s)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+n,r!=null&&(t+="="+r))})}return t}function ud(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=ct(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const fd=Symbol(""),bi=Symbol(""),nr=Symbol(""),vo=Symbol(""),$r=Symbol("");function zn(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Wt(e,t,n,s,r,o=i=>i()){const i=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,a)=>{const c=p=>{p===!1?a(Pn(we.NAVIGATION_ABORTED,{from:n,to:t})):p instanceof Error?a(p):id(p)?a(Pn(we.NAVIGATION_GUARD_REDIRECT,{from:t,to:p})):(i&&s.enterCallbacks[r]===i&&typeof p=="function"&&i.push(p),l())},u=o(()=>e.call(s&&s.instances[r],t,n,c));let f=Promise.resolve(u);e.length<3&&(f=f.then(c)),f.catch(p=>a(p))})}function xr(e,t,n,s,r=o=>o()){const o=[];for(const i of e)for(const l in i.components){let a=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(sa(a)){const c=(a.__vccOpts||a)[t];c&&o.push(Wt(c,n,s,i,l,r))}else{let c=a();o.push(()=>c.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const f=Nf(u)?u.default:u;i.mods[l]=u,i.components[l]=f;const p=(f.__vccOpts||f)[t];return p&&Wt(p,n,s,i,l,r)()}))}}return o}function dd(e,t){const n=[],s=[],r=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iTn(c,l))?s.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(c=>Tn(c,a))||r.push(a))}return[n,s,r]}/*! + * vue-router v4.6.4 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */let pd=()=>location.protocol+"//"+location.host;function da(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let i=r.includes(e.slice(o))?e.slice(o).length:1,l=r.slice(i);return l[0]!=="/"&&(l="/"+l),pi(l,"")}return pi(n,e)+s+r}function hd(e,t,n,s){let r=[],o=[],i=null;const l=({state:p})=>{const m=da(e,location),E=n.value,x=t.value;let k=0;if(p){if(n.value=m,t.value=p,i&&i===E){i=null;return}k=x?p.position-x.position:0}else s(m);r.forEach(I=>{I(n.value,E,{delta:k,type:Gr.pop,direction:k?k>0?_r.forward:_r.back:_r.unknown})})};function a(){i=n.value}function c(p){r.push(p);const m=()=>{const E=r.indexOf(p);E>-1&&r.splice(E,1)};return o.push(m),m}function u(){if(document.visibilityState==="hidden"){const{history:p}=window;if(!p.state)return;p.replaceState(ce({},p.state,{scroll:tr()}),"")}}function f(){for(const p of o)p();o=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:a,listen:c,destroy:f}}function vi(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?tr():null}}function md(e){const{history:t,location:n}=window,s={value:da(e,n)},r={value:t.state};r.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(a,c,u){const f=e.indexOf("#"),p=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+a:pd()+e+a;try{t[u?"replaceState":"pushState"](c,"",p),r.value=c}catch(m){console.error(m),n[u?"replace":"assign"](p)}}function i(a,c){o(a,ce({},t.state,vi(r.value.back,a,r.value.forward,!0),c,{position:r.value.position}),!0),s.value=a}function l(a,c){const u=ce({},r.value,t.state,{forward:a,scroll:tr()});o(u.current,u,!0),o(a,ce({},vi(s.value,a,null),{position:u.position+1},c),!1),s.value=a}return{location:s,state:r,push:l,replace:i}}function gd(e){e=Zf(e);const t=md(e),n=hd(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=ce({location:"",base:e,go:s,createHref:td.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let rn=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var ke=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(ke||{});const bd={type:rn.Static,value:""},vd=/[a-zA-Z0-9_]/;function yd(e){if(!e)return[[]];if(e==="/")return[[bd]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${c}": ${m}`)}let n=ke.Static,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let l=0,a,c="",u="";function f(){c&&(n===ke.Static?o.push({type:rn.Static,value:c}):n===ke.Param||n===ke.ParamRegExp||n===ke.ParamRegExpEnd?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),o.push({type:rn.Param,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function p(){c+=a}for(;lt.length?t.length===1&&t[0]===He.Static+He.Segment?1:-1:0}function pa(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Ed={strict:!1,end:!0,sensitive:!1};function Cd(e,t,n){const s=wd(yd(e.path),n),r=ce(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Ad(e,t){const n=[],s=new Map;t=di(Ed,t);function r(f){return s.get(f)}function o(f,p,m){const E=!m,x=wi(f);x.aliasOf=m&&m.record;const k=di(t,f),I=[x];if("alias"in f){const T=typeof f.alias=="string"?[f.alias]:f.alias;for(const J of T)I.push(wi(ce({},x,{components:m?m.record.components:x.components,path:J,aliasOf:m?m.record:x})))}let _,M;for(const T of I){const{path:J}=T;if(p&&J[0]!=="/"){const Y=p.record.path,j=Y[Y.length-1]==="/"?"":"/";T.path=p.record.path+(J&&j+J)}if(_=Cd(T,p,k),m?m.alias.push(_):(M=M||_,M!==_&&M.alias.push(_),E&&f.name&&!Si(_)&&i(f.name)),ha(_)&&a(_),x.children){const Y=x.children;for(let j=0;j{i(M)}:qn}function i(f){if(ua(f)){const p=s.get(f);p&&(s.delete(f),n.splice(n.indexOf(p),1),p.children.forEach(i),p.alias.forEach(i))}else{const p=n.indexOf(f);p>-1&&(n.splice(p,1),f.record.name&&s.delete(f.record.name),f.children.forEach(i),f.alias.forEach(i))}}function l(){return n}function a(f){const p=Td(f,n);n.splice(p,0,f),f.record.name&&!Si(f)&&s.set(f.record.name,f)}function c(f,p){let m,E={},x,k;if("name"in f&&f.name){if(m=s.get(f.name),!m)throw Pn(we.MATCHER_NOT_FOUND,{location:f});k=m.record.name,E=ce(xi(p.params,m.keys.filter(M=>!M.optional).concat(m.parent?m.parent.keys.filter(M=>M.optional):[]).map(M=>M.name)),f.params&&xi(f.params,m.keys.map(M=>M.name))),x=m.stringify(E)}else if(f.path!=null)x=f.path,m=n.find(M=>M.re.test(x)),m&&(E=m.parse(x),k=m.record.name);else{if(m=p.name?s.get(p.name):n.find(M=>M.re.test(p.path)),!m)throw Pn(we.MATCHER_NOT_FOUND,{location:f,currentLocation:p});k=m.record.name,E=ce({},p.params,f.params),x=m.stringify(E)}const I=[];let _=m;for(;_;)I.unshift(_.record),_=_.parent;return{name:k,path:x,params:E,matched:I,meta:Rd(I)}}e.forEach(f=>o(f));function u(){n.length=0,s.clear()}return{addRoute:o,resolve:c,removeRoute:i,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function xi(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function wi(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:kd(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function kd(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Si(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Rd(e){return e.reduce((t,n)=>ce(t,n.meta),{})}function Td(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;pa(e,t[o])<0?s=o:n=o+1}const r=Pd(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function Pd(e){let t=e;for(;t=t.parent;)if(ha(t)&&pa(e,t)===0)return t}function ha({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Ei(e){const t=it(nr),n=it(vo),s=_e(()=>{const a=H(e.to);return t.resolve(a)}),r=_e(()=>{const{matched:a}=s.value,{length:c}=a,u=a[c-1],f=n.matched;if(!u||!f.length)return-1;const p=f.findIndex(Tn.bind(null,u));if(p>-1)return p;const m=Ci(a[c-2]);return c>1&&Ci(u)===m&&f[f.length-1].path!==m?f.findIndex(Tn.bind(null,a[c-2])):p}),o=_e(()=>r.value>-1&&Md(n.params,s.value.params)),i=_e(()=>r.value>-1&&r.value===n.matched.length-1&&ca(n.params,s.value.params));function l(a={}){if(Nd(a)){const c=t[H(e.replace)?"replace":"push"](H(e.to)).catch(qn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:s,href:_e(()=>s.value.href),isActive:o,isExactActive:i,navigate:l}}function Od(e){return e.length===1?e[0]:e}const Id=We({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"},viewTransition:Boolean},useLink:Ei,setup(e,{slots:t}){const n=$s(Ei(e)),{options:s}=it(nr),r=_e(()=>({[Ai(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Ai(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&Od(t.default(n));return e.custom?o:qt("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),Wr=Id;function Nd(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 Md(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!ct(r)||r.length!==s.length||s.some((o,i)=>o.valueOf()!==r[i].valueOf()))return!1}return!0}function Ci(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Ai=(e,t,n)=>e??t??n,Ld=We({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=it($r),r=_e(()=>e.route||s.value),o=it(bi,0),i=_e(()=>{let c=H(o);const{matched:u}=r.value;let f;for(;(f=u[c])&&!f.components;)c++;return c}),l=_e(()=>r.value.matched[i.value]);vs(bi,_e(()=>i.value+1)),vs(fd,l),vs($r,r);const a=Ze();return Et(()=>[a.value,l.value,e.name],([c,u,f],[p,m,E])=>{u&&(u.instances[f]=c,m&&m!==u&&c&&c===p&&(u.leaveGuards.size||(u.leaveGuards=m.leaveGuards),u.updateGuards.size||(u.updateGuards=m.updateGuards))),c&&u&&(!m||!Tn(u,m)||!p)&&(u.enterCallbacks[f]||[]).forEach(x=>x(c))},{flush:"post"}),()=>{const c=r.value,u=e.name,f=l.value,p=f&&f.components[u];if(!p)return ki(n.default,{Component:p,route:c});const m=f.props[u],E=m?m===!0?c.params:typeof m=="function"?m(c):m:null,k=qt(p,ce({},E,t,{onVnodeUnmounted:I=>{I.component.isUnmounted&&(f.instances[u]=null)},ref:a}));return ki(n.default,{Component:k,route:c})||k}}});function ki(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const yo=Ld;function Dd(e){const t=Ad(e.routes,e),n=e.parseQuery||cd,s=e.stringifyQuery||gi,r=e.history,o=zn(),i=zn(),l=zn(),a=is(Ht);let c=Ht;vn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=vr.bind(null,v=>""+v),f=vr.bind(null,Wf),p=vr.bind(null,ns);function m(v,z){let C,G;return ua(v)?(C=t.getRecordMatcher(v),G=z):G=v,t.addRoute(G,C)}function E(v){const z=t.getRecordMatcher(v);z&&t.removeRoute(z)}function x(){return t.getRoutes().map(v=>v.record)}function k(v){return!!t.getRecordMatcher(v)}function I(v,z){if(z=ce({},z||a.value),typeof v=="string"){const g=yr(n,v,z.path),y=t.resolve({path:g.path},z),w=r.createHref(g.fullPath);return ce(g,y,{params:p(y.params),hash:ns(g.hash),redirectedFrom:void 0,href:w})}let C;if(v.path!=null)C=ce({},v,{path:yr(n,v.path,z.path).path});else{const g=ce({},v.params);for(const y in g)g[y]==null&&delete g[y];C=ce({},v,{params:f(g)}),z.params=f(z.params)}const G=t.resolve(C,z),Q=v.hash||"";G.params=u(p(G.params));const d=Jf(s,ce({},v,{hash:Gf(Q),path:G.path})),h=r.createHref(d);return ce({fullPath:d,hash:Q,query:s===gi?ud(v.query):v.query||{}},G,{redirectedFrom:void 0,href:h})}function _(v){return typeof v=="string"?yr(n,v,a.value.path):ce({},v)}function M(v,z){if(c!==v)return Pn(we.NAVIGATION_CANCELLED,{from:z,to:v})}function T(v){return j(v)}function J(v){return T(ce(_(v),{replace:!0}))}function Y(v,z){const C=v.matched[v.matched.length-1];if(C&&C.redirect){const{redirect:G}=C;let Q=typeof G=="function"?G(v,z):G;return typeof Q=="string"&&(Q=Q.includes("?")||Q.includes("#")?Q=_(Q):{path:Q},Q.params={}),ce({query:v.query,hash:v.hash,params:Q.path!=null?{}:v.params},Q)}}function j(v,z){const C=c=I(v),G=a.value,Q=v.state,d=v.force,h=v.replace===!0,g=Y(C,G);if(g)return j(ce(_(g),{state:typeof g=="object"?ce({},Q,g.state):Q,force:d,replace:h}),z||C);const y=C;y.redirectedFrom=z;let w;return!d&&Yf(s,G,C)&&(w=Pn(we.NAVIGATION_DUPLICATED,{to:y,from:G}),qe(G,G,!0,!1)),(w?Promise.resolve(w):Z(y,G)).catch(b=>Rt(b)?Rt(b,we.NAVIGATION_GUARD_REDIRECT)?b:B(b):se(b,y,G)).then(b=>{if(b){if(Rt(b,we.NAVIGATION_GUARD_REDIRECT))return j(ce({replace:h},_(b.to),{state:typeof b.to=="object"?ce({},Q,b.to.state):Q,force:d}),z||y)}else b=L(y,G,!0,h,Q);return ne(y,G,b),b})}function A(v,z){const C=M(v,z);return C?Promise.reject(C):Promise.resolve()}function N(v){const z=ut.values().next().value;return z&&typeof z.runWithContext=="function"?z.runWithContext(v):v()}function Z(v,z){let C;const[G,Q,d]=dd(v,z);C=xr(G.reverse(),"beforeRouteLeave",v,z);for(const g of G)g.leaveGuards.forEach(y=>{C.push(Wt(y,v,z))});const h=A.bind(null,v,z);return C.push(h),pe(C).then(()=>{C=[];for(const g of o.list())C.push(Wt(g,v,z));return C.push(h),pe(C)}).then(()=>{C=xr(Q,"beforeRouteUpdate",v,z);for(const g of Q)g.updateGuards.forEach(y=>{C.push(Wt(y,v,z))});return C.push(h),pe(C)}).then(()=>{C=[];for(const g of d)if(g.beforeEnter)if(ct(g.beforeEnter))for(const y of g.beforeEnter)C.push(Wt(y,v,z));else C.push(Wt(g.beforeEnter,v,z));return C.push(h),pe(C)}).then(()=>(v.matched.forEach(g=>g.enterCallbacks={}),C=xr(d,"beforeRouteEnter",v,z,N),C.push(h),pe(C))).then(()=>{C=[];for(const g of i.list())C.push(Wt(g,v,z));return C.push(h),pe(C)}).catch(g=>Rt(g,we.NAVIGATION_CANCELLED)?g:Promise.reject(g))}function ne(v,z,C){l.list().forEach(G=>N(()=>G(v,z,C)))}function L(v,z,C,G,Q){const d=M(v,z);if(d)return d;const h=z===Ht,g=vn?history.state:{};C&&(G||h?r.replace(v.fullPath,ce({scroll:h&&g&&g.scroll},Q)):r.push(v.fullPath,Q)),a.value=v,qe(v,z,C,h),B()}let te;function be(){te||(te=r.listen((v,z,C)=>{if(!xe.listening)return;const G=I(v),Q=Y(G,xe.currentRoute.value);if(Q){j(ce(Q,{replace:!0,force:!0}),G).catch(qn);return}c=G;const d=a.value;vn&&rd(mi(d.fullPath,C.delta),tr()),Z(G,d).catch(h=>Rt(h,we.NAVIGATION_ABORTED|we.NAVIGATION_CANCELLED)?h:Rt(h,we.NAVIGATION_GUARD_REDIRECT)?(j(ce(_(h.to),{force:!0}),G).then(g=>{Rt(g,we.NAVIGATION_ABORTED|we.NAVIGATION_DUPLICATED)&&!C.delta&&C.type===Gr.pop&&r.go(-1,!1)}).catch(qn),Promise.reject()):(C.delta&&r.go(-C.delta,!1),se(h,G,d))).then(h=>{h=h||L(G,d,!1),h&&(C.delta&&!Rt(h,we.NAVIGATION_CANCELLED)?r.go(-C.delta,!1):C.type===Gr.pop&&Rt(h,we.NAVIGATION_ABORTED|we.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),ne(G,d,h)}).catch(qn)}))}let Se=zn(),re=zn(),ee;function se(v,z,C){B(v);const G=re.list();return G.length?G.forEach(Q=>Q(v,z,C)):console.error(v),Promise.reject(v)}function Ke(){return ee&&a.value!==Ht?Promise.resolve():new Promise((v,z)=>{Se.add([v,z])})}function B(v){return ee||(ee=!v,be(),Se.list().forEach(([z,C])=>v?C(v):z()),Se.reset()),v}function qe(v,z,C,G){const{scrollBehavior:Q}=e;if(!vn||!Q)return Promise.resolve();const d=!C&&od(mi(v.fullPath,0))||(G||!C)&&history.state&&history.state.scroll||null;return oo().then(()=>Q(v,z,d)).then(h=>h&&sd(h)).catch(h=>se(h,v,z))}const Ie=v=>r.go(v);let At;const ut=new Set,xe={currentRoute:a,listening:!0,addRoute:m,removeRoute:E,clearRoutes:t.clearRoutes,hasRoute:k,getRoutes:x,resolve:I,options:e,push:T,replace:J,go:Ie,back:()=>Ie(-1),forward:()=>Ie(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:re.add,isReady:Ke,install(v){v.component("RouterLink",Wr),v.component("RouterView",yo),v.config.globalProperties.$router=xe,Object.defineProperty(v.config.globalProperties,"$route",{enumerable:!0,get:()=>H(a)}),vn&&!At&&a.value===Ht&&(At=!0,T(r.location).catch(G=>{}));const z={};for(const G in Ht)Object.defineProperty(z,G,{get:()=>a.value[G],enumerable:!0});v.provide(nr,xe),v.provide(vo,hl(z)),v.provide($r,a);const C=v.unmount;ut.add(v),v.unmount=function(){ut.delete(v),ut.size<1&&(c=Ht,te&&te(),te=null,a.value=Ht,At=!1,ee=!1),C()}}};function pe(v){return v.reduce((z,C)=>z.then(()=>N(C)),Promise.resolve())}return xe}function zd(){return it(nr)}function ma(e){return it(vo)}/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fd=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */var hs={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vd=({size:e,strokeWidth:t=2,absoluteStrokeWidth:n,color:s,iconNode:r,name:o,class:i,...l},{slots:a})=>qt("svg",{...hs,width:e||hs.width,height:e||hs.height,stroke:s||hs.stroke,"stroke-width":n?Number(t)*24/Number(e):t,class:["lucide",`lucide-${Fd(o??"icon")}`],...l},[...r.map(c=>qt(...c)),...a.default?[a.default()]:[]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const st=(e,t)=>(n,{slots:s})=>qt(Vd,{...n,iconNode:t,name:e},s);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jd=st("ActivityIcon",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hd=st("CircleCheckIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bd=st("LayoutDashboardIcon",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gd=st("ListFilterIcon",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M7 12h10",key:"b7w52i"}],["path",{d:"M10 18h4",key:"1ulq68"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ud=st("LoaderCircleIcon",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $d=st("LockKeyholeIcon",[["circle",{cx:"12",cy:"16",r:"1",key:"1au0dj"}],["rect",{x:"3",y:"10",width:"18",height:"12",rx:"2",key:"6s8ecr"}],["path",{d:"M7 10V7a5 5 0 0 1 10 0v3",key:"1pqi11"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wd=st("MoonIcon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Kd=st("RadioIcon",[["path",{d:"M4.9 19.1C1 15.2 1 8.8 4.9 4.9",key:"1vaf9d"}],["path",{d:"M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5",key:"u1ii0m"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5",key:"1j5fej"}],["path",{d:"M19.1 4.9C23 8.8 23 15.1 19.1 19",key:"10b0cb"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qd=st("Settings2Icon",[["path",{d:"M20 7h-9",key:"3s1dr2"}],["path",{d:"M14 17H5",key:"gfn3mx"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jd=st("SunIcon",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yd=st("TriangleAlertIcon",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + * @license lucide-vue-next v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qd=st("XIcon",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),ss=Ze([]);let Xd=1;function wr(e,t,n){const s=Xd++;ss.value=[...ss.value,{id:s,title:e,description:n,variant:t}],window.setTimeout(()=>_o(s),t==="error"?6e3:3500)}function _o(e){ss.value=ss.value.filter(t=>t.id!==e)}const Zd={info:(e,t)=>wr(e,"default",t),success:(e,t)=>wr(e,"success",t),error:(e,t)=>wr(e,"error",t)};function ep(){return{toasts:ss,toast:Zd,dismiss:_o}}function ga(e){var t,n,s="";if(typeof e=="string"||typeof e=="number")s+=e;else if(typeof e=="object")if(Array.isArray(e)){var r=e.length;for(t=0;t{const n=new Array(e.length+t.length);for(let s=0;s({classGroupId:e,validator:t}),va=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),Ms="-",Ri=[],sp="arbitrary..",rp=e=>{const t=ip(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:s}=e;return{getClassGroupId:i=>{if(i.startsWith("[")&&i.endsWith("]"))return op(i);const l=i.split(Ms),a=l[0]===""&&l.length>1?1:0;return ya(l,a,t)},getConflictingClassGroupIds:(i,l)=>{if(l){const a=s[i],c=n[i];return a?c?tp(c,a):a:c||Ri}return n[i]||Ri}}},ya=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;const r=e[t],o=n.nextPart.get(r);if(o){const c=ya(e,t+1,o);if(c)return c}const i=n.validators;if(i===null)return;const l=t===0?e.join(Ms):e.slice(t).join(Ms),a=i.length;for(let c=0;ce.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const t=e.slice(1,-1),n=t.indexOf(":"),s=t.slice(0,n);return s?sp+s:void 0})(),ip=e=>{const{theme:t,classGroups:n}=e;return lp(n,t)},lp=(e,t)=>{const n=va();for(const s in e){const r=e[s];xo(r,n,s,t)}return n},xo=(e,t,n,s)=>{const r=e.length;for(let o=0;o{if(typeof e=="string"){cp(e,t,n);return}if(typeof e=="function"){up(e,t,n,s);return}fp(e,t,n,s)},cp=(e,t,n)=>{const s=e===""?t:_a(t,e);s.classGroupId=n},up=(e,t,n,s)=>{if(dp(e)){xo(e(s),t,n,s);return}t.validators===null&&(t.validators=[]),t.validators.push(np(n,e))},fp=(e,t,n,s)=>{const r=Object.entries(e),o=r.length;for(let i=0;i{let n=e;const s=t.split(Ms),r=s.length;for(let o=0;o"isThemeGetter"in e&&e.isThemeGetter===!0,pp=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=Object.create(null),s=Object.create(null);const r=(o,i)=>{n[o]=i,t++,t>e&&(t=0,s=n,n=Object.create(null))};return{get(o){let i=n[o];if(i!==void 0)return i;if((i=s[o])!==void 0)return r(o,i),i},set(o,i){o in n?n[o]=i:r(o,i)}}},Kr="!",Ti=":",hp=[],Pi=(e,t,n,s,r)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:s,isExternal:r}),mp=e=>{const{prefix:t,experimentalParseClassName:n}=e;let s=r=>{const o=[];let i=0,l=0,a=0,c;const u=r.length;for(let x=0;xa?c-a:void 0;return Pi(o,m,p,E)};if(t){const r=t+Ti,o=s;s=i=>i.startsWith(r)?o(i.slice(r.length)):Pi(hp,!1,i,void 0,!0)}if(n){const r=s;s=o=>n({className:o,parseClassName:r})}return s},gp=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((n,s)=>{t.set(n,1e6+s)}),n=>{const s=[];let r=[];for(let o=0;o0&&(r.sort(),s.push(...r),r=[]),s.push(i)):r.push(i)}return r.length>0&&(r.sort(),s.push(...r)),s}},bp=e=>({cache:pp(e.cacheSize),parseClassName:mp(e),sortModifiers:gp(e),postfixLookupClassGroupIds:vp(e),...rp(e)}),vp=e=>{const t=Object.create(null),n=e.postfixLookupClassGroups;if(n)for(let s=0;s{const{parseClassName:n,getClassGroupId:s,getConflictingClassGroupIds:r,sortModifiers:o,postfixLookupClassGroupIds:i}=t,l=[],a=e.trim().split(yp);let c="";for(let u=a.length-1;u>=0;u-=1){const f=a[u],{isExternal:p,modifiers:m,hasImportantModifier:E,baseClassName:x,maybePostfixModifierPosition:k}=n(f);if(p){c=f+(c.length>0?" "+c:c);continue}let I=!!k,_;if(I){const j=x.substring(0,k);_=s(j);const A=_&&i[_]?s(x):void 0;A&&A!==_&&(_=A,I=!1)}else _=s(x);if(!_){if(!I){c=f+(c.length>0?" "+c:c);continue}if(_=s(x),!_){c=f+(c.length>0?" "+c:c);continue}I=!1}const M=m.length===0?"":m.length===1?m[0]:o(m).join(":"),T=E?M+Kr:M,J=T+_;if(l.indexOf(J)>-1)continue;l.push(J);const Y=r(_,I);for(let j=0;j0?" "+c:c)}return c},xp=(...e)=>{let t=0,n,s,r="";for(;t{if(typeof e=="string")return e;let t,n="";for(let s=0;s{let n,s,r,o;const i=a=>{const c=t.reduce((u,f)=>f(u),e());return n=bp(c),s=n.cache.get,r=n.cache.set,o=l,l(a)},l=a=>{const c=s(a);if(c)return c;const u=_p(a,n);return r(a,u),u};return o=i,(...a)=>o(xp(...a))},Sp=[],Ae=e=>{const t=n=>n[e]||Sp;return t.isThemeGetter=!0,t},wa=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Sa=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Ep=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,Cp=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Ap=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,kp=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Rp=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Tp=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Bt=e=>Ep.test(e),X=e=>!!e&&!Number.isNaN(Number(e)),mt=e=>!!e&&Number.isInteger(Number(e)),Sr=e=>e.endsWith("%")&&X(e.slice(0,-1)),Tt=e=>Cp.test(e),Ea=()=>!0,Pp=e=>Ap.test(e)&&!kp.test(e),wo=()=>!1,Op=e=>Rp.test(e),Ip=e=>Tp.test(e),Np=e=>!F(e)&&!V(e),Mp=e=>e.startsWith("@container")&&(e[10]==="/"&&e[11]!==void 0||e[11]==="s"&&e[16]!==void 0&&e.startsWith("-size/",10)||e[11]==="n"&&e[18]!==void 0&&e.startsWith("-normal/",10)),Lp=e=>Qt(e,ka,wo),F=e=>wa.test(e),tn=e=>Qt(e,Ra,Pp),Oi=e=>Qt(e,Gp,X),Dp=e=>Qt(e,Pa,Ea),zp=e=>Qt(e,Ta,wo),Ii=e=>Qt(e,Ca,wo),Fp=e=>Qt(e,Aa,Ip),ms=e=>Qt(e,Oa,Op),V=e=>Sa.test(e),Fn=e=>pn(e,Ra),Vp=e=>pn(e,Ta),Ni=e=>pn(e,Ca),jp=e=>pn(e,ka),Hp=e=>pn(e,Aa),gs=e=>pn(e,Oa,!0),Bp=e=>pn(e,Pa,!0),Qt=(e,t,n)=>{const s=wa.exec(e);return s?s[1]?t(s[1]):n(s[2]):!1},pn=(e,t,n=!1)=>{const s=Sa.exec(e);return s?s[1]?t(s[1]):n:!1},Ca=e=>e==="position"||e==="percentage",Aa=e=>e==="image"||e==="url",ka=e=>e==="length"||e==="size"||e==="bg-size",Ra=e=>e==="length",Gp=e=>e==="number",Ta=e=>e==="family-name",Pa=e=>e==="number"||e==="weight",Oa=e=>e==="shadow",Up=()=>{const e=Ae("color"),t=Ae("font"),n=Ae("text"),s=Ae("font-weight"),r=Ae("tracking"),o=Ae("leading"),i=Ae("breakpoint"),l=Ae("container"),a=Ae("spacing"),c=Ae("radius"),u=Ae("shadow"),f=Ae("inset-shadow"),p=Ae("text-shadow"),m=Ae("drop-shadow"),E=Ae("blur"),x=Ae("perspective"),k=Ae("aspect"),I=Ae("ease"),_=Ae("animate"),M=()=>["auto","avoid","all","avoid-page","page","left","right","column"],T=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],J=()=>[...T(),V,F],Y=()=>["auto","hidden","clip","visible","scroll"],j=()=>["auto","contain","none"],A=()=>[V,F,a],N=()=>[Bt,"full","auto",...A()],Z=()=>[mt,"none","subgrid",V,F],ne=()=>["auto",{span:["full",mt,V,F]},mt,V,F],L=()=>[mt,"auto",V,F],te=()=>["auto","min","max","fr",V,F],be=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],Se=()=>["start","end","center","stretch","center-safe","end-safe"],re=()=>["auto",...A()],ee=()=>[Bt,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...A()],se=()=>[Bt,"screen","full","dvw","lvw","svw","min","max","fit",...A()],Ke=()=>[Bt,"screen","full","lh","dvh","lvh","svh","min","max","fit",...A()],B=()=>[e,V,F],qe=()=>[...T(),Ni,Ii,{position:[V,F]}],Ie=()=>["no-repeat",{repeat:["","x","y","space","round"]}],At=()=>["auto","cover","contain",jp,Lp,{size:[V,F]}],ut=()=>[Sr,Fn,tn],xe=()=>["","none","full",c,V,F],pe=()=>["",X,Fn,tn],v=()=>["solid","dashed","dotted","double"],z=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],C=()=>[X,Sr,Ni,Ii],G=()=>["","none",E,V,F],Q=()=>["none",X,V,F],d=()=>["none",X,V,F],h=()=>[X,V,F],g=()=>[Bt,"full",...A()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[Tt],breakpoint:[Tt],color:[Ea],container:[Tt],"drop-shadow":[Tt],ease:["in","out","in-out"],font:[Np],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[Tt],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[Tt],shadow:[Tt],spacing:["px",X],text:[Tt],"text-shadow":[Tt],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",Bt,F,V,k]}],container:["container"],"container-type":[{"@container":["","normal","size",V,F]}],"container-named":[Mp],columns:[{columns:[X,F,V,l]}],"break-after":[{"break-after":M()}],"break-before":[{"break-before":M()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:J()}],overflow:[{overflow:Y()}],"overflow-x":[{"overflow-x":Y()}],"overflow-y":[{"overflow-y":Y()}],overscroll:[{overscroll:j()}],"overscroll-x":[{"overscroll-x":j()}],"overscroll-y":[{"overscroll-y":j()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:N()}],"inset-x":[{"inset-x":N()}],"inset-y":[{"inset-y":N()}],start:[{"inset-s":N(),start:N()}],end:[{"inset-e":N(),end:N()}],"inset-bs":[{"inset-bs":N()}],"inset-be":[{"inset-be":N()}],top:[{top:N()}],right:[{right:N()}],bottom:[{bottom:N()}],left:[{left:N()}],visibility:["visible","invisible","collapse"],z:[{z:[mt,"auto",V,F]}],basis:[{basis:[Bt,"full","auto",l,...A()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[X,Bt,"auto","initial","none",F]}],grow:[{grow:["",X,V,F]}],shrink:[{shrink:["",X,V,F]}],order:[{order:[mt,"first","last","none",V,F]}],"grid-cols":[{"grid-cols":Z()}],"col-start-end":[{col:ne()}],"col-start":[{"col-start":L()}],"col-end":[{"col-end":L()}],"grid-rows":[{"grid-rows":Z()}],"row-start-end":[{row:ne()}],"row-start":[{"row-start":L()}],"row-end":[{"row-end":L()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":te()}],"auto-rows":[{"auto-rows":te()}],gap:[{gap:A()}],"gap-x":[{"gap-x":A()}],"gap-y":[{"gap-y":A()}],"justify-content":[{justify:[...be(),"normal"]}],"justify-items":[{"justify-items":[...Se(),"normal"]}],"justify-self":[{"justify-self":["auto",...Se()]}],"align-content":[{content:["normal",...be()]}],"align-items":[{items:[...Se(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...Se(),{baseline:["","last"]}]}],"place-content":[{"place-content":be()}],"place-items":[{"place-items":[...Se(),"baseline"]}],"place-self":[{"place-self":["auto",...Se()]}],p:[{p:A()}],px:[{px:A()}],py:[{py:A()}],ps:[{ps:A()}],pe:[{pe:A()}],pbs:[{pbs:A()}],pbe:[{pbe:A()}],pt:[{pt:A()}],pr:[{pr:A()}],pb:[{pb:A()}],pl:[{pl:A()}],m:[{m:re()}],mx:[{mx:re()}],my:[{my:re()}],ms:[{ms:re()}],me:[{me:re()}],mbs:[{mbs:re()}],mbe:[{mbe:re()}],mt:[{mt:re()}],mr:[{mr:re()}],mb:[{mb:re()}],ml:[{ml:re()}],"space-x":[{"space-x":A()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":A()}],"space-y-reverse":["space-y-reverse"],size:[{size:ee()}],"inline-size":[{inline:["auto",...se()]}],"min-inline-size":[{"min-inline":["auto",...se()]}],"max-inline-size":[{"max-inline":["none",...se()]}],"block-size":[{block:["auto",...Ke()]}],"min-block-size":[{"min-block":["auto",...Ke()]}],"max-block-size":[{"max-block":["none",...Ke()]}],w:[{w:[l,"screen",...ee()]}],"min-w":[{"min-w":[l,"screen","none",...ee()]}],"max-w":[{"max-w":[l,"screen","none","prose",{screen:[i]},...ee()]}],h:[{h:["screen","lh",...ee()]}],"min-h":[{"min-h":["screen","lh","none",...ee()]}],"max-h":[{"max-h":["screen","lh",...ee()]}],"font-size":[{text:["base",n,Fn,tn]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[s,Bp,Dp]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Sr,F]}],"font-family":[{font:[Vp,zp,t]}],"font-features":[{"font-features":[F]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[r,V,F]}],"line-clamp":[{"line-clamp":[X,"none",V,Oi]}],leading:[{leading:[o,...A()]}],"list-image":[{"list-image":["none",V,F]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",V,F]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:B()}],"text-color":[{text:B()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...v(),"wavy"]}],"text-decoration-thickness":[{decoration:[X,"from-font","auto",V,tn]}],"text-decoration-color":[{decoration:B()}],"underline-offset":[{"underline-offset":[X,"auto",V,F]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:A()}],"tab-size":[{tab:[mt,V,F]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",V,F]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",V,F]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:qe()}],"bg-repeat":[{bg:Ie()}],"bg-size":[{bg:At()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},mt,V,F],radial:["",V,F],conic:[mt,V,F]},Hp,Fp]}],"bg-color":[{bg:B()}],"gradient-from-pos":[{from:ut()}],"gradient-via-pos":[{via:ut()}],"gradient-to-pos":[{to:ut()}],"gradient-from":[{from:B()}],"gradient-via":[{via:B()}],"gradient-to":[{to:B()}],rounded:[{rounded:xe()}],"rounded-s":[{"rounded-s":xe()}],"rounded-e":[{"rounded-e":xe()}],"rounded-t":[{"rounded-t":xe()}],"rounded-r":[{"rounded-r":xe()}],"rounded-b":[{"rounded-b":xe()}],"rounded-l":[{"rounded-l":xe()}],"rounded-ss":[{"rounded-ss":xe()}],"rounded-se":[{"rounded-se":xe()}],"rounded-ee":[{"rounded-ee":xe()}],"rounded-es":[{"rounded-es":xe()}],"rounded-tl":[{"rounded-tl":xe()}],"rounded-tr":[{"rounded-tr":xe()}],"rounded-br":[{"rounded-br":xe()}],"rounded-bl":[{"rounded-bl":xe()}],"border-w":[{border:pe()}],"border-w-x":[{"border-x":pe()}],"border-w-y":[{"border-y":pe()}],"border-w-s":[{"border-s":pe()}],"border-w-e":[{"border-e":pe()}],"border-w-bs":[{"border-bs":pe()}],"border-w-be":[{"border-be":pe()}],"border-w-t":[{"border-t":pe()}],"border-w-r":[{"border-r":pe()}],"border-w-b":[{"border-b":pe()}],"border-w-l":[{"border-l":pe()}],"divide-x":[{"divide-x":pe()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":pe()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...v(),"hidden","none"]}],"divide-style":[{divide:[...v(),"hidden","none"]}],"border-color":[{border:B()}],"border-color-x":[{"border-x":B()}],"border-color-y":[{"border-y":B()}],"border-color-s":[{"border-s":B()}],"border-color-e":[{"border-e":B()}],"border-color-bs":[{"border-bs":B()}],"border-color-be":[{"border-be":B()}],"border-color-t":[{"border-t":B()}],"border-color-r":[{"border-r":B()}],"border-color-b":[{"border-b":B()}],"border-color-l":[{"border-l":B()}],"divide-color":[{divide:B()}],"outline-style":[{outline:[...v(),"none","hidden"]}],"outline-offset":[{"outline-offset":[X,V,F]}],"outline-w":[{outline:["",X,Fn,tn]}],"outline-color":[{outline:B()}],shadow:[{shadow:["","none",u,gs,ms]}],"shadow-color":[{shadow:B()}],"inset-shadow":[{"inset-shadow":["none",f,gs,ms]}],"inset-shadow-color":[{"inset-shadow":B()}],"ring-w":[{ring:pe()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:B()}],"ring-offset-w":[{"ring-offset":[X,tn]}],"ring-offset-color":[{"ring-offset":B()}],"inset-ring-w":[{"inset-ring":pe()}],"inset-ring-color":[{"inset-ring":B()}],"text-shadow":[{"text-shadow":["none",p,gs,ms]}],"text-shadow-color":[{"text-shadow":B()}],opacity:[{opacity:[X,V,F]}],"mix-blend":[{"mix-blend":[...z(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":z()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[X]}],"mask-image-linear-from-pos":[{"mask-linear-from":C()}],"mask-image-linear-to-pos":[{"mask-linear-to":C()}],"mask-image-linear-from-color":[{"mask-linear-from":B()}],"mask-image-linear-to-color":[{"mask-linear-to":B()}],"mask-image-t-from-pos":[{"mask-t-from":C()}],"mask-image-t-to-pos":[{"mask-t-to":C()}],"mask-image-t-from-color":[{"mask-t-from":B()}],"mask-image-t-to-color":[{"mask-t-to":B()}],"mask-image-r-from-pos":[{"mask-r-from":C()}],"mask-image-r-to-pos":[{"mask-r-to":C()}],"mask-image-r-from-color":[{"mask-r-from":B()}],"mask-image-r-to-color":[{"mask-r-to":B()}],"mask-image-b-from-pos":[{"mask-b-from":C()}],"mask-image-b-to-pos":[{"mask-b-to":C()}],"mask-image-b-from-color":[{"mask-b-from":B()}],"mask-image-b-to-color":[{"mask-b-to":B()}],"mask-image-l-from-pos":[{"mask-l-from":C()}],"mask-image-l-to-pos":[{"mask-l-to":C()}],"mask-image-l-from-color":[{"mask-l-from":B()}],"mask-image-l-to-color":[{"mask-l-to":B()}],"mask-image-x-from-pos":[{"mask-x-from":C()}],"mask-image-x-to-pos":[{"mask-x-to":C()}],"mask-image-x-from-color":[{"mask-x-from":B()}],"mask-image-x-to-color":[{"mask-x-to":B()}],"mask-image-y-from-pos":[{"mask-y-from":C()}],"mask-image-y-to-pos":[{"mask-y-to":C()}],"mask-image-y-from-color":[{"mask-y-from":B()}],"mask-image-y-to-color":[{"mask-y-to":B()}],"mask-image-radial":[{"mask-radial":[V,F]}],"mask-image-radial-from-pos":[{"mask-radial-from":C()}],"mask-image-radial-to-pos":[{"mask-radial-to":C()}],"mask-image-radial-from-color":[{"mask-radial-from":B()}],"mask-image-radial-to-color":[{"mask-radial-to":B()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":T()}],"mask-image-conic-pos":[{"mask-conic":[X]}],"mask-image-conic-from-pos":[{"mask-conic-from":C()}],"mask-image-conic-to-pos":[{"mask-conic-to":C()}],"mask-image-conic-from-color":[{"mask-conic-from":B()}],"mask-image-conic-to-color":[{"mask-conic-to":B()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:qe()}],"mask-repeat":[{mask:Ie()}],"mask-size":[{mask:At()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",V,F]}],filter:[{filter:["","none",V,F]}],blur:[{blur:G()}],brightness:[{brightness:[X,V,F]}],contrast:[{contrast:[X,V,F]}],"drop-shadow":[{"drop-shadow":["","none",m,gs,ms]}],"drop-shadow-color":[{"drop-shadow":B()}],grayscale:[{grayscale:["",X,V,F]}],"hue-rotate":[{"hue-rotate":[X,V,F]}],invert:[{invert:["",X,V,F]}],saturate:[{saturate:[X,V,F]}],sepia:[{sepia:["",X,V,F]}],"backdrop-filter":[{"backdrop-filter":["","none",V,F]}],"backdrop-blur":[{"backdrop-blur":G()}],"backdrop-brightness":[{"backdrop-brightness":[X,V,F]}],"backdrop-contrast":[{"backdrop-contrast":[X,V,F]}],"backdrop-grayscale":[{"backdrop-grayscale":["",X,V,F]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[X,V,F]}],"backdrop-invert":[{"backdrop-invert":["",X,V,F]}],"backdrop-opacity":[{"backdrop-opacity":[X,V,F]}],"backdrop-saturate":[{"backdrop-saturate":[X,V,F]}],"backdrop-sepia":[{"backdrop-sepia":["",X,V,F]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":A()}],"border-spacing-x":[{"border-spacing-x":A()}],"border-spacing-y":[{"border-spacing-y":A()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",V,F]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[X,"initial",V,F]}],ease:[{ease:["linear","initial",I,V,F]}],delay:[{delay:[X,V,F]}],animate:[{animate:["none",_,V,F]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[x,V,F]}],"perspective-origin":[{"perspective-origin":J()}],rotate:[{rotate:Q()}],"rotate-x":[{"rotate-x":Q()}],"rotate-y":[{"rotate-y":Q()}],"rotate-z":[{"rotate-z":Q()}],scale:[{scale:d()}],"scale-x":[{"scale-x":d()}],"scale-y":[{"scale-y":d()}],"scale-z":[{"scale-z":d()}],"scale-3d":["scale-3d"],skew:[{skew:h()}],"skew-x":[{"skew-x":h()}],"skew-y":[{"skew-y":h()}],transform:[{transform:[V,F,"","none","gpu","cpu"]}],"transform-origin":[{origin:J()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:g()}],"translate-x":[{"translate-x":g()}],"translate-y":[{"translate-y":g()}],"translate-z":[{"translate-z":g()}],"translate-none":["translate-none"],zoom:[{zoom:[mt,V,F]}],accent:[{accent:B()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:B()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",V,F]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":B()}],"scrollbar-track-color":[{"scrollbar-track":B()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":A()}],"scroll-mx":[{"scroll-mx":A()}],"scroll-my":[{"scroll-my":A()}],"scroll-ms":[{"scroll-ms":A()}],"scroll-me":[{"scroll-me":A()}],"scroll-mbs":[{"scroll-mbs":A()}],"scroll-mbe":[{"scroll-mbe":A()}],"scroll-mt":[{"scroll-mt":A()}],"scroll-mr":[{"scroll-mr":A()}],"scroll-mb":[{"scroll-mb":A()}],"scroll-ml":[{"scroll-ml":A()}],"scroll-p":[{"scroll-p":A()}],"scroll-px":[{"scroll-px":A()}],"scroll-py":[{"scroll-py":A()}],"scroll-ps":[{"scroll-ps":A()}],"scroll-pe":[{"scroll-pe":A()}],"scroll-pbs":[{"scroll-pbs":A()}],"scroll-pbe":[{"scroll-pbe":A()}],"scroll-pt":[{"scroll-pt":A()}],"scroll-pr":[{"scroll-pr":A()}],"scroll-pb":[{"scroll-pb":A()}],"scroll-pl":[{"scroll-pl":A()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",V,F]}],fill:[{fill:["none",...B()]}],"stroke-w":[{stroke:[X,Fn,tn,Oi]}],stroke:[{stroke:["none",...B()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},$p=wp(Up);function Ct(...e){return $p(ba(e))}const Wp={class:"pointer-events-none fixed inset-x-0 top-0 z-100 flex flex-col items-center gap-2 p-3 sm:top-auto sm:right-0 sm:bottom-0 sm:left-auto sm:items-end sm:p-4"},Kp={class:"min-w-0 flex-1"},qp={class:"text-sm font-medium"},Jp={key:0,class:"text-muted-foreground mt-0.5 text-xs break-words"},Yp=["onClick"],Qp=We({__name:"Toaster",setup(e){const{toasts:t}=ep();return(n,s)=>(fe(),Qe("div",Wp,[de(yf,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"opacity-0 -translate-y-2 sm:translate-y-2","leave-active-class":"transition duration-150 ease-in absolute","leave-to-class":"opacity-0 scale-95"},{default:Ye(()=>[(fe(!0),Qe(Pe,null,Nr(H(t),r=>(fe(),Qe("div",{key:r.id,class:$e(H(Ct)("bg-popover text-popover-foreground pointer-events-auto flex w-full max-w-sm items-start gap-2.5 rounded-lg border p-3 shadow-lg",r.variant==="error"&&"border-block/40",r.variant==="success"&&"border-allow/40"))},[r.variant==="success"?(fe(),ze(H(Hd),{key:0,class:"text-allow mt-0.5 size-4 shrink-0"})):r.variant==="error"?(fe(),ze(H(Yd),{key:1,class:"text-block mt-0.5 size-4 shrink-0"})):Ts("",!0),le("div",Kp,[le("p",qp,Le(r.title),1),r.description?(fe(),Qe("p",Jp,Le(r.description),1)):Ts("",!0)]),le("button",{type:"button",class:"text-muted-foreground hover:text-foreground -m-1 p-1",onClick:o=>H(_o)(r.id)},[de(H(Qd),{class:"size-3.5"})],8,Yp)],2))),128))]),_:1})]))}}),Xp=We({__name:"App",setup(e){return(t,n)=>(fe(),Qe(Pe,null,[de(H(yo)),de(Qp)],64))}}),Ia="/api/v1",qr="opengfw.token";class _s extends Error{constructor(n,s){super(s);Po(this,"status");this.status=n}}let yn=localStorage.getItem(qr)??"";const Jr=new Set,Ft={get token(){return yn},get authenticated(){return yn!==""},set(e){yn=e,localStorage.setItem(qr,e)},clear(){yn="",localStorage.removeItem(qr)},onUnauthorized(e){return Jr.add(e),()=>Jr.delete(e)}};async function gt(e,t={}){const n=new Headers(t.headers);yn&&n.set("Authorization",`Bearer ${yn}`),t.body&&n.set("Content-Type","application/json");let s;try{s=await fetch(Ia+e,{...t,headers:n,credentials:"same-origin"})}catch{throw new _s(0,"network error")}if(s.status===401)throw Ft.clear(),Jr.forEach(i=>i()),new _s(401,"unauthorized");const r=await s.text(),o=r?JSON.parse(r):null;if(!s.ok){const i=o&&typeof o=="object"&&"error"in o?String(o.error):`request failed (${s.status})`;throw new _s(s.status,i)}return o}const Yr={async login(e){const t=await gt("/login",{method:"POST",body:JSON.stringify({password:e})});Ft.set(t.token)},async logout(){try{await gt("/logout",{method:"POST"})}finally{Ft.clear()}},info:()=>gt("/info"),meta:()=>gt("/meta"),metrics:()=>gt("/metrics"),events:(e=200)=>gt(`/events?limit=${e}`),rules:()=>gt("/rules"),geo:(e=!1)=>gt(`/geo${e?"?reload=1":""}`),saveRules:e=>gt("/rules",{method:"PUT",body:JSON.stringify(e)}),validateRules:e=>gt("/rules/validate",{method:"POST",body:JSON.stringify(e)})},Zp=`${Ia}/live`,Qr=500,sr=Ze(null),un=is([]),on=Ze("closed");let Kt=null,Xr,bs=1e3;function eh(e){const t=[e,...un.value];t.length>Qr&&(t.length=Qr),un.value=t}async function Na(){try{const[e,t]=await Promise.all([Yr.metrics(),Yr.events(Qr)]);sr.value=e,un.value.length===0&&(un.value=t.events??[])}catch{}}function Ma(){if(Kt||!Ft.authenticated)return;on.value="connecting";const e=new EventSource(Zp);Kt=e,e.addEventListener("open",()=>{on.value="open",bs=1e3}),e.addEventListener("metrics",t=>{try{sr.value=JSON.parse(t.data),on.value="open"}catch{}}),e.addEventListener("event",t=>{try{eh(JSON.parse(t.data))}catch{}}),e.addEventListener("error",()=>{e.close(),Kt===e&&(Kt=null),on.value="closed",window.clearTimeout(Xr),Xr=window.setTimeout(()=>{Ft.authenticated&&Ma()},bs),bs=Math.min(bs*2,15e3)})}function La(){Ft.authenticated&&(Na(),Ma())}function So(){window.clearTimeout(Xr),Kt==null||Kt.close(),Kt=null,on.value="closed",sr.value=null,un.value=[]}function th(){un.value=[]}function nh(){return{metrics:sr,events:un,status:on,connected:_e(()=>on.value==="open"),startLive:La,stopLive:So,clearEvents:th,refresh:Na}}const sh="modulepreload",rh=function(e){return"/"+e},Mi={},Vn=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){let i=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),a=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));r=i(n.map(c=>{if(c=rh(c),c in Mi)return;Mi[c]=!0;const u=c.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${f}`))return;const p=document.createElement("link");if(p.rel=u?"stylesheet":sh,u||(p.as="script"),p.crossOrigin="",p.href=c,a&&p.setAttribute("nonce",a),document.head.appendChild(p),u)return new Promise((m,E)=>{p.addEventListener("load",m),p.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${c}`)))})}))}function o(i){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=i,window.dispatchEvent(l),!l.defaultPrevented)throw i}return r.then(i=>{for(const l of i||[])l.status==="rejected"&&o(l.reason);return t().catch(o)})},oh={app:{name:"OpenGFW",tagline:"Network filtering and analysis"},nav:{dashboard:"Dashboard",events:"Events",rules:"Rules",analyzers:"Analyzers",settings:"Settings"},common:{save:"Save",saving:"Saving…",cancel:"Cancel",close:"Close",refresh:"Refresh",search:"Search",loading:"Loading…",empty:"Nothing here yet",error:"Error",retry:"Retry",delete:"Delete",edit:"Edit",add:"Add",apply:"Apply",copy:"Copy",copied:"Copied",enabled:"Enabled",disabled:"Disabled",all:"All",unknown:"Unknown",total:"Total",live:"Live",offline:"Disconnected",connecting:"Connecting…",back:"Back",more:"More"},login:{title:"Sign in",subtitle:"Enter the web UI password from your config file",password:"Password",submit:"Sign in",failed:"Sign in failed",hint:"Set it with web.secret in config.yaml"},dashboard:{title:"Dashboard",subtitle:"Live overview of the engine",uptime:"Uptime",workers:"Workers",streams:"Streams",blocked:"Blocked",allowed:"Allowed",modified:"Modified",errors:"Errors",traffic:"Traffic",trafficDesc:"New streams and verdicts over time",range10m:"10 min",range1h:"1 hour",protocols:"Protocols",verdicts:"Verdicts",topHosts:"Top hosts",topHostsDesc:"Seen in TLS SNI, HTTP Host and DNS queries",topBlocked:"Blocked destinations",topRules:"Triggered rules",recent:"Recent events",viewAll:"View all",noTraffic:"No traffic seen yet",tcp:"TCP",udp:"UDP"},events:{title:"Events",subtitle:"Live feed of verdicts, rule logs and errors",pause:"Pause",resume:"Resume",paused:"Paused",clear:"Clear",filterAction:"Verdict",filterProto:"Protocol",filterKind:"Type",searchPlaceholder:"Search IP, host or rule…",empty:"Waiting for events…",emptyFiltered:"No event matches the filter",detail:"Event detail",stream:"Stream",source:"Source",destination:"Destination",host:"Host",rule:"Rule",props:"Analyzer properties",noProps:"No analyzer properties",copyJson:"Copy JSON",buffered:"{n} new"},rules:{title:"Rules",subtitle:"Rules are matched top to bottom; the first match wins",count:"{n} rules",file:"Rule file",add:"New rule",editTitle:"Edit rule",addTitle:"New rule",name:"Name",namePlaceholder:"block-google-dns",action:"Action",actionNone:"None (log only)",log:"Log matches",expr:"Expression",exprPlaceholder:'dns != nil && dns.qr && any(dns.questions, {.name endsWith "example.com"})',modifier:"Modifier",modifierArgs:"Modifier arguments (JSON)",visual:"Visual",yaml:"YAML",validate:"Validate",valid:"Rules are valid",invalid:"Invalid rules",save:"Save & apply",saved:"Rules applied to the running engine",unsaved:"Unsaved changes",discard:"Discard",deleteConfirm:'Delete rule "{name}"?',moveUp:"Move up",moveDown:"Move down",empty:"No rules yet. Everything is accepted.",nameRequired:"A name is required",exprRequired:"Add at least one condition",hint:"Saving writes the rule file and hot reloads the engine.",conditions:"Conditions",exprHint:"Any expr expression works here, the engine validates it when you save.",invalidJson:"Modifier arguments must be valid JSON",invalidCidr:"Not a valid CIDR, e.g. 10.0.0.0/8",invalidRegex:"Not a valid regular expression",invalidGeo:"Use letters, digits, - and @",invalidIp:"Not a valid IP address",invalidPort:"Port must be between 0 and 65535",invalidDomain:"Not a valid domain pattern",starHint:'Contains *: switch the operator to "matches wildcard"',valuePlaceholder:"Type a value and press Enter",builder:{tab:"Builder",match:"Match",matchSuffix:"of the following conditions",and:"all",or:"any",addCondition:"Add condition",preview:"Generated expression",empty:"Fill in a condition to see the expression",not:"NOT",field:"Field",operator:"Operator",notParsed:"This rule uses an expression the builder cannot represent, so it is shown as raw expr. Editing it in the builder would change its meaning."},group:{basic:"Connection",domain:"Domain",http:"HTTP",protocol:"Protocol"},field:{proto:"Transport protocol",ip_dst:"Destination IP",ip_src:"Source IP",port_dst:"Destination port",port_src:"Source port",tls_sni:"TLS SNI",quic_sni:"QUIC SNI",dns_name:"DNS query name",http_host:"HTTP Host",http_path:"HTTP path",http_method:"HTTP method",http_ua:"User-Agent",analyzer:"Detected protocol"},op:{is:"is",subdomain:"domain or subdomain of",wildcard:"matches wildcard",contains:"contains",startsWith:"starts with",endsWith:"ends with",regex:"matches regex",geosite:"in GeoSite category",cidr:"in CIDR",geoip:"in GeoIP country",range:"in range",detected:"is"},wildcard:{exact:"exact match",suffix:"ends with {value}",prefix:"starts with {value}",contains:"contains {value}",regex:"regex {value}",any:"any non-empty value"},geo:{attribute:"attribute",loading:"Loading the geo database, this can take a moment the first time…",searchCountry:"Search country or group…",searchSite:"Search category…",unavailable:"The geo database could not be read, enter the codes manually (e.g. cn, us)."}},analyzers:{title:"Analyzers",subtitle:"Protocol analyzers compiled into this build",hits:"Streams analyzed",modifiers:"Modifiers",modifiersDesc:"Available for rules with the modify action",functions:"Rule functions",functionsDesc:"Built-in functions usable in expressions",used:"In use",idle:"Idle"},settings:{title:"Settings",subtitle:"Appearance and instance information",appearance:"Appearance",theme:"Theme",themeLight:"Light",themeDark:"Dark",themeSystem:"System",language:"Language",instance:"Instance",version:"Version",platform:"Platform",goVersion:"Go version",hostname:"Hostname",ruleFile:"Rule file",engineConfig:"Engine configuration",ioQueueSize:"NFQueue size",ioLocal:"Local mode",ioRST:"Send RST",workers:"Workers",workerQueueSize:"Worker queue size",udpMaxStreams:"Max UDP streams",geoip:"GeoIP database",geosite:"GeoSite database",auto:"Auto",session:"Session",logout:"Sign out",docs:"Documentation"},action:{allow:"Allow",block:"Block",drop:"Drop",modify:"Modify",maybe:"Maybe",log:"Log",error:"Error"}},ih={app:{name:"OpenGFW",tagline:"网络过滤与分析"},nav:{dashboard:"概览",events:"事件",rules:"规则",analyzers:"解析器",settings:"设置"},common:{save:"保存",saving:"保存中…",cancel:"取消",close:"关闭",refresh:"刷新",search:"搜索",loading:"加载中…",empty:"暂无数据",error:"错误",retry:"重试",delete:"删除",edit:"编辑",add:"添加",apply:"应用",copy:"复制",copied:"已复制",enabled:"已启用",disabled:"已禁用",all:"全部",unknown:"未知",total:"总计",live:"实时",offline:"连接断开",connecting:"连接中…",back:"返回",more:"更多"},login:{title:"登录",subtitle:"请输入配置文件中设置的 Web UI 密码",password:"密码",submit:"登录",failed:"登录失败",hint:"在 config.yaml 的 web.secret 中设置"},dashboard:{title:"概览",subtitle:"引擎实时运行状态",uptime:"运行时长",workers:"工作线程",streams:"连接数",blocked:"已拦截",allowed:"已放行",modified:"已修改",errors:"错误",traffic:"流量趋势",trafficDesc:"新建连接与判定结果随时间变化",range10m:"10 分钟",range1h:"1 小时",protocols:"协议分布",verdicts:"判定分布",topHosts:"热门域名",topHostsDesc:"来自 TLS SNI、HTTP Host 与 DNS 查询",topBlocked:"被拦截的目标",topRules:"命中的规则",recent:"最近事件",viewAll:"查看全部",noTraffic:"暂未捕获到流量",tcp:"TCP",udp:"UDP"},events:{title:"事件",subtitle:"判定结果、规则日志与错误的实时推送",pause:"暂停",resume:"继续",paused:"已暂停",clear:"清空",filterAction:"判定",filterProto:"协议",filterKind:"类型",searchPlaceholder:"搜索 IP、域名或规则…",empty:"等待事件中…",emptyFiltered:"没有符合筛选条件的事件",detail:"事件详情",stream:"连接",source:"来源",destination:"目标",host:"域名",rule:"规则",props:"解析器属性",noProps:"无解析器属性",copyJson:"复制 JSON",buffered:"{n} 条新事件"},rules:{title:"规则",subtitle:"规则自上而下匹配,命中第一条即生效",count:"{n} 条规则",file:"规则文件",add:"新建规则",editTitle:"编辑规则",addTitle:"新建规则",name:"名称",namePlaceholder:"block-google-dns",action:"动作",actionNone:"无(仅记录日志)",log:"记录日志",expr:"表达式",exprPlaceholder:'dns != nil && dns.qr && any(dns.questions, {.name endsWith "example.com"})',modifier:"修改器",modifierArgs:"修改器参数(JSON)",visual:"可视化",yaml:"YAML",validate:"校验",valid:"规则校验通过",invalid:"规则不合法",save:"保存并应用",saved:"规则已热加载到运行中的引擎",unsaved:"有未保存的修改",discard:"放弃修改",deleteConfirm:"确定删除规则「{name}」?",moveUp:"上移",moveDown:"下移",empty:"暂无规则,所有流量都会放行。",nameRequired:"请填写名称",exprRequired:"请至少添加一个条件",hint:"保存后将写入规则文件并热加载引擎。",conditions:"匹配条件",exprHint:"这里可以写任意 expr 表达式,保存时由引擎校验。",invalidJson:"修改器参数必须是合法 JSON",invalidCidr:"不是合法的 CIDR,例如 10.0.0.0/8",invalidRegex:"不是合法的正则表达式",invalidGeo:"只能包含字母、数字、- 和 @",invalidIp:"不是合法的 IP 地址",invalidPort:"端口需在 0-65535 之间",invalidDomain:"不是合法的域名或通配符",starHint:"包含 *,如需通配符请把条件改成「通配符匹配」",valuePlaceholder:"输入后按回车添加",builder:{tab:"可视化构建",match:"满足以下条件的",matchSuffix:"项",and:"全部",or:"任一",addCondition:"添加条件",preview:"生成的表达式",empty:"填写条件后这里会显示表达式",not:"取反",field:"字段",operator:"条件",notParsed:"该规则的表达式无法用可视化构建器表示,已切换到表达式模式;在构建器中编辑会改变其语义。"},group:{basic:"连接",domain:"域名",http:"HTTP",protocol:"协议"},field:{proto:"传输层协议",ip_dst:"目标 IP",ip_src:"来源 IP",port_dst:"目标端口",port_src:"来源端口",tls_sni:"TLS SNI",quic_sni:"QUIC SNI",dns_name:"DNS 查询域名",http_host:"HTTP Host",http_path:"HTTP 路径",http_method:"HTTP 方法",http_ua:"User-Agent",analyzer:"识别到的协议"},op:{is:"等于",subdomain:"是域名或其子域名",wildcard:"通配符匹配",contains:"包含",startsWith:"开头是",endsWith:"结尾是",regex:"正则匹配",geosite:"属于 GeoSite 分类",cidr:"属于网段",geoip:"属于 GeoIP 国家/地区",range:"在区间内",detected:"是"},wildcard:{exact:"精确匹配",suffix:"以 {value} 结尾",prefix:"以 {value} 开头",contains:"包含 {value}",regex:"正则 {value}",any:"任意非空值"},geo:{attribute:"属性",loading:"正在加载 geo 数据库,首次加载可能需要一点时间…",searchCountry:"搜索国家/地区或分组…",searchSite:"搜索分类…",unavailable:"无法读取 geo 数据库,请手动输入代码(如 cn、us)。"}},analyzers:{title:"解析器",subtitle:"当前版本内置的协议解析器",hits:"已解析连接",modifiers:"修改器",modifiersDesc:"可用于 modify 动作的规则",functions:"规则函数",functionsDesc:"表达式中可用的内置函数",used:"使用中",idle:"空闲"},settings:{title:"设置",subtitle:"外观与实例信息",appearance:"外观",theme:"主题",themeLight:"浅色",themeDark:"深色",themeSystem:"跟随系统",language:"语言",instance:"实例信息",version:"版本",platform:"平台",goVersion:"Go 版本",hostname:"主机名",ruleFile:"规则文件",engineConfig:"引擎配置",ioQueueSize:"NFQueue 队列大小",ioLocal:"本机模式",ioRST:"发送 RST",workers:"工作线程数",workerQueueSize:"工作线程队列大小",udpMaxStreams:"UDP 最大连接数",geoip:"GeoIP 数据库",geosite:"GeoSite 数据库",auto:"自动",session:"会话",logout:"退出登录",docs:"文档"},action:{allow:"放行",block:"拦截",drop:"丢弃",modify:"修改",maybe:"待定",log:"日志",error:"错误"}},Da="opengfw.lang",Li={en:oh,zh:ih};function lh(){const e=localStorage.getItem(Da);return e==="en"||e==="zh"?e:navigator.language.toLowerCase().startsWith("zh")?"zh":"en"}const rr=Ze(lh());function Di(e,t){const n=t.split(".").reduce((s,r)=>{if(s&&typeof s=="object")return s[r]},e);return typeof n=="string"?n:void 0}function Te(e,t){const n=Di(Li[rr.value],e)??Di(Li.en,e)??e;return t?n.replace(/\{(\w+)\}/g,(s,r)=>t[r]===void 0?`{${r}}`:String(t[r])):n}function ah(e){rr.value=e,localStorage.setItem(Da,e),document.documentElement.lang=e==="zh"?"zh-CN":"en"}function ch(){return{t:Te,lang:_e(()=>rr.value),setLang:ah}}document.documentElement.lang=rr.value==="zh"?"zh-CN":"en";const zi=We({__name:"StatusPill",setup(e){const{status:t}=nh(),n=_e(()=>{switch(t.value){case"open":return Te("common.live");case"connecting":return Te("common.connecting");default:return Te("common.offline")}});return(s,r)=>(fe(),Qe("span",{class:$e(H(Ct)("inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 text-[11px] font-medium",H(t)==="open"?"border-allow/30 bg-allow/10 text-allow":H(t)==="connecting"?"border-drop/30 bg-drop/10 text-drop":"border-block/30 bg-block/10 text-block"))},[le("span",{class:$e(H(Ct)("size-1.5 rounded-full",H(t)==="open"?"bg-allow animate-pulse-dot":H(t)==="connecting"?"bg-drop animate-pulse-dot":"bg-block"))},null,2),Cn(" "+Le(n.value),1)],2))}}),za="opengfw.theme",Er=localStorage.getItem(za),cn=Ze(Er==="light"||Er==="dark"?Er:"system"),Fa=window.matchMedia("(prefers-color-scheme: dark)");function Va(e){return e==="dark"||e==="system"&&Fa.matches}const Jn=Ze(Va(cn.value));function Eo(){var e;Jn.value=Va(cn.value),document.documentElement.classList.toggle("dark",Jn.value),(e=document.querySelector('meta[name="theme-color"]'))==null||e.setAttribute("content",Jn.value?"#09090b":"#ffffff")}Et(cn,e=>{localStorage.setItem(za,e),Eo()});Fa.addEventListener("change",()=>{cn.value==="system"&&Eo()});Eo();function uh(){return{theme:cn,isDark:_e(()=>Jn.value),setTheme:e=>{cn.value=e},toggle:()=>{cn.value=Jn.value?"light":"dark"}}}const fh={class:"bg-background min-h-dvh"},dh={class:"bg-card/40 fixed inset-y-0 left-0 z-40 hidden w-56 flex-col border-r px-3 py-4 md:flex lg:w-60"},ph={class:"flex items-center gap-2 px-2 pb-4"},hh={class:"min-w-0"},mh={class:"truncate text-sm font-semibold"},gh={class:"text-muted-foreground truncate text-[11px]"},bh={class:"flex flex-1 flex-col gap-0.5"},vh={class:"px-2 pt-3"},yh={class:"flex min-h-dvh flex-col md:pl-56 lg:pl-60"},_h={class:"bg-background/85 safe-top sticky top-0 z-30 border-b backdrop-blur-md md:hidden"},xh={class:"flex h-12 items-center justify-between gap-3 px-4"},wh={class:"truncate text-sm font-semibold"},Sh={class:"flex-1 px-4 pt-4 pb-24 sm:px-6 sm:pt-6 md:pb-8"},Eh={class:"bg-background/90 safe-bottom fixed inset-x-0 bottom-0 z-40 border-t backdrop-blur-md md:hidden"},Ch={class:"grid grid-cols-5"},Ah={class:"truncate"},kh=We({__name:"AppShell",setup(e){const t=ma(),n=_e(()=>[{to:"/",label:Te("nav.dashboard"),icon:Bd},{to:"/events",label:Te("nav.events"),icon:Kd},{to:"/rules",label:Te("nav.rules"),icon:Gd},{to:"/analyzers",label:Te("nav.analyzers"),icon:jd},{to:"/settings",label:Te("nav.settings"),icon:qd}]),s=_e(()=>{const r=n.value.find(o=>o.to===t.path);return(r==null?void 0:r.label)??Te("app.name")});return Ys(La),co(So),(r,o)=>(fe(),Qe("div",fh,[le("aside",dh,[le("div",ph,[o[0]||(o[0]=le("div",{class:"bg-primary text-primary-foreground flex size-8 items-center justify-center rounded-lg font-bold"}," G ",-1)),le("div",hh,[le("p",mh,Le(H(Te)("app.name")),1),le("p",gh,Le(H(Te)("app.tagline")),1)])]),le("nav",bh,[(fe(!0),Qe(Pe,null,Nr(n.value,i=>(fe(),ze(H(Wr),{key:i.to,to:i.to,class:$e(H(Ct)("flex items-center gap-2.5 rounded-lg px-2.5 py-2 text-sm font-medium transition-colors",H(t).path===i.to?"bg-accent text-accent-foreground":"text-muted-foreground hover:bg-accent/50 hover:text-foreground"))},{default:Ye(()=>[(fe(),ze(fr(i.icon),{class:"size-4 shrink-0"})),Cn(" "+Le(i.label),1)]),_:2},1032,["to","class"]))),128))]),le("div",vh,[de(zi)])]),le("div",yh,[le("header",_h,[le("div",xh,[le("span",wh,Le(s.value),1),de(zi)])]),le("main",Sh,[de(H(yo),null,{default:Ye(({Component:i})=>[(fe(),ze(fr(i),{class:"animate-fade-in"}))]),_:1})])]),le("nav",Eh,[le("div",Ch,[(fe(!0),Qe(Pe,null,Nr(n.value,i=>(fe(),ze(H(Wr),{key:i.to,to:i.to,class:$e(H(Ct)("flex flex-col items-center gap-0.5 py-2 text-[10px] font-medium transition-colors",H(t).path===i.to?"text-foreground":"text-muted-foreground"))},{default:Ye(()=>[(fe(),ze(fr(i.icon),{class:$e(H(Ct)("size-5",H(t).path===i.to&&"text-primary"))},null,8,["class"])),le("span",Ah,Le(i.label),1)]),_:2},1032,["to","class"]))),128))])])]))}}),Fi=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,Vi=ba,Rh=(e,t)=>n=>{var s;if((t==null?void 0:t.variants)==null)return Vi(e,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:r,defaultVariants:o}=t,i=Object.keys(r).map(c=>{const u=n==null?void 0:n[c],f=o==null?void 0:o[c];if(u===null)return null;const p=Fi(u)||Fi(f);return r[c][p]}),l=n&&Object.entries(n).reduce((c,u)=>{let[f,p]=u;return p===void 0||(c[f]=p),c},{}),a=t==null||(s=t.compoundVariants)===null||s===void 0?void 0:s.reduce((c,u)=>{let{class:f,className:p,...m}=u;return Object.entries(m).every(E=>{let[x,k]=E;return Array.isArray(k)?k.includes({...o,...l}[x]):{...o,...l}[x]===k})?[...c,f,p]:c},[]);return Vi(e,i,a,n==null?void 0:n.class,n==null?void 0:n.className)};function On(e,t){return Qi()?(rc(e,t),!0):!1}function km(){const e=new Set,t=o=>{e.delete(o)};return{on:o=>{e.add(o);const i=()=>t(o);return On(i),{off:i}},off:t,trigger:(...o)=>Promise.all(Array.from(e).map(i=>i(...o))),clear:()=>{e.clear()}}}function Rm(e){let t=!1,n;const s=Yi(!0);return((...r)=>(t||(n=s.run(()=>e(...r)),t=!0),n))}const Co=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Th=e=>typeof e<"u",Ph=e=>e!=null,Oh=Object.prototype.toString,Ih=e=>Oh.call(e)==="[object Object]",Nh=()=>{},Tm=Mh();function Mh(){var e,t,n;return Co&&!!(!((e=window)===null||e===void 0||(e=e.navigator)===null||e===void 0)&&e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window)===null||t===void 0||(t=t.navigator)===null||t===void 0?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test((n=window)===null||n===void 0?void 0:n.navigator.userAgent))}function xs(e){return Array.isArray(e)?e:[e]}function Lh(e){return dn()}function Pm(e){if(!Co)return e;let t=0,n,s;const r=()=>{t-=1,s&&t<=0&&(s.stop(),n=void 0,s=void 0)};return((...o)=>(t+=1,s||(s=Yi(!0),n=s.run(()=>e(...o))),On(r),n))}function Om(e,t=1e4){return Rc((n,s)=>{let r=St(e),o;const i=()=>setTimeout(()=>{r=St(e),s()},St(t));return On(()=>{clearTimeout(o)}),{get(){return n(),r},set(l){r=l,s(),clearTimeout(o),o=i()}}})}function Im(e,t){Lh()&&ao(e,t)}function Dh(e,t,n){return Et(e,t,{...n,immediate:!0})}const hn=Co?window:void 0;function fn(e){var t;const n=St(e);return(t=n==null?void 0:n.$el)!==null&&t!==void 0?t:n}function rs(...e){const t=(s,r,o,i)=>(s.addEventListener(r,o,i),()=>s.removeEventListener(r,o,i)),n=_e(()=>{const s=xs(St(e[0])).filter(r=>r!=null);return s.every(r=>typeof r!="string")?s:void 0});return Dh(()=>{var s,r;return[(s=(r=n.value)===null||r===void 0?void 0:r.map(o=>fn(o)))!==null&&s!==void 0?s:[hn].filter(o=>o!=null),xs(St(n.value?e[1]:e[0])),xs(H(n.value?e[2]:e[1])),St(n.value?e[3]:e[2])]},([s,r,o,i],l,a)=>{if(!(s!=null&&s.length)||!(r!=null&&r.length)||!(o!=null&&o.length))return;const c=Ih(i)?{...i}:i,u=s.flatMap(f=>r.flatMap(p=>o.map(m=>t(f,p,m,c))));a(()=>{u.forEach(f=>f())})},{flush:"post"})}function zh(){const e=is(!1),t=dn();return t&&Ys(()=>{e.value=!0},t),e}function ja(e){const t=zh();return _e(()=>(t.value,!!e()))}function Fh(e,t,n={}){const{window:s=hn,...r}=n;let o;const i=ja(()=>s&&"MutationObserver"in s),l=()=>{o&&(o.disconnect(),o=void 0)},a=Et(_e(()=>{const f=xs(St(e)).map(fn).filter(Ph);return new Set(f)}),f=>{l(),i.value&&f.size&&(o=new MutationObserver(t),f.forEach(p=>o.observe(p,r)))},{immediate:!0,flush:"post"}),c=()=>o==null?void 0:o.takeRecords(),u=()=>{a(),l()};return On(u),{isSupported:i,stop:u,takeRecords:c}}function Vh(e,t,n={}){const{window:s=hn,document:r=s==null?void 0:s.document,flush:o="sync"}=n;if(!s||!r)return Nh;let i;const l=u=>{i==null||i(),i=u},a=jc(()=>{const u=fn(e);if(u){const{stop:f}=Fh(r,p=>{p.map(m=>[...m.removedNodes]).flat().some(m=>m===u||m.contains(u))&&t(p)},{window:s,childList:!0,subtree:!0});l(f)}},{flush:o}),c=()=>{a(),l()};return On(c),c}function jh(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Nm(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=hn,eventName:o="keydown",passive:i=!1,dedupe:l=!1}=s,a=jh(t);return rs(r,o,u=>{u.repeat&&St(l)||a(u)&&n(u)},i)}function Hh(e={}){var t;const{window:n=hn,deep:s=!0,triggerOnRemoval:r=!1}=e,o=(t=e.document)!==null&&t!==void 0?t:n==null?void 0:n.document,i=()=>{let c=o==null?void 0:o.activeElement;if(s)for(var u;c!=null&&c.shadowRoot;)c=c==null||(u=c.shadowRoot)===null||u===void 0?void 0:u.activeElement;return c},l=is(),a=()=>{l.value=i()};if(n){const c={capture:!0,passive:!0};rs(n,"blur",u=>{u.relatedTarget===null&&a()},c),rs(n,"focus",a,c)}return r&&Vh(l,a,{document:o}),a(),l}function Bh(e){return JSON.parse(JSON.stringify(e))}function Mm(e,t,n={}){const{window:s=hn,...r}=n;let o;const i=ja(()=>s&&"ResizeObserver"in s),l=()=>{o&&(o.disconnect(),o=void 0)},a=Et(_e(()=>{const u=St(e);return Array.isArray(u)?u.map(f=>fn(f)):[fn(u)]}),u=>{if(l(),i.value&&s){o=new ResizeObserver(t);for(const f of u)f&&o.observe(f,r)}},{immediate:!0,flush:"post"}),c=()=>{l(),a()};return On(c),{isSupported:i,stop:c}}const Gh="focusin",Uh="focusout",$h=":focus-within";function Lm(e,t={}){const{window:n=hn}=t,s=_e(()=>fn(e)),r=is(!1),o=_e(()=>r.value);if(!n||!Hh(t).value)return{focused:o};const l={passive:!0};return rs(s,Gh,()=>r.value=!0,l),rs(s,Uh,()=>{var a,c,u;return r.value=(a=(c=s.value)===null||c===void 0||(u=c.matches)===null||u===void 0?void 0:u.call(c,$h))!==null&&a!==void 0?a:!1},l),{focused:o}}function Dm(e,t,n,s={}){var r,o;const{clone:i=!1,passive:l=!1,eventName:a,deep:c=!1,defaultValue:u,shouldEmit:f}=s,p=dn(),m=n||(p==null?void 0:p.emit)||(p==null||(r=p.$emit)===null||r===void 0?void 0:r.bind(p))||(p==null||(o=p.proxy)===null||o===void 0||(o=o.$emit)===null||o===void 0?void 0:o.bind(p==null?void 0:p.proxy));let E=a;t||(t="modelValue"),E=E||`update:${t.toString()}`;const x=_=>i?typeof i=="function"?i(_):Bh(_):_,k=()=>Th(e[t])?x(e[t]):u,I=_=>{f?f(_)&&m(E,_):m(E,_)};if(l){const _=Ze(k());let M=!1;return Et(()=>e[t],T=>{M||(M=!0,_.value=x(T),oo(()=>M=!1))}),Et(_,T=>{!M&&(T!==e[t]||c)&&I(T)},{deep:c}),_}else return _e({get(){return k()},set(_){I(_)}})}function Ha(e){return e?e.flatMap(t=>t.type===Pe?Ha(t.children):[t]):[]}function Wh(){const e=dn(),t=Ze(),n=_e(()=>s());lo(()=>{n.value!==s()&&Cc(t)});function s(){return t.value&&"$el"in t.value&&["#text","#comment"].includes(t.value.$el.nodeName)?t.value.$el.nextElementSibling:fn(t)}const r=Object.assign({},e.exposed),o={};for(const l in e.props)Object.defineProperty(o,l,{enumerable:!0,configurable:!0,get:()=>e.props[l]});if(Object.keys(r).length>0)for(const l in r)Object.defineProperty(o,l,{enumerable:!0,configurable:!0,get:()=>r[l]});Object.defineProperty(o,"$el",{enumerable:!0,configurable:!0,get:()=>e.vnode.el}),e.exposed=o;function i(l){if(t.value=l,!!l&&(Object.defineProperty(o,"$el",{enumerable:!0,configurable:!0,get:()=>l instanceof Element?l:l.$el}),!(l instanceof Element)&&!Object.hasOwn(l,"$el"))){const a=l.$.exposed,c=Object.assign({},o);for(const u in a)Object.defineProperty(c,u,{enumerable:!0,configurable:!0,get:()=>a[u]});e.exposed=c}}return{forwardRef:i,currentRef:t,currentElement:n}}const Kh=We({name:"PrimitiveSlot",inheritAttrs:!1,setup(e,{attrs:t,slots:n}){return()=>{var a;if(!n.default)return null;const s=Ha(n.default()),r=s.findIndex(c=>c.type!==at);if(r===-1)return s;const o=s[r];(a=o.props)==null||delete a.ref;const i=o.props?mo(t,o.props):t,l=Jt({...o,props:{}},i);return s.length===1?l:(s[r]=l,s)}}}),qh=["area","img","input"],Ba=We({name:"Primitive",inheritAttrs:!1,props:{asChild:{type:Boolean,default:!1},as:{type:[String,Object],default:"div"}},setup(e,{attrs:t,slots:n}){const s=e.asChild?"template":e.as;return typeof s=="string"&&qh.includes(s)?()=>qt(s,t):s!=="template"?()=>qt(e.as,t,{default:n.default}):()=>qt(Kh,t,{default:n.default})}});var Jh=We({__name:"Label",props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"label"}},setup(e){const t=e;return Wh(),(n,s)=>(fe(),ze(H(Ba),mo(t,{onMousedown:s[0]||(s[0]=r=>{!r.defaultPrevented&&r.detail>1&&r.preventDefault()})}),{default:Ye(()=>[Qs(n.$slots,"default")]),_:3},16))}}),Yh=Jh;const Qh=Rh("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow,background-color] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 outline-none focus-visible:ring-[3px] focus-visible:ring-ring/40 focus-visible:border-ring active:scale-[0.98] select-none",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/30",outline:"border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5 text-[13px]",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8 rounded-md"}},defaultVariants:{variant:"default",size:"default"}}),Cr=We({__name:"Button",props:{asChild:{type:Boolean},as:{default:"button"},variant:{},size:{},class:{}},setup(e){const t=e;return(n,s)=>(fe(),ze(H(Ba),{as:t.as,"as-child":t.asChild,class:$e(H(Ct)(H(Qh)({variant:t.variant,size:t.size}),t.class))},{default:Ye(()=>[Qs(n.$slots,"default")]),_:3},8,["as","as-child","class"]))}}),Xh=We({__name:"Card",props:{class:{}},setup(e){const t=e;return(n,s)=>(fe(),Qe("div",{class:$e(H(Ct)("bg-card text-card-foreground rounded-xl border shadow-sm transition-colors",t.class))},[Qs(n.$slots,"default")],2))}}),Zh=["value"],em=We({__name:"Input",props:{class:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,s=t;return(r,o)=>(fe(),Qe("input",{value:n.modelValue,class:$e(H(Ct)("border-input bg-background flex h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none sm:text-sm","placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground","focus-visible:border-ring focus-visible:ring-ring/40 focus-visible:ring-[3px]","disabled:cursor-not-allowed disabled:opacity-50",n.class)),onInput:o[0]||(o[0]=i=>s("update:modelValue",i.target.value))},null,42,Zh))}}),tm=We({__name:"Label",props:{class:{},for:{}},setup(e){const t=e;return(n,s)=>(fe(),ze(H(Yh),{for:t.for,class:$e(H(Ct)("flex items-center gap-2 text-sm leading-none font-medium select-none",t.class))},{default:Ye(()=>[Qs(n.$slots,"default")]),_:3},8,["for","class"]))}}),nm={class:"bg-background flex min-h-dvh flex-col"},sm={class:"flex items-center justify-end gap-1 p-3"},rm={class:"flex flex-1 items-center justify-center px-4 pb-16"},om={class:"mb-6 flex flex-col items-center text-center"},im={class:"bg-primary text-primary-foreground mb-3 flex size-11 items-center justify-center rounded-xl"},lm={class:"text-lg font-semibold tracking-tight"},am={class:"text-muted-foreground mt-1 text-sm"},cm={class:"flex flex-col gap-2"},um={key:0,class:"text-destructive text-sm"},fm={class:"text-muted-foreground mt-4 text-center text-xs"},dm=We({__name:"LoginView",setup(e){const t=zd(),n=ma(),{lang:s,setLang:r}=ch(),{isDark:o,toggle:i}=uh(),l=Ze(""),a=Ze(!1),c=Ze("");async function u(){if(!a.value){a.value=!0,c.value="";try{await Yr.login(l.value);const f=n.query.redirect;await t.replace(typeof f=="string"?f:"/")}catch(f){c.value=f instanceof _s?f.message:Te("login.failed")}finally{a.value=!1}}}return(f,p)=>(fe(),Qe("div",nm,[le("div",sm,[de(H(Cr),{variant:"ghost",size:"sm",onClick:p[0]||(p[0]=m=>H(r)(H(s)==="zh"?"en":"zh"))},{default:Ye(()=>[Cn(Le(H(s)==="zh"?"EN":"中文"),1)]),_:1}),de(H(Cr),{variant:"ghost",size:"icon-sm","aria-label":H(Te)("settings.theme"),onClick:H(i)},{default:Ye(()=>[H(o)?(fe(),ze(H(Wd),{key:0,class:"size-4"})):(fe(),ze(H(Jd),{key:1,class:"size-4"}))]),_:1},8,["aria-label","onClick"])]),le("div",rm,[de(H(Xh),{class:"animate-slide-up w-full max-w-sm p-6"},{default:Ye(()=>[le("div",om,[le("div",im,[de(H($d),{class:"size-5"})]),le("h1",lm,Le(H(Te)("app.name")),1),le("p",am,Le(H(Te)("login.subtitle")),1)]),le("form",{class:"flex flex-col gap-3",onSubmit:Af(u,["prevent"])},[le("div",cm,[de(H(tm),{for:"password"},{default:Ye(()=>[Cn(Le(H(Te)("login.password")),1)]),_:1}),de(H(em),{id:"password",modelValue:l.value,"onUpdate:modelValue":p[1]||(p[1]=m=>l.value=m),type:"password",autocomplete:"current-password",autofocus:"",disabled:a.value},null,8,["modelValue","disabled"])]),c.value?(fe(),Qe("p",um,Le(c.value),1)):Ts("",!0),de(H(Cr),{type:"submit",class:"mt-1 w-full",disabled:a.value||!l.value},{default:Ye(()=>[a.value?(fe(),ze(H(Ud),{key:0,class:"size-4 animate-spin"})):Ts("",!0),Cn(" "+Le(H(Te)("login.submit")),1)]),_:1},8,["disabled"])],32),le("p",fm,Le(H(Te)("login.hint")),1)]),_:1})])]))}}),Ao=Dd({history:gd(),routes:[{path:"/login",name:"login",component:dm,meta:{public:!0}},{path:"/",component:kh,children:[{path:"",name:"dashboard",component:()=>Vn(()=>import("./DashboardView-BD4i_GCA.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8]))},{path:"events",name:"events",component:()=>Vn(()=>import("./EventsView-Blmx8SEw.js"),__vite__mapDeps([9,2,3,1,4,10,8,11]))},{path:"rules",name:"rules",component:()=>Vn(()=>import("./RulesView-f8xcsZeo.js"),__vite__mapDeps([12,4,8,11,7,10,3]))},{path:"analyzers",name:"analyzers",component:()=>Vn(()=>import("./AnalyzersView-Bm4Tu3Lm.js"),__vite__mapDeps([13,4,3,5,6,1]))},{path:"settings",name:"settings",component:()=>Vn(()=>import("./SettingsView-AGyc2AVS.js"),__vite__mapDeps([14,4,5,11,8]))}]},{path:"/:pathMatch(.*)*",redirect:"/"}]});Ao.beforeEach(e=>!e.meta.public&&!Ft.authenticated?{name:"login",query:e.fullPath==="/"?void 0:{redirect:e.fullPath}}:e.name==="login"&&Ft.authenticated?{name:"dashboard"}:!0);Ft.onUnauthorized(()=>{So(),Ao.replace({name:"login"})});Pf(Xp).use(Ao).mount("#app");export{Yr as $,th as A,oo as B,dn as C,mo as D,gm as E,Pe as F,Dm as G,Qs as H,km as I,Co as J,Om as K,Am as L,Af as M,_m as N,Ys as O,Ba as P,co as Q,Wh as R,Em as S,Yd as T,Oe as U,hm as V,Nu as W,ao as X,Lm as Y,Qd as Z,Xh as _,Qe as a,ch as a0,_s as a1,Hd as a2,Ud as a3,tm as a4,is as a5,vm as a6,Cm as a7,Rh as a8,uh as a9,Mm as aA,it as aB,vs as aC,wm as aD,Kh as aE,Sc as aF,So as aa,Jd as ab,Wd as ac,Im as ad,Pm as ae,Tm as af,rs as ag,or as ah,Ue as ai,jc as aj,St as ak,fn as al,bm as am,hn as an,Ha as ao,qt as ap,Nm as aq,$s as ar,Rm as as,xm as at,zh as au,ym as av,mm as aw,Qi as ax,rc as ay,Sm as az,le as b,st as c,We as d,$e as e,Ct as f,_e as g,ze as h,fr as i,Ts as j,Cn as k,Te as l,Ze as m,Hs as n,fe as o,de as p,nh as q,Nr as r,Cr as s,Le as t,H as u,zd as v,Ye as w,Et as x,em as y,Zd as z}; diff --git a/web/dist/assets/index-CNsDVyYx.css b/web/dist/assets/index-CNsDVyYx.css deleted file mode 100644 index 2160faa..0000000 --- a/web/dist/assets/index-CNsDVyYx.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--color-black:#000;--spacing:.25rem;--container-sm:24rem;--container-lg:32rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-2xl:1rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--color-background:var(--background);--color-foreground:var(--foreground);--color-muted-foreground:var(--muted-foreground);--color-border:var(--border)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--color-border)}html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}body{background-color:var(--color-background);color:var(--color-foreground);font-feature-settings:"cv02","cv03","cv04","cv11";overscroll-behavior-y:none;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){::-webkit-scrollbar-thumb{background:color-mix(in oklab,var(--color-muted-foreground) 35%,transparent)}}::-webkit-scrollbar-thumb{background-clip:content-box;border:3px solid #0000;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){::-webkit-scrollbar-thumb:hover{background:color-mix(in oklab,var(--color-muted-foreground) 55%,transparent)}}::-webkit-scrollbar-thumb:hover{background-clip:content-box}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1{top:var(--spacing)}.top-1\/2{top:50%}.right-2{right:calc(var(--spacing) * 2)}.bottom-0{bottom:0}.left-0{left:0}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-100{z-index:100}.-m-1{margin:calc(var(--spacing) * -1)}.mx-auto{margin-inline:auto}.my-3{margin-block:calc(var(--spacing) * 3)}.-mt-1{margin-top:calc(var(--spacing) * -1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.-mr-1{margin-right:calc(var(--spacing) * -1)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.field-sizing-content{field-sizing:content}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-11{width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.h-1{height:var(--spacing)}.h-2{height:calc(var(--spacing) * 2)}.h-5{height:calc(var(--spacing) * 5)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-20{height:calc(var(--spacing) * 20)}.h-24{height:calc(var(--spacing) * 24)}.h-36{height:calc(var(--spacing) * 36)}.h-\[60vh\]{height:60vh}.h-full{height:100%}.h-px{height:1px}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-\[92vh\]{max-height:92vh}.min-h-0{min-height:0}.min-h-20{min-height:calc(var(--spacing) * 20)}.min-h-28{min-height:calc(var(--spacing) * 28)}.min-h-dvh{min-height:100dvh}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-36{width:calc(var(--spacing) * 36)}.w-56{width:calc(var(--spacing) * 56)}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-3xl{max-width:var(--container-3xl)}.max-w-32{max-width:calc(var(--spacing) * 32)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:0}.min-w-\[var\(--reka-select-trigger-width\)\]{min-width:var(--reka-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-2{--tw-translate-y:calc(var(--spacing) * -2);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-fade-in{animation:.18s ease-out fade-in}.animate-pulse{animation:var(--animate-pulse)}.animate-pulse-dot{animation:1.8s ease-in-out infinite pulse-dot}.animate-slide-up{animation:.22s cubic-bezier(.32,.72,0,1) slide-up}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-pan-y{--tw-pan-y:pan-y;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.resize-y{resize:vertical}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1{row-gap:var(--spacing)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-allow\/25{border-color:var(--allow)}@supports (color:color-mix(in lab,red,red)){.border-allow\/25{border-color:color-mix(in oklab,var(--allow) 25%,transparent)}}.border-allow\/30{border-color:var(--allow)}@supports (color:color-mix(in lab,red,red)){.border-allow\/30{border-color:color-mix(in oklab,var(--allow) 30%,transparent)}}.border-allow\/40{border-color:var(--allow)}@supports (color:color-mix(in lab,red,red)){.border-allow\/40{border-color:color-mix(in oklab,var(--allow) 40%,transparent)}}.border-block\/25{border-color:var(--block)}@supports (color:color-mix(in lab,red,red)){.border-block\/25{border-color:color-mix(in oklab,var(--block) 25%,transparent)}}.border-block\/30{border-color:var(--block)}@supports (color:color-mix(in lab,red,red)){.border-block\/30{border-color:color-mix(in oklab,var(--block) 30%,transparent)}}.border-block\/40{border-color:var(--block)}@supports (color:color-mix(in lab,red,red)){.border-block\/40{border-color:color-mix(in oklab,var(--block) 40%,transparent)}}.border-destructive\/40{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/40{border-color:color-mix(in oklab,var(--destructive) 40%,transparent)}}.border-drop\/25{border-color:var(--drop)}@supports (color:color-mix(in lab,red,red)){.border-drop\/25{border-color:color-mix(in oklab,var(--drop) 25%,transparent)}}.border-drop\/30{border-color:var(--drop)}@supports (color:color-mix(in lab,red,red)){.border-drop\/30{border-color:color-mix(in oklab,var(--drop) 30%,transparent)}}.border-input{border-color:var(--input)}.border-log\/25{border-color:var(--log)}@supports (color:color-mix(in lab,red,red)){.border-log\/25{border-color:color-mix(in oklab,var(--log) 25%,transparent)}}.border-modify\/25{border-color:var(--modify)}@supports (color:color-mix(in lab,red,red)){.border-modify\/25{border-color:color-mix(in oklab,var(--modify) 25%,transparent)}}.border-tcp\/25{border-color:var(--tcp)}@supports (color:color-mix(in lab,red,red)){.border-tcp\/25{border-color:color-mix(in oklab,var(--tcp) 25%,transparent)}}.border-transparent{border-color:#0000}.border-udp\/25{border-color:var(--udp)}@supports (color:color-mix(in lab,red,red)){.border-udp\/25{border-color:color-mix(in oklab,var(--udp) 25%,transparent)}}.bg-accent{background-color:var(--accent)}.bg-allow,.bg-allow\/10{background-color:var(--allow)}@supports (color:color-mix(in lab,red,red)){.bg-allow\/10{background-color:color-mix(in oklab,var(--allow) 10%,transparent)}}.bg-allow\/12{background-color:var(--allow)}@supports (color:color-mix(in lab,red,red)){.bg-allow\/12{background-color:color-mix(in oklab,var(--allow) 12%,transparent)}}.bg-allow\/15{background-color:var(--allow)}@supports (color:color-mix(in lab,red,red)){.bg-allow\/15{background-color:color-mix(in oklab,var(--allow) 15%,transparent)}}.bg-background,.bg-background\/85{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/85{background-color:color-mix(in oklab,var(--background) 85%,transparent)}}.bg-background\/90{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/90{background-color:color-mix(in oklab,var(--background) 90%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-block,.bg-block\/10{background-color:var(--block)}@supports (color:color-mix(in lab,red,red)){.bg-block\/10{background-color:color-mix(in oklab,var(--block) 10%,transparent)}}.bg-block\/12{background-color:var(--block)}@supports (color:color-mix(in lab,red,red)){.bg-block\/12{background-color:color-mix(in oklab,var(--block) 12%,transparent)}}.bg-block\/15{background-color:var(--block)}@supports (color:color-mix(in lab,red,red)){.bg-block\/15{background-color:color-mix(in oklab,var(--block) 15%,transparent)}}.bg-border{background-color:var(--border)}.bg-card,.bg-card\/40{background-color:var(--card)}@supports (color:color-mix(in lab,red,red)){.bg-card\/40{background-color:color-mix(in oklab,var(--card) 40%,transparent)}}.bg-destructive,.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--destructive) 10%,transparent)}}.bg-drop,.bg-drop\/10{background-color:var(--drop)}@supports (color:color-mix(in lab,red,red)){.bg-drop\/10{background-color:color-mix(in oklab,var(--drop) 10%,transparent)}}.bg-drop\/12{background-color:var(--drop)}@supports (color:color-mix(in lab,red,red)){.bg-drop\/12{background-color:color-mix(in oklab,var(--drop) 12%,transparent)}}.bg-log\/12{background-color:var(--log)}@supports (color:color-mix(in lab,red,red)){.bg-log\/12{background-color:color-mix(in oklab,var(--log) 12%,transparent)}}.bg-modify,.bg-modify\/12{background-color:var(--modify)}@supports (color:color-mix(in lab,red,red)){.bg-modify\/12{background-color:color-mix(in oklab,var(--modify) 12%,transparent)}}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\/25{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/25{background-color:color-mix(in oklab,var(--muted-foreground) 25%,transparent)}}.bg-muted\/60{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/60{background-color:color-mix(in oklab,var(--muted) 60%,transparent)}}.bg-popover{background-color:var(--popover)}.bg-primary,.bg-primary\/15{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/15{background-color:color-mix(in oklab,var(--primary) 15%,transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-tcp,.bg-tcp\/12{background-color:var(--tcp)}@supports (color:color-mix(in lab,red,red)){.bg-tcp\/12{background-color:color-mix(in oklab,var(--tcp) 12%,transparent)}}.bg-udp,.bg-udp\/12{background-color:var(--udp)}@supports (color:color-mix(in lab,red,red)){.bg-udp\/12{background-color:color-mix(in oklab,var(--udp) 12%,transparent)}}.fill-tcp\/45{fill:var(--tcp)}@supports (color:color-mix(in lab,red,red)){.fill-tcp\/45{fill:color-mix(in oklab,var(--tcp) 45%,transparent)}}.fill-udp\/25{fill:var(--udp)}@supports (color:color-mix(in lab,red,red)){.fill-udp\/25{fill:color-mix(in oklab,var(--udp) 25%,transparent)}}.stroke-block{stroke:var(--block)}.stroke-border{stroke:var(--border)}.stroke-foreground\/40{stroke:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.stroke-foreground\/40{stroke:color-mix(in oklab,var(--foreground) 40%,transparent)}}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.safe-top{padding-top:max(env(safe-area-inset-top),0px)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.pb-24{padding-bottom:calc(var(--spacing) * 24)}.pb-\[max\(1rem\,env\(safe-area-inset-bottom\)\)\]{padding-bottom:max(1rem,env(safe-area-inset-bottom))}.safe-bottom{padding-bottom:max(env(safe-area-inset-bottom),0px)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent-foreground{color:var(--accent-foreground)}.text-allow{color:var(--allow)}.text-block{color:var(--block)}.text-card-foreground{color:var(--card-foreground)}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-drop{color:var(--drop)}.text-foreground{color:var(--foreground)}.text-log{color:var(--log)}.text-modify{color:var(--modify)}.text-muted-foreground,.text-muted-foreground\/60{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/60{color:color-mix(in oklab,var(--muted-foreground) 60%,transparent)}}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-tcp{color:var(--tcp)}.text-udp{color:var(--udp)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\,background-color\]{transition-property:color,box-shadow,background-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}@media(hover:hover){.hover\:bg-accent:hover,.hover\:bg-accent\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/50:hover{background-color:color-mix(in oklab,var(--accent) 50%,transparent)}}.hover\:bg-accent\/60:hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/60:hover{background-color:color-mix(in oklab,var(--accent) 60%,transparent)}}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive) 90%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary) 90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary) 80%,transparent)}}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/30:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/30:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 30%, transparent)}}.focus-visible\:ring-ring\/40:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 40%, transparent)}}.active\:scale-\[0\.98\]:active{scale:.98}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing) * 2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing) * 3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing) * 4)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=unchecked\]\:translate-x-0\.5[data-state=unchecked]{--tw-translate-x:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}@media(min-width:40rem){.sm\:top-1\/2{top:50%}.sm\:top-auto{top:auto}.sm\:right-0{right:0}.sm\:bottom-0{bottom:0}.sm\:bottom-auto{bottom:auto}.sm\:left-1\/2{left:50%}.sm\:left-auto{left:auto}.sm\:mb-6{margin-bottom:calc(var(--spacing) * 6)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:inline-flex{display:inline-flex}.sm\:h-44{height:calc(var(--spacing) * 44)}.sm\:max-h-\[85vh\]{max-height:85vh}.sm\:w-28{width:calc(var(--spacing) * 28)}.sm\:w-32{width:calc(var(--spacing) * 32)}.sm\:w-full{width:100%}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.sm\:-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.sm\:translate-y-2{--tw-translate-y:calc(var(--spacing) * 2);translate:var(--tw-translate-x) var(--tw-translate-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:justify-end{justify-content:flex-end}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:rounded-xl{border-radius:calc(var(--radius) + 4px)}.sm\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.sm\:p-4{padding:calc(var(--spacing) * 4)}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.sm\:px-5{padding-inline:calc(var(--spacing) * 5)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:pt-5{padding-top:calc(var(--spacing) * 5)}.sm\:pt-6{padding-top:calc(var(--spacing) * 6)}.sm\:pb-5{padding-bottom:calc(var(--spacing) * 5)}.sm\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.sm\:text-\[13px\]{font-size:13px}}@media(min-width:48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:pb-8{padding-bottom:calc(var(--spacing) * 8)}.md\:pl-56{padding-left:calc(var(--spacing) * 56)}}@media(min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:w-60{width:calc(var(--spacing) * 60)}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:pl-60{padding-left:calc(var(--spacing) * 60)}}@media(min-width:80rem){.xl\:col-span-1{grid-column:span 1/span 1}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-3\.5 svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}}:root{--radius:.65rem;--background:oklch(100% 0 0);--foreground:oklch(14.1% .005 285.823);--card:oklch(100% 0 0);--card-foreground:oklch(14.1% .005 285.823);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.1% .005 285.823);--primary:oklch(21% .006 285.885);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(96.7% .001 286.375);--secondary-foreground:oklch(21% .006 285.885);--muted:oklch(96.7% .001 286.375);--muted-foreground:oklch(55.2% .016 285.938);--accent:oklch(96.7% .001 286.375);--accent-foreground:oklch(21% .006 285.885);--destructive:oklch(57.7% .245 27.325);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(92% .004 286.32);--input:oklch(92% .004 286.32);--ring:oklch(70.5% .015 286.067);--allow:oklch(63% .14 155);--block:oklch(58% .22 27);--drop:oklch(72% .16 70);--modify:oklch(60% .16 255);--log:oklch(62% .11 215);--tcp:oklch(62% .15 265);--udp:oklch(68% .13 190)}.dark{--background:oklch(14.1% .005 285.823);--foreground:oklch(98.5% 0 0);--card:oklch(19% .006 285.885);--card-foreground:oklch(98.5% 0 0);--popover:oklch(21% .006 285.885);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92% .004 286.32);--primary-foreground:oklch(21% .006 285.885);--secondary:oklch(27.4% .006 286.033);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(27.4% .006 286.033);--muted-foreground:oklch(70.5% .015 286.067);--accent:oklch(27.4% .006 286.033);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.2% .016 285.938);--allow:oklch(72% .16 155);--block:oklch(68% .2 22);--drop:oklch(79% .15 75);--modify:oklch(70% .15 255);--log:oklch(72% .11 215);--tcp:oklch(70% .15 265);--udp:oklch(76% .12 190)}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes slide-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-in-right{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes slide-in-left{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.35}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/web/dist/assets/index-D3ZCYstt.js b/web/dist/assets/index-D3ZCYstt.js deleted file mode 100644 index 36821ac..0000000 --- a/web/dist/assets/index-D3ZCYstt.js +++ /dev/null @@ -1,106 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DashboardView-BnrlcswN.js","assets/format-B6sc_rZ4.js","assets/EventItem.vue_vue_type_script_setup_true_lang-DS497KtL.js","assets/Badge.vue_vue_type_script_setup_true_lang--8bF8KCa.js","assets/PageHeader.vue_vue_type_script_setup_true_lang-CDyKzgiP.js","assets/CardTitle.vue_vue_type_script_setup_true_lang-BcE23HB-.js","assets/Skeleton.vue_vue_type_script_setup_true_lang-C9uTg8Ty.js","assets/TabsTrigger.vue_vue_type_script_setup_true_lang-DTNukDpV.js","assets/Collection-D-pf6tmY.js","assets/EventsView-DvVZcEec.js","assets/Modal.vue_vue_type_script_setup_true_lang-gNNtNPLv.js","assets/Select.vue_vue_type_script_setup_true_lang-C15l-n0X.js","assets/RulesView-SxOStRNP.js","assets/AnalyzersView-CHLlPReV.js","assets/SettingsView-CQy8Fv4M.js"])))=>i.map(i=>d[i]); -var Ba=Object.defineProperty;var Ga=(e,t,n)=>t in e?Ba(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var To=(e,t,n)=>Ga(e,typeof t!="symbol"?t+"":t,n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function n(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(r){if(r.ep)return;r.ep=!0;const o=n(r);fetch(r.href,o)}})();/** -* @vue/shared v3.5.40 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Jr(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ge={},vn=[],xt=()=>{},Fi=()=>!1,Ts=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ps=e=>e.startsWith("onUpdate:"),Ae=Object.assign,Yr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ha=Object.prototype.hasOwnProperty,ue=(e,t)=>Ha.call(e,t),U=Array.isArray,yn=e=>ts(e)==="[object Map]",ji=e=>ts(e)==="[object Set]",Po=e=>ts(e)==="[object Date]",q=e=>typeof e=="function",ye=e=>typeof e=="string",et=e=>typeof e=="symbol",ae=e=>e!==null&&typeof e=="object",Bi=e=>(ae(e)||q(e))&&q(e.then)&&q(e.catch),Gi=Object.prototype.toString,ts=e=>Gi.call(e),$a=e=>ts(e).slice(8,-1),Hi=e=>ts(e)==="[object Object]",Os=e=>ye(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,jn=Jr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Is=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Ua=/-\w/g,$e=Is(e=>e.replace(Ua,t=>t.slice(1).toUpperCase())),Wa=/\B([A-Z])/g,Yt=Is(e=>e.replace(Wa,"-$1").toLowerCase()),Ns=Is(e=>e.charAt(0).toUpperCase()+e.slice(1)),er=Is(e=>e?`on${Ns(e)}`:""),rt=(e,t)=>!Object.is(e,t),tr=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Ka=e=>{const t=parseFloat(e);return isNaN(t)?e:t},qa=e=>{const t=ye(e)?Number(e):NaN;return isNaN(t)?e:t};let Oo;const Ms=()=>Oo||(Oo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ls(e){if(U(e)){const t={};for(let n=0;n{if(n){const s=n.split(Ya);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Ue(e){let t="";if(ye(e))t=e;else if(U(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Le=e=>ye(e)?e:e==null?"":U(e)||ae(e)&&(e.toString===Gi||!q(e.toString))?Wi(e)?Le(e.value):JSON.stringify(e,Ki,2):String(e),Ki=(e,t)=>Wi(t)?Ki(e,t.value):yn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],o)=>(n[nr(s,o)+" =>"]=r,n),{})}:ji(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>nr(n))}:et(t)?nr(t):ae(t)&&!U(t)&&!Hi(t)?String(t):t,nr=(e,t="")=>{var n;return et(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.5.40 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Re;class qi{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Re&&(Re.active?(this.parent=Re,this.index=(Re.scopes||(Re.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const s=this.scopes.slice();for(t=0,n=s.length;t0&&--this._on===0){if(Re===this)Re=this.prevScope;else{let t=Re;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Gn){let t=Gn;for(Gn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Bn;){let t=Bn;for(Bn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function el(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function tl(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),eo(s),sc(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function wr(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(nl(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function nl(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Kn)||(e.globalVersion=Kn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!wr(e))))return;e.flags|=2;const t=e.dep,n=ve,s=ot;ve=e,ot=!0;try{el(e);const r=e.fn(e._value);(t.version===0||rt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ve=n,ot=s,tl(e),e.flags&=-3}}function eo(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let o=n.computed.deps;o;o=o.nextDep)eo(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function sc(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let ot=!0;const sl=[];function Lt(){sl.push(ot),ot=!1}function Dt(){const e=sl.pop();ot=e===void 0?!0:e}function Io(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ve;ve=void 0;try{t()}finally{ve=n}}}let Kn=0;class rc{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Ds{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!ve||!ot||ve===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ve)n=this.activeLink=new rc(ve,this),ve.deps?(n.prevDep=ve.depsTail,ve.depsTail.nextDep=n,ve.depsTail=n):ve.deps=ve.depsTail=n,rl(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ve.depsTail,n.nextDep=void 0,ve.depsTail.nextDep=n,ve.depsTail=n,ve.deps===n&&(ve.deps=s)}return n}trigger(t){this.version++,Kn++,this.notify(t)}notify(t){Xr();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Zr()}}}function rl(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)rl(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const ms=new WeakMap,ln=Symbol(""),Sr=Symbol(""),qn=Symbol("");function De(e,t,n){if(ot&&ve){let s=ms.get(e);s||ms.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Ds),r.map=s,r.key=n),r.track()}}function Pt(e,t,n,s,r,o){const i=ms.get(e);if(!i){Kn++;return}const l=a=>{a&&a.trigger()};if(Xr(),t==="clear")i.forEach(l);else{const a=U(e),c=a&&Os(n);if(a&&n==="length"){const u=Number(s);i.forEach((f,h)=>{(h==="length"||h===qn||!et(h)&&h>=u)&&l(f)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),c&&l(i.get(qn)),t){case"add":a?c&&l(i.get("length")):(l(i.get(ln)),yn(e)&&l(i.get(Sr)));break;case"delete":a||(l(i.get(ln)),yn(e)&&l(i.get(Sr)));break;case"set":yn(e)&&l(i.get(ln));break}}Zr()}function oc(e,t){const n=ms.get(e);return n&&n.get(t)}function pn(e){const t=ie(e);return t===e?t:(De(t,"iterate",qn),Xe(e)?t:t.map(lt))}function zs(e){return De(e=ie(e),"iterate",qn),e}function yt(e,t){return zt(e)?En(an(e)?lt(t):t):lt(t)}const ic={__proto__:null,[Symbol.iterator](){return rr(this,Symbol.iterator,e=>yt(this,e))},concat(...e){return pn(this).concat(...e.map(t=>U(t)?pn(t):t))},entries(){return rr(this,"entries",e=>(e[1]=yt(this,e[1]),e))},every(e,t){return Et(this,"every",e,t,void 0,arguments)},filter(e,t){return Et(this,"filter",e,t,n=>n.map(s=>yt(this,s)),arguments)},find(e,t){return Et(this,"find",e,t,n=>yt(this,n),arguments)},findIndex(e,t){return Et(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Et(this,"findLast",e,t,n=>yt(this,n),arguments)},findLastIndex(e,t){return Et(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Et(this,"forEach",e,t,void 0,arguments)},includes(...e){return or(this,"includes",e)},indexOf(...e){return or(this,"indexOf",e)},join(e){return pn(this).join(e)},lastIndexOf(...e){return or(this,"lastIndexOf",e)},map(e,t){return Et(this,"map",e,t,void 0,arguments)},pop(){return Pn(this,"pop")},push(...e){return Pn(this,"push",e)},reduce(e,...t){return No(this,"reduce",e,t)},reduceRight(e,...t){return No(this,"reduceRight",e,t)},shift(){return Pn(this,"shift")},some(e,t){return Et(this,"some",e,t,void 0,arguments)},splice(...e){return Pn(this,"splice",e)},toReversed(){return pn(this).toReversed()},toSorted(e){return pn(this).toSorted(e)},toSpliced(...e){return pn(this).toSpliced(...e)},unshift(...e){return Pn(this,"unshift",e)},values(){return rr(this,"values",e=>yt(this,e))}};function rr(e,t,n){const s=zs(e),r=s[t]();return s!==e&&!Xe(e)&&(r._next=r.next,r.next=()=>{const o=r._next();return o.done||(o.value=n(o.value)),o}),r}const lc=Array.prototype;function Et(e,t,n,s,r,o){const i=zs(e),l=i!==e&&!Xe(e),a=i[t];if(a!==lc[t]){const f=a.apply(e,o);return l?lt(f):f}let c=n;i!==e&&(l?c=function(f,h){return n.call(this,yt(e,f),h,e)}:n.length>2&&(c=function(f,h){return n.call(this,f,h,e)}));const u=a.call(i,c,s);return l&&r?r(u):u}function No(e,t,n,s){const r=zs(e),o=r!==e&&!Xe(e);let i=n,l=!1;r!==e&&(o?(l=s.length===0,i=function(c,u,f){return l&&(l=!1,c=yt(e,c)),n.call(this,c,yt(e,u),f,e)}):n.length>3&&(i=function(c,u,f){return n.call(this,c,u,f,e)}));const a=r[t](i,...s);return l?yt(e,a):a}function or(e,t,n){const s=ie(e);De(s,"iterate",qn);const r=s[t](...n);return(r===-1||r===!1)&&Bs(n[0])?(n[0]=ie(n[0]),s[t](...n)):r}function Pn(e,t,n=[]){Lt(),Xr();const s=ie(e)[t].apply(e,n);return Zr(),Dt(),s}const ac=Jr("__proto__,__v_isRef,__isVue"),ol=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(et));function cc(e){et(e)||(e=String(e));const t=ie(this);return De(t,"has",e),t.hasOwnProperty(e)}class il{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(r?o?dl:fl:o?ul:cl).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=U(t);if(!r){let a;if(i&&(a=ic[n]))return a;if(n==="hasOwnProperty")return cc}const l=Reflect.get(t,n,Oe(t)?t:s);if((et(n)?ol.has(n):ac(n))||(r||De(t,"get",n),o))return l;if(Oe(l)){const a=i&&Os(n)?l:l.value;return r&&ae(a)?Ar(a):a}return ae(l)?r?Ar(l):Fs(l):l}}class ll extends il{constructor(t=!1){super(!1,t)}set(t,n,s,r){let o=t[n];const i=U(t)&&Os(n);if(!this._isShallow){const c=zt(o);if(!Xe(s)&&!zt(s)&&(o=ie(o),s=ie(s)),!i&&Oe(o)&&!Oe(s))return c||(o.value=s),!0}const l=i?Number(n)e,rs=e=>Reflect.getPrototypeOf(e);function hc(e,t,n){return function(...s){const r=this.__v_raw,o=ie(r),i=yn(o),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,c=r[e](...s),u=n?Er:t?En:lt;return!t&&De(o,"iterate",a?Sr:ln),Ae(Object.create(c),{next(){const{value:f,done:h}=c.next();return h?{value:f,done:h}:{value:l?[u(f[0]),u(f[1])]:u(f),done:h}}})}}function os(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function mc(e,t){const n={get(r){const o=this.__v_raw,i=ie(o),l=ie(r);e||(rt(r,l)&&De(i,"get",r),De(i,"get",l));const{has:a}=rs(i),c=t?Er:e?En:lt;if(a.call(i,r))return c(o.get(r));if(a.call(i,l))return c(o.get(l));o!==i&&o.get(r)},get size(){const r=this.__v_raw;return!e&&De(ie(r),"iterate",ln),r.size},has(r){const o=this.__v_raw,i=ie(o),l=ie(r);return e||(rt(r,l)&&De(i,"has",r),De(i,"has",l)),r===l?o.has(r):o.has(r)||o.has(l)},forEach(r,o){const i=this,l=i.__v_raw,a=ie(l),c=t?Er:e?En:lt;return!e&&De(a,"iterate",ln),l.forEach((u,f)=>r.call(o,c(u),c(f),i))}};return Ae(n,e?{add:os("add"),set:os("set"),delete:os("delete"),clear:os("clear")}:{add(r){const o=ie(this),i=rs(o),l=ie(r),a=!t&&!Xe(r)&&!zt(r)?l:r;return i.has.call(o,a)||rt(r,a)&&i.has.call(o,r)||rt(l,a)&&i.has.call(o,l)||(o.add(a),Pt(o,"add",a,a)),this},set(r,o){!t&&!Xe(o)&&!zt(o)&&(o=ie(o));const i=ie(this),{has:l,get:a}=rs(i);let c=l.call(i,r);c||(r=ie(r),c=l.call(i,r));const u=a.call(i,r);return i.set(r,o),c?rt(o,u)&&Pt(i,"set",r,o):Pt(i,"add",r,o),this},delete(r){const o=ie(this),{has:i,get:l}=rs(o);let a=i.call(o,r);a||(r=ie(r),a=i.call(o,r)),l&&l.call(o,r);const c=o.delete(r);return a&&Pt(o,"delete",r,void 0),c},clear(){const r=ie(this),o=r.size!==0,i=r.clear();return o&&Pt(r,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=hc(r,e,t)}),n}function Vs(e,t){const n=mc(e,t);return(s,r,o)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(ue(n,r)&&r in s?n:s,r,o)}const gc={get:Vs(!1,!1)},bc={get:Vs(!1,!0)},vc={get:Vs(!0,!1)},yc={get:Vs(!0,!0)},cl=new WeakMap,ul=new WeakMap,fl=new WeakMap,dl=new WeakMap;function _c(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Fs(e){return zt(e)?e:js(e,!1,uc,gc,cl)}function pl(e){return js(e,!1,dc,bc,ul)}function Ar(e){return js(e,!0,fc,vc,fl)}function im(e){return js(e,!0,pc,yc,dl)}function js(e,t,n,s,r){if(!ae(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const o=r.get(e);if(o)return o;const i=_c($a(e));if(i===0)return e;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function an(e){return zt(e)?an(e.__v_raw):!!(e&&e.__v_isReactive)}function zt(e){return!!(e&&e.__v_isReadonly)}function Xe(e){return!!(e&&e.__v_isShallow)}function Bs(e){return e?!!e.__v_raw:!1}function ie(e){const t=e&&e.__v_raw;return t?ie(t):e}function xc(e){return!ue(e,"__v_skip")&&Object.isExtensible(e)&&$i(e,"__v_skip",!0),e}const lt=e=>ae(e)?Fs(e):e,En=e=>ae(e)?Ar(e):e;function Oe(e){return e?e.__v_isRef===!0:!1}function Ze(e){return hl(e,!1)}function to(e){return hl(e,!0)}function hl(e,t){return Oe(e)?e:new wc(e,t)}class wc{constructor(t,n){this.dep=new Ds,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:ie(t),this._value=n?t:lt(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Xe(t)||zt(t);t=s?t:ie(t),rt(t,n)&&(this._rawValue=t,this._value=s?t:lt(t),this.dep.trigger())}}function Sc(e){e.dep&&e.dep.trigger()}function B(e){return Oe(e)?e.value:e}function It(e){return q(e)?e():B(e)}const Ec={get:(e,t,n)=>t==="__v_raw"?e:B(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return Oe(r)&&!Oe(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function ml(e){return an(e)?e:new Proxy(e,Ec)}class Ac{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Ds,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Cc(e){return new Ac(e)}function lm(e){const t=U(e)?new Array(e.length):{};for(const n in e)t[n]=gl(e,n);return t}class kc{constructor(t,n,s){this._object=t,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._key=et(n)?n:String(n),this._raw=ie(t);let r=!0,o=t;if(!U(t)||et(this._key)||!Os(this._key))do r=!Bs(o)||Xe(o);while(r&&(o=o.__v_raw));this._shallow=r}get value(){let t=this._object[this._key];return this._shallow&&(t=B(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&Oe(this._raw[this._key])){const n=this._object[this._key];if(Oe(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return oc(this._raw,this._key)}}class Rc{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function am(e,t,n){return Oe(e)?e:q(e)?new Rc(e):ae(e)&&arguments.length>1?gl(e,t,n):Ze(e)}function gl(e,t,n){return new kc(e,t,n)}class Tc{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Ds(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Kn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&ve!==this)return Zi(this,!0),!0}get value(){const t=this.dep.track();return nl(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Pc(e,t,n=!1){let s,r;return q(e)?s=e:(s=e.get,r=e.set),new Tc(s,r,n)}const is={},gs=new WeakMap;let nn;function Oc(e,t=!1,n=nn){if(n){let s=gs.get(n);s||gs.set(n,s=[]),s.push(e)}}function Ic(e,t,n=ge){const{immediate:s,deep:r,once:o,scheduler:i,augmentJob:l,call:a}=n,c=T=>r?T:Xe(T)||r===!1||r===0?Ot(T,1):Ot(T);let u,f,h,m,E=!1,x=!1;if(Oe(e)?(f=()=>e.value,E=Xe(e)):an(e)?(f=()=>c(e),E=!0):U(e)?(x=!0,E=e.some(T=>an(T)||Xe(T)),f=()=>e.map(T=>{if(Oe(T))return T.value;if(an(T))return c(T);if(q(T))return a?a(T,2):T()})):q(e)?t?f=a?()=>a(e,2):e:f=()=>{if(h){Lt();try{h()}finally{Dt()}}const T=nn;nn=u;try{return a?a(e,3,[m]):e(m)}finally{nn=T}}:f=xt,t&&r){const T=f,J=r===!0?1/0:r;f=()=>Ot(T(),J)}const k=Yi(),I=()=>{u.stop(),k&&k.active&&Yr(k.effects,u)};if(o&&t){const T=t;t=(...J)=>{const Y=T(...J);return I(),Y}}let _=x?new Array(e.length).fill(is):is;const M=T=>{if(!(!(u.flags&1)||!u.dirty&&!T))if(t){const J=u.run();if(T||r||E||(x?J.some((Y,j)=>rt(Y,_[j])):rt(J,_))){h&&h();const Y=nn;nn=u;try{const j=[J,_===is?void 0:x&&_[0]===is?[]:_,m];_=J,a?a(t,3,j):t(...j)}finally{nn=Y}}}else u.run()};return l&&l(M),u=new Qi(f),u.scheduler=i?()=>i(M,!1):M,m=T=>Oc(T,!1,u),h=u.onStop=()=>{const T=gs.get(u);if(T){if(a)a(T,4);else for(const J of T)J();gs.delete(u)}},t?s?M(!0):_=u.run():i?i(M.bind(null,!0),!0):u.run(),I.pause=u.pause.bind(u),I.resume=u.resume.bind(u),I.stop=I,I}function Ot(e,t=1/0,n){if(t<=0||!ae(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Oe(e))Ot(e.value,t,n);else if(U(e))for(let s=0;s{Ot(s,t,n)});else if(Hi(e)){for(const s in e)Ot(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Ot(e[s],t,n)}return e}/** -* @vue/runtime-core v3.5.40 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function ns(e,t,n,s){try{return s?e(...s):e()}catch(r){Gs(r,t,n)}}function nt(e,t,n,s){if(q(e)){const r=ns(e,t,n,s);return r&&Bi(r)&&r.catch(o=>{Gs(o,t,n)}),r}if(U(e)){const r=[];for(let o=0;o>>1,r=Ge[s],o=Jn(r);o=Jn(n)?Ge.push(e):Ge.splice(Mc(t),0,e),e.flags|=1,vl()}}function vl(){bs||(bs=bl.then(_l))}function Lc(e){U(e)?_n.push(...e):Ut&&e.id===-1?Ut.splice(hn+1,0,e):e.flags&1||(_n.push(e),e.flags|=1),vl()}function Mo(e,t,n=bt+1){for(;nJn(n)-Jn(s));if(_n.length=0,Ut){Ut.push(...t);return}for(Ut=t,hn=0;hne.id==null?e.flags&2?-1:1/0:e.id;function _l(e){try{for(bt=0;bt{s._d&&xs(-1);const o=vs(t),i=Mt.length;let l;try{l=e(...r)}finally{for(let a=Mt.length;a>i;a--)uo();vs(o),s._d&&xs(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function cm(e,t){if(Me===null)return e;const n=Js(Me),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&q(t)?t.call(s&&s.proxy):t}}const Dc=Symbol.for("v-scx"),zc=()=>it(Dc);function um(e,t){return Hs(e,null,t)}function fm(e,t){return Hs(e,null,{flush:"post"})}function Nt(e,t,n){return Hs(e,t,n)}function Hs(e,t,n=ge){const{immediate:s,deep:r,flush:o,once:i}=n,l=Ae({},n),a=t&&s||!t&&o!=="post";let c;if(Xn){if(o==="sync"){const m=zc();c=m.__watcherHandles||(m.__watcherHandles=[])}else if(!a){const m=()=>{};return m.stop=xt,m.resume=xt,m.pause=xt,m}}const u=Ve;l.call=(m,E,x)=>nt(m,u,E,x);let f=!1;o==="post"?l.scheduler=m=>{je(m,u&&u.suspense)}:o!=="sync"&&(f=!0,l.scheduler=(m,E)=>{E?m():so(m)}),l.augmentJob=m=>{t&&(m.flags|=4),f&&(m.flags|=2,u&&(m.id=u.uid,m.i=u))};const h=Ic(e,t,l);return Xn&&(c?c.push(h):a&&h()),h}function Vc(e,t,n){const s=this.proxy,r=ye(e)?e.includes(".")?wl(s,e):()=>s[e]:e.bind(s,s);let o;q(t)?o=t:(o=t.handler,n=t);const i=ss(this),l=Hs(r,o.bind(s),n);return i(),l}function wl(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,sn=e=>e&&(e.disabled||e.disabled===""),jc=e=>e&&(e.defer||e.defer===""),Lo=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Do=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Cr=(e,t)=>{const n=e&&e.to;return ye(n)?t?t(n):null:n},Bc={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,o,i,l,a,c){const{mc:u,pc:f,pbc:h,o:{insert:m,querySelector:E,createText:x,createComment:k,parentNode:I}}=c,_=sn(t.props);let{dynamicChildren:M}=t;const T=(j,C,N)=>{j.shapeFlag&16&&u(j.children,C,N,r,o,i,l,a)},J=(j=t)=>{const C=sn(j.props),N=j.target=Cr(j.props,E),Z=kr(N,j,x,m);N&&(i!=="svg"&&Lo(N)?i="svg":i!=="mathml"&&Do(N)&&(i="mathml"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add(N),C||(T(j,N,Z),zn(j,!1)))},Y=j=>{const C=()=>{if(Ht.get(j)===C){if(Ht.delete(j),sn(j.props)){const N=I(j.el)||n;T(j,N,j.anchor),zn(j,!0)}J(j)}};Ht.set(j,C),je(C,o)};if(e==null){const j=t.el=x(""),C=t.anchor=x("");if(m(j,n,s),m(C,n,s),jc(t.props)||o&&o.pendingBranch){Y(t);return}_&&(T(t,n,C),zn(t,!0)),J()}else{t.el=e.el;const j=t.anchor=e.anchor,C=Ht.get(e);if(C){C.flags|=8,Ht.delete(e),Y(t);return}t.targetStart=e.targetStart;const N=t.target=e.target,Z=t.targetAnchor=e.targetAnchor,ne=sn(e.props),L=ne?n:N,te=ne?j:Z;if(i==="svg"||Lo(N)?i="svg":(i==="mathml"||Do(N))&&(i="mathml"),M?(h(e.dynamicChildren,M,L,r,o,i,l),co(e,t,!0)):a||f(e,t,L,te,r,o,i,l,!1),_)ne?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):ls(t,n,j,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const be=Cr(t.props,E);be&&(t.target=be,ls(t,be,null,c,0))}else ne&&ls(t,N,Z,c,1);zn(t,_)}},remove(e,t,n,{um:s,o:{remove:r}},o){const{shapeFlag:i,children:l,anchor:a,targetStart:c,targetAnchor:u,target:f,props:h}=e,m=sn(h),E=o||!m,x=Ht.get(e);if(x&&(x.flags|=8,Ht.delete(e)),f&&(r(c),r(u)),o&&r(a),!x&&(m||f)&&i&16)for(let k=0;k{e.isMounted=!0}),oo(()=>{e.isUnmounting=!0}),e}const tt=[Function,Array],$c={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:tt,onEnter:tt,onAfterEnter:tt,onEnterCancelled:tt,onBeforeLeave:tt,onLeave:tt,onAfterLeave:tt,onLeaveCancelled:tt,onBeforeAppear:tt,onAppear:tt,onAfterAppear:tt,onAppearCancelled:tt};function Uc(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Rr(e,t,n,s,r){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:a,onEnter:c,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:h,onLeave:m,onAfterLeave:E,onLeaveCancelled:x,onBeforeAppear:k,onAppear:I,onAfterAppear:_,onAppearCancelled:M}=t,T=String(e.key),J=Uc(n,e),Y=(N,Z)=>{N&&nt(N,s,9,Z)},j=(N,Z)=>{const ne=Z[1];Y(N,Z),U(N)?N.every(L=>L.length<=1)&&ne():N.length<=1&&ne()},C={mode:i,persisted:l,beforeEnter(N){let Z=a;if(!n.isMounted)if(o)Z=k||a;else return;N[vt]&&N[vt](!0);const ne=J[T];ne&&mn(e,ne)&&ne.el[vt]&&ne.el[vt](),Y(Z,[N])},enter(N){if(J[T]===e)return;let Z=c,ne=u,L=f;if(!n.isMounted)if(o)Z=I||c,ne=_||u,L=M||f;else return;let te=!1;N[On]=Se=>{te||(te=!0,Se?Y(L,[N]):Y(ne,[N]),C.delayedLeave&&C.delayedLeave(),N[On]=void 0)};const be=N[On].bind(null,!1);Z?j(Z,[N,be]):be()},leave(N,Z){const ne=String(e.key);if(N[On]&&N[On](!0),n.isUnmounting)return Z();Y(h,[N]);let L=!1;N[vt]=be=>{L||(L=!0,Z(),be?Y(x,[N]):Y(E,[N]),N[vt]=void 0,J[ne]===e&&delete J[ne])};const te=N[vt].bind(null,!1);J[ne]=e,m?j(m,[N,te]):te()},clone(N){return Rr(N,t,n,s)}};return C}function Yn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Yn(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 El(e,t=!1,n){let s=[],r=0;for(let o=0;o1)for(let o=0;oHn(x,t&&(U(t)?t[k]:t),n,s,r));return}if(xn(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Hn(e,t,n,s.component.subTree);return}const o=s.shapeFlag&4?Js(s.component):s.el,i=r?null:o,{i:l,r:a}=e,c=t&&t.r,u=l.refs===ge?l.refs={}:l.refs,f=l.setupState,h=ie(f),m=f===ge?Fi:x=>zo(u,x)?!1:ue(h,x),E=(x,k)=>!(k&&zo(u,k));if(c!=null&&c!==a){if(Vo(t),ye(c))u[c]=null,m(c)&&(f[c]=null);else if(Oe(c)){const x=t;E(c,x.k)&&(c.value=null),x.k&&(u[x.k]=null)}}if(q(a))ns(a,l,12,[i,u]);else{const x=ye(a),k=Oe(a);if(x||k){const I=()=>{if(e.f){const _=x?m(a)?f[a]:u[a]:E()||!e.k?a.value:u[e.k];if(r)U(_)&&Yr(_,o);else if(U(_))_.includes(o)||_.push(o);else if(x)u[a]=[o],m(a)&&(f[a]=u[a]);else{const M=[o];E(a,e.k)&&(a.value=M),e.k&&(u[e.k]=M)}}else x?(u[a]=i,m(a)&&(f[a]=i)):k&&(E(a,e.k)&&(a.value=i),e.k&&(u[e.k]=i))};if(i){const _=()=>{I(),ys.delete(e)};_.id=-1,ys.set(e,_),je(_,n)}else Vo(e),I()}}}function Vo(e){const t=ys.get(e);t&&(t.flags|=8,ys.delete(e))}Ms().requestIdleCallback;Ms().cancelIdleCallback;const xn=e=>!!e.type.__asyncLoader,Cl=e=>e.type.__isKeepAlive;function Wc(e,t){kl(e,"a",t)}function Kc(e,t){kl(e,"da",t)}function kl(e,t,n=Ve){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if($s(t,s,n),n){let r=n.parent;for(;r&&r.parent;)Cl(r.parent.vnode)&&qc(s,t,n,r),r=r.parent}}function qc(e,t,n,s){const r=$s(t,e,s,!0);io(()=>{Yr(s[t],r)},n)}function $s(e,t,n=Ve,s=!1){if(n){const r=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{Lt();const l=ss(n),a=nt(t,n,e,i);return l(),Dt(),a});return s?r.unshift(o):r.push(o),o}}const Ft=e=>(t,n=Ve)=>{(!Xn||e==="sp")&&$s(e,(...s)=>t(...s),n)},Jc=Ft("bm"),Us=Ft("m"),Yc=Ft("bu"),ro=Ft("u"),oo=Ft("bum"),io=Ft("um"),Qc=Ft("sp"),Xc=Ft("rtg"),Zc=Ft("rtc");function eu(e,t=Ve){$s("ec",e,t)}const tu="components",Rl=Symbol.for("v-ndc");function ir(e){return ye(e)?nu(tu,e,!1)||e:e||Rl}function nu(e,t,n=!0,s=!1){const r=Me||Ve;if(r){const o=r.type;{const l=Vu(o,!1);if(l&&(l===t||l===$e(t)||l===Ns($e(t))))return o}const i=Fo(r[e]||o[e],t)||Fo(r.appContext[e],t);return!i&&s?o:i}}function Fo(e,t){return e&&(e[t]||e[$e(t)]||e[Ns($e(t))])}function Tr(e,t,n,s){let r;const o=n,i=U(e);if(i||ye(e)){const l=i&&an(e);let a=!1,c=!1;l&&(a=!Xe(e),c=zt(e),e=zs(e)),r=new Array(e.length);for(let u=0,f=e.length;ut(l,a,void 0,o));else{const l=Object.keys(e);r=new Array(l.length);for(let a=0,c=l.length;a0;return t!=="default"&&(c.name=t),fe(),ze(Pe,null,[de("slot",c,s&&s())],u?-2:64)}let i=e[t];i&&i._c&&(i._d=!1);const l=Mt.length;fe();let a;try{const c=i&&Tl(i(n)),u=n.key||o||c&&c.key;a=ze(Pe,{key:(u&&!et(u)?u:`_${t}`)+(!c&&s?"_fb":"")},c||(s?s():[]),c&&e._===1?64:-2)}catch(c){for(let u=Mt.length;u>l;u--)uo();throw c}finally{i&&i._c&&(i._d=!0)}return a.scopeId&&(a.slotScopeIds=[a.scopeId+"-s"]),a}function Tl(e){return e.some(t=>Qn(t)?!(t.type===at||t.type===Pe&&!Tl(t.children)):!0)?e:null}const Pr=e=>e?ql(e)?Js(e):Pr(e.parent):null,$n=Ae(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=>Pr(e.parent),$root:e=>Pr(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Ol(e),$forceUpdate:e=>e.f||(e.f=()=>{so(e.update)}),$nextTick:e=>e.n||(e.n=no.bind(e.proxy)),$watch:e=>Vc.bind(e)}),lr=(e,t)=>e!==ge&&!e.__isScriptSetup&&ue(e,t),su={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:o,accessCache:i,type:l,appContext:a}=e;if(t[0]!=="$"){const h=i[t];if(h!==void 0)switch(h){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return o[t]}else{if(lr(s,t))return i[t]=1,s[t];if(r!==ge&&ue(r,t))return i[t]=2,r[t];if(ue(o,t))return i[t]=3,o[t];if(n!==ge&&ue(n,t))return i[t]=4,n[t];Ir&&(i[t]=0)}}const c=$n[t];let u,f;if(c)return t==="$attrs"&&De(e.attrs,"get",""),c(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(n!==ge&&ue(n,t))return i[t]=4,n[t];if(f=a.config.globalProperties,ue(f,t))return f[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:o}=e;return lr(r,t)?(r[t]=n,!0):s!==ge&&ue(s,t)?(s[t]=n,!0):ue(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:o,type:i}},l){let a;return!!(n[l]||e!==ge&&l[0]!=="$"&&ue(e,l)||lr(t,l)||ue(o,l)||ue(s,l)||ue($n,l)||ue(r.config.globalProperties,l)||(a=i.__cssModules)&&a[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ue(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Or(e){return U(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function hm(e,t){const n=Or(e);for(const s in t){if(s.startsWith("__skip"))continue;let r=n[s];r?U(r)||q(r)?r=n[s]={type:r,default:t[s]}:r.default=t[s]:r===null&&(r=n[s]={default:t[s]}),r&&t[`__skip_${s}`]&&(r.skipFactory=!0)}return n}let Ir=!0;function ru(e){const t=Ol(e),n=e.proxy,s=e.ctx;Ir=!1,t.beforeCreate&&jo(t.beforeCreate,e,"bc");const{data:r,computed:o,methods:i,watch:l,provide:a,inject:c,created:u,beforeMount:f,mounted:h,beforeUpdate:m,updated:E,activated:x,deactivated:k,beforeDestroy:I,beforeUnmount:_,destroyed:M,unmounted:T,render:J,renderTracked:Y,renderTriggered:j,errorCaptured:C,serverPrefetch:N,expose:Z,inheritAttrs:ne,components:L,directives:te,filters:be}=t;if(c&&ou(c,s,null),i)for(const ee in i){const se=i[ee];q(se)&&(s[ee]=se.bind(n))}if(r){const ee=r.call(n,n);ae(ee)&&(e.data=Fs(ee))}if(Ir=!0,o)for(const ee in o){const se=o[ee],Ke=q(se)?se.bind(n,n):q(se.get)?se.get.bind(n,n):xt,G=!q(se)&&q(se.set)?se.set.bind(n):xt,qe=we({get:Ke,set:G});Object.defineProperty(s,ee,{enumerable:!0,configurable:!0,get:()=>qe.value,set:Ie=>qe.value=Ie})}if(l)for(const ee in l)Pl(l[ee],s,n,ee);if(a){const ee=q(a)?a.call(n):a;Reflect.ownKeys(ee).forEach(se=>{ds(se,ee[se])})}u&&jo(u,e,"c");function re(ee,se){U(se)?se.forEach(Ke=>ee(Ke.bind(n))):se&&ee(se.bind(n))}if(re(Jc,f),re(Us,h),re(Yc,m),re(ro,E),re(Wc,x),re(Kc,k),re(eu,C),re(Zc,Y),re(Xc,j),re(oo,_),re(io,T),re(Qc,N),U(Z))if(Z.length){const ee=e.exposed||(e.exposed={});Z.forEach(se=>{Object.defineProperty(ee,se,{get:()=>n[se],set:Ke=>n[se]=Ke,enumerable:!0})})}else e.exposed||(e.exposed={});J&&e.render===xt&&(e.render=J),ne!=null&&(e.inheritAttrs=ne),L&&(e.components=L),te&&(e.directives=te),N&&Al(e)}function ou(e,t,n=xt){U(e)&&(e=Nr(e));for(const s in e){const r=e[s];let o;ae(r)?"default"in r?o=it(r.from||s,r.default,!0):o=it(r.from||s):o=it(r),Oe(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[s]=o}}function jo(e,t,n){nt(U(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Pl(e,t,n,s){let r=s.includes(".")?wl(n,s):()=>n[s];if(ye(e)){const o=t[e];q(o)&&Nt(r,o)}else if(q(e))Nt(r,e.bind(n));else if(ae(e))if(U(e))e.forEach(o=>Pl(o,t,n,s));else{const o=q(e.handler)?e.handler.bind(n):t[e.handler];q(o)&&Nt(r,o,e)}}function Ol(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let a;return l?a=l:!r.length&&!n&&!s?a=t:(a={},r.length&&r.forEach(c=>_s(a,c,i,!0)),_s(a,t,i)),ae(t)&&o.set(t,a),a}function _s(e,t,n,s=!1){const{mixins:r,extends:o}=t;o&&_s(e,o,n,!0),r&&r.forEach(i=>_s(e,i,n,!0));for(const i in t)if(!(s&&i==="expose")){const l=iu[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const iu={data:Bo,props:Go,emits:Go,methods:Vn,computed:Vn,beforeCreate:Fe,created:Fe,beforeMount:Fe,mounted:Fe,beforeUpdate:Fe,updated:Fe,beforeDestroy:Fe,beforeUnmount:Fe,destroyed:Fe,unmounted:Fe,activated:Fe,deactivated:Fe,errorCaptured:Fe,serverPrefetch:Fe,components:Vn,directives:Vn,watch:au,provide:Bo,inject:lu};function Bo(e,t){return t?e?function(){return Ae(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function lu(e,t){return Vn(Nr(e),Nr(t))}function Nr(e){if(U(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${$e(t)}Modifiers`]||e[`${Yt(t)}Modifiers`];function du(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ge;let r=n;const o=t.startsWith("update:"),i=o&&fu(s,t.slice(7));i&&(i.trim&&(r=n.map(u=>ye(u)?u.trim():u)),i.number&&(r=n.map(Ka)));let l,a=s[l=er(t)]||s[l=er($e(t))];!a&&o&&(a=s[l=er(Yt(t))]),a&&nt(a,e,6,r);const c=s[l+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,nt(c,e,6,r)}}const pu=new WeakMap;function Nl(e,t,n=!1){const s=n?pu:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const o=e.emits;let i={},l=!1;if(!q(e)){const a=c=>{const u=Nl(c,t,!0);u&&(l=!0,Ae(i,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!l?(ae(e)&&s.set(e,null),null):(U(o)?o.forEach(a=>i[a]=null):Ae(i,o),ae(e)&&s.set(e,i),i)}function Ks(e,t){return!e||!Ts(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),ue(e,t[0].toLowerCase()+t.slice(1))||ue(e,Yt(t))||ue(e,t))}function Ho(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[o],slots:i,attrs:l,emit:a,render:c,renderCache:u,props:f,data:h,setupState:m,ctx:E,inheritAttrs:x}=e,k=vs(e);let I,_;try{if(n.shapeFlag&4){const T=r||s,J=T;I=_t(c.call(J,T,u,f,m,h,E)),_=l}else{const T=t;I=_t(T.length>1?T(f,{attrs:l,slots:i,emit:a}):T(f,null)),_=t.props?l:hu(l)}}catch(T){Mt.length=0,Gs(T,e,1),I=de(at)}let M=I;if(_&&x!==!1){const T=Object.keys(_),{shapeFlag:J}=M;T.length&&J&7&&(o&&T.some(Ps)&&(_=mu(_,o)),M=Jt(M,_,!1,!0))}return n.dirs&&(M=Jt(M,null,!1,!0),M.dirs=M.dirs?M.dirs.concat(n.dirs):n.dirs),n.transition&&Yn(M,n.transition),I=M,vs(k),I}const hu=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ts(n))&&((t||(t={}))[n]=e[n]);return t},mu=(e,t)=>{const n={};for(const s in e)(!Ps(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function gu(e,t,n){const{props:s,children:r,component:o}=e,{props:i,children:l,patchFlag:a}=t,c=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?$o(s,i,c):!!i;if(a&8){const u=t.dynamicProps;for(let f=0;fObject.create(Ll),zl=e=>Object.getPrototypeOf(e)===Ll;function vu(e,t,n,s=!1){const r={},o=Dl();e.propsDefaults=Object.create(null),Vl(e,t,r,o);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);n?e.props=s?r:pl(r):e.type.props?e.props=r:e.props=o,e.attrs=o}function yu(e,t,n,s){const{props:r,attrs:o,vnode:{patchFlag:i}}=e,l=ie(r),[a]=e.propsOptions;let c=!1;if((s||i>0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let f=0;f{a=!0;const[h,m]=Fl(f,t,!0);Ae(i,h),m&&l.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!o&&!a)return ae(e)&&s.set(e,vn),vn;if(U(o))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",ao=e=>U(e)?e.map(_t):[_t(e)],xu=(e,t,n)=>{if(t._n)return t;const s=Ye((...r)=>ao(t(...r)),n);return s._c=!1,s},jl=(e,t,n)=>{const s=e._ctx;for(const r in e){if(lo(r))continue;const o=e[r];if(q(o))t[r]=xu(r,o,s);else if(o!=null){const i=ao(o);t[r]=()=>i}}},Bl=(e,t)=>{const n=ao(t);e.slots.default=()=>n},Gl=(e,t,n)=>{for(const s in t)(n||!lo(s))&&(e[s]=t[s])},wu=(e,t,n)=>{const s=e.slots=Dl();if(e.vnode.shapeFlag&32){const r=t._;r?(Gl(s,t,n),n&&$i(s,"_",r,!0)):jl(t,s)}else t&&Bl(e,t)},Su=(e,t,n)=>{const{vnode:s,slots:r}=e;let o=!0,i=ge;if(s.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:Gl(r,t,n):(o=!t.$stable,jl(t,r)),i=t}else t&&(Bl(e,t),i={default:1});if(o)for(const l in r)!lo(l)&&i[l]==null&&delete r[l]},je=Ru;function Eu(e){return Au(e)}function Au(e,t){const n=Ms();n.__VUE__=!0;const{insert:s,remove:r,patchProp:o,createElement:i,createText:l,createComment:a,setText:c,setElementText:u,parentNode:f,nextSibling:h,setScopeId:m=xt,insertStaticContent:E}=e,x=(d,p,g,y=null,w=null,b=null,O=void 0,P=null,R=!!p.dynamicChildren)=>{if(d===p)return;d&&!mn(d,p)&&(y=v(d),Ie(d,w,b,!0),d=null),p.patchFlag===-2&&(R=!1,p.dynamicChildren=null);const{type:S,ref:W,shapeFlag:D}=p;switch(S){case qs:k(d,p,g,y);break;case at:I(d,p,g,y);break;case cr:d==null&&_(p,g,y,O);break;case Pe:L(d,p,g,y,w,b,O,P,R);break;default:D&1?J(d,p,g,y,w,b,O,P,R):D&6?te(d,p,g,y,w,b,O,P,R):(D&64||D&128)&&S.process(d,p,g,y,w,b,O,P,R,H)}W!=null&&w?Hn(W,d&&d.ref,b,p||d,!p):W==null&&d&&d.ref!=null&&Hn(d.ref,null,b,d,!0)},k=(d,p,g,y)=>{if(d==null)s(p.el=l(p.children),g,y);else{const w=p.el=d.el;p.children!==d.children&&c(w,p.children)}},I=(d,p,g,y)=>{d==null?s(p.el=a(p.children||""),g,y):p.el=d.el},_=(d,p,g,y)=>{[d.el,d.anchor]=E(d.children,p,g,y,d.el,d.anchor)},M=({el:d,anchor:p},g,y)=>{let w;for(;d&&d!==p;)w=h(d),s(d,g,y),d=w;s(p,g,y)},T=({el:d,anchor:p})=>{let g;for(;d&&d!==p;)g=h(d),r(d),d=g;r(p)},J=(d,p,g,y,w,b,O,P,R)=>{if(p.type==="svg"?O="svg":p.type==="math"&&(O="mathml"),d==null)Y(p,g,y,w,b,O,P,R);else{const S=d.el&&d.el._isVueCE?d.el:null;try{S&&S._beginPatch(),N(d,p,w,b,O,P,R)}finally{S&&S._endPatch()}}},Y=(d,p,g,y,w,b,O,P)=>{let R,S;const{props:W,shapeFlag:D,transition:$,dirs:K}=d;if(R=d.el=i(d.type,b,W&&W.is,W),D&8?u(R,d.children):D&16&&C(d.children,R,null,y,w,ar(d,b),O,P),K&&Xt(d,null,y,"created"),j(R,d,d.scopeId,O,y),W){for(const me in W)me!=="value"&&!jn(me)&&o(R,me,null,W[me],b,y);"value"in W&&o(R,"value",null,W.value,b),(S=W.onVnodeBeforeMount)&&ht(S,y,d)}K&&Xt(d,null,y,"beforeMount");const oe=Cu(w,$);oe&&$.beforeEnter(R),s(R,p,g),((S=W&&W.onVnodeMounted)||oe||K)&&je(()=>{try{S&&ht(S,y,d),oe&&$.enter(R),K&&Xt(d,null,y,"mounted")}finally{}},w)},j=(d,p,g,y,w)=>{if(g&&m(d,g),y)for(let b=0;b{for(let S=R;S{const P=p.el=d.el;let{patchFlag:R,dynamicChildren:S,dirs:W}=p;R|=d.patchFlag&16;const D=d.props||ge,$=p.props||ge;let K;if(g&&Zt(g,!1),(K=$.onVnodeBeforeUpdate)&&ht(K,g,p,d),W&&Xt(p,d,g,"beforeUpdate"),g&&Zt(g,!0),S&&(!d.dynamicChildren||d.dynamicChildren.length!==S.length)&&(R=0,O=!1,S=null),(D.innerHTML&&$.innerHTML==null||D.textContent&&$.textContent==null)&&u(P,""),S?Z(d.dynamicChildren,S,P,g,y,ar(p,w),b):O||se(d,p,P,null,g,y,ar(p,w),b,!1),R>0){if(R&16)ne(P,D,$,g,w);else if(R&2&&D.class!==$.class&&o(P,"class",null,$.class,w),R&4&&o(P,"style",D.style,$.style,w),R&8){const oe=p.dynamicProps;for(let me=0;me{K&&ht(K,g,p,d),W&&Xt(p,d,g,"updated")},y)},Z=(d,p,g,y,w,b,O)=>{for(let P=0;P{if(p!==g){if(p!==ge)for(const b in p)!jn(b)&&!(b in g)&&o(d,b,p[b],null,w,y);for(const b in g){if(jn(b))continue;const O=g[b],P=p[b];O!==P&&b!=="value"&&o(d,b,P,O,w,y)}"value"in g&&o(d,"value",p.value,g.value,w)}},L=(d,p,g,y,w,b,O,P,R)=>{const S=p.el=d?d.el:l(""),W=p.anchor=d?d.anchor:l("");let{patchFlag:D,dynamicChildren:$,slotScopeIds:K}=p;K&&(P=P?P.concat(K):K),d==null?(s(S,g,y),s(W,g,y),C(p.children||[],g,W,w,b,O,P,R)):D>0&&D&64&&$&&d.dynamicChildren&&d.dynamicChildren.length===$.length?(Z(d.dynamicChildren,$,g,w,b,O,P),(p.key!=null||w&&p===w.subTree)&&co(d,p,!0)):se(d,p,g,W,w,b,O,P,R)},te=(d,p,g,y,w,b,O,P,R)=>{p.slotScopeIds=P,d==null?p.shapeFlag&512?w.ctx.activate(p,g,y,O,R):be(p,g,y,w,b,O,R):Se(d,p,R)},be=(d,p,g,y,w,b,O)=>{const P=d.component=Nu(d,y,w);if(Cl(d)&&(P.ctx.renderer=H),Mu(P,!1,O),P.asyncDep){if(w&&w.registerDep(P,re,O),!d.el){const R=P.subTree=de(at);I(null,R,p,g),d.placeholder=R.el}}else re(P,d,p,g,w,b,O)},Se=(d,p,g)=>{const y=p.component=d.component;if(gu(d,p,g))if(y.asyncDep&&!y.asyncResolved){ee(y,p,g);return}else y.next=p,y.update();else p.el=d.el,y.vnode=p},re=(d,p,g,y,w,b,O)=>{const P=()=>{if(d.isMounted){let{next:D,bu:$,u:K,parent:oe,vnode:me}=d;{const dt=Hl(d);if(dt){D&&(D.el=me.el,ee(d,D,O)),dt.asyncDep.then(()=>{je(()=>{d.isUnmounted||S()},w)});return}}let he=D,Ee;Zt(d,!1),D?(D.el=me.el,ee(d,D,O)):D=me,$&&tr($),(Ee=D.props&&D.props.onVnodeBeforeUpdate)&&ht(Ee,oe,D,me),Zt(d,!0);const Ne=Ho(d),ft=d.subTree;d.subTree=Ne,x(ft,Ne,f(ft.el),v(ft),d,w,b),D.el=Ne.el,he===null&&bu(d,Ne.el),K&&je(K,w),(Ee=D.props&&D.props.onVnodeUpdated)&&je(()=>ht(Ee,oe,D,me),w)}else{let D;const{el:$,props:K}=p,{bm:oe,m:me,parent:he,root:Ee,type:Ne}=d,ft=xn(p);Zt(d,!1),oe&&tr(oe),!ft&&(D=K&&K.onVnodeBeforeMount)&&ht(D,he,p),Zt(d,!0);{Ee.ce&&Ee.ce._hasShadowRoot()&&Ee.ce._injectChildStyle(Ne,d.parent?d.parent.type:void 0);const dt=d.subTree=Ho(d);x(null,dt,g,y,d,w,b),p.el=dt.el}if(me&&je(me,w),!ft&&(D=K&&K.onVnodeMounted)){const dt=p;je(()=>ht(D,he,dt),w)}(p.shapeFlag&256||he&&xn(he.vnode)&&he.vnode.shapeFlag&256)&&d.a&&je(d.a,w),d.isMounted=!0,p=g=y=null}};d.scope.on();const R=d.effect=new Qi(P);d.scope.off();const S=d.update=R.run.bind(R),W=d.job=R.runIfDirty.bind(R);W.i=d,W.id=d.uid,R.scheduler=()=>so(W),Zt(d,!0),S()},ee=(d,p,g)=>{p.component=d;const y=d.vnode.props;d.vnode=p,d.next=null,yu(d,p.props,y,g),Su(d,p.children,g),Lt(),Mo(d),Dt()},se=(d,p,g,y,w,b,O,P,R=!1)=>{const S=d&&d.children,W=d?d.shapeFlag:0,D=p.children,{patchFlag:$,shapeFlag:K}=p;if($>0){if($&128){G(S,D,g,y,w,b,O,P,R);return}else if($&256){Ke(S,D,g,y,w,b,O,P,R);return}}K&8?(W&16&&pe(S,w,b),D!==S&&u(g,D)):W&16?K&16?G(S,D,g,y,w,b,O,P,R):pe(S,w,b,!0):(W&8&&u(g,""),K&16&&C(D,g,y,w,b,O,P,R))},Ke=(d,p,g,y,w,b,O,P,R)=>{d=d||vn,p=p||vn;const S=d.length,W=p.length,D=Math.min(S,W);let $;for($=0;$W?pe(d,w,b,!0,!1,D):C(p,g,y,w,b,O,P,R,D)},G=(d,p,g,y,w,b,O,P,R)=>{let S=0;const W=p.length;let D=d.length-1,$=W-1;for(;S<=D&&S<=$;){const K=d[S],oe=p[S]=R?Tt(p[S]):_t(p[S]);if(mn(K,oe))x(K,oe,g,null,w,b,O,P,R);else break;S++}for(;S<=D&&S<=$;){const K=d[D],oe=p[$]=R?Tt(p[$]):_t(p[$]);if(mn(K,oe))x(K,oe,g,null,w,b,O,P,R);else break;D--,$--}if(S>D){if(S<=$){const K=$+1,oe=K$)for(;S<=D;)Ie(d[S],w,b,!0),S++;else{const K=S,oe=S,me=new Map;for(S=oe;S<=$;S++){const Je=p[S]=R?Tt(p[S]):_t(p[S]);Je.key!=null&&me.set(Je.key,S)}let he,Ee=0;const Ne=$-oe+1;let ft=!1,dt=0;const Tn=new Array(Ne);for(S=0;S=Ne){Ie(Je,w,b,!0);continue}let pt;if(Je.key!=null)pt=me.get(Je.key);else for(he=oe;he<=$;he++)if(Tn[he-oe]===0&&mn(Je,p[he])){pt=he;break}pt===void 0?Ie(Je,w,b,!0):(Tn[pt-oe]=S+1,pt>=dt?dt=pt:ft=!0,x(Je,p[pt],g,null,w,b,O,P,R),Ee++)}const Co=ft?ku(Tn):vn;for(he=Co.length-1,S=Ne-1;S>=0;S--){const Je=oe+S,pt=p[Je],ko=p[Je+1],Ro=Je+1{const{el:b,type:O,transition:P,children:R,shapeFlag:S}=d;if(S&6){qe(d.component.subTree,p,g,y);return}if(S&128){d.suspense.move(p,g,y);return}if(S&64){O.move(d,p,g,H);return}if(O===Pe){s(b,p,g);for(let D=0;DP.enter(b),w));else{const{leave:D,delayLeave:$,afterLeave:K}=P,oe=()=>{d.ctx.isUnmounted?r(b):s(b,p,g)},me=()=>{const he=b._isLeaving||!!b[vt];b._isLeaving&&b[vt](!0),P.persisted&&!he?oe():D(b,()=>{oe(),K&&K()})};$?$(b,oe,me):me()}else s(b,p,g)},Ie=(d,p,g,y=!1,w=!1)=>{const{type:b,props:O,ref:P,children:R,dynamicChildren:S,shapeFlag:W,patchFlag:D,dirs:$,cacheIndex:K,memo:oe}=d;if(D===-2&&(w=!1),P!=null&&(Lt(),Hn(P,null,g,d,!0),Dt()),K!=null&&(p.renderCache[K]=void 0),W&256){p.ctx.deactivate(d);return}const me=W&1&&$,he=!xn(d);let Ee;if(he&&(Ee=O&&O.onVnodeBeforeUnmount)&&ht(Ee,p,d),W&6)_e(d.component,g,y);else{if(W&128){d.suspense.unmount(g,y);return}me&&Xt(d,null,p,"beforeUnmount"),W&64?d.type.remove(d,p,g,H,y):S&&!S.hasOnce&&(b!==Pe||D>0&&D&64)?pe(S,p,g,!1,!0):(b===Pe&&D&384||!w&&W&16)&&pe(R,p,g),y&&St(d)}const Ne=oe!=null&&K==null;(he&&(Ee=O&&O.onVnodeUnmounted)||me||Ne)&&je(()=>{Ee&&ht(Ee,p,d),me&&Xt(d,null,p,"unmounted"),Ne&&(d.el=null)},g)},St=d=>{const{type:p,el:g,anchor:y,transition:w}=d;if(p===Pe){ut(g,y);return}if(p===cr){T(d);return}const b=()=>{r(g),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(d.shapeFlag&1&&w&&!w.persisted){const{leave:O,delayLeave:P}=w,R=()=>O(g,b);P?P(d.el,b,R):R()}else b()},ut=(d,p)=>{let g;for(;d!==p;)g=h(d),r(d),d=g;r(p)},_e=(d,p,g)=>{const{bum:y,scope:w,job:b,subTree:O,um:P,m:R,a:S}=d;Wo(R),Wo(S),y&&tr(y),w.stop(),b&&(b.flags|=8,Ie(O,d,p,g)),P&&je(P,p),je(()=>{d.isUnmounted=!0},p)},pe=(d,p,g,y=!1,w=!1,b=0)=>{for(let O=b;O{if(d.shapeFlag&6)return v(d.component.subTree);if(d.shapeFlag&128)return d.suspense.next();const p=h(d.anchor||d.el),g=p&&p[Sl];return g?h(g):p};let z=!1;const A=(d,p,g)=>{let y;d==null?p._vnode&&(Ie(p._vnode,null,null,!0),y=p._vnode.component):x(p._vnode||null,d,p,null,null,null,g),p._vnode=d,z||(z=!0,Mo(y),yl(),z=!1)},H={p:x,um:Ie,m:qe,r:St,mt:be,mc:C,pc:se,pbc:Z,n:v,o:e};return{render:A,hydrate:void 0,createApp:uu(A)}}function ar({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Zt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Cu(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function co(e,t,n=!1){const s=e.children,r=t.children;if(U(s)&&U(r))for(let o=0;o>1,e[n[l]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function Hl(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Hl(t)}function Wo(e){if(e)for(let t=0;te.__isSuspense;function Ru(e,t){t&&t.pendingBranch?U(e)?t.effects.push(...e):t.effects.push(e):Lc(e)}const Pe=Symbol.for("v-fgt"),qs=Symbol.for("v-txt"),at=Symbol.for("v-cmt"),cr=Symbol.for("v-stc"),Mt=[];let He=null;function fe(e=!1){Mt.push(He=e?null:[])}function uo(){Mt.pop(),He=Mt[Mt.length-1]||null}let An=1;function xs(e,t=!1){An+=e,e<0&&He&&t&&(He.hasOnce=!0)}function Wl(e){return e.dynamicChildren=An>0?He||vn:null,uo(),An>0&&He&&He.push(e),e}function Qe(e,t,n,s,r,o){return Wl(le(e,t,n,s,r,o,!0))}function ze(e,t,n,s,r){return Wl(de(e,t,n,s,r,!0))}function Qn(e){return e?e.__v_isVNode===!0:!1}function mn(e,t){return e.type===t.type&&e.key===t.key}const Kl=({key:e})=>e??null,ps=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ye(e)||Oe(e)||q(e)?{i:Me,r:e,k:t,f:!!n}:e:null);function le(e,t=null,n=null,s=0,r=null,o=e===Pe?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Kl(t),ref:t&&ps(t),scopeId:xl,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Me};return l?(Ss(a,n),o&128&&e.normalize(a)):n&&(a.shapeFlag|=ye(n)?8:16),An>0&&!i&&He&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&He.push(a),a}const de=Tu;function Tu(e,t=null,n=null,s=0,r=null,o=!1){if((!e||e===Rl)&&(e=at),Qn(e)){const l=Jt(e,t,!0);return n&&Ss(l,n),An>0&&!o&&He&&(l.shapeFlag&6?He[He.indexOf(e)]=l:He.push(l)),l.patchFlag=-2,l}if(Fu(e)&&(e=e.__vccOpts),t){t=Pu(t);let{class:l,style:a}=t;l&&!ye(l)&&(t.class=Ue(l)),ae(a)&&(Bs(a)&&!U(a)&&(a=Ae({},a)),t.style=Ls(a))}const i=ye(e)?1:Ul(e)?128:Fc(e)?64:ae(e)?4:q(e)?2:0;return le(e,t,n,s,r,i,o,!0)}function Pu(e){return e?Bs(e)||zl(e)?Ae({},e):e:null}function Jt(e,t,n=!1,s=!1){const{props:r,ref:o,patchFlag:i,children:l,transition:a}=e,c=t?fo(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Kl(c),ref:t&&t.ref?n&&o?U(o)?o.concat(ps(t)):[o,ps(t)]:ps(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Pe?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Jt(e.ssContent),ssFallback:e.ssFallback&&Jt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&Yn(u,a.clone(u)),u}function Sn(e=" ",t=0){return de(qs,null,e,t)}function ws(e="",t=!1){return t?(fe(),ze(at,null,e)):de(at,null,e)}function _t(e){return e==null||typeof e=="boolean"?de(at):U(e)?de(Pe,null,e.slice()):Qn(e)?Tt(e):de(qs,null,String(e))}function Tt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Jt(e)}function Ss(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(U(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Ss(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!zl(t)?t._ctx=Me:r===3&&Me&&(Me.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(q(t)){if(s&65){Ss(e,{default:t});return}t={default:t,_ctx:Me},n=32}else t=String(t),s&64?(n=16,t=[Sn(t)]):n=8;e.children=t,e.shapeFlag|=n}function fo(...e){const t={};for(let n=0;nVe||Me;let Es,Lr;{const e=Ms(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),o=>{r.length>1?r.forEach(i=>i(o)):r[0](o)}};Es=t("__VUE_INSTANCE_SETTERS__",n=>Ve=n),Lr=t("__VUE_SSR_SETTERS__",n=>Xn=n)}const ss=e=>{const t=Ve;return Es(e),e.scope.on(),()=>{e.scope.off(),Es(t)}},Ko=()=>{Ve&&Ve.scope.off(),Es(null)};function ql(e){return e.vnode.shapeFlag&4}let Xn=!1;function Mu(e,t=!1,n=!1){t&&Lr(t);const{props:s,children:r}=e.vnode,o=ql(e);vu(e,s,o,t),wu(e,r,n||t);const i=o?Lu(e,t):void 0;return t&&Lr(!1),i}function Lu(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,su);const{setup:s}=n;if(s){Lt();const r=e.setupContext=s.length>1?zu(e):null,o=ss(e),i=ns(s,e,0,[e.props,r]),l=Bi(i);if(Dt(),o(),(l||e.sp)&&!xn(e)&&Al(e),l){if(i.then(Ko,Ko),t)return i.then(a=>{qo(e,a)}).catch(a=>{Gs(a,e,0)});e.asyncDep=i}else qo(e,i)}else Jl(e)}function qo(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ae(t)&&(e.setupState=ml(t)),Jl(e)}function Jl(e,t,n){const s=e.type;e.render||(e.render=s.render||xt);{const r=ss(e);Lt();try{ru(e)}finally{Dt(),r()}}}const Du={get(e,t){return De(e,"get",""),e[t]}};function zu(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Du),slots:e.slots,emit:e.emit,expose:t}}function Js(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(ml(xc(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in $n)return $n[n](e)},has(t,n){return n in t||n in $n}})):e.proxy}function Vu(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function Fu(e){return q(e)&&"__vccOpts"in e}const we=(e,t)=>Pc(e,t,Xn);function qt(e,t,n){try{xs(-1);const s=arguments.length;return s===2?ae(t)&&!U(t)?Qn(t)?de(e,null,[t]):de(e,t):de(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Qn(n)&&(n=[n]),de(e,t,n))}finally{xs(1)}}function mm(e,t,n,s){const r=n[s];if(r&&ju(r,e))return r;const o=t();return o.memo=e.slice(),o.cacheIndex=s,n[s]=o}function ju(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let s=0;s0&&He&&He.push(e),!0}const Bu="3.5.40";/** -* @vue/runtime-dom v3.5.40 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Dr;const Jo=typeof window<"u"&&window.trustedTypes;if(Jo)try{Dr=Jo.createPolicy("vue",{createHTML:e=>e})}catch{}const Yl=Dr?e=>Dr.createHTML(e):e=>e,Gu="http://www.w3.org/2000/svg",Hu="http://www.w3.org/1998/Math/MathML",Rt=typeof document<"u"?document:null,Yo=Rt&&Rt.createElement("template"),$u={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Rt.createElementNS(Gu,e):t==="mathml"?Rt.createElementNS(Hu,e):n?Rt.createElement(e,{is:n}):Rt.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Rt.createTextNode(e),createComment:e=>Rt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Rt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,o){const i=n?n.previousSibling:t.lastChild;if(r&&(r===o||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===o||!(r=r.nextSibling)););else{Yo.innerHTML=Yl(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Yo.content;if(s==="svg"||s==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},jt="transition",In="animation",Cn=Symbol("_vtc"),Ql={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},Uu=Ae({},$c,Ql),en=(e,t=[])=>{U(e)?e.forEach(n=>n(...t)):e&&e(...t)},Qo=e=>e?U(e)?e.some(t=>t.length>1):e.length>1:!1;function Wu(e){const t={};for(const L in e)L in Ql||(t[L]=e[L]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=o,appearActiveClass:c=i,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,E=Ku(r),x=E&&E[0],k=E&&E[1],{onBeforeEnter:I,onEnter:_,onEnterCancelled:M,onLeave:T,onLeaveCancelled:J,onBeforeAppear:Y=I,onAppear:j=_,onAppearCancelled:C=M}=t,N=(L,te,be,Se)=>{L._enterCancelled=Se,$t(L,te?u:l),$t(L,te?c:i),be&&be()},Z=(L,te)=>{L._isLeaving=!1,$t(L,f),$t(L,m),$t(L,h),te&&te()},ne=L=>(te,be)=>{const Se=L?j:_,re=()=>N(te,L,be);en(Se,[te,re]),Xo(()=>{$t(te,L?a:o),gt(te,L?u:l),Qo(Se)||Zo(te,s,x,re)})};return Ae(t,{onBeforeEnter(L){en(I,[L]),gt(L,o),gt(L,i)},onBeforeAppear(L){en(Y,[L]),gt(L,a),gt(L,c)},onEnter:ne(!1),onAppear:ne(!0),onLeave(L,te){L._isLeaving=!0;const be=()=>Z(L,te);gt(L,f),L._enterCancelled?(gt(L,h),zr(L)):(zr(L),gt(L,h)),Xo(()=>{L._isLeaving&&($t(L,f),gt(L,m),Qo(T)||Zo(L,s,k,be))}),en(T,[L,be])},onEnterCancelled(L){N(L,!1,void 0,!0),en(M,[L])},onAppearCancelled(L){N(L,!0,void 0,!0),en(C,[L])},onLeaveCancelled(L){Z(L),en(J,[L])}})}function Ku(e){if(e==null)return null;if(ae(e))return[ur(e.enter),ur(e.leave)];{const t=ur(e);return[t,t]}}function ur(e){return qa(e)}function gt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Cn]||(e[Cn]=new Set)).add(t)}function $t(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Cn];n&&(n.delete(t),n.size||(e[Cn]=void 0))}function Xo(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let qu=0;function Zo(e,t,n,s){const r=e._endId=++qu,o=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(o,n);const{type:i,timeout:l,propCount:a}=Xl(e,t);if(!i)return s();const c=i+"end";let u=0;const f=()=>{e.removeEventListener(c,h),o()},h=m=>{m.target===e&&++u>=a&&f()};setTimeout(()=>{u(n[E]||"").split(", "),r=s(`${jt}Delay`),o=s(`${jt}Duration`),i=ei(r,o),l=s(`${In}Delay`),a=s(`${In}Duration`),c=ei(l,a);let u=null,f=0,h=0;t===jt?i>0&&(u=jt,f=i,h=o.length):t===In?c>0&&(u=In,f=c,h=a.length):(f=Math.max(i,c),u=f>0?i>c?jt:In:null,h=u?u===jt?o.length:a.length:0);const m=u===jt&&/\b(?:transform|all)(?:,|$)/.test(s(`${jt}Property`).toString());return{type:u,timeout:f,propCount:h,hasTransform:m}}function ei(e,t){for(;e.lengthti(n)+ti(e[s])))}function ti(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function zr(e){return(e?e.ownerDocument:document).body.offsetHeight}function Ju(e,t,n){const s=e[Cn];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const As=Symbol("_vod"),po=Symbol("_vsh"),gm={name:"show",beforeMount(e,{value:t},{transition:n}){e[As]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Nn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),Nn(e,!0),s.enter(e)):s.leave(e,()=>{Nn(e,!1)}):Nn(e,t))},beforeUnmount(e,{value:t}){Nn(e,t)}};function Nn(e,t){e.style.display=t?e[As]:"none",e[po]=!t}const Yu=Symbol(""),Qu=/(?:^|;)\s*display\s*:/;function Xu(e,t,n){const s=e.style,r=ye(n);let o=!1;if(n&&!r){if(t)if(ye(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&Fn(s,l,"")}else for(const i in t)n[i]==null&&Fn(s,i,"");for(const i in n){i==="display"&&(o=!0);const l=n[i];l!=null?ef(e,i,!ye(t)&&t?t[i]:void 0,l)||Fn(s,i,l):Fn(s,i,"")}}else if(r){if(t!==n){const i=s[Yu];i&&(n+=";"+i),s.cssText=n,o=Qu.test(n)}}else t&&e.removeAttribute("style");As in e&&(e[As]=o?s.display:"",e[po]&&(s.display="none"))}const ni=/\s*!important$/;function Fn(e,t,n){if(U(n))n.forEach(s=>Fn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Zu(e,t);ni.test(n)?e.setProperty(Yt(s),n.replace(ni,""),"important"):e[s]=n}}const si=["Webkit","Moz","ms"],fr={};function Zu(e,t){const n=fr[t];if(n)return n;let s=$e(t);if(s!=="filter"&&s in e)return fr[t]=s;s=Ns(s);for(let r=0;rdr||(af.then(()=>dr=0),dr=Date.now());function uf(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const r=n.value;if(U(r)){const o=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{o.call(s),s._stopped=!0};const i=r.slice(),l=[s];for(let a=0;ae.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ff=(e,t,n,s,r,o)=>{const i=r==="svg";t==="class"?Ju(e,s,i):t==="style"?Xu(e,n,s):Ts(t)?Ps(t)||sf(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):df(e,t,s,i))?(ii(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&oi(e,t,s,i,o,t!=="value")):e._isVueCE&&(pf(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!ye(s)))?ii(e,$e(t),s,o,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),oi(e,t,s,i))};function df(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&ai(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return ai(t)&&ye(n)?!1:t in e}function pf(e,t){const n=e._def.props;if(!n)return!1;const s=$e(t);return Array.isArray(n)?n.some(r=>$e(r)===s):Object.keys(n).some(r=>$e(r)===s)}const Zl=new WeakMap,ea=new WeakMap,Cs=Symbol("_moveCb"),ci=Symbol("_enterCb"),hf=e=>(delete e.props.mode,e),mf=hf({name:"TransitionGroup",props:Ae({},Uu,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=fn(),s=Hc();let r,o;return ro(()=>{if(!r.length)return;const i=e.moveClass||`${e.name||"v"}-move`;if(!_f(r[0].el,n.vnode.el,i)){r=[];return}r.forEach(bf),r.forEach(vf);const l=r.filter(yf);zr(n.vnode.el),l.forEach(a=>{const c=a.el,u=c.style;gt(c,i),u.transform=u.webkitTransform=u.transitionDuration="";const f=c[Cs]=h=>{h&&h.target!==c||(!h||h.propertyName.endsWith("transform"))&&(c.removeEventListener("transitionend",f),c[Cs]=null,$t(c,i))};c.addEventListener("transitionend",f)}),r=[]}),()=>{const i=ie(e),l=Wu(i);let a=i.tag||Pe;if(r=[],o)for(let c=0;c{l.split(/\s+/).forEach(a=>a&&s.classList.remove(a))}),n.split(/\s+/).forEach(l=>l&&s.classList.add(l)),s.style.display="none";const o=t.nodeType===1?t:t.parentNode;o.appendChild(s);const{hasTransform:i}=Xl(s);return o.removeChild(s),i}const xf=["ctrl","shift","alt","meta"],wf={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)=>xf.some(n=>e[`${n}Key`]&&!t.includes(n))},Sf=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((r,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(r=>{if(!("key"in r))return;const o=Yt(r.key);if(t.some(i=>i===o||Ef[i]===o))return e(r)}))},Af=Ae({patchProp:ff},$u);let ui;function Cf(){return ui||(ui=Eu(Af))}const kf=((...e)=>{const t=Cf().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Tf(s);if(!r)return;const o=t._component;!q(o)&&!o.render&&!o.template&&(o.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=n(r,!1,Rf(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t});function Rf(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Tf(e){return ye(e)?document.querySelector(e):e}/*! - * vue-router v4.6.4 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */const gn=typeof document<"u";function na(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Pf(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&na(e.default)}const ce=Object.assign;function pr(e,t){const n={};for(const s in t){const r=t[s];n[s]=ct(r)?r.map(e):e(r)}return n}const Un=()=>{},ct=Array.isArray;function fi(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const sa=/#/g,Of=/&/g,If=/\//g,Nf=/=/g,Mf=/\?/g,ra=/\+/g,Lf=/%5B/g,Df=/%5D/g,oa=/%5E/g,zf=/%60/g,ia=/%7B/g,Vf=/%7C/g,la=/%7D/g,Ff=/%20/g;function ho(e){return e==null?"":encodeURI(""+e).replace(Vf,"|").replace(Lf,"[").replace(Df,"]")}function jf(e){return ho(e).replace(ia,"{").replace(la,"}").replace(oa,"^")}function Vr(e){return ho(e).replace(ra,"%2B").replace(Ff,"+").replace(sa,"%23").replace(Of,"%26").replace(zf,"`").replace(ia,"{").replace(la,"}").replace(oa,"^")}function Bf(e){return Vr(e).replace(Nf,"%3D")}function Gf(e){return ho(e).replace(sa,"%23").replace(Mf,"%3F")}function Hf(e){return Gf(e).replace(If,"%2F")}function Zn(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const $f=/\/$/,Uf=e=>e.replace($f,"");function hr(e,t,n="/"){let s,r={},o="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return a=l>=0&&a>l?-1:a,a>=0&&(s=t.slice(0,a),o=t.slice(a,l>0?l:t.length),r=e(o.slice(1))),l>=0&&(s=s||t.slice(0,l),i=t.slice(l,t.length)),s=Jf(s??t,n),{fullPath:s+o+i,path:s,query:r,hash:Zn(i)}}function Wf(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function di(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Kf(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&kn(t.matched[s],n.matched[r])&&aa(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function kn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function aa(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!qf(e[n],t[n]))return!1;return!0}function qf(e,t){return ct(e)?pi(e,t):ct(t)?pi(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function pi(e,t){return ct(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Jf(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let o=n.length-1,i,l;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+s.slice(i).join("/")}const Bt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let Fr=(function(e){return e.pop="pop",e.push="push",e})({}),mr=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Yf(e){if(!e)if(gn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Uf(e)}const Qf=/^[^#]+#/;function Xf(e,t){return e.replace(Qf,"#")+t}function Zf(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const Ys=()=>({left:window.scrollX,top:window.scrollY});function ed(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Zf(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function hi(e,t){return(history.state?history.state.position-t:-1)+e}const jr=new Map;function td(e,t){jr.set(e,t)}function nd(e){const t=jr.get(e);return jr.delete(e),t}function sd(e){return typeof e=="string"||e&&typeof e=="object"}function ca(e){return typeof e=="string"||typeof e=="symbol"}let xe=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const ua=Symbol("");xe.MATCHER_NOT_FOUND+"",xe.NAVIGATION_GUARD_REDIRECT+"",xe.NAVIGATION_ABORTED+"",xe.NAVIGATION_CANCELLED+"",xe.NAVIGATION_DUPLICATED+"";function Rn(e,t){return ce(new Error,{type:e,[ua]:!0},t)}function At(e,t){return e instanceof Error&&ua in e&&(t==null||!!(e.type&t))}const rd=["params","query","hash"];function od(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of rd)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function id(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;sr&&Vr(r)):[s&&Vr(s)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+n,r!=null&&(t+="="+r))})}return t}function ld(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=ct(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const ad=Symbol(""),gi=Symbol(""),Qs=Symbol(""),mo=Symbol(""),Br=Symbol("");function Mn(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Wt(e,t,n,s,r,o=i=>i()){const i=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,a)=>{const c=h=>{h===!1?a(Rn(xe.NAVIGATION_ABORTED,{from:n,to:t})):h instanceof Error?a(h):sd(h)?a(Rn(xe.NAVIGATION_GUARD_REDIRECT,{from:t,to:h})):(i&&s.enterCallbacks[r]===i&&typeof h=="function"&&i.push(h),l())},u=o(()=>e.call(s&&s.instances[r],t,n,c));let f=Promise.resolve(u);e.length<3&&(f=f.then(c)),f.catch(h=>a(h))})}function gr(e,t,n,s,r=o=>o()){const o=[];for(const i of e)for(const l in i.components){let a=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(na(a)){const c=(a.__vccOpts||a)[t];c&&o.push(Wt(c,n,s,i,l,r))}else{let c=a();o.push(()=>c.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const f=Pf(u)?u.default:u;i.mods[l]=u,i.components[l]=f;const h=(f.__vccOpts||f)[t];return h&&Wt(h,n,s,i,l,r)()}))}}return o}function cd(e,t){const n=[],s=[],r=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;ikn(c,l))?s.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(c=>kn(c,a))||r.push(a))}return[n,s,r]}/*! - * vue-router v4.6.4 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */let ud=()=>location.protocol+"//"+location.host;function fa(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let i=r.includes(e.slice(o))?e.slice(o).length:1,l=r.slice(i);return l[0]!=="/"&&(l="/"+l),di(l,"")}return di(n,e)+s+r}function fd(e,t,n,s){let r=[],o=[],i=null;const l=({state:h})=>{const m=fa(e,location),E=n.value,x=t.value;let k=0;if(h){if(n.value=m,t.value=h,i&&i===E){i=null;return}k=x?h.position-x.position:0}else s(m);r.forEach(I=>{I(n.value,E,{delta:k,type:Fr.pop,direction:k?k>0?mr.forward:mr.back:mr.unknown})})};function a(){i=n.value}function c(h){r.push(h);const m=()=>{const E=r.indexOf(h);E>-1&&r.splice(E,1)};return o.push(m),m}function u(){if(document.visibilityState==="hidden"){const{history:h}=window;if(!h.state)return;h.replaceState(ce({},h.state,{scroll:Ys()}),"")}}function f(){for(const h of o)h();o=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:a,listen:c,destroy:f}}function bi(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?Ys():null}}function dd(e){const{history:t,location:n}=window,s={value:fa(e,n)},r={value:t.state};r.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(a,c,u){const f=e.indexOf("#"),h=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+a:ud()+e+a;try{t[u?"replaceState":"pushState"](c,"",h),r.value=c}catch(m){console.error(m),n[u?"replace":"assign"](h)}}function i(a,c){o(a,ce({},t.state,bi(r.value.back,a,r.value.forward,!0),c,{position:r.value.position}),!0),s.value=a}function l(a,c){const u=ce({},r.value,t.state,{forward:a,scroll:Ys()});o(u.current,u,!0),o(a,ce({},bi(s.value,a,null),{position:u.position+1},c),!1),s.value=a}return{location:s,state:r,push:l,replace:i}}function pd(e){e=Yf(e);const t=dd(e),n=fd(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=ce({location:"",base:e,go:s,createHref:Xf.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let rn=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var ke=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(ke||{});const hd={type:rn.Static,value:""},md=/[a-zA-Z0-9_]/;function gd(e){if(!e)return[[]];if(e==="/")return[[hd]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${c}": ${m}`)}let n=ke.Static,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let l=0,a,c="",u="";function f(){c&&(n===ke.Static?o.push({type:rn.Static,value:c}):n===ke.Param||n===ke.ParamRegExp||n===ke.ParamRegExpEnd?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),o.push({type:rn.Param,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function h(){c+=a}for(;lt.length?t.length===1&&t[0]===Be.Static+Be.Segment?1:-1:0}function da(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const xd={strict:!1,end:!0,sensitive:!1};function wd(e,t,n){const s=yd(gd(e.path),n),r=ce(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Sd(e,t){const n=[],s=new Map;t=fi(xd,t);function r(f){return s.get(f)}function o(f,h,m){const E=!m,x=xi(f);x.aliasOf=m&&m.record;const k=fi(t,f),I=[x];if("alias"in f){const T=typeof f.alias=="string"?[f.alias]:f.alias;for(const J of T)I.push(xi(ce({},x,{components:m?m.record.components:x.components,path:J,aliasOf:m?m.record:x})))}let _,M;for(const T of I){const{path:J}=T;if(h&&J[0]!=="/"){const Y=h.record.path,j=Y[Y.length-1]==="/"?"":"/";T.path=h.record.path+(J&&j+J)}if(_=wd(T,h,k),m?m.alias.push(_):(M=M||_,M!==_&&M.alias.push(_),E&&f.name&&!wi(_)&&i(f.name)),pa(_)&&a(_),x.children){const Y=x.children;for(let j=0;j{i(M)}:Un}function i(f){if(ca(f)){const h=s.get(f);h&&(s.delete(f),n.splice(n.indexOf(h),1),h.children.forEach(i),h.alias.forEach(i))}else{const h=n.indexOf(f);h>-1&&(n.splice(h,1),f.record.name&&s.delete(f.record.name),f.children.forEach(i),f.alias.forEach(i))}}function l(){return n}function a(f){const h=Cd(f,n);n.splice(h,0,f),f.record.name&&!wi(f)&&s.set(f.record.name,f)}function c(f,h){let m,E={},x,k;if("name"in f&&f.name){if(m=s.get(f.name),!m)throw Rn(xe.MATCHER_NOT_FOUND,{location:f});k=m.record.name,E=ce(_i(h.params,m.keys.filter(M=>!M.optional).concat(m.parent?m.parent.keys.filter(M=>M.optional):[]).map(M=>M.name)),f.params&&_i(f.params,m.keys.map(M=>M.name))),x=m.stringify(E)}else if(f.path!=null)x=f.path,m=n.find(M=>M.re.test(x)),m&&(E=m.parse(x),k=m.record.name);else{if(m=h.name?s.get(h.name):n.find(M=>M.re.test(h.path)),!m)throw Rn(xe.MATCHER_NOT_FOUND,{location:f,currentLocation:h});k=m.record.name,E=ce({},h.params,f.params),x=m.stringify(E)}const I=[];let _=m;for(;_;)I.unshift(_.record),_=_.parent;return{name:k,path:x,params:E,matched:I,meta:Ad(I)}}e.forEach(f=>o(f));function u(){n.length=0,s.clear()}return{addRoute:o,resolve:c,removeRoute:i,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function _i(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function xi(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Ed(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Ed(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function wi(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Ad(e){return e.reduce((t,n)=>ce(t,n.meta),{})}function Cd(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;da(e,t[o])<0?s=o:n=o+1}const r=kd(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function kd(e){let t=e;for(;t=t.parent;)if(pa(t)&&da(e,t)===0)return t}function pa({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Si(e){const t=it(Qs),n=it(mo),s=we(()=>{const a=B(e.to);return t.resolve(a)}),r=we(()=>{const{matched:a}=s.value,{length:c}=a,u=a[c-1],f=n.matched;if(!u||!f.length)return-1;const h=f.findIndex(kn.bind(null,u));if(h>-1)return h;const m=Ei(a[c-2]);return c>1&&Ei(u)===m&&f[f.length-1].path!==m?f.findIndex(kn.bind(null,a[c-2])):h}),o=we(()=>r.value>-1&&Od(n.params,s.value.params)),i=we(()=>r.value>-1&&r.value===n.matched.length-1&&aa(n.params,s.value.params));function l(a={}){if(Pd(a)){const c=t[B(e.replace)?"replace":"push"](B(e.to)).catch(Un);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:s,href:we(()=>s.value.href),isActive:o,isExactActive:i,navigate:l}}function Rd(e){return e.length===1?e[0]:e}const Td=We({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"},viewTransition:Boolean},useLink:Si,setup(e,{slots:t}){const n=Fs(Si(e)),{options:s}=it(Qs),r=we(()=>({[Ai(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Ai(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&Rd(t.default(n));return e.custom?o:qt("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),Gr=Td;function Pd(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 Od(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!ct(r)||r.length!==s.length||s.some((o,i)=>o.valueOf()!==r[i].valueOf()))return!1}return!0}function Ei(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Ai=(e,t,n)=>e??t??n,Id=We({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=it(Br),r=we(()=>e.route||s.value),o=it(gi,0),i=we(()=>{let c=B(o);const{matched:u}=r.value;let f;for(;(f=u[c])&&!f.components;)c++;return c}),l=we(()=>r.value.matched[i.value]);ds(gi,we(()=>i.value+1)),ds(ad,l),ds(Br,r);const a=Ze();return Nt(()=>[a.value,l.value,e.name],([c,u,f],[h,m,E])=>{u&&(u.instances[f]=c,m&&m!==u&&c&&c===h&&(u.leaveGuards.size||(u.leaveGuards=m.leaveGuards),u.updateGuards.size||(u.updateGuards=m.updateGuards))),c&&u&&(!m||!kn(u,m)||!h)&&(u.enterCallbacks[f]||[]).forEach(x=>x(c))},{flush:"post"}),()=>{const c=r.value,u=e.name,f=l.value,h=f&&f.components[u];if(!h)return Ci(n.default,{Component:h,route:c});const m=f.props[u],E=m?m===!0?c.params:typeof m=="function"?m(c):m:null,k=qt(h,ce({},E,t,{onVnodeUnmounted:I=>{I.component.isUnmounted&&(f.instances[u]=null)},ref:a}));return Ci(n.default,{Component:k,route:c})||k}}});function Ci(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const go=Id;function Nd(e){const t=Sd(e.routes,e),n=e.parseQuery||id,s=e.stringifyQuery||mi,r=e.history,o=Mn(),i=Mn(),l=Mn(),a=to(Bt);let c=Bt;gn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=pr.bind(null,v=>""+v),f=pr.bind(null,Hf),h=pr.bind(null,Zn);function m(v,z){let A,H;return ca(v)?(A=t.getRecordMatcher(v),H=z):H=v,t.addRoute(H,A)}function E(v){const z=t.getRecordMatcher(v);z&&t.removeRoute(z)}function x(){return t.getRoutes().map(v=>v.record)}function k(v){return!!t.getRecordMatcher(v)}function I(v,z){if(z=ce({},z||a.value),typeof v=="string"){const g=hr(n,v,z.path),y=t.resolve({path:g.path},z),w=r.createHref(g.fullPath);return ce(g,y,{params:h(y.params),hash:Zn(g.hash),redirectedFrom:void 0,href:w})}let A;if(v.path!=null)A=ce({},v,{path:hr(n,v.path,z.path).path});else{const g=ce({},v.params);for(const y in g)g[y]==null&&delete g[y];A=ce({},v,{params:f(g)}),z.params=f(z.params)}const H=t.resolve(A,z),Q=v.hash||"";H.params=u(h(H.params));const d=Wf(s,ce({},v,{hash:jf(Q),path:H.path})),p=r.createHref(d);return ce({fullPath:d,hash:Q,query:s===mi?ld(v.query):v.query||{}},H,{redirectedFrom:void 0,href:p})}function _(v){return typeof v=="string"?hr(n,v,a.value.path):ce({},v)}function M(v,z){if(c!==v)return Rn(xe.NAVIGATION_CANCELLED,{from:z,to:v})}function T(v){return j(v)}function J(v){return T(ce(_(v),{replace:!0}))}function Y(v,z){const A=v.matched[v.matched.length-1];if(A&&A.redirect){const{redirect:H}=A;let Q=typeof H=="function"?H(v,z):H;return typeof Q=="string"&&(Q=Q.includes("?")||Q.includes("#")?Q=_(Q):{path:Q},Q.params={}),ce({query:v.query,hash:v.hash,params:Q.path!=null?{}:v.params},Q)}}function j(v,z){const A=c=I(v),H=a.value,Q=v.state,d=v.force,p=v.replace===!0,g=Y(A,H);if(g)return j(ce(_(g),{state:typeof g=="object"?ce({},Q,g.state):Q,force:d,replace:p}),z||A);const y=A;y.redirectedFrom=z;let w;return!d&&Kf(s,H,A)&&(w=Rn(xe.NAVIGATION_DUPLICATED,{to:y,from:H}),qe(H,H,!0,!1)),(w?Promise.resolve(w):Z(y,H)).catch(b=>At(b)?At(b,xe.NAVIGATION_GUARD_REDIRECT)?b:G(b):se(b,y,H)).then(b=>{if(b){if(At(b,xe.NAVIGATION_GUARD_REDIRECT))return j(ce({replace:p},_(b.to),{state:typeof b.to=="object"?ce({},Q,b.to.state):Q,force:d}),z||y)}else b=L(y,H,!0,p,Q);return ne(y,H,b),b})}function C(v,z){const A=M(v,z);return A?Promise.reject(A):Promise.resolve()}function N(v){const z=ut.values().next().value;return z&&typeof z.runWithContext=="function"?z.runWithContext(v):v()}function Z(v,z){let A;const[H,Q,d]=cd(v,z);A=gr(H.reverse(),"beforeRouteLeave",v,z);for(const g of H)g.leaveGuards.forEach(y=>{A.push(Wt(y,v,z))});const p=C.bind(null,v,z);return A.push(p),pe(A).then(()=>{A=[];for(const g of o.list())A.push(Wt(g,v,z));return A.push(p),pe(A)}).then(()=>{A=gr(Q,"beforeRouteUpdate",v,z);for(const g of Q)g.updateGuards.forEach(y=>{A.push(Wt(y,v,z))});return A.push(p),pe(A)}).then(()=>{A=[];for(const g of d)if(g.beforeEnter)if(ct(g.beforeEnter))for(const y of g.beforeEnter)A.push(Wt(y,v,z));else A.push(Wt(g.beforeEnter,v,z));return A.push(p),pe(A)}).then(()=>(v.matched.forEach(g=>g.enterCallbacks={}),A=gr(d,"beforeRouteEnter",v,z,N),A.push(p),pe(A))).then(()=>{A=[];for(const g of i.list())A.push(Wt(g,v,z));return A.push(p),pe(A)}).catch(g=>At(g,xe.NAVIGATION_CANCELLED)?g:Promise.reject(g))}function ne(v,z,A){l.list().forEach(H=>N(()=>H(v,z,A)))}function L(v,z,A,H,Q){const d=M(v,z);if(d)return d;const p=z===Bt,g=gn?history.state:{};A&&(H||p?r.replace(v.fullPath,ce({scroll:p&&g&&g.scroll},Q)):r.push(v.fullPath,Q)),a.value=v,qe(v,z,A,p),G()}let te;function be(){te||(te=r.listen((v,z,A)=>{if(!_e.listening)return;const H=I(v),Q=Y(H,_e.currentRoute.value);if(Q){j(ce(Q,{replace:!0,force:!0}),H).catch(Un);return}c=H;const d=a.value;gn&&td(hi(d.fullPath,A.delta),Ys()),Z(H,d).catch(p=>At(p,xe.NAVIGATION_ABORTED|xe.NAVIGATION_CANCELLED)?p:At(p,xe.NAVIGATION_GUARD_REDIRECT)?(j(ce(_(p.to),{force:!0}),H).then(g=>{At(g,xe.NAVIGATION_ABORTED|xe.NAVIGATION_DUPLICATED)&&!A.delta&&A.type===Fr.pop&&r.go(-1,!1)}).catch(Un),Promise.reject()):(A.delta&&r.go(-A.delta,!1),se(p,H,d))).then(p=>{p=p||L(H,d,!1),p&&(A.delta&&!At(p,xe.NAVIGATION_CANCELLED)?r.go(-A.delta,!1):A.type===Fr.pop&&At(p,xe.NAVIGATION_ABORTED|xe.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),ne(H,d,p)}).catch(Un)}))}let Se=Mn(),re=Mn(),ee;function se(v,z,A){G(v);const H=re.list();return H.length?H.forEach(Q=>Q(v,z,A)):console.error(v),Promise.reject(v)}function Ke(){return ee&&a.value!==Bt?Promise.resolve():new Promise((v,z)=>{Se.add([v,z])})}function G(v){return ee||(ee=!v,be(),Se.list().forEach(([z,A])=>v?A(v):z()),Se.reset()),v}function qe(v,z,A,H){const{scrollBehavior:Q}=e;if(!gn||!Q)return Promise.resolve();const d=!A&&nd(hi(v.fullPath,0))||(H||!A)&&history.state&&history.state.scroll||null;return no().then(()=>Q(v,z,d)).then(p=>p&&ed(p)).catch(p=>se(p,v,z))}const Ie=v=>r.go(v);let St;const ut=new Set,_e={currentRoute:a,listening:!0,addRoute:m,removeRoute:E,clearRoutes:t.clearRoutes,hasRoute:k,getRoutes:x,resolve:I,options:e,push:T,replace:J,go:Ie,back:()=>Ie(-1),forward:()=>Ie(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:re.add,isReady:Ke,install(v){v.component("RouterLink",Gr),v.component("RouterView",go),v.config.globalProperties.$router=_e,Object.defineProperty(v.config.globalProperties,"$route",{enumerable:!0,get:()=>B(a)}),gn&&!St&&a.value===Bt&&(St=!0,T(r.location).catch(H=>{}));const z={};for(const H in Bt)Object.defineProperty(z,H,{get:()=>a.value[H],enumerable:!0});v.provide(Qs,_e),v.provide(mo,pl(z)),v.provide(Br,a);const A=v.unmount;ut.add(v),v.unmount=function(){ut.delete(v),ut.size<1&&(c=Bt,te&&te(),te=null,a.value=Bt,St=!1,ee=!1),A()}}};function pe(v){return v.reduce((z,A)=>z.then(()=>N(A)),Promise.resolve())}return _e}function Md(){return it(Qs)}function ha(e){return it(mo)}/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ld=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */var as={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Dd=({size:e,strokeWidth:t=2,absoluteStrokeWidth:n,color:s,iconNode:r,name:o,class:i,...l},{slots:a})=>qt("svg",{...as,width:e||as.width,height:e||as.height,stroke:s||as.stroke,"stroke-width":n?Number(t)*24/Number(e):t,class:["lucide",`lucide-${Ld(o??"icon")}`],...l},[...r.map(c=>qt(...c)),...a.default?[a.default()]:[]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const st=(e,t)=>(n,{slots:s})=>qt(Dd,{...n,iconNode:t,name:e},s);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const zd=st("ActivityIcon",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Vd=st("CircleCheckIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Fd=st("LayoutDashboardIcon",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const jd=st("ListFilterIcon",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M7 12h10",key:"b7w52i"}],["path",{d:"M10 18h4",key:"1ulq68"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Bd=st("LoaderCircleIcon",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Gd=st("LockKeyholeIcon",[["circle",{cx:"12",cy:"16",r:"1",key:"1au0dj"}],["rect",{x:"3",y:"10",width:"18",height:"12",rx:"2",key:"6s8ecr"}],["path",{d:"M7 10V7a5 5 0 0 1 10 0v3",key:"1pqi11"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Hd=st("MoonIcon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const $d=st("RadioIcon",[["path",{d:"M4.9 19.1C1 15.2 1 8.8 4.9 4.9",key:"1vaf9d"}],["path",{d:"M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5",key:"u1ii0m"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5",key:"1j5fej"}],["path",{d:"M19.1 4.9C23 8.8 23 15.1 19.1 19",key:"10b0cb"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ud=st("Settings2Icon",[["path",{d:"M20 7h-9",key:"3s1dr2"}],["path",{d:"M14 17H5",key:"gfn3mx"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Wd=st("SunIcon",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Kd=st("TriangleAlertIcon",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** - * @license lucide-vue-next v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const qd=st("XIcon",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),es=Ze([]);let Jd=1;function br(e,t,n){const s=Jd++;es.value=[...es.value,{id:s,title:e,description:n,variant:t}],window.setTimeout(()=>bo(s),t==="error"?6e3:3500)}function bo(e){es.value=es.value.filter(t=>t.id!==e)}const Yd={info:(e,t)=>br(e,"default",t),success:(e,t)=>br(e,"success",t),error:(e,t)=>br(e,"error",t)};function Qd(){return{toasts:es,toast:Yd,dismiss:bo}}function ma(e){var t,n,s="";if(typeof e=="string"||typeof e=="number")s+=e;else if(typeof e=="object")if(Array.isArray(e)){var r=e.length;for(t=0;t{const n=new Array(e.length+t.length);for(let s=0;s({classGroupId:e,validator:t}),ba=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),ks="-",ki=[],ep="arbitrary..",tp=e=>{const t=sp(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:s}=e;return{getClassGroupId:i=>{if(i.startsWith("[")&&i.endsWith("]"))return np(i);const l=i.split(ks),a=l[0]===""&&l.length>1?1:0;return va(l,a,t)},getConflictingClassGroupIds:(i,l)=>{if(l){const a=s[i],c=n[i];return a?c?Xd(c,a):a:c||ki}return n[i]||ki}}},va=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;const r=e[t],o=n.nextPart.get(r);if(o){const c=va(e,t+1,o);if(c)return c}const i=n.validators;if(i===null)return;const l=t===0?e.join(ks):e.slice(t).join(ks),a=i.length;for(let c=0;ce.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const t=e.slice(1,-1),n=t.indexOf(":"),s=t.slice(0,n);return s?ep+s:void 0})(),sp=e=>{const{theme:t,classGroups:n}=e;return rp(n,t)},rp=(e,t)=>{const n=ba();for(const s in e){const r=e[s];vo(r,n,s,t)}return n},vo=(e,t,n,s)=>{const r=e.length;for(let o=0;o{if(typeof e=="string"){ip(e,t,n);return}if(typeof e=="function"){lp(e,t,n,s);return}ap(e,t,n,s)},ip=(e,t,n)=>{const s=e===""?t:ya(t,e);s.classGroupId=n},lp=(e,t,n,s)=>{if(cp(e)){vo(e(s),t,n,s);return}t.validators===null&&(t.validators=[]),t.validators.push(Zd(n,e))},ap=(e,t,n,s)=>{const r=Object.entries(e),o=r.length;for(let i=0;i{let n=e;const s=t.split(ks),r=s.length;for(let o=0;o"isThemeGetter"in e&&e.isThemeGetter===!0,up=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=Object.create(null),s=Object.create(null);const r=(o,i)=>{n[o]=i,t++,t>e&&(t=0,s=n,n=Object.create(null))};return{get(o){let i=n[o];if(i!==void 0)return i;if((i=s[o])!==void 0)return r(o,i),i},set(o,i){o in n?n[o]=i:r(o,i)}}},Hr="!",Ri=":",fp=[],Ti=(e,t,n,s,r)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:s,isExternal:r}),dp=e=>{const{prefix:t,experimentalParseClassName:n}=e;let s=r=>{const o=[];let i=0,l=0,a=0,c;const u=r.length;for(let x=0;xa?c-a:void 0;return Ti(o,m,h,E)};if(t){const r=t+Ri,o=s;s=i=>i.startsWith(r)?o(i.slice(r.length)):Ti(fp,!1,i,void 0,!0)}if(n){const r=s;s=o=>n({className:o,parseClassName:r})}return s},pp=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((n,s)=>{t.set(n,1e6+s)}),n=>{const s=[];let r=[];for(let o=0;o0&&(r.sort(),s.push(...r),r=[]),s.push(i)):r.push(i)}return r.length>0&&(r.sort(),s.push(...r)),s}},hp=e=>({cache:up(e.cacheSize),parseClassName:dp(e),sortModifiers:pp(e),postfixLookupClassGroupIds:mp(e),...tp(e)}),mp=e=>{const t=Object.create(null),n=e.postfixLookupClassGroups;if(n)for(let s=0;s{const{parseClassName:n,getClassGroupId:s,getConflictingClassGroupIds:r,sortModifiers:o,postfixLookupClassGroupIds:i}=t,l=[],a=e.trim().split(gp);let c="";for(let u=a.length-1;u>=0;u-=1){const f=a[u],{isExternal:h,modifiers:m,hasImportantModifier:E,baseClassName:x,maybePostfixModifierPosition:k}=n(f);if(h){c=f+(c.length>0?" "+c:c);continue}let I=!!k,_;if(I){const j=x.substring(0,k);_=s(j);const C=_&&i[_]?s(x):void 0;C&&C!==_&&(_=C,I=!1)}else _=s(x);if(!_){if(!I){c=f+(c.length>0?" "+c:c);continue}if(_=s(x),!_){c=f+(c.length>0?" "+c:c);continue}I=!1}const M=m.length===0?"":m.length===1?m[0]:o(m).join(":"),T=E?M+Hr:M,J=T+_;if(l.indexOf(J)>-1)continue;l.push(J);const Y=r(_,I);for(let j=0;j0?" "+c:c)}return c},vp=(...e)=>{let t=0,n,s,r="";for(;t{if(typeof e=="string")return e;let t,n="";for(let s=0;s{let n,s,r,o;const i=a=>{const c=t.reduce((u,f)=>f(u),e());return n=hp(c),s=n.cache.get,r=n.cache.set,o=l,l(a)},l=a=>{const c=s(a);if(c)return c;const u=bp(a,n);return r(a,u),u};return o=i,(...a)=>o(vp(...a))},_p=[],Ce=e=>{const t=n=>n[e]||_p;return t.isThemeGetter=!0,t},xa=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,wa=/^\((?:(\w[\w-]*):)?(.+)\)$/i,xp=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,wp=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Sp=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,Ep=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Ap=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Cp=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Gt=e=>xp.test(e),X=e=>!!e&&!Number.isNaN(Number(e)),mt=e=>!!e&&Number.isInteger(Number(e)),vr=e=>e.endsWith("%")&&X(e.slice(0,-1)),Ct=e=>wp.test(e),Sa=()=>!0,kp=e=>Sp.test(e)&&!Ep.test(e),yo=()=>!1,Rp=e=>Ap.test(e),Tp=e=>Cp.test(e),Pp=e=>!V(e)&&!F(e),Op=e=>e.startsWith("@container")&&(e[10]==="/"&&e[11]!==void 0||e[11]==="s"&&e[16]!==void 0&&e.startsWith("-size/",10)||e[11]==="n"&&e[18]!==void 0&&e.startsWith("-normal/",10)),Ip=e=>Qt(e,Ca,yo),V=e=>xa.test(e),tn=e=>Qt(e,ka,kp),Pi=e=>Qt(e,jp,X),Np=e=>Qt(e,Ta,Sa),Mp=e=>Qt(e,Ra,yo),Oi=e=>Qt(e,Ea,yo),Lp=e=>Qt(e,Aa,Tp),cs=e=>Qt(e,Pa,Rp),F=e=>wa.test(e),Ln=e=>dn(e,ka),Dp=e=>dn(e,Ra),Ii=e=>dn(e,Ea),zp=e=>dn(e,Ca),Vp=e=>dn(e,Aa),us=e=>dn(e,Pa,!0),Fp=e=>dn(e,Ta,!0),Qt=(e,t,n)=>{const s=xa.exec(e);return s?s[1]?t(s[1]):n(s[2]):!1},dn=(e,t,n=!1)=>{const s=wa.exec(e);return s?s[1]?t(s[1]):n:!1},Ea=e=>e==="position"||e==="percentage",Aa=e=>e==="image"||e==="url",Ca=e=>e==="length"||e==="size"||e==="bg-size",ka=e=>e==="length",jp=e=>e==="number",Ra=e=>e==="family-name",Ta=e=>e==="number"||e==="weight",Pa=e=>e==="shadow",Bp=()=>{const e=Ce("color"),t=Ce("font"),n=Ce("text"),s=Ce("font-weight"),r=Ce("tracking"),o=Ce("leading"),i=Ce("breakpoint"),l=Ce("container"),a=Ce("spacing"),c=Ce("radius"),u=Ce("shadow"),f=Ce("inset-shadow"),h=Ce("text-shadow"),m=Ce("drop-shadow"),E=Ce("blur"),x=Ce("perspective"),k=Ce("aspect"),I=Ce("ease"),_=Ce("animate"),M=()=>["auto","avoid","all","avoid-page","page","left","right","column"],T=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],J=()=>[...T(),F,V],Y=()=>["auto","hidden","clip","visible","scroll"],j=()=>["auto","contain","none"],C=()=>[F,V,a],N=()=>[Gt,"full","auto",...C()],Z=()=>[mt,"none","subgrid",F,V],ne=()=>["auto",{span:["full",mt,F,V]},mt,F,V],L=()=>[mt,"auto",F,V],te=()=>["auto","min","max","fr",F,V],be=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],Se=()=>["start","end","center","stretch","center-safe","end-safe"],re=()=>["auto",...C()],ee=()=>[Gt,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...C()],se=()=>[Gt,"screen","full","dvw","lvw","svw","min","max","fit",...C()],Ke=()=>[Gt,"screen","full","lh","dvh","lvh","svh","min","max","fit",...C()],G=()=>[e,F,V],qe=()=>[...T(),Ii,Oi,{position:[F,V]}],Ie=()=>["no-repeat",{repeat:["","x","y","space","round"]}],St=()=>["auto","cover","contain",zp,Ip,{size:[F,V]}],ut=()=>[vr,Ln,tn],_e=()=>["","none","full",c,F,V],pe=()=>["",X,Ln,tn],v=()=>["solid","dashed","dotted","double"],z=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],A=()=>[X,vr,Ii,Oi],H=()=>["","none",E,F,V],Q=()=>["none",X,F,V],d=()=>["none",X,F,V],p=()=>[X,F,V],g=()=>[Gt,"full",...C()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[Ct],breakpoint:[Ct],color:[Sa],container:[Ct],"drop-shadow":[Ct],ease:["in","out","in-out"],font:[Pp],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[Ct],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[Ct],shadow:[Ct],spacing:["px",X],text:[Ct],"text-shadow":[Ct],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",Gt,V,F,k]}],container:["container"],"container-type":[{"@container":["","normal","size",F,V]}],"container-named":[Op],columns:[{columns:[X,V,F,l]}],"break-after":[{"break-after":M()}],"break-before":[{"break-before":M()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:J()}],overflow:[{overflow:Y()}],"overflow-x":[{"overflow-x":Y()}],"overflow-y":[{"overflow-y":Y()}],overscroll:[{overscroll:j()}],"overscroll-x":[{"overscroll-x":j()}],"overscroll-y":[{"overscroll-y":j()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:N()}],"inset-x":[{"inset-x":N()}],"inset-y":[{"inset-y":N()}],start:[{"inset-s":N(),start:N()}],end:[{"inset-e":N(),end:N()}],"inset-bs":[{"inset-bs":N()}],"inset-be":[{"inset-be":N()}],top:[{top:N()}],right:[{right:N()}],bottom:[{bottom:N()}],left:[{left:N()}],visibility:["visible","invisible","collapse"],z:[{z:[mt,"auto",F,V]}],basis:[{basis:[Gt,"full","auto",l,...C()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[X,Gt,"auto","initial","none",V]}],grow:[{grow:["",X,F,V]}],shrink:[{shrink:["",X,F,V]}],order:[{order:[mt,"first","last","none",F,V]}],"grid-cols":[{"grid-cols":Z()}],"col-start-end":[{col:ne()}],"col-start":[{"col-start":L()}],"col-end":[{"col-end":L()}],"grid-rows":[{"grid-rows":Z()}],"row-start-end":[{row:ne()}],"row-start":[{"row-start":L()}],"row-end":[{"row-end":L()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":te()}],"auto-rows":[{"auto-rows":te()}],gap:[{gap:C()}],"gap-x":[{"gap-x":C()}],"gap-y":[{"gap-y":C()}],"justify-content":[{justify:[...be(),"normal"]}],"justify-items":[{"justify-items":[...Se(),"normal"]}],"justify-self":[{"justify-self":["auto",...Se()]}],"align-content":[{content:["normal",...be()]}],"align-items":[{items:[...Se(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...Se(),{baseline:["","last"]}]}],"place-content":[{"place-content":be()}],"place-items":[{"place-items":[...Se(),"baseline"]}],"place-self":[{"place-self":["auto",...Se()]}],p:[{p:C()}],px:[{px:C()}],py:[{py:C()}],ps:[{ps:C()}],pe:[{pe:C()}],pbs:[{pbs:C()}],pbe:[{pbe:C()}],pt:[{pt:C()}],pr:[{pr:C()}],pb:[{pb:C()}],pl:[{pl:C()}],m:[{m:re()}],mx:[{mx:re()}],my:[{my:re()}],ms:[{ms:re()}],me:[{me:re()}],mbs:[{mbs:re()}],mbe:[{mbe:re()}],mt:[{mt:re()}],mr:[{mr:re()}],mb:[{mb:re()}],ml:[{ml:re()}],"space-x":[{"space-x":C()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":C()}],"space-y-reverse":["space-y-reverse"],size:[{size:ee()}],"inline-size":[{inline:["auto",...se()]}],"min-inline-size":[{"min-inline":["auto",...se()]}],"max-inline-size":[{"max-inline":["none",...se()]}],"block-size":[{block:["auto",...Ke()]}],"min-block-size":[{"min-block":["auto",...Ke()]}],"max-block-size":[{"max-block":["none",...Ke()]}],w:[{w:[l,"screen",...ee()]}],"min-w":[{"min-w":[l,"screen","none",...ee()]}],"max-w":[{"max-w":[l,"screen","none","prose",{screen:[i]},...ee()]}],h:[{h:["screen","lh",...ee()]}],"min-h":[{"min-h":["screen","lh","none",...ee()]}],"max-h":[{"max-h":["screen","lh",...ee()]}],"font-size":[{text:["base",n,Ln,tn]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[s,Fp,Np]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",vr,V]}],"font-family":[{font:[Dp,Mp,t]}],"font-features":[{"font-features":[V]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[r,F,V]}],"line-clamp":[{"line-clamp":[X,"none",F,Pi]}],leading:[{leading:[o,...C()]}],"list-image":[{"list-image":["none",F,V]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",F,V]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:G()}],"text-color":[{text:G()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...v(),"wavy"]}],"text-decoration-thickness":[{decoration:[X,"from-font","auto",F,tn]}],"text-decoration-color":[{decoration:G()}],"underline-offset":[{"underline-offset":[X,"auto",F,V]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:C()}],"tab-size":[{tab:[mt,F,V]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",F,V]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",F,V]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:qe()}],"bg-repeat":[{bg:Ie()}],"bg-size":[{bg:St()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},mt,F,V],radial:["",F,V],conic:[mt,F,V]},Vp,Lp]}],"bg-color":[{bg:G()}],"gradient-from-pos":[{from:ut()}],"gradient-via-pos":[{via:ut()}],"gradient-to-pos":[{to:ut()}],"gradient-from":[{from:G()}],"gradient-via":[{via:G()}],"gradient-to":[{to:G()}],rounded:[{rounded:_e()}],"rounded-s":[{"rounded-s":_e()}],"rounded-e":[{"rounded-e":_e()}],"rounded-t":[{"rounded-t":_e()}],"rounded-r":[{"rounded-r":_e()}],"rounded-b":[{"rounded-b":_e()}],"rounded-l":[{"rounded-l":_e()}],"rounded-ss":[{"rounded-ss":_e()}],"rounded-se":[{"rounded-se":_e()}],"rounded-ee":[{"rounded-ee":_e()}],"rounded-es":[{"rounded-es":_e()}],"rounded-tl":[{"rounded-tl":_e()}],"rounded-tr":[{"rounded-tr":_e()}],"rounded-br":[{"rounded-br":_e()}],"rounded-bl":[{"rounded-bl":_e()}],"border-w":[{border:pe()}],"border-w-x":[{"border-x":pe()}],"border-w-y":[{"border-y":pe()}],"border-w-s":[{"border-s":pe()}],"border-w-e":[{"border-e":pe()}],"border-w-bs":[{"border-bs":pe()}],"border-w-be":[{"border-be":pe()}],"border-w-t":[{"border-t":pe()}],"border-w-r":[{"border-r":pe()}],"border-w-b":[{"border-b":pe()}],"border-w-l":[{"border-l":pe()}],"divide-x":[{"divide-x":pe()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":pe()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...v(),"hidden","none"]}],"divide-style":[{divide:[...v(),"hidden","none"]}],"border-color":[{border:G()}],"border-color-x":[{"border-x":G()}],"border-color-y":[{"border-y":G()}],"border-color-s":[{"border-s":G()}],"border-color-e":[{"border-e":G()}],"border-color-bs":[{"border-bs":G()}],"border-color-be":[{"border-be":G()}],"border-color-t":[{"border-t":G()}],"border-color-r":[{"border-r":G()}],"border-color-b":[{"border-b":G()}],"border-color-l":[{"border-l":G()}],"divide-color":[{divide:G()}],"outline-style":[{outline:[...v(),"none","hidden"]}],"outline-offset":[{"outline-offset":[X,F,V]}],"outline-w":[{outline:["",X,Ln,tn]}],"outline-color":[{outline:G()}],shadow:[{shadow:["","none",u,us,cs]}],"shadow-color":[{shadow:G()}],"inset-shadow":[{"inset-shadow":["none",f,us,cs]}],"inset-shadow-color":[{"inset-shadow":G()}],"ring-w":[{ring:pe()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:G()}],"ring-offset-w":[{"ring-offset":[X,tn]}],"ring-offset-color":[{"ring-offset":G()}],"inset-ring-w":[{"inset-ring":pe()}],"inset-ring-color":[{"inset-ring":G()}],"text-shadow":[{"text-shadow":["none",h,us,cs]}],"text-shadow-color":[{"text-shadow":G()}],opacity:[{opacity:[X,F,V]}],"mix-blend":[{"mix-blend":[...z(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":z()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[X]}],"mask-image-linear-from-pos":[{"mask-linear-from":A()}],"mask-image-linear-to-pos":[{"mask-linear-to":A()}],"mask-image-linear-from-color":[{"mask-linear-from":G()}],"mask-image-linear-to-color":[{"mask-linear-to":G()}],"mask-image-t-from-pos":[{"mask-t-from":A()}],"mask-image-t-to-pos":[{"mask-t-to":A()}],"mask-image-t-from-color":[{"mask-t-from":G()}],"mask-image-t-to-color":[{"mask-t-to":G()}],"mask-image-r-from-pos":[{"mask-r-from":A()}],"mask-image-r-to-pos":[{"mask-r-to":A()}],"mask-image-r-from-color":[{"mask-r-from":G()}],"mask-image-r-to-color":[{"mask-r-to":G()}],"mask-image-b-from-pos":[{"mask-b-from":A()}],"mask-image-b-to-pos":[{"mask-b-to":A()}],"mask-image-b-from-color":[{"mask-b-from":G()}],"mask-image-b-to-color":[{"mask-b-to":G()}],"mask-image-l-from-pos":[{"mask-l-from":A()}],"mask-image-l-to-pos":[{"mask-l-to":A()}],"mask-image-l-from-color":[{"mask-l-from":G()}],"mask-image-l-to-color":[{"mask-l-to":G()}],"mask-image-x-from-pos":[{"mask-x-from":A()}],"mask-image-x-to-pos":[{"mask-x-to":A()}],"mask-image-x-from-color":[{"mask-x-from":G()}],"mask-image-x-to-color":[{"mask-x-to":G()}],"mask-image-y-from-pos":[{"mask-y-from":A()}],"mask-image-y-to-pos":[{"mask-y-to":A()}],"mask-image-y-from-color":[{"mask-y-from":G()}],"mask-image-y-to-color":[{"mask-y-to":G()}],"mask-image-radial":[{"mask-radial":[F,V]}],"mask-image-radial-from-pos":[{"mask-radial-from":A()}],"mask-image-radial-to-pos":[{"mask-radial-to":A()}],"mask-image-radial-from-color":[{"mask-radial-from":G()}],"mask-image-radial-to-color":[{"mask-radial-to":G()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":T()}],"mask-image-conic-pos":[{"mask-conic":[X]}],"mask-image-conic-from-pos":[{"mask-conic-from":A()}],"mask-image-conic-to-pos":[{"mask-conic-to":A()}],"mask-image-conic-from-color":[{"mask-conic-from":G()}],"mask-image-conic-to-color":[{"mask-conic-to":G()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:qe()}],"mask-repeat":[{mask:Ie()}],"mask-size":[{mask:St()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",F,V]}],filter:[{filter:["","none",F,V]}],blur:[{blur:H()}],brightness:[{brightness:[X,F,V]}],contrast:[{contrast:[X,F,V]}],"drop-shadow":[{"drop-shadow":["","none",m,us,cs]}],"drop-shadow-color":[{"drop-shadow":G()}],grayscale:[{grayscale:["",X,F,V]}],"hue-rotate":[{"hue-rotate":[X,F,V]}],invert:[{invert:["",X,F,V]}],saturate:[{saturate:[X,F,V]}],sepia:[{sepia:["",X,F,V]}],"backdrop-filter":[{"backdrop-filter":["","none",F,V]}],"backdrop-blur":[{"backdrop-blur":H()}],"backdrop-brightness":[{"backdrop-brightness":[X,F,V]}],"backdrop-contrast":[{"backdrop-contrast":[X,F,V]}],"backdrop-grayscale":[{"backdrop-grayscale":["",X,F,V]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[X,F,V]}],"backdrop-invert":[{"backdrop-invert":["",X,F,V]}],"backdrop-opacity":[{"backdrop-opacity":[X,F,V]}],"backdrop-saturate":[{"backdrop-saturate":[X,F,V]}],"backdrop-sepia":[{"backdrop-sepia":["",X,F,V]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":C()}],"border-spacing-x":[{"border-spacing-x":C()}],"border-spacing-y":[{"border-spacing-y":C()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",F,V]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[X,"initial",F,V]}],ease:[{ease:["linear","initial",I,F,V]}],delay:[{delay:[X,F,V]}],animate:[{animate:["none",_,F,V]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[x,F,V]}],"perspective-origin":[{"perspective-origin":J()}],rotate:[{rotate:Q()}],"rotate-x":[{"rotate-x":Q()}],"rotate-y":[{"rotate-y":Q()}],"rotate-z":[{"rotate-z":Q()}],scale:[{scale:d()}],"scale-x":[{"scale-x":d()}],"scale-y":[{"scale-y":d()}],"scale-z":[{"scale-z":d()}],"scale-3d":["scale-3d"],skew:[{skew:p()}],"skew-x":[{"skew-x":p()}],"skew-y":[{"skew-y":p()}],transform:[{transform:[F,V,"","none","gpu","cpu"]}],"transform-origin":[{origin:J()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:g()}],"translate-x":[{"translate-x":g()}],"translate-y":[{"translate-y":g()}],"translate-z":[{"translate-z":g()}],"translate-none":["translate-none"],zoom:[{zoom:[mt,F,V]}],accent:[{accent:G()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:G()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",F,V]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":G()}],"scrollbar-track-color":[{"scrollbar-track":G()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":C()}],"scroll-mx":[{"scroll-mx":C()}],"scroll-my":[{"scroll-my":C()}],"scroll-ms":[{"scroll-ms":C()}],"scroll-me":[{"scroll-me":C()}],"scroll-mbs":[{"scroll-mbs":C()}],"scroll-mbe":[{"scroll-mbe":C()}],"scroll-mt":[{"scroll-mt":C()}],"scroll-mr":[{"scroll-mr":C()}],"scroll-mb":[{"scroll-mb":C()}],"scroll-ml":[{"scroll-ml":C()}],"scroll-p":[{"scroll-p":C()}],"scroll-px":[{"scroll-px":C()}],"scroll-py":[{"scroll-py":C()}],"scroll-ps":[{"scroll-ps":C()}],"scroll-pe":[{"scroll-pe":C()}],"scroll-pbs":[{"scroll-pbs":C()}],"scroll-pbe":[{"scroll-pbe":C()}],"scroll-pt":[{"scroll-pt":C()}],"scroll-pr":[{"scroll-pr":C()}],"scroll-pb":[{"scroll-pb":C()}],"scroll-pl":[{"scroll-pl":C()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",F,V]}],fill:[{fill:["none",...G()]}],"stroke-w":[{stroke:[X,Ln,tn,Pi]}],stroke:[{stroke:["none",...G()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},Gp=yp(Bp);function wt(...e){return Gp(ga(e))}const Hp={class:"pointer-events-none fixed inset-x-0 top-0 z-100 flex flex-col items-center gap-2 p-3 sm:top-auto sm:right-0 sm:bottom-0 sm:left-auto sm:items-end sm:p-4"},$p={class:"min-w-0 flex-1"},Up={class:"text-sm font-medium"},Wp={key:0,class:"text-muted-foreground mt-0.5 text-xs break-words"},Kp=["onClick"],qp=We({__name:"Toaster",setup(e){const{toasts:t}=Qd();return(n,s)=>(fe(),Qe("div",Hp,[de(gf,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"opacity-0 -translate-y-2 sm:translate-y-2","leave-active-class":"transition duration-150 ease-in absolute","leave-to-class":"opacity-0 scale-95"},{default:Ye(()=>[(fe(!0),Qe(Pe,null,Tr(B(t),r=>(fe(),Qe("div",{key:r.id,class:Ue(B(wt)("bg-popover text-popover-foreground pointer-events-auto flex w-full max-w-sm items-start gap-2.5 rounded-lg border p-3 shadow-lg",r.variant==="error"&&"border-block/40",r.variant==="success"&&"border-allow/40"))},[r.variant==="success"?(fe(),ze(B(Vd),{key:0,class:"text-allow mt-0.5 size-4 shrink-0"})):r.variant==="error"?(fe(),ze(B(Kd),{key:1,class:"text-block mt-0.5 size-4 shrink-0"})):ws("",!0),le("div",$p,[le("p",Up,Le(r.title),1),r.description?(fe(),Qe("p",Wp,Le(r.description),1)):ws("",!0)]),le("button",{type:"button",class:"text-muted-foreground hover:text-foreground -m-1 p-1",onClick:o=>B(bo)(r.id)},[de(B(qd),{class:"size-3.5"})],8,Kp)],2))),128))]),_:1})]))}}),Jp=We({__name:"App",setup(e){return(t,n)=>(fe(),Qe(Pe,null,[de(B(go)),de(qp)],64))}}),Oa="/api/v1",$r="opengfw.token";class hs extends Error{constructor(n,s){super(s);To(this,"status");this.status=n}}let bn=localStorage.getItem($r)??"";const Ur=new Set,Vt={get token(){return bn},get authenticated(){return bn!==""},set(e){bn=e,localStorage.setItem($r,e)},clear(){bn="",localStorage.removeItem($r)},onUnauthorized(e){return Ur.add(e),()=>Ur.delete(e)}};async function kt(e,t={}){const n=new Headers(t.headers);bn&&n.set("Authorization",`Bearer ${bn}`),t.body&&n.set("Content-Type","application/json");let s;try{s=await fetch(Oa+e,{...t,headers:n,credentials:"same-origin"})}catch{throw new hs(0,"network error")}if(s.status===401)throw Vt.clear(),Ur.forEach(i=>i()),new hs(401,"unauthorized");const r=await s.text(),o=r?JSON.parse(r):null;if(!s.ok){const i=o&&typeof o=="object"&&"error"in o?String(o.error):`request failed (${s.status})`;throw new hs(s.status,i)}return o}const Wr={async login(e){const t=await kt("/login",{method:"POST",body:JSON.stringify({password:e})});Vt.set(t.token)},async logout(){try{await kt("/logout",{method:"POST"})}finally{Vt.clear()}},info:()=>kt("/info"),meta:()=>kt("/meta"),metrics:()=>kt("/metrics"),events:(e=200)=>kt(`/events?limit=${e}`),rules:()=>kt("/rules"),saveRules:e=>kt("/rules",{method:"PUT",body:JSON.stringify(e)}),validateRules:e=>kt("/rules/validate",{method:"POST",body:JSON.stringify(e)})},Yp=`${Oa}/live`,Kr=500,Xs=Ze(null),un=to([]),on=Ze("closed");let Kt=null,qr,fs=1e3;function Qp(e){const t=[e,...un.value];t.length>Kr&&(t.length=Kr),un.value=t}async function Ia(){try{const[e,t]=await Promise.all([Wr.metrics(),Wr.events(Kr)]);Xs.value=e,un.value.length===0&&(un.value=t.events??[])}catch{}}function Na(){if(Kt||!Vt.authenticated)return;on.value="connecting";const e=new EventSource(Yp);Kt=e,e.addEventListener("open",()=>{on.value="open",fs=1e3}),e.addEventListener("metrics",t=>{try{Xs.value=JSON.parse(t.data),on.value="open"}catch{}}),e.addEventListener("event",t=>{try{Qp(JSON.parse(t.data))}catch{}}),e.addEventListener("error",()=>{e.close(),Kt===e&&(Kt=null),on.value="closed",window.clearTimeout(qr),qr=window.setTimeout(()=>{Vt.authenticated&&Na()},fs),fs=Math.min(fs*2,15e3)})}function Ma(){Vt.authenticated&&(Ia(),Na())}function _o(){window.clearTimeout(qr),Kt==null||Kt.close(),Kt=null,on.value="closed",Xs.value=null,un.value=[]}function Xp(){un.value=[]}function Zp(){return{metrics:Xs,events:un,status:on,connected:we(()=>on.value==="open"),startLive:Ma,stopLive:_o,clearEvents:Xp,refresh:Ia}}const eh="modulepreload",th=function(e){return"/"+e},Ni={},Dn=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){let i=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),a=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));r=i(n.map(c=>{if(c=th(c),c in Ni)return;Ni[c]=!0;const u=c.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${f}`))return;const h=document.createElement("link");if(h.rel=u?"stylesheet":eh,u||(h.as="script"),h.crossOrigin="",h.href=c,a&&h.setAttribute("nonce",a),document.head.appendChild(h),u)return new Promise((m,E)=>{h.addEventListener("load",m),h.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${c}`)))})}))}function o(i){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=i,window.dispatchEvent(l),!l.defaultPrevented)throw i}return r.then(i=>{for(const l of i||[])l.status==="rejected"&&o(l.reason);return t().catch(o)})},nh={app:{name:"OpenGFW",tagline:"Network filtering and analysis"},nav:{dashboard:"Dashboard",events:"Events",rules:"Rules",analyzers:"Analyzers",settings:"Settings"},common:{save:"Save",saving:"Saving…",cancel:"Cancel",close:"Close",refresh:"Refresh",search:"Search",loading:"Loading…",empty:"Nothing here yet",error:"Error",retry:"Retry",delete:"Delete",edit:"Edit",add:"Add",apply:"Apply",copy:"Copy",copied:"Copied",enabled:"Enabled",disabled:"Disabled",all:"All",unknown:"Unknown",total:"Total",live:"Live",offline:"Disconnected",connecting:"Connecting…",back:"Back",more:"More"},login:{title:"Sign in",subtitle:"Enter the web UI password from your config file",password:"Password",submit:"Sign in",failed:"Sign in failed",hint:"Set it with web.secret in config.yaml"},dashboard:{title:"Dashboard",subtitle:"Live overview of the engine",uptime:"Uptime",workers:"Workers",streams:"Streams",blocked:"Blocked",allowed:"Allowed",modified:"Modified",errors:"Errors",traffic:"Traffic",trafficDesc:"New streams and verdicts over time",range10m:"10 min",range1h:"1 hour",protocols:"Protocols",verdicts:"Verdicts",topHosts:"Top hosts",topHostsDesc:"Seen in TLS SNI, HTTP Host and DNS queries",topBlocked:"Blocked destinations",topRules:"Triggered rules",recent:"Recent events",viewAll:"View all",noTraffic:"No traffic seen yet",tcp:"TCP",udp:"UDP"},events:{title:"Events",subtitle:"Live feed of verdicts, rule logs and errors",pause:"Pause",resume:"Resume",paused:"Paused",clear:"Clear",filterAction:"Verdict",filterProto:"Protocol",filterKind:"Type",searchPlaceholder:"Search IP, host or rule…",empty:"Waiting for events…",emptyFiltered:"No event matches the filter",detail:"Event detail",stream:"Stream",source:"Source",destination:"Destination",host:"Host",rule:"Rule",props:"Analyzer properties",noProps:"No analyzer properties",copyJson:"Copy JSON",buffered:"{n} new"},rules:{title:"Rules",subtitle:"Rules are matched top to bottom; the first match wins",count:"{n} rules",file:"Rule file",add:"New rule",editTitle:"Edit rule",addTitle:"New rule",name:"Name",namePlaceholder:"block-google-dns",action:"Action",actionNone:"None (log only)",log:"Log matches",expr:"Expression",exprPlaceholder:'dns != nil && dns.qr && any(dns.questions, {.name endsWith "example.com"})',modifier:"Modifier",modifierArgs:"Modifier arguments (JSON)",visual:"Visual",yaml:"YAML",validate:"Validate",valid:"Rules are valid",invalid:"Invalid rules",save:"Save & apply",saved:"Rules applied to the running engine",unsaved:"Unsaved changes",discard:"Discard",deleteConfirm:'Delete rule "{name}"?',moveUp:"Move up",moveDown:"Move down",empty:"No rules yet. Everything is accepted.",nameRequired:"A name is required",exprRequired:"An expression is required",hint:"Saving writes the rule file and hot reloads the engine."},analyzers:{title:"Analyzers",subtitle:"Protocol analyzers compiled into this build",hits:"Streams analyzed",modifiers:"Modifiers",modifiersDesc:"Available for rules with the modify action",functions:"Rule functions",functionsDesc:"Built-in functions usable in expressions",used:"In use",idle:"Idle"},settings:{title:"Settings",subtitle:"Appearance and instance information",appearance:"Appearance",theme:"Theme",themeLight:"Light",themeDark:"Dark",themeSystem:"System",language:"Language",instance:"Instance",version:"Version",platform:"Platform",goVersion:"Go version",hostname:"Hostname",ruleFile:"Rule file",engineConfig:"Engine configuration",ioQueueSize:"NFQueue size",ioLocal:"Local mode",ioRST:"Send RST",workers:"Workers",workerQueueSize:"Worker queue size",udpMaxStreams:"Max UDP streams",geoip:"GeoIP database",geosite:"GeoSite database",auto:"Auto",session:"Session",logout:"Sign out",docs:"Documentation"},action:{allow:"Allow",block:"Block",drop:"Drop",modify:"Modify",maybe:"Maybe",log:"Log",error:"Error"}},sh={app:{name:"OpenGFW",tagline:"网络过滤与分析"},nav:{dashboard:"概览",events:"事件",rules:"规则",analyzers:"解析器",settings:"设置"},common:{save:"保存",saving:"保存中…",cancel:"取消",close:"关闭",refresh:"刷新",search:"搜索",loading:"加载中…",empty:"暂无数据",error:"错误",retry:"重试",delete:"删除",edit:"编辑",add:"添加",apply:"应用",copy:"复制",copied:"已复制",enabled:"已启用",disabled:"已禁用",all:"全部",unknown:"未知",total:"总计",live:"实时",offline:"连接断开",connecting:"连接中…",back:"返回",more:"更多"},login:{title:"登录",subtitle:"请输入配置文件中设置的 Web UI 密码",password:"密码",submit:"登录",failed:"登录失败",hint:"在 config.yaml 的 web.secret 中设置"},dashboard:{title:"概览",subtitle:"引擎实时运行状态",uptime:"运行时长",workers:"工作线程",streams:"连接数",blocked:"已拦截",allowed:"已放行",modified:"已修改",errors:"错误",traffic:"流量趋势",trafficDesc:"新建连接与判定结果随时间变化",range10m:"10 分钟",range1h:"1 小时",protocols:"协议分布",verdicts:"判定分布",topHosts:"热门域名",topHostsDesc:"来自 TLS SNI、HTTP Host 与 DNS 查询",topBlocked:"被拦截的目标",topRules:"命中的规则",recent:"最近事件",viewAll:"查看全部",noTraffic:"暂未捕获到流量",tcp:"TCP",udp:"UDP"},events:{title:"事件",subtitle:"判定结果、规则日志与错误的实时推送",pause:"暂停",resume:"继续",paused:"已暂停",clear:"清空",filterAction:"判定",filterProto:"协议",filterKind:"类型",searchPlaceholder:"搜索 IP、域名或规则…",empty:"等待事件中…",emptyFiltered:"没有符合筛选条件的事件",detail:"事件详情",stream:"连接",source:"来源",destination:"目标",host:"域名",rule:"规则",props:"解析器属性",noProps:"无解析器属性",copyJson:"复制 JSON",buffered:"{n} 条新事件"},rules:{title:"规则",subtitle:"规则自上而下匹配,命中第一条即生效",count:"{n} 条规则",file:"规则文件",add:"新建规则",editTitle:"编辑规则",addTitle:"新建规则",name:"名称",namePlaceholder:"block-google-dns",action:"动作",actionNone:"无(仅记录日志)",log:"记录日志",expr:"表达式",exprPlaceholder:'dns != nil && dns.qr && any(dns.questions, {.name endsWith "example.com"})',modifier:"修改器",modifierArgs:"修改器参数(JSON)",visual:"可视化",yaml:"YAML",validate:"校验",valid:"规则校验通过",invalid:"规则不合法",save:"保存并应用",saved:"规则已热加载到运行中的引擎",unsaved:"有未保存的修改",discard:"放弃修改",deleteConfirm:"确定删除规则「{name}」?",moveUp:"上移",moveDown:"下移",empty:"暂无规则,所有流量都会放行。",nameRequired:"请填写名称",exprRequired:"请填写表达式",hint:"保存后将写入规则文件并热加载引擎。"},analyzers:{title:"解析器",subtitle:"当前版本内置的协议解析器",hits:"已解析连接",modifiers:"修改器",modifiersDesc:"可用于 modify 动作的规则",functions:"规则函数",functionsDesc:"表达式中可用的内置函数",used:"使用中",idle:"空闲"},settings:{title:"设置",subtitle:"外观与实例信息",appearance:"外观",theme:"主题",themeLight:"浅色",themeDark:"深色",themeSystem:"跟随系统",language:"语言",instance:"实例信息",version:"版本",platform:"平台",goVersion:"Go 版本",hostname:"主机名",ruleFile:"规则文件",engineConfig:"引擎配置",ioQueueSize:"NFQueue 队列大小",ioLocal:"本机模式",ioRST:"发送 RST",workers:"工作线程数",workerQueueSize:"工作线程队列大小",udpMaxStreams:"UDP 最大连接数",geoip:"GeoIP 数据库",geosite:"GeoSite 数据库",auto:"自动",session:"会话",logout:"退出登录",docs:"文档"},action:{allow:"放行",block:"拦截",drop:"丢弃",modify:"修改",maybe:"待定",log:"日志",error:"错误"}},La="opengfw.lang",Mi={en:nh,zh:sh};function rh(){const e=localStorage.getItem(La);return e==="en"||e==="zh"?e:navigator.language.toLowerCase().startsWith("zh")?"zh":"en"}const Zs=Ze(rh());function Li(e,t){const n=t.split(".").reduce((s,r)=>{if(s&&typeof s=="object")return s[r]},e);return typeof n=="string"?n:void 0}function Te(e,t){const n=Li(Mi[Zs.value],e)??Li(Mi.en,e)??e;return t?n.replace(/\{(\w+)\}/g,(s,r)=>t[r]===void 0?`{${r}}`:String(t[r])):n}function oh(e){Zs.value=e,localStorage.setItem(La,e),document.documentElement.lang=e==="zh"?"zh-CN":"en"}function ih(){return{t:Te,lang:we(()=>Zs.value),setLang:oh}}document.documentElement.lang=Zs.value==="zh"?"zh-CN":"en";const Di=We({__name:"StatusPill",setup(e){const{status:t}=Zp(),n=we(()=>{switch(t.value){case"open":return Te("common.live");case"connecting":return Te("common.connecting");default:return Te("common.offline")}});return(s,r)=>(fe(),Qe("span",{class:Ue(B(wt)("inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 text-[11px] font-medium",B(t)==="open"?"border-allow/30 bg-allow/10 text-allow":B(t)==="connecting"?"border-drop/30 bg-drop/10 text-drop":"border-block/30 bg-block/10 text-block"))},[le("span",{class:Ue(B(wt)("size-1.5 rounded-full",B(t)==="open"?"bg-allow animate-pulse-dot":B(t)==="connecting"?"bg-drop animate-pulse-dot":"bg-block"))},null,2),Sn(" "+Le(n.value),1)],2))}}),Da="opengfw.theme",yr=localStorage.getItem(Da),cn=Ze(yr==="light"||yr==="dark"?yr:"system"),za=window.matchMedia("(prefers-color-scheme: dark)");function Va(e){return e==="dark"||e==="system"&&za.matches}const Wn=Ze(Va(cn.value));function xo(){var e;Wn.value=Va(cn.value),document.documentElement.classList.toggle("dark",Wn.value),(e=document.querySelector('meta[name="theme-color"]'))==null||e.setAttribute("content",Wn.value?"#09090b":"#ffffff")}Nt(cn,e=>{localStorage.setItem(Da,e),xo()});za.addEventListener("change",()=>{cn.value==="system"&&xo()});xo();function lh(){return{theme:cn,isDark:we(()=>Wn.value),setTheme:e=>{cn.value=e},toggle:()=>{cn.value=Wn.value?"light":"dark"}}}const ah={class:"bg-background min-h-dvh"},ch={class:"bg-card/40 fixed inset-y-0 left-0 z-40 hidden w-56 flex-col border-r px-3 py-4 md:flex lg:w-60"},uh={class:"flex items-center gap-2 px-2 pb-4"},fh={class:"min-w-0"},dh={class:"truncate text-sm font-semibold"},ph={class:"text-muted-foreground truncate text-[11px]"},hh={class:"flex flex-1 flex-col gap-0.5"},mh={class:"px-2 pt-3"},gh={class:"flex min-h-dvh flex-col md:pl-56 lg:pl-60"},bh={class:"bg-background/85 safe-top sticky top-0 z-30 border-b backdrop-blur-md md:hidden"},vh={class:"flex h-12 items-center justify-between gap-3 px-4"},yh={class:"truncate text-sm font-semibold"},_h={class:"flex-1 px-4 pt-4 pb-24 sm:px-6 sm:pt-6 md:pb-8"},xh={class:"bg-background/90 safe-bottom fixed inset-x-0 bottom-0 z-40 border-t backdrop-blur-md md:hidden"},wh={class:"grid grid-cols-5"},Sh={class:"truncate"},Eh=We({__name:"AppShell",setup(e){const t=ha(),n=we(()=>[{to:"/",label:Te("nav.dashboard"),icon:Fd},{to:"/events",label:Te("nav.events"),icon:$d},{to:"/rules",label:Te("nav.rules"),icon:jd},{to:"/analyzers",label:Te("nav.analyzers"),icon:zd},{to:"/settings",label:Te("nav.settings"),icon:Ud}]),s=we(()=>{const r=n.value.find(o=>o.to===t.path);return(r==null?void 0:r.label)??Te("app.name")});return Us(Ma),io(_o),(r,o)=>(fe(),Qe("div",ah,[le("aside",ch,[le("div",uh,[o[0]||(o[0]=le("div",{class:"bg-primary text-primary-foreground flex size-8 items-center justify-center rounded-lg font-bold"}," G ",-1)),le("div",fh,[le("p",dh,Le(B(Te)("app.name")),1),le("p",ph,Le(B(Te)("app.tagline")),1)])]),le("nav",hh,[(fe(!0),Qe(Pe,null,Tr(n.value,i=>(fe(),ze(B(Gr),{key:i.to,to:i.to,class:Ue(B(wt)("flex items-center gap-2.5 rounded-lg px-2.5 py-2 text-sm font-medium transition-colors",B(t).path===i.to?"bg-accent text-accent-foreground":"text-muted-foreground hover:bg-accent/50 hover:text-foreground"))},{default:Ye(()=>[(fe(),ze(ir(i.icon),{class:"size-4 shrink-0"})),Sn(" "+Le(i.label),1)]),_:2},1032,["to","class"]))),128))]),le("div",mh,[de(Di)])]),le("div",gh,[le("header",bh,[le("div",vh,[le("span",yh,Le(s.value),1),de(Di)])]),le("main",_h,[de(B(go),null,{default:Ye(({Component:i})=>[(fe(),ze(ir(i),{class:"animate-fade-in"}))]),_:1})])]),le("nav",xh,[le("div",wh,[(fe(!0),Qe(Pe,null,Tr(n.value,i=>(fe(),ze(B(Gr),{key:i.to,to:i.to,class:Ue(B(wt)("flex flex-col items-center gap-0.5 py-2 text-[10px] font-medium transition-colors",B(t).path===i.to?"text-foreground":"text-muted-foreground"))},{default:Ye(()=>[(fe(),ze(ir(i.icon),{class:Ue(B(wt)("size-5",B(t).path===i.to&&"text-primary"))},null,8,["class"])),le("span",Sh,Le(i.label),1)]),_:2},1032,["to","class"]))),128))])])]))}}),zi=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,Vi=ga,Ah=(e,t)=>n=>{var s;if((t==null?void 0:t.variants)==null)return Vi(e,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:r,defaultVariants:o}=t,i=Object.keys(r).map(c=>{const u=n==null?void 0:n[c],f=o==null?void 0:o[c];if(u===null)return null;const h=zi(u)||zi(f);return r[c][h]}),l=n&&Object.entries(n).reduce((c,u)=>{let[f,h]=u;return h===void 0||(c[f]=h),c},{}),a=t==null||(s=t.compoundVariants)===null||s===void 0?void 0:s.reduce((c,u)=>{let{class:f,className:h,...m}=u;return Object.entries(m).every(E=>{let[x,k]=E;return Array.isArray(k)?k.includes({...o,...l}[x]):{...o,...l}[x]===k})?[...c,f,h]:c},[]);return Vi(e,i,a,n==null?void 0:n.class,n==null?void 0:n.className)};function wo(e,t){return Yi()?(nc(e,t),!0):!1}function vm(e){let t=!1,n;const s=Ji(!0);return((...r)=>(t||(n=s.run(()=>e(...r)),t=!0),n))}const So=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Ch=e=>typeof e<"u",kh=Object.prototype.toString,Rh=e=>kh.call(e)==="[object Object]",ym=Th();function Th(){var e,t,n;return So&&!!(!((e=window)===null||e===void 0||(e=e.navigator)===null||e===void 0)&&e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window)===null||t===void 0||(t=t.navigator)===null||t===void 0?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test((n=window)===null||n===void 0?void 0:n.navigator.userAgent))}function _r(e){return Array.isArray(e)?e:[e]}function Ph(e){return fn()}function _m(e){if(!So)return e;let t=0,n,s;const r=()=>{t-=1,s&&t<=0&&(s.stop(),n=void 0,s=void 0)};return((...o)=>(t+=1,s||(s=Ji(!0),n=s.run(()=>e(...o))),wo(r),n))}function xm(e,t=1e4){return Cc((n,s)=>{let r=It(e),o;const i=()=>setTimeout(()=>{r=It(e),s()},It(t));return wo(()=>{clearTimeout(o)}),{get(){return n(),r},set(l){r=l,s(),clearTimeout(o),o=i()}}})}function wm(e,t){Ph()&&oo(e,t)}function Oh(e,t,n){return Nt(e,t,{...n,immediate:!0})}const Eo=So?window:void 0;function Rs(e){var t;const n=It(e);return(t=n==null?void 0:n.$el)!==null&&t!==void 0?t:n}function Ih(...e){const t=(s,r,o,i)=>(s.addEventListener(r,o,i),()=>s.removeEventListener(r,o,i)),n=we(()=>{const s=_r(It(e[0])).filter(r=>r!=null);return s.every(r=>typeof r!="string")?s:void 0});return Oh(()=>{var s,r;return[(s=(r=n.value)===null||r===void 0?void 0:r.map(o=>Rs(o)))!==null&&s!==void 0?s:[Eo].filter(o=>o!=null),_r(It(n.value?e[1]:e[0])),_r(B(n.value?e[2]:e[1])),It(n.value?e[3]:e[2])]},([s,r,o,i],l,a)=>{if(!(s!=null&&s.length)||!(r!=null&&r.length)||!(o!=null&&o.length))return;const c=Rh(i)?{...i}:i,u=s.flatMap(f=>r.flatMap(h=>o.map(m=>t(f,h,m,c))));a(()=>{u.forEach(f=>f())})},{flush:"post"})}function Nh(){const e=to(!1),t=fn();return t&&Us(()=>{e.value=!0},t),e}function Mh(e){const t=Nh();return we(()=>(t.value,!!e()))}function Lh(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Sm(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=Eo,eventName:o="keydown",passive:i=!1,dedupe:l=!1}=s,a=Lh(t);return Ih(r,o,u=>{u.repeat&&It(l)||a(u)&&n(u)},i)}function Dh(e){return JSON.parse(JSON.stringify(e))}function Em(e,t,n={}){const{window:s=Eo,...r}=n;let o;const i=Mh(()=>s&&"ResizeObserver"in s),l=()=>{o&&(o.disconnect(),o=void 0)},a=Nt(we(()=>{const u=It(e);return Array.isArray(u)?u.map(f=>Rs(f)):[Rs(u)]}),u=>{if(l(),i.value&&s){o=new ResizeObserver(t);for(const f of u)f&&o.observe(f,r)}},{immediate:!0,flush:"post"}),c=()=>{l(),a()};return wo(c),{isSupported:i,stop:c}}function Am(e,t,n,s={}){var r,o;const{clone:i=!1,passive:l=!1,eventName:a,deep:c=!1,defaultValue:u,shouldEmit:f}=s,h=fn(),m=n||(h==null?void 0:h.emit)||(h==null||(r=h.$emit)===null||r===void 0?void 0:r.bind(h))||(h==null||(o=h.proxy)===null||o===void 0||(o=o.$emit)===null||o===void 0?void 0:o.bind(h==null?void 0:h.proxy));let E=a;t||(t="modelValue"),E=E||`update:${t.toString()}`;const x=_=>i?typeof i=="function"?i(_):Dh(_):_,k=()=>Ch(e[t])?x(e[t]):u,I=_=>{f?f(_)&&m(E,_):m(E,_)};if(l){const _=Ze(k());let M=!1;return Nt(()=>e[t],T=>{M||(M=!0,_.value=x(T),no(()=>M=!1))}),Nt(_,T=>{!M&&(T!==e[t]||c)&&I(T)},{deep:c}),_}else return we({get(){return k()},set(_){I(_)}})}function Fa(e){return e?e.flatMap(t=>t.type===Pe?Fa(t.children):[t]):[]}function zh(){const e=fn(),t=Ze(),n=we(()=>s());ro(()=>{n.value!==s()&&Sc(t)});function s(){return t.value&&"$el"in t.value&&["#text","#comment"].includes(t.value.$el.nodeName)?t.value.$el.nextElementSibling:Rs(t)}const r=Object.assign({},e.exposed),o={};for(const l in e.props)Object.defineProperty(o,l,{enumerable:!0,configurable:!0,get:()=>e.props[l]});if(Object.keys(r).length>0)for(const l in r)Object.defineProperty(o,l,{enumerable:!0,configurable:!0,get:()=>r[l]});Object.defineProperty(o,"$el",{enumerable:!0,configurable:!0,get:()=>e.vnode.el}),e.exposed=o;function i(l){if(t.value=l,!!l&&(Object.defineProperty(o,"$el",{enumerable:!0,configurable:!0,get:()=>l instanceof Element?l:l.$el}),!(l instanceof Element)&&!Object.hasOwn(l,"$el"))){const a=l.$.exposed,c=Object.assign({},o);for(const u in a)Object.defineProperty(c,u,{enumerable:!0,configurable:!0,get:()=>a[u]});e.exposed=c}}return{forwardRef:i,currentRef:t,currentElement:n}}const Vh=We({name:"PrimitiveSlot",inheritAttrs:!1,setup(e,{attrs:t,slots:n}){return()=>{var a;if(!n.default)return null;const s=Fa(n.default()),r=s.findIndex(c=>c.type!==at);if(r===-1)return s;const o=s[r];(a=o.props)==null||delete a.ref;const i=o.props?fo(t,o.props):t,l=Jt({...o,props:{}},i);return s.length===1?l:(s[r]=l,s)}}}),Fh=["area","img","input"],ja=We({name:"Primitive",inheritAttrs:!1,props:{asChild:{type:Boolean,default:!1},as:{type:[String,Object],default:"div"}},setup(e,{attrs:t,slots:n}){const s=e.asChild?"template":e.as;return typeof s=="string"&&Fh.includes(s)?()=>qt(s,t):s!=="template"?()=>qt(e.as,t,{default:n.default}):()=>qt(Vh,t,{default:n.default})}});var jh=We({__name:"Label",props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"label"}},setup(e){const t=e;return zh(),(n,s)=>(fe(),ze(B(ja),fo(t,{onMousedown:s[0]||(s[0]=r=>{!r.defaultPrevented&&r.detail>1&&r.preventDefault()})}),{default:Ye(()=>[Ws(n.$slots,"default")]),_:3},16))}}),Bh=jh;const Gh=Ah("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow,background-color] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 outline-none focus-visible:ring-[3px] focus-visible:ring-ring/40 focus-visible:border-ring active:scale-[0.98] select-none",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/30",outline:"border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5 text-[13px]",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8 rounded-md"}},defaultVariants:{variant:"default",size:"default"}}),xr=We({__name:"Button",props:{asChild:{type:Boolean},as:{default:"button"},variant:{},size:{},class:{}},setup(e){const t=e;return(n,s)=>(fe(),ze(B(ja),{as:t.as,"as-child":t.asChild,class:Ue(B(wt)(B(Gh)({variant:t.variant,size:t.size}),t.class))},{default:Ye(()=>[Ws(n.$slots,"default")]),_:3},8,["as","as-child","class"]))}}),Hh=We({__name:"Card",props:{class:{}},setup(e){const t=e;return(n,s)=>(fe(),Qe("div",{class:Ue(B(wt)("bg-card text-card-foreground rounded-xl border shadow-sm transition-colors",t.class))},[Ws(n.$slots,"default")],2))}}),$h=["value"],Uh=We({__name:"Input",props:{class:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,s=t;return(r,o)=>(fe(),Qe("input",{value:n.modelValue,class:Ue(B(wt)("border-input bg-background flex h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none sm:text-sm","placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground","focus-visible:border-ring focus-visible:ring-ring/40 focus-visible:ring-[3px]","disabled:cursor-not-allowed disabled:opacity-50",n.class)),onInput:o[0]||(o[0]=i=>s("update:modelValue",i.target.value))},null,42,$h))}}),Wh=We({__name:"Label",props:{class:{},for:{}},setup(e){const t=e;return(n,s)=>(fe(),ze(B(Bh),{for:t.for,class:Ue(B(wt)("flex items-center gap-2 text-sm leading-none font-medium select-none",t.class))},{default:Ye(()=>[Ws(n.$slots,"default")]),_:3},8,["for","class"]))}}),Kh={class:"bg-background flex min-h-dvh flex-col"},qh={class:"flex items-center justify-end gap-1 p-3"},Jh={class:"flex flex-1 items-center justify-center px-4 pb-16"},Yh={class:"mb-6 flex flex-col items-center text-center"},Qh={class:"bg-primary text-primary-foreground mb-3 flex size-11 items-center justify-center rounded-xl"},Xh={class:"text-lg font-semibold tracking-tight"},Zh={class:"text-muted-foreground mt-1 text-sm"},em={class:"flex flex-col gap-2"},tm={key:0,class:"text-destructive text-sm"},nm={class:"text-muted-foreground mt-4 text-center text-xs"},sm=We({__name:"LoginView",setup(e){const t=Md(),n=ha(),{lang:s,setLang:r}=ih(),{isDark:o,toggle:i}=lh(),l=Ze(""),a=Ze(!1),c=Ze("");async function u(){if(!a.value){a.value=!0,c.value="";try{await Wr.login(l.value);const f=n.query.redirect;await t.replace(typeof f=="string"?f:"/")}catch(f){c.value=f instanceof hs?f.message:Te("login.failed")}finally{a.value=!1}}}return(f,h)=>(fe(),Qe("div",Kh,[le("div",qh,[de(B(xr),{variant:"ghost",size:"sm",onClick:h[0]||(h[0]=m=>B(r)(B(s)==="zh"?"en":"zh"))},{default:Ye(()=>[Sn(Le(B(s)==="zh"?"EN":"中文"),1)]),_:1}),de(B(xr),{variant:"ghost",size:"icon-sm","aria-label":B(Te)("settings.theme"),onClick:B(i)},{default:Ye(()=>[B(o)?(fe(),ze(B(Hd),{key:0,class:"size-4"})):(fe(),ze(B(Wd),{key:1,class:"size-4"}))]),_:1},8,["aria-label","onClick"])]),le("div",Jh,[de(B(Hh),{class:"animate-slide-up w-full max-w-sm p-6"},{default:Ye(()=>[le("div",Yh,[le("div",Qh,[de(B(Gd),{class:"size-5"})]),le("h1",Xh,Le(B(Te)("app.name")),1),le("p",Zh,Le(B(Te)("login.subtitle")),1)]),le("form",{class:"flex flex-col gap-3",onSubmit:Sf(u,["prevent"])},[le("div",em,[de(B(Wh),{for:"password"},{default:Ye(()=>[Sn(Le(B(Te)("login.password")),1)]),_:1}),de(B(Uh),{id:"password",modelValue:l.value,"onUpdate:modelValue":h[1]||(h[1]=m=>l.value=m),type:"password",autocomplete:"current-password",autofocus:"",disabled:a.value},null,8,["modelValue","disabled"])]),c.value?(fe(),Qe("p",tm,Le(c.value),1)):ws("",!0),de(B(xr),{type:"submit",class:"mt-1 w-full",disabled:a.value||!l.value},{default:Ye(()=>[a.value?(fe(),ze(B(Bd),{key:0,class:"size-4 animate-spin"})):ws("",!0),Sn(" "+Le(B(Te)("login.submit")),1)]),_:1},8,["disabled"])],32),le("p",nm,Le(B(Te)("login.hint")),1)]),_:1})])]))}}),Ao=Nd({history:pd(),routes:[{path:"/login",name:"login",component:sm,meta:{public:!0}},{path:"/",component:Eh,children:[{path:"",name:"dashboard",component:()=>Dn(()=>import("./DashboardView-BnrlcswN.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8]))},{path:"events",name:"events",component:()=>Dn(()=>import("./EventsView-DvVZcEec.js"),__vite__mapDeps([9,2,3,1,4,10,8,11]))},{path:"rules",name:"rules",component:()=>Dn(()=>import("./RulesView-SxOStRNP.js"),__vite__mapDeps([12,4,3,10,8,11,7]))},{path:"analyzers",name:"analyzers",component:()=>Dn(()=>import("./AnalyzersView-CHLlPReV.js"),__vite__mapDeps([13,4,3,5,6,1]))},{path:"settings",name:"settings",component:()=>Dn(()=>import("./SettingsView-CQy8Fv4M.js"),__vite__mapDeps([14,4,5,11,8]))}]},{path:"/:pathMatch(.*)*",redirect:"/"}]});Ao.beforeEach(e=>!e.meta.public&&!Vt.authenticated?{name:"login",query:e.fullPath==="/"?void 0:{redirect:e.fullPath}}:e.name==="login"&&Vt.authenticated?{name:"dashboard"}:!0);Vt.onUnauthorized(()=>{_o(),Ao.replace({name:"login"})});kf(Jp).use(Ao).mount("#app");export{qd as $,Xp as A,fn as B,fo as C,lm as D,Am as E,Pe as F,zh as G,Ws as H,bm as I,Sf as J,Us as K,oo as L,Wr as M,hs as N,Vd as O,ja as P,Bd as Q,Wh as R,io as S,Kd as T,no as U,to as V,cm as W,gm as X,om as Y,Pu as Z,Hh as _,Qe as a,Ah as a0,lh as a1,ih as a2,_o as a3,Wd as a4,Hd as a5,wm as a6,_m as a7,So as a8,ym as a9,Vh as aA,xc as aB,Ih as aa,er as ab,$e as ac,um as ad,It as ae,Rs as af,am as ag,xm as ah,Eo as ai,Fa as aj,qt as ak,Sm as al,Fs as am,vm as an,dm as ao,Nh as ap,fm as aq,im as ar,Yi as as,nc as at,mm as au,hm as av,Em as aw,it as ax,ds as ay,pm as az,le as b,st as c,We as d,Ue as e,wt as f,we as g,ze as h,ir as i,ws as j,Sn as k,Te as l,Ze as m,Ls as n,fe as o,de as p,Zp as q,Tr as r,xr as s,Le as t,B as u,Md as v,Ye as w,Nt as x,Uh as y,Yd as z}; diff --git a/web/dist/assets/index-DDyrZ70V.css b/web/dist/assets/index-DDyrZ70V.css new file mode 100644 index 0000000..fda9275 --- /dev/null +++ b/web/dist/assets/index-DDyrZ70V.css @@ -0,0 +1 @@ +/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--color-black:#000;--spacing:.25rem;--container-sm:24rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-2xl:1rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--color-background:var(--background);--color-foreground:var(--foreground);--color-muted-foreground:var(--muted-foreground);--color-border:var(--border)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--color-border)}html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}body{background-color:var(--color-background);color:var(--color-foreground);font-feature-settings:"cv02","cv03","cv04","cv11";overscroll-behavior-y:none;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){::-webkit-scrollbar-thumb{background:color-mix(in oklab,var(--color-muted-foreground) 35%,transparent)}}::-webkit-scrollbar-thumb{background-clip:content-box;border:3px solid #0000;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){::-webkit-scrollbar-thumb:hover{background:color-mix(in oklab,var(--color-muted-foreground) 55%,transparent)}}::-webkit-scrollbar-thumb:hover{background-clip:content-box}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1{top:var(--spacing)}.top-1\/2{top:50%}.right-2{right:calc(var(--spacing) * 2)}.bottom-0{bottom:0}.left-0{left:0}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-100{z-index:100}.-m-1{margin:calc(var(--spacing) * -1)}.mx-auto{margin-inline:auto}.my-3{margin-block:calc(var(--spacing) * 3)}.-mt-1{margin-top:calc(var(--spacing) * -1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.-mr-1{margin-right:calc(var(--spacing) * -1)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.field-sizing-content{field-sizing:content}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-11{width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.h-1{height:var(--spacing)}.h-2{height:calc(var(--spacing) * 2)}.h-5{height:calc(var(--spacing) * 5)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-20{height:calc(var(--spacing) * 20)}.h-24{height:calc(var(--spacing) * 24)}.h-36{height:calc(var(--spacing) * 36)}.h-\[60vh\]{height:60vh}.h-full{height:100%}.h-px{height:1px}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-\[92vh\]{max-height:92vh}.min-h-0{min-height:0}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-20{min-height:calc(var(--spacing) * 20)}.min-h-28{min-height:calc(var(--spacing) * 28)}.min-h-dvh{min-height:100dvh}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-28{width:calc(var(--spacing) * 28)}.w-36{width:calc(var(--spacing) * 36)}.w-56{width:calc(var(--spacing) * 56)}.w-\[var\(--reka-combobox-trigger-width\)\]{width:var(--reka-combobox-trigger-width)}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-3xl{max-width:var(--container-3xl)}.max-w-32{max-width:calc(var(--spacing) * 32)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:0}.min-w-24{min-width:calc(var(--spacing) * 24)}.min-w-\[var\(--reka-select-trigger-width\)\]{min-width:var(--reka-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.basis-32{flex-basis:calc(var(--spacing) * 32)}.basis-45{flex-basis:calc(var(--spacing) * 45)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-2{--tw-translate-y:calc(var(--spacing) * -2);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-fade-in{animation:.18s ease-out fade-in}.animate-pulse{animation:var(--animate-pulse)}.animate-pulse-dot{animation:1.8s ease-in-out infinite pulse-dot}.animate-slide-up{animation:.22s cubic-bezier(.32,.72,0,1) slide-up}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-pan-y{--tw-pan-y:pan-y;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.resize-y{resize:vertical}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1{row-gap:var(--spacing)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-\[5px\]{border-radius:5px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-allow\/25{border-color:var(--allow)}@supports (color:color-mix(in lab,red,red)){.border-allow\/25{border-color:color-mix(in oklab,var(--allow) 25%,transparent)}}.border-allow\/30{border-color:var(--allow)}@supports (color:color-mix(in lab,red,red)){.border-allow\/30{border-color:color-mix(in oklab,var(--allow) 30%,transparent)}}.border-allow\/40{border-color:var(--allow)}@supports (color:color-mix(in lab,red,red)){.border-allow\/40{border-color:color-mix(in oklab,var(--allow) 40%,transparent)}}.border-block\/25{border-color:var(--block)}@supports (color:color-mix(in lab,red,red)){.border-block\/25{border-color:color-mix(in oklab,var(--block) 25%,transparent)}}.border-block\/30{border-color:var(--block)}@supports (color:color-mix(in lab,red,red)){.border-block\/30{border-color:color-mix(in oklab,var(--block) 30%,transparent)}}.border-block\/40{border-color:var(--block)}@supports (color:color-mix(in lab,red,red)){.border-block\/40{border-color:color-mix(in oklab,var(--block) 40%,transparent)}}.border-destructive\/40{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/40{border-color:color-mix(in oklab,var(--destructive) 40%,transparent)}}.border-destructive\/50{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/50{border-color:color-mix(in oklab,var(--destructive) 50%,transparent)}}.border-drop\/25{border-color:var(--drop)}@supports (color:color-mix(in lab,red,red)){.border-drop\/25{border-color:color-mix(in oklab,var(--drop) 25%,transparent)}}.border-drop\/30{border-color:var(--drop)}@supports (color:color-mix(in lab,red,red)){.border-drop\/30{border-color:color-mix(in oklab,var(--drop) 30%,transparent)}}.border-drop\/40{border-color:var(--drop)}@supports (color:color-mix(in lab,red,red)){.border-drop\/40{border-color:color-mix(in oklab,var(--drop) 40%,transparent)}}.border-input{border-color:var(--input)}.border-log\/25{border-color:var(--log)}@supports (color:color-mix(in lab,red,red)){.border-log\/25{border-color:color-mix(in oklab,var(--log) 25%,transparent)}}.border-modify\/25{border-color:var(--modify)}@supports (color:color-mix(in lab,red,red)){.border-modify\/25{border-color:color-mix(in oklab,var(--modify) 25%,transparent)}}.border-primary\/40{border-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.border-primary\/40{border-color:color-mix(in oklab,var(--primary) 40%,transparent)}}.border-tcp\/25{border-color:var(--tcp)}@supports (color:color-mix(in lab,red,red)){.border-tcp\/25{border-color:color-mix(in oklab,var(--tcp) 25%,transparent)}}.border-transparent{border-color:#0000}.border-udp\/25{border-color:var(--udp)}@supports (color:color-mix(in lab,red,red)){.border-udp\/25{border-color:color-mix(in oklab,var(--udp) 25%,transparent)}}.bg-accent{background-color:var(--accent)}.bg-allow,.bg-allow\/10{background-color:var(--allow)}@supports (color:color-mix(in lab,red,red)){.bg-allow\/10{background-color:color-mix(in oklab,var(--allow) 10%,transparent)}}.bg-allow\/12{background-color:var(--allow)}@supports (color:color-mix(in lab,red,red)){.bg-allow\/12{background-color:color-mix(in oklab,var(--allow) 12%,transparent)}}.bg-allow\/15{background-color:var(--allow)}@supports (color:color-mix(in lab,red,red)){.bg-allow\/15{background-color:color-mix(in oklab,var(--allow) 15%,transparent)}}.bg-background,.bg-background\/85{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/85{background-color:color-mix(in oklab,var(--background) 85%,transparent)}}.bg-background\/90{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/90{background-color:color-mix(in oklab,var(--background) 90%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-block,.bg-block\/10{background-color:var(--block)}@supports (color:color-mix(in lab,red,red)){.bg-block\/10{background-color:color-mix(in oklab,var(--block) 10%,transparent)}}.bg-block\/12{background-color:var(--block)}@supports (color:color-mix(in lab,red,red)){.bg-block\/12{background-color:color-mix(in oklab,var(--block) 12%,transparent)}}.bg-block\/15{background-color:var(--block)}@supports (color:color-mix(in lab,red,red)){.bg-block\/15{background-color:color-mix(in oklab,var(--block) 15%,transparent)}}.bg-border{background-color:var(--border)}.bg-card,.bg-card\/40{background-color:var(--card)}@supports (color:color-mix(in lab,red,red)){.bg-card\/40{background-color:color-mix(in oklab,var(--card) 40%,transparent)}}.bg-destructive,.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--destructive) 10%,transparent)}}.bg-drop,.bg-drop\/10{background-color:var(--drop)}@supports (color:color-mix(in lab,red,red)){.bg-drop\/10{background-color:color-mix(in oklab,var(--drop) 10%,transparent)}}.bg-drop\/12{background-color:var(--drop)}@supports (color:color-mix(in lab,red,red)){.bg-drop\/12{background-color:color-mix(in oklab,var(--drop) 12%,transparent)}}.bg-log\/12{background-color:var(--log)}@supports (color:color-mix(in lab,red,red)){.bg-log\/12{background-color:color-mix(in oklab,var(--log) 12%,transparent)}}.bg-modify,.bg-modify\/12{background-color:var(--modify)}@supports (color:color-mix(in lab,red,red)){.bg-modify\/12{background-color:color-mix(in oklab,var(--modify) 12%,transparent)}}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\/25{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/25{background-color:color-mix(in oklab,var(--muted-foreground) 25%,transparent)}}.bg-muted\/40{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/40{background-color:color-mix(in oklab,var(--muted) 40%,transparent)}}.bg-muted\/60{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/60{background-color:color-mix(in oklab,var(--muted) 60%,transparent)}}.bg-popover{background-color:var(--popover)}.bg-primary,.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--primary) 10%,transparent)}}.bg-primary\/15{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/15{background-color:color-mix(in oklab,var(--primary) 15%,transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-tcp,.bg-tcp\/12{background-color:var(--tcp)}@supports (color:color-mix(in lab,red,red)){.bg-tcp\/12{background-color:color-mix(in oklab,var(--tcp) 12%,transparent)}}.bg-transparent{background-color:#0000}.bg-udp,.bg-udp\/12{background-color:var(--udp)}@supports (color:color-mix(in lab,red,red)){.bg-udp\/12{background-color:color-mix(in oklab,var(--udp) 12%,transparent)}}.fill-tcp\/45{fill:var(--tcp)}@supports (color:color-mix(in lab,red,red)){.fill-tcp\/45{fill:color-mix(in oklab,var(--tcp) 45%,transparent)}}.fill-udp\/25{fill:var(--udp)}@supports (color:color-mix(in lab,red,red)){.fill-udp\/25{fill:color-mix(in oklab,var(--udp) 25%,transparent)}}.stroke-block{stroke:var(--block)}.stroke-border{stroke:var(--border)}.stroke-foreground\/40{stroke:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.stroke-foreground\/40{stroke:color-mix(in oklab,var(--foreground) 40%,transparent)}}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.safe-top{padding-top:max(env(safe-area-inset-top),0px)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.pb-24{padding-bottom:calc(var(--spacing) * 24)}.pb-\[max\(1rem\,env\(safe-area-inset-bottom\)\)\]{padding-bottom:max(1rem,env(safe-area-inset-bottom))}.safe-bottom{padding-bottom:max(env(safe-area-inset-bottom),0px)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent-foreground{color:var(--accent-foreground)}.text-allow{color:var(--allow)}.text-block{color:var(--block)}.text-card-foreground{color:var(--card-foreground)}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-drop{color:var(--drop)}.text-foreground{color:var(--foreground)}.text-log{color:var(--log)}.text-modify{color:var(--modify)}.text-muted-foreground,.text-muted-foreground\/60{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/60{color:color-mix(in oklab,var(--muted-foreground) 60%,transparent)}}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-tcp{color:var(--tcp)}.text-udp{color:var(--udp)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\,background-color\]{transition-property:color,box-shadow,background-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.focus-within\:border-ring:focus-within{border-color:var(--ring)}.focus-within\:ring-\[3px\]:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\:ring-ring\/40:focus-within{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-within\:ring-ring\/40:focus-within{--tw-ring-color:color-mix(in oklab, var(--ring) 40%, transparent)}}@media(hover:hover){.hover\:bg-accent:hover,.hover\:bg-accent\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/50:hover{background-color:color-mix(in oklab,var(--accent) 50%,transparent)}}.hover\:bg-accent\/60:hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/60:hover{background-color:color-mix(in oklab,var(--accent) 60%,transparent)}}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive) 90%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary) 90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary) 80%,transparent)}}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-destructive:hover{color:var(--destructive)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/30:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/30:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 30%, transparent)}}.focus-visible\:ring-ring\/40:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 40%, transparent)}}.active\:scale-\[0\.98\]:active{scale:.98}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing) * 2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing) * 3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing) * 4)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[highlighted\]\:bg-accent[data-highlighted]{background-color:var(--accent)}.data-\[highlighted\]\:text-accent-foreground[data-highlighted]{color:var(--accent-foreground)}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=unchecked\]\:translate-x-0\.5[data-state=unchecked]{--tw-translate-x:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}@media(min-width:40rem){.sm\:top-1\/2{top:50%}.sm\:top-auto{top:auto}.sm\:right-0{right:0}.sm\:bottom-0{bottom:0}.sm\:bottom-auto{bottom:auto}.sm\:left-1\/2{left:50%}.sm\:left-auto{left:auto}.sm\:mb-6{margin-bottom:calc(var(--spacing) * 6)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:inline-flex{display:inline-flex}.sm\:h-44{height:calc(var(--spacing) * 44)}.sm\:max-h-\[85vh\]{max-height:85vh}.sm\:w-28{width:calc(var(--spacing) * 28)}.sm\:w-32{width:calc(var(--spacing) * 32)}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:flex-none{flex:none}.sm\:basis-40{flex-basis:calc(var(--spacing) * 40)}.sm\:basis-56{flex-basis:calc(var(--spacing) * 56)}.sm\:-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.sm\:-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.sm\:translate-y-2{--tw-translate-y:calc(var(--spacing) * 2);translate:var(--tw-translate-x) var(--tw-translate-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:justify-end{justify-content:flex-end}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:rounded-xl{border-radius:calc(var(--radius) + 4px)}.sm\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.sm\:p-4{padding:calc(var(--spacing) * 4)}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.sm\:px-5{padding-inline:calc(var(--spacing) * 5)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:pt-5{padding-top:calc(var(--spacing) * 5)}.sm\:pt-6{padding-top:calc(var(--spacing) * 6)}.sm\:pb-5{padding-bottom:calc(var(--spacing) * 5)}.sm\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.sm\:text-\[13px\]{font-size:13px}}@media(min-width:48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:pb-8{padding-bottom:calc(var(--spacing) * 8)}.md\:pl-56{padding-left:calc(var(--spacing) * 56)}}@media(min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:w-60{width:calc(var(--spacing) * 60)}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:pl-60{padding-left:calc(var(--spacing) * 60)}}@media(min-width:80rem){.xl\:col-span-1{grid-column:span 1/span 1}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-3\.5 svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}}:root{--radius:.65rem;--background:oklch(100% 0 0);--foreground:oklch(14.1% .005 285.823);--card:oklch(100% 0 0);--card-foreground:oklch(14.1% .005 285.823);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.1% .005 285.823);--primary:oklch(21% .006 285.885);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(96.7% .001 286.375);--secondary-foreground:oklch(21% .006 285.885);--muted:oklch(96.7% .001 286.375);--muted-foreground:oklch(55.2% .016 285.938);--accent:oklch(96.7% .001 286.375);--accent-foreground:oklch(21% .006 285.885);--destructive:oklch(57.7% .245 27.325);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(92% .004 286.32);--input:oklch(92% .004 286.32);--ring:oklch(70.5% .015 286.067);--allow:oklch(63% .14 155);--block:oklch(58% .22 27);--drop:oklch(72% .16 70);--modify:oklch(60% .16 255);--log:oklch(62% .11 215);--tcp:oklch(62% .15 265);--udp:oklch(68% .13 190)}.dark{--background:oklch(14.1% .005 285.823);--foreground:oklch(98.5% 0 0);--card:oklch(19% .006 285.885);--card-foreground:oklch(98.5% 0 0);--popover:oklch(21% .006 285.885);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92% .004 286.32);--primary-foreground:oklch(21% .006 285.885);--secondary:oklch(27.4% .006 286.033);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(27.4% .006 286.033);--muted-foreground:oklch(70.5% .015 286.067);--accent:oklch(27.4% .006 286.033);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.2% .016 285.938);--allow:oklch(72% .16 155);--block:oklch(68% .2 22);--drop:oklch(79% .15 75);--modify:oklch(70% .15 255);--log:oklch(72% .11 215);--tcp:oklch(70% .15 265);--udp:oklch(76% .12 190)}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes slide-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-in-right{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes slide-in-left{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.35}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/web/dist/index.html b/web/dist/index.html index 5d36502..f896173 100644 --- a/web/dist/index.html +++ b/web/dist/index.html @@ -24,8 +24,8 @@ } catch (e) {} })() - - + + diff --git a/web/frontend/src/components/rule/ConditionRow.vue b/web/frontend/src/components/rule/ConditionRow.vue new file mode 100644 index 0000000..4320ac8 --- /dev/null +++ b/web/frontend/src/components/rule/ConditionRow.vue @@ -0,0 +1,236 @@ + + + + + + + + + {{ t('rules.builder.not') }} + + + + + + + + + + {{ value }} + + + + + + + {{ name }} + + + + + + + – + + + + + + + + + + + {{ hint }} + + + + diff --git a/web/frontend/src/components/rule/GeoPicker.vue b/web/frontend/src/components/rule/GeoPicker.vue new file mode 100644 index 0000000..c738d2a --- /dev/null +++ b/web/frontend/src/components/rule/GeoPicker.vue @@ -0,0 +1,199 @@ + + + + + + + + {{ t('rules.geo.unavailable') }} + ({{ errorMessage }}) + + + + + + + {{ labelOf(value) }} + + + + + + + {{ t('rules.geo.loading') }} + + + + + + + + + + + + + + + {{ t('common.empty') }} + + + {{ option.flag }} + {{ option.label }} + + {{ option.hint }} + + + + + + + + + + diff --git a/web/frontend/src/components/rule/RuleBuilder.vue b/web/frontend/src/components/rule/RuleBuilder.vue new file mode 100644 index 0000000..72ee21e --- /dev/null +++ b/web/frontend/src/components/rule/RuleBuilder.vue @@ -0,0 +1,96 @@ + + + + + + {{ t('rules.builder.match') }} + + + {{ t(`rules.builder.${mode}`) }} + + + {{ t('rules.builder.matchSuffix') }} + + + + + + + + {{ t(`rules.builder.${props.modelValue.mode}`) }} + + + + + + + + + + {{ t('rules.builder.addCondition') }} + + + + + {{ t('rules.builder.preview') }} + + + {{ expression || t('rules.builder.empty') }} + + + + diff --git a/web/frontend/src/components/ui/TagsInput.vue b/web/frontend/src/components/ui/TagsInput.vue new file mode 100644 index 0000000..44d72f0 --- /dev/null +++ b/web/frontend/src/components/ui/TagsInput.vue @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + {{ message }} + + diff --git a/web/frontend/src/components/ui/index.ts b/web/frontend/src/components/ui/index.ts index 45af5ba..75a2fbe 100644 --- a/web/frontend/src/components/ui/index.ts +++ b/web/frontend/src/components/ui/index.ts @@ -13,6 +13,7 @@ export { default as Separator } from './Separator.vue' export { default as Skeleton } from './Skeleton.vue' export { default as Switch } from './Switch.vue' export { default as Tabs } from './Tabs.vue' +export { default as TagsInput } from './TagsInput.vue' export { default as TabsContent } from './TabsContent.vue' export { default as TabsList } from './TabsList.vue' export { default as TabsTrigger } from './TabsTrigger.vue' diff --git a/web/frontend/src/composables/useGeo.ts b/web/frontend/src/composables/useGeo.ts new file mode 100644 index 0000000..fccd360 --- /dev/null +++ b/web/frontend/src/composables/useGeo.ts @@ -0,0 +1,35 @@ +import { ref } from 'vue' + +import { api } from '@/lib/api' +import type { GeoData } from '@/lib/types' + +const geo = ref(null) +const error = ref<{ ip: string; site: string }>({ ip: '', site: '' }) +const loading = ref(false) +let pending: Promise | null = null + +/** Loads the geo database listing once and shares it across components. */ +async function load(force = false): Promise { + if (geo.value && !force) return + if (pending) return pending + loading.value = true + pending = (async () => { + try { + const data = await api.geo(force) + geo.value = data + error.value = { ip: data.ipError ?? '', site: data.siteError ?? '' } + } catch (e) { + const message = e instanceof Error ? e.message : String(e) + error.value = { ip: message, site: message } + geo.value = { ip: [], site: [] } + } finally { + loading.value = false + pending = null + } + })() + return pending +} + +export function useGeo() { + return { geo, error, loading, load } +} diff --git a/web/frontend/src/i18n/en.ts b/web/frontend/src/i18n/en.ts index ccdab97..7c522e8 100644 --- a/web/frontend/src/i18n/en.ts +++ b/web/frontend/src/i18n/en.ts @@ -127,8 +127,85 @@ export default { moveDown: 'Move down', empty: 'No rules yet. Everything is accepted.', nameRequired: 'A name is required', - exprRequired: 'An expression is required', + exprRequired: 'Add at least one condition', hint: 'Saving writes the rule file and hot reloads the engine.', + conditions: 'Conditions', + exprHint: 'Any expr expression works here, the engine validates it when you save.', + invalidJson: 'Modifier arguments must be valid JSON', + invalidCidr: 'Not a valid CIDR, e.g. 10.0.0.0/8', + invalidRegex: 'Not a valid regular expression', + invalidGeo: 'Use letters, digits, - and @', + invalidIp: 'Not a valid IP address', + invalidPort: 'Port must be between 0 and 65535', + invalidDomain: 'Not a valid domain pattern', + starHint: 'Contains *: switch the operator to "matches wildcard"', + valuePlaceholder: 'Type a value and press Enter', + builder: { + tab: 'Builder', + match: 'Match', + matchSuffix: 'of the following conditions', + and: 'all', + or: 'any', + addCondition: 'Add condition', + preview: 'Generated expression', + empty: 'Fill in a condition to see the expression', + not: 'NOT', + field: 'Field', + operator: 'Operator', + notParsed: + 'This rule uses an expression the builder cannot represent, so it is shown as raw expr. Editing it in the builder would change its meaning.', + }, + group: { + basic: 'Connection', + domain: 'Domain', + http: 'HTTP', + protocol: 'Protocol', + }, + field: { + proto: 'Transport protocol', + ip_dst: 'Destination IP', + ip_src: 'Source IP', + port_dst: 'Destination port', + port_src: 'Source port', + tls_sni: 'TLS SNI', + quic_sni: 'QUIC SNI', + dns_name: 'DNS query name', + http_host: 'HTTP Host', + http_path: 'HTTP path', + http_method: 'HTTP method', + http_ua: 'User-Agent', + analyzer: 'Detected protocol', + }, + op: { + is: 'is', + subdomain: 'domain or subdomain of', + wildcard: 'matches wildcard', + contains: 'contains', + startsWith: 'starts with', + endsWith: 'ends with', + regex: 'matches regex', + geosite: 'in GeoSite category', + cidr: 'in CIDR', + geoip: 'in GeoIP country', + range: 'in range', + detected: 'is', + }, + wildcard: { + exact: 'exact match', + suffix: 'ends with {value}', + prefix: 'starts with {value}', + contains: 'contains {value}', + regex: 'regex {value}', + any: 'any non-empty value', + }, + geo: { + attribute: 'attribute', + loading: 'Loading the geo database, this can take a moment the first time…', + searchCountry: 'Search country or group…', + searchSite: 'Search category…', + unavailable: + 'The geo database could not be read, enter the codes manually (e.g. cn, us).', + }, }, analyzers: { title: 'Analyzers', diff --git a/web/frontend/src/i18n/zh.ts b/web/frontend/src/i18n/zh.ts index 71d66ae..4270091 100644 --- a/web/frontend/src/i18n/zh.ts +++ b/web/frontend/src/i18n/zh.ts @@ -127,8 +127,83 @@ export default { moveDown: '下移', empty: '暂无规则,所有流量都会放行。', nameRequired: '请填写名称', - exprRequired: '请填写表达式', + exprRequired: '请至少添加一个条件', hint: '保存后将写入规则文件并热加载引擎。', + conditions: '匹配条件', + exprHint: '这里可以写任意 expr 表达式,保存时由引擎校验。', + invalidJson: '修改器参数必须是合法 JSON', + invalidCidr: '不是合法的 CIDR,例如 10.0.0.0/8', + invalidRegex: '不是合法的正则表达式', + invalidGeo: '只能包含字母、数字、- 和 @', + invalidIp: '不是合法的 IP 地址', + invalidPort: '端口需在 0-65535 之间', + invalidDomain: '不是合法的域名或通配符', + starHint: '包含 *,如需通配符请把条件改成「通配符匹配」', + valuePlaceholder: '输入后按回车添加', + builder: { + tab: '可视化构建', + match: '满足以下条件的', + matchSuffix: '项', + and: '全部', + or: '任一', + addCondition: '添加条件', + preview: '生成的表达式', + empty: '填写条件后这里会显示表达式', + not: '取反', + field: '字段', + operator: '条件', + notParsed: '该规则的表达式无法用可视化构建器表示,已切换到表达式模式;在构建器中编辑会改变其语义。', + }, + group: { + basic: '连接', + domain: '域名', + http: 'HTTP', + protocol: '协议', + }, + field: { + proto: '传输层协议', + ip_dst: '目标 IP', + ip_src: '来源 IP', + port_dst: '目标端口', + port_src: '来源端口', + tls_sni: 'TLS SNI', + quic_sni: 'QUIC SNI', + dns_name: 'DNS 查询域名', + http_host: 'HTTP Host', + http_path: 'HTTP 路径', + http_method: 'HTTP 方法', + http_ua: 'User-Agent', + analyzer: '识别到的协议', + }, + op: { + is: '等于', + subdomain: '是域名或其子域名', + wildcard: '通配符匹配', + contains: '包含', + startsWith: '开头是', + endsWith: '结尾是', + regex: '正则匹配', + geosite: '属于 GeoSite 分类', + cidr: '属于网段', + geoip: '属于 GeoIP 国家/地区', + range: '在区间内', + detected: '是', + }, + wildcard: { + exact: '精确匹配', + suffix: '以 {value} 结尾', + prefix: '以 {value} 开头', + contains: '包含 {value}', + regex: '正则 {value}', + any: '任意非空值', + }, + geo: { + attribute: '属性', + loading: '正在加载 geo 数据库,首次加载可能需要一点时间…', + searchCountry: '搜索国家/地区或分组…', + searchSite: '搜索分类…', + unavailable: '无法读取 geo 数据库,请手动输入代码(如 cn、us)。', + }, }, analyzers: { title: '解析器', diff --git a/web/frontend/src/lib/api.ts b/web/frontend/src/lib/api.ts index 7c72591..bf9b4c4 100644 --- a/web/frontend/src/lib/api.ts +++ b/web/frontend/src/lib/api.ts @@ -1,4 +1,5 @@ import type { + GeoData, Info, LiveEvent, MetaInfo, @@ -96,6 +97,7 @@ export const api = { metrics: () => request('/metrics'), events: (limit = 200) => request<{ events: LiveEvent[] }>(`/events?limit=${limit}`), rules: () => request('/rules'), + geo: (reload = false) => request(`/geo${reload ? '?reload=1' : ''}`), saveRules: (payload: { raw?: string; rules?: Rule[] }) => request('/rules', { method: 'PUT', body: JSON.stringify(payload) }), diff --git a/web/frontend/src/lib/geo.ts b/web/frontend/src/lib/geo.ts new file mode 100644 index 0000000..2f8d9e2 --- /dev/null +++ b/web/frontend/src/lib/geo.ts @@ -0,0 +1,41 @@ +/** Helpers for displaying geo database keys. */ + +const displayNames = new Map() + +function names(lang: string): Intl.DisplayNames | null { + const locale = lang === 'zh' ? 'zh-CN' : 'en' + if (!displayNames.has(locale)) { + try { + displayNames.set(locale, new Intl.DisplayNames([locale], { type: 'region' })) + } catch { + return null + } + } + return displayNames.get(locale) ?? null +} + +/** + * Localized country name for a two letter code, or null when the code is not a + * country. GeoIP databases also contain provider groups such as "cloudflare". + */ +export function regionName(code: string, lang: string): string | null { + if (!/^[a-z]{2}$/i.test(code)) return null + const upper = code.toUpperCase() + try { + const name = names(lang)?.of(upper) + return name && name !== upper ? name : null + } catch { + return null + } +} + +/** Flag emoji for a two letter country code, empty for anything else. */ +export function flagOf(code: string): string { + if (!/^[a-z]{2}$/i.test(code)) return '' + const base = 0x1f1e6 + const upper = code.toUpperCase() + return String.fromCodePoint( + base + upper.charCodeAt(0) - 65, + base + upper.charCodeAt(1) - 65, + ) +} diff --git a/web/frontend/src/lib/rule/compile.ts b/web/frontend/src/lib/rule/compile.ts new file mode 100644 index 0000000..eeed937 --- /dev/null +++ b/web/frontend/src/lib/rule/compile.ts @@ -0,0 +1,113 @@ +import { FIELD_MAP, type FieldDef, type OperatorId } from './fields' +import type { Condition, RuleBuilderState } from './types' + +/** Quotes a value as an expr string literal. */ +export function quote(value: string): string { + return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"` +} + +const REGEX_SPECIALS = /[.+?^${}()|[\]\\]/g + +/** Converts a `*.example.com` style pattern into an anchored regular expression. */ +export function wildcardToRegex(pattern: string): string { + return `^${pattern.replace(REGEX_SPECIALS, '\\$&').replace(/\*/g, '.*')}$` +} + +export interface WildcardExplain { + kind: 'exact' | 'suffix' | 'prefix' | 'contains' | 'regex' | 'any' + /** The meaningful part of the pattern, e.g. ".example.com" for "*.example.com". */ + value: string +} + +/** Describes how a wildcard pattern will be matched, for the inline hint. */ +export function explainWildcard(pattern: string): WildcardExplain { + const p = pattern.trim() + if (p === '*') return { kind: 'any', value: '' } + if (!p.includes('*')) return { kind: 'exact', value: p } + const starts = p.startsWith('*') + const ends = p.endsWith('*') + const core = p.replace(/^\*/, '').replace(/\*$/, '') + if (core.includes('*')) return { kind: 'regex', value: wildcardToRegex(p) } + if (starts && ends) return { kind: 'contains', value: core } + if (starts) return { kind: 'suffix', value: core } + if (ends) return { kind: 'prefix', value: core } + return { kind: 'regex', value: wildcardToRegex(p) } +} + +function wildcardTerm(subject: string, pattern: string): string { + const info = explainWildcard(pattern) + switch (info.kind) { + case 'any': + return `${subject} != ""` + case 'exact': + return `${subject} == ${quote(info.value)}` + case 'suffix': + return `${subject} endsWith ${quote(info.value)}` + case 'prefix': + return `${subject} startsWith ${quote(info.value)}` + case 'contains': + return `${subject} contains ${quote(info.value)}` + case 'regex': + return `${subject} matches ${quote(info.value)}` + } +} + +/** Builds the expression for one value of a condition. */ +function term(field: FieldDef, op: OperatorId, subject: string, value: string): string { + const v = value.trim() + switch (op) { + case 'is': + return field.type === 'port' ? `${subject} == ${v}` : `${subject} == ${quote(v)}` + case 'subdomain': + return `(${subject} == ${quote(v)} || ${subject} endsWith ${quote('.' + v)})` + case 'wildcard': + return wildcardTerm(subject, v) + case 'contains': + case 'startsWith': + case 'endsWith': + return `${subject} ${op} ${quote(v)}` + case 'regex': + return `${subject} matches ${quote(v)}` + case 'geosite': + return `geosite(${subject}, ${quote(v.toLowerCase())})` + case 'cidr': + return `cidr(${subject}, ${quote(v)})` + case 'geoip': + return `geoip(${subject}, ${quote(v.toLowerCase())})` + case 'detected': + return `${v} != nil` + case 'range': + return '' + } +} + +/** Compiles a single condition into an expression, or "" when incomplete. */ +export function compileCondition(condition: Condition): string { + const field = FIELD_MAP[condition.field] + if (!field) return '' + const values = condition.values.map((v) => v.trim()).filter(Boolean) + + let body: string + if (condition.op === 'range') { + const [from, to] = condition.values + if (!from?.trim() || !to?.trim()) return '' + body = `(${field.expr} >= ${from.trim()} && ${field.expr} <= ${to.trim()})` + } else { + if (values.length === 0) return '' + const subject = field.iter ? (field.item as string) : (field.expr as string) + const terms = values.map((v) => term(field, condition.op, subject, v)) + const joined = terms.length > 1 ? `(${terms.join(' || ')})` : terms[0] + body = field.iter ? `any(${field.iter}, {${joined}})` : joined + } + + if (!condition.negate) return body + return body.startsWith('(') && body.endsWith(')') ? `!${body}` : `!(${body})` +} + +/** Compiles the whole builder state into a rule expression. */ +export function compileRule(state: RuleBuilderState): string { + const parts = state.conditions.map(compileCondition).filter(Boolean) + if (parts.length === 0) return '' + if (parts.length === 1) return parts[0] + return parts.join(state.mode === 'and' ? ' && ' : ' || ') +} diff --git a/web/frontend/src/lib/rule/fields.ts b/web/frontend/src/lib/rule/fields.ts new file mode 100644 index 0000000..cbcdd7d --- /dev/null +++ b/web/frontend/src/lib/rule/fields.ts @@ -0,0 +1,126 @@ +/** + * Catalog of the fields and operators the visual rule builder offers. + * + * Every field maps to a snippet of the expr expression language used by the + * engine. Optional chaining (`a?.b`) keeps rules safe when an analyzer did not + * produce any property for a stream, and `string(...)` turns a missing value + * into an empty string instead of an error. + */ + +export type ValueType = 'proto' | 'ip' | 'port' | 'domain' | 'text' | 'analyzer' + +export type OperatorId = + | 'is' + | 'subdomain' + | 'wildcard' + | 'contains' + | 'startsWith' + | 'endsWith' + | 'regex' + | 'geosite' + | 'cidr' + | 'geoip' + | 'range' + | 'detected' + +export interface FieldDef { + key: string + /** Group used to organise the field picker. */ + group: 'basic' | 'domain' | 'http' | 'protocol' + type: ValueType + /** Expression evaluating to the value, already coerced to a string. */ + expr?: string + /** Analyzer this field depends on, shown as a hint in the UI. */ + analyzer?: string + /** + * Set for fields that live in an array: `iter` is the list expression and + * `item` the expression of a single element inside the predicate. + */ + iter?: string + item?: string +} + +export const FIELDS: FieldDef[] = [ + { key: 'proto', group: 'basic', type: 'proto', expr: 'proto' }, + { key: 'ip.dst', group: 'basic', type: 'ip', expr: 'ip.dst' }, + { key: 'ip.src', group: 'basic', type: 'ip', expr: 'ip.src' }, + { key: 'port.dst', group: 'basic', type: 'port', expr: 'port.dst' }, + { key: 'port.src', group: 'basic', type: 'port', expr: 'port.src' }, + + { key: 'tls.sni', group: 'domain', type: 'domain', expr: 'string(tls?.req?.sni)', analyzer: 'tls' }, + { + key: 'quic.sni', + group: 'domain', + type: 'domain', + expr: 'string(quic?.req?.sni)', + analyzer: 'quic', + }, + { + key: 'dns.name', + group: 'domain', + type: 'domain', + analyzer: 'dns', + iter: 'dns?.questions ?? []', + item: 'string(.name)', + }, + + { + key: 'http.host', + group: 'http', + type: 'domain', + expr: 'string(http?.req?.headers?.host)', + analyzer: 'http', + }, + { key: 'http.path', group: 'http', type: 'text', expr: 'string(http?.req?.path)', analyzer: 'http' }, + { + key: 'http.method', + group: 'http', + type: 'text', + expr: 'string(http?.req?.method)', + analyzer: 'http', + }, + { + key: 'http.ua', + group: 'http', + type: 'text', + expr: 'string(get(http?.req?.headers, "user-agent"))', + analyzer: 'http', + }, + + { key: 'analyzer', group: 'protocol', type: 'analyzer' }, +] + +export const FIELD_MAP: Record = Object.fromEntries( + FIELDS.map((f) => [f.key, f]), +) + +/** Operators offered for each value type, in menu order. */ +export const OPERATORS: Record = { + proto: ['is'], + ip: ['cidr', 'geoip', 'is'], + port: ['is', 'range'], + domain: ['subdomain', 'wildcard', 'is', 'contains', 'endsWith', 'startsWith', 'regex', 'geosite'], + text: ['contains', 'is', 'startsWith', 'endsWith', 'regex'], + analyzer: ['detected'], +} + +/** Operators whose value is picked from a list rather than typed. */ +export const PICKER_OPERATORS: Partial> = { + geoip: 'geoip', + geosite: 'geosite', +} + +export const PROTO_VALUES = ['tcp', 'udp'] + +/** `range` takes exactly two values (from and to); everything else is a list. */ +export function isRangeOperator(op: OperatorId): boolean { + return op === 'range' +} + +export function defaultOperator(type: ValueType): OperatorId { + return OPERATORS[type][0] +} + +export function operatorsFor(field: FieldDef): OperatorId[] { + return OPERATORS[field.type] +} diff --git a/web/frontend/src/lib/rule/parse.ts b/web/frontend/src/lib/rule/parse.ts new file mode 100644 index 0000000..ad72ac1 --- /dev/null +++ b/web/frontend/src/lib/rule/parse.ts @@ -0,0 +1,322 @@ +import { FIELDS, type FieldDef, type OperatorId } from './fields' +import { newCondition } from './types' +import type { Condition, RuleBuilderState } from './types' + +/** + * Best-effort conversion of an expression back into builder state. + * + * It understands the canonical shapes produced by compile.ts, which covers + * every rule created through the builder. Hand written expressions that use + * anything else simply return null, and the UI falls back to the expression + * editor instead of silently rewriting them. + */ +export function parseRule(expr: string): RuleBuilderState | null { + const source = expr.trim() + if (!source) return null + + let mode: 'and' | 'or' = 'and' + let parts = splitTop(source, '&&') + if (parts.length === 1) { + const or = splitTop(source, '||') + if (or.length > 1) { + mode = 'or' + parts = or + } + } + + const conditions: Condition[] = [] + for (const part of parts) { + const condition = parseCondition(part) + if (!condition) return null + conditions.push(condition) + } + return { mode, conditions } +} + +function parseCondition(input: string): Condition | null { + let source = input.trim() + let negate = false + if (source.startsWith('!')) { + negate = true + source = source.slice(1).trim() + } + + // A single value, including the parenthesised "domain or subdomain" form. + const single = parseTerm(source) + if (single) { + return newCondition({ field: single.field.key, op: single.op, negate, values: [single.value] }) + } + + const body = unwrap(source) + + // Array fields: any(, {}) + const anyMatch = matchCall(body, 'any') + if (anyMatch !== null) { + const [iter, closure] = splitTop(anyMatch, ',').map((s) => s.trim()) + if (!closure?.startsWith('{') || !closure.endsWith('}')) return null + const field = FIELDS.find((f) => f.iter === iter) + if (!field) return null + return finish(field, closure.slice(1, -1).trim(), negate, field.item as string) + } + + // Port range: (port.dst >= 1 && port.dst <= 2) + const range = splitTop(body, '&&') + if (range.length === 2) { + const from = /^(\S+)\s*>=\s*(\d+)$/.exec(range[0].trim()) + const to = /^(\S+)\s*<=\s*(\d+)$/.exec(range[1].trim()) + if (from && to && from[1] === to[1]) { + const field = FIELDS.find((f) => f.expr === from[1] && f.type === 'port') + if (!field) return null + return newCondition({ field: field.key, op: 'range', negate, values: [from[2], to[2]] }) + } + return null + } + if (range.length > 1) return null + + return finish(null, body, negate) +} + +/** + * Parses the values of a condition, which are OR-ed together and must all use + * the same field and operator. + */ +function finish( + expected: FieldDef | null, + body: string, + negate: boolean, + subject?: string, +): Condition | null { + const single = parseTerm(body.trim(), subject) + if (single && (!expected || single.field.key === expected.key)) { + return newCondition({ field: single.field.key, op: single.op, negate, values: [single.value] }) + } + + const parts = splitTop(unwrap(body), '||') + if (parts.length < 2) return null + + const terms: ParsedTerm[] = [] + let field = expected + for (const part of parts) { + const parsed = parseTerm(part.trim(), subject) + if (!parsed) return null + if (!field) field = parsed.field + if (parsed.field.key !== field.key) return null + terms.push(parsed) + } + if (!field) return null + + const ops = new Set(terms.map((t) => t.op)) + if (ops.size === 1) { + return newCondition({ + field: field.key, + op: terms[0].op, + negate, + values: terms.map((t) => t.value), + }) + } + + // Values of a wildcard condition compile to different operators depending on + // where the star sits, so fold mixed operators back into wildcard patterns. + const patterns = terms.map((t) => toWildcard(t.op, t.value)) + if (patterns.some((p) => p === null)) return null + return newCondition({ field: field.key, op: 'wildcard', negate, values: patterns as string[] }) +} + +/** Inverse of the wildcard compilation, used when a condition mixes operators. */ +function toWildcard(op: OperatorId, value: string): string | null { + switch (op) { + case 'wildcard': + return value + case 'is': + return value.includes('*') ? null : value + case 'endsWith': + return `*${value}` + case 'startsWith': + return `${value}*` + case 'contains': + return `*${value}*` + default: + return null + } +} + +interface ParsedTerm { + field: FieldDef + subject: string + op: OperatorId + value: string +} + +const CALL_OPS: Record = { + geoip: 'geoip', + geosite: 'geosite', + cidr: 'cidr', +} + +const COMPARE_OPS: Record = { + '==': 'is', + contains: 'contains', + startsWith: 'startsWith', + endsWith: 'endsWith', + matches: 'regex', +} + +/** All expressions that can appear on the left hand side of a comparison. */ +function subjects(expected?: string): { subject: string; field: FieldDef }[] { + const out: { subject: string; field: FieldDef }[] = [] + for (const field of FIELDS) { + if (field.item) out.push({ subject: field.item, field }) + if (field.expr) out.push({ subject: field.expr, field }) + } + // Longest match wins, but the subject already established for the condition + // is always tried first so that ambiguous fields stay stable. + return out.sort( + (a, b) => + Number(b.subject === expected) - Number(a.subject === expected) || + b.subject.length - a.subject.length, + ) +} + +function parseTerm(input: string, expected?: string): ParsedTerm | null { + const source = input.trim() + + // Analyzer presence: `tls != nil` + const detected = /^([a-z][\w]*)\s*!=\s*nil$/.exec(source) + if (detected) { + const field = FIELDS.find((f) => f.type === 'analyzer') + if (field) return { field, subject: '', op: 'detected', value: detected[1] } + } + + // Domain-or-subdomain: (S == "v" || S endsWith ".v") + if (source.startsWith('(') && isWrapped(source)) { + const inner = splitTop(unwrap(source), '||') + if (inner.length === 2) { + const a = parseTerm(inner[0].trim(), expected) + const b = parseTerm(inner[1].trim(), expected) + if ( + a && + b && + a.op === 'is' && + b.op === 'endsWith' && + a.field.key === b.field.key && + b.value === `.${a.value}` + ) { + return { ...a, op: 'subdomain' } + } + } + return null + } + + for (const [name, op] of Object.entries(CALL_OPS)) { + const args = matchCall(source, name) + if (args === null) continue + const parts = splitTop(args, ',').map((s) => s.trim()) + if (parts.length !== 2) return null + const entry = subjects(expected).find((s) => s.subject === parts[0]) + const value = unquote(parts[1]) + if (!entry || value === null) return null + return { field: entry.field, subject: entry.subject, op, value } + } + + for (const { subject, field } of subjects(expected)) { + if (!source.startsWith(subject)) continue + const rest = source.slice(subject.length).trim() + // Wildcard "*" compiles to `S != ""`. + if (rest === '!= ""') return { field, subject, op: 'wildcard', value: '*' } + for (const [token, op] of Object.entries(COMPARE_OPS)) { + if (!rest.startsWith(token)) continue + const literal = rest.slice(token.length).trim() + if (field.type === 'port' && /^\d+$/.test(literal) && op === 'is') { + return { field, subject, op, value: literal } + } + const value = unquote(literal) + if (value === null) continue + return { field, subject, op, value } + } + return null + } + return null +} + +/** Returns the arguments of `name(...)` when the input is exactly that call. */ +function matchCall(source: string, name: string): string | null { + const prefix = `${name}(` + if (!source.startsWith(prefix) || !source.endsWith(')')) return null + const args = source.slice(prefix.length, -1) + return balanced(args) ? args : null +} + +function unquote(literal: string): string | null { + if (literal.length < 2 || literal[0] !== '"' || literal[literal.length - 1] !== '"') return null + const body = literal.slice(1, -1) + let out = '' + for (let i = 0; i < body.length; i++) { + if (body[i] === '\\' && i + 1 < body.length) { + i++ + out += body[i] + } else if (body[i] === '"') { + return null + } else { + out += body[i] + } + } + return out +} + +/** Splits on a top level operator, ignoring anything nested or quoted. */ +export function splitTop(source: string, operator: string): string[] { + const parts: string[] = [] + let depth = 0 + let quoted = false + let start = 0 + for (let i = 0; i < source.length; i++) { + const ch = source[i] + if (quoted) { + if (ch === '\\') i++ + else if (ch === '"') quoted = false + continue + } + if (ch === '"') quoted = true + else if (ch === '(' || ch === '[' || ch === '{') depth++ + else if (ch === ')' || ch === ']' || ch === '}') depth-- + else if (depth === 0 && source.startsWith(operator, i)) { + parts.push(source.slice(start, i)) + i += operator.length - 1 + start = i + 1 + } + } + parts.push(source.slice(start)) + return parts.map((p) => p.trim()).filter((p) => p.length > 0) +} + +function balanced(source: string): boolean { + let depth = 0 + let quoted = false + for (let i = 0; i < source.length; i++) { + const ch = source[i] + if (quoted) { + if (ch === '\\') i++ + else if (ch === '"') quoted = false + continue + } + if (ch === '"') quoted = true + else if (ch === '(' || ch === '[' || ch === '{') depth++ + else if (ch === ')' || ch === ']' || ch === '}') { + depth-- + if (depth < 0) return false + } + } + return depth === 0 && !quoted +} + +/** True when the whole string is wrapped in one pair of parentheses. */ +function isWrapped(source: string): boolean { + if (!source.startsWith('(') || !source.endsWith(')')) return false + return balanced(source.slice(1, -1)) +} + +function unwrap(source: string): string { + let out = source.trim() + while (isWrapped(out)) out = out.slice(1, -1).trim() + return out +} diff --git a/web/frontend/src/lib/rule/types.ts b/web/frontend/src/lib/rule/types.ts new file mode 100644 index 0000000..aba9050 --- /dev/null +++ b/web/frontend/src/lib/rule/types.ts @@ -0,0 +1,35 @@ +import type { OperatorId } from './fields' + +export type MatchMode = 'and' | 'or' + +export interface Condition { + id: string + field: string + op: OperatorId + negate: boolean + /** One entry per value; the `range` operator uses exactly two. */ + values: string[] +} + +export interface RuleBuilderState { + mode: MatchMode + conditions: Condition[] +} + +let counter = 0 + +export function newCondition(partial: Partial = {}): Condition { + counter += 1 + return { + id: `c${counter}`, + field: 'tls.sni', + op: 'subdomain', + negate: false, + values: [], + ...partial, + } +} + +export function emptyBuilderState(): RuleBuilderState { + return { mode: 'and', conditions: [newCondition()] } +} diff --git a/web/frontend/src/lib/rule/validate.ts b/web/frontend/src/lib/rule/validate.ts new file mode 100644 index 0000000..6a1e5e0 --- /dev/null +++ b/web/frontend/src/lib/rule/validate.ts @@ -0,0 +1,76 @@ +import { t } from '@/i18n' + +import type { OperatorId, ValueType } from './fields' + +const IPV4 = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ + +export function isIPv4(value: string): boolean { + const m = IPV4.exec(value) + return m ? m.slice(1).every((part) => Number(part) <= 255 && String(Number(part)) === part) : false +} + +export function isIPv6(value: string): boolean { + if (!value.includes(':')) return false + // Reject obvious garbage; the engine does the authoritative parsing. + if (!/^[0-9a-fA-F:.]+$/.test(value)) return false + return (value.match(/::/g) ?? []).length <= 1 && value.split(':').length <= 9 +} + +export function isIP(value: string): boolean { + return isIPv4(value) || isIPv6(value) +} + +export function isCIDR(value: string): boolean { + const slash = value.lastIndexOf('/') + if (slash < 0) return false + const ip = value.slice(0, slash) + const bits = value.slice(slash + 1) + if (!/^\d{1,3}$/.test(bits)) return false + const prefix = Number(bits) + if (isIPv4(ip)) return prefix <= 32 + if (isIPv6(ip)) return prefix <= 128 + return false +} + +export function isPort(value: string): boolean { + return /^\d{1,5}$/.test(value) && Number(value) <= 65535 +} + +/** Returns an error message for a value, or "" when it is acceptable. */ +export function validateValue(type: ValueType, op: OperatorId, value: string): string { + const v = value.trim() + if (!v) return '' + switch (op) { + case 'cidr': + return isCIDR(v) ? '' : t('rules.invalidCidr') + case 'regex': + try { + new RegExp(v) + return '' + } catch { + return t('rules.invalidRegex') + } + case 'geoip': + case 'geosite': + return /^[a-z0-9-]+(@[a-z0-9-]+)*$/i.test(v) ? '' : t('rules.invalidGeo') + case 'wildcard': + return /^[a-z0-9.*_-]+$/i.test(v) ? '' : t('rules.invalidDomain') + default: + break + } + // A star only means something with the wildcard operator; anywhere else it + // would be matched literally, which is never what the user meant. + if ((type === 'domain' || type === 'text') && v.includes('*')) { + return t('rules.starHint') + } + switch (type) { + case 'ip': + return isIP(v) ? '' : t('rules.invalidIp') + case 'port': + return isPort(v) ? '' : t('rules.invalidPort') + case 'domain': + return /^[a-z0-9.*_-]+$/i.test(v) ? '' : t('rules.invalidDomain') + default: + return '' + } +} diff --git a/web/frontend/src/lib/types.ts b/web/frontend/src/lib/types.ts index 8adbd44..ea8964f 100644 --- a/web/frontend/src/lib/types.ts +++ b/web/frontend/src/lib/types.ts @@ -83,6 +83,19 @@ export interface MetaInfo { functions: string[] } +export interface GeoEntry { + code: string + count: number + attributes?: string[] +} + +export interface GeoData { + ip: GeoEntry[] + site: GeoEntry[] + ipError?: string + siteError?: string +} + export interface RuleModifier { name: string args?: Record diff --git a/web/frontend/src/views/RulesView.vue b/web/frontend/src/views/RulesView.vue index 5afeaec..84925d7 100644 --- a/web/frontend/src/views/RulesView.vue +++ b/web/frontend/src/views/RulesView.vue @@ -10,10 +10,12 @@ import { RotateCcw, Save, Trash2, + Wand2, } from 'lucide-vue-next' import { computed, onMounted, ref } from 'vue' import PageHeader from '@/components/PageHeader.vue' +import RuleBuilder from '@/components/rule/RuleBuilder.vue' import { Badge, Button, @@ -32,6 +34,9 @@ import { import { toast } from '@/composables/useToast' import { t } from '@/i18n' import { api, ApiError } from '@/lib/api' +import { compileRule } from '@/lib/rule/compile' +import { parseRule } from '@/lib/rule/parse' +import { emptyBuilderState, type RuleBuilderState } from '@/lib/rule/types' import type { MetaInfo, Rule } from '@/lib/types' const mode = ref('visual') @@ -49,6 +54,14 @@ const editing = ref(null) const editingIndex = ref(-1) const removing = ref(-1) +// Rule editor state +const editorTab = ref('builder') +const builder = ref(emptyBuilderState()) +const builderUnavailable = ref(false) +const checking = ref(false) + +const analyzerNames = computed(() => (meta.value?.analyzers ?? []).map((a) => a.name)) + const actionOptions = computed(() => [ { value: '', label: t('rules.actionNone') }, ...(meta.value?.actions ?? []).map((a) => ({ value: a, label: t(`action.${a}`) })), @@ -175,46 +188,96 @@ function startAdd() { editingIndex.value = -1 editing.value = { name: '', action: 'block', log: false, expr: '' } modifierArgs.value = '{}' + builder.value = emptyBuilderState() + builderUnavailable.value = false + editorTab.value = 'builder' + editError.value = '' } function startEdit(index: number) { + const rule = rules.value[index] editingIndex.value = index - editing.value = { ...rules.value[index] } - modifierArgs.value = JSON.stringify(rules.value[index].modifier?.args ?? {}, null, 2) + editing.value = { ...rule } + modifierArgs.value = JSON.stringify(rule.modifier?.args ?? {}, null, 2) + const parsed = parseRule(rule.expr) + builderUnavailable.value = parsed === null + builder.value = parsed ?? emptyBuilderState() + editorTab.value = parsed ? 'builder' : 'expr' + editError.value = '' +} + +/** + * Switching tabs keeps both representations in sync: the builder is compiled + * into the expression, and an expression is parsed back when it uses the + * shapes the builder knows. + */ +function switchEditorTab(next: string) { + if (next === editorTab.value || !editing.value) return + if (next === 'expr') { + const expr = compileRule(builder.value) + if (expr) editing.value.expr = expr + } else { + const parsed = parseRule(editing.value.expr) + builderUnavailable.value = parsed === null + if (parsed) builder.value = parsed + } + editorTab.value = next } const modifierArgs = ref('{}') const editError = ref('') -function commitEdit() { +const draftExpr = computed(() => + editorTab.value === 'builder' ? compileRule(builder.value) : (editing.value?.expr ?? ''), +) + +async function commitEdit() { const draft = editing.value - if (!draft) return + if (!draft || checking.value) return + editError.value = '' if (!draft.name.trim()) { editError.value = t('rules.nameRequired') return } - if (!draft.expr.trim()) { + const expr = draftExpr.value.trim() + if (!expr) { editError.value = t('rules.exprRequired') return } + draft.expr = expr if (draft.action === 'modify') { try { const args = JSON.parse(modifierArgs.value || '{}') as Record draft.modifier = { name: draft.modifier?.name ?? modifierOptions.value[0]?.value ?? '', args } } catch { - editError.value = 'JSON' + editError.value = t('rules.invalidJson') return } } else { draft.modifier = null } + + // Let the engine have the final word on the expression before accepting it. + checking.value = true + try { + const res = await api.validateRules({ rules: [{ ...draft, name: draft.name.trim() }] }) + if (!res.valid) { + editError.value = res.error ?? t('rules.invalid') + return + } + } catch (e) { + editError.value = e instanceof ApiError ? e.message : String(e) + return + } finally { + checking.value = false + } + const next = [...rules.value] if (editingIndex.value >= 0) next[editingIndex.value] = draft else next.push(draft) rules.value = next dirty.value = true editing.value = null - editError.value = '' } function remove(index: number) { @@ -369,9 +432,11 @@ function remove(index: number) { - + + {{ t('rules.name') }} @@ -412,24 +477,58 @@ function remove(index: number) { - {{ t('rules.expr') }} - + {{ t('rules.conditions') }} + + + + + {{ t('rules.builder.tab') }} + + + + {{ t('rules.expr') }} + + + + + + + {{ t('rules.builder.notParsed') }} + + + + + + {{ t('rules.exprHint') }} + - {{ editError }} + + {{ editError }} + {{ t('common.cancel') }} - {{ t('common.save') }} + + + {{ t('common.save') }} + diff --git a/web/server.go b/web/server.go index 7a2f358..7a0e6bf 100644 --- a/web/server.go +++ b/web/server.go @@ -8,9 +8,14 @@ import ( "net/http" "path" "strings" + "sync" "time" ) +// geoCacheTTL is how long a loaded geo database listing is reused. Parsing the +// files is expensive, and their content only changes when they are updated. +const geoCacheTTL = 10 * time.Minute + var ( errBadCredentials = errors.New("invalid password") errTooManyAttempts = errors.New("too many failed attempts, try again later") @@ -88,6 +93,27 @@ type AnalyzerInfo struct { Proto string `json:"proto"` } +// GeoData is the content of the configured GeoIP/GeoSite databases, used by the +// rule builder so that the user can pick a country or a site category from a +// list instead of typing a code. +type GeoData struct { + // IP lists the geoip() keys: country codes plus, depending on the + // database, provider groups such as "cloudflare" or "telegram". + IP []GeoEntry `json:"ip"` + // Site lists the geosite() keys along with their attributes. + Site []GeoEntry `json:"site"` + // IPError / SiteError describe why a database could not be loaded. + IPError string `json:"ipError,omitempty"` + SiteError string `json:"siteError,omitempty"` +} + +// GeoEntry is a single key of a geo database. +type GeoEntry struct { + Code string `json:"code"` + Count int `json:"count"` + Attributes []string `json:"attributes,omitempty"` +} + // Config is the web server configuration. type Config struct { // Listen is the address to listen on, e.g. ":8080". @@ -102,6 +128,9 @@ type Config struct { Rules RuleManager Meta MetaInfo Info func() Info + // Geo loads the GeoIP/GeoSite databases. It is called at most once every + // geoCacheTTL, and only when the rule builder asks for the data. Optional. + Geo func() GeoData // Logf is used for the few messages the server produces. Optional. Logf func(format string, args ...interface{}) @@ -113,6 +142,10 @@ type Server struct { auth *authenticator mux *http.ServeMux static http.Handler + + geoMu sync.Mutex + geoCache *GeoData + geoLoaded time.Time } // NewServer creates a new web UI server. @@ -158,6 +191,7 @@ func (s *Server) routes() { s.mux.HandleFunc("/api/v1/live", s.guard(s.handleLive, false)) s.mux.HandleFunc("/api/v1/rules", s.guard(s.handleRules, false)) s.mux.HandleFunc("/api/v1/rules/validate", s.guard(s.handleRulesValidate, true)) + s.mux.HandleFunc("/api/v1/geo", s.guard(s.handleGeo, false)) s.mux.HandleFunc("/", s.handleStatic) }
+ {{ hint }} +
+ {{ t('rules.geo.unavailable') }} + ({{ errorMessage }}) +
{{ t('rules.geo.loading') }}
+ {{ expression || t('rules.builder.empty') }} +
{{ message }}
+ {{ t('rules.builder.notParsed') }} +
{{ t('rules.exprHint') }}
{{ editError }}
+ {{ editError }} +