diff --git a/web/dist/assets/AnalyzersView-Bm4Tu3Lm.js b/web/dist/assets/AnalyzersView-BWAUI36x.js
similarity index 91%
rename from web/dist/assets/AnalyzersView-Bm4Tu3Lm.js
rename to web/dist/assets/AnalyzersView-BWAUI36x.js
index c0d24b3..e1de106 100644
--- a/web/dist/assets/AnalyzersView-Bm4Tu3Lm.js
+++ b/web/dist/assets/AnalyzersView-BWAUI36x.js
@@ -1,4 +1,4 @@
-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";/**
+import{_ as b}from"./PageHeader.vue_vue_type_script_setup_true_lang-CD1KTXEu.js";import{_ as y}from"./Badge.vue_vue_type_script_setup_true_lang-DSNeqlXx.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-DIqASLVQ.js";import{_ as k,a as x,b as z,c as w}from"./CardTitle.vue_vue_type_script_setup_true_lang-DKXrNKGt.js";import{_ as A}from"./Skeleton.vue_vue_type_script_setup_true_lang-B_11D5UP.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.
diff --git a/web/dist/assets/Badge.vue_vue_type_script_setup_true_lang-i2F91fYk.js b/web/dist/assets/Badge.vue_vue_type_script_setup_true_lang-DSNeqlXx.js
similarity index 93%
rename from web/dist/assets/Badge.vue_vue_type_script_setup_true_lang-i2F91fYk.js
rename to web/dist/assets/Badge.vue_vue_type_script_setup_true_lang-DSNeqlXx.js
index 2142038..2bb4de2 100644
--- a/web/dist/assets/Badge.vue_vue_type_script_setup_true_lang-i2F91fYk.js
+++ b/web/dist/assets/Badge.vue_vue_type_script_setup_true_lang-DSNeqlXx.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,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 _};
+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-DIqASLVQ.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-BHtPbA-o.js b/web/dist/assets/CardTitle.vue_vue_type_script_setup_true_lang-DKXrNKGt.js
similarity index 92%
rename from web/dist/assets/CardTitle.vue_vue_type_script_setup_true_lang-BHtPbA-o.js
rename to web/dist/assets/CardTitle.vue_vue_type_script_setup_true_lang-DKXrNKGt.js
index 24546cd..6ef8255 100644
--- a/web/dist/assets/CardTitle.vue_vue_type_script_setup_true_lang-BHtPbA-o.js
+++ b/web/dist/assets/CardTitle.vue_vue_type_script_setup_true_lang-DKXrNKGt.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-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};
+import{d as a,o as n,a as r,e as c,u as o,f as p,H as l}from"./index-DIqASLVQ.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-CwtwoTtI.js
similarity index 97%
rename from web/dist/assets/Collection-BaXBMWO5.js
rename to web/dist/assets/Collection-CwtwoTtI.js
index c2fc0ca..1e92700 100644
--- a/web/dist/assets/Collection-BaXBMWO5.js
+++ b/web/dist/assets/Collection-CwtwoTtI.js
@@ -1 +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};
+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-DIqASLVQ.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/DashboardView-BD4i_GCA.js b/web/dist/assets/DashboardView-XqZnZd1B.js
similarity index 96%
rename from web/dist/assets/DashboardView-BD4i_GCA.js
rename to web/dist/assets/DashboardView-XqZnZd1B.js
index e48400a..57b45f8 100644
--- a/web/dist/assets/DashboardView-BD4i_GCA.js
+++ b/web/dist/assets/DashboardView-XqZnZd1B.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-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";/**
+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-DIqASLVQ.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--aBz0q7s.js";import{_ as re}from"./PageHeader.vue_vue_type_script_setup_true_lang-CD1KTXEu.js";import{_ as j,a as P,b as Z,c as T}from"./CardTitle.vue_vue_type_script_setup_true_lang-DKXrNKGt.js";import{_ as ie}from"./Skeleton.vue_vue_type_script_setup_true_lang-B_11D5UP.js";import{_ as me,a as pe,b as G}from"./TabsTrigger.vue_vue_type_script_setup_true_lang-RkMkvDd1.js";import"./Badge.vue_vue_type_script_setup_true_lang-DSNeqlXx.js";import"./Collection-CwtwoTtI.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-JeqwaMaY.js b/web/dist/assets/EventItem.vue_vue_type_script_setup_true_lang--aBz0q7s.js
similarity index 92%
rename from web/dist/assets/EventItem.vue_vue_type_script_setup_true_lang-JeqwaMaY.js
rename to web/dist/assets/EventItem.vue_vue_type_script_setup_true_lang--aBz0q7s.js
index 42810af..eb89e05 100644
--- a/web/dist/assets/EventItem.vue_vue_type_script_setup_true_lang-JeqwaMaY.js
+++ b/web/dist/assets/EventItem.vue_vue_type_script_setup_true_lang--aBz0q7s.js
@@ -1,4 +1,4 @@
-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";/**
+import{_ as a}from"./Badge.vue_vue_type_script_setup_true_lang-DSNeqlXx.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-DIqASLVQ.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-CM65Ezyt.js
similarity index 94%
rename from web/dist/assets/EventsView-Blmx8SEw.js
rename to web/dist/assets/EventsView-CM65Ezyt.js
index 0786c87..8363343 100644
--- a/web/dist/assets/EventsView-Blmx8SEw.js
+++ b/web/dist/assets/EventsView-CM65Ezyt.js
@@ -1,4 +1,4 @@
-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";/**
+import{_ as D,a as F}from"./EventItem.vue_vue_type_script_setup_true_lang--aBz0q7s.js";import{_ as J}from"./PageHeader.vue_vue_type_script_setup_true_lang-CD1KTXEu.js";import{_ as N}from"./Badge.vue_vue_type_script_setup_true_lang-DSNeqlXx.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-DIqASLVQ.js";import{S as R,_ as W,T as X}from"./Modal.vue_vue_type_script_setup_true_lang-DNsJ6686.js";import{_ as O}from"./Select.vue_vue_type_script_setup_true_lang-CzaVl8rJ.js";import{a as Y,e as U}from"./format-B6sc_rZ4.js";import"./Collection-CwtwoTtI.js";/**
* @license lucide-vue-next v0.469.0 - ISC
*
* This source code is licensed under the ISC license.
diff --git a/web/dist/assets/Modal.vue_vue_type_script_setup_true_lang-Bd1uxkqS.js b/web/dist/assets/Modal.vue_vue_type_script_setup_true_lang-DNsJ6686.js
similarity index 98%
rename from web/dist/assets/Modal.vue_vue_type_script_setup_true_lang-Bd1uxkqS.js
rename to web/dist/assets/Modal.vue_vue_type_script_setup_true_lang-DNsJ6686.js
index 392f46f..17ac568 100644
--- a/web/dist/assets/Modal.vue_vue_type_script_setup_true_lang-Bd1uxkqS.js
+++ b/web/dist/assets/Modal.vue_vue_type_script_setup_true_lang-DNsJ6686.js
@@ -1,4 +1,4 @@
-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";/**
+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-DIqASLVQ.js";import{c as J,d as R,g as H}from"./Collection-CwtwoTtI.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-CzaVl8rJ.js";/**
* @license lucide-vue-next v0.469.0 - ISC
*
* This source code is licensed under the ISC license.
diff --git a/web/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-CPDhGTO6.js b/web/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-CD1KTXEu.js
similarity index 90%
rename from web/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-CPDhGTO6.js
rename to web/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-CD1KTXEu.js
index a0cc132..fcc4556 100644
--- a/web/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-CPDhGTO6.js
+++ b/web/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-CD1KTXEu.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-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 _};
+import{d as c,a as t,b as n,t as i,j as a,H as d,o as s}from"./index-DIqASLVQ.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-f8xcsZeo.js b/web/dist/assets/RulesView-hVmwxU6M.js
similarity index 67%
rename from web/dist/assets/RulesView-f8xcsZeo.js
rename to web/dist/assets/RulesView-hVmwxU6M.js
index 27846bd..64a4648 100644
--- a/web/dist/assets/RulesView-f8xcsZeo.js
+++ b/web/dist/assets/RulesView-hVmwxU6M.js
@@ -1,4 +1,4 @@
-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";/**
+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 xe,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 _,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-DIqASLVQ.js";import{_ as na}from"./PageHeader.vue_vue_type_script_setup_true_lang-CD1KTXEu.js";import{u as Fe,a as De,b as st,c as be,d as Ge,g as oa}from"./Collection-CwtwoTtI.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 _a,C as xa,_ as je}from"./Select.vue_vue_type_script_setup_true_lang-CzaVl8rJ.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-RkMkvDd1.js";import{S as Va,T as Ot,_ as gt}from"./Modal.vue_vue_type_script_setup_true_lang-DNsJ6686.js";import{_ as Te}from"./Badge.vue_vue_type_script_setup_true_lang-DSNeqlXx.js";/**
* @license lucide-vue-next v0.469.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -43,4 +43,4 @@ 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
*
* 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};
+ */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(n,a,e){const o=n.findIndex(s=>He(s,a)),l=n.findIndex(s=>He(s,e));if(o===-1||l===-1)return[];const[r,i]=[o,l].sort((s,u)=>s-u);return n.slice(r,i+1)}const Ta=["INPUT","TEXTAREA"];function Ra(n,a,e,o={}){if(!a||o.enableIgnoredElement&&Ta.includes(a.nodeName))return null;const{arrowKeyOptions:l="both",attributeName:r="[data-reka-collection-item]",itemsArray:i=[],loop:s=!0,dir:u="ltr",preventScroll:x=!0,focus:d=!1}=o,[C,I,k,y,f,g]=[n.key==="ArrowRight",n.key==="ArrowLeft",n.key==="ArrowUp",n.key==="ArrowDown",n.key==="Home",n.key==="End"],p=k||y,q=C||I;if(!f&&!g&&(!p&&!q||l==="vertical"&&q||l==="horizontal"&&p))return null;const E=i;if(!E.length)return null;x&&n.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(n,a,e,o=n.includes(a)?n.length:n.length+1){if(--o===0)return null;const l=n.indexOf(a);let r;if(l===-1?r=e.goForward?0:n.length-1:r=e.goForward?l+1:l-1,!e.loop&&(r<0||r>=n.length))return null;const i=(r+n.length)%n.length,s=n[i];return s?s.hasAttribute("disabled")&&s.getAttribute("disabled")!=="false"?Rt(n,s,e,o):s:null}function ut(n){const a=A(!1);function e(){a.value=!0}function o(l){pe(()=>{a.value=!1,n==null||n(l)})}return{isComposing:a,handleCompositionStart:e,handleCompositionEnd:o}}function za(n){const a=F(()=>t(n)),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 x=s.length;for(;u+x<=i.length;u++){const d=i.slice(u,u+x);if(e.value.compare(s,d)===0)return!0}return!1}}}function Pa(){var a,e;const n=(e=(a=It())==null?void 0:a.vnode)==null?void 0:e.scopeId;return n?{[n]:""}:{}}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(n){const a=n,{primitiveElement:e,currentElement:o}=Fe(),l=F(()=>a.checked??a.value);return Ke(l,(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(n){const a=n,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((l,r)=>typeof l=="object"?Object.entries(l).map(([i,s])=>({name:`${a.name}[${r}][${i}]`,value:s})):{name:`${a.name}[${r}]`,value:l}):a.value!==null&&typeof a.value=="object"&&!Array.isArray(a.value)?Object.entries(a.value).map(([l,r])=>({name:`${a.name}[${l}]`,value:r})):[]);return(l,r)=>(m(),S(ee,null,[G(" We render single input if it's required "),e.value?(m(),B(bt,ae({key:l.name},{...a,...l.$attrs},{name:l.name,value:l.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,...l.$attrs},{name:i.name,value:i.value}),null,16,["name","value"]))),128))],2112))}}),dt=Na;function Ua(n,a,e){return n===void 0?!1:Array.isArray(n)?n.some(o=>ze(o,a,e)):ze(n,a,e)}function ze(n,a,e){return n===void 0||a===void 0?!1:typeof n=="string"?n===a:typeof e=="function"?e(n,a):typeof e=="string"?(n==null?void 0:n[e])===(a==null?void 0:a[e]):He(n,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(n,{expose:a,emit:e}){const o=n,l=e,{multiple:r,highlightOnHover:i,orientation:s,disabled:u,selectionBehavior:x,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=xe(o,"modelValue",l,{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);l("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,l("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),l("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:x,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(n){const{CollectionSlot:a}=De(),e=Xe(),o=Gt(!1,10);return(l,r)=>(m(),B(t(a),null,{default:h(()=>[v(t(te),{role:"listbox",as:l.as,"as-child":l.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(l.$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(n,{emit:a}){const e=n,l=xe(e,"modelValue",a,{defaultValue:"",passive:e.modelValue===void 0}),r=Xe(),{primitiveElement:i,currentElement:s}=Fe(),u=F(()=>e.disabled||r.disabled.value||!1),x=A();Xt(()=>{var p;return x.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=>{l.value=p.target.value,r.onCompositionEnd(),r.highlightFirstItem()});function k(){r.onCompositionStart(),C()}function y(p){d.value||(l.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(l),disabled:u.value?"":void 0,"data-disabled":u.value?"":void 0,"aria-disabled":u.value??void 0,"aria-activedescendant":x.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(l)})]),_: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(n,{emit:a}){const e=n,o=a,l=Ge(void 0,"reka-listbox-item"),{CollectionItem:r}=De(),{forwardRef:i,currentElement:s}=re(),u=Xe(),x=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([x.value,d.value,C.value,t(u).focusable.value],()=>v(t(te),ae({id:t(l)},y.$attrs,{ref:t(i),role:"option",tabindex:t(u).focusable.value?x.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":x.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(n,{expose:a,emit:e}){var Ve,$e,Ie;const o=n,l=e,{primitiveElement:r,currentElement:i}=Fe(),{multiple:s,disabled:u,ignoreFilter:x,resetSearchTermOnSelect:d,openOnFocus:C,openOnClick:I,dir:k,resetModelValueOnClear:y,highlightOnHover:f}=we(o),g=st(k),p=xe(o,"modelValue",l,{defaultValue:o.defaultValue??(s.value?[]:void 0),passive:o.modelValue===void 0,deep:!0}),q=xe(o,"open",l,{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:x,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=>l("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(n){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(n,{emit:a}){const e=n,o=a,{position:l}=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 x=F(()=>e.position==="popper"?e:{}),d=va(x.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:l});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(l)==="popper"?t(ga):t(te)),ae({...y.$attrs,...t(d)},{id:t(r).contentId,ref:t(s),"memo-dependencies":t(l)==="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(l)==="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(n,{emit:a}){const l=ya(n,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(l),...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(n){const a=n,e=qe(),o=F(()=>e.ignoreFilter.value?e.allItems.value.size===0:e.filterState.value.count===0);return(l,r)=>o.value?(m(),B(t(te),Bt(ae({key:0},a)),{default:h(()=>[J(l.$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(n,{emit:a}){const e=n,o=a,l=qe(),r=Xe(),{primitiveElement:i,currentElement:s}=Fe(),u=xe(e,"modelValue",o,{passive:e.modelValue===void 0});ge(()=>{s.value&&l.onInputElementChange(s.value)});const{isComposing:x,handleCompositionStart:d,handleCompositionEnd:C}=ut(E=>{const V=E.target;V&&k(V.value)});function I(E){x.value||(E.preventDefault(),l.open.value||l.onOpenChange(!0))}function k(E){l.open.value?l.filterSearch.value=E:(l.onOpenChange(!0),pe(()=>{E&&(l.filterSearch.value=E,r.highlightFirstItem())}))}function y(E){x.value||k(E.target.value)}function f(){l.openOnFocus.value&&!l.open.value&&l.onOpenChange(!0)}function g(E){var j,T;if(!l.open.value)return;const V=E.relatedTarget;if(!V)return;const P=(j=l.parentElement.value)==null?void 0:j.contains(V),ue=(T=document.getElementById(l.contentId))==null?void 0:T.contains(V);!P&&!ue&&requestAnimationFrame(()=>{var Y,W;if(!l.open.value)return;const M=document.activeElement;!((Y=l.parentElement.value)!=null&&Y.contains(M))&&!((W=document.getElementById(l.contentId))!=null&&W.contains(M))&&l.onOpenChange(!1)})}function p(){l.openOnClick.value&&!l.open.value&&l.onOpenChange(!0)}function q(){const E=l.modelValue.value;e.displayValue?u.value=e.displayValue(E):!l.multiple.value&&E&&!Array.isArray(E)&&typeof E!="object"?u.value=E.toString():u.value="",pe(()=>{u.value=u.value})}return l.onResetSearchTerm(()=>{q()}),Ke(l.modelValue,async()=>{!l.isUserInputted.value&&l.resetSearchTermOnSelect.value&&q()},{immediate:!0,deep:!0}),Ke(l.filterState,(E,V)=>{!l.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(l).open.value,"aria-controls":t(l).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(n,{emit:a}){const e=n,o=a,l=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 x=F(()=>{if(r.isVirtual.value||r.ignoreFilter.value||!r.filterSearch.value)return!0;{const d=r.filterState.value.items.get(l);return d===void 0?!0:d>0}});return ge(()=>{var C;r.allItems.value.set(l,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(l):r.allGroups.value.set(d,new Set([l])))}),rt(()=>{r.allItems.value.delete(l)}),(d,C)=>x.value?St([x.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(l),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(n){const a=n;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(n){const a=n,{forwardRef:e,currentElement:o}=re(),l=qe(),r=F(()=>a.disabled||l.disabled.value||!1);return ge(()=>{o.value&&l.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(l).open.value,"aria-controls":t(l).contentId,"data-state":t(l).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(l).onOpenChange(!t(l).open.value))}),{default:h(()=>[J(i.$slots,"default")]),_:3},16,["type","aria-expanded","aria-controls","data-state","disabled","data-disabled","aria-disabled"]))}}),_l=bl,xl=U({__name:"ComboboxViewport",props:{nonce:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(n){const a=n,{forwardRef:e}=re(),{nonce:o}=we(a),l=_a(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(l)},{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=xl;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(n,{emit:a}){const e=n,o=a,{disabled:l}=we(e),r=xe(e,"modelValue",o,{defaultValue:e.defaultValue??e.falseValue,passive:e.modelValue===void 0}),i=F(()=>r.value===e.trueValue);function s(){l.value||(r.value=i.value?e.falseValue:e.trueValue)}const{forwardRef:u,currentElement:x}=re(),d=it(x),C=Pa(),I=F(()=>{var k;return e.id&&x.value?(k=document.querySelector(`[for="${e.id}"]`))==null?void 0:k.innerText:void 0});return wl({checked:i,toggleCheck:s,disabled:l}),(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(l)?"":void 0,"as-child":k.asChild,as:k.as,disabled:t(l)},{...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(l),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(n){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(n){const a=n,{forwardRef:e}=re(),o=ka(),l=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,x)=>(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":l.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:n=>n.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(n,{emit:a}){const e=n,o=a,{addOnPaste:l,disabled:r,delimiter:i,max:s,id:u,dir:x,addOnBlur:d,addOnTab:C}=we(e),I=st(x),k=xe(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:l,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(n){const a=n,e=ct(),{forwardRef:o,currentElement:l}=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:x}=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=l.value.nodeName==="INPUT"?l.value:l.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(x),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(n){const a=n,{value:e}=we(a),o=ct(),{forwardRef:l,currentElement:r}=re(),{CollectionItem:i}=De(),s=F(()=>o.selectedElement.value===r.value),u=F(()=>a.disabled||o.disabled.value),x=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(l),as:d.as,"as-child":d.asChild,"aria-labelledby":t(x).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(n){const a=n;re();const e=ct(),o=zt(),l=F(()=>{var i;return((i=o.disabled)==null?void 0:i.value)||e.disabled.value});function r(){if(l.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":l.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(n){const a=n,e=zt();return re(),e.textId||(e.textId=Ge(void 0,"reka-tags-input-item-text")),(o,l)=>(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(n,{emit:a}){const e=n,o=a;return(l,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(n,{emit:a}){const e=n,o=a,l=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",l.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))]))}}),_t=U({__name:"TabsContent",props:{class:{},value:{}},setup(n){const a=n;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(n,{emit:a}){const e=n,o=a;return(l,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(n=!1){if(!(We.value&&!n))return Re||(lt.value=!0,Re=(async()=>{try{const a=await ye.geo(n);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(n){const a=n==="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(n,a){var o;if(!/^[a-z]{2}$/i.test(n))return null;const e=n.toUpperCase();try{const l=(o=Gl(a))==null?void 0:o.of(e);return l&&l!==e?l:null}catch{return null}}function Jl(n){if(!/^[a-z]{2}$/i.test(n))return"";const a=127462,e=n.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(n,{emit:a}){const e=n,o=a,{lang:l}=ta(),{geo:r,error:i,loading:s,load:u}=jl(),x=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,l.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:_("rules.geo.attribute"),flag:""})}return p}),C=F(()=>{const g=x.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(_)("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(_)("common.delete"),onClick:E=>y(q)},[v(t(At),{class:"size-3"})],8,tn)]))),128))])):G("",!0),t(s)?(m(),S("p",an,$(t(_)("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:x.value,"onUpdate:modelValue":p[1]||(p[1]=q=>x.value=q),placeholder:e.kind==="geoip"?t(_)("rules.geo.searchCountry"):t(_)("rules.geo.searchSite"),class:"placeholder:text-muted-foreground w-full bg-transparent text-sm outline-none"},null,8,["modelValue","placeholder"]),v(t(_l),{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(_)("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(xa),{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(n=>[n.key,n])),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(n){return Dt[n][0]}function xt(n){return Dt[n.type]}function se(n){return`"${n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}const dn=/[.+?^${}()|[\]\\]/g;function Ct(n){return`^${n.replace(dn,"\\$&").replace(/\*/g,".*")}$`}function Lt(n){const a=n.trim();if(a==="*")return{kind:"any",value:""};if(!a.includes("*"))return{kind:"exact",value:a};const e=a.startsWith("*"),o=a.endsWith("*"),l=a.replace(/^\*/,"").replace(/\*$/,"");return l.includes("*")?{kind:"regex",value:Ct(a)}:e&&o?{kind:"contains",value:l}:e?{kind:"suffix",value:l}:o?{kind:"prefix",value:l}:{kind:"regex",value:Ct(a)}}function cn(n,a){const e=Lt(a);switch(e.kind){case"any":return`${n} != ""`;case"exact":return`${n} == ${se(e.value)}`;case"suffix":return`${n} endsWith ${se(e.value)}`;case"prefix":return`${n} startsWith ${se(e.value)}`;case"contains":return`${n} contains ${se(e.value)}`;case"regex":return`${n} matches ${se(e.value)}`}}function pn(n,a,e,o){const l=o.trim();switch(a){case"is":return n.type==="port"?`${e} == ${l}`:`${e} == ${se(l)}`;case"subdomain":return`(${e} == ${se(l)} || ${e} endsWith ${se("."+l)})`;case"wildcard":return cn(e,l);case"contains":case"startsWith":case"endsWith":return`${e} ${a} ${se(l)}`;case"regex":return`${e} matches ${se(l)}`;case"geosite":return`geosite(${e}, ${se(l.toLowerCase())})`;case"cidr":return`cidr(${e}, ${se(l)})`;case"geoip":return`geoip(${e}, ${se(l.toLowerCase())})`;case"detected":return`${l} != nil`;case"range":return""}}function fn(n){const a=nt[n.field];if(!a)return"";const e=n.values.map(l=>l.trim()).filter(Boolean);let o;if(n.op==="range"){const[l,r]=n.values;if(!(l!=null&&l.trim())||!(r!=null&&r.trim()))return"";o=`(${a.expr} >= ${l.trim()} && ${a.expr} <= ${r.trim()})`}else{if(e.length===0)return"";const l=a.iter?a.item:a.expr,r=e.map(s=>pn(a,n.op,l,s)),i=r.length>1?`(${r.join(" || ")})`:r[0];o=a.iter?`any(${a.iter}, {${i}})`:i}return n.negate?o.startsWith("(")&&o.endsWith(")")?`!${o}`:`!(${o})`:o}function ot(n){const a=n.conditions.map(fn).filter(Boolean);return a.length===0?"":a.length===1?a[0]:a.join(n.mode==="and"?" && ":" || ")}const vn=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;function Nt(n){const a=vn.exec(n);return a?a.slice(1).every(e=>Number(e)<=255&&String(Number(e))===e):!1}function Ut(n){return!n.includes(":")||!/^[0-9a-fA-F:.]+$/.test(n)?!1:(n.match(/::/g)??[]).length<=1&&n.split(":").length<=9}function mn(n){return Nt(n)||Ut(n)}function hn(n){const a=n.lastIndexOf("/");if(a<0)return!1;const e=n.slice(0,a),o=n.slice(a+1);if(!/^\d{1,3}$/.test(o))return!1;const l=Number(o);return Nt(e)?l<=32:Ut(e)?l<=128:!1}function gn(n){return/^\d{1,5}$/.test(n)&&Number(n)<=65535}function yn(n,a,e){const o=e.trim();if(!o)return"";switch(a){case"cidr":return hn(o)?"":_("rules.invalidCidr");case"regex":try{return new RegExp(o),""}catch{return _("rules.invalidRegex")}case"geoip":case"geosite":return/^[a-z0-9-]+(@[a-z0-9-]+)*$/i.test(o)?"":_("rules.invalidGeo");case"wildcard":return/^[a-z0-9.*_-]+$/i.test(o)?"":_("rules.invalidDomain")}if((n==="domain"||n==="text")&&o.includes("*"))return _("rules.starHint");switch(n){case"ip":return mn(o)?"":_("rules.invalidIp");case"port":return gn(o)?"":_("rules.invalidPort");case"domain":return/^[a-z0-9.*_-]+$/i.test(o)?"":_("rules.invalidDomain");default:return""}}const bn={class:"bg-muted/40 flex flex-col gap-2 rounded-lg border p-2.5"},_n={class:"flex flex-wrap items-center gap-2"},xn=["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(n,{emit:a}){const e=n,o=a,l=F(()=>nt[e.condition.field]??Ce[0]),r=f=>`rules.field.${f.replace(/\./g,"_")}`,i=F(()=>Ce.map(f=>({value:f.key,label:`${_(`rules.group.${f.group}`)} · ${_(r(f.key))}`}))),s=F(()=>xt(l.value).map(f=>({value:f,label:_(`rules.op.${f}`)})));function u(f){o("update",{...e.condition,...f})}function x(f){const g=nt[f];if(!g)return;const p=xt(g).includes(e.condition.op);u({field:f,op:p?e.condition.op:un(g.type),values:p&&g.type===l.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(l.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(l.value.type){case"ip":return"1.2.3.4";case"port":return"443";case"domain":return"example.com";default:return _("rules.valuePlaceholder")}}),y=F(()=>e.condition.op!=="wildcard"?[]:e.condition.values.filter(Boolean).slice(0,4).map(f=>{const g=Lt(f);return`${f} → ${_(`rules.wildcard.${g.kind}`,{value:g.value})}`}));return(f,g)=>(m(),S("div",bn,[O("div",_n,[v(t(je),{"model-value":e.condition.field,options:i.value,"aria-label":t(_)("rules.builder.field"),class:"h-8 min-w-0 flex-1 basis-45 text-xs sm:basis-56","onUpdate:modelValue":x},null,8,["model-value","options","aria-label"]),v(t(je),{"model-value":e.condition.op,options:s.value,"aria-label":t(_)("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",n.condition.negate?"border-block/40 bg-block/10 text-block":"text-muted-foreground hover:bg-accent")),"aria-pressed":e.condition.negate,onClick:g[0]||(g[0]=p=>u({negate:!e.condition.negate}))},$(t(_)("rules.builder.not")),11,xn),e.removable?(m(),B(t(oe),{key:0,variant:"ghost",size:"icon-sm",class:"text-muted-foreground hover:text-destructive shrink-0","aria-label":t(_)("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)]),l.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",e.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))])):l.value.type==="analyzer"?(m(),S("div",wn,[(m(!0),S(ee,null,de(e.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",e.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))])):n.condition.op==="range"?(m(),S("div",Vn,[v(t(tt),{"model-value":e.condition.values[0]??"",inputmode:"numeric",placeholder:"1024",class:"h-8 w-28 text-xs","onUpdate:modelValue":g[2]||(g[2]=p=>u({values:[p,e.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":e.condition.values[1]??"",inputmode:"numeric",placeholder:"65535",class:"h-8 w-28 text-xs","onUpdate:modelValue":g[3]||(g[3]=p=>u({values:[e.condition.values[0]??"",p]}))},null,8,["model-value"])])):e.condition.op==="geoip"||e.condition.op==="geosite"?(m(),B(rn,{key:3,"model-value":e.condition.values,kind:e.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":e.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 _e(n={}){return kt+=1,{id:`c${kt}`,field:"tls.sni",op:"subdomain",negate:!1,values:[],...n}}function et(){return{mode:"and",conditions:[_e()]}}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(n,{emit:a}){const e=n,o=a,l=F(()=>ot(e.modelValue));function r(x){o("update:modelValue",{...e.modelValue,...x})}function i(x,d){const C=[...e.modelValue.conditions];C[x]=d,r({conditions:C})}function s(x){r({conditions:e.modelValue.conditions.filter((d,C)=>C!==x)})}function u(){r({conditions:[...e.modelValue.conditions,_e()]})}return(x,d)=>(m(),S("div",In,[O("div",Sn,[O("span",En,$(t(_)("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(_)(`rules.builder.${C}`)),11,An)),64))]),O("span",Fn,$(t(_)("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(_)(`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(_)("rules.builder.addCondition")),1)]),_:1}),O("div",zn,[O("span",Pn,$(t(_)("rules.builder.preview")),1),O("code",Dn,$(l.value||t(_)("rules.builder.empty")),1)])]))}});function wt(n){const a=n.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 l=[];for(const r of o){const i=Nn(r);if(!i)return null;l.push(i)}return{mode:e,conditions:l}}function Nn(n){let a=n.trim(),e=!1;a.startsWith("!")&&(e=!0,a=a.slice(1).trim());const o=Pe(a);if(o)return _e({field:o.field.key,op:o.op,negate:e,values:[o.value]});const l=pt(a),r=Mt(l,"any");if(r!==null){const[s,u]=ke(r,",").map(d=>d.trim());if(!(u!=null&&u.startsWith("{"))||!u.endsWith("}"))return null;const x=Ce.find(d=>d.iter===s);return x?qt(x,u.slice(1,-1).trim(),e,x.item):null}const i=ke(l,"&&");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 x=Ce.find(d=>d.expr===s[1]&&d.type==="port");return x?_e({field:x.key,op:"range",negate:e,values:[s[2],u[2]]}):null}return null}return i.length>1?null:qt(null,l,e)}function qt(n,a,e,o){const l=Pe(a.trim(),o);if(l&&(!n||l.field.key===n.key))return _e({field:l.field.key,op:l.op,negate:e,values:[l.value]});const r=ke(pt(a),"||");if(r.length<2)return null;const i=[];let s=n;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 _e({field:s.key,op:i[0].op,negate:e,values:i.map(d=>d.value)});const x=i.map(d=>Un(d.op,d.value));return x.some(d=>d===null)?null:_e({field:s.key,op:"wildcard",negate:e,values:x})}function Un(n,a){switch(n){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(n){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===n)-+(e.subject===n)||o.subject.length-e.subject.length)}function Pe(n,a){const e=n.trim(),o=/^([a-z][\w]*)\s*!=\s*nil$/.exec(e);if(o){const l=Ce.find(r=>r.type==="analyzer");if(l)return{field:l,subject:"",op:"detected",value:o[1]}}if(e.startsWith("(")&&Kt(e)){const l=ke(pt(e),"||");if(l.length===2){const r=Pe(l[0].trim(),a),i=Pe(l[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[l,r]of Object.entries(Mn)){const i=Mt(e,l);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]),x=$t(s[1]);return!u||x===null?null:{field:u.field,subject:u.subject,op:r,value:x}}for(const{subject:l,field:r}of Vt(a)){if(!e.startsWith(l))continue;const i=e.slice(l.length).trim();if(i==='!= ""')return{field:r,subject:l,op:"wildcard",value:"*"};for(const[s,u]of Object.entries(Wn)){if(!i.startsWith(s))continue;const x=i.slice(s.length).trim();if(r.type==="port"&&/^\d+$/.test(x)&&u==="is")return{field:r,subject:l,op:u,value:x};const d=$t(x);if(d!==null)return{field:r,subject:l,op:u,value:d}}return null}return null}function Mt(n,a){const e=`${a}(`;if(!n.startsWith(e)||!n.endsWith(")"))return null;const o=n.slice(e.length,-1);return Wt(o)?o:null}function $t(n){if(n.length<2||n[0]!=='"'||n[n.length-1]!=='"')return null;const a=n.slice(1,-1);let e="";for(let o=0;oi.trim()).filter(i=>i.length>0)}function Wt(n){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:_("rules.actionNone")},...(((c=r.value)==null?void 0:c.actions)??[]).map(b=>({value:b,label:_(`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,l.value=c.path,r.value=b}catch(c){x.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,x.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){x.value=b.error??_("rules.invalid");return}e.value=b.rules??[]}a.value=c}catch(b){x.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,x.value="";try{const c=await ye.validateRules(ue());c.valid?Je.success(_("rules.valid")):x.value=c.error??_("rules.invalid")}catch(c){x.value=c instanceof Ee?c.message:String(c)}finally{s.value=!1}}async function T(){s.value=!0,x.value="";try{const c=await ye.saveRules(ue());e.value=c.rules??[],o.value=c.raw,u.value=!1,Je.success(_("rules.saved"),_("rules.count",{n:e.value.length}))}catch(c){x.value=c instanceof Ee?c.message:String(c),Je.error(_("rules.invalid"),x.value)}finally{s.value=!1}}async function M(){s.value=!0,x.value="";try{const c=await ye.rules();e.value=c.rules??[],o.value=c.raw,u.value=!1}catch(c){x.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=_("rules.nameRequired");return}const b=Ve.value.trim();if(!b){K.value=_("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=_("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??_("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(_)("rules.title"),description:t(_)("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(_)("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(_)("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(_)("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(_)("rules.visual")),1)]),_:1}),v(t(Ue),{value:"yaml"},{default:h(()=>[v(t(yt)),H(" "+$(t(_)("rules.yaml")),1)]),_:1})]),_:1})]),_:1},8,["model-value"]),v(t(Te),{variant:"secondary"},{default:h(()=>[H($(t(_)("rules.count",{n:e.value.length})),1)]),_:1}),u.value?(m(),B(t(Te),{key:0,variant:"drop"},{default:h(()=>[H($(t(_)("rules.unsaved")),1)]),_:1})):G("",!0),l.value?(m(),S("span",Gn,$(l.value),1)):G("",!0)]),x.value?(m(),S("p",Xn,$(x.value),1)):G("",!0),v(t(Ye),{"model-value":a.value,"onUpdate:modelValue":P},{default:h(()=>[v(t(_t),{value:"visual"},{default:h(()=>[i.value?(m(),S("div",Jn,$(t(_)("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(_)(`action.${R.action}`)),1)]),_:2},1032,["variant"])):G("",!0),R.log?(m(),B(t(Te),{key:1,variant:"log"},{default:h(()=>[H($(t(_)("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(_)("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(_)("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(_)("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(_)("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(_)("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(_)("rules.add")),1)]),_:1})]))]),_:1}),v(t(_t),{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(_)("rules.hint")),1)]),_:1})]),_:1},8,["model-value"]),v(t(gt),{open:d.value!==null,title:C.value>=0?t(_)("rules.editTitle"):t(_)("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(_)("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(_)("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(_)("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(_)("rules.namePlaceholder")},null,8,["modelValue","placeholder"])]),O("div",io,[O("div",uo,[v(t(Be),null,{default:h(()=>[H($(t(_)("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(_)("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(_)("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(_)("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(_)("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(_)("rules.builder.tab")),1)]),_:1}),v(t(Ue),{value:"expr",class:"text-xs"},{default:h(()=>[v(t(yt)),H(" "+$(t(_)("rules.expr")),1)]),_:1})]),_:1})]),_:1},8,["model-value"])]),f.value&&k.value==="expr"?(m(),S("p",yo,$(t(_)("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(_)("rules.exprPlaceholder"),class:"min-h-28 font-mono text-xs leading-relaxed"},null,8,["modelValue","placeholder"]),O("p",bo,$(t(_)("rules.exprHint")),1)],64))]),K.value?(m(),S("p",_o,$(K.value),1)):G("",!0)],32)):G("",!0)]}),_:1},8,["open","title"]),v(t(gt),{open:I.value>=0,title:t(_)("common.delete"),description:I.value>=0?t(_)("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(_)("common.cancel")),1)]),_:1}),v(t(oe),{variant:"destructive",onClick:b[13]||(b[13]=R=>Ie(I.value))},{default:h(()=>[H($(t(_)("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-CONzBLld.js b/web/dist/assets/Select.vue_vue_type_script_setup_true_lang-CzaVl8rJ.js
similarity index 99%
rename from web/dist/assets/Select.vue_vue_type_script_setup_true_lang-CONzBLld.js
rename to web/dist/assets/Select.vue_vue_type_script_setup_true_lang-CzaVl8rJ.js
index eaa3f84..7480f4c 100644
--- a/web/dist/assets/Select.vue_vue_type_script_setup_true_lang-CONzBLld.js
+++ b/web/dist/assets/Select.vue_vue_type_script_setup_true_lang-CzaVl8rJ.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,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";/**
+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-CwtwoTtI.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-DIqASLVQ.js";/**
* @license lucide-vue-next v0.469.0 - ISC
*
* This source code is licensed under the ISC license.
diff --git a/web/dist/assets/SettingsView-AGyc2AVS.js b/web/dist/assets/SettingsView-DnTtEXx2.js
similarity index 95%
rename from web/dist/assets/SettingsView-AGyc2AVS.js
rename to web/dist/assets/SettingsView-DnTtEXx2.js
index fec1ddb..d6cbc9f 100644
--- a/web/dist/assets/SettingsView-AGyc2AVS.js
+++ b/web/dist/assets/SettingsView-DnTtEXx2.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,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";/**
+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-DIqASLVQ.js";import{_ as J}from"./PageHeader.vue_vue_type_script_setup_true_lang-CD1KTXEu.js";import{_ as x,a as h,c as b,b as K}from"./CardTitle.vue_vue_type_script_setup_true_lang-DKXrNKGt.js";import{_ as P}from"./Select.vue_vue_type_script_setup_true_lang-CzaVl8rJ.js";import"./Collection-CwtwoTtI.js";/**
* @license lucide-vue-next v0.469.0 - ISC
*
* This source code is licensed under the ISC license.
diff --git a/web/dist/assets/Skeleton.vue_vue_type_script_setup_true_lang-B_11D5UP.js b/web/dist/assets/Skeleton.vue_vue_type_script_setup_true_lang-B_11D5UP.js
new file mode 100644
index 0000000..cce089a
--- /dev/null
+++ b/web/dist/assets/Skeleton.vue_vue_type_script_setup_true_lang-B_11D5UP.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-DIqASLVQ.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
deleted file mode 100644
index d526dec..0000000
--- a/web/dist/assets/Skeleton.vue_vue_type_script_setup_true_lang-DG3HTLWx.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-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-_qQ6JBVg.js b/web/dist/assets/TabsTrigger.vue_vue_type_script_setup_true_lang-RkMkvDd1.js
similarity index 98%
rename from web/dist/assets/TabsTrigger.vue_vue_type_script_setup_true_lang-_qQ6JBVg.js
rename to web/dist/assets/TabsTrigger.vue_vue_type_script_setup_true_lang-RkMkvDd1.js
index 2aeaee6..9be18a0 100644
--- 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-RkMkvDd1.js
@@ -1 +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};
+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-DIqASLVQ.js";import{g as M,b as K,a as O,c as L,d as x}from"./Collection-CwtwoTtI.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-DIqASLVQ.js
similarity index 99%
rename from web/dist/assets/index-BKPz7Obh.js
rename to web/dist/assets/index-DIqASLVQ.js
index 199296a..6a3733c 100644
--- a/web/dist/assets/index-BKPz7Obh.js
+++ b/web/dist/assets/index-DIqASLVQ.js
@@ -1,4 +1,4 @@
-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]);
+const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DashboardView-XqZnZd1B.js","assets/format-B6sc_rZ4.js","assets/EventItem.vue_vue_type_script_setup_true_lang--aBz0q7s.js","assets/Badge.vue_vue_type_script_setup_true_lang-DSNeqlXx.js","assets/PageHeader.vue_vue_type_script_setup_true_lang-CD1KTXEu.js","assets/CardTitle.vue_vue_type_script_setup_true_lang-DKXrNKGt.js","assets/Skeleton.vue_vue_type_script_setup_true_lang-B_11D5UP.js","assets/TabsTrigger.vue_vue_type_script_setup_true_lang-RkMkvDd1.js","assets/Collection-CwtwoTtI.js","assets/EventsView-CM65Ezyt.js","assets/Modal.vue_vue_type_script_setup_true_lang-DNsJ6686.js","assets/Select.vue_vue_type_script_setup_true_lang-CzaVl8rJ.js","assets/RulesView-hVmwxU6M.js","assets/AnalyzersView-BWAUI36x.js","assets/SettingsView-DnTtEXx2.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
@@ -103,4 +103,4 @@ var Ga=Object.defineProperty;var Ua=(e,t,n)=>t in e?Ga(e,t,{enumerable:!0,config
*
* 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};
+ */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-XqZnZd1B.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8]))},{path:"events",name:"events",component:()=>Vn(()=>import("./EventsView-CM65Ezyt.js"),__vite__mapDeps([9,2,3,1,4,10,8,11]))},{path:"rules",name:"rules",component:()=>Vn(()=>import("./RulesView-hVmwxU6M.js"),__vite__mapDeps([12,4,8,11,7,10,3]))},{path:"analyzers",name:"analyzers",component:()=>Vn(()=>import("./AnalyzersView-BWAUI36x.js"),__vite__mapDeps([13,4,3,5,6,1]))},{path:"settings",name:"settings",component:()=>Vn(()=>import("./SettingsView-DnTtEXx2.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/index.html b/web/dist/index.html
index f896173..d57182a 100644
--- a/web/dist/index.html
+++ b/web/dist/index.html
@@ -24,7 +24,7 @@
} catch (e) {}
})()
-
+
diff --git a/web/frontend/src/components/rule/ConditionRow.vue b/web/frontend/src/components/rule/ConditionRow.vue
index 4320ac8..83a95a6 100644
--- a/web/frontend/src/components/rule/ConditionRow.vue
+++ b/web/frontend/src/components/rule/ConditionRow.vue
@@ -113,14 +113,14 @@ const wildcardHints = computed(() => {