diff --git a/7z/Makefile b/7z/Makefile index 6ab845470..14a3dd20a 100644 --- a/7z/Makefile +++ b/7z/Makefile @@ -1,8 +1,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=7z -PKG_VERSION:=26.02 -PKG_RELEASE:=3 +PKG_VERSION:=26.03 +PKG_RELEASE:=4 PKG_SOURCE:=$(PKG_NAME)$(subst .,,$(PKG_VERSION))-src.tar.xz PKG_SOURCE_URL:=https://7-zip.org/a/ diff --git a/honk/Makefile b/honk/Makefile index b2d30c1a5..a63cefd58 100644 --- a/honk/Makefile +++ b/honk/Makefile @@ -3,17 +3,17 @@ include $(TOPDIR)/rules.mk PKG_NAME:=honk -PKG_VERSION:=2026.10.4_pre1 -PKG_RELEASE:=7 +PKG_VERSION:=2026.10.4_pre3 +PKG_RELEASE:=8 # Raw upstream release tag. It keeps the dots in qualifiers (e.g. v0.0.1.beta.49) # because that is what the GitHub release asset name uses. -HONK_RELEASE_TAG:=debug.2026.10.4.native-api.1 +HONK_RELEASE_TAG:=debug.2026.10.4.native-api.3 HONK_ASSET_TAG:=debug # SHA256 of each release tarball, kept in sync by scripts/update_honk_version.sh. -HONK_HASH_X86_64:=dfeab5ca18744563c0cb672069fc548744360e3f4b2f35d7be3cfbfef96dbf6c -HONK_HASH_AARCH64:=a17fd9ee544b7671f57defc4c030a7a3620c1ebfdf329e6e2a22050223ddad9e +HONK_HASH_X86_64:=55aa17f673e2908cb8bd537cae2542a0f4c9dc370bf70ad0d9263b48b3bab692 +HONK_HASH_AARCH64:=ac9f1ad0ce7666291915020c4e547ddd4c4cf8c358d12d0ff10c4acde8f69712 PKG_LICENSE:=AGPL-3.0-only PKG_LICENSE_FILE:=LICENSE diff --git a/luci-app-honk/Makefile b/luci-app-honk/Makefile index b71f082c1..1000bdf56 100644 --- a/luci-app-honk/Makefile +++ b/luci-app-honk/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-honk PKG_VERSION:=1.1.4 -PKG_RELEASE:=11 +PKG_RELEASE:=12 LUCI_TITLE:=LuCI support for honk LUCI_PKGARCH:=all diff --git a/luci-app-honk/root/etc/honk/doona/assets/ActionGroup-D3mQjUsw.js b/luci-app-honk/root/etc/honk/doona/assets/ActionGroup-D3mQjUsw.js new file mode 100644 index 000000000..b135403ce --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/ActionGroup-D3mQjUsw.js @@ -0,0 +1 @@ +import{h0 as e,fV as t,dl as a,g7 as n,bs as r,dm as s,fF as o,dx as i,fL as l,h1 as c,go as d,fT as u,h2 as p,dw as f,h3 as g,dy as b,dA as m,dE as h,dF as y,dK as v,gJ as _,dO as w,dP as k,eZ as x,s as S,y as j,at as C,gX as P,W as M,gZ as N,a3 as D,bT as K,h4 as E,L as A,h5 as z,h6 as T,aO as F,g$ as L,h7 as R,g_ as I,h8 as $,h9 as q,ha as O,c8 as G,hb as X,hc as B,aB as V,ab as W,X as U,cO as Y,cn as H,hd as J,fb as Z,R as Q,bF as ee,cZ as te,dQ as ae,c$ as ne,aP as re,bO as se,dR as oe,d0 as ie,d2 as le,d3 as ce,bZ as de,f7 as ue,eP as pe,C as fe,T as ge,he as be,hf as me,hg as he,N as ye,aS as ve,eQ as _e,hh as we,J as ke,eR as xe,hi as Se,eS as je}from"./index-CmbH0woS.js";import{r as Ce,$ as Pe,j as Me}from"./vendor-react-64fcanlc.js";import{c as Ne,d as De,$ as Ke,a as Ee}from"./Select-BcN72K3H.js";function Ae(n,r,s){const{isSelected:o}=r,{isPressed:i,buttonProps:l}=e({...n,onPress:t(r.toggle,n.onPress)},s);return{isPressed:i,isSelected:o,isDisabled:n.isDisabled||!1,buttonProps:a(l,{"aria-pressed":o})}}function ze(e,t,a){let{isDisabled:d}=e,{toolbarProps:u}=function(e,t){const{"aria-label":a,"aria-labelledby":d,orientation:u="horizontal"}=e;let[p,f]=Ce.useState(!1);n(()=>{f(!(!t.current||!t.current.parentElement?.closest('[role="toolbar"]')))});const{direction:g}=r(),b="rtl"===g&&"horizontal"===u;let m=c(t);const h=Ce.useRef(null);return{toolbarProps:{...s(e,{labelable:!0}),role:p?"group":"toolbar","aria-orientation":u,"aria-label":a,"aria-labelledby":null==a?d:void 0,onKeyDownCapture:p?void 0:e=>{if(o(e.currentTarget,i(e))){if("horizontal"===u&&"ArrowRight"===e.key||"vertical"===u&&"ArrowDown"===e.key)b?m.focusPrevious():m.focusNext();else{if(!("horizontal"===u&&"ArrowLeft"===e.key||"vertical"===u&&"ArrowUp"===e.key))return"Tab"===e.key?(h.current=l(),void(e.shiftKey?m.focusFirst():m.focusLast())):void 0;b?m.focusNext():m.focusPrevious()}e.stopPropagation(),e.preventDefault()}},onFocusCapture:p?void 0:e=>{h.current&&!o(e.currentTarget,e.relatedTarget)&&o(t.current,i(e))&&(h.current?.focus(),h.current=null)},onBlurCapture:p?void 0:e=>{o(e.currentTarget,e.relatedTarget)||h.current||(h.current=i(e))}}}}(e,a);return{groupProps:{...u,role:"single"===t.selectionMode?"radiogroup":u.role,"aria-disabled":d}}}function Te(e){let{onMoveStart:t,onMove:a,onMoveEnd:n}=e,r=Ce.useRef({didMove:!1,lastPosition:null,id:null}),{addGlobalListener:s,removeGlobalListener:o}=d(),l=Ce.useCallback((e,n,s,o)=>{0===s&&0===o||(r.current.didMove||(r.current.didMove=!0,t?.({type:"movestart",pointerType:n,shiftKey:e.shiftKey,metaKey:e.metaKey,ctrlKey:e.ctrlKey,altKey:e.altKey})),a?.({type:"move",pointerType:n,deltaX:s,deltaY:o,shiftKey:e.shiftKey,metaKey:e.metaKey,ctrlKey:e.ctrlKey,altKey:e.altKey}))},[t,a,r]),c=u(l),b=Ce.useCallback((e,t)=>{p(),r.current.didMove&&n?.({type:"moveend",pointerType:t,shiftKey:e.shiftKey,metaKey:e.metaKey,ctrlKey:e.ctrlKey,altKey:e.altKey})},[n,r]),m=u(b);return{moveProps:Ce.useMemo(()=>{let e={},t=()=>{g(),r.current.didMove=!1};{let a=e=>{if(e.pointerId===r.current.id){let t=e.pointerType||"mouse";c(e,t,e.pageX-(r.current.lastPosition?.pageX??0),e.pageY-(r.current.lastPosition?.pageY??0)),r.current.lastPosition={pageX:e.pageX,pageY:e.pageY}}},n=e=>{if(e.pointerId===r.current.id){let t=e.pointerType||"mouse";m(e,t),r.current.id=null;let s=f(i(e));o(s,"pointermove",a,!1),o(s,"pointerup",n,!1),o(s,"pointercancel",n,!1)}};e.onPointerDown=e=>{if(0===e.button&&null==r.current.id){t(),e.stopPropagation(),e.preventDefault(),r.current.lastPosition={pageX:e.pageX,pageY:e.pageY},r.current.id=e.pointerId;let o=f(i(e));s(o,"pointermove",a,!1),s(o,"pointerup",n,!1),s(o,"pointercancel",n,!1)}}}let a=(e,a,n)=>{t(),c(e,"keyboard",a,n),m(e,"keyboard")};return e.onKeyDown=e=>{switch(e.key){case"Left":case"ArrowLeft":e.preventDefault(),e.stopPropagation(),a(e,-1,0);break;case"Right":case"ArrowRight":e.preventDefault(),e.stopPropagation(),a(e,1,0);break;case"Up":case"ArrowUp":e.preventDefault(),e.stopPropagation(),a(e,0,-1);break;case"Down":case"ArrowDown":e.preventDefault(),e.stopPropagation(),a(e,0,1)}},e},[s,o,r])}}const Fe=Ce.createContext({}),Le=Ce.createContext(null),Re=Ce.forwardRef(function(e,t){[e,t]=m(e,t,Fe);let n=function(e){let{selectionMode:t="single",disallowEmptySelection:a,isDisabled:n=!1}=e,[r,s]=b(Ce.useMemo(()=>e.selectedKeys?new Set(e.selectedKeys):void 0,[e.selectedKeys]),Ce.useMemo(()=>e.defaultSelectedKeys?new Set(e.defaultSelectedKeys):new Set,[e.defaultSelectedKeys]),e.onSelectionChange);return{selectionMode:t,isDisabled:n,selectedKeys:r,setSelectedKeys:s,toggleKey(e){let n;"multiple"===t?(n=new Set(r),n.has(e)&&(!a||n.size>1)?n.delete(e):n.add(e)):n=new Set(r.has(e)&&!a?[]:[e]),s(n)},setSelected(e,t){t!==r.has(e)&&this.toggleKey(e)}}}(e),{groupProps:r}=ze(e,n,t),o=h({...e,values:{orientation:e.orientation||"horizontal",isDisabled:n.isDisabled,state:n},defaultClassName:"react-aria-ToggleButtonGroup"}),i=s(e,{global:!0});return Pe.createElement(y.div,{...a(i,o,r),ref:t,slot:e.slot||void 0,"data-orientation":e.orientation||"horizontal","data-disabled":e.isDisabled||void 0},Pe.createElement(Le.Provider,{value:n},Pe.createElement(v,null,o.children)))}),Ie=Ce.createContext({}),$e=Ce.forwardRef(function(e,t){[e,t]=m(e,t,Ie);let n=Ce.useContext(Le),r=_(n&&null!=e.id?{isSelected:n.selectedKeys.has(e.id),onChange(t){n.setSelected(e.id,t)}}:e),{buttonProps:o,isPressed:i,isSelected:l,isDisabled:c}=n&&null!=e.id?function(e,t,a){let n={isSelected:t.selectedKeys.has(e.id),defaultSelected:!1,setSelected(a){t.setSelected(e.id,a)},toggle(){t.toggleKey(e.id)}},{isPressed:r,isSelected:s,isDisabled:o,buttonProps:i}=Ae({...e,id:void 0,isDisabled:e.isDisabled||t.isDisabled},n,a);return"single"===t.selectionMode&&(i.role="radio",i["aria-checked"]=n.isSelected,delete i["aria-pressed"]),{isPressed:r,isSelected:s,isDisabled:o,buttonProps:i}}({...e,id:e.id},n,t):Ae({...e,id:null!=e.id?String(e.id):void 0},r,t),{focusProps:d,isFocused:u,isFocusVisible:p}=w(e),{hoverProps:f,isHovered:g}=k({...e,isDisabled:c}),b=h({...e,id:void 0,values:{isHovered:g,isPressed:i,isFocused:u,isSelected:r.isSelected,isFocusVisible:p,isDisabled:c,state:r},defaultClassName:"react-aria-ToggleButton"}),v=s(e,{global:!0});return delete v.id,delete v.onClick,Pe.createElement(y.button,{...a(v,b,o,d,f),ref:t,slot:e.slot||void 0,"data-focused":u||void 0,"data-disabled":c||void 0,"data-pressed":i||void 0,"data-selected":l||void 0,"data-hovered":g||void 0,"data-focus-visible":p||void 0},Pe.createElement(x.Provider,{value:{isSelected:l}},b.children))}),qe={traffic_history:"record_traffic",memory_history:"record_memory",logs:"record_logs",dns_log:"record_dns_log",flows:"record_flows"},Oe=e=>({code:"recorder-off",settings:[{key:e,value:"true"}]}),Ge={code:"build-lacks"};const Xe=new Set(["native_api","clash_api"]),Be=e=>e.some(e=>Xe.has(e.name)||Be(e.children)),Ve={id:"honk",flowDemandGraceSeconds:60,globalSettings:{name:"global",fields:[{key:"lan_interface",label:"config.global.lan_interface",group:"interfaces",type:"list",bareItems:!0},{key:"wan_interface",label:"config.global.wan_interface",group:"interfaces",type:"list",bareItems:!0},{key:"tproxy_port",label:"config.global.tproxy_port",group:"interfaces",type:"integer",max:"65535"},{key:"tproxy_port_protect",label:"config.global.tproxy_port_protect",group:"interfaces",type:"boolean"},{key:"so_mark_from_dae",label:"config.global.so_mark_from_dae",group:"interfaces",type:"integer",max:"1073741823",hexMax:"4294967295"},{key:"pprof_port",label:"config.global.pprof_port",group:"interfaces",type:"integer",max:"65535"},{key:"auto_config_kernel_parameter",label:"config.global.auto_config_kernel_parameter",group:"interfaces",type:"boolean"},{key:"disable_waiting_network",label:"config.global.disable_waiting_network",group:"interfaces",type:"boolean"},{key:"nfqueue_enable",label:"config.global.nfqueue_enable",group:"interfaces",type:"boolean"},{key:"log_level",label:"config.global.log_level",group:"logging",type:"text",choices:["trace","debug","info","warn","error","off"]},{key:"log_file",label:"config.global.log_file",group:"logging",type:"text"},{key:"tcp_check_url",label:"config.global.tcp_check_url",group:"checks",type:"list"},{key:"tcp_check_http_method",label:"config.global.tcp_check_http_method",group:"checks",type:"text"},{key:"udp_check_dns",label:"config.global.udp_check_dns",group:"checks",type:"list"},{key:"check_interval",label:"config.global.check_interval",group:"checks",type:"duration",units:["","ms","s","m","h"]},{key:"check_tolerance",label:"config.global.check_tolerance",group:"checks",type:"duration",units:["","ms","s"]},{key:"dial_mode",label:"config.global.dial_mode",group:"dialing",type:"text",choices:["ip","domain","domain+","domain++"]},{key:"sniffing_timeout",label:"config.global.sniffing_timeout",group:"dialing",type:"duration",units:["","ms","s"]},{key:"max_concurrent_dials",label:"config.global.max_concurrent_dials",group:"dialing",type:"integer",max:"18446744073709551615"},{key:"mptcp",label:"config.global.mptcp",group:"dialing",type:"boolean"},{key:"bootstrap_resolver",label:"config.global.bootstrap_resolver",group:"dialing",type:"text"},{key:"fallback_resolver",label:"config.global.fallback_resolver",group:"dialing",type:"text"},{key:"allow_insecure",label:"config.global.allow_insecure",group:"dialing",type:"boolean"},{key:"tls_implementation",label:"config.global.tls_implementation",group:"dialing",type:"text"},{key:"utls_imitate",label:"config.global.utls_imitate",group:"dialing",type:"text"},{key:"tls_fragment",label:"config.global.tls_fragment",group:"dialing",type:"boolean"},{key:"tls_fragment_length",label:"config.global.tls_fragment_length",group:"dialing",type:"text"},{key:"tls_fragment_interval",label:"config.global.tls_fragment_interval",group:"dialing",type:"text"},{key:"bandwidth_max_tx",label:"config.global.bandwidth_max_tx",group:"bandwidth",type:"text"},{key:"bandwidth_max_rx",label:"config.global.bandwidth_max_rx",group:"bandwidth",type:"text"},{key:"udp_warm_node_count",label:"config.global.udp_warm_node_count",group:"bandwidth",type:"integer",max:"18446744073709551615"},{key:"preconnect_node_count",label:"config.global.preconnect_node_count",group:"bandwidth",type:"integer",max:"18446744073709551615",choices:["auto"]},{key:"data_dir",label:"config.global.data_dir",group:"storage",type:"text"},{key:"store_subscribe",label:"config.global.store_subscribe",group:"storage",type:"boolean"}]},reason:function(e,t,a){const n=t.resources;if(t.unreported?.includes(e))return Ge;if(("flows"===e||"logs"===e||"dns_log"===e)&&!1===a?.[e]?.allowed)return Oe(qe[e]);switch(e){case"config":return n.config.available?!1===n.config.writable?{code:"writes-off",settings:[{key:"config_write",value:"true"}]}:void 0:{code:"config-unloaded"};case"manage":return{code:"main-file-read-only"};case"probes":case"subscriptions":return{code:"starting-or-stopping"};case"geodata":if(!n.geodata.available)return{code:"geodata-mismatch"};if(!0===n.geodata.configurable_sources)return;return{code:"no-download-urls",settings:[{key:"geosite_download_url",value:"'https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/release/geosite.dat'"},{key:"geoip_download_url",value:"'https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/release/geoip.dat'"}]};case"flows":{if(!n.flows.available)return Ge;const e=n.runtime_settings;return!e.available||!e.fields||e.fields.includes("flows.max_flows")?{code:"recorded-on-demand"}:Oe("record_flows")}default:{const t=qe[e];return t?Oe(t):Ge}}},uncheckedHooks:["cgroup","sk_lookup","dae0peer"],holdsCredentials:e=>Be(S(e.content).blocks),snippet:e=>["experimental {"," native_api {",...e.map(({key:e,value:t})=>` ${e}: ${t}`)," }","}"].join("\n"),settingName:e=>`experimental.native_api.${e}`,redactedSections:e=>e.filter(e=>"experimental"===e.name&&e.children.some(e=>"native_api"===e.name)).map(e=>({block:e,name:"experimental.native_api"})),daeText:!0},We={id:"unknown",reason:()=>{},holdsCredentials:()=>!1,snippet:e=>e.map(({key:e,value:t})=>`${e}: ${t}`).join("\n"),settingName:e=>e,redactedSections:()=>[],daeText:!1,globalSettings:null,flowDemandGraceSeconds:null,uncheckedHooks:[]};function Ue(e){return"honk"===e?.engine.name?Ve:We}const Ye={ss:{connect:!0,stream:!0,udp:!0},socks5:{connect:!0,stream:!0,udp:!0},vmess:{connect:!0,stream:!0,udp:!1},vless:{connect:!0,stream:!0,udp:null},trojan:{connect:!0,stream:!0,udp:null},anytls:{connect:!0,stream:!0,udp:null},hysteria2:{connect:!1,stream:!0,udp:!0},tuic:{connect:!1,stream:!0,udp:!0},juicity:{connect:!1,stream:!0,udp:!0},direct:{connect:!1,stream:!0,udp:!0},block:{connect:!1,stream:!1,udp:!1}};function He(e){const t="shadowsocks"===e?"ss":e;return(t&&Object.hasOwn(Ye,t)?Ye[t]:void 0)??{connect:!1,stream:!1,udp:!1}}const Je=[{id:"http",label:"probe.http",kind:"http",transport:["tcp"]},{id:"tcp_connect",label:"probe.tcp",kind:"tcp_connect",transport:["tcp"]},{id:"dns_tcp",label:"probe.dnsTcp",kind:"dns",transport:["tcp"]},{id:"dns_udp",label:"probe.dnsUdp",kind:"dns",transport:["udp"]},{id:"dns_both",label:"probe.dnsBoth",kind:"dns",transport:["tcp","udp"]}];function Ze(e,t){return e.find(e=>e.id===t)??e.find(e=>"http"===e.id)??e[0]??null}const Qe={choice:"http",family:"auto",cold:!1,leaves:!1};let et;const tt=new Set,at=()=>et??=function(e){let t,a=null;try{a=(e??localStorage).getItem(j.latencyProbe)}catch{}if(!a)return Qe;try{t=JSON.parse(a)}catch{return{...Qe,choice:a}}return{choice:"string"==typeof t?.choice?t.choice:Qe.choice,family:"ipv4"===t?.family||"ipv6"===t?.family?t.family:"auto",cold:!0===t?.cold,leaves:!0===t?.leaves}}(),nt=e=>(tt.add(e),()=>tt.delete(e));function rt(e,t){et={...at(),...e};try{(t??localStorage).setItem(j.latencyProbe,JSON.stringify(et))}catch{}tt.forEach(e=>e())}const st=()=>Ce.useSyncExternalStore(nt,at);function ot(e,t,a,n){const r=e?.resources.probes;return r?.available&&r.targets?.includes(t)&&r.ip_versions?.length?Je.filter(e=>r.kinds?.includes(e.kind)&&(!n||n.every(t=>function(e,t,a){const n=He(e);return"tcp_connect"===t?n.connect&&a.every(e=>"tcp"===e):n.stream&&a.every(e=>"tcp"===e||"dns"===t&&!1!==n.udp)}(t,e.kind,e.transport)))&&e.transport.every(e=>r.transports?.includes(e)&&(!a||a.capabilities.probe_transports.includes(e)))):[]}function it(e,t,a=Qe,n,r){const s=Ze(ot(e,t.type,n,r),a.choice);if(!s)return null;const o=e.resources.probes.ip_versions,i=o.includes("ipv4")?o.includes("ipv6")?"any":"ipv4":"ipv6";return{target:t,kind:s.kind,transport:[...s.transport],ip_version:"auto"!==a.family&&o.includes(a.family)?a.family:i,warmth:a.cold?"cold":"warm",..."group"===t.type?{members:a.leaves?"leaves":"direct"}:{}}}function lt(e,t){const a=Je.find(t=>t.id===e),n=Je.find(e=>e.kind===t.kind&&e.transport.join()===t.transport.join());return a&&n&&a.id!==n.id?{from:a.label,to:n.label}:void 0}function ct(e=!0){const t=C();return P({key:["nodes"],every:F.inventory,fetch:e=>L(a=>t.nodes({cursor:a,limit:R},e),(e,t)=>e?(e.push(...t.nodes),e):[...t.nodes])},{enabled:e})}function dt(e=!0){const t=C(),{data:a,error:n}=M(),r=N(a,a?.resources.providers.max_page_size);return P({key:["providers",{limit:r}],every:F.inventory,fetch:e=>L(a=>t.providers({cursor:a,limit:r},e),(e,t)=>e?(e.providers.push(...t.providers),e):{...t,providers:[...t.providers]})},I(a,n,e))}function ut(e){const t=C(),{busy:a,run:n}=D({rethrow:!0}),r=Ce.useCallback(async(a,n)=>{const r=await t.refreshProvider(a,n),s=await T(t,r,n);return e(),z(s,"provider_refresh")},[t,e]);return{busy:a,refresh:Ce.useCallback(e=>n(e,t=>r(e,t)),[n,r]),refreshMany:Ce.useCallback((e,t,a)=>n("*",async n=>{let s=0;for(const i of e){if(n.aborted)break;try{"degraded"in await r(i,n)&&a(i),s+=1}catch(o){if(n.aborted)break;t(i,o)}}return s}),[n,r])}}function pt(e){const t=C(),{busy:a,run:n}=D({rethrow:!0}),r=Ce.useCallback(t=>(e(),t),[e]),s=Ce.useCallback((t,a)=>{if(!(t instanceof K&&409===t.status&&"state_conflict"===t.code))throw E(t)??t;if(e(),a&&!t.details?.groups)throw new A("config.changedMeanwhile");throw t},[e]),o=Ce.useCallback(async(e,a,n)=>{const o=await a.catch(t=>s(t,e.endsWith("_delete"))),i="operation_id"in o?z(await T(t,o,n),e):o;return r(i)},[t,r,s]);return{busy:a,addProvider:Ce.useCallback(e=>n("provider",a=>o("provider_create",t.createProvider(e,a),a)),[t,n,o]),removeProvider:Ce.useCallback(e=>n(e,a=>o("provider_delete",t.deleteProvider(e,a),a)),[t,n,o]),addNode:Ce.useCallback(e=>n("node",a=>o("node_create",t.createNode(e,a),a)),[t,n,o]),removeNode:Ce.useCallback(e=>n(e,a=>o("node_delete",t.deleteNode(e,a),a)),[t,n,o])}}function ft(e){const t=st(),a=C(),n=M(),{busy:r,run:s}=D({rethrow:!0}),o=Ce.useCallback(e=>ot(n.data,"node",void 0,[e.protocol]),[n.data]);return{busy:r,probe:Ce.useCallback((r,o=t)=>{const i=it(n.data,{type:"node",node_id:r.id},o,void 0,[r.protocol]);return i?s(r.id,async t=>{const n=await a.startProbe(i,t),r=await T(a,n,t);return e(),{...z(r,"probe"),fallback:lt(o.choice,i)}}):Promise.resolve(void 0)},[a,n.data,t,s,e]),choices:o}}function gt(e=!0){const t=C(),a=P({key:["geodata"],every:0,fetch:e=>t.geodata(e)},{enabled:e}),{refetch:n}=a,{busy:r,run:s}=D({rethrow:!0}),o=Ce.useCallback(()=>s("update",async e=>{const a=await t.updateGeodata(e),r=await T(t,a,e);return n(),z(r,"geodata_update")}),[t,s,n]);return{...a,busy:null!==r,update:o}}function bt(e){return e instanceof K&&(409===e.status||412===e.status)}function mt(e=!0,t=F.inventory){const a=C();return P({key:["groups"],every:t,fetch:e=>a.groups(e)},{enabled:e})}function ht(e,t,a,n=!1){const r=st(),s=C(),o=M().data,i=ct().data,l=P({key:["group",{id:e}],every:F.inventory,fetch:t=>s.group(e,t)},{paused:n}),{refetch:c}=l,d=Ce.useMemo(()=>l.data&&function(e,t){const a=t?.resources.groups,n=!!a?.available&&!1!==a.selection,r=!!a?.available&&!1!==a.config_patch;if(n&&r)return e;const{can_select:s,can_override:o,mutable_config:i}=e.capabilities;return{...e,capabilities:{...e.capabilities,can_select:n&&s,can_override:n&&o,mutable_config:r?i:[]}}}(l.data,o),[l.data,o]),[u,p]=$(`group-network:${e}`,"both"),f=D({shared:`group-action:${e}`}),{run:g}=f,b=Ce.useCallback(()=>Promise.all([c(),t(),a()]),[c,t,a]),m=Ce.useCallback(async(e,t)=>{const a=await g(e,t);return void 0!==a&&b(),a},[g,b]),h=l.data?.members.some(e=>"group"===e.kind)??!1,{data:y}=P({key:["groupProbeMembers",{id:e,revision:l.data?.config_revision}],every:F.inventory,fetch:e=>async function(e,t,a){const n=new Set,r=async t=>n.has(t.id)?[]:(n.add(t.id),(await Promise.all(t.members.map(async t=>"node"===t.kind?[t.id]:r(await e.group(t.id,a))))).flat());return r(t)}(s,l.data,e)},{enabled:h,paused:n}),v=Ce.useMemo(()=>l.data&&i?(h&&y||l.data.members.filter(e=>"node"===e.kind).map(e=>e.id)).map(e=>i.find(t=>t.id===e)?.protocol??null):[null],[l.data,i,h,y]),_=it(o,{type:"group",group_id:e},r,l.data,v),w=o?.resources.probes.limits,k=null!==_&&!!w&&w.max_members_per_job>0&&w.max_results_per_job>=_.transport.length*("any"===_.ip_version?2:1)&&!!l.data?.members.length&&_.transport.every(e=>l.data.capabilities.probe_transports.includes(e)),x=Ce.useCallback(e=>m("config",async t=>{if(!l.data)throw new A("ui.groupNotLoaded");try{await async function(e,t,a,n){const r=await e.patchGroup(t.id,a,O(t.config_revision),n).catch(e=>{throw E(e)??e});"operation_id"in r&&z(await T(e,r,n),"group_update",{written:!0})}(s,l.data,e,t)}catch(a){throw bt(a)&&c(),a}return!0}),[s,l.data,m,c]);return{...l,data:d,actionError:f.error,network:u,setNetwork:p,busy:f.busy,canProbe:k,probeChoices:l.data?ot(o,"group",l.data,v):[],select:Ce.useCallback(t=>m("selection",a=>s.selectGroup(e,{member_id:t,network:u},a).catch(q(b,a))),[s,e,u,m,b]),clearOverride:Ce.useCallback((t=u)=>m("selection",a=>s.clearGroupOverride(e,t,a).catch(q(b,a))),[s,e,u,m,b]),probe:Ce.useCallback(t=>m("probe",async a=>{if(!o||!l.data||!t&&!k)throw new A("ui.probeUnsupported");try{const n=t??r,i=it(o,{type:"group",group_id:e},n,l.data,v),c=await async function(e,t,a,n,r=it(t,{type:"group",group_id:a.id})){const s=t.resources.probes.limits;if(!r||!s||r.transport.some(e=>!a.capabilities.probe_transports.includes(e)))throw new A("ui.probeUnsupported");const o=r.transport.length*("any"===r.ip_version?2:1),i=Math.min(s.max_members_per_job,Math.floor(s.max_results_per_job/o));if(i<1||!a.members.length)throw new A("ui.probeUnsupported");if("leaves"===r.members&&(a.members.length<=i||a.members.some(e=>"group"===e.kind)))return z(await T(e,await e.startProbe(r,n),n),"probe");let l;try{for(let t=0;te.id),o=await e.startProbe({...r,members:s},n),c=z(await T(e,o,n),"probe");l?(l.results.push(...c.results),l.selection_after=c.selection_after,l.selection_changed.tcp||=c.selection_changed.tcp,l.selection_changed.udp||=c.selection_changed.udp):l=c}}catch(c){if(n.aborted||!l)throw c;throw Object.assign(new A("ui.operationFailed"),{cause:c,partialResult:l,completed:new Set(l.results.map(e=>e.member_id)).size,total:a.members.length})}return l}(s,o,l.data,a,i);return{...c,fallback:i?lt(n.choice,i):void 0}}catch(n){throw a.aborted||b(),n}}),[s,e,o,l.data,v,r,k,m,b]),patchConfig:x,setInterrupt:Ce.useCallback(e=>x([{op:"replace",path:"/config/interrupt_connections",value:e||null!==l.data?.config.interrupt_connections?e:null}]),[x,l.data])}}const yt=new WeakMap;function vt(e,t,a){const n=["connections",{src:t}],r=G(n);return{key:n,every:a,fetch:async a=>{const n=await e.connections({type:"all",detail:"full",limit:R,src:t},a);let s=yt.get(e);s||yt.set(e,s=new Map);for(const t of s.keys())t===r||X(e,t)||s.delete(t);void 0===B(e,r).data&&s.delete(r);const{list:o,baseline:i}=function(e,t){const a=e?.instance_id===t.instance_id?e:void 0,n=a?Date.parse(t.observed_at)-Date.parse(a.observed_at):NaN,r=n[e.id,e]):[]),o=e=>{const t=s.get(e.id);let a=e;for(const s of kt){const o=`${s}_bytes_per_second`;if(null!==e[o])continue;let i=null;if(t&&r)i=t[o];else if(t){const a=V(t[`${s}_bytes`]),r=V(e[`${s}_bytes`]);null!==a&&null!==r&&r>=a&&(i=String(1000n*(r-a)/BigInt(n)))}null!==i&&(a={...a,[o]:i})}return a},i={...t,tcp:t.tcp.map(o),udp:t.udp.map(o)};return{list:i,baseline:a&&r?a:i}}(s.get(r),n);return s.set(r,i),o}}}function _t(e,t=!0,a=!1,n){return P(vt(C(),e,n),{enabled:t,paused:a})}const wt=1e3,kt=["upload","download"];const xt=e=>e instanceof K&&413===e.status,St=(e,t)=>{e.closed+=t.closed,e.skipped+=t.skipped};async function jt(e,t,a){const n={closed:0,skipped:0};for(const s of t)try{await e.closeConnection(s,a),n.closed+=1}catch(r){if(!(r instanceof K)||409!==r.status&&404!==r.status)throw r;n.skipped+=1}return n}async function Ct(e,t,a){const n=t.type??"all";let r=0;for(;;){const o={closed:0,skipped:0};try{return St(o,await e.closeConnections(t,a)),{closed:r+o.closed,skipped:o.skipped}}catch(s){if(!xt(s))throw s}if("all"===n){for(const n of["tcp","udp"])St(o,await Ct(e,{...t,type:n},a));return{closed:r+o.closed,skipped:o.skipped}}const i=await e.connections({type:n,src:t.src,detail:"full",limit:R},a),l=i[n],c=new Map;for(const e of l){const a=t.src??W(e.src??void 0);c.set(a,(c.get(a)??[]).concat(e.id))}for(const[r,s]of c)St(o,r&&!t.src?await Ct(e,{type:n,src:r},a):await jt(e,s,a));if(r+=o.closed,!o.closed)return{closed:r,skipped:"tcp"===n?i.total_tcp:i.total_udp}}}function Pt(e){const t=C(),{busy:a,run:n,cancel:r}=D({rethrow:!0}),s=Ce.useCallback(a=>n("all",async n=>{try{if(a.query&&!a.ids.length)return await Ct(t,a.query,n);if(a.query)try{return await t.closeConnections(a.query,n)}catch(r){if(!xt(r))throw r}return await jt(t,a.ids,n)}finally{e()}}),[t,n,e]);return{busy:a,cancel:r,close:Ce.useCallback(a=>n(a,async n=>(await t.closeConnection(a,n),e(),!0)),[t,n,e]),closeAll:s}}function Mt(e,t=!0,a=!1){const n=C(),r=e.name?.trim()||void 0,s=e.type&&"all"!==e.type?e.type:void 0,o=e.src?.trim()||void 0,i=function(e){const t=N(e,e?.resources.dns_log.max_page_size);return void 0===t?void 0:Math.min(100,t)}(M().data),l=P({key:["dnsLog",{name:r,type:s,src:o,limit:i}],fetch:async e=>{const t=await async function(e,t,a){try{return{page:await e(t),limit:t.limit}}catch(n){const{limit:r}=t;if(!Y(n)||void 0===r||r<2)throw n;await H(n.retryAfter,a);const s=Math.ceil(r/4);return{page:await e({...t,limit:s}),limit:s}}}(t=>n.dnsLog(t,e),{name:r,type:s,src:o,limit:i},e);return{...t.page,limit:t.limit}}},{enabled:t,paused:a});return{...l,limit:l.data?l.data.limit:i}}const Nt=new WeakMap,Dt=new WeakMap;async function Kt(e,t,a=!1){const n=Dt.get(e)??0,r=await async function(e,t,a=!1){const n=()=>L(n=>e.dnsCache({cursor:n,limit:R,detail:"summary",...a&&{include_expired:!0}},t),(e,t)=>e?(e.entries.push(...t.entries),e):{...t,entries:[...t.entries]});try{return await n()}catch(r){if(!Y(r))throw r;return await H(r.retryAfter,t),n()}}(e,t,a);return a||(Dt.get(e)??0)!==n||Nt.set(e,{at:Date.now(),list:{...r,entries:[]}}),r}const Et=e=>{Dt.set(e,(Dt.get(e)??0)+1),Nt.delete(e)};function At(e,t,a){return e.deleteDnsEntry(t,a).finally(()=>Et(e))}function zt(e=!0,t=!1){const a=C();return P({key:["dnsCache",{usage:!0}],every:F.background,fetch:e=>function(e,t){const a=Nt.get(e);return a&&Date.now()-a.atKt(n,e,a)},{enabled:e,paused:t})}(U(r,"dns_cache",{whileLoading:!1})&&!!r?.dns_cache.read,e,t),{refetch:o}=s,{busy:i,error:l,run:c,cancel:d}=D({rethrow:!0});return{capabilities:n,cache:s,busy:i,error:l,cancel:d,remove:Ce.useCallback(e=>c(e,async t=>{const n=await At(a,e,t);return o(),n}),[a,c,o]),removeName:Ce.useCallback(e=>c("delete-match",async t=>{const n=await function(e,t,a){return e.deleteDnsCacheByName(t,a).finally(()=>Et(e))}(a,e,t);return o(),n}),[a,c,o]),removeMany:Ce.useCallback(e=>c("delete-match",async t=>{try{return await async function(e,t,a){let n=0,r=0,s=0;return await Promise.all(Array.from({length:Math.min(4,t.length)},async()=>{for(;nc("flush",async e=>{const t=await function(e,t){return e.flushDnsCache(t).finally(()=>Et(e))}(a,e);return o(),t}),[a,c,o])}}async function Ft(e,t,a,n,r,s="normal",o){const i=Math.max(1,Math.floor(n));let l;for(let c=0;ce.id,every:r=100}={}){const s=new Map,o=new Set,i=new Set;let l,c={records:[],gaps:new Set(o),pending:0,...t},d=!1,u=!1,p=!1,f=!1,g=0,b=0;const m=()=>{if(l=void 0,document.hidden||!d)return;if(f&&!p)return;d=!1,p=!1;const e=f||!u,a=e?c.records:[...s.values()].reverse();f||(u=!1),c={records:a,gaps:e?c.gaps:new Set(o),pending:g,...t},i.forEach(e=>e())},h=(e=100)=>{if(d=!0,document.hidden||!i.size)return;const t=Date.now()+e;void 0!==l&&b<=t||(clearTimeout(l),b=t,l=window.setTimeout(m,e))},y=()=>{document.hidden?(clearTimeout(l),l=void 0):m()};return{getSnapshot:()=>c,subscribe:e=>(i.add(e),1===i.size&&(document.addEventListener("visibilitychange",y),d&&h(r)),()=>{i.delete(e),i.size||(document.removeEventListener("visibilitychange",y),clearTimeout(l),l=void 0)}),append(t){const i=n(t);if(!s.has(i)||"ignore"!==a&&s.get(i)!==t){if(s.set(i,t),s.size>e){const[e,t]=s.entries().next().value;s.delete(e),o.delete(t)}u=!0,f&&(g++,p=!0),h(r)}},update(e){Object.entries(e).every(([e,a])=>t[e]===a)||(t={...t,...e},p=!0,h())},clear(){s.clear(),o.clear(),g=0,c={...c,records:[],gaps:new Set,pending:g},p=!0,h()},markGap(){const e=[...s.values()].at(-1);e&&!o.has(e)&&(o.add(e),u=!0,h(r))},hold(e){f=e,g=0,e||h()}}}const Rt=()=>Lt(Z,{},"replace",{key:e=>`${e.event} ${e.id}`}),It=1e3,$t=()=>()=>{},qt={records:[]};function Ot(e){const t=Ce.useMemo(()=>({changes:Rt(),runtime:Rt()}),[]),a=Ce.useSyncExternalStore(t.changes.subscribe,t.changes.getSnapshot),n=Ce.useSyncExternalStore(e?t.runtime.subscribe:$t,e?t.runtime.getSnapshot:()=>qt);return{...J(e=>("runtime.updated"===e.event?t.runtime:t.changes).append(e),!0),events:Ce.useMemo(()=>{if(!n.records.length)return a.records;if(!a.records.length)return n.records;const e=new Map([...a.records,...n.records].map(e=>[e,Date.parse(e.data.observed_at)]));return[...e.keys()].sort((t,a)=>e.get(a)-e.get(t))},[a.records,n.records])}}const Gt=new WeakMap;function Xt(e){const t=Ce.useContext(Q),a=Ce.useContext(ee),n=function(e){let t=Gt.get(e);return t||Gt.set(e,t=Lt(Z,{},"replace")),t}(C()),{records:r}=Ce.useSyncExternalStore(n.subscribe,n.getSnapshot),s=J(t=>{e(t)&&n.append(t)},!0),o=t?a?.get("notices",r):void 0;return{...s,records:void 0!==o?o:r}}function Bt({level:e,target:t,paused:a}){const n=C(),r=M(),s=r.data?.resources.logs.available,o=Ce.useRef(()=>{}),i=Ce.useMemo(()=>{const a=Lt(1e3,{connected:!1,error:null},"ignore",{every:250});return{getSnapshot:a.getSnapshot,clear:a.clear,hold:a.hold,subscribe(r){const i=a.subscribe(r);let l=new AbortController;const c=()=>{l=new AbortController;const{signal:r}=l;a.update({error:null}),s&&n.subscribeLogs({level:e,target:t||void 0,signal:r,onConnectionChange:e=>{r.aborted||a.update({connected:e})},onRecord:e=>{r.aborted||a.append(e)},onCursorExpired:()=>{r.aborted||a.markGap()}}).catch(e=>{r.aborted||a.update({error:e instanceof Error?e:new Error(String(e))})})};return c(),o.current=()=>{l.abort(),c()},()=>{l.abort(),o.current=()=>{},i()}}}},[n,s,e,t]);return Ce.useEffect(()=>i.hold(a),[i,a]),{...Ce.useSyncExternalStore(i.subscribe,i.getSnapshot),available:s,clear:i.clear,retry:()=>o.current()}}function Vt({label:e,items:t,value:a,onChange:n,isDisabled:r,side:s,bare:o,cut:i,takeFocus:l,size:c,description:d}){const u=o?void 0:s?"side":"field",p=te(c);return Me.jsxs(Ne,{"aria-label":u?void 0:e,className:de("rp-picker","field"===u&&"rp-field","side"===u&&"rp-cluster"),selectedKey:a,onSelectionChange:e=>{null!=e&&n(String(e))},isDisabled:r,children:[u&&Me.jsx(ae,{className:"field"===u?"lbl":"rp-label",children:e}),Me.jsxs(ne,{className:"rp-selectbtn","data-size":p,autoFocus:l,children:[Me.jsx(De,{children:({selectedItem:e})=>e?Me.jsx(re,{i:e,cut:i}):a}),Me.jsx(se,{})]}),d&&Me.jsx(oe,{slot:"description",className:"rp-label",children:d}),Me.jsx(ie,{className:"rp-popover",placement:"bottom start",children:Me.jsx(Ke,{items:t,children:e=>Me.jsxs(Ee,{id:e.id,className:"rp-item",textValue:e.label,children:[Me.jsx(le,{}),Me.jsx(ce,{i:e})]})})})]})}function Wt({items:e,value:t,onChange:a,label:n,isDisabled:r,fill:s,size:o="M"}){const[i,l]=ue(t),c=pe(i,e.flat().join("\n")),d=Ce.useRef(null),u=Ce.useRef(!1),p=Ce.useCallback(e=>(d.current=e,()=>{u.current=e.contains(document.activeElement),d.current=null}),[]);return Ce.useLayoutEffect(()=>{c&&i.current?.contains(document.activeElement)&&d.current?.querySelector("button")?.focus(),!c&&u.current&&i.current&&(getComputedStyle(i.current).visibility,i.current.querySelector("[data-selected]")?.focus()),u.current=!1},[i,c]),Me.jsxs("div",{className:"rp-segfit","data-collapsed":c||void 0,"data-fill":s||void 0,children:[Me.jsxs(Re,{ref:i,className:"rp-seg","data-size":o,"aria-label":n,isDisabled:r,selectionMode:"single",disallowEmptySelection:!0,selectedKeys:[t],onSelectionChange:e=>{const t=[...e][0];null!=t&&a(String(t))},children:[l&&Me.jsx("span",{className:"rp-slider","data-still":l.still||void 0,style:{left:l.x,width:l.w}}),e.map(([e,t])=>Me.jsx($e,{id:e,className:"rp-btn","data-size":o,children:t},e))]}),c&&Me.jsx("div",{ref:p,className:"rp-segpick",children:Me.jsx(Vt,{bare:!0,size:o,label:n,value:t,onChange:a,isDisabled:r,items:e.map(([e,t])=>({id:e,label:t}))})})]})}const Ut=["fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontFamily","letterSpacing","fontFeatureSettings","fontVariationSettings","fontKerning","textTransform"],Yt=new Map;let Ht=null;function Jt({labels:e,children:t}){const a=Ce.useRef(null),[n,r]=Ce.useState(0),s=e.join("\0");return Ce.useLayoutEffect(()=>{const e=a.current;if(!e)return;const t=()=>r(function(e,t){const a=getComputedStyle(e),n=[...Ut.map(e=>a[e]),...t].join("\0"),r=Yt.get(n);if(void 0!==r)return r;Ht||(Ht=document.createElement("span"),Ht.setAttribute("aria-hidden","true"),Object.assign(Ht.style,{position:"absolute",insetInlineStart:"-10000px",top:"0",visibility:"hidden",whiteSpace:"pre"}),document.fonts?.addEventListener("loadingdone",()=>Yt.clear())),Ht.isConnected||document.body.append(Ht);for(const o of Ut)Ht.style[o]=a[o];let s=0;for(const o of t)Ht.textContent=o,s=Math.max(s,Ht.getBoundingClientRect().width);return Yt.size>64&&Yt.clear(),Yt.set(n,Math.ceil(s)),Math.ceil(s)}(e,s?s.split("\0"):[]));return t(),document.fonts?.addEventListener("loadingdone",t),()=>document.fonts?.removeEventListener("loadingdone",t)},[s]),Me.jsx("span",{ref:a,style:n?{minInlineSize:n}:void 0,children:t})}function Zt({href:e,label:t,tile:a,children:n}){return Me.jsxs(be,{href:e,"aria-label":t,className:"rp-card rp-card-link",children:[a&&Me.jsx(he,{...a,kind:"metric",label:t}),n]})}function Qt({value:e,spark:t,facts:a,status:n,children:r}){return Me.jsx("div",{className:"rp-tile-body","data-pack":"tile",children:r||Me.jsxs(Me.Fragment,{children:[Me.jsx("span",{className:"rp-tile-val",children:e}),n||t&&Me.jsxs(Me.Fragment,{children:[Me.jsx("span",{className:"rp-spark",children:t}),a]})]})})}function ea({expression:e,href:t,tooltip:a,className:n}){const r=fe();return e?Me.jsxs(Me.Fragment,{children:[Me.jsx(ge,{className:n,text:a??e,children:e}),t&&Me.jsx(be,{href:t,className:"rp-btn quiet icon rp-rule-link","aria-label":r("ui.openRule",{rule:e}),children:Me.jsx(me,{})})]}):Me.jsx(Me.Fragment,{children:"—"})}const ta=e=>e<100?"ok":e<300?"warn":"err";function aa({name:e,nodeName:t,status:a,description:n,current:r,mark:s}){const o=fe();return Me.jsxs(Me.Fragment,{children:[Me.jsxs("span",{className:"top",children:[Me.jsx("span",{className:"n",children:t?Me.jsx(ye,{name:e}):Me.jsx(ge,{children:e})}),a.badge&&Me.jsx(ve,{children:a.badge}),a.text&&Me.jsx("span",{className:de("ms",a.tone),children:a.text})]}),Me.jsxs("span",{className:"s",children:[n,(s||r)&&Me.jsx("span",{className:"cur",children:s??o("ui.current")})]})]})}const na=({action:e})=>Me.jsxs(ke,{accent:e.accent,isDisabled:e.isDisabled,isPending:e.isPending,tip:e.reason,onPress:e.onAction,children:[e.icon,e.label]});function ra({actions:e,overflowMode:t="collapse"}){if("wrap"===t)return Me.jsx(Me.Fragment,{children:e.map(e=>Me.jsx(na,{action:e},e.id))});const[a,...n]=e;return a?Me.jsxs(Me.Fragment,{children:[Me.jsx(na,{action:a}),n.length>0&&Me.jsxs(Me.Fragment,{children:[Me.jsx("span",{className:"rp-wide-only",children:n.map(e=>Me.jsx(na,{action:e},e.id))}),Me.jsx("span",{className:"rp-narrow-only",children:Me.jsx(oa,{actions:n})})]})]}):null}function sa({actions:e,label:t}){const[a]=Ce.useState(e),n=a.map(t=>e.find(e=>e.id===t.id)??{...t,isDisabled:!0}),r=n.filter(e=>void 0!==e.checked),s=n.findIndex(e=>void 0!==e.checked),o=r.length>0,i=e=>Me.jsxs(je,{id:e.id,className:de("rp-item",!o&&"plain",e.negative&&"negative"),textValue:e.label,children:[o&&Me.jsx(le,{}),Me.jsxs("span",{className:"rp-item-text",children:[Me.jsx(oe,{slot:"label",children:e.label}),e.isDisabled&&e.reason&&Me.jsx(oe,{slot:"description",className:"desc reason",children:e.reason})]})]},e.id);return Me.jsx(xe,{"aria-label":t,disabledKeys:n.filter(e=>e.isDisabled||e.isPending).map(e=>e.id),onAction:t=>e.find(e=>e.id===t)?.onAction(),children:n.map((e,t)=>void 0===e.checked?i(e):t===s&&Me.jsx(Se,{selectionMode:"multiple",selectedKeys:r.filter(e=>e.checked).map(e=>e.id),children:r.map(i)},"checks"))})}function oa({actions:e,label:t,small:a,quiet:n}){const r=fe(),s=t??r("ui.moreActions");return 0===e.length?null:Me.jsx(_e,{chevron:!1,small:a,quiet:n,label:s,content:Me.jsx(sa,{actions:e,label:s}),children:Me.jsx(we,{})})}export{Te as $,ra as A,rt as B,Zt as C,Vt as L,oa as M,aa as N,ea as R,Wt as S,Qt as V,Jt as W,Xt as a,dt as b,ct as c,_t as d,Ue as e,Mt as f,ht as g,Pt as h,$e as i,Tt as j,zt as k,ta as l,bt as m,He as n,ft as o,pt as p,Ft as q,ut as r,st as s,Ze as t,mt as u,Ot as v,Bt as w,It as x,gt as y,ot as z}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/AddCircle-prR7q573.js b/luci-app-honk/root/etc/honk/doona/assets/AddCircle-JwHCi_at.js similarity index 83% rename from luci-app-honk/root/etc/honk/doona/assets/AddCircle-prR7q573.js rename to luci-app-honk/root/etc/honk/doona/assets/AddCircle-JwHCi_at.js index b91f92ce7..e6db0f544 100644 --- a/luci-app-honk/root/etc/honk/doona/assets/AddCircle-prR7q573.js +++ b/luci-app-honk/root/etc/honk/doona/assets/AddCircle-JwHCi_at.js @@ -1 +1 @@ -import{j as r}from"./vendor-react-64fcanlc.js";import{I as a}from"./index-BgFj_VXE.js";function o(o){return r.jsx(a,{...o,children:r.jsx("path",{fill:"currentColor",d:"M10 1.5a8.5 8.5 0 1 0 0 17 8.5 8.5 0 0 0 0-17m0 15.5a7 7 0 1 1 0-14 7 7 0 0 1 0 14m3.75-7.75h-3v-3a.75.75 0 0 0-1.5 0v3h-3a.75.75 0 0 0 0 1.5h3v3a.75.75 0 0 0 1.5 0v-3h3a.75.75 0 0 0 0-1.5"})})}export{o as A}; +import{j as r}from"./vendor-react-64fcanlc.js";import{I as a}from"./index-CmbH0woS.js";function o(o){return r.jsx(a,{...o,children:r.jsx("path",{fill:"currentColor",d:"M10 1.5a8.5 8.5 0 1 0 0 17 8.5 8.5 0 0 0 0-17m0 15.5a7 7 0 1 1 0-14 7 7 0 0 1 0 14m3.75-7.75h-3v-3a.75.75 0 0 0-1.5 0v3h-3a.75.75 0 0 0 0 1.5h3v3a.75.75 0 0 0 1.5 0v-3h3a.75.75 0 0 0 0-1.5"})})}export{o as A}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/AreaChart-8u_BHC3w.js b/luci-app-honk/root/etc/honk/doona/assets/AreaChart-8u_BHC3w.js deleted file mode 100644 index cfdd991db..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/AreaChart-8u_BHC3w.js +++ /dev/null @@ -1 +0,0 @@ -import{r as e,j as t}from"./vendor-react-64fcanlc.js";import{F as a,H as s}from"./index-BgFj_VXE.js";import{h as n}from"./format-s2EANuUb.js";import{z as o,b8 as i,b9 as l,ba as r,bb as u,bc as h,bd as m,be as c,bf as d}from"./activity-D06xJ7oH.js";import{G as p,C as x}from"./AreaCurve-DQSHOSpG.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./logs-BxISynQ4.js";import"./Select-CkiGmyVC.js";import"./array-C0VuvQyb.js";const f=[30,60,120,300,600,900,1800,3600,7200,21600,43200,86400].map(e=>1e3*e);function b(t,a){const[s,n]=e.useState([]),o=e.useRef("");return e.useLayoutEffect(()=>{const e=[a,...t].join("\0");if(e===o.current)return;o.current=e;const s=document.createElement("span");s.className="rp-area-tick",Object.assign(s.style,{position:"absolute",top:"-20000px",whiteSpace:"pre"}),document.body.appendChild(s),n(t.map(e=>{s.textContent=e;const{width:t,height:a}=s.getBoundingClientRect();return{width:t,height:a}})),s.remove()},[t,a]),s}function g({label:g,series:M,timestamps:y,fmt:j,locale:v,height:w=150,baseline:k="zero",window:C,fill:D,bare:F=!1,inset:N=2}){const S=a(),$=o(),L=e.useId(),[T,A]=s(Math.round,120),{tip:B,showAt:E,hide:P}=i(),[z,I]=e.useState(null),H=z&&z.indexvoid 0!==O&&void 0!==R?function(e,t){const a=t-e,s=f.find(e=>a/e<=6)??f[f.length-1],n=s>=864e5?6e4*new Date(t).getTimezoneOffset():0,o=[];for(let i=Math.ceil((e-n)/s)*s+n;i<=t;i+=s)i-e>=.04*a&&t-i>=.04*a&&o.push(i);return{ticks:o,step:s}}(O,R):void 0,[O,R]),G=W?W.step<6e4:K<18e4,_=W?W.step>=864e5:K>1296e5,q=e.useMemo(()=>new Intl.DateTimeFormat(v,_?{month:"numeric",day:"numeric"}:G?{hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}:{hour:"2-digit",minute:"2-digit",hourCycle:"h23"}),[v,G,_]),{yDomain:J,yTicks:Q}=e.useMemo(()=>{const e=M.flatMap(e=>e.values.filter(e=>null!==e));let t=0,a=(e=>{const t=Math.pow(10,Math.floor(Math.log10(e))),a=e/t;return([1,1.2,1.5,2,2.5,3,4,5,6,8,10].find(e=>a<=e)??10)*t})(1.08*Math.max(1,...e));if("auto"===k&&e.length){const s=Math.min(...e),n=Math.max(...e),o=(e=>{const t=Math.pow(10,Math.floor(Math.log10(Math.max(e,1e-9)))),a=e/t;return(a<=1?.2:a<=2?.5:a<=5?1:2)*t})(Math.max(n-s,.02*n,1));t=Math.max(0,Math.floor(s/o)*o-o),a=Math.ceil(n/o)*o+o}return{yDomain:[t,a],yTicks:"auto"===k?[t,(t+a)/2,a]:[a/2,a]}},[M,k]),U=e.useMemo(()=>{const e=y.length-1;return W?W.ticks:[...new Set((G?[0,Math.round(e/2),e]:[0,Math.round(e/3),Math.round(2*e/3),e]).map(e=>y[e]))]},[W,G,y]),V=e.useMemo(()=>void 0!==O&&void 0!==R?[O,R]:[Math.min(...y),Math.max(...y)],[O,R,y]),X=A?.width??0,Y=A?.height??w,Z=F?N:20,ee=F?2:8,te=Y-(F?2:30),ae=X-(F?N:64),se=e.useMemo(()=>[Math.min(V[0],...y),Math.max(V[1],...y)],[V,y]),ne=e.useCallback(e=>l(e,se,[Z,ae]),[se,Z,ae]),oe=e.useCallback(e=>l(e,J,[te,ee]),[J,te,ee]),ie=e.useMemo(()=>y.map(ne),[y,ne]),le=e.useMemo(()=>M.map(e=>y.map((t,a)=>null==e.values[a]?null:{x:ie[a],y:oe(e.values[a])})),[M,y,ie,oe]),re={x:Z,y:ee,width:ae-Z,height:te-ee},ue=(e,t)=>I({index:e,y:t}),he=()=>{I(null),P()};e.useLayoutEffect(()=>{null!==H&&M.some(e=>null!=e.values[H])?E({x:ie[H],y:z?.y??(ee+te)/2,width:X,bounds:F&&T.current?r(T.current):re,label:n(v).format(y[H]),lines:M.filter(e=>null!=e.values[H]).sort((e,t)=>e.labelt.label?1:0).map(e=>S("ui.valuePair",{label:e.label,value:j(e.values[H])}))}):P()});const me=u(y.length,ue,he),ce=e.useMemo(()=>U.map(e=>q.format(e)),[U,q]),de=e.useMemo(()=>Q.map(j),[Q,j]),pe=b(ce,v),xe=b(de,v),fe=W?h(U.map(ne),pe.map(e=>e.width),0,X,16,!0):U.map((e,t)=>({index:t,position:ne(e)})),be=h(Q.map(oe),xe.map(e=>e.height),0,Y,5,!1),ge=[...new Set([...(F?Q:be.map(e=>Q[e.index])).map(oe),ee,te])];return t.jsx("div",{ref:T,style:{height:w,width:"100%",flex:D?"1 0 auto":void 0,position:"relative"},onPointerLeave:me.onPointerLeave,children:y.length>0&&A&&t.jsxs(t.Fragment,{children:[t.jsx(m,{tip:B}),t.jsxs("svg",{className:"rp-activity-surface",width:X,height:Y,viewBox:`0 0 ${X} ${Y}`,style:{display:"block"},role:"application","aria-label":g,tabIndex:0,onFocus:me.onFocus,onBlur:me.onBlur,onKeyDown:me.onKeyDown,onPointerMove:e=>{const{x:t,y:a}=c(e,e.currentTarget,{width:X,height:Y});if(tae||ate)return void he();const s=d(ie,t);ue(s,a)},children:[t.jsx("g",{className:"rp-area-grid",children:ge.map(e=>t.jsx("line",{x1:Z,x2:ae,y1:e,y2:e,stroke:$["hl-med"],strokeDasharray:"2 4",fill:"none"},e))}),t.jsx("defs",{children:M.map((e,a)=>t.jsx(p,{id:L+a,color:e.color},e.label))}),M.map((e,a)=>t.jsx(x,{points:le[a],baseline:oe(Math.max(0,J[0])),color:e.color,id:L+a,strokeWidth:2},e.label)),null!==H&&t.jsx("path",{d:`M${ie[H]},${ee}L${ie[H]},${te}`,stroke:$.subtle,strokeDasharray:"3 3",fill:"none",pointerEvents:"none"}),!F&&t.jsxs(t.Fragment,{children:[t.jsx("g",{children:fe.map(({index:e,position:a})=>t.jsx("text",{x:a,y:te+8,className:"rp-area-tick",fill:$.subtle,textAnchor:"middle",children:t.jsx("tspan",{x:a,dy:"0.71em",children:ce[e]})},e))}),t.jsx("g",{className:"rp-area-y-ticks",children:be.map(({index:e,position:a})=>t.jsx("text",{x:ae+8,y:a,className:"rp-area-tick",fill:$.subtle,textAnchor:"start",children:t.jsx("tspan",{x:ae+8,dy:"0.355em",children:j(Q[e])})},e))})]}),null!==H&&M.map(e=>null==e.values[H]?null:t.jsx("circle",{cx:ie[H],cy:oe(e.values[H]),r:4,fill:e.color,stroke:$.base,strokeWidth:2},e.label))]})]})})}export{g as AreaPlot}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/AreaChart-BzUHpDKh.js b/luci-app-honk/root/etc/honk/doona/assets/AreaChart-BzUHpDKh.js new file mode 100644 index 000000000..09f6816b4 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/AreaChart-BzUHpDKh.js @@ -0,0 +1 @@ +import{r as e,j as t}from"./vendor-react-64fcanlc.js";import{C as a,E as s,hv as n,fc as l,hw as o}from"./index-CmbH0woS.js";import{u as i,bb as r,bc as c,bd as u,be as h,bf as m,bg as d,bh as p,bi as x}from"./activity-CiEWAlFW.js";import{G as f,C as M}from"./AreaCurve-DQSHOSpG.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./ActionGroup-D3mQjUsw.js";import"./Select-BcN72K3H.js";import"./array-C0VuvQyb.js";const b=[30,60,120,300,600,900,1800,3600,7200,21600,43200,86400].map(e=>1e3*e);function g(t,a){const[s,n]=e.useState([]),l=e.useRef("");return e.useLayoutEffect(()=>{const e=[a,...t].join("\0");if(e===l.current)return;l.current=e;const s=document.createElement("span");s.className="rp-area-tick",Object.assign(s.style,{position:"absolute",top:"-20000px",whiteSpace:"pre"}),document.body.appendChild(s),n(t.map(e=>{s.textContent=e;const{width:t,height:a}=s.getBoundingClientRect();return{width:t,height:a}})),s.remove()},[t,a]),s}function y({label:y,series:v,timestamps:j,fmt:w,locale:k,height:C=150,baseline:D="zero",window:N,fill:S,bare:$=!1,inset:A=2}){const E=a(),L=i(),B=e.useId(),[F,P]=s(Math.round,120),{tip:T,showAt:z,hide:G}=r(),[I,K]=e.useState(null),O=I&&I.indexvoid 0!==W&&void 0!==H?function(e,t){const a=t-e,s=b.find(e=>a/e<=6)??b[b.length-1],n=s>=864e5?6e4*new Date(t).getTimezoneOffset():0,l=[];for(let o=Math.ceil((e-n)/s)*s+n;o<=t;o+=s)o-e>=.04*a&&t-o>=.04*a&&l.push(o);return{ticks:l,step:s}}(W,H):void 0,[W,H]),q=_?_.step<6e4:R<18e4,J=_?_.step>=864e5:R>1296e5,Q=e.useMemo(()=>J?n(k):l(k,q),[k,q,J]),{yDomain:U,yTicks:V}=e.useMemo(()=>{const e=v.flatMap(e=>e.values.filter(e=>null!==e));let t=0,a=(e=>{const t=Math.pow(10,Math.floor(Math.log10(e))),a=e/t;return([1,1.2,1.5,2,2.5,3,4,5,6,8,10].find(e=>a<=e)??10)*t})(1.08*Math.max(1,...e));if("auto"===D&&e.length){const s=Math.min(...e),n=Math.max(...e),l=(e=>{const t=Math.pow(10,Math.floor(Math.log10(Math.max(e,1e-9)))),a=e/t;return(a<=1?.2:a<=2?.5:a<=5?1:2)*t})(Math.max(n-s,.02*n,1));t=Math.max(0,Math.floor(s/l)*l-l),a=Math.ceil(n/l)*l+l}return{yDomain:[t,a],yTicks:"auto"===D?[t,(t+a)/2,a]:[a/2,a]}},[v,D]),X=e.useMemo(()=>{const e=j.length-1;return _?_.ticks:[...new Set((q?[0,Math.round(e/2),e]:[0,Math.round(e/3),Math.round(2*e/3),e]).map(e=>j[e]))]},[_,q,j]),Y=e.useMemo(()=>void 0!==W&&void 0!==H?[W,H]:[Math.min(...j),Math.max(...j)],[W,H,j]),Z=P?.width??0,ee=P?.height??C,te=$?A:20,ae=$?2:8,se=ee-($?2:30),ne=Z-($?A:64),le=e.useMemo(()=>[Math.min(Y[0],...j),Math.max(Y[1],...j)],[Y,j]),oe=e.useCallback(e=>c(e,le,[te,ne]),[le,te,ne]),ie=e.useCallback(e=>c(e,U,[se,ae]),[U,se,ae]),re=e.useMemo(()=>j.map(oe),[j,oe]),ce=e.useMemo(()=>v.map(e=>j.map((t,a)=>null==e.values[a]?null:{x:re[a],y:ie(e.values[a])})),[v,j,re,ie]),ue={x:te,y:ae,width:ne-te,height:se-ae},he=(e,t)=>K({index:e,y:t}),me=()=>{K(null),G()};e.useLayoutEffect(()=>{null!==O&&v.some(e=>null!=e.values[O])?z({x:re[O],y:I?.y??(ae+se)/2,width:Z,bounds:$&&F.current?u(F.current):ue,label:o(k).format(j[O]),lines:v.filter(e=>null!=e.values[O]).sort((e,t)=>e.labelt.label?1:0).map(e=>E("ui.valuePair",{label:e.label,value:w(e.values[O])}))}):G()});const de=h(j.length,he,me),pe=e.useMemo(()=>X.map(e=>Q.format(e)),[X,Q]),xe=e.useMemo(()=>V.map(w),[V,w]),fe=g(pe,k),Me=g(xe,k),be=_?m(X.map(oe),fe.map(e=>e.width),0,Z,16,!0):function(e,t,a){const s=a=>[e[a]-(t[a]??0)/2,e[a]+(t[a]??0)/2],n=e.length-1,l=[];let o=1/0;for(let i=n;i>=0;i--){const[t,r]=s(i);r+a>o||i>0&&ie.width),8),ge=m(V.map(ie),Me.map(e=>e.height),0,ee,5,!1),ye=[...new Set([...($?V:ge.map(e=>V[e.index])).map(ie),ae,se])];return t.jsx("div",{ref:F,style:{height:C,width:"100%",flex:S?"1 0 auto":void 0,position:"relative"},onPointerLeave:de.onPointerLeave,children:j.length>0&&P&&t.jsxs(t.Fragment,{children:[t.jsx(d,{tip:T}),t.jsxs("svg",{className:"rp-activity-surface",width:Z,height:ee,viewBox:`0 0 ${Z} ${ee}`,style:{display:"block"},role:"application","aria-label":y,tabIndex:0,onFocus:de.onFocus,onBlur:de.onBlur,onKeyDown:de.onKeyDown,onPointerMove:e=>{const{x:t,y:a}=p(e,e.currentTarget,{width:Z,height:ee});if(tne||ase)return void me();const s=x(re,t);he(s,a)},children:[t.jsx("g",{className:"rp-area-grid",children:ye.map(e=>t.jsx("line",{x1:te,x2:ne,y1:e,y2:e,stroke:L["hl-med"],strokeDasharray:"2 4",fill:"none"},e))}),t.jsx("defs",{children:v.map((e,a)=>t.jsx(f,{id:B+a,color:e.color},e.label))}),v.map((e,a)=>t.jsx(M,{points:ce[a],baseline:ie(Math.max(0,U[0])),color:e.color,id:B+a,strokeWidth:2},e.label)),null!==O&&t.jsx("path",{d:`M${re[O]},${ae}L${re[O]},${se}`,stroke:L.subtle,strokeDasharray:"3 3",fill:"none",pointerEvents:"none"}),!$&&t.jsxs(t.Fragment,{children:[t.jsx("g",{children:be.map(({index:e,position:a})=>t.jsx("text",{x:a,y:se+8,className:"rp-area-tick",fill:L.subtle,textAnchor:"middle",children:t.jsx("tspan",{x:a,dy:"0.71em",children:pe[e]})},e))}),t.jsx("g",{className:"rp-area-y-ticks",children:ge.map(({index:e,position:a})=>t.jsx("text",{x:ne+8,y:a,className:"rp-area-tick",fill:L.subtle,textAnchor:"start",children:t.jsx("tspan",{x:ne+8,dy:"0.355em",children:w(V[e])})},e))})]}),null!==O&&v.map(e=>null==e.values[O]?null:t.jsx("circle",{cx:re[O],cy:ie(e.values[O]),r:4,fill:e.color,stroke:L.base,strokeWidth:2},e.label))]})]})})}export{y as AreaPlot}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Checkbox-f7Je53QZ.js b/luci-app-honk/root/etc/honk/doona/assets/Checkbox-f7Je53QZ.js new file mode 100644 index 000000000..5f6e60dc1 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Checkbox-f7Je53QZ.js @@ -0,0 +1 @@ +import{fT as e,gI as t,dl as i,gJ as a,dz as l,gK as s,gL as n,fG as r,fH as o,fJ as d,g7 as c,dv as u,fS as m,fI as f,du as v,dA as p,dB as g,dC as b,dL as h,dM as R,dN as I,dO as M,dP as P,dE as S,dm as y,dF as C,aY as V}from"./index-CmbH0woS.js";import{r as x,$ as E}from"./vendor-react-64fcanlc.js";function $(t,i){const a=x.useRef(!0),l=x.useRef(null);let s=e(t);x.useEffect(()=>(a.current=!0,()=>{a.current=!1}),[]),x.useEffect(()=>{let e=l.current;a.current?a.current=!1:e&&!i.some((t,i)=>!Object.is(t,e[i]))||s(),l.current=i},i)}function D(e,a,l){let{labelProps:s,inputProps:n,descriptionProps:r,errorMessageProps:o,isSelected:d,isPressed:c,isDisabled:u,isReadOnly:m,isInvalid:f,validationErrors:v,validationDetails:p}=t(e,a,l),{isIndeterminate:g}=e;return x.useEffect(()=>{l.current&&(l.current.indeterminate=!!g)}),{labelProps:i(s,x.useMemo(()=>({onMouseDown:e=>e.preventDefault()}),[])),inputProps:n,descriptionProps:r,errorMessageProps:o,isSelected:d,isPressed:c,isDisabled:u,isReadOnly:m,isInvalid:f,validationErrors:v,validationDetails:p}}const B=new WeakMap;var O;function F(e,t){let{getRowText:i=e=>t.collection.getTextValue?.(e)??t.collection.getItem(e)?.textValue}=e,a=o((l=O)&&l.__esModule?l.default:l,"@react-aria/grid");var l;let s=t.selectionManager.rawSelection,n=x.useRef(s),r=x.useCallback(()=>{if(!t.selectionManager.isFocused||s===n.current)return void(n.current=s);let e=k(s,n.current),l=k(n.current,s),r="replace"===t.selectionManager.selectionBehavior,o=[];if(1===t.selectionManager.selectedKeys.size&&r){let e=t.selectionManager.selectedKeys.keys().next().value;if(null!=e&&t.collection.getItem(e)){let t=i(e);t&&o.push(a.format("selectedItem",{item:t}))}}else if(1===e.size&&0===l.size){let t=e.keys().next().value;if(null!=t){let e=i(t);e&&o.push(a.format("selectedItem",{item:e}))}}else if(1===l.size&&0===e.size){let e=l.keys().next().value;if(null!=e&&t.collection.getItem(e)){let t=i(e);t&&o.push(a.format("deselectedItem",{item:t}))}}"multiple"===t.selectionManager.selectionMode&&(0===o.length||"all"===s||s.size>1||"all"===n.current||n.current?.size>1)&&o.push("all"===s?a.format("selectedAll"):a.format("selectedCount",{count:s.size})),o.length>0&&d(o.join(" ")),n.current=s},[s,t.selectionManager.selectedKeys,t.selectionManager.isFocused,t.selectionManager.selectionBehavior,t.selectionManager.selectionMode,t.collection,i,a]);$(()=>{if(!t.selectionManager.isFocused){let e=requestAnimationFrame(r);return()=>cancelAnimationFrame(e)}r()},[s,t.selectionManager.isFocused])}function k(e,t){let i=new Set;if("all"===e||"all"===t)return i;for(let a of e.keys())t.has(a)||i.add(a);return i}function T(e,t){let i=t?.isDisabled,[a,l]=x.useState(!1);return c(()=>{if(e?.current&&!i){let t=()=>{if(e.current){let t=u(e.current,{tabbable:!0});l(!!t.nextNode())}};t();let i=new MutationObserver(t);return i.observe(e.current,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["tabIndex","disabled"]}),()=>{i.disconnect()}}}),!i&&a}function w(e){let t=o((i=O)&&i.__esModule?i.default:i,"@react-aria/grid");var i;let a=m(),l=("pointer"===a||"virtual"===a||null==a)&&"undefined"!=typeof window&&"ontouchstart"in window,s=x.useMemo(()=>{let i,a=e.selectionManager.selectionMode,s=e.selectionManager.selectionBehavior;return l&&(i=t.format("longPressToSelect")),"replace"===s&&"none"!==a&&e.hasItemActions?i:void 0},[e.selectionManager.selectionMode,e.selectionManager.selectionBehavior,e.hasItemActions,t,l]);return f(s)}function A(e,t){let{key:i}=e,a=t.selectionManager,l=v(),s=!t.selectionManager.canSelectItem(i),n=t.selectionManager.isSelected(i);var r;return{checkboxProps:{id:l,"aria-label":o((r=O)&&r.__esModule?r.default:r,"@react-aria/grid").format("select"),isSelected:n,isDisabled:s,onChange:()=>a.toggleSelection(i)}}}O={"ar-AE":r,"bg-BG":r,"cs-CZ":r,"da-DK":r,"de-DE":r,"el-GR":r,"en-US":{deselectedItem:e=>`${e.item} not selected.`,select:"Select",selectedCount:(e,t)=>`${t.plural(e.count,{"=0":"No items selected",one:()=>`${t.number(e.count)} item selected`,other:()=>`${t.number(e.count)} items selected`})}.`,selectedAll:"All items selected.",selectedItem:e=>`${e.item} selected.`,longPressToSelect:"Long press to enter selection mode."},"es-ES":r,"et-EE":r,"fi-FI":r,"fr-FR":r,"he-IL":r,"hr-HR":r,"hu-HU":r,"it-IT":r,"ja-JP":r,"ko-KR":r,"lt-LT":r,"lv-LV":r,"nb-NO":r,"nl-NL":r,"pl-PL":r,"pt-BR":r,"pt-PT":r,"ro-RO":r,"ru-RU":r,"sk-SK":r,"sl-SI":r,"sr-SP":r,"sv-SE":r,"tr-TR":r,"uk-UA":r,"zh-CN":{deselectedItem:e=>`未选择 ${e.item}。`,longPressToSelect:"长按以进入选择模式。",select:"选择",selectedAll:"已选择所有项目。",selectedCount:(e,t)=>`${t.plural(e.count,{"=0":"未选择项目",one:()=>`已选择 ${t.number(e.count)} 个项目`,other:()=>`已选择 ${t.number(e.count)} 个项目`})}。`,selectedItem:e=>`已选择 ${e.item}。`},"zh-TW":{deselectedItem:e=>`未選取「${e.item}」。`,longPressToSelect:"長按以進入選擇模式。",select:"選取",selectedAll:"已選取所有項目。",selectedCount:(e,t)=>`${t.plural(e.count,{"=0":"未選取任何項目",one:()=>`已選取 ${t.number(e.count)} 個項目`,other:()=>`已選取 ${t.number(e.count)} 個項目`})}。`,selectedItem:e=>`已選取「${e.item}」。`}};const z=x.createContext(null),q=x.createContext(null),L=x.createContext(null),N=x.createContext(null);function K(e,t){let{validationBehavior:i}=g(b)||{},r=e.validationBehavior??i??"native",o=x.useContext(L),d=h(x.useMemo(()=>R(t,void 0!==e.inputRef?e.inputRef:null),[t,e.inputRef])),c={...I(e),children:"function"==typeof e.children||e.children,value:e.value,validationBehavior:r},u=o?function(e,t,i){const r=a({isReadOnly:e.isReadOnly||t.isReadOnly,isSelected:t.isSelected(e.value),defaultSelected:t.defaultValue.includes(e.value),onChange(i){i?t.addValue(e.value):t.removeValue(e.value),e.onChange&&e.onChange(i)}});let{name:o,form:d,descriptionId:c,errorMessageId:u,validationBehavior:m}=B.get(t);m=e.validationBehavior??m;let{realtimeValidation:f}=l({...e,value:r.isSelected,name:void 0,validationBehavior:"aria"}),v=x.useRef(s),p=()=>{t.setInvalid(e.value,f.isInvalid?f:v.current)};x.useEffect(p);let g=t.realtimeValidation.isInvalid?t.realtimeValidation:f,b="native"===m?t.displayValidation:g,h=D({...e,isReadOnly:e.isReadOnly||t.isReadOnly,isDisabled:e.isDisabled||t.isDisabled,name:e.name||o,form:e.form||d,isRequired:e.isRequired??t.isRequired,validationBehavior:m,[n]:{realtimeValidation:g,displayValidation:b,resetValidation:t.resetValidation,commitValidation:t.commitValidation,updateValidation(e){v.current=e,p()}}},r,i);return{...h,inputProps:{...h.inputProps,"aria-describedby":[h.inputProps["aria-describedby"],t.isInvalid?u:null,c].filter(Boolean).join(" ")||void 0}}}(c,o,d):D(c,a(e),d);return[u,d]}const j=x.forwardRef(function(e,t){let{inputRef:i=null,...a}=e;[e,t]=p(a,t,z);let[l,s]=K(e,i);return E.createElement(N.Provider,{value:{...l,inputRef:s,defaultClassName:"react-aria-Checkbox",isIndeterminate:e.isIndeterminate,isRequired:e.isRequired}},E.createElement(_,{...e,ref:t}))}),_=x.forwardRef(function(e,t){let{labelProps:a,inputProps:l,isSelected:s,isDisabled:n,isReadOnly:r,isPressed:o,isInvalid:d,inputRef:c,defaultClassName:u,isIndeterminate:m,isRequired:f}=x.useContext(N),{isFocused:v,isFocusVisible:p,focusProps:g}=M(),b=n||r,{hoverProps:h,isHovered:R}=P({...e,isDisabled:b}),I=S({...e,defaultClassName:u,values:{isSelected:s,isIndeterminate:m||!1,isPressed:o,isHovered:R,isFocused:v,isFocusVisible:p,isDisabled:n,isReadOnly:r,isInvalid:d,isRequired:f||!1}}),$=y(e,{global:!0});return delete $.id,delete $.onClick,E.createElement(C.label,{...i($,a,h,I),ref:t,slot:e.slot||void 0,"data-selected":s||void 0,"data-indeterminate":m||void 0,"data-pressed":o||void 0,"data-hovered":R||void 0,"data-focused":v||void 0,"data-focus-visible":p||void 0,"data-disabled":n||void 0,"data-readonly":r||void 0,"data-invalid":d||void 0,"data-required":f||void 0},E.createElement(V,{elementType:"span"},E.createElement("input",{...i(l,g),ref:c})),I.children)});export{j as $,T as a,w as b,F as c,$ as d,A as e,z as f,q as g}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/ConditionRow-B2vbKntf.js b/luci-app-honk/root/etc/honk/doona/assets/ConditionRow-B2vbKntf.js new file mode 100644 index 000000000..264df3d50 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/ConditionRow-B2vbKntf.js @@ -0,0 +1 @@ +import{r as e,j as s}from"./vendor-react-64fcanlc.js";import{$ as a}from"./Checkbox-f7Je53QZ.js";import{el as r,I as i,d5 as l,cT as n,J as c}from"./index-CmbH0woS.js";function d({label:i,description:l,isSelected:n,onChange:c,isDisabled:d}){const o=e.useId(),t=e.useId();return s.jsxs(a,{className:"rp-radio rp-checkbox",isSelected:n,onChange:c,isDisabled:d,"aria-labelledby":o,"aria-describedby":l?t:void 0,children:[s.jsx("span",{className:"rp-checkbox-mark",children:s.jsx(r,{})}),s.jsxs("span",{className:"rp-radio-text",children:[s.jsx("span",{id:o,children:i}),l&&s.jsx("span",{id:t,className:"rp-note",children:l})]})]})}function o(e){return s.jsx(i,{...e,children:s.jsx("path",{fill:"currentColor",d:"M17.78 1.757C16.51.716 14.555.858 13.33 2.08L3.079 12.334c-.32.32-.559.717-.69 1.15l-1.384 4.584c-.08.265-.007.552.188.747.142.143.334.22.53.22q.11 0 .217-.032l4.582-1.384c.434-.13.832-.368 1.151-.688L18.028 6.575c.648-.647.993-1.545.948-2.46s-.482-1.775-1.195-2.358M2.846 17.163l.98-3.246q.042-.135.113-.257l2.41 2.409q-.123.07-.259.114zM16.966 5.516l-9.525 9.526-2.475-2.476 9.425-9.425c.386-.387.896-.586 1.39-.586.38 0 .752.119 1.05.362.392.321.621.772.646 1.272.025.494-.161.977-.51 1.327"})})}function t({children:e}){return s.jsx("div",{className:"rp-toolbar",children:e})}function h({children:e,negate:a,onNegate:r,negateLabel:i,removeLabel:d,onRemove:o,isDisabled:h,removeDisabled:x}){return s.jsxs(l,{children:[e,s.jsxs(t,{children:[s.jsx(n,{isDisabled:h,isSelected:a,onChange:r,children:i}),s.jsx("span",{className:"rp-grow"}),s.jsx(c,{small:!0,isDisabled:h||x,onPress:o,children:d})]})]})}export{d as C,o as E,h as a,t as b}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/ConditionRow-CmAHHzfr.js b/luci-app-honk/root/etc/honk/doona/assets/ConditionRow-CmAHHzfr.js deleted file mode 100644 index d310b31ba..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/ConditionRow-CmAHHzfr.js +++ /dev/null @@ -1 +0,0 @@ -import{r as e,j as s}from"./vendor-react-64fcanlc.js";import{f as a}from"./useGridSelectionCheckbox-BxnCShqN.js";import{f9 as r,I as i,dD as n,dr as l,O as c}from"./index-BgFj_VXE.js";function d({label:i,description:n,isSelected:l,onChange:c,isDisabled:d}){const o=e.useId(),t=e.useId();return s.jsxs(a,{className:"rp-radio rp-checkbox",isSelected:l,onChange:c,isDisabled:d,"aria-labelledby":o,"aria-describedby":n?t:void 0,children:[s.jsx("span",{className:"rp-checkbox-mark",children:s.jsx(r,{})}),s.jsxs("span",{className:"rp-radio-text",children:[s.jsx("span",{id:o,children:i}),n&&s.jsx("span",{id:t,className:"rp-note",children:n})]})]})}function o(e){return s.jsx(i,{...e,children:s.jsx("path",{fill:"currentColor",d:"M17.78 1.757C16.51.716 14.555.858 13.33 2.08L3.079 12.334c-.32.32-.559.717-.69 1.15l-1.384 4.584c-.08.265-.007.552.188.747.142.143.334.22.53.22q.11 0 .217-.032l4.582-1.384c.434-.13.832-.368 1.151-.688L18.028 6.575c.648-.647.993-1.545.948-2.46s-.482-1.775-1.195-2.358M2.846 17.163l.98-3.246q.042-.135.113-.257l2.41 2.409q-.123.07-.259.114zM16.966 5.516l-9.525 9.526-2.475-2.476 9.425-9.425c.386-.387.896-.586 1.39-.586.38 0 .752.119 1.05.362.392.321.621.772.646 1.272.025.494-.161.977-.51 1.327"})})}function t({children:e}){return s.jsx("div",{className:"rp-toolbar",children:e})}function h({children:e,negate:a,onNegate:r,negateLabel:i,removeLabel:d,onRemove:o,isDisabled:h,removeDisabled:x}){return s.jsxs(n,{children:[e,s.jsxs(t,{children:[s.jsx(l,{isDisabled:h,isSelected:a,onChange:r,children:i}),s.jsx("span",{className:"rp-grow"}),s.jsx(c,{small:!0,isDisabled:h||x,onPress:o,children:d})]})]})}export{d as C,o as E,h as a,t as b}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Config-VXcentxY.js b/luci-app-honk/root/etc/honk/doona/assets/Config-VXcentxY.js new file mode 100644 index 000000000..1f1d19f98 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Config-VXcentxY.js @@ -0,0 +1 @@ +import{r as e,j as n}from"./vendor-react-64fcanlc.js";import{s as r,h as i,j as s,ez as a,Z as t,C as o,aF as l,P as c,W as d,Y as u,X as f,df as p,a1 as m,cE as g,w as h,d_ as b,cG as v,ai as x,eA as y,eB as j,a4 as k,e0 as w,r as S,cC as C,dd as N,eC as R,eD as D,ea as M,eE as O,am as E,al as T,at as A,ch as L,eF as P,eG as F,a3 as _,dc as q,eH as I,L as $,bT as H,bd as B,J as K,aV as V,K as W,c4 as U,A as z,aS as G,az as J,d6 as Q,bG as Y,d5 as X,ec as Z,d4 as ee,M as ne,D as re,U as ie,ek as se,c5 as ae,eI as te,eJ as oe,eK as le,eL as ce,eM as de,cj as ue,eN as fe,a0 as pe,de as me,d8 as ge,cf as he,eO as be,ce as ve,eP as xe,by as ye,eQ as je,eR as ke,eS as we,V as Se,aY as Ce,aQ as Ne,T as Re}from"./index-CmbH0woS.js";import{e as De,u as Me,L as Oe,A as Ee,M as Te,S as Ae}from"./ActionGroup-D3mQjUsw.js";import{T as Le}from"./Tabs-BzeNgTje.js";import{T as Pe}from"./Toolbar-B9K5nAyx.js";import{r as Fe,E as _e,D as qe}from"./activity-CiEWAlFW.js";import{s as Ie,c as $e,r as He,a as Be,b as Ke,d as Ve,e as We,f as Ue,g as ze,h as Ge,v as Je,i as Qe,j as Ye,k as Xe,l as Ze,m as en,n as nn,w as rn}from"./nav-M7R_HvZ0.js";import{u as sn,c as an}from"./flows-BMReQznn.js";import{d as tn}from"./files-Dt8K7QfP.js";import{D as on}from"./Table-Cfbaho6J.js";import{T as ln}from"./TimeCell-D0UB-mKs.js";import{A as cn}from"./AddCircle-JwHCi_at.js";import{S as dn,a as un,E as fn,C as pn,b as mn,l as gn,c as hn,h as bn,d as vn,r as xn,e as yn,f as jn,g as kn,i as wn,j as Sn,s as Cn,k as Nn,t as Rn,m as Dn,n as Mn,o as On,p as En,q as Tn,u as An,v as Ln,w as Pn,x as Fn,y as _n,z as qn,D as In,R as $n,A as Hn,B as Bn,F as Kn,G as Vn,H as Wn,I as Un,J as zn,K as Gn,L as Jn}from"./vendor-editor-BRV-W12m.js";import{d as Qn,s as Yn}from"./daeTokens-BVtuNnWZ.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Select-BcN72K3H.js";import"./Checkbox-f7Je53QZ.js";import"./Virtualizer-itu1Kg0o.js";import"./index-DUM-iwa2.js";function Xn(e,n,a,t="main"){if(!a.daeText)return[];const{blocks:o,tokens:l}=r(e),c=a.globalSettings;return o.flatMap(r=>{if(r.name===c?.name){const a=o.filter(e=>e.name===c.name).indexOf(r),t=i(e,r,l);return t.filter(e=>1===t.filter(n=>n.name===e.name).length&&c.fields.some(n=>n.key===e.name)).map(i=>({kind:r.name,from:i.from,to:i.to,label:i.name,line:e.slice(0,i.from).split("\n").length,href:s("config",{tab:"global",source:n,section:String(a),field:i.name})}))}const a=Ie[r.name];return"subscription"===r.name?"main"!==t?[]:Fe(e).filter(e=>e.from>r.open&&e.to<=r.close).map(e=>({kind:r.name,from:e.from,to:e.to,label:e.tag,line:e.line,href:s("nodes",{editSubscriptionTag:e.tag})})):"dns"===r.name?r.children.filter(e=>"routing"===e.name).flatMap(e=>e.children.filter(e=>"request"===e.name||"response"===e.name).map(e=>({kind:r.name,from:e.from,to:e.to,label:e.name,line:e.line+1,href:a}))):a?[{kind:r.name,from:r.from,to:r.to,label:r.name,line:r.line+1,href:a}]:[]})}const Zn=()=>{};const er=new Map;function nr({go:n,query:r}){const i=o(),s=l[c()],a=d(),S=a.data?.resources,C=u(f(S,"config",{whileLoading:!0})),N=function(n){const r=o(),i=t(n),s=e.useMemo(()=>{const e=y(i.error);return e?e.diagnostics??[]:null},[i.error]);return e.useEffect(()=>{if(i.error)if(s){const e=j(s);k("negative",e?r("config.writeRestart",{n:e}):r("ui.writeInvalid",{n:s.filter(e=>"error"===e.level).length}))}else w(i.error,r,r("ui.writeFailed"))},[i.error,s,r]),{...i,diagnostics:s}}(C.refetch),R=e.useMemo(()=>new URLSearchParams(r),[r]),D=e.useMemo(()=>C.data?.sources??[],[C.data]),M=D.find(e=>"main"===e.kind)??null,O=D.find(e=>e.id===R.get("source"))??D[0]??null,E=O?.id??null,T=(e,i)=>n("config",h(r,{tab:"source",source:e,line:null===i?null:String(i)})),A=Number(R.get("line"))||null,L=C.data?.diagnostics??[],P=e.useMemo(()=>{const e=C.data?.diagnostics??[];return{error:e.filter(e=>"error"===e.level).length,warning:e.filter(e=>"warning"===e.level).length}},[C.data]),F=f(S,"config_validate",{whileLoading:!1})&&(S?.config_validate.modes??[]).includes("full"),_=!0===S?.config.writable,q=p(D),I=m().data,$=e.useMemo(()=>De(I),[I]),H=$e(!!$.globalSettings,a.data),B=O?He(O,_,q(O),$,i):null,K=!!O&&!B,[V,W]=e.useState(er),[U,z]=e.useState(null),G=U??P.error,J=R.has("source")||void 0===M?.content?"source":"modules",Q=g("validate"===R.get("tab")?h(r,{tab:"source"}):r,H.map(e=>e.id),J),Y=O?{source:O,sources:D,open:T,diagnostics:L,canValidate:F&&("main"===O.kind||"include"===O.kind),canWrite:K,readOnly:B,isComplete:q,editor:N,focusLine:A,generation:C.data?.generation_id??"",focusDiagnostics:"validate"===R.get("tab"),diagnosticsChoice:V.get(O.id)??null,chooseDiagnostics:e=>W(n=>new Map(n).set(O.id,e)),reportErrors:z}:null,X=!0===S?.config.create&&!0===S.config.writable?{sources:D,refetch:C.refetch,open:e=>T(e,null)}:null;return{error:a.error??C.error,reload:()=>{a.refetch(),C.refetch()},loading:C.loading&&!C.data,ready:!!C.data,tabsReady:!!C.data||H.some(e=>"history"===e.id),metadata:C.data?Ke(C.data.revision,i):[],redacted:!!C.data?.secrets_redacted,tabs:H.map(e=>({id:e.id,label:"source"===e.id&&G?i("ui.aside",{text:i(e.titleKey),note:x(G,s)}):i(e.titleKey)})),tab:Q,setTab:e=>n("config",h(v(r,e,null),{field:null})),selectedId:E??"",select:e=>n("config",h(r,{source:e,line:null})),sourceProps:Y,newSourceProps:X,modulesProps:C.data?{config:C.data}:null,sourceModel:O?{...Be(O,s,i),readOnly:B}:null,sourceOptions:D.map(e=>{const n=Be(e,s,i);return{id:n.id,label:n.label,desc:n.kind}}),exportSource:()=>{O&&tn(b(O),O.content,"text/plain;charset=utf-8")},summaryTone:P.error?"err":P.warning?"warn":"ok",summaryText:P.error?i("config.errors",{n:P.error}):P.warning?i("config.warnings",{n:P.warning}):i("config.clean")}}function rr({source:n,sources:r,diagnostics:i,canValidate:u,canWrite:f,readOnly:p,isComplete:g,editor:h,focusLine:b,generation:v,open:x,diagnosticsChoice:y,chooseDiagnostics:w,reportErrors:E}){const T=o(),A=l[c()],L=De(m().data),P=d().data?.resources,F=sn(!!b&&!0===P?.rules.available).data,_=an(!!b&&!0===P?.dns_rules.available).data,q=Me(!!b&&!0===P?.groups.available).data,I=b?S(n.content).find(e=>e.from=b-1):void 0,$=I&&_e(q,I.name),H=F?.rules.find(e=>e.source?.source_id===n.id&&e.source.line===b),B=_?.request.some(e=>e.source?.source_id===n.id&&e.source.line===b)?"request":"response",K=_?.[B].find(e=>e.source?.source_id===n.id&&e.source.line===b),[V,W]=e.useState(null),[U,z]=e.useState(null),[G,J]=e.useState(null),Q=f&&!0===g(n),Y=e.useRef(!1),X=h.errorSource===n.id?h.diagnostics:null,Z=e.useMemo(()=>X??U??(V?[]:i),[X,U,V,i]);C(v,()=>z(null));const ee=e.useMemo(()=>Ve(Z,n.id,T),[Z,n.id,T]),ne=V?.text??n.content??"",[re,ie]=e.useState(null),se=e.useRef(0),ae=e=>ie(null===e?null:{line:e,key:++se.current});C(b,()=>ie(null));const te=null!==V&&V.text!==n.content,oe=te&&V.origin.content_sha256!==n.content_sha256,le=N(te,()=>{W(null),z(null)});e.useEffect(()=>h.cancel,[h.cancel,le.revision]);const ce=V?.text,de=function(n,r,i){const s=i?.id,t=i?.content;return e.useMemo(()=>{const e=n.filter(e=>"main"===e.kind||"include"===e.kind);return e.some(e=>void 0===r(e))?null:a(e.filter(e=>r(e)),void 0!==s&&void 0!==t?{id:s,content:t}:void 0)},[n,r,s,t])}(r,g,{id:n.id,content:ne});!function(n,r){const{validate:i,cancel:s}=t(Zn);e.useEffect(()=>{if(!n)return;let e=!0;const a=setTimeout(()=>{i({sources:n,mode:"full"}).then(n=>{e&&n&&r(n.diagnostics)})},600);return()=>{e=!1,clearTimeout(a),s()}},[n,i,s,r])}(u&&void 0!==ce?de:null,z);const ue=(e,r=!0)=>{z(e.diagnostics);const i=e.diagnostics.find(e=>e.source_id===n.id&&"error"===e.level&&null!==e.line);ae(i?i.line:null);const s=j(e.diagnostics);return e.valid?r&&k("positive",T("config.valid")):k("negative",s?T("config.writeRestart",{n:s}):T("config.invalid",{n:e.diagnostics.filter(e=>"error"===e.level).length})),e.valid},fe=()=>{h.cancel(),W(null),z(null),J(null)},pe=p?()=>{Y.current||(Y.current=!0,k("info",T("config.readOnlyAttempt"),{detail:p.note}))}:void 0,me=Be(n,A,T),ge=null!==U||null!==X,he=e.useMemo(()=>We(Z,r,A,T,n.id),[Z,r,A,T,n.id]),be=Ue(he),[ve,xe]=e.useState("all"),ye=ze(he,ve),je=te&&!ge;return e.useEffect(()=>E(je?null:be.errors),[E,je,be.errors]),e.useEffect(()=>()=>E(null),[E]),{writable:Q,links:$?[{from:0,to:0,line:b,label:I.name,href:D("policies",$)}]:H||K?[{from:0,to:0,line:b,label:H?.expression??K.expression,href:s("rules",{tab:H?"list":"dns",view:H?"advanced":null,edit:H?.rule_id??K.rule_id,list:H?null:B})}]:Xn(ne,n.id,L,n.kind),note:p?.note??T(u?"config.editNoteValidate":"config.editNote"),refused:pe,diagnostics:{rows:ye.rows,errors:be.errors,warnings:be.warnings,level:ye.level,setLevel:e=>xe(e),levels:[["all",T("ui.allCount",{n:be.errors+be.warnings+be.infos})],["error",T("config.levelErrors",{n:be.errors})],["warning",T("config.levelWarnings",{n:be.warnings})],["info",T("config.levelInfo",{n:be.infos})]],scope:te?T("config.draftDiagnostics"):ge?T("config.fileDiagnostics"):T("config.acceptedDiagnostics",{generation:v}),quiet:je?T("config.draftPending"):he.length?null:T("config.clean"),open:Ye(be.errorKeys,y),setOpen:e=>w({open:e,errorKeys:be.errorKeys}),go:e=>{"jump"===e.action?ae(e.line):"open"===e.action&&x(e.sourceId,e.line)}},restart:te?R(X??G??[]):[],marks:ee,text:ne,outbounds:()=>M(r,{id:n.id,content:ne}),focus:re?.line??b,focusKey:re?.key??0,dirty:te,conflict:oe?T("config.changedOnDisk"):null,keep:()=>W(e=>e&&{...e,origin:n}),validate:async()=>{if(!de)return!1;const e=await h.validate({sources:de,mode:"full"});return!!e&&ue(e)},save:async()=>{if(null===V||h.busy||!Q||oe)return;J(null);const e=await h.apply(V.origin,V.text);if(z(null),e){if(e.diagnostics)return J(e.diagnostics),void ue({valid:!1,diagnostics:e.diagnostics},!1);k("positive",T("config.saved",{path:Be(n,A,T).label})),le.clear(),W(null)}},cancel:fe,change:e=>{h.cancel(),e===n.content?fe():(z(null),J(null),W(r=>({text:e,origin:r?.origin??n})))},view:me,busy:!!h.busy,validating:"validate"===h.busy,saving:"save"===h.busy,saveButton:oe?{disabled:!0,tip:T("config.changedOnDisk")}:Qe(h.busy,Q,p?.note??null,O,T),validateDisabled:!!h.busy||!de,reason:te?!Q&&p?p.note:"validate"===h.busy?T("config.saveValidating"):Ge({busy:!!h.busy,conflict:!!oe},T):u&&!h.busy?Je(de,r,g,T):null}}function ir(){const n=o(),r=l[c()],i=A(),s=d().data,a=L(s),t=u(!0===s?.resources.config.available),f=P(a.revisions),p=F(),m=_(),g=q();e.useEffect(()=>()=>g.next(),[g]);const[h,b]=e.useState(null),[v,y]=e.useState(null),S=v&&{...v,...p.pending},[C,N]=e.useState(null),[R,D]=e.useState([]),M=function(e,n,r,i,s,a){const t=!1===n?.recorded;return{unrecorded:t,headNumber:null==a?void 0:x(a,i),rows:(e?.revisions??[]).map(n=>({...n,id:String(n.revision),number:x(n.revision,i),head:n.revision===e?.active,canRestore:r&&(n.revision!==e?.active||t),originText:"import"===n.origin?s("config.revisions.origin.import"):"write"===n.origin?s("config.revisions.origin.write"):"activate"===n.origin?s("config.revisions.origin.activate"):n.origin,size:T(n.bytes,i),metadata:[[s("config.revisions.revision"),x(n.revision,i)],[s("config.revisions.createdAt"),E(n.created_at,i)],[s("config.revisions.parent"),null===n.parent?"—":x(n.parent,i)],[s("config.revisions.principal"),n.principal],[s("config.revisions.hash"),n.content_sha256]]}))}}(f.data,I(t.data),a.canActivate,r,n,S?.head),O=M.rows.find(e=>e.id===h),K=M.rows.find(e=>e.revision===S?.revision),V=()=>{g.next(),y(null)},W=async(e=!1)=>{if(!S||p.busy||(e?!p.pending:p.pending))return;const r=g.start();N(null),D([]);try{const s=e?await p.reread():await p.apply(S.revision,a.replaceRequired,S.head);if(A()!==i||!s)return;if("changed"in s)return void(r()&&(y({revision:S.revision,head:s.changed}),N({id:Date.now(),text:n("config.revisions.changed")})));k("positive",n(null===S.revision?"config.backup.imported":"config.revisions.restored")),r()&&V()}catch(s){if(A()!==i)return;if(w(s,n,n("ui.writeFailed")),r()){if(s instanceof $&&"ui.operationUnknown"===s.key)return;const e=(s instanceof H||s instanceof $?s.details:null)?.diagnostics;D(e??[]);const r=j(e??[]);N({id:Date.now(),text:r?n("config.writeRestart",{n:r}):B(s,n)})}}};return{management:a,list:f,view:M,detail:O,selected:h,setSelected:b,confirmation:S,target:K,problem:C,diagnostics:We(R,[],r,n),busy:!!p.busy,confirmDisabled:!!S?.operation||(null===S?.revision?!a.import:!K?.canRestore),show:e=>{g.next(),N(null),D([]),y(p.pending?{revision:p.pending.revision,head:p.pending.head}:{revision:e,head:f.error?void 0:f.data?.active})},close:V,submit:()=>W(),reread:()=>W(!0),exporting:!!m.busy,exportError:m.error,export:async()=>{const e=await m.run("export",e=>i.exportConfig(e));e&&A()===i&&tn(e.filename,e.content,e.contentType)}}}function sr(){const e=o(),r=ir();return n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"rp-cluster",children:[r.management.export&&n.jsxs(K,{onPress:()=>{r.export()},isPending:r.exporting,children:[n.jsx(qe,{}),e("config.backup.export")]}),r.management.import&&n.jsx(K,{onPress:()=>r.show(null),children:e("config.backup.import")}),(r.management.export||r.list.data)&&n.jsx(V,{title:e("config.tabHistory"),text:[...r.management.export?[e("config.backup.exportHelp")]:[],...r.list.data?[e("config.revisions.retention",{n:r.list.data.max_revisions})]:[]]})]}),n.jsx(W,{error:r.exportError,message:n=>e("config.backup.exportFailed",{error:n})}),r.view.unrecorded&&n.jsx(U,{tone:"informative",children:e("config.revisions.unrecorded")}),r.management.revisions&&n.jsxs(n.Fragment,{children:[n.jsx(W,{error:r.list.error,onRetry:r.list.refetch}),!r.list.data&&r.list.loading?n.jsx(z,{}):r.list.data&&n.jsx(n.Fragment,{children:r.view.rows.length?n.jsx(on,{label:e("config.tabHistory"),rows:r.view.rows,fit:!0,loading:r.list.loading,selected:r.selected,onSelect:r.setSelected,rowDetail:!0,cols:[{id:"revision",label:e("config.revisions.revision"),minWidth:160,isRowHeader:!0,render:r=>n.jsxs("span",{className:"rp-cluster",children:[r.number,r.head&&n.jsx(G,{children:e("config.revisions.head")})]})},{id:"created",label:e("config.revisions.createdAt"),minWidth:150,render:e=>n.jsx(ln,{at:e.created_at})},{id:"origin",label:e("config.revisions.origin"),minWidth:110,render:e=>e.originText},{id:"size",label:e("config.revisions.bytes"),minWidth:100,render:e=>e.size}]}):n.jsx(J,{children:e("config.revisions.empty")})})]}),n.jsx(Q,{title:e("config.revisions.details"),isOpen:!!r.detail,onOpenChange:e=>{e||r.setSelected(null)},scrollBody:!0,footer:i=>n.jsxs(n.Fragment,{children:[n.jsx(K,{onPress:i,children:e("ui.close")}),r.management.canActivate&&n.jsx(K,{isDisabled:!r.detail?.canRestore,onPress:()=>{r.show(r.detail.revision),r.setSelected(null)},children:e("config.revisions.restore")})]}),children:r.detail&&n.jsxs(n.Fragment,{children:[n.jsx(Y,{items:r.detail.metadata}),n.jsx(X,{title:e("config.revisions.sources"),children:r.detail.sources.map((r,i)=>n.jsx(Y,{items:[[e("config.source"),r.path],[e("config.revisions.hash"),r.sha256]]},i))})]})}),n.jsxs(Z,{title:null===r.confirmation?.revision?e("config.backup.importTitle"):e("config.revisions.restoreTitle",{revision:r.target?.number??""}),isOpen:!!r.confirmation,onCancel:r.close,onConfirm:()=>{r.submit()},isPending:r.busy,isDisabled:r.confirmDisabled,confirmLabel:e(null===r.confirmation?.revision?"config.backup.import":"config.revisions.restore"),error:r.problem,scrollBody:!0,children:[n.jsx("p",{children:null===r.confirmation?.revision?e("config.backup.importHelp"):e("config.revisions.restoreHelp")}),r.target&&n.jsx(Y,{items:r.target.metadata.slice(0,2)}),void 0!==r.view.headNumber&&n.jsx(Y,{items:[[e("config.revisions.head"),r.view.headNumber]]}),r.confirmation?.operation&&!r.busy&&n.jsxs(U,{tone:"informative",children:[n.jsx("p",{children:e("ui.operationUnknown")}),n.jsx(K,{onPress:()=>{r.reread()},children:e("ui.refresh")})]}),r.diagnostics.length>0&&n.jsx(on,{label:e("config.diagnostics"),rows:r.diagnostics,fit:!0,cols:[{id:"message",isRowHeader:!0,label:e("config.diagnostics"),minWidth:220,text:"wrap",render:r=>n.jsxs("span",{children:[r.text,r.backend&&r.backend!==r.message&&n.jsx(ee,{flush:!0,title:e("config.backendText"),children:n.jsx("code",{children:r.backend})})]})}]})]})]})}function ar({config:r}){const i=o(),s=m().data,a=e.useMemo(()=>De(s),[s]);return n.jsx("div",{className:"rp-page",children:Xe(r.sources,a,i).map(e=>n.jsxs(ne,{"aria-label":e.kind,children:[n.jsxs("div",{className:"rp-row",children:[n.jsxs("span",{className:"rp-cluster",children:[n.jsx("h2",{className:"rp-h3 rp-code",children:e.kind}),n.jsx("span",{className:"rp-label rp-code",children:e.range})]}),e.href&&n.jsx(re,{appearance:"button",href:e.href,children:i("config.moduleOpen")})]}),n.jsx("span",{className:"rp-label",children:e.note??e.summary})]},e.id))})}const tr="systemctl restart honk-core";function or({settings:e,sources:r}){const i=o(),s=c();return n.jsx(U,{takeFocus:!0,title:i("config.restart.title",{n:e.length}),action:n.jsxs(n.Fragment,{children:[n.jsx("span",{children:i("config.restart.planned")}),e.map(({key:e,sourceId:s,line:a},t)=>{const o=r.find(e=>e.id===s);return n.jsxs("span",{children:[e&&n.jsx("code",{className:"rp-code",children:e})," ",i("config.restart.effect"),null!==a&&o&&n.jsxs("span",{className:"rp-label",children:[" ",`${b(o)}:${a}`]})]},t)}),n.jsx("span",{children:i("config.restart.next")}),n.jsxs("span",{className:"rp-cluster",children:[n.jsx("code",{className:"rp-code rp-limit-snippet",children:tr}),n.jsx(K,{small:!0,onPress:()=>{(async()=>{const e=await se(tr);k(e?"positive":"negative",i(e?"config.restart.copied":"config.restart.copyFailed"))})()},children:i("config.restart.copy")})]}),n.jsxs(re,{appearance:"link",external:!0,href:ie(s,"reload-and-restart"),children:[i("config.restart.docs"),n.jsx("span",{"aria-hidden":"true",children:"↗"})]})]}),children:i("config.restart.body")})}function lr(s){const l=o(),c=function({query:n,go:s}){const l=o(),c=d().data?.resources,g=f(c,"config",{whileLoading:!1}),v=u(g),x=m().data,j=De(x),w=j.globalSettings,S=e.useMemo(()=>v.data?.sources??[],[v.data?.sources]),C=p(S),D=e.useMemo(()=>new URLSearchParams(n),[n]),M=S.filter(e=>"main"===e.kind||"include"===e.kind).flatMap(e=>{const n=r(e.content).blocks.filter(e=>e.name===w?.name);return(n.length?n:"main"===e.kind?[null]:[]).map((n,r)=>({id:`${e.id}:${r}`,source:e,block:n,index:r,label:`${b(e)}:${n?n.line+1:1}`}))}),O=M.find(e=>e.source.id===D.get("source")&&e.index===Number(D.get("section")??0))??M[0],E=O?.source,T=t(v.refetch),[A,L]=e.useState(null),[P,F]=e.useState(null),_=N(!!A,()=>{L(null),F(null)});e.useEffect(()=>T.cancel,[T.cancel,_.revision]);const q=A?.patch??{},I=A?.source.content??E?.content??"",H=r(I),B=H.blocks.filter(e=>e.name===w?.name)[O?.index??0],K=B?i(I,B,H.tokens):[],V=l("ui.listSeparator"),W=(w?.fields??[]).map(e=>{const n=K.filter(n=>n.name===e.key),r=q[e.key]??(n[0]?Ze(e,n[0].value):""),i="boolean"===e.type||!!e.choices&&"integer"!==e.type,s="boolean"===e.type?["true","false"]:e.choices??[];return{key:e.key,group:e.group,label:l(e.label),hint:(a=e,"list"===a.type?l("config.globalList"):a.choices&&"integer"===a.type?l("config.globalChoice",{choices:a.choices.join(V)}):a.max&&"18446744073709551615"!==a.max?l("config.globalRange",{max:a.max}):a.units?l("config.globalUnits",{units:a.units.filter(Boolean).join(V)}):void 0),items:i?[{id:"",label:l("config.globalUnset")},...[...s,...r&&!s.includes(r)?[r]:[]].map(e=>({id:e,label:e}))]:null,value:r,duplicate:n.length>1,invalid:null===en(e,r),change:r=>{if(!E||T.busy)return;T.cancel(),F(null);const i={...q,[e.key]:r};r===(n[0]?Ze(e,n[0].value):"")&&delete i[e.key],L(Object.keys(i).length?{source:A?.source??E,id:O.id,patch:i}:null)}};var a}),U=!!A&&(A.source.content_sha256!==E?.content_sha256||A.id!==O?.id),z=g&&!v.error&&!!E&&!0===c?.config.writable&&E.writable&&!0===C(E)&&!j.holdsCredentials(E),G=!!T.busy,J=!A||!z||U||W.some(e=>e.key in q&&e.invalid),Q=y(T.error)?.diagnostics??null,Y=T.error instanceof $&&"ui.writtenNotRead"===T.error.key,X=P??Q??null,Z=A&&Array.isArray(X)?R(X):[];return e.useEffect(()=>{const e=D.get("field");if("global"!==D.get("tab")||!e)return;const n=document.getElementById("config-global-form")?.querySelector(`[data-setting="${CSS.escape(e)}"] input, [data-setting="${CSS.escape(e)}"] button`);n?.focus(),n?.scrollIntoView({block:"center"})},[D,E?.id,w,z]),{available:g&&!!w,fields:W,groups:Object.entries(nn).map(([e,n])=>({id:e,title:l(n),fields:W.filter(n=>n.group===e)})).filter(e=>e.fields.length>0),source:E,busy:G,blocked:J,writable:z,dirty:!!A,conflict:U,failure:Array.isArray(X)?Z.length?null:l("config.invalid",{n:X.filter(e=>"error"===e.level).length}):X,restart:Z,sources:S,unread:Y?l("ui.writtenNotRead"):null,error:(Q||Y?null:T.error)??v.error,retry:v.refetch,save:async()=>{if(J||G||!w||!O)return;const e=rn(A.source.content,w,O.index,q),n=a(S.filter(e=>C(e)),{id:E.id,content:e});if(c?.config_validate.available&&c.config_validate.modes?.includes("full")){if(!n)return void F(l("config.incomplete"));const e=await T.validate({sources:n,mode:"full"});if(!e)return;if(!e.valid)return void F(e.diagnostics)}const r=await T.apply(A.source,e);r&&(r.diagnostics?F(r.diagnostics):(_.clear(),L(null),k("positive",l("config.globalSaved"))))},cancel:()=>{T.cancel(),_.clear(),L(null),F(null)},choices:M.map(({id:e,label:n})=>({id:e,label:n})),selected:O?.id??"",select:e=>{const r=M.find(n=>n.id===e);r&&s("config",h(n,{tab:"global",source:r.source.id,section:String(r.index),field:null}))}}}(s);return c.available?n.jsxs("form",{id:"config-global-form",className:"rp-page",onSubmit:e=>{e.preventDefault(),c.save()},children:[n.jsx(Pe,{page:!0,children:n.jsx("span",{className:"rp-cluster nowrap rp-source-pick",children:n.jsx(Oe,{side:!0,cut:"path",label:l("config.source"),value:c.selected,items:c.choices,onChange:c.select,isDisabled:c.busy||!c.source})})}),n.jsx("span",{className:"rp-label",children:l("config.globalNote")}),c.unread&&n.jsx(U,{tone:"informative",children:c.unread}),n.jsx(W,{error:c.error,onRetry:c.retry}),c.failure&&n.jsx(U,{children:c.failure}),c.restart.length>0&&n.jsx(or,{settings:c.restart,sources:c.sources}),c.conflict&&n.jsx(U,{children:l("config.changedOnDisk")}),c.source&&!c.writable&&n.jsx(U,{tone:"informative",children:l("config.readOnly")}),c.groups.map(e=>n.jsx(ne,{title:e.title,children:n.jsx(Pe,{className:"top rp-fieldgrid",children:e.fields.map(e=>n.jsxs("div",{className:"rp-field","data-setting":e.key,children:[e.items?n.jsx(Oe,{label:e.label,value:e.value,isDisabled:!c.writable||c.busy||e.duplicate,onChange:e.change,items:e.items}):n.jsx(ae,{label:e.label,name:e.key,value:e.value,onChange:e.change,isDisabled:!c.writable||c.busy||e.duplicate,placeholder:l("config.globalUnset"),error:e.invalid?l("config.globalInvalid"):void 0,"aria-describedby":e.hint?`config-global-${e.key}`:void 0}),n.jsx("span",{className:"rp-label rp-code",children:e.key}),e.hint&&n.jsx("span",{id:`config-global-${e.key}`,className:"rp-label",children:e.hint}),e.duplicate&&n.jsx("span",{className:"rp-label",children:l("config.globalDuplicate")})]},e.key))})},e.id)),n.jsxs(Pe,{page:!0,children:[n.jsx(K,{accent:!0,type:"submit",isPending:c.busy,isDisabled:c.blocked,children:l("config.globalSave")}),c.dirty&&n.jsx(K,{onPress:c.cancel,isDisabled:c.busy,children:l("config.discard")})]})]}):null}function cr(r){const i=o(),s=function({sources:n,refetch:r,open:i}){const s=o(),a=n.find(e=>"main"===e.kind),t=e.useMemo(()=>a?te(a.content):null,[a]),l=e.useMemo(()=>oe(t??[]),[t]),c=e.useMemo(()=>le(n),[n]),[d,u]=e.useState(null),[f,p]=e.useState(null),{busy:m,create:g}=ce(r),h=q(),b=d?.text??"",v=l.find(e=>e.pattern===d?.pattern)??null,x=v?v.prefix+b+v.suffix:b,y=b?v?de(b,v):ue(b):null;return{isOpen:null!==d,show:()=>{h.next(),p(null),u({text:l.length?"":fe(t??[]),pattern:l[0]?.pattern??""})},hide:()=>{h.next(),u(null)},choices:l,choice:v,setChoice:e=>u(n=>n&&{...n,pattern:e}),text:b,setText:e=>u(n=>n&&{...n,text:e}),error:y?s(y):void 0,unmatched:!!b&&!y&&null!==c&&!c(x),problem:f,busy:m,canSubmit:!!b&&!y&&!m,submit:async e=>{if(!b||y||m)return;const n=h.start();try{const r=await g(x);if(!r)return;if(k("positive",s("config.newSourceCreated",{path:x})),!n())return;e(),r.id&&i(r.id)}catch(r){const e=s("config.newSourceFailed",{path:x});if(n()){const n=pe(r,s,e);p(e=>({id:(e?.id??0)+1,text:me(n,s),kind:n.kind}))}else w(r,s,e)}}}}(r);return n.jsxs(n.Fragment,{children:[n.jsxs(K,{onPress:s.show,children:[n.jsx(cn,{}),i("config.newSource")]}),n.jsxs(Q,{title:i("config.newSourceTitle"),narrow:!0,isOpen:s.isOpen,onOpenChange:e=>{e||s.hide()},footer:e=>n.jsxs(n.Fragment,{children:[n.jsx(K,{onPress:e,children:i("ui.cancel")}),n.jsx(K,{accent:!0,isDisabled:!s.canSubmit,isPending:s.busy,onPress:()=>{s.submit(e)},children:i("config.newSourceCreate")})]}),children:[s.problem&&n.jsx(ge,{problem:s.problem},s.problem.id),n.jsxs("div",{className:"rp-list",children:[n.jsx("span",{className:"rp-label",children:i(s.choice?"config.newSourceNameHelp":"config.newSourceHelp")}),s.choices.length>1&&n.jsx(Oe,{label:i("config.newSourcePattern"),items:s.choices.map(e=>({id:e.pattern,label:e.pattern})),value:s.choice?.pattern??"",onChange:s.setChoice,isDisabled:s.busy}),s.choice?n.jsx(ae,{isDisabled:s.busy,label:i("ui.name"),value:s.text,prefix:s.choice.prefix,suffix:s.choice.suffix,placeholder:"extra",spellCheck:!1,error:s.error,onChange:s.setText}):n.jsx(ae,{isDisabled:s.busy,label:i("config.newSourcePath"),value:s.text,placeholder:"config.d/extra.dae",spellCheck:!1,error:s.error,onChange:s.setText}),s.unmatched&&n.jsx(U,{tone:"informative",children:i("config.newSourceUnmatched")})]})]})]})}const dr=dn.define({name:"dae",languageData:{commentTokens:{line:"#"},closeBrackets:{brackets:["(","{","'",'"']}},startState:Yn,token:Qn}),ur=["global","subscription","node","group","dns","routing"].map(e=>({label:e,type:"keyword"})),fr=ve.map(e=>({label:e,type:"property",apply:e+": "})),pr=["domain","dip","sip","dport","sport","l4proto","ipversion","pname","mac","dscp","qname","qtype","upstream"].map(e=>({label:e,type:"function",apply:e+"("})),mr=["geosite","geoip","suffix","full","keyword","regex"].map(e=>({label:e,type:"constant",apply:e+":"})),gr=be.map(e=>({label:e,type:"constant"})),hr=he.map(e=>({label:e,type:"keyword"})),br=[{label:"fallback",type:"keyword",apply:"fallback: "},{label:"include",type:"keyword",apply:"include "}];function vr(e){return un({override:[n=>function(e,n){const i=e.matchBefore(/[\w.-]*/);if(!i)return null;const s=e.state.doc.lineAt(e.pos),a=s.text.slice(0,e.pos-s.from),t=/->\s*[\w.-]*$/.test(a)||/^\s*fallback:\s*[\w.-]*$/.test(a);if(i.from===i.to&&!e.explicit&&!t)return null;const o=e.state.doc.sliceString(0,e.pos),{blocks:l,tokens:c}=r(o),d=c.at(-1);if(d?.to===e.pos&&("quoted"===d.kind||"comment"===d.kind))return null;const u=l.find(n=>n.close===e.pos)?.name;let f;if(t)f=[...n().map(e=>({label:e.name,apply:e.written,type:"variable"})),...hr];else if(/\b(domain|dip|sip|qname)\(\s*[\w.-]*$/.test(a))f=mr;else if(void 0===u)f=ur.map(e=>({...e,apply:(n,r,i,s)=>{const a=e.label+" {\n \n}";n.dispatch({changes:{from:i,to:s,insert:a},selection:{anchor:i+e.label.length+4}})}}));else if("routing"===u||"dns"===u)f=[...pr,...br];else if("global"===u)f=fr;else{if("group"!==u)return null;f=/\bpolicy\s*:\s*[\w.-]*$/.test(a)?gr:[...gr.map(e=>({...e,apply:"policy: "+e.label})),{label:"filter",type:"property",apply:"filter: "}]}return{from:i.from,options:f,validFor:/^[\w.-]*$/}}(n,e)]})}function xr(e){let n=!1;const r=n=>(n.state.readOnly&&e(),!1);return fn.domEventHandlers({keydown:(e,n)=>function(e){return"Backspace"===e.key||"Delete"===e.key||"Enter"===e.key||1===[...e.key].length&&!e.ctrlKey&&!e.metaKey}(e)&&r(n),paste:(e,n)=>r(n),cut:(e,n)=>r(n),pointerdown:e=>(n="touch"===e.pointerType,!1),click:(e,i)=>n&&r(i)})}const yr=[["Completions","cm.completions"],["Find","cm.find"],["Replace","cm.replace"],["next","cm.next"],["previous","cm.previous"],["all","cm.all"],["match case","cm.matchCase"],["regexp","cm.regexp"],["by word","cm.byWord"],["replace","cm.replaceOne"],["replace all","cm.replaceAll"],["close","ui.close"],["Go to line","cm.gotoLine"],["go","cm.go"],["current match","cm.currentMatch"],["replaced $ matches","cm.replacedMatches"],["replaced match on line $","cm.replacedOnLine"],["on line","cm.onLine"],["Selection deleted","cm.selectionDeleted"],["Control character","cm.controlCharacter"]],jr=e=>mn.phrases.of(Object.fromEntries(yr.map(([n,r])=>[n,e(r)]))),kr=fn.theme({"&":{backgroundColor:"var(--rp-base)",color:"var(--rp-text)",border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-md)",fontSize:"var(--rp-text-sm)"},"&.cm-focused":{outline:"none",borderColor:"var(--rp-text)"},".cm-scroller":{fontFamily:"var(--rp-font-mono)",lineHeight:"var(--rp-line-body)",fontVariantLigatures:"none",borderRadius:"calc(var(--rp-r-md) - 1px)"},".cm-content":{padding:"var(--rp-space-2) 0",caretColor:"var(--rp-text)"},".cm-line":{padding:"0 var(--rp-space-3)"},".cm-gutters":{backgroundColor:"var(--rp-base)",color:"var(--rp-muted)",border:"none"},".cm-lineNumbers .cm-gutterElement":{padding:"0 var(--rp-space-2) 0 var(--rp-space-3)",minWidth:"40px"},".cm-activeLine, .cm-focusLine":{backgroundColor:"color-mix(in srgb, var(--rp-hl-med) 60%, transparent)"},".cm-activeLineGutter":{backgroundColor:"transparent",color:"var(--rp-text)"},".cm-selectionBackground, &.cm-focused .cm-selectionBackground, ::selection":{backgroundColor:"var(--rp-hl-high)"},".cm-cursor":{borderLeftColor:"var(--rp-text)"},".cm-matchingBracket":{backgroundColor:"color-mix(in srgb, var(--rp-accent) 20%, transparent)",outline:"none"},".cm-selectionMatch":{backgroundColor:"color-mix(in srgb, var(--rp-notice) 25%, transparent)"},".cm-gutter-lint":{width:"12px"},".cm-gutter-lint .cm-gutterElement":{padding:"0"},".cm-lint-marker":{width:"8px",height:"8px",margin:"6px 2px",borderRadius:"50%"},".cm-lint-marker-error":{content:"none",backgroundColor:"var(--rp-negative)"},".cm-lint-marker-warning":{content:"none",backgroundColor:"var(--rp-notice)"},".cm-lint-marker-info":{content:"none",backgroundColor:"var(--rp-foam)"},".cm-tooltip.cm-tooltip-lint":{backgroundColor:"var(--rp-text)",color:"var(--rp-on-text)",border:"none",borderRadius:"var(--rp-r-sm)",padding:"var(--rp-space-half) 0"},".cm-tooltip-lint .cm-diagnostic":{border:"none",padding:"var(--rp-space-half) var(--rp-space-2)",fontSize:"var(--rp-text-xs)",lineHeight:"16px",fontFamily:"inherit"},".cm-tooltip-lint .cm-diagnosticText":{color:"inherit"},".cm-diag-line-error":{backgroundColor:"color-mix(in srgb, var(--rp-negative) 14%, transparent)"},".cm-diag-line-warning":{backgroundColor:"color-mix(in srgb, var(--rp-notice) 16%, transparent)"},".cm-diag-line-info":{backgroundColor:"color-mix(in srgb, var(--rp-foam) 14%, transparent)"},".cm-lintRange-error":{backgroundImage:"none",textDecoration:"underline wavy var(--rp-negative)",textUnderlineOffset:"3px"},".cm-lintRange-warning":{backgroundImage:"none",textDecoration:"underline wavy var(--rp-notice)",textUnderlineOffset:"3px"},".cm-lintRange-info":{backgroundImage:"none",textDecoration:"underline dotted var(--rp-foam)",textUnderlineOffset:"3px"},".cm-tooltip":{backgroundColor:"var(--rp-surface)",border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-md)",color:"var(--rp-text)"},".cm-tooltip.cm-tooltip-autocomplete > ul > li[aria-selected]":{backgroundColor:"var(--rp-selected)",color:"var(--rp-text)"},".cm-tooltip.cm-tooltip-autocomplete > ul":{fontFamily:"var(--rp-font-mono)",fontVariantLigatures:"none"},".cm-panels":{backgroundColor:"var(--rp-surface)",color:"var(--rp-text)"},".cm-panels-bottom":{borderTop:"1px solid var(--rp-hl-med)"},".cm-textfield":{border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-sm)",backgroundColor:"var(--rp-base)",color:"var(--rp-text)"},".cm-button":{border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-sm)",backgroundImage:"none",backgroundColor:"var(--rp-overlay)",color:"var(--rp-text)"}}),wr=zn.define([{tag:Gn.comment,color:"var(--rp-code-comment)"},{tag:Gn.keyword,color:"var(--rp-code-keyword)",fontWeight:"700"},{tag:Gn.string,color:"var(--rp-code-string)"},{tag:Gn.number,color:"var(--rp-code-number)"},{tag:Gn.propertyName,color:"var(--rp-code-propertyName)"},{tag:Gn.variableName,color:"var(--rp-code-variableName)"},{tag:Gn.operator,color:"var(--rp-code-operator)"},{tag:Gn.punctuation,color:"var(--rp-code-punctuation)"}]),Sr=Hn.of((e,n)=>{const r=e.lineAt(n,-1),i=r.from>0?e.lineAt(r.from-1,-1):null;if(!i)return 0;const s=/^\s*/.exec(i.text)[0].length,a=/\{\s*(#.*)?$/.test(i.text),t=/^\s*\}/.test(r.text);return Math.max(0,s+(a?2:0)-(t?2:0))}),Cr=Un.define(),Nr={error:In.line({class:"cm-diag-line cm-diag-line-error"}),warning:In.line({class:"cm-diag-line cm-diag-line-warning"}),info:In.line({class:"cm-diag-line cm-diag-line-info"})},Rr=qn.define({create:()=>In.none,update(e,n){let r=e.map(n.changes);for(const i of n.effects){if(!i.is(Cr))continue;const e=new $n,s={error:0,warning:1,info:2},a=new Map;for(const r of i.value){if(r.line<1||r.line>n.state.doc.lines)continue;const e=a.get(r.line);(!e||s[r.level]e-n)){const i=n.state.doc.line(r).from;e.add(i,i,Nr[a.get(r).level])}r=e.finish()}return r},provide:e=>fn.decorations.from(e)}),Dr=[{id:"undo",label:"cm.undo",run:Fn},{id:"redo",label:"cm.redo",run:_n},{id:"comment",label:"cm.toggleComment",run:Rn}],Mr=[],Or=Wn.define(),Er=Un.define(),Tr=In.line({class:"cm-focusLine"}),Ar=qn.define({create:()=>In.none,update(e,n){let r=e.map(n.changes);for(const i of n.effects)i.is(Er)&&(r=In.set(Tr.range(n.state.doc.line(i.value).from)));return r},provide:e=>fn.decorations.from(e)}),Lr=e=>[mn.readOnly.of(e),fn.editable.of(!e),e?Ar:[Bn(),Kn(),Vn()]];function Pr({value:r,onChange:i,readOnly:s=!1,marks:a=Mr,focusLine:t,label:l,outbounds:c,onSave:d,onReadOnlyAttempt:u,compact:f,actions:p=[],focusKey:m,banner:g}){const h=e.useRef(null),b=xe(h,p.map(e=>e.label).join("\n")+s+l),v=e.useRef(null);e.useLayoutEffect(()=>{b&&h.current?.contains(document.activeElement)&&v.current?.querySelector("button")?.focus()},[b]);const x=e.useRef(null),{isFocusVisible:y}=ye({isTextInput:!0}),j=e.useRef(null),k=e.useRef(null),w=e.useRef(i),S=e.useRef(c),C=e.useRef(d),N=e.useRef(u);e.useEffect(()=>{w.current=i,S.current=c,C.current=d,N.current=u});const R=e.useRef(new pn),D=o(),M=e.useRef(new pn),O=e.useRef(new pn),E=e.useRef(new pn);e.useLayoutEffect(()=>{const e=new fn({parent:x.current,state:mn.create({doc:r,extensions:[gn(),hn(),fn.scrollMargins.of(e=>{const n=j.current?.getBoundingClientRect().bottom;return void 0===n?null:{top:Math.min(n,Math.max(0,n-e.scrollDOM.getBoundingClientRect().top))}}),bn(),E.current.of(vn()),xn(),Rr,yn(),jn(),kn(),wn.of(" "),Sn(),Sr,vr(()=>S.current?.()??[]),dr,Cn(wr),kr,Nn.of([{key:"Mod-s",run:()=>(C.current?.(),!0)},{key:"Mod-/",run:Rn},{key:"Mod-g",run:Dn},...Mn,...On,...En,...Tn,...An,Ln]),R.current.of(Lr(s)),M.current.of(jr(D)),O.current.of(fn.contentAttributes.of({"aria-label":l,tabindex:"0"})),xr(()=>N.current?.()),fn.updateListener.of(e=>{e.docChanged&&!e.transactions.some(e=>e.annotation(Or))&&w.current?.(e.state.doc.toString())})]})});return k.current=e,()=>{e.destroy(),k.current=null}},[]),e.useEffect(()=>{const e=k.current;e&&e.dispatch({effects:R.current.reconfigure(Lr(s))})},[s]),e.useEffect(()=>{k.current?.dispatch({effects:M.current.reconfigure(jr(D))})},[D]),e.useEffect(()=>{k.current?.dispatch({effects:O.current.reconfigure(fn.contentAttributes.of({"aria-label":l,tabindex:"0"}))})},[l]),e.useEffect(()=>{const e=k.current;e&&e.state.doc.toString()!==r&&(e.dispatch({changes:{from:0,to:e.state.doc.length,insert:r},annotations:Or.of(!0),effects:E.current.reconfigure([])}),e.dispatch({effects:E.current.reconfigure(vn())}))},[r]),e.useEffect(()=>{const e=k.current;if(!e)return;const n=Pn(e.state,function(e,n){return n.filter(n=>n.line>=1&&n.line<=e.doc.lines).map(n=>{const r=e.doc.line(n.line),i=Math.max(0,(n.column??1)-1),s=(new TextEncoder).encode(r.text);let a=0;for(let e=0;ei)break;e+=n,a+=4===n?2:1}return{from:r.from+a,to:r.to,severity:n.level,message:n.message}})}(e.state,a)),r=Array.isArray(n.effects)?n.effects:n.effects?[n.effects]:[];e.dispatch({...n,effects:[...r,Cr.of(a)]})},[a]),e.useEffect(()=>{const e=k.current;if(!e||!t||t<1||t>e.state.doc.lines)return;const n=e.state.doc.line(t);e.dispatch({selection:{anchor:n.from},effects:[Er.of(t),fn.scrollIntoView(n.from,{y:"center"})]}),e.focus()},[t,m]);const T=e=>{k.current&&e(k.current)};return n.jsxs(n.Fragment,{children:[!f&&n.jsxs("div",{className:"rp-editor-head",ref:j,children:[n.jsxs("div",{className:"rp-toolbar rp-editor-toolbar",children:[n.jsx(Ee,{actions:p.slice(0,1),overflowMode:"wrap"}),n.jsxs("div",{className:"rp-editor-actions","data-collapsed":b||void 0,children:[n.jsxs("div",{className:"rp-toolbar",ref:h,children:[n.jsx(Ee,{actions:p.slice(1),overflowMode:"wrap"}),n.jsx(K,{onPress:()=>T(Jn),children:D(s?"cm.find":"cm.findReplace")}),n.jsx(K,{onPress:()=>T(Dn),children:D("cm.gotoLine")}),i&&n.jsx(je,{label:D("cm.commands"),isDisabled:s,content:n.jsx(ke,{"aria-label":D("cm.commands"),onAction:e=>{const n=Dr.find(n=>n.id===e);n&&T(n.run)},children:Dr.map(e=>n.jsx(we,{id:e.id,className:"rp-item plain",textValue:D(e.label),children:D(e.label)},e.id))}),children:D("cm.commands")})]}),b&&n.jsx("div",{className:"rp-editor-overflow",ref:v,children:n.jsx(Te,{actions:[...p.slice(1),{id:"find",label:D(s?"cm.find":"cm.findReplace"),onAction:()=>requestAnimationFrame(()=>T(Jn))},{id:"line",label:D("cm.gotoLine"),onAction:()=>requestAnimationFrame(()=>T(Dn))},...i?Dr.map(e=>({id:e.id,label:D(e.label),isDisabled:s,onAction:()=>requestAnimationFrame(()=>T(e.run))})):[]]})})]})]}),g]}),n.jsx("div",{className:f?"rp-editor compact":"rp-editor",ref:x,"data-keyboard":y||void 0})]})}function Fr({message:e,busy:r,keep:i,discard:s}){const a=o();return n.jsx(U,{action:(i||s)&&n.jsxs(Pe,{children:[i&&n.jsx(K,{isDisabled:r,onPress:i,children:a("config.keepChanges")}),s&&n.jsx(K,{isDisabled:r,onPress:s,children:a("config.discard")})]}),children:e})}function _r(r){const{canValidate:i}=r,s=o(),{writable:a,links:t,diagnostics:l,note:c,refused:d,restart:u,marks:f,text:p,outbounds:m,focus:g,focusKey:h,dirty:b,conflict:v,keep:x,validate:y,save:j,cancel:k,change:w,view:S,busy:C,validating:N,saving:R,saveButton:D,validateDisabled:M,reason:O}=rr(r),E=e.useRef(null);e.useEffect(()=>{r.focusDiagnostics&&(E.current?.focus(),E.current?.scrollIntoView({block:"nearest"}))},[r.focusDiagnostics,r.focusLine,r.source.id]);const T=function(e,n,r){return e.filter(e=>e.line===n||n&&e.line<=n&&r.slice(0,e.to).split("\n").length>=n)}(t,g,p),A=T.length?T:t,L=n.jsx(Pe,{"aria-label":s("config.forms"),children:A.map(e=>n.jsx(re,{appearance:"button",href:e.href,children:e.label},e.from))}),P=n.jsx("div",{ref:E,tabIndex:-1,role:"region","aria-label":s("config.diagnostics"),className:"rp-config-diagnostics",children:l.quiet?n.jsx("span",{className:"rp-config-diagnostics-quiet rp-label",children:l.quiet}):n.jsxs(ee,{isExpanded:l.open,onExpandedChange:l.setOpen,title:n.jsxs("span",{className:"rp-config-diagnostics-summary",children:[n.jsx(G,{tone:l.errors?"negative":void 0,children:s("config.levelErrors",{n:l.errors})}),n.jsx(G,{tone:l.warnings?"warn":void 0,children:s("config.levelWarnings",{n:l.warnings})}),n.jsx("span",{className:"rp-label",children:l.scope})]}),children:[n.jsx("div",{className:"rp-config-diagnostic-filter",children:n.jsx(Ae,{label:s("config.level"),value:l.level,onChange:l.setLevel,items:l.levels})}),n.jsx("div",{className:"rp-config-diagnostic-list",role:"list","aria-label":s("config.diagnostics"),children:l.rows.map(e=>n.jsxs("div",{className:"rp-config-diagnostic",role:"listitem",children:[n.jsxs(Se,{small:!0,tone:e.tone,children:[n.jsx(Ce,{children:`${e.levelText} `}),e.text]}),e.backend&&n.jsx(ee,{flush:!0,title:s("config.backendText"),children:n.jsx("code",{children:e.backend})}),e.action&&n.jsx(K,{small:!0,className:"rp-config-diagnostic-go",label:"jump"===e.action?s("config.jumpToLine",{line:e.line}):s("config.openSourceAt",{where:e.where}),onPress:()=>l.go(e),children:s("jump"===e.action?"cm.go":"config.openSource")})]},e.id))})]})}),F=[...i?[{id:"validate",label:s("config.validate"),isPending:N,isDisabled:M,reason:O??void 0,onAction:()=>{y()}}]:[],...b?[{id:"cancel",label:s("ui.cancel"),isDisabled:C,onAction:k},{id:"save",label:s("config.save"),accent:!0,isPending:R,isDisabled:D.disabled,reason:D.tip??O??void 0,onAction:()=>{j()}}]:[]];return n.jsxs(ne,{title:s("config.editor"),className:"rp-source-card","aria-label":S.label,help:a?{title:s("config.editor"),text:s("config.writeHelp")}:void 0,reason:O,children:[n.jsx("div",{className:"rp-row rp-source-note",children:n.jsx("span",{className:"rp-cluster",children:b?n.jsxs(n.Fragment,{children:[n.jsx(G,{tone:"warn",children:s("config.unsaved")}),n.jsx("span",{className:"rp-label",children:s("config.unsavedHint")})]}):n.jsx("span",{className:"rp-label",children:c})})}),v&&n.jsx(Fr,{message:v,busy:C,keep:x}),u.length>0&&n.jsx(or,{settings:u,sources:r.sources}),T.length?L:t.length>0&&n.jsx(ee,{title:s("config.forms"),children:L}),n.jsx(Pr,{actions:F,label:S.label,value:p,readOnly:!a||C,onChange:w,onReadOnlyAttempt:d,marks:f,focusLine:g,focusKey:h,banner:P,outbounds:m,onSave:b&&!C?()=>{j()}:void 0})]})}function qr(e){const r=o(),{error:i,reload:s,loading:a,ready:t,tabsReady:l,metadata:c,redacted:d,tabs:u,tab:f,setTab:p,selectedId:m,select:g,sourceProps:h,newSourceProps:b,modulesProps:v,sourceModel:x,sourceOptions:y,exportSource:j,summaryTone:k,summaryText:w}=nr(e),S={history:n.jsx(sr,{}),modules:v&&n.jsx(ar,{...v}),global:n.jsx(lr,{...e}),source:n.jsxs(n.Fragment,{children:[n.jsxs(Pe,{page:!0,children:[n.jsxs("span",{className:"rp-cluster nowrap rp-source-pick",children:[n.jsx(Oe,{side:!0,cut:"path",label:r("config.source"),value:m,onChange:g,items:y}),x&&n.jsxs(n.Fragment,{children:[x.readOnly&&n.jsx(Ne,{help:x.readOnly.help,children:n.jsx(G,{children:x.readOnly.label})}),n.jsx(Re,{className:"rp-label",text:x.loaded,children:x.facts})]})]}),(b||x)&&n.jsxs("span",{className:"rp-cluster nowrap",children:[b&&n.jsx(cr,{...b}),x&&n.jsxs(K,{onPress:j,children:[n.jsx(qe,{}),r("config.export")]})]})]}),x&&n.jsx("span",{className:"rp-label",children:r("config.exportWarning")}),h&&n.jsx(_r,{...h},x.id)]})};return n.jsxs("div",{className:"rp-page",children:[n.jsx(W,{error:i,onRetry:s}),a&&n.jsx(z,{}),t&&n.jsxs(Pe,{page:!0,children:[n.jsx(Y,{row:!0,items:c}),n.jsx(Se,{small:!0,tone:k,children:w}),d&&n.jsx(Se,{small:!0,tone:"muted",children:r("config.redacted")})]}),l&&n.jsx(Le,{page:!0,label:r("nav.config"),value:f,onChange:p,items:u.map(e=>({...e,content:S[e.id]}))})]})}export{qr as Config}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Config-kDn1yln4.js b/luci-app-honk/root/etc/honk/doona/assets/Config-kDn1yln4.js deleted file mode 100644 index 12874fc71..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Config-kDn1yln4.js +++ /dev/null @@ -1 +0,0 @@ -import{r as e,j as n}from"./vendor-react-64fcanlc.js";import{s as r,h as i,j as s,fn as a,a2 as t,F as o,aC as l,V as c,$ as d,a1 as u,a0 as f,dL as p,a5 as g,dc as m,w as h,eQ as b,de as v,ag as x,fo as y,fp as j,a8 as w,eS as k,r as S,da as C,cC as N,fq as R,fr as D,f0 as O,fs as M,ap as T,c0 as E,ft as P,fu as A,a7 as L,dJ as F,fv as _,L as q,bD as $,b4 as I,O as H,aS as B,P as V,bP as W,D as K,aP as U,au as z,cD as G,bs as Q,dD as J,cE as Y,dC as Z,Q as X,G as ee,Y as ne,f8 as re,bQ as ie,fw as se,fx as ae,fy as te,fz as oe,fA as le,c2 as ce,fB as de,b_ as ue,fC as fe,bZ as pe,fD as ge,bk as me,fE as he,fF as be,fG as ve,Z as xe,aV as ye,aN as je,T as we}from"./index-BgFj_VXE.js";import{e as ke,u as Se,L as Ce,A as Ne,M as Re,S as De}from"./logs-BxISynQ4.js";import{T as Oe}from"./Tabs-CD2lZase.js";import{T as Me}from"./Toolbar-CIBfeuEz.js";import{r as Te,a0 as Ee,D as Pe}from"./activity-D06xJ7oH.js";import{d as Ae,c as Le,r as Fe,e as _e,f as qe,g as $e,h as Ie,i as He,j as Be,k as Ve,v as We,l as Ke,m as Ue,n as ze,o as Ge,p as Qe,s as Je,w as Ye}from"./nav-BidFSCY-.js";import{u as Ze,a as Xe}from"./flows-xKlsDqlH.js";import{d as en}from"./files-Dt8K7QfP.js";import{D as nn}from"./Table-Dprh3Btz.js";import{T as rn}from"./TimeCell-B4WLB8Ou.js";import{l as sn,b as an}from"./format-s2EANuUb.js";import{A as tn}from"./AddCircle-prR7q573.js";import{S as on,a as ln,E as cn,C as dn,b as un,l as fn,c as pn,h as gn,d as mn,r as hn,e as bn,f as vn,g as xn,i as yn,j as jn,s as wn,k as kn,t as Sn,m as Cn,n as Nn,o as Rn,p as Dn,q as On,u as Mn,v as Tn,w as En,x as Pn,y as An,z as Ln,D as Fn,R as _n,A as qn,B as $n,F as In,G as Hn,H as Bn,I as Vn,J as Wn,K as Kn,L as Un}from"./vendor-editor-BRV-W12m.js";import{d as zn,s as Gn}from"./daeTokens-BVtuNnWZ.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Select-CkiGmyVC.js";import"./useGridSelectionCheckbox-BxnCShqN.js";import"./Virtualizer-CZl-q5wo.js";import"./index-DUM-iwa2.js";function Qn(e,n,a,t="main"){if(!a.daeText)return[];const{blocks:o,tokens:l}=r(e),c=a.globalSettings;return o.flatMap(r=>{if(r.name===c?.name){const a=o.filter(e=>e.name===c.name).indexOf(r),t=i(e,r,l);return t.filter(e=>1===t.filter(n=>n.name===e.name).length&&c.fields.some(n=>n.key===e.name)).map(i=>({kind:r.name,from:i.from,to:i.to,label:i.name,line:e.slice(0,i.from).split("\n").length,href:s("config",{tab:"global",source:n,section:String(a),field:i.name})}))}const a=Ae[r.name];return"subscription"===r.name?"main"!==t?[]:Te(e).filter(e=>e.from>r.open&&e.to<=r.close).map(e=>({kind:r.name,from:e.from,to:e.to,label:e.tag,line:e.line,href:s("nodes",{editSubscriptionTag:e.tag})})):"dns"===r.name?r.children.filter(e=>"routing"===e.name).flatMap(e=>e.children.filter(e=>"request"===e.name||"response"===e.name).map(e=>({kind:r.name,from:e.from,to:e.to,label:e.name,line:e.line+1,href:a}))):a?[{kind:r.name,from:r.from,to:r.to,label:r.name,line:r.line+1,href:a}]:[]})}const Jn=()=>{};const Yn=new Map;function Zn({go:n,query:r}){const i=o(),s=l[c()],a=d(),S=a.data?.resources,C=u(f(S,"config",{whileLoading:!0})),N=function(n){const r=o(),i=t(n),s=e.useMemo(()=>{const e=y(i.error);return e?e.diagnostics??[]:null},[i.error]);return e.useEffect(()=>{if(i.error)if(s){const e=j(s);w("negative",e?r("config.writeRestart",{n:e}):r("ui.writeInvalid",{n:s.filter(e=>"error"===e.level).length}))}else k(i.error,r,r("ui.writeFailed"))},[i.error,s,r]),{...i,diagnostics:s}}(C.refetch),R=e.useMemo(()=>new URLSearchParams(r),[r]),D=e.useMemo(()=>C.data?.sources??[],[C.data]),O=D.find(e=>"main"===e.kind)??null,M=D.find(e=>e.id===R.get("source"))??D[0]??null,T=M?.id??null,E=(e,i)=>n("config",h(r,{tab:"source",source:e,line:null===i?null:String(i)})),P=Number(R.get("line"))||null,A=C.data?.diagnostics??[],L=e.useMemo(()=>{const e=C.data?.diagnostics??[];return{error:e.filter(e=>"error"===e.level).length,warning:e.filter(e=>"warning"===e.level).length}},[C.data]),F=f(S,"config_validate",{whileLoading:!1})&&(S?.config_validate.modes??[]).includes("full"),_=!0===S?.config.writable,q=p(D),$=g().data,I=e.useMemo(()=>ke($),[$]),H=Le(!!I.globalSettings,a.data),B=M?Fe(M,_,q(M),I,i):null,V=!!M&&!B,[W,K]=e.useState(Yn),[U,z]=e.useState(null),G=U??L.error,Q=R.has("source")||void 0===O?.content?"source":"modules",J=m("validate"===R.get("tab")?h(r,{tab:"source"}):r,H.map(e=>e.id),Q),Y=M?{source:M,sources:D,open:E,diagnostics:A,canValidate:F&&("main"===M.kind||"include"===M.kind),canWrite:V,readOnly:B,isComplete:q,editor:N,focusLine:P,generation:C.data?.generation_id??"",focusDiagnostics:"validate"===R.get("tab"),diagnosticsChoice:W.get(M.id)??null,chooseDiagnostics:e=>K(n=>new Map(n).set(M.id,e)),reportErrors:z}:null,Z=!0===S?.config.create&&!0===S.config.writable?{sources:D,refetch:C.refetch,open:e=>E(e,null)}:null;return{error:a.error??C.error,reload:()=>{a.refetch(),C.refetch()},loading:C.loading&&!C.data,ready:!!C.data,tabsReady:!!C.data||H.some(e=>"history"===e.id),metadata:C.data?qe(C.data.revision,i):[],redacted:!!C.data?.secrets_redacted,tabs:H.map(e=>({id:e.id,label:"source"===e.id&&G?i("ui.aside",{text:i(e.titleKey),note:x(G,s)}):i(e.titleKey)})),tab:J,setTab:e=>n("config",h(v(r,e,null),{field:null})),selectedId:T??"",select:e=>n("config",h(r,{source:e,line:null})),sourceProps:Y,newSourceProps:Z,modulesProps:C.data?{config:C.data}:null,sourceModel:M?{..._e(M,s,i),readOnly:B}:null,sourceOptions:D.map(e=>{const n=_e(e,s,i);return{id:n.id,label:n.label,desc:n.kind}}),exportSource:()=>{M&&en(b(M),M.content,"text/plain;charset=utf-8")},summaryTone:L.error?"err":L.warning?"warn":"ok",summaryText:L.error?i("config.errors",{n:L.error}):L.warning?i("config.warnings",{n:L.warning}):i("config.clean")}}function Xn({source:n,sources:r,diagnostics:i,canValidate:u,canWrite:f,readOnly:p,isComplete:m,editor:h,focusLine:b,generation:v,open:x,diagnosticsChoice:y,chooseDiagnostics:k,reportErrors:T}){const E=o(),P=l[c()],A=ke(g().data),L=d().data?.resources,F=Ze(!!b&&!0===L?.rules.available).data,_=Xe(!!b&&!0===L?.dns_rules.available).data,q=Se(!!b&&!0===L?.groups.available).data,$=b?S(n.content).find(e=>e.from=b-1):void 0,I=$&&Ee(q,$.name),H=F?.rules.find(e=>e.source?.source_id===n.id&&e.source.line===b),B=_?.request.some(e=>e.source?.source_id===n.id&&e.source.line===b)?"request":"response",V=_?.[B].find(e=>e.source?.source_id===n.id&&e.source.line===b),[W,K]=e.useState(null),[U,z]=e.useState(null),[G,Q]=e.useState(null),J=f&&!0===m(n),Y=e.useRef(!1),Z=h.errorSource===n.id?h.diagnostics:null,X=e.useMemo(()=>Z??U??(W?[]:i),[Z,U,W,i]);C(v,()=>z(null));const ee=e.useMemo(()=>$e(X,n.id,E),[X,n.id,E]),ne=W?.text??n.content??"",[re,ie]=e.useState(null),se=e.useRef(0),ae=e=>ie(null===e?null:{line:e,key:++se.current});C(b,()=>ie(null));const te=null!==W&&W.text!==n.content,oe=te&&W.origin.content_sha256!==n.content_sha256,le=N(te,()=>{K(null),z(null)});e.useEffect(()=>h.cancel,[h.cancel,le.revision]);const ce=W?.text,de=function(n,r,i){const s=i?.id,t=i?.content;return e.useMemo(()=>{const e=n.filter(e=>"main"===e.kind||"include"===e.kind);return e.some(e=>void 0===r(e))?null:a(e.filter(e=>r(e)),void 0!==s&&void 0!==t?{id:s,content:t}:void 0)},[n,r,s,t])}(r,m,{id:n.id,content:ne});!function(n,r){const{validate:i,cancel:s}=t(Jn);e.useEffect(()=>{if(!n)return;let e=!0;const a=setTimeout(()=>{i({sources:n,mode:"full"}).then(n=>{e&&n&&r(n.diagnostics)})},600);return()=>{e=!1,clearTimeout(a),s()}},[n,i,s,r])}(u&&void 0!==ce?de:null,z);const ue=(e,r=!0)=>{z(e.diagnostics);const i=e.diagnostics.find(e=>e.source_id===n.id&&"error"===e.level&&null!==e.line);ae(i?i.line:null);const s=j(e.diagnostics);return e.valid?r&&w("positive",E("config.valid")):w("negative",s?E("config.writeRestart",{n:s}):E("config.invalid",{n:e.diagnostics.filter(e=>"error"===e.level).length})),e.valid},fe=()=>{h.cancel(),K(null),z(null),Q(null)},pe=p?()=>{Y.current||(Y.current=!0,w("info",E("config.readOnlyAttempt"),{detail:p.note}))}:void 0,ge=_e(n,P,E),me=null!==U||null!==Z,he=e.useMemo(()=>Ie(X,r,P,E,n.id),[X,r,P,E,n.id]),be=He(he),[ve,xe]=e.useState("all"),ye=Be(he,ve),je=te&&!me;return e.useEffect(()=>T(je?null:be.errors),[T,je,be.errors]),e.useEffect(()=>()=>T(null),[T]),{writable:J,links:I?[{from:0,to:0,line:b,label:$.name,href:D("policies",I)}]:H||V?[{from:0,to:0,line:b,label:H?.expression??V.expression,href:s("rules",{tab:H?"list":"dns",view:H?"advanced":null,edit:H?.rule_id??V.rule_id,list:H?null:B})}]:Qn(ne,n.id,A,n.kind),note:p?.note??E(u?"config.editNoteValidate":"config.editNote"),refused:pe,diagnostics:{rows:ye.rows,errors:be.errors,warnings:be.warnings,level:ye.level,setLevel:e=>xe(e),levels:[["all",E("config.levelAll",{n:be.errors+be.warnings+be.infos})],["error",E("config.levelErrors",{n:be.errors})],["warning",E("config.levelWarnings",{n:be.warnings})],["info",E("config.levelInfo",{n:be.infos})]],scope:te?E("config.draftDiagnostics"):me?E("config.fileDiagnostics"):E("config.acceptedDiagnostics",{generation:v}),quiet:je?E("config.draftPending"):he.length?null:E("config.clean"),open:Ue(be.errorKeys,y),setOpen:e=>k({open:e,errorKeys:be.errorKeys}),go:e=>{"jump"===e.action?ae(e.line):"open"===e.action&&x(e.sourceId,e.line)}},restart:te?R(Z??G??[]):[],marks:ee,text:ne,outbounds:()=>O(r,{id:n.id,content:ne}),focus:re?.line??b,focusKey:re?.key??0,dirty:te,conflict:oe?E("config.changedOnDisk"):null,keep:()=>K(e=>e&&{...e,origin:n}),validate:async()=>{if(!de)return!1;const e=await h.validate({sources:de,mode:"full"});return!!e&&ue(e)},save:async()=>{if(null===W||h.busy||!J||oe)return;Q(null);const e=await h.apply(W.origin,W.text);if(z(null),e){if(e.diagnostics)return Q(e.diagnostics),void ue({valid:!1,diagnostics:e.diagnostics},!1);w("positive",E("config.saved",{path:_e(n,P,E).label})),le.clear(),K(null)}},cancel:fe,change:e=>{h.cancel(),e===n.content?fe():(z(null),Q(null),K(r=>({text:e,origin:r?.origin??n})))},view:ge,busy:!!h.busy,validating:"validate"===h.busy,saving:"save"===h.busy,saveButton:oe?{disabled:!0,tip:E("config.changedOnDisk")}:Ke(h.busy,J,p?.note??null,M,E),validateDisabled:!!h.busy||!de,reason:te?!J&&p?p.note:"validate"===h.busy?E("config.saveValidating"):Ve({busy:!!h.busy,conflict:!!oe},E):u&&!h.busy?We(de,r,m,E):null}}function er(){const n=o(),r=l[c()],i=T(),s=d().data,a=E(s),t=u(!0===s?.resources.config.available),f=P(a.revisions),p=A(),g=L(),m=F();e.useEffect(()=>()=>m.next(),[m]);const[h,b]=e.useState(null),[v,y]=e.useState(null),S=v&&{...v,...p.pending},[C,N]=e.useState(null),[R,D]=e.useState([]),O=function(e,n,r,i,s,a){const t=!1===n?.recorded;return{unrecorded:t,headNumber:null==a?void 0:x(a,i),rows:(e?.revisions??[]).map(n=>({...n,id:String(n.revision),number:x(n.revision,i),head:n.revision===e?.active,canRestore:r&&(n.revision!==e?.active||t),originText:"import"===n.origin?s("config.revisions.origin.import"):"write"===n.origin?s("config.revisions.origin.write"):"activate"===n.origin?s("config.revisions.origin.activate"):n.origin,size:an(n.bytes,i),metadata:[[s("config.revisions.revision"),x(n.revision,i)],[s("config.revisions.createdAt"),sn(n.created_at,i)],[s("config.revisions.parent"),null===n.parent?"—":x(n.parent,i)],[s("config.revisions.principal"),n.principal],[s("config.revisions.hash"),n.content_sha256]]}))}}(f.data,_(t.data),a.canActivate,r,n,S?.head),M=O.rows.find(e=>e.id===h),H=O.rows.find(e=>e.revision===S?.revision),B=()=>{m.next(),y(null)},V=async(e=!1)=>{if(!S||p.busy||(e?!p.pending:p.pending))return;const r=m.start();N(null),D([]);try{const s=e?await p.reread():await p.apply(S.revision,a.replaceRequired,S.head);if(T()!==i||!s)return;if("changed"in s)return void(r()&&(y({revision:S.revision,head:s.changed}),N({id:Date.now(),text:n("config.revisions.changed")})));w("positive",n(null===S.revision?"config.backup.imported":"config.revisions.restored")),r()&&B()}catch(s){if(T()!==i)return;if(k(s,n,n("ui.writeFailed")),r()){if(s instanceof q&&"ui.operationUnknown"===s.key)return;const e=(s instanceof $||s instanceof q?s.details:null)?.diagnostics;D(e??[]);const r=j(e??[]);N({id:Date.now(),text:r?n("config.writeRestart",{n:r}):I(s,n)})}}};return{management:a,list:f,view:O,detail:M,selected:h,setSelected:b,confirmation:S,target:H,problem:C,diagnostics:Ie(R,[],r,n),busy:!!p.busy,confirmDisabled:!!S?.operation||(null===S?.revision?!a.import:!H?.canRestore),show:e=>{m.next(),N(null),D([]),y(p.pending?{revision:p.pending.revision,head:p.pending.head}:{revision:e,head:f.error?void 0:f.data?.active})},close:B,submit:()=>V(),reread:()=>V(!0),exporting:!!g.busy,exportError:g.error,export:async()=>{const e=await g.run("export",e=>i.exportConfig(e));e&&T()===i&&en(e.filename,e.content,e.contentType)}}}function nr(){const e=o(),r=er();return n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"rp-cluster",children:[r.management.export&&n.jsxs(H,{onPress:()=>{r.export()},isPending:r.exporting,children:[n.jsx(Pe,{}),e("config.backup.export")]}),r.management.import&&n.jsx(H,{onPress:()=>r.show(null),children:e("config.backup.import")}),(r.management.export||r.list.data)&&n.jsx(B,{title:e("config.tabHistory"),text:[...r.management.export?[e("config.backup.exportHelp")]:[],...r.list.data?[e("config.revisions.retention",{n:r.list.data.max_revisions})]:[]]})]}),n.jsx(V,{error:r.exportError,message:n=>e("config.backup.exportFailed",{error:n})}),r.view.unrecorded&&n.jsx(W,{tone:"informative",children:e("config.revisions.unrecorded")}),r.management.revisions&&n.jsxs(n.Fragment,{children:[n.jsx(V,{error:r.list.error,onRetry:r.list.refetch}),!r.list.data&&r.list.loading?n.jsx(K,{}):r.list.data&&n.jsx(n.Fragment,{children:r.view.rows.length?n.jsx(nn,{label:e("config.tabHistory"),rows:r.view.rows,fit:!0,loading:r.list.loading,selected:r.selected,onSelect:r.setSelected,rowDetail:!0,cols:[{id:"revision",label:e("config.revisions.revision"),minWidth:160,isRowHeader:!0,render:r=>n.jsxs("span",{className:"rp-cluster",children:[r.number,r.head&&n.jsx(U,{children:e("config.revisions.head")})]})},{id:"created",label:e("config.revisions.createdAt"),minWidth:150,render:e=>n.jsx(rn,{at:e.created_at})},{id:"origin",label:e("config.revisions.origin"),minWidth:110,render:e=>e.originText},{id:"size",label:e("config.revisions.bytes"),minWidth:100,render:e=>e.size}]}):n.jsx(z,{children:e("config.revisions.empty")})})]}),n.jsx(G,{title:e("config.revisions.details"),isOpen:!!r.detail,onOpenChange:e=>{e||r.setSelected(null)},scrollBody:!0,footer:i=>n.jsxs(n.Fragment,{children:[n.jsx(H,{onPress:i,children:e("ui.close")}),r.management.canActivate&&n.jsx(H,{isDisabled:!r.detail?.canRestore,onPress:()=>{r.show(r.detail.revision),r.setSelected(null)},children:e("config.revisions.restore")})]}),children:r.detail&&n.jsxs(n.Fragment,{children:[n.jsx(Q,{items:r.detail.metadata}),n.jsx(J,{title:e("config.revisions.sources"),children:r.detail.sources.map((r,i)=>n.jsx(Q,{items:[[e("config.source"),r.path],[e("config.revisions.hash"),r.sha256]]},i))})]})}),n.jsxs(Y,{title:null===r.confirmation?.revision?e("config.backup.importTitle"):e("config.revisions.restoreTitle",{revision:r.target?.number??""}),isOpen:!!r.confirmation,onCancel:r.close,onConfirm:()=>{r.submit()},isPending:r.busy,isDisabled:r.confirmDisabled,confirmLabel:e(null===r.confirmation?.revision?"config.backup.import":"config.revisions.restore"),error:r.problem,scrollBody:!0,children:[n.jsx("p",{children:null===r.confirmation?.revision?e("config.backup.importHelp"):e("config.revisions.restoreHelp")}),r.target&&n.jsx(Q,{items:r.target.metadata.slice(0,2)}),void 0!==r.view.headNumber&&n.jsx(Q,{items:[[e("config.revisions.head"),r.view.headNumber]]}),r.confirmation?.operation&&!r.busy&&n.jsxs(W,{tone:"informative",children:[n.jsx("p",{children:e("ui.operationUnknown")}),n.jsx(H,{onPress:()=>{r.reread()},children:e("ui.refresh")})]}),r.diagnostics.length>0&&n.jsx(nn,{label:e("config.diagnostics"),rows:r.diagnostics,fit:!0,cols:[{id:"message",isRowHeader:!0,label:e("config.diagnostics"),minWidth:220,text:"wrap",render:r=>n.jsxs("span",{children:[r.text,r.backend&&r.backend!==r.message&&n.jsx(Z,{flush:!0,title:e("config.backendText"),children:n.jsx("code",{children:r.backend})})]})}]})]})]})}function rr({config:r}){const i=o(),s=g().data,a=e.useMemo(()=>ke(s),[s]);return n.jsx("div",{className:"rp-page",children:ze(r.sources,a,i).map(e=>n.jsxs(X,{"aria-label":e.kind,children:[n.jsxs("div",{className:"rp-row",children:[n.jsxs("span",{className:"rp-cluster",children:[n.jsx("h2",{className:"rp-h3 rp-code",children:e.kind}),n.jsx("span",{className:"rp-label rp-code",children:e.range})]}),e.href&&n.jsx(ee,{appearance:"button",href:e.href,children:i("config.moduleOpen")})]}),n.jsx("span",{className:"rp-label",children:e.note??e.summary})]},e.id))})}const ir="systemctl restart honk-core";function sr({settings:e,sources:r}){const i=o(),s=c();return n.jsx(W,{takeFocus:!0,title:i("config.restart.title",{n:e.length}),action:n.jsxs(n.Fragment,{children:[n.jsx("span",{children:i("config.restart.planned")}),e.map(({key:e,sourceId:s,line:a},t)=>{const o=r.find(e=>e.id===s);return n.jsxs("span",{children:[e&&n.jsx("code",{className:"rp-code",children:e})," ",i("config.restart.effect"),null!==a&&o&&n.jsxs("span",{className:"rp-label",children:[" ",`${b(o)}:${a}`]})]},t)}),n.jsx("span",{children:i("config.restart.next")}),n.jsxs("span",{className:"rp-cluster",children:[n.jsx("code",{className:"rp-code rp-limit-snippet",children:ir}),n.jsx(H,{small:!0,onPress:()=>{(async()=>{const e=await re(ir);w(e?"positive":"negative",i(e?"config.restart.copied":"config.restart.copyFailed"))})()},children:i("config.restart.copy")})]}),n.jsxs(ee,{appearance:"link",external:!0,href:ne(s,"reload-and-restart"),children:[i("config.restart.docs"),n.jsx("span",{"aria-hidden":"true",children:"↗"})]})]}),children:i("config.restart.body")})}function ar(s){const l=o(),c=function({query:n,go:s}){const l=o(),c=d().data?.resources,m=f(c,"config",{whileLoading:!1}),v=u(m),x=g().data,j=ke(x),k=j.globalSettings,S=e.useMemo(()=>v.data?.sources??[],[v.data?.sources]),C=p(S),D=e.useMemo(()=>new URLSearchParams(n),[n]),O=S.filter(e=>"main"===e.kind||"include"===e.kind).flatMap(e=>{const n=r(e.content).blocks.filter(e=>e.name===k?.name);return(n.length?n:"main"===e.kind?[null]:[]).map((n,r)=>({id:`${e.id}:${r}`,source:e,block:n,index:r,label:`${b(e)}:${n?n.line+1:1}`}))}),M=O.find(e=>e.source.id===D.get("source")&&e.index===Number(D.get("section")??0))??O[0],T=M?.source,E=t(v.refetch),[P,A]=e.useState(null),[L,F]=e.useState(null),_=N(!!P,()=>{A(null),F(null)});e.useEffect(()=>E.cancel,[E.cancel,_.revision]);const $=P?.patch??{},I=P?.source.content??T?.content??"",H=r(I),B=H.blocks.filter(e=>e.name===k?.name)[M?.index??0],V=B?i(I,B,H.tokens):[],W=l("ui.listSeparator"),K=(k?.fields??[]).map(e=>{const n=V.filter(n=>n.name===e.key),r=$[e.key]??(n[0]?Ge(e,n[0].value):""),i="boolean"===e.type||!!e.choices&&"integer"!==e.type,s="boolean"===e.type?["true","false"]:e.choices??[];return{key:e.key,group:e.group,label:l(e.label),hint:(a=e,"list"===a.type?l("config.globalList"):a.choices&&"integer"===a.type?l("config.globalChoice",{choices:a.choices.join(W)}):a.max&&"18446744073709551615"!==a.max?l("config.globalRange",{max:a.max}):a.units?l("config.globalUnits",{units:a.units.filter(Boolean).join(W)}):void 0),items:i?[{id:"",label:l("config.globalUnset")},...[...s,...r&&!s.includes(r)?[r]:[]].map(e=>({id:e,label:e}))]:null,value:r,duplicate:n.length>1,invalid:null===Qe(e,r),change:r=>{if(!T||E.busy)return;E.cancel(),F(null);const i={...$,[e.key]:r};r===(n[0]?Ge(e,n[0].value):"")&&delete i[e.key],A(Object.keys(i).length?{source:P?.source??T,id:M.id,patch:i}:null)}};var a}),U=!!P&&(P.source.content_sha256!==T?.content_sha256||P.id!==M?.id),z=m&&!v.error&&!!T&&!0===c?.config.writable&&T.writable&&!0===C(T)&&!j.holdsCredentials(T),G=!!E.busy,Q=!P||!z||U||K.some(e=>e.key in $&&e.invalid),J=y(E.error)?.diagnostics??null,Y=E.error instanceof q&&"ui.writtenNotRead"===E.error.key,Z=L??J??null,X=P&&Array.isArray(Z)?R(Z):[];return e.useEffect(()=>{const e=D.get("field");if("global"!==D.get("tab")||!e)return;const n=document.getElementById("config-global-form")?.querySelector(`[data-setting="${CSS.escape(e)}"] input, [data-setting="${CSS.escape(e)}"] button`);n?.focus(),n?.scrollIntoView({block:"center"})},[D,T?.id,k,z]),{available:m&&!!k,fields:K,groups:Object.entries(Je).map(([e,n])=>({id:e,title:l(n),fields:K.filter(n=>n.group===e)})).filter(e=>e.fields.length>0),source:T,busy:G,blocked:Q,writable:z,dirty:!!P,conflict:U,failure:Array.isArray(Z)?X.length?null:l("config.invalid",{n:Z.filter(e=>"error"===e.level).length}):Z,restart:X,sources:S,unread:Y?l("ui.writtenNotRead"):null,error:(J||Y?null:E.error)??v.error,retry:v.refetch,save:async()=>{if(Q||G||!k||!M)return;const e=Ye(P.source.content,k,M.index,$),n=a(S.filter(e=>C(e)),{id:T.id,content:e});if(c?.config_validate.available&&c.config_validate.modes?.includes("full")){if(!n)return void F(l("config.incomplete"));const e=await E.validate({sources:n,mode:"full"});if(!e)return;if(!e.valid)return void F(e.diagnostics)}const r=await E.apply(P.source,e);r&&(r.diagnostics?F(r.diagnostics):(_.clear(),A(null),w("positive",l("config.globalSaved"))))},cancel:()=>{E.cancel(),_.clear(),A(null),F(null)},choices:O.map(({id:e,label:n})=>({id:e,label:n})),selected:M?.id??"",select:e=>{const r=O.find(n=>n.id===e);r&&s("config",h(n,{tab:"global",source:r.source.id,section:String(r.index),field:null}))}}}(s);return c.available?n.jsxs("form",{id:"config-global-form",className:"rp-page",onSubmit:e=>{e.preventDefault(),c.save()},children:[n.jsx(Me,{page:!0,children:n.jsx("span",{className:"rp-cluster nowrap rp-source-pick",children:n.jsx(Ce,{side:!0,cut:"path",label:l("config.source"),value:c.selected,items:c.choices,onChange:c.select,isDisabled:c.busy||!c.source})})}),n.jsx("span",{className:"rp-label",children:l("config.globalNote")}),c.unread&&n.jsx(W,{tone:"informative",children:c.unread}),n.jsx(V,{error:c.error,onRetry:c.retry}),c.failure&&n.jsx(W,{children:c.failure}),c.restart.length>0&&n.jsx(sr,{settings:c.restart,sources:c.sources}),c.conflict&&n.jsx(W,{children:l("config.changedOnDisk")}),c.source&&!c.writable&&n.jsx(W,{children:l("config.readOnly")}),c.groups.map(e=>n.jsx(X,{title:e.title,children:n.jsx(Me,{className:"top rp-fieldgrid",children:e.fields.map(e=>n.jsxs("div",{className:"rp-field","data-setting":e.key,children:[e.items?n.jsx(Ce,{label:e.label,value:e.value,isDisabled:!c.writable||c.busy||e.duplicate,onChange:e.change,items:e.items}):n.jsx(ie,{label:e.label,name:e.key,value:e.value,onChange:e.change,isDisabled:!c.writable||c.busy||e.duplicate,placeholder:l("config.globalUnset"),error:e.invalid?l("config.globalInvalid"):void 0,"aria-describedby":e.hint?`config-global-${e.key}`:void 0}),n.jsx("span",{className:"rp-label rp-code",children:e.key}),e.hint&&n.jsx("span",{id:`config-global-${e.key}`,className:"rp-label",children:e.hint}),e.duplicate&&n.jsx("span",{className:"rp-label",children:l("config.globalDuplicate")})]},e.key))})},e.id)),n.jsxs(Me,{page:!0,children:[n.jsx(H,{accent:!0,type:"submit",isPending:c.busy,isDisabled:c.blocked,children:l("config.globalSave")}),c.dirty&&n.jsx(H,{onPress:c.cancel,isDisabled:c.busy,children:l("config.discard")})]})]}):null}function tr(r){const i=o(),s=function({sources:n,refetch:r,open:i}){const s=o(),a=n.find(e=>"main"===e.kind),t=e.useMemo(()=>a?se(a.content):null,[a]),l=e.useMemo(()=>ae(t??[]),[t]),c=e.useMemo(()=>te(n),[n]),[d,u]=e.useState(null),[f,p]=e.useState(null),{busy:g,create:m}=oe(r),h=F(),b=d?.text??"",v=l.find(e=>e.pattern===d?.pattern)??null,x=v?v.prefix+b+v.suffix:b,y=b?v?le(b,v):ce(b):null;return{isOpen:null!==d,show:()=>{h.next(),p(null),u({text:l.length?"":de(t??[]),pattern:l[0]?.pattern??""})},hide:()=>{h.next(),u(null)},choices:l,choice:v,setChoice:e=>u(n=>n&&{...n,pattern:e}),text:b,setText:e=>u(n=>n&&{...n,text:e}),error:y?s(y):void 0,unmatched:!!b&&!y&&null!==c&&!c(x),problem:f,busy:g,canSubmit:!!b&&!y&&!g,submit:async e=>{if(!b||y||g)return;const n=h.start();try{const r=await m(x);if(!r)return;if(w("positive",s("config.newSourceCreated",{path:x})),!n())return;e(),r.id&&i(r.id)}catch(r){n()?p(e=>({id:(e?.id??0)+1,text:I(r,s)})):k(r,s,s("config.newSourceFailed",{path:x}))}}}}(r);return n.jsxs(n.Fragment,{children:[n.jsxs(H,{onPress:s.show,children:[n.jsx(tn,{}),i("config.newSource")]}),n.jsxs(G,{title:i("config.newSourceTitle"),narrow:!0,isOpen:s.isOpen,onOpenChange:e=>{e||s.hide()},footer:e=>n.jsxs(n.Fragment,{children:[n.jsx(H,{onPress:e,children:i("ui.cancel")}),n.jsx(H,{accent:!0,isDisabled:!s.canSubmit,isPending:s.busy,onPress:()=>{s.submit(e)},children:i("config.newSourceCreate")})]}),children:[s.problem&&n.jsx(W,{takeFocus:!0,children:s.problem.text},s.problem.id),n.jsxs("div",{className:"rp-list",children:[n.jsx("span",{className:"rp-label",children:i(s.choice?"config.newSourceNameHelp":"config.newSourceHelp")}),s.choices.length>1&&n.jsx(Ce,{label:i("config.newSourcePattern"),items:s.choices.map(e=>({id:e.pattern,label:e.pattern})),value:s.choice?.pattern??"",onChange:s.setChoice,isDisabled:s.busy}),s.choice?n.jsx(ie,{isDisabled:s.busy,label:i("config.newSourceName"),value:s.text,prefix:s.choice.prefix,suffix:s.choice.suffix,placeholder:"extra",spellCheck:!1,error:s.error,onChange:s.setText}):n.jsx(ie,{isDisabled:s.busy,label:i("config.newSourcePath"),value:s.text,placeholder:"config.d/extra.dae",spellCheck:!1,error:s.error,onChange:s.setText}),s.unmatched&&n.jsx(W,{tone:"informative",children:i("config.newSourceUnmatched")})]})]})]})}const or=on.define({name:"dae",languageData:{commentTokens:{line:"#"},closeBrackets:{brackets:["(","{","'",'"']}},startState:Gn,token:zn}),lr=["global","subscription","node","group","dns","routing"].map(e=>({label:e,type:"keyword"})),cr=pe.map(e=>({label:e,type:"property",apply:e+": "})),dr=["domain","dip","sip","dport","sport","l4proto","ipversion","pname","mac","dscp","qname","qtype","upstream"].map(e=>({label:e,type:"function",apply:e+"("})),ur=["geosite","geoip","suffix","full","keyword","regex"].map(e=>({label:e,type:"constant",apply:e+":"})),fr=fe.map(e=>({label:e,type:"constant"})),pr=ue.map(e=>({label:e,type:"keyword"})),gr=[{label:"fallback",type:"keyword",apply:"fallback: "},{label:"include",type:"keyword",apply:"include "}];function mr(e){return ln({override:[n=>function(e,n){const i=e.matchBefore(/[\w.-]*/);if(!i)return null;const s=e.state.doc.lineAt(e.pos),a=s.text.slice(0,e.pos-s.from),t=/->\s*[\w.-]*$/.test(a)||/^\s*fallback:\s*[\w.-]*$/.test(a);if(i.from===i.to&&!e.explicit&&!t)return null;const o=e.state.doc.sliceString(0,e.pos),{blocks:l,tokens:c}=r(o),d=c.at(-1);if(d?.to===e.pos&&("quoted"===d.kind||"comment"===d.kind))return null;const u=l.find(n=>n.close===e.pos)?.name;let f;if(t)f=[...n().map(e=>({label:e.name,apply:e.written,type:"variable"})),...pr];else if(/\b(domain|dip|sip|qname)\(\s*[\w.-]*$/.test(a))f=ur;else if(void 0===u)f=lr.map(e=>({...e,apply:(n,r,i,s)=>{const a=e.label+" {\n \n}";n.dispatch({changes:{from:i,to:s,insert:a},selection:{anchor:i+e.label.length+4}})}}));else if("routing"===u||"dns"===u)f=[...dr,...gr];else if("global"===u)f=cr;else{if("group"!==u)return null;f=/\bpolicy\s*:\s*[\w.-]*$/.test(a)?fr:[...fr.map(e=>({...e,apply:"policy: "+e.label})),{label:"filter",type:"property",apply:"filter: "}]}return{from:i.from,options:f,validFor:/^[\w.-]*$/}}(n,e)]})}function hr(e){let n=!1;const r=n=>(n.state.readOnly&&e(),!1);return cn.domEventHandlers({keydown:(e,n)=>function(e){return"Backspace"===e.key||"Delete"===e.key||"Enter"===e.key||1===[...e.key].length&&!e.ctrlKey&&!e.metaKey}(e)&&r(n),paste:(e,n)=>r(n),cut:(e,n)=>r(n),pointerdown:e=>(n="touch"===e.pointerType,!1),click:(e,i)=>n&&r(i)})}const br=[["Completions","cm.completions"],["Find","cm.find"],["Replace","cm.replace"],["next","cm.next"],["previous","cm.previous"],["all","cm.all"],["match case","cm.matchCase"],["regexp","cm.regexp"],["by word","cm.byWord"],["replace","cm.replaceOne"],["replace all","cm.replaceAll"],["close","ui.close"],["Go to line","cm.gotoLine"],["go","cm.go"],["current match","cm.currentMatch"],["replaced $ matches","cm.replacedMatches"],["replaced match on line $","cm.replacedOnLine"],["on line","cm.onLine"],["Selection deleted","cm.selectionDeleted"],["Control character","cm.controlCharacter"]],vr=e=>un.phrases.of(Object.fromEntries(br.map(([n,r])=>[n,e(r)]))),xr=cn.theme({"&":{backgroundColor:"var(--rp-base)",color:"var(--rp-text)",border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-md)",fontSize:"var(--rp-text-sm)"},"&.cm-focused":{outline:"none",borderColor:"var(--rp-text)"},".cm-scroller":{fontFamily:"var(--rp-font-mono)",lineHeight:"var(--rp-line-body)",fontVariantLigatures:"none",borderRadius:"calc(var(--rp-r-md) - 1px)"},".cm-content":{padding:"var(--rp-space-2) 0",caretColor:"var(--rp-text)"},".cm-line":{padding:"0 var(--rp-space-3)"},".cm-gutters":{backgroundColor:"var(--rp-base)",color:"var(--rp-muted)",border:"none"},".cm-lineNumbers .cm-gutterElement":{padding:"0 var(--rp-space-2) 0 var(--rp-space-3)",minWidth:"40px"},".cm-activeLine, .cm-focusLine":{backgroundColor:"color-mix(in srgb, var(--rp-hl-med) 60%, transparent)"},".cm-activeLineGutter":{backgroundColor:"transparent",color:"var(--rp-text)"},".cm-selectionBackground, &.cm-focused .cm-selectionBackground, ::selection":{backgroundColor:"var(--rp-hl-high)"},".cm-cursor":{borderLeftColor:"var(--rp-text)"},".cm-matchingBracket":{backgroundColor:"color-mix(in srgb, var(--rp-accent) 20%, transparent)",outline:"none"},".cm-selectionMatch":{backgroundColor:"color-mix(in srgb, var(--rp-notice) 25%, transparent)"},".cm-gutter-lint":{width:"12px"},".cm-gutter-lint .cm-gutterElement":{padding:"0"},".cm-lint-marker":{width:"8px",height:"8px",margin:"6px 2px",borderRadius:"50%"},".cm-lint-marker-error":{content:"none",backgroundColor:"var(--rp-negative)"},".cm-lint-marker-warning":{content:"none",backgroundColor:"var(--rp-notice)"},".cm-lint-marker-info":{content:"none",backgroundColor:"var(--rp-foam)"},".cm-tooltip.cm-tooltip-lint":{backgroundColor:"var(--rp-text)",color:"var(--rp-on-text)",border:"none",borderRadius:"var(--rp-r-sm)",padding:"var(--rp-space-half) 0"},".cm-tooltip-lint .cm-diagnostic":{border:"none",padding:"var(--rp-space-half) var(--rp-space-2)",fontSize:"var(--rp-text-xs)",lineHeight:"16px",fontFamily:"inherit"},".cm-tooltip-lint .cm-diagnosticText":{color:"inherit"},".cm-diag-line-error":{backgroundColor:"color-mix(in srgb, var(--rp-negative) 14%, transparent)"},".cm-diag-line-warning":{backgroundColor:"color-mix(in srgb, var(--rp-notice) 16%, transparent)"},".cm-diag-line-info":{backgroundColor:"color-mix(in srgb, var(--rp-foam) 14%, transparent)"},".cm-lintRange-error":{backgroundImage:"none",textDecoration:"underline wavy var(--rp-negative)",textUnderlineOffset:"3px"},".cm-lintRange-warning":{backgroundImage:"none",textDecoration:"underline wavy var(--rp-notice)",textUnderlineOffset:"3px"},".cm-lintRange-info":{backgroundImage:"none",textDecoration:"underline dotted var(--rp-foam)",textUnderlineOffset:"3px"},".cm-tooltip":{backgroundColor:"var(--rp-surface)",border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-md)",color:"var(--rp-text)"},".cm-tooltip.cm-tooltip-autocomplete > ul > li[aria-selected]":{backgroundColor:"var(--rp-selected)",color:"var(--rp-text)"},".cm-tooltip.cm-tooltip-autocomplete > ul":{fontFamily:"var(--rp-font-mono)",fontVariantLigatures:"none"},".cm-panels":{backgroundColor:"var(--rp-surface)",color:"var(--rp-text)"},".cm-panels-bottom":{borderTop:"1px solid var(--rp-hl-med)"},".cm-textfield":{border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-sm)",backgroundColor:"var(--rp-base)",color:"var(--rp-text)"},".cm-button":{border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-sm)",backgroundImage:"none",backgroundColor:"var(--rp-overlay)",color:"var(--rp-text)"}}),yr=Wn.define([{tag:Kn.comment,color:"var(--rp-code-comment)"},{tag:Kn.keyword,color:"var(--rp-code-keyword)",fontWeight:"700"},{tag:Kn.string,color:"var(--rp-code-string)"},{tag:Kn.number,color:"var(--rp-code-number)"},{tag:Kn.propertyName,color:"var(--rp-code-propertyName)"},{tag:Kn.variableName,color:"var(--rp-code-variableName)"},{tag:Kn.operator,color:"var(--rp-code-operator)"},{tag:Kn.punctuation,color:"var(--rp-code-punctuation)"}]),jr=qn.of((e,n)=>{const r=e.lineAt(n,-1),i=r.from>0?e.lineAt(r.from-1,-1):null;if(!i)return 0;const s=/^\s*/.exec(i.text)[0].length,a=/\{\s*(#.*)?$/.test(i.text),t=/^\s*\}/.test(r.text);return Math.max(0,s+(a?2:0)-(t?2:0))}),wr=Vn.define(),kr={error:Fn.line({class:"cm-diag-line cm-diag-line-error"}),warning:Fn.line({class:"cm-diag-line cm-diag-line-warning"}),info:Fn.line({class:"cm-diag-line cm-diag-line-info"})},Sr=Ln.define({create:()=>Fn.none,update(e,n){let r=e.map(n.changes);for(const i of n.effects){if(!i.is(wr))continue;const e=new _n,s={error:0,warning:1,info:2},a=new Map;for(const r of i.value){if(r.line<1||r.line>n.state.doc.lines)continue;const e=a.get(r.line);(!e||s[r.level]e-n)){const i=n.state.doc.line(r).from;e.add(i,i,kr[a.get(r).level])}r=e.finish()}return r},provide:e=>cn.decorations.from(e)}),Cr=[{id:"undo",label:"cm.undo",run:Pn},{id:"redo",label:"cm.redo",run:An},{id:"comment",label:"cm.toggleComment",run:Sn}],Nr=[],Rr=Bn.define(),Dr=Vn.define(),Or=Fn.line({class:"cm-focusLine"}),Mr=Ln.define({create:()=>Fn.none,update(e,n){let r=e.map(n.changes);for(const i of n.effects)i.is(Dr)&&(r=Fn.set(Or.range(n.state.doc.line(i.value).from)));return r},provide:e=>cn.decorations.from(e)}),Tr=e=>[un.readOnly.of(e),cn.editable.of(!e),e?Mr:[$n(),In(),Hn()]];function Er({value:r,onChange:i,readOnly:s=!1,marks:a=Nr,focusLine:t,label:l,outbounds:c,onSave:d,onReadOnlyAttempt:u,compact:f,actions:p=[],focusKey:g,banner:m}){const h=e.useRef(null),b=ge(h,p.map(e=>e.label).join("\n")+s+l),v=e.useRef(null);e.useLayoutEffect(()=>{b&&h.current?.contains(document.activeElement)&&v.current?.querySelector("button")?.focus()},[b]);const x=e.useRef(null),{isFocusVisible:y}=me({isTextInput:!0}),j=e.useRef(null),w=e.useRef(null),k=e.useRef(i),S=e.useRef(c),C=e.useRef(d),N=e.useRef(u);e.useEffect(()=>{k.current=i,S.current=c,C.current=d,N.current=u});const R=e.useRef(new dn),D=o(),O=e.useRef(new dn),M=e.useRef(new dn),T=e.useRef(new dn);e.useLayoutEffect(()=>{const e=new cn({parent:x.current,state:un.create({doc:r,extensions:[fn(),pn(),cn.scrollMargins.of(e=>{const n=j.current?.getBoundingClientRect().bottom;return void 0===n?null:{top:Math.min(n,Math.max(0,n-e.scrollDOM.getBoundingClientRect().top))}}),gn(),T.current.of(mn()),hn(),Sr,bn(),vn(),xn(),yn.of(" "),jn(),jr,mr(()=>S.current?.()??[]),or,wn(yr),xr,kn.of([{key:"Mod-s",run:()=>(C.current?.(),!0)},{key:"Mod-/",run:Sn},{key:"Mod-g",run:Cn},...Nn,...Rn,...Dn,...On,...Mn,Tn]),R.current.of(Tr(s)),O.current.of(vr(D)),M.current.of(cn.contentAttributes.of({"aria-label":l,tabindex:"0"})),hr(()=>N.current?.()),cn.updateListener.of(e=>{e.docChanged&&!e.transactions.some(e=>e.annotation(Rr))&&k.current?.(e.state.doc.toString())})]})});return w.current=e,()=>{e.destroy(),w.current=null}},[]),e.useEffect(()=>{const e=w.current;e&&e.dispatch({effects:R.current.reconfigure(Tr(s))})},[s]),e.useEffect(()=>{w.current?.dispatch({effects:O.current.reconfigure(vr(D))})},[D]),e.useEffect(()=>{w.current?.dispatch({effects:M.current.reconfigure(cn.contentAttributes.of({"aria-label":l,tabindex:"0"}))})},[l]),e.useEffect(()=>{const e=w.current;e&&e.state.doc.toString()!==r&&(e.dispatch({changes:{from:0,to:e.state.doc.length,insert:r},annotations:Rr.of(!0),effects:T.current.reconfigure([])}),e.dispatch({effects:T.current.reconfigure(mn())}))},[r]),e.useEffect(()=>{const e=w.current;if(!e)return;const n=En(e.state,function(e,n){return n.filter(n=>n.line>=1&&n.line<=e.doc.lines).map(n=>{const r=e.doc.line(n.line),i=Math.max(0,(n.column??1)-1),s=(new TextEncoder).encode(r.text);let a=0;for(let e=0;ei)break;e+=n,a+=4===n?2:1}return{from:r.from+a,to:r.to,severity:n.level,message:n.message}})}(e.state,a)),r=Array.isArray(n.effects)?n.effects:n.effects?[n.effects]:[];e.dispatch({...n,effects:[...r,wr.of(a)]})},[a]),e.useEffect(()=>{const e=w.current;if(!e||!t||t<1||t>e.state.doc.lines)return;const n=e.state.doc.line(t);e.dispatch({selection:{anchor:n.from},effects:[Dr.of(t),cn.scrollIntoView(n.from,{y:"center"})]}),e.focus()},[t,g]);const E=e=>{w.current&&e(w.current)};return n.jsxs(n.Fragment,{children:[!f&&n.jsxs("div",{className:"rp-editor-head",ref:j,children:[n.jsxs("div",{className:"rp-toolbar rp-editor-toolbar",children:[n.jsx(Ne,{actions:p.slice(0,1),overflowMode:"wrap"}),n.jsxs("div",{className:"rp-editor-actions","data-collapsed":b||void 0,children:[n.jsxs("div",{className:"rp-toolbar",ref:h,children:[n.jsx(Ne,{actions:p.slice(1),overflowMode:"wrap"}),n.jsx(H,{onPress:()=>E(Un),children:D(s?"cm.find":"cm.findReplace")}),n.jsx(H,{onPress:()=>E(Cn),children:D("cm.gotoLine")}),i&&n.jsx(he,{label:D("cm.commands"),isDisabled:s,content:n.jsx(be,{"aria-label":D("cm.commands"),onAction:e=>{const n=Cr.find(n=>n.id===e);n&&E(n.run)},children:Cr.map(e=>n.jsx(ve,{id:e.id,className:"rp-item plain",textValue:D(e.label),children:D(e.label)},e.id))}),children:D("cm.commands")})]}),b&&n.jsx("div",{className:"rp-editor-overflow",ref:v,children:n.jsx(Re,{actions:[...p.slice(1),{id:"find",label:D(s?"cm.find":"cm.findReplace"),onAction:()=>requestAnimationFrame(()=>E(Un))},{id:"line",label:D("cm.gotoLine"),onAction:()=>requestAnimationFrame(()=>E(Cn))},...i?Cr.map(e=>({id:e.id,label:D(e.label),isDisabled:s,onAction:()=>requestAnimationFrame(()=>E(e.run))})):[]]})})]})]}),m]}),n.jsx("div",{className:f?"rp-editor compact":"rp-editor",ref:x,"data-keyboard":y||void 0})]})}function Pr({message:e,busy:r,keep:i,discard:s}){const a=o();return n.jsx(W,{action:(i||s)&&n.jsxs(Me,{children:[i&&n.jsx(H,{isDisabled:r,onPress:i,children:a("config.keepChanges")}),s&&n.jsx(H,{isDisabled:r,onPress:s,children:a("config.discard")})]}),children:e})}function Ar(r){const{canValidate:i}=r,s=o(),{writable:a,links:t,diagnostics:l,note:c,refused:d,restart:u,marks:f,text:p,outbounds:g,focus:m,focusKey:h,dirty:b,conflict:v,keep:x,validate:y,save:j,cancel:w,change:k,view:S,busy:C,validating:N,saving:R,saveButton:D,validateDisabled:O,reason:M}=Xn(r),T=e.useRef(null);e.useEffect(()=>{r.focusDiagnostics&&(T.current?.focus(),T.current?.scrollIntoView({block:"nearest"}))},[r.focusDiagnostics,r.focusLine,r.source.id]);const E=function(e,n,r){return e.filter(e=>e.line===n||n&&e.line<=n&&r.slice(0,e.to).split("\n").length>=n)}(t,m,p),P=E.length?E:t,A=n.jsx(Me,{"aria-label":s("config.forms"),children:P.map(e=>n.jsx(ee,{appearance:"button",href:e.href,children:e.label},e.from))}),L=n.jsx("div",{ref:T,tabIndex:-1,role:"region","aria-label":s("config.diagnostics"),className:"rp-config-diagnostics",children:l.quiet?n.jsx("span",{className:"rp-config-diagnostics-quiet rp-label",children:l.quiet}):n.jsxs(Z,{isExpanded:l.open,onExpandedChange:l.setOpen,title:n.jsxs("span",{className:"rp-config-diagnostics-summary",children:[n.jsx(U,{tone:l.errors?"negative":void 0,children:s("config.levelErrors",{n:l.errors})}),n.jsx(U,{tone:l.warnings?"warn":void 0,children:s("config.levelWarnings",{n:l.warnings})}),n.jsx("span",{className:"rp-label",children:l.scope})]}),children:[n.jsx("div",{className:"rp-config-diagnostic-filter",children:n.jsx(De,{label:s("config.level"),value:l.level,onChange:l.setLevel,items:l.levels})}),n.jsx("div",{className:"rp-config-diagnostic-list",role:"list","aria-label":s("config.diagnostics"),children:l.rows.map(e=>n.jsxs("div",{className:"rp-config-diagnostic",role:"listitem",children:[n.jsxs(xe,{small:!0,tone:e.tone,children:[n.jsx(ye,{children:`${e.levelText} `}),e.text]}),e.backend&&n.jsx(Z,{flush:!0,title:s("config.backendText"),children:n.jsx("code",{children:e.backend})}),e.action&&n.jsx(H,{small:!0,className:"rp-config-diagnostic-go",label:"jump"===e.action?s("config.jumpToLine",{line:e.line}):s("config.openSourceAt",{where:e.where}),onPress:()=>l.go(e),children:s("jump"===e.action?"cm.go":"config.openSource")})]},e.id))})]})}),F=[...i?[{id:"validate",label:s("config.validate"),isPending:N,isDisabled:O,reason:M??void 0,onAction:()=>{y()}}]:[],...b?[{id:"cancel",label:s("ui.cancel"),isDisabled:C,onAction:w},{id:"save",label:s("config.save"),accent:!0,isPending:R,isDisabled:D.disabled,reason:D.tip??M??void 0,onAction:()=>{j()}}]:[]];return n.jsxs(X,{title:s("config.editor"),className:"rp-source-card","aria-label":S.label,help:a?{title:s("config.editor"),text:s("config.writeHelp")}:void 0,reason:M,children:[n.jsx("div",{className:"rp-row rp-source-note",children:n.jsx("span",{className:"rp-cluster",children:b?n.jsxs(n.Fragment,{children:[n.jsx(U,{tone:"warn",children:s("config.unsaved")}),n.jsx("span",{className:"rp-label",children:s("config.unsavedHint")})]}):n.jsx("span",{className:"rp-label",children:c})})}),v&&n.jsx(Pr,{message:v,busy:C,keep:x}),u.length>0&&n.jsx(sr,{settings:u,sources:r.sources}),E.length?A:t.length>0&&n.jsx(Z,{title:s("config.forms"),children:A}),n.jsx(Er,{actions:F,label:S.label,value:p,readOnly:!a||C,onChange:k,onReadOnlyAttempt:d,marks:f,focusLine:m,focusKey:h,banner:L,outbounds:g,onSave:b&&!C?()=>{j()}:void 0})]})}function Lr(e){const r=o(),{error:i,reload:s,loading:a,ready:t,tabsReady:l,metadata:c,redacted:d,tabs:u,tab:f,setTab:p,selectedId:g,select:m,sourceProps:h,newSourceProps:b,modulesProps:v,sourceModel:x,sourceOptions:y,exportSource:j,summaryTone:w,summaryText:k}=Zn(e),S={history:n.jsx(nr,{}),modules:v&&n.jsx(rr,{...v}),global:n.jsx(ar,{...e}),source:n.jsxs(n.Fragment,{children:[n.jsxs(Me,{page:!0,children:[n.jsxs("span",{className:"rp-cluster nowrap rp-source-pick",children:[n.jsx(Ce,{side:!0,cut:"path",label:r("config.source"),value:g,onChange:m,items:y}),x&&n.jsxs(n.Fragment,{children:[x.readOnly&&n.jsx(je,{help:x.readOnly.help,children:n.jsx(U,{children:x.readOnly.label})}),n.jsx(we,{className:"rp-label",text:x.loaded,children:x.facts})]})]}),(b||x)&&n.jsxs("span",{className:"rp-cluster nowrap",children:[b&&n.jsx(tr,{...b}),x&&n.jsxs(H,{onPress:j,children:[n.jsx(Pe,{}),r("config.export")]})]})]}),x&&n.jsx("span",{className:"rp-label",children:r("config.exportWarning")}),h&&n.jsx(Ar,{...h},x.id)]})};return n.jsxs("div",{className:"rp-page",children:[n.jsx(V,{error:i,onRetry:s}),a&&n.jsx(K,{}),t&&n.jsxs(Me,{page:!0,children:[n.jsx(Q,{row:!0,items:c}),n.jsx(xe,{small:!0,tone:w,children:k}),d&&n.jsx(xe,{small:!0,tone:"muted",children:r("config.redacted")})]}),l&&n.jsx(Oe,{page:!0,label:r("nav.config"),value:f,onChange:p,items:u.map(e=>({...e,content:S[e.id]}))})]})}export{Lr as Config}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Connections-CSIoFtNR.js b/luci-app-honk/root/etc/honk/doona/assets/Connections-CSIoFtNR.js new file mode 100644 index 000000000..4adb6da59 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Connections-CSIoFtNR.js @@ -0,0 +1 @@ +import{r as e,j as n}from"./vendor-react-64fcanlc.js";import{O as t}from"./OutboundTag-DROnordp.js";import{bb as o,C as s,aF as l,P as a,al as i,o as r,aW as c,M as u,K as d,ai as p,as as m,y as b,ab as h,cu as g,aS as f,N as w,T as v,cv as y,w as x,cw as j,ae as _,cx as k,cy as C,aj as S,am as A,W as L,X as N,Y as T,ac as M,cz as R,i as F,cA as O,aB as P,a7 as W,cB as D,b_ as U,cC as q,co as E,cD as H,cE as I,cF as Q,aa as V,aG as B,cG as G,a4 as J,cH as K,bd as z,cI as X,cJ as Y,bT as Z,cK as $,c5 as ee,O as ne,J as te,cL as oe,bQ as se,aQ as le,V as ae,bG as ie}from"./index-CmbH0woS.js";import{R as re,d as ce,h as ue,c as de,u as pe,S as me,L as be,M as he}from"./ActionGroup-D3mQjUsw.js";import{T as ge}from"./Tabs-BzeNgTje.js";import{T as fe}from"./Toolbar-B9K5nAyx.js";import{u as we,D as ve,U as ye,F as xe,S as je,d as _e,B as ke,L as Ce,f as Se,h as Ae,i as Le,j as Ne,p as Te,o as Me,k as Re,l as Fe}from"./activity-CiEWAlFW.js";import{S as Oe}from"./SearchSelect-CuaWhoLz.js";import{D as Pe}from"./Table-Cfbaho6J.js";import{T as We}from"./TimeCell-D0UB-mKs.js";import{Q as De,u as Ue,r as qe,R as Ee}from"./useQuickRule-C0zoMd-O.js";import{u as He}from"./outbounds-CUyNhEhE.js";import{c as Ie,d as Qe,e as Ve}from"./files-Dt8K7QfP.js";import{w as Be}from"./labels-D8xxfRTQ.js";import{u as Ge}from"./flows-BMReQznn.js";import{c as Je}from"./nav-BO8viH9G.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Tag-fyQjN-Xw.js";import"./Select-BcN72K3H.js";import"./Checkbox-f7Je53QZ.js";import"./SearchList-CJ8rQxgu.js";import"./Virtualizer-itu1Kg0o.js";import"./DaeCode-DEjXqvav.js";import"./daeTokens-BVtuNnWZ.js";import"./AddCircle-JwHCi_at.js";const Ke=[0,2,3,1,4,5,6,7],ze=e.memo(function({records:t,outbounds:p,latency:m,latencyError:b,retryLatency:h,truncated:g,uncounted:f,onSelect:w}){const v=s(),y=we(),x=l[a()],j=e.useCallback(e=>i(e,x),[x]),_=e.useMemo(()=>function(e,n){const t=new Map;let s=0;for(const o of e){if(null===o.upload_bytes||null===o.download_bytes){s++;continue}const e={id:o.id,up:Number(o.upload_bytes),down:Number(o.download_bytes),name:o.domain||o.dst||o.id},n=t.get(o.outbound);n?n.push(e):t.set(o.outbound,[e])}const l=[...t].map(([e,n])=>({outbound:e,points:n})).sort((e,t)=>o(n)(e.outbound??"",t.outbound??""));let a,i=-1n;for(const o of e){if(null===o.upload_bytes||null===o.download_bytes)continue;const e=BigInt(o.upload_bytes)+BigInt(o.download_bytes);e>i&&(i=e,a={id:o.id,up:Number(o.upload_bytes),down:Number(o.download_bytes),name:o.domain||o.dst||o.id,outbound:o.outbound})}return{series:l,unknown:s,heaviest:a,placed:e.length-s}}(t,x),[t,x]),k=e.useMemo(()=>{const e=p.filter(e=>"block"!==e);return _.series.map(n=>{return{id:n.outbound??"",label:r(n.outbound,v),color:(t=n.outbound,"block"===t?y.negative:y.cat[Ke[Math.max(0,e.indexOf(t))%Ke.length]]),points:n.points.map(e=>({id:e.id,x:e.up,y:e.down,name:e.name,detail:v("conn.chart.point",{download:j(e.down),upload:j(e.up)})}))};var t})},[_,p,y,v,j]),C=_.heaviest?[{label:v("conn.chart.busiest"),icon:n.jsx(c,{}),tint:"c3",value:_.heaviest.name,caption:r(_.heaviest.outbound,v)},{label:v("ui.download"),value:j(_.heaviest.down),icon:n.jsx(ve,{}),tint:"c1"},{label:v("ui.upload"),value:j(_.heaviest.up),icon:n.jsx(ye,{}),tint:"c4"}]:[],S=_.unknown?v("conn.chart.sampleUnknown",{n:t.length,unknown:_.unknown}):v("conn.chart.sample",{n:t.length});return n.jsxs("div",{className:"rp-chart-page",children:[n.jsx(xe,{facts:C,lead:!0}),n.jsxs(u,{title:v("conn.chart.title"),help:f?{title:v("conn.chart.title"),text:v("ui.trafficUncounted")}:void 0,note:S,children:[g&&n.jsx("p",{className:"rp-note",children:v("conn.truncated")}),_.placed>0&&n.jsxs(n.Fragment,{children:[n.jsx(je,{label:v("conn.chart.title"),series:k,fmt:j,onSelect:w,regions:{above:v("conn.chart.moreDown"),below:v("conn.chart.moreUp")}}),n.jsx(_e,{series:k}),n.jsx("p",{className:"rp-note",children:v("conn.chart.hint")})]})]}),m?n.jsx(Xe,{latency:m}):b&&n.jsx(u,{title:v("ui.nodeLatency"),children:n.jsx(d,{error:b,onRetry:h})})]})});function Xe({latency:e}){const t=s(),o=we(),i=e=>m(e,t),r=l[a()],c=n=>!e.chains||n?o.cat[0]:o.muted;return n.jsx(u,{title:t("ui.nodeLatency"),note:t("conn.latency.sample",{n:e.samples.length,missing:e.missing}),children:e.samples.length?n.jsxs(n.Fragment,{children:[n.jsx("p",{className:"rp-note",children:t("conn.latency.percentiles",{p50:i(e.p50),p90:i(e.p90)})}),null!==e.weightedP50&&n.jsx("p",{className:"rp-note",children:e.unplaced?t("conn.latency.weightedUnplaced",{p50:i(e.weightedP50),n:e.unplaced}):t("conn.latency.weighted",{p50:i(e.weightedP50)})}),n.jsx(ke,{label:t("ui.nodeLatency"),points:e.samples.map(e=>({id:e.node,nodeName:!0,value:e.value,color:c(e.connections>0),lines:[e.name,i(e.value),...e.connections?[t("conn.chart.sample",{n:e.connections})]:[]]})),fmt:i}),e.chains&&n.jsxs("div",{className:"rp-legend",children:[n.jsx(Ce,{swatch:c(!0),label:t("conn.latency.inUse"),value:p(e.used,r)}),n.jsx(Ce,{swatch:c(!1),label:t("conn.latency.others"),value:p(e.samples.length-e.used,r)})]}),n.jsx("p",{className:"rp-note",children:t("conn.latency.hint")})]}):n.jsx("p",{className:"rp-note",children:t("conn.latency.pending")})})}const Ye=[{id:"dst",label:"ui.target",minWidth:200,sortable:!0},{id:"src",label:"ui.device",minWidth:128,sortable:!0,drop:5},{id:"node",label:"nodes.node",minWidth:120,drop:3},{id:"rule",label:"ui.rule",minWidth:220,drop:2},{id:"state",label:"ui.state",minWidth:112,sortable:!0,drop:7},{id:"down",label:"ui.download",minWidth:96,sortable:!0,drop:4},{id:"downRate",label:"conn.f.downloadRate",minWidth:128,sortable:!0,drop:1},{id:"age",label:"ui.started",minWidth:132,sortable:!0,drop:6}],Ze=b.connectionsView,$e=e=>({allCollapsed:e,exceptions:new Set}),en=(e,n)=>e.allCollapsed!==e.exceptions.has(n);function nn(e,n){const t=new Set(e.exceptions);return t.delete(n)||t.add(n),{allCollapsed:e.allCollapsed,exceptions:t}}const tn=(e,n)=>"source"===n?h(e.src??void 0)??e.src??"—":e.outbound??"unknown",on=(e,n,t)=>"source"===n?e:r(e,t),sn=e=>"g:"+e,ln=e=>e.startsWith("g:")||e.startsWith("\\")?"\\"+e:e;function an(e){const n={hidden:[],sort:null,group:"source"};try{const t=JSON.parse(e??"null");if(!t||"object"!=typeof t)return n;const o=Array.isArray(t.hidden)?t.hidden.map(e=>"chain"===e?"node":e):[],s=Ye.filter(e=>o.includes(e.id)).map(e=>e.id),l=t.sort;return{hidden:s.length===Ye.length?[]:s,sort:l&&Ye.some(e=>e.sortable&&e.id===l.column)&&["ascending","descending"].includes(l.direction)?{column:l.column,direction:l.direction}:null,group:"none"===t.group||"outbound"===t.group?t.group:"source"}}catch{return n}}const rn=e=>e.target;function cn({collection:t,view:o,collapse:l,onToggleGroup:a,loading:i,selected:r,onSelect:c,selectOnFocus:u,onSort:d,rule:p}){const m=s(),[b,h]=g(442),y=e.useRef(p);e.useLayoutEffect(()=>{y.current=p});const x=e.useMemo(()=>{const e={dst:e=>n.jsx(v,{children:e.target}),src:e=>n.jsx(v,{className:"rp-code",children:e.source}),node:e=>e.nodeName?n.jsx(w,{name:e.node,className:"rp-chain",text:e.path??void 0}):n.jsx(v,{className:"rp-chain",text:e.path??void 0,children:e.node}),rule:e=>n.jsxs("span",{className:"rp-rule",children:[n.jsx(re,{...e.rule}),e.recomputed&&n.jsx(f,{children:e.recomputed})]}),state:e=>e.state,down:e=>e.download,downRate:e=>e.downloadRate,age:e=>n.jsx(We,{at:e.startedAt})};return[...Ye.filter(e=>!o.hidden.includes(e.id)).map(n=>({...n,label:m(n.label),grow:1,render:e[n.id]})),{id:"actions",actions:!0,label:m("ui.actions"),minWidth:88,grow:0,render:e=>{const t=y.current,o=!t.canAdd(e.seed);return n.jsx(De,{label:t.label(e.target),disabled:o,tip:t.noTarget,onPress:()=>y.current.open(e.seed)})}}]},[o.hidden,m]),j=e.useMemo(()=>t.map(e=>"connection"in e?e.connection:e),[t]),_=e.useMemo(()=>({grouped:"none"!==o.group,collapsed:e=>en(l,e),onToggle:a}),[o.group,l,a]);return n.jsx("div",{ref:b,children:n.jsx(Pe,{label:m("nav.connections"),rowDetail:!0,cols:x,rows:j,height:h,selected:r&&ln(r),onSelect:c&&(e=>c(e&&(e=>e.startsWith("\\")?e.slice(1):e)(e))),selectOnFocus:u,reveal:!0,empty:m("conn.empty"),loading:i,sort:o.sort&&{column:String(o.sort.column),direction:o.sort.direction},onSort:d,getTextValue:rn,stream:!0,tree:_})})}const un={userspace:"ov.v.userspace",ebpf:"ov.v.ebpf",mixed:"conn.observed.mixed"},dn={evaluation:"conn.chainSource.evaluation",reconstructed:"conn.chainSource.reconstructed",unknown:"ui.unknown"};function pn(e,n){const t=e.chain_source?[["conn.f.chainSource",dn[e.chain_source]?{key:dn[e.chain_source]}:e.chain_source]]:[];return[["ui.device",e.src??"—"],["conn.f.dst",e.dst??"—"],["ui.domain",e.domain??"—"],["conn.f.ingress",Be(e.ingress)],["conn.f.domainSource",Be(e.domain_source)],...t,["ui.process",e.pname??"—"],["conn.f.observedBy",un[e.observed_by]?{key:un[e.observed_by]}:e.observed_by],["ui.upload",i(e.upload_bytes,n)],["ui.download",i(e.download_bytes,n)],["conn.f.uploadRate",S(e.upload_bytes_per_second,n)],["conn.f.downloadRate",S(e.download_bytes_per_second,n)],["conn.f.started",A(e.started_at,n)]]}const mn={observed:["conn.state.observed","conn.stateHelp.observed"],routing:["conn.state.routing","conn.stateHelp.routing"],dialing:["conn.state.dialing","conn.stateHelp.dialing"]};function bn(e,n){return Object.hasOwn(mn,e)?{title:n("ui.state"),text:Object.values(mn).map(([e,t])=>n("ui.valuePair",{label:n(e),value:n(t)}))}:null}const hn=e=>({domain:e.domain??null,dip:h(e.dst)??null,sip:h(e.src)??null,outbound:e.outbound,matched:e.rule_id&&"unknown"!==e.rule_source?{id:e.rule_id,expression:e.rule_expression}:null});const gn=new WeakMap;function fn(e,n,t,s,l,a){const r=e=>{const n=gn.get(e);if(n&&n.locale===t&&n.names===s&&n.rulesListed===l&&n.t===a)return n.row;const o={id:ln(e.id),target:e.domain||e.dst||"—",seed:hn(e),source:e.src??"—",node:O(e,a,s),nodeName:!F(e.outbound)&&e.chain.length>0,path:R(e,a,s),rule:{expression:e.rule_expression,href:Ae(e.rule_id,l)},recomputed:"recomputed"===e.rule_source?a("conn.recomputed"):null,state:_(k,e.state,a),download:i(e.download_bytes,t),downloadRate:S(e.download_bytes_per_second,t),startedAt:e.started_at};return gn.set(e,{locale:t,names:s,rulesListed:l,t:a,row:o}),o};return function(e,n,t,s){let l=e;if(n.sort){const{column:r,direction:c}=n.sort,u=o(t);a=e=>{switch(r){case"dst":return e.domain||e.dst;case"src":return e.src;case"state":return _(k,e.state,s);case"down":return P(e.download_bytes);case"downRate":return P(e.download_bytes_per_second);case"age":return e.started_at?Date.parse(e.started_at):null;default:return null}},i=(e,n)=>{if(null==e)return null==n?0:1;if(null==n)return-1;const t="string"==typeof e&&"string"==typeof n?u(e,n):en?1:0;return"descending"===c?-t:t},l=e.map(e=>({item:e,key:a(e)})).sort((e,n)=>i(e.key,n.key)).map(e=>e.item)}var a,i;if("none"===n.group)return l.map(e=>({id:ln(e.id),connection:e}));const r=new Map;for(const o of l){const e=tn(o,n.group),t=r.get(e);t?t.push(o):r.set(e,[o])}return[...r].map(([e,n])=>({id:sn(e),group:e,children:n,active:n.filter(e=>"active"===e.state).length,download:M(...n.map(e=>e.download_bytes))}))}(e,n,t,a).map(e=>"connection"in e?{id:e.id,connection:r(e.connection)}:{id:e.id,group:e.group,children:e.children.map(r),label:a("conn.groupCount",{name:on(e.group,n.group,a),n:e.children.length}),totals:{down:i(e.download,t),state:a("conn.activeCount",{n:e.active})}})}const wn=Je().map(e=>e.id),vn=e=>["id","src","network","out","rule","q"].some(n=>new URLSearchParams(e).has(n))?"list":"traffic",yn=(e,n)=>x(e,"list"===vn(e)?{tab:I(e,wn,"list"),...n}:n);function xn({go:n,query:t}){const i=s(),c=l[a()],[u,d]=e.useState(()=>{try{return an(localStorage.getItem(Ze))}catch{return an(null)}}),m=U(Y),b=U(X),[g,f]=e.useState(()=>$e(!1)),w=e.useCallback(e=>f(n=>nn(n,e)),[]),v=e=>{const n={...u,...e};n.group!==u.group&&f($e(!1)),d(n);try{localStorage.setItem(Ze,JSON.stringify(n))}catch{}},S=e.useMemo(()=>new URLSearchParams(t),[t]),[A,M]=e.useState(S.get("q")??""),R=S.get("network")??"all",F=S.get("out")??"all",O=S.get("rule")??"all",P=(e,o)=>n("connections",yn(t,{[e]:"all"===o?null:o})),ee=S.get("id"),[ne,te]=e.useState(null);q(S.get("q"),e=>M(e??""));const oe=e.useRef(t);e.useEffect(()=>{oe.current=t});const se=e=>n("connections",yn(oe.current,{id:e})),le=e.useDeferredValue(A),ae=E(S.get("src")??""),ie=ce(ae),re=L(),me=!0===re.data?.resources.connections.can_close,be=N(re.data?.resources,"rules",{whileLoading:!1}),he=N(re.data?.resources,"flows",{whileLoading:!1});H(re.data?.resources);const ge=He(),fe=ue(ie.refetch),we=vn(t),ve=I(t,wn,we),ye=Q(ie.data,"list"===ve),xe=Q(ie.data,"traffic"===ve),je=e.useMemo(()=>V(ye),[ye]),_e=e.useMemo(()=>V(xe),[xe]),ke=N(re.data?.resources,"nodes",{whileLoading:!1}),Ce=de(ke),Oe=Q(Ce.data,"traffic"===ve),Pe=e.useMemo(()=>ke&&Oe?function(e,n,t){if(!n.some(e=>e.health?.length))return null;const s=[];let l=0;for(const o of n){const e=W(D(o.health??[]));void 0===e?l++:s.push({node:o.id,name:o.name,value:e,connections:0})}s.sort((e,n)=>e.value-n.value||o(t)(e.name,n.name));const a=new Map(s.map(e=>[e.node,e])),i=e.some(e=>e.chain?.length);let r=0;for(const o of e){const e=o.chain?.at(-1);if(void 0===e)continue;const n=a.get(e);n?n.connections++:r++}const c=s.reduce((e,n)=>e+n.connections,0);let u=0;const d=s.find(e=>(u+=e.connections)>=Math.max(1,Math.ceil(c/2))),p=s.map(e=>e.value);return{samples:s,chains:i,missing:l,unplaced:r,used:s.filter(e=>e.connections).length,p50:Te(p,50),p90:Te(p,90),weightedP50:c?d.value:null}}(_e,Oe,c):null,[ke,Oe,_e,c]),We=B("traffic"===ve&&N(re.data?.resources,"runtime",{whileLoading:!1})),De=ke&&!Ce.data?Ce.error:null,Ee=e.useMemo(()=>[...new Set(_e.map(e=>e.outbound))].sort((e,n)=>o(c)(e??"",n??"")),[_e,c]),Be=le.trim().toLowerCase(),Je=e.useMemo(()=>je.filter(e=>("all"===R||e.network===R)&&("all"===F||e.outbound===F)&&("all"===O||e.rule_expression===O)&&(!Be||[e.dst,e.domain,e.src,e.pname,r(e.outbound,i),C(e.chain,ge).join(" "),e.rule_expression].join(" ").toLowerCase().includes(Be))),[je,R,F,O,Be,ge,i]),Ke=ee?je.find(e=>e.id===ee):void 0,[ze,Xe]=e.useState(null);ee||null===ze||Xe(null);const on=function(e,n){if(!e||"none"===n)return null;const t=tn(e,n);return{group:t,token:JSON.stringify([e.id,n,t])}}(Ke,u.group);var sn,ln;on&&ze!==on.token&&(Xe(on.token),f((sn=g,ln=on.group,en(sn,ln)?nn(sn,ln):sn)));const rn=function(e,n){const t=s(),o=L().data?.resources,l=Ue(n),a=N(o,"rules",{whileLoading:!1})&&N(o,"config",{whileLoading:!1})&&!0===o?.config.writable?e?.rule_id??null:null,i=Ge(!!a),r=T(!!a),c=e&&hn(e);return{canAdd:!!c&&l.canAdd(c),row:{canAdd:l.canAdd,open:l.open,label:e=>t("conn.addRuleFor",{target:e}),noTarget:t("conn.ruleNoTarget")},canShow:N(o,"rules",{whileLoading:!1})&&!!e?.rule_id,canEdit:!!a&&qe(i.data?.rules.find(e=>e.rule_id===a),r.data?.sources??[]),openAdd:()=>{c&&l.open(c)},dialog:l.dialog}}(Ke,n),cn=e.useMemo(()=>function(e,n,t,o,s,l,a){const i=new Set(e.flatMap(e=>e.outbound?[e.outbound]:[]));"all"!==s&&i.add(s);const c=e=>{const n=e.flatMap(e=>e?[e]:[]);return Ne(n,1/0).top},u=[{id:"all",label:a("conn.allOutbounds")},...[...i].map(e=>({id:e,label:r(e,a)}))];return{networks:[["all",a("ui.allCount",{n:e.length})],["tcp",a("ui.tcp")],["udp",a("ui.udp")]],outbounds:u,outboundSections:[{id:"outbounds",items:u}],picks:[{title:a("ui.device"),value:Le("src",t??""),items:c(e.map(e=>h(e.src))).map(({key:e,count:n})=>({id:Le("src",e),label:e,desc:p(n,l)}))},{title:a("ui.rule"),value:Le("rule",o),items:c(e.map(e=>e.rule_expression)).map(({key:e,count:n})=>({id:Le("rule",e),label:e,desc:p(n,l)}))}],visibility:n&&"full"!==n.visibility?a("none"===n.visibility?"conn.visibilityNone":"conn.visibilityPartial"):null}}(je,ye,ae,O,F,c,i),[je,ye,ae,O,F,c,i]),un=pe(N(re.data?.resources,"groups",{whileLoading:!1})).data,dn=e.useMemo(()=>{const e=function(e,n,t,o,s){return e?{id:e.id,title:e.domain||e.dst||e.id,tone:"blocked"===e.state||"failed"===e.state?"err":"active"===e.state?"ok":"info",status:t("ui.aside",{text:_(k,e.state,t),note:e.network.toUpperCase()}),chain:j(e,t,o),outbound:e.outbound,rule:{expression:e.rule_expression,href:Ae(e.rule_id,s)},fields:pn(e,n).map(([e,n])=>[t(e),"string"==typeof n?n:t(n.key,n.params)]),flowQuery:x("",{tab:"records",...e.flow_id?{id:e.flow_id}:{connection_id:e.id}}),traceQuery:e.domain||h(e.dst)?Se({network:"udp"===e.network?"udp":"tcp",domain:e.domain??"",dst_ip:h(e.dst),dst_port:y(e.dst),src_ip:h(e.src),src_port:y(e.src),pname:e.pname??""}):null,source:e.src?h(e.src)??e.src:null,closable:"active"===e.state||"dialing"===e.state||"routing"===e.state,closeReason:"ebpf"===e.observed_by?t("conn.notClosable"):null,stateHelp:bn(e.state,t)}:null}(Ke,c,i,ge,be);return e&&{...e,outboundTag:Me(e.outbound,un,i)}},[Ke,c,i,ge,be,un]),mn={...cn,detail:dn},gn=e.useMemo(()=>fn(Je,u,c,ge,be,i),[Je,u,c,ge,be,i]),xn=e=>{const o=Fe(String(e),["src","rule"]);"src"===o?.kind?(M(""),n("connections",yn(t,{src:o.value&&ae!==o.value?o.value:null,q:null}))):"rule"===o?.kind&&P("rule",O===o.value?"all":o.value)},jn=function(e,n,t){const[o,s]=e.picks,l=(e,n,t,o,s)=>({filter:e,label:n,sections:[{title:n,items:t,value:o}],searchLabel:s});return{active:["all"!==n.network,"all"!==n.out,!!n.src,"all"!==n.rule].filter(Boolean).length,submenus:[l("network",t("ui.network"),e.networks.map(([e,n])=>({id:e,label:n})),n.network),l("out",t("ui.outbound"),e.outbounds,n.out,t("ui.filterOutbounds")),l("src",o.title,[{id:Le("src",""),label:t("conn.allDevices")},...o.items],o.value,t("ui.filterDevices")),l("rule",s.title,[{id:Le("rule","all"),label:t("conn.allRules")},...s.items],s.value,t("ui.filterRules"))]}}(cn,{network:R,out:F,src:ae,rule:O},i),_n={network:e=>P("network",e),out:e=>P("out",e),src:xn,rule:xn},kn={active:jn.active,submenus:jn.submenus.map(({filter:e,...n})=>({...n,sections:n.sections.map(n=>({...n,onChange:_n[e]}))}))},Cn=e.useCallback(e=>n("connections",x(t,{tab:"list",id:e})),[n,t]);return{...mn,tab:ve,setTab:e=>n("connections",G(t,e,"traffic"===we?we:null)),openInList:Cn,trafficUncounted:Re(We.data),view:u,updateView:v,collapse:g,toggleCollapse:w,toggleCollapseAll:()=>f($e(!g.allCollapsed)),wide:m,text:A,setText:M,network:R,out:F,sel:ee,select:se,collection:gn,rows:_e,outboundKeys:Ee,latency:Pe,latencyError:De,retryLatency:Ce.refetch,setNetwork:e=>P("network",e),setOut:e=>P("out",e),pick:xn,compact:b,filterMenu:kn,columns:Ye.map(e=>({id:e.id,label:i(e.label)})),visibleColumns:Ye.filter(e=>!u.hidden.includes(e.id)).map(e=>e.id),toggleColumn:e=>{const n=String(e),t=u.hidden.includes(n)?u.hidden.filter(e=>e!==n):[...u.hidden,n];t.length{M(""),n("connections",yn(t,{network:null,out:null,rule:null,q:null,src:null}))},error:ie.error,retry:ie.refetch,loading:ie.loading&&!ie.data,truncated:!!ie.data?.truncated,canClose:me,canViewFlow:he,closeAll:{confirmationText:ne?.query?i("all"===ne.query.type?"conn.closeAllLive":"tcp"===ne.query.type?"conn.closeAllLiveTcp":"conn.closeAllLiveUdp",ae?{n:ne.count??ne.ids.length,source:ae}:{n:ne.count??ne.ids.length,source:i("conn.anySource")}):i("conn.closeAllHelp",{n:ne?.ids.length??0}),open:!!ne,setOpen:e=>te(e?"all"!==S.get("scope")||"all"!==R||ae||"all"!==F||"all"!==O||Be?function(e,n){const t=e.map(e=>e.id),o=null!=n.bulkLimit&&t.length>n.bulkLimit;return n.narrowed||n.truncated||o?{ids:t}:{ids:t,query:{type:n.network,src:n.src,all:!0}}}(Je,{network:R,src:ae,narrowed:"all"!==F||"all"!==O||!!Be,truncated:!!ie.data?.truncated,bulkLimit:re.data?.resources.connections.max_bulk_close}):{ids:[],query:{type:"all",all:!0},count:(ie.data?.total_tcp??0)+(ie.data?.total_udp??0)}:null),isDisabled:!Je.length||!!fe.busy||A!==le,isPending:"all"===fe.busy,onConfirm:async()=>{if(ne)try{const e=await fe.closeAll(ne);if(!e)return;se(null),J(K(e),i("conn.closedAll",{closed:e.closed,skipped:e.skipped}))}catch(e){return i("ui.valuePair",{label:i("conn.closeFailed"),value:z(e,i)})}},onAbort:fe.cancel},close:{pending:fe.busy===Ke?.id,disabled:!!fe.busy,run:()=>{(async()=>{if(!mn.detail)return;const{id:e}=mn.detail;try{if(!(await fe.close(e)))return;new URLSearchParams(oe.current).get("id")===e&&se(null),J("positive",i("conn.closed",{name:mn.detail.title}))}catch(n){n instanceof Z&&"state_conflict"===n.code?J("negative",i("conn.notClosable"),{error:n}):J("negative",i("conn.closeFailed"),$(n,i))}})()}},ruleAction:rn,showRule:(e=!1)=>{Ke?.rule_id&&n("rules",x("",{tab:"list",rule:Ke.rule_id,edit:e?Ke.rule_id:null}))},canTrace:N(re.data?.resources,"routing_trace",{whileLoading:!1})&&!!mn.detail?.traceQuery,traceConnection:()=>{mn.detail?.traceQuery&&n("rules",mn.detail.traceQuery)},showFlow:()=>{mn.detail&&he&&n("flows",mn.detail.flowQuery)},onlyClient:()=>{mn.detail?.source&&(M(""),n("connections",yn(t,{src:mn.detail.source,q:null})))},canExport:Je.length>0,export:()=>Qe(Ve("connections","csv"),function(e,n){return[Ie(["id","target","domain","source","network","state","outbound","chain","rule","upload_bytes","download_bytes","started_at"]),...e.map(e=>Ie([e.id,e.dst,e.domain,e.src,e.network,e.state,e.outbound,C(e.chain,n).join(" > "),e.rule_expression,e.upload_bytes,e.download_bytes,e.started_at]))].join("\n")+"\n"}(Je,ge),"text/csv;charset=utf-8"),detailTitle:mn.detail?.title??"",notInSnapshot:!!ee&&!Ke&&!!ie.data}}function jn(e){const o=s(),l=xn(e),a=l.detail,i={list:n.jsxs(n.Fragment,{children:[n.jsxs(fe,{page:!0,children:[l.compact?n.jsxs("span",{className:"rp-filter-row",children:[n.jsx(ee,{search:!0,label:o("ui.filter"),value:l.text,onChange:l.setText,placeholder:o("conn.filterHint"),className:"rp-filter"}),n.jsx(ne,{label:l.filterMenu.active?o("conn.filtersActive",{n:l.filterMenu.active}):o("conn.filters"),count:l.filterMenu.active,submenus:l.filterMenu.submenus,children:o("conn.filters")})]}):n.jsxs(n.Fragment,{children:[n.jsx(ee,{search:!0,label:o("ui.filter"),value:l.text,onChange:l.setText,placeholder:o("conn.filterHint"),className:"rp-filter"}),n.jsx(me,{label:o("ui.network"),value:l.network,onChange:l.setNetwork,items:l.networks}),n.jsx(Oe,{side:!0,label:o("ui.outbound"),searchLabel:o("ui.filterOutbounds"),value:l.out,onChange:l.setOut,sections:l.outboundSections}),n.jsx(ne,{label:o("conn.pick"),sections:l.picks,onAction:l.pick,searchLabel:o("conn.filterPick"),children:o("conn.pick")})]}),n.jsx(be,{label:o("conn.group"),side:!0,value:l.view.group,onChange:e=>l.updateView({group:e}),items:[{id:"source",label:o("conn.byClient")},{id:"outbound",label:o("ui.outbound")},{id:"none",label:o("conn.ungrouped")}]}),"none"!==l.view.group&&n.jsx(te,{onPress:l.toggleCollapseAll,children:o(l.collapse.allCollapsed?"conn.expandAll":"conn.collapseAll")}),n.jsx(ne,{label:o("conn.columns"),selectionMode:"multiple",items:l.columns,value:l.visibleColumns,onAction:l.toggleColumn,children:o("conn.columns")}),l.filtered&&n.jsx(te,{quiet:!0,onPress:l.clear,children:o("ui.clearFilters")}),l.truncated&&n.jsx(f,{tone:"warn",children:o("conn.truncated")}),l.visibility&&n.jsx(v,{text:o("conn.visibilityNote"),children:n.jsx(f,{children:l.visibility})}),n.jsx("span",{className:"rp-grow"}),l.canClose&&n.jsx(oe,{label:o("conn.closeAll"),...l.closeAll}),n.jsxs(te,{isDisabled:!l.canExport,onPress:l.export,children:[n.jsx(ve,{}),o("conn.export")]})]}),n.jsxs("div",{className:"rp-with-panel","data-open":a?"":void 0,children:[n.jsx(cn,{collection:l.collection,loading:l.loading,selected:l.sel,onSelect:l.select,selectOnFocus:l.wide,view:l.view,collapse:l.collapse,onToggleGroup:l.toggleCollapse,onSort:e=>l.updateView({sort:e}),rule:l.ruleAction.row}),n.jsx(se,{open:!!a,title:l.detailTitle,onClose:()=>l.select(null),children:a&&n.jsxs(n.Fragment,{children:[n.jsx(le,{help:a.stateHelp,children:n.jsx(ae,{small:!0,tone:a.tone,children:a.status})}),n.jsxs("div",{className:"rp-cluster",children:[l.ruleAction.canAdd&&n.jsx(te,{onPress:l.ruleAction.openAdd,children:o("rule.add")}),n.jsx(he,{actions:[...l.ruleAction.canShow?[{id:"show-rule",label:o("conn.showRule"),onAction:()=>l.showRule()}]:[],...l.ruleAction.canEdit?[{id:"edit-rule",label:o("conn.editRule"),onAction:()=>l.showRule(!0)}]:[],...l.canViewFlow?[{id:"view-flow",label:o("conn.viewFlow"),onAction:l.showFlow}]:[],...l.canTrace?[{id:"trace",label:o("conn.trace"),onAction:l.traceConnection}]:[],...a.source?[{id:"only-client",label:o("conn.onlyThisClient"),onAction:l.onlyClient}]:[],...l.canClose&&a.closable?[{id:"close",label:o("conn.close"),negative:!0,isPending:l.close.pending,isDisabled:l.close.disabled||!!a.closeReason,reason:a.closeReason??void 0,onAction:l.close.run}]:[]]})]}),n.jsx(ie,{items:a.fields}),n.jsx(ie,{items:[[o("ui.outbound"),n.jsx(t,{...a.outboundTag})],[o("conn.chain"),a.chain]]}),n.jsxs("div",{className:"rp-list",children:[n.jsx("span",{className:"rp-label",children:o("ui.rule")}),n.jsx(re,{...a.rule})]})]})})]}),l.notInSnapshot&&n.jsx("span",{className:"rp-label",children:o("conn.notInSnapshot")}),n.jsx(Ee,{dialog:l.ruleAction.dialog})]}),traffic:n.jsx(ze,{records:l.rows,outbounds:l.outboundKeys,latency:l.latency,latencyError:l.latencyError,retryLatency:l.retryLatency,truncated:l.truncated,uncounted:l.trafficUncounted,onSelect:l.openInList})};return n.jsxs("div",{className:"rp-page",children:[l.error&&n.jsx(d,{error:l.error,onRetry:l.retry}),n.jsx(ge,{page:!0,keepMounted:!0,label:o("nav.connections"),value:l.tab,onChange:l.setTab,items:Je().map(e=>({id:e.id,label:o(e.titleKey),content:i[e.id]}))})]})}export{jn as Connections}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Connections-CjRavXMq.js b/luci-app-honk/root/etc/honk/doona/assets/Connections-CjRavXMq.js deleted file mode 100644 index 59d810658..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Connections-CjRavXMq.js +++ /dev/null @@ -1 +0,0 @@ -import{r as e,j as n}from"./vendor-react-64fcanlc.js";import{O as t}from"./OutboundTag-jvAhyeqj.js";import{F as o,aC as s,V as l,o as a,aT as r,Q as i,P as c,ag as d,x as u,aa as p,d3 as m,O as b,aP as h,N as g,T as f,d4 as w,w as v,cP as y,ad as x,d5 as j,d6 as _,$ as k,a0 as C,a1 as S,ab as A,d7 as N,i as L,d8 as T,av as M,am as R,d9 as P,bK as F,da as O,c7 as q,db as D,dc as W,dd as U,a9 as E,de as V,a8 as H,df as I,b4 as Q,dg as B,dh as G,bD as K,di as J,bQ as z,U as Z,dj as $,bB as X,aN as Y,Z as ee,bs as ne}from"./index-BgFj_VXE.js";import{R as te,d as oe,h as se,c as le,u as ae,S as re,L as ie,M as ce}from"./logs-BxISynQ4.js";import{T as de}from"./Tabs-CD2lZase.js";import{T as ue}from"./Toolbar-CIBfeuEz.js";import{z as pe,D as me,U as be,F as he,A as ge,B as fe,C as we,L as ve,E as ye,G as xe,H as je,I as _e,J as ke,K as Ce,M as Se}from"./activity-D06xJ7oH.js";import{S as Ae}from"./SearchSelect-CO6FsBaz.js";import{d as Ne,b as Le,c as Te,a as Me,l as Re}from"./format-s2EANuUb.js";import{D as Pe}from"./Table-Dprh3Btz.js";import{T as Fe}from"./TimeCell-B4WLB8Ou.js";import{A as Oe}from"./AddCircle-prR7q573.js";import{u as qe,r as De,R as We}from"./useQuickRule-fWQicp9K.js";import{u as Ue}from"./outbounds-BApwKyMu.js";import{c as Ee,d as Ve,e as He}from"./files-Dt8K7QfP.js";import{w as Ie}from"./labels-DPpd4zRF.js";import{u as Qe}from"./flows-xKlsDqlH.js";import{c as Be}from"./nav-Wiib71Wo.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Tag-PTwIjtR6.js";import"./Select-CkiGmyVC.js";import"./useGridSelectionCheckbox-BxnCShqN.js";import"./SearchList-Bhc2_bS4.js";import"./Virtualizer-CZl-q5wo.js";import"./DaeCode-DEjXqvav.js";import"./daeTokens-BVtuNnWZ.js";const Ge=[0,2,3,1,4,5,6,7],Ke=e.memo(function({records:t,outbounds:d,latency:u,latencyError:p,retryLatency:m,truncated:b,onSelect:h}){const g=o(),f=pe(),w=s[l()],v=e.useCallback(e=>Le(e,w),[w]),y=e.useMemo(()=>function(e,n){const t=new Map;let o=0;for(const r of e){if(null===r.upload_bytes||null===r.download_bytes){o++;continue}const e={id:r.id,up:Number(r.upload_bytes),down:Number(r.download_bytes),name:r.domain||r.dst||r.id},n=t.get(r.outbound);n?n.push(e):t.set(r.outbound,[e])}const s=[...t].map(([e,n])=>({outbound:e,points:n})).sort((e,t)=>Ne(n)(e.outbound??"",t.outbound??""));let l,a=-1n;for(const r of e){if(null===r.upload_bytes||null===r.download_bytes)continue;const e=BigInt(r.upload_bytes)+BigInt(r.download_bytes);e>a&&(a=e,l={id:r.id,up:Number(r.upload_bytes),down:Number(r.download_bytes),name:r.domain||r.dst||r.id,outbound:r.outbound})}return{series:s,unknown:o,heaviest:l,placed:e.length-o}}(t,w),[t,w]),x=e.useMemo(()=>{const e=d.filter(e=>"block"!==e);return y.series.map(n=>{return{id:n.outbound??"",label:a(n.outbound,g),color:(t=n.outbound,"block"===t?f.negative:f.cat[Ge[Math.max(0,e.indexOf(t))%Ge.length]]),points:n.points.map(e=>({id:e.id,x:e.up,y:e.down,name:e.name,detail:g("conn.chart.point",{download:v(e.down),upload:v(e.up)})}))};var t})},[y,d,f,g,v]),j=y.heaviest?[{label:g("conn.chart.busiest"),icon:n.jsx(r,{}),tint:"c3",value:y.heaviest.name,caption:a(y.heaviest.outbound,g)},{label:g("conn.chart.down"),value:v(y.heaviest.down),icon:n.jsx(me,{}),tint:"c1"},{label:g("conn.chart.up"),value:v(y.heaviest.up),icon:n.jsx(be,{}),tint:"c4"}]:[],_=y.unknown?g("conn.chart.sampleUnknown",{n:t.length,unknown:y.unknown}):g("conn.chart.sample",{n:t.length});return n.jsxs("div",{className:"rp-chart-page",children:[n.jsx(he,{facts:j,lead:!0}),n.jsxs(i,{title:g("conn.chart.title"),note:_,children:[b&&n.jsx("p",{className:"rp-note",children:g("conn.truncated")}),y.placed>0&&n.jsxs(n.Fragment,{children:[n.jsx(ge,{label:g("conn.chart.title"),series:x,fmt:v,onSelect:h,regions:{above:g("conn.chart.moreDown"),below:g("conn.chart.moreUp")}}),n.jsx(fe,{series:x}),n.jsx("p",{className:"rp-note",children:g("conn.chart.hint")})]})]}),u?n.jsx(Je,{latency:u}):p&&n.jsx(i,{title:g("ui.nodeLatency"),children:n.jsx(c,{error:p,onRetry:m})})]})});function Je({latency:e}){const t=o(),a=pe(),r=e=>Te(e,t),c=s[l()],u=n=>!e.chains||n?a.cat[0]:a.muted;return n.jsx(i,{title:t("ui.nodeLatency"),note:t("conn.latency.sample",{n:e.samples.length,missing:e.missing}),children:e.samples.length?n.jsxs(n.Fragment,{children:[n.jsx("p",{className:"rp-note",children:t("conn.latency.percentiles",{p50:r(e.p50),p90:r(e.p90)})}),null!==e.weightedP50&&n.jsx("p",{className:"rp-note",children:e.unplaced?t("conn.latency.weightedUnplaced",{p50:r(e.weightedP50),n:e.unplaced}):t("conn.latency.weighted",{p50:r(e.weightedP50)})}),n.jsx(we,{label:t("ui.nodeLatency"),points:e.samples.map(e=>({id:e.node,nodeName:!0,value:e.value,color:u(e.connections>0),lines:[e.name,r(e.value),...e.connections?[t("conn.chart.sample",{n:e.connections})]:[]]})),fmt:r}),e.chains&&n.jsxs("div",{className:"rp-legend",children:[n.jsx(ve,{swatch:u(!0),label:t("conn.latency.inUse"),value:d(e.used,c)}),n.jsx(ve,{swatch:u(!1),label:t("conn.latency.others"),value:d(e.samples.length-e.used,c)})]}),n.jsx("p",{className:"rp-note",children:t("conn.latency.hint")})]}):n.jsx("p",{className:"rp-note",children:t("conn.latency.pending")})})}const ze=[{id:"dst",label:"ui.target",minWidth:200,sortable:!0},{id:"src",label:"ui.device",minWidth:128,sortable:!0,drop:5},{id:"node",label:"conn.node",minWidth:120,drop:3},{id:"rule",label:"conn.rule",minWidth:220,drop:2},{id:"state",label:"ui.state",minWidth:112,sortable:!0,drop:7},{id:"down",label:"ui.download",minWidth:96,sortable:!0,drop:4},{id:"downRate",label:"conn.f.downloadRate",minWidth:128,sortable:!0,drop:1},{id:"age",label:"ui.started",minWidth:132,sortable:!0,drop:6}],Ze=u.connectionsView,$e=e=>({allCollapsed:e,exceptions:new Set}),Xe=(e,n)=>e.allCollapsed!==e.exceptions.has(n);function Ye(e,n){const t=new Set(e.exceptions);return t.delete(n)||t.add(n),{allCollapsed:e.allCollapsed,exceptions:t}}const en=(e,n)=>"source"===n?p(e.src??void 0)??e.src??"—":e.outbound??"unknown",nn=(e,n,t)=>"source"===n?e:a(e,t),tn=e=>"g:"+e,on=e=>e.startsWith("g:")||e.startsWith("\\")?"\\"+e:e;function sn(e){const n={hidden:[],sort:null,group:"source"};try{const t=JSON.parse(e??"null");if(!t||"object"!=typeof t)return n;const o=Array.isArray(t.hidden)?t.hidden.map(e=>"chain"===e?"node":e):[],s=ze.filter(e=>o.includes(e.id)).map(e=>e.id),l=t.sort;return{hidden:s.length===ze.length?[]:s,sort:l&&ze.some(e=>e.sortable&&e.id===l.column)&&["ascending","descending"].includes(l.direction)?{column:l.column,direction:l.direction}:null,group:"none"===t.group||"outbound"===t.group?t.group:"source"}}catch{return n}}const ln=e=>e.target;function an({collection:t,view:s,collapse:l,onToggleGroup:a,loading:r,selected:i,onSelect:c,selectOnFocus:d,onSort:u,rule:p}){const w=o(),[v,y]=m(442),x=e.useRef(p);e.useLayoutEffect(()=>{x.current=p});const j=e.useMemo(()=>{const e={dst:e=>n.jsx(f,{children:e.target}),src:e=>n.jsx(f,{className:"rp-code",children:e.source}),node:e=>e.nodeName?n.jsx(g,{name:e.node,className:"rp-chain",text:e.path??void 0}):n.jsx(f,{className:"rp-chain",text:e.path??void 0,children:e.node}),rule:e=>n.jsxs("span",{className:"rp-rule",children:[n.jsx(te,{...e.rule}),e.recomputed&&n.jsx(h,{children:e.recomputed})]}),state:e=>e.state,down:e=>e.download,downRate:e=>e.downloadRate,age:e=>n.jsx(Fe,{at:e.startedAt})};return[...ze.filter(e=>!s.hidden.includes(e.id)).map(n=>({...n,label:w(n.label),grow:1,render:e[n.id]})),{id:"actions",actions:!0,label:w("ui.actions"),minWidth:88,grow:0,render:e=>{const t=x.current,o=!t.canAdd(e.seed);return n.jsx(b,{quiet:!0,icon:!0,small:!0,label:t.label(e.target),tip:o?t.noTarget:void 0,isDisabled:o,onPress:()=>x.current.open(e.seed),children:n.jsx(Oe,{})})}}]},[s.hidden,w]),_=e.useMemo(()=>t.map(e=>"connection"in e?e.connection:e),[t]),k=e.useMemo(()=>({grouped:"none"!==s.group,collapsed:e=>Xe(l,e),onToggle:a}),[s.group,l,a]);return n.jsx("div",{ref:v,children:n.jsx(Pe,{label:w("nav.connections"),rowDetail:!0,cols:j,rows:_,height:y,selected:i&&on(i),onSelect:c&&(e=>c(e&&(e=>e.startsWith("\\")?e.slice(1):e)(e))),selectOnFocus:d,reveal:!0,empty:w("conn.empty"),loading:r,sort:s.sort&&{column:String(s.sort.column),direction:s.sort.direction},onSort:u,getTextValue:ln,stream:!0,tree:k})})}const rn={userspace:"conn.observed.userspace",ebpf:"conn.observed.ebpf",mixed:"conn.observed.mixed"},cn={evaluation:"conn.chainSource.evaluation",reconstructed:"conn.chainSource.reconstructed",unknown:"ui.unknown"};function dn(e,n){const t=e.chain_source?[["conn.f.chainSource",cn[e.chain_source]?{key:cn[e.chain_source]}:e.chain_source]]:[];return[["ui.device",e.src??"—"],["conn.f.dst",e.dst??"—"],["ui.domain",e.domain??"—"],["conn.f.ingress",Ie(e.ingress)],["conn.f.domainSource",Ie(e.domain_source)],...t,["ui.process",e.pname??"—"],["conn.f.observedBy",rn[e.observed_by]?{key:rn[e.observed_by]}:e.observed_by],["ui.upload",Le(e.upload_bytes,n)],["ui.download",Le(e.download_bytes,n)],["conn.f.uploadRate",Me(e.upload_bytes_per_second,n)],["conn.f.downloadRate",Me(e.download_bytes_per_second,n)],["conn.f.started",Re(e.started_at,n)]]}const un={observed:["conn.state.observed","conn.stateHelp.observed"],routing:["conn.state.routing","conn.stateHelp.routing"],dialing:["conn.state.dialing","conn.stateHelp.dialing"]};function pn(e,n){return Object.hasOwn(un,e)?{title:n("ui.state"),text:Object.values(un).map(([e,t])=>n("ui.valuePair",{label:n(e),value:n(t)}))}:null}const mn=e=>({domain:e.domain??null,dip:p(e.dst)??null,sip:p(e.src)??null,outbound:e.outbound,matched:e.rule_id&&"unknown"!==e.rule_source?{id:e.rule_id,expression:e.rule_expression}:null});const bn=new WeakMap;function hn(e,n,t,o,s,l){const a=e=>{const n=bn.get(e);if(n&&n.locale===t&&n.names===o&&n.rulesListed===s&&n.t===l)return n.row;const a={id:on(e.id),target:e.domain||e.dst||"—",seed:mn(e),source:e.src??"—",node:T(e,l,o),nodeName:!L(e.outbound)&&e.chain.length>0,path:N(e,l,o),rule:{expression:e.rule_expression,href:xe(e.rule_id,s)},recomputed:"recomputed"===e.rule_source?l("conn.recomputed"):null,state:x(j,e.state,l),download:Le(e.download_bytes,t),downloadRate:Me(e.download_bytes_per_second,t),startedAt:e.started_at};return bn.set(e,{locale:t,names:o,rulesListed:s,t:l,row:a}),a};return function(e,n,t,o){let s=e;if(n.sort){const{column:r,direction:i}=n.sort,c=Ne(t);l=e=>{switch(r){case"dst":return e.domain||e.dst;case"src":return e.src;case"state":return x(j,e.state,o);case"down":return M(e.download_bytes);case"downRate":return M(e.download_bytes_per_second);case"age":return e.started_at?Date.parse(e.started_at):null;default:return null}},a=(e,n)=>{if(null==e)return null==n?0:1;if(null==n)return-1;const t="string"==typeof e&&"string"==typeof n?c(e,n):en?1:0;return"descending"===i?-t:t},s=e.map(e=>({item:e,key:l(e)})).sort((e,n)=>a(e.key,n.key)).map(e=>e.item)}var l,a;if("none"===n.group)return s.map(e=>({id:on(e.id),connection:e}));const r=new Map;for(const i of s){const e=en(i,n.group),t=r.get(e);t?t.push(i):r.set(e,[i])}return[...r].map(([e,n])=>({id:tn(e),group:e,children:n,active:n.filter(e=>"active"===e.state).length,download:A(...n.map(e=>e.download_bytes))}))}(e,n,t,l).map(e=>"connection"in e?{id:e.id,connection:a(e.connection)}:{id:e.id,group:e.group,children:e.children.map(a),label:l("conn.groupCount",{name:nn(e.group,n.group,l),n:e.children.length}),totals:{down:Le(e.download,t),state:l("conn.activeCount",{n:e.active})}})}const gn=Be().map(e=>e.id),fn=e=>["id","src","network","out","rule","q"].some(n=>new URLSearchParams(e).has(n))?"list":"traffic",wn=(e,n)=>v(e,"list"===fn(e)?{tab:W(e,gn,"list"),...n}:n);function vn({go:n,query:t}){const r=o(),i=s[l()],[c,u]=e.useState(()=>{try{return sn(localStorage.getItem(Ze))}catch{return sn(null)}}),m=F(G),b=F(B),[h,g]=e.useState(()=>$e(!1)),f=e.useCallback(e=>g(n=>Ye(n,e)),[]),A=e=>{const n={...c,...e};n.group!==c.group&&g($e(!1)),u(n);try{localStorage.setItem(Ze,JSON.stringify(n))}catch{}},N=e.useMemo(()=>new URLSearchParams(t),[t]),[L,T]=e.useState(N.get("q")??""),M=N.get("network")??"all",z=N.get("out")??"all",Z=N.get("rule")??"all",$=(e,o)=>n("connections",wn(t,{[e]:"all"===o?null:o})),X=N.get("id"),[Y,ee]=e.useState(null);O(N.get("q"),e=>T(e??""));const ne=e.useRef(t);e.useEffect(()=>{ne.current=t});const te=e=>n("connections",wn(ne.current,{id:e})),re=e.useDeferredValue(L),ie=q(N.get("src")??""),ce=oe(ie),de=k(),ue=!0===de.data?.resources.connections.can_close,pe=C(de.data?.resources,"rules",{whileLoading:!1}),me=C(de.data?.resources,"flows",{whileLoading:!1});D(de.data?.resources);const be=Ue(),he=se(ce.refetch),ge=fn(t),fe=W(t,gn,ge),we=U(ce.data,"list"===fe),ve=U(ce.data,"traffic"===fe),Ae=e.useMemo(()=>E(we),[we]),Le=e.useMemo(()=>E(ve),[ve]),Te=C(de.data?.resources,"nodes",{whileLoading:!1}),Me=le(Te),Re=U(Me.data,"traffic"===fe),Pe=e.useMemo(()=>Te&&Re?function(e,n,t){if(!n.some(e=>e.health?.length))return null;const o=[];let s=0;for(const p of n){const e=R(P(p.health??[]));void 0===e?s++:o.push({node:p.id,name:p.name,value:e,connections:0})}o.sort((e,n)=>e.value-n.value||Ne(t)(e.name,n.name));const l=new Map(o.map(e=>[e.node,e])),a=e.some(e=>e.chain?.length);let r=0;for(const p of e){const e=p.chain?.at(-1);if(void 0===e)continue;const n=l.get(e);n?n.connections++:r++}const i=o.reduce((e,n)=>e+n.connections,0);let c=0;const d=o.find(e=>(c+=e.connections)>=Math.max(1,Math.ceil(i/2))),u=o.map(e=>e.value);return{samples:o,chains:a,missing:s,unplaced:r,used:o.filter(e=>e.connections).length,p50:ke(u,50),p90:ke(u,90),weightedP50:i?d.value:null}}(Le,Re,i):null,[Te,Re,Le,i]),Fe=Te&&!Me.data?Me.error:null,Oe=e.useMemo(()=>[...new Set(Le.map(e=>e.outbound))].sort((e,n)=>Ne(i)(e??"",n??"")),[Le,i]),We=re.trim().toLowerCase(),Ie=e.useMemo(()=>Ae.filter(e=>("all"===M||e.network===M)&&("all"===z||e.outbound===z)&&("all"===Z||e.rule_expression===Z)&&(!We||[e.dst,e.domain,e.src,e.pname,a(e.outbound,r),_(e.chain,be).join(" "),e.rule_expression].join(" ").toLowerCase().includes(We))),[Ae,M,z,Z,We,be,r]),Be=X?Ae.find(e=>e.id===X):void 0,[Ge,Ke]=e.useState(null);X||null===Ge||Ke(null);const Je=function(e,n){if(!e||"none"===n)return null;const t=en(e,n);return{group:t,token:JSON.stringify([e.id,n,t])}}(Be,c.group);var nn,tn;Je&&Ge!==Je.token&&(Ke(Je.token),g((nn=h,tn=Je.group,Xe(nn,tn)?Ye(nn,tn):nn)));const on=function(e,n){const t=o(),s=k().data?.resources,l=qe(n),a=C(s,"rules",{whileLoading:!1})&&C(s,"config",{whileLoading:!1})&&!0===s?.config.writable?e?.rule_id??null:null,r=Qe(!!a),i=S(!!a),c=e&&mn(e);return{canAdd:!!c&&l.canAdd(c),row:{canAdd:l.canAdd,open:l.open,label:e=>t("conn.addRuleFor",{target:e}),noTarget:t("conn.ruleNoTarget")},canShow:C(s,"rules",{whileLoading:!1})&&!!e?.rule_id,canEdit:!!a&&De(r.data?.rules.find(e=>e.rule_id===a),i.data?.sources??[]),openAdd:()=>{c&&l.open(c)},dialog:l.dialog}}(Be,n),ln=e.useMemo(()=>function(e,n,t,o,s,l,r){const i=new Set(e.flatMap(e=>e.outbound?[e.outbound]:[]));"all"!==s&&i.add(s);const c=e=>{const n=e.flatMap(e=>e?[e]:[]);return _e(n,1/0).top},u=[{id:"all",label:r("conn.allOutbounds")},...[...i].map(e=>({id:e,label:a(e,r)}))];return{networks:[["all",r("ui.allCount",{n:e.length})],["tcp",r("ui.tcp")],["udp",r("ui.udp")]],outbounds:u,outboundSections:[{id:"outbounds",items:u}],picks:[{title:r("ui.device"),value:je("src",t??""),items:c(e.map(e=>p(e.src))).map(({key:e,count:n})=>({id:je("src",e),label:e,desc:d(n,l)}))},{title:r("conn.rule"),value:je("rule",o),items:c(e.map(e=>e.rule_expression)).map(({key:e,count:n})=>({id:je("rule",e),label:e,desc:d(n,l)}))}],visibility:n&&"full"!==n.visibility?r("none"===n.visibility?"conn.visibilityNone":"conn.visibilityPartial"):null}}(Ae,we,ie,Z,z,i,r),[Ae,we,ie,Z,z,i,r]),an=ae(C(de.data?.resources,"groups",{whileLoading:!1})).data,rn=e.useMemo(()=>{const e=function(e,n,t,o,s){return e?{id:e.id,title:e.domain||e.dst||e.id,tone:"blocked"===e.state||"failed"===e.state?"err":"active"===e.state?"ok":"info",status:t("ui.aside",{text:x(j,e.state,t),note:e.network.toUpperCase()}),chain:y(e,t,o),outbound:e.outbound,rule:{expression:e.rule_expression,href:xe(e.rule_id,s)},fields:dn(e,n).map(([e,n])=>[t(e),"string"==typeof n?n:t(n.key,n.params)]),flowQuery:v("",{tab:"records",...e.flow_id?{id:e.flow_id}:{connection_id:e.id}}),traceQuery:e.domain||p(e.dst)?ye({network:"udp"===e.network?"udp":"tcp",domain:e.domain??"",dst_ip:p(e.dst),dst_port:w(e.dst),src_ip:p(e.src),src_port:w(e.src),pname:e.pname??""}):null,source:e.src?p(e.src)??e.src:null,closable:"active"===e.state||"dialing"===e.state||"routing"===e.state,closeReason:"ebpf"===e.observed_by?t("conn.notClosable"):null,stateHelp:pn(e.state,t)}:null}(Be,i,r,be,pe);return e&&{...e,outboundTag:Ce(e.outbound,an,r)}},[Be,i,r,be,pe,an]),cn={...ln,detail:rn},un=e.useMemo(()=>hn(Ie,c,i,be,pe,r),[Ie,c,i,be,pe,r]),bn=e=>{const o=Se(String(e),["src","rule"]);"src"===o?.kind?(T(""),n("connections",wn(t,{src:o.value&&ie!==o.value?o.value:null,q:null}))):"rule"===o?.kind&&$("rule",Z===o.value?"all":o.value)},vn=function(e,n,t){const[o,s]=e.picks,l=(e,n,t,o,s)=>({filter:e,label:n,sections:[{title:n,items:t,value:o}],searchLabel:s});return{active:["all"!==n.network,"all"!==n.out,!!n.src,"all"!==n.rule].filter(Boolean).length,submenus:[l("network",t("ui.network"),e.networks.map(([e,n])=>({id:e,label:n})),n.network),l("out",t("ui.outbound"),e.outbounds,n.out,t("ui.filterOutbounds")),l("src",o.title,[{id:je("src",""),label:t("conn.allDevices")},...o.items],o.value,t("ui.filterDevices")),l("rule",s.title,[{id:je("rule","all"),label:t("conn.allRules")},...s.items],s.value,t("ui.filterRules"))]}}(ln,{network:M,out:z,src:ie,rule:Z},r),yn={network:e=>$("network",e),out:e=>$("out",e),src:bn,rule:bn},xn={active:vn.active,submenus:vn.submenus.map(({filter:e,...n})=>({...n,sections:n.sections.map(n=>({...n,onChange:yn[e]}))}))},jn=e.useCallback(e=>n("connections",v(t,{tab:"list",id:e})),[n,t]);return{...cn,tab:fe,setTab:e=>n("connections",V(t,e,"traffic"===ge?ge:null)),openInList:jn,view:c,updateView:A,collapse:h,toggleCollapse:f,toggleCollapseAll:()=>g($e(!h.allCollapsed)),wide:m,text:L,setText:T,network:M,out:z,sel:X,select:te,collection:un,rows:Le,outboundKeys:Oe,latency:Pe,latencyError:Fe,retryLatency:Me.refetch,setNetwork:e=>$("network",e),setOut:e=>$("out",e),pick:bn,compact:b,filterMenu:xn,columns:ze.map(e=>({id:e.id,label:r(e.label)})),visibleColumns:ze.filter(e=>!c.hidden.includes(e.id)).map(e=>e.id),toggleColumn:e=>{const n=String(e),t=c.hidden.includes(n)?c.hidden.filter(e=>e!==n):[...c.hidden,n];t.length{T(""),n("connections",wn(t,{network:null,out:null,rule:null,q:null,src:null}))},error:ce.error,retry:ce.refetch,loading:ce.loading&&!ce.data,truncated:!!ce.data?.truncated,canClose:ue,canViewFlow:me,closeAll:{confirmationText:Y?.query?r("all"===Y.query.type?"conn.closeAllLive":"tcp"===Y.query.type?"conn.closeAllLiveTcp":"conn.closeAllLiveUdp",ie?{n:Y.count??Y.ids.length,source:ie}:{n:Y.count??Y.ids.length,source:r("conn.anySource")}):r("conn.closeAllHelp",{n:Y?.ids.length??0}),open:!!Y,setOpen:e=>ee(e?"all"!==N.get("scope")||"all"!==M||ie||"all"!==z||"all"!==Z||We?function(e,n){const t=e.map(e=>e.id),o=null!=n.bulkLimit&&t.length>n.bulkLimit;return n.narrowed||n.truncated||o?{ids:t}:{ids:t,query:{type:n.network,src:n.src,all:!0}}}(Ie,{network:M,src:ie,narrowed:"all"!==z||"all"!==Z||!!We,truncated:!!ce.data?.truncated,bulkLimit:de.data?.resources.connections.max_bulk_close}):{ids:[],query:{type:"all",all:!0},count:(ce.data?.total_tcp??0)+(ce.data?.total_udp??0)}:null),isDisabled:!Ie.length||!!he.busy||L!==re,isPending:"all"===he.busy,onConfirm:async()=>{if(Y)try{const e=await he.closeAll(Y);if(!e)return;te(null),H(I(e),r("conn.closedAll",{closed:e.closed,skipped:e.skipped}))}catch(e){return r("ui.valuePair",{label:r("conn.closeFailed"),value:Q(e,r)})}},onAbort:he.cancel},close:{pending:he.busy===Be?.id,disabled:!!he.busy,run:()=>{(async()=>{if(!cn.detail)return;const{id:e}=cn.detail;try{if(!(await he.close(e)))return;new URLSearchParams(ne.current).get("id")===e&&te(null),H("positive",r("conn.closed",{name:cn.detail.title}))}catch(n){n instanceof K&&"state_conflict"===n.code?H("negative",r("conn.notClosable"),{error:n}):H("negative",r("conn.closeFailed"),J(n,r))}})()}},ruleAction:on,showRule:(e=!1)=>{Be?.rule_id&&n("rules",v("",{tab:"list",rule:Be.rule_id,edit:e?Be.rule_id:null}))},canTrace:C(de.data?.resources,"routing_trace",{whileLoading:!1})&&!!cn.detail?.traceQuery,traceConnection:()=>{cn.detail?.traceQuery&&n("rules",cn.detail.traceQuery)},showFlow:()=>{cn.detail&&me&&n("flows",cn.detail.flowQuery)},onlyClient:()=>{cn.detail?.source&&(T(""),n("connections",wn(t,{src:cn.detail.source,q:null})))},canExport:Ie.length>0,export:()=>Ve(He("connections","csv"),function(e,n){return[Ee(["id","target","domain","source","network","state","outbound","chain","rule","upload_bytes","download_bytes","started_at"]),...e.map(e=>Ee([e.id,e.dst,e.domain,e.src,e.network,e.state,e.outbound,_(e.chain,n).join(" > "),e.rule_expression,e.upload_bytes,e.download_bytes,e.started_at]))].join("\n")+"\n"}(Ie,be),"text/csv;charset=utf-8"),detailTitle:cn.detail?.title??"",notInSnapshot:!!X&&!Be&&!!ce.data}}function yn(e){const s=o(),l=vn(e),a=l.detail,r={list:n.jsxs(n.Fragment,{children:[n.jsxs(ue,{page:!0,children:[l.compact?n.jsxs("span",{className:"rp-filter-row",children:[n.jsx(z,{search:!0,label:s("ui.filter"),value:l.text,onChange:l.setText,placeholder:s("conn.filterHint"),className:"rp-filter"}),n.jsx(Z,{label:l.filterMenu.active?s("conn.filtersActive",{n:l.filterMenu.active}):s("conn.filters"),count:l.filterMenu.active,submenus:l.filterMenu.submenus,children:s("conn.filters")})]}):n.jsxs(n.Fragment,{children:[n.jsx(z,{search:!0,label:s("ui.filter"),value:l.text,onChange:l.setText,placeholder:s("conn.filterHint"),className:"rp-filter"}),n.jsx(re,{label:s("ui.network"),value:l.network,onChange:l.setNetwork,items:l.networks}),n.jsx(Ae,{side:!0,label:s("ui.outbound"),searchLabel:s("ui.filterOutbounds"),value:l.out,onChange:l.setOut,sections:l.outboundSections}),n.jsx(Z,{label:s("conn.pick"),sections:l.picks,onAction:l.pick,searchLabel:s("conn.filterPick"),children:s("conn.pick")})]}),n.jsx(ie,{label:s("conn.group"),side:!0,value:l.view.group,onChange:e=>l.updateView({group:e}),items:[{id:"source",label:s("conn.byClient")},{id:"outbound",label:s("ui.outbound")},{id:"none",label:s("conn.ungrouped")}]}),"none"!==l.view.group&&n.jsx(b,{onPress:l.toggleCollapseAll,children:s(l.collapse.allCollapsed?"conn.expandAll":"conn.collapseAll")}),n.jsx(Z,{label:s("conn.columns"),selectionMode:"multiple",items:l.columns,value:l.visibleColumns,onAction:l.toggleColumn,children:s("conn.columns")}),l.filtered&&n.jsx(b,{quiet:!0,onPress:l.clear,children:s("ui.clearFilters")}),l.truncated&&n.jsx(h,{tone:"warn",children:s("conn.truncated")}),l.visibility&&n.jsx(f,{text:s("conn.visibilityNote"),children:n.jsx(h,{children:l.visibility})}),n.jsx("span",{className:"rp-grow"}),l.canClose&&n.jsx($,{label:s("conn.closeAll"),...l.closeAll}),n.jsxs(b,{isDisabled:!l.canExport,onPress:l.export,children:[n.jsx(me,{}),s("conn.export")]})]}),n.jsxs("div",{className:"rp-with-panel","data-open":a?"":void 0,children:[n.jsx(an,{collection:l.collection,loading:l.loading,selected:l.sel,onSelect:l.select,selectOnFocus:l.wide,view:l.view,collapse:l.collapse,onToggleGroup:l.toggleCollapse,onSort:e=>l.updateView({sort:e}),rule:l.ruleAction.row}),n.jsx(X,{open:!!a,title:l.detailTitle,onClose:()=>l.select(null),children:a&&n.jsxs(n.Fragment,{children:[n.jsx(Y,{help:a.stateHelp,children:n.jsx(ee,{small:!0,tone:a.tone,children:a.status})}),n.jsxs("div",{className:"rp-cluster",children:[l.ruleAction.canAdd&&n.jsx(b,{onPress:l.ruleAction.openAdd,children:s("rule.add")}),n.jsx(ce,{actions:[...l.ruleAction.canShow?[{id:"show-rule",label:s("conn.showRule"),onAction:()=>l.showRule()}]:[],...l.ruleAction.canEdit?[{id:"edit-rule",label:s("conn.editRule"),onAction:()=>l.showRule(!0)}]:[],...l.canViewFlow?[{id:"view-flow",label:s("conn.viewFlow"),onAction:l.showFlow}]:[],...l.canTrace?[{id:"trace",label:s("conn.trace"),onAction:l.traceConnection}]:[],...a.source?[{id:"only-client",label:s("conn.onlyThisClient"),onAction:l.onlyClient}]:[],...l.canClose&&a.closable?[{id:"close",label:s("conn.close"),negative:!0,isPending:l.close.pending,isDisabled:l.close.disabled||!!a.closeReason,reason:a.closeReason??void 0,onAction:l.close.run}]:[]]})]}),n.jsx(ne,{items:a.fields}),n.jsx(ne,{items:[[s("ui.outbound"),n.jsx(t,{...a.outboundTag})],[s("conn.chain"),a.chain]]}),n.jsxs("div",{className:"rp-list",children:[n.jsx("span",{className:"rp-label",children:s("conn.rule")}),n.jsx(te,{...a.rule})]})]})})]}),l.notInSnapshot&&n.jsx("span",{className:"rp-label",children:s("conn.notInSnapshot")}),n.jsx(We,{dialog:l.ruleAction.dialog})]}),traffic:n.jsx(Ke,{records:l.rows,outbounds:l.outboundKeys,latency:l.latency,latencyError:l.latencyError,retryLatency:l.retryLatency,truncated:l.truncated,onSelect:l.openInList})};return n.jsxs("div",{className:"rp-page",children:[l.error&&n.jsx(c,{error:l.error,onRetry:l.retry}),n.jsx(de,{page:!0,keepMounted:!0,label:s("nav.connections"),value:l.tab,onChange:l.setTab,items:Be().map(e=>({id:e.id,label:s(e.titleKey),content:r[e.id]}))})]})}export{yn as Connections}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Coverage-VYQXivNr.js b/luci-app-honk/root/etc/honk/doona/assets/Coverage-P-BXHg4t.js similarity index 87% rename from luci-app-honk/root/etc/honk/doona/assets/Coverage-VYQXivNr.js rename to luci-app-honk/root/etc/honk/doona/assets/Coverage-P-BXHg4t.js index e6f7dfe40..88063b305 100644 --- a/luci-app-honk/root/etc/honk/doona/assets/Coverage-VYQXivNr.js +++ b/luci-app-honk/root/etc/honk/doona/assets/Coverage-P-BXHg4t.js @@ -1 +1 @@ -import{av as e,aB as l,ad as r,F as a,T as s,Z as n}from"./index-BgFj_VXE.js";import{j as o}from"./vendor-react-64fcanlc.js";const t={userspace_tcp:"flow.userspaceTcp",userspace_udp:"flow.userspaceUdp",kernel_direct:"flow.kernelDirect",kernel_block:"flow.kernelBlock",dns_intercept:"flow.dnsIntercept",kernel_bypass:"flow.kernelBypass"},c={full:"flow.full",partial:"flow.partialVisibility",none:"ui.none"};function p(a,s,n){const o=Object.entries(a.coverage).filter(([,e])=>"full"!==e),p=e(a.dropped_records),i=p?s("flow.dropped",{n:p}):null;return o.length||i?{summary:o.length?s("flow.coverageSummary",{n:o.length}):null,detail:l(n,o.map(([e,l])=>s("ui.valuePair",{label:r(t,e,s),value:r(c,l,s)}))),dropped:i}:null}function i({view:e}){const l=a();return o.jsxs("div",{className:"rp-cluster",role:"group","aria-label":l("flow.coverage"),children:[e.summary&&o.jsx(s,{text:e.detail,children:o.jsx(n,{small:!0,tone:"warn",children:e.summary})}),e.dropped&&o.jsx(n,{small:!0,tone:"warn",children:e.dropped})]})}export{i as C,p as c}; +import{aB as e,aE as l,ae as r,C as a,T as s,V as n}from"./index-CmbH0woS.js";import{j as o}from"./vendor-react-64fcanlc.js";const t={userspace_tcp:"flow.userspaceTcp",userspace_udp:"flow.userspaceUdp",kernel_direct:"flow.kernelDirect",kernel_block:"flow.kernelBlock",dns_intercept:"flow.dnsIntercept",kernel_bypass:"flow.kernelBypass"},c={full:"flow.full",partial:"flow.partialVisibility",none:"ui.none"};function p(a,s,n){const o=Object.entries(a.coverage).filter(([,e])=>"full"!==e),p=e(a.dropped_records),i=p?s("flow.dropped",{n:p}):null;return o.length||i?{summary:o.length?s("flow.coverageSummary",{n:o.length}):null,detail:l(n,o.map(([e,l])=>s("ui.valuePair",{label:r(t,e,s),value:r(c,l,s)}))),dropped:i}:null}function i({view:e}){const l=a();return o.jsxs("div",{className:"rp-cluster",role:"group","aria-label":l("flow.coverage"),children:[e.summary&&o.jsx(s,{text:e.detail,children:o.jsx(n,{small:!0,tone:"warn",children:e.summary})}),e.dropped&&o.jsx(n,{small:!0,tone:"warn",children:e.dropped})]})}export{i as C,p as c}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Delete-DA-ArqRQ.js b/luci-app-honk/root/etc/honk/doona/assets/Delete-CQeLz6oG.js similarity index 92% rename from luci-app-honk/root/etc/honk/doona/assets/Delete-DA-ArqRQ.js rename to luci-app-honk/root/etc/honk/doona/assets/Delete-CQeLz6oG.js index c640998b6..309aaf590 100644 --- a/luci-app-honk/root/etc/honk/doona/assets/Delete-DA-ArqRQ.js +++ b/luci-app-honk/root/etc/honk/doona/assets/Delete-CQeLz6oG.js @@ -1 +1 @@ -import{j as c}from"./vendor-react-64fcanlc.js";import{I as r}from"./index-BgFj_VXE.js";function l(l){return c.jsxs(r,{...l,children:[c.jsx("path",{fill:"currentColor",d:"M8.249 15.021c-.4 0-.733-.317-.748-.72l-.25-6.5c-.017-.414.307-.763.72-.779H8c.4 0 .733.317.748.72l.25 6.5c.017.414-.307.763-.72.778zM11.751 15.021h-.03c-.413-.016-.737-.365-.72-.779l.25-6.5c.015-.403.348-.72.748-.72h.03c.413.016.737.365.72.779l-.25 6.5c-.015.403-.348.72-.748.72"}),c.jsx("path",{fill:"currentColor",d:"M17 4h-3.5v-.75C13.5 2.01 12.49 1 11.25 1h-2.5C7.51 1 6.5 2.01 6.5 3.25V4H3c-.414 0-.75.336-.75.75s.336.75.75.75h.52l.422 10.342C3.99 17.052 4.98 18 6.19 18h7.62c1.211 0 2.2-.948 2.248-2.158L16.48 5.5H17c.414 0 .75-.336.75-.75S17.414 4 17 4m-9-.75c0-.413.337-.75.75-.75h2.5c.413 0 .75.337.75.75V4H8zm6.56 12.531c-.017.404-.346.719-.75.719H6.19c-.404 0-.733-.315-.75-.719L5.02 5.5h9.96z"})]})}export{l as D}; +import{j as c}from"./vendor-react-64fcanlc.js";import{I as r}from"./index-CmbH0woS.js";function l(l){return c.jsxs(r,{...l,children:[c.jsx("path",{fill:"currentColor",d:"M8.249 15.021c-.4 0-.733-.317-.748-.72l-.25-6.5c-.017-.414.307-.763.72-.779H8c.4 0 .733.317.748.72l.25 6.5c.017.414-.307.763-.72.778zM11.751 15.021h-.03c-.413-.016-.737-.365-.72-.779l.25-6.5c.015-.403.348-.72.748-.72h.03c.413.016.737.365.72.779l-.25 6.5c-.015.403-.348.72-.748.72"}),c.jsx("path",{fill:"currentColor",d:"M17 4h-3.5v-.75C13.5 2.01 12.49 1 11.25 1h-2.5C7.51 1 6.5 2.01 6.5 3.25V4H3c-.414 0-.75.336-.75.75s.336.75.75.75h.52l.422 10.342C3.99 17.052 4.98 18 6.19 18h7.62c1.211 0 2.2-.948 2.248-2.158L16.48 5.5H17c.414 0 .75-.336.75-.75S17.414 4 17 4m-9-.75c0-.413.337-.75.75-.75h2.5c.413 0 .75.337.75.75V4H8zm6.56 12.531c-.017.404-.346.719-.75.719H6.19c-.404 0-.733-.315-.75-.719L5.02 5.5h9.96z"})]})}export{l as D}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Dns-Bob4nl8K.js b/luci-app-honk/root/etc/honk/doona/assets/Dns-Bob4nl8K.js new file mode 100644 index 000000000..062e8be06 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Dns-Bob4nl8K.js @@ -0,0 +1 @@ +import{r as e,j as s}from"./vendor-react-64fcanlc.js";import{cg as a,u as t,ab as n,ae as r,as as l,am as i,ai as d,ad as c,aB as o,bT as u,C as m,at as h,W as p,cC as x,a3 as g,cE as y,X as f,Y as b,w as j,j as v,cG as w,aF as _,P as N,cM as T,co as S,cN as C,b_ as q,cJ as k,a4 as R,cK as M,bd as L,cO as F,cn as A,aU as E,az as D,A as P,K as W,cP as O,cQ as U,cR as H,M as B,D as K,aT as I,T as Q,bH as $,cS as G,c5 as J,cT as V,J as z,cU as X,aS as Y,bG as Z,V as ee,aQ as se,cV as ae,bQ as te,cL as ne}from"./index-CmbH0woS.js";import{D as re}from"./Delete-CQeLz6oG.js";import{s as le,q as ie,u as de,v as ce,C as oe,F as ue,B as me,L as he,W as pe,x as xe,D as ge}from"./activity-CiEWAlFW.js";import{q as ye,f as fe,j as be,k as je,S as ve,L as we,A as _e}from"./ActionGroup-D3mQjUsw.js";import{T as Ne}from"./Tabs-BzeNgTje.js";import{T as Te}from"./Toolbar-B9K5nAyx.js";import{D as Se}from"./Table-Cfbaho6J.js";import{T as Ce}from"./TimeCell-D0UB-mKs.js";import{$ as qe}from"./SearchList-CJ8rQxgu.js";import{c as ke,d as Re,e as Me}from"./files-Dt8K7QfP.js";import{d as Le}from"./nav-C4ZPdNvM.js";import{a as Fe,u as Ae,R as Ee,Q as De}from"./useQuickRule-C0zoMd-O.js";/* empty css */import"./_commonjsHelpers-CXUWDbkB.js";import"./Select-BcN72K3H.js";import"./Checkbox-f7Je53QZ.js";import"./Virtualizer-itu1Kg0o.js";import"./DaeCode-DEjXqvav.js";import"./daeTokens-BVtuNnWZ.js";import"./AddCircle-JwHCi_at.js";import"./SearchSelect-CuaWhoLz.js";import"./flows-BMReQznn.js";function Pe(e,s,a,t,r){return{domain:e,dip:null,sip:(r&&n(r))??null,outbound:null,matched:null,dns:{type:s,answers:Fe(a),upstream:t,query:{name:e,type:s}}}}const We=(e,s,a)=>({domain:null,dip:e,sip:null,outbound:null,matched:null,dns:{type:a,answers:[e],upstream:null,query:{name:s,type:a}}}),Oe={forced:"dns.route.forced","dns.routing":"dns.route.rules",default:"dns.route.default"};function Ue(e,s){return{fields:[[s("ui.state"),e.status],[s("ui.upstream"),e.upstream??"—"],[s("dns.routeSource"),r(Oe,e.route.source,s)],[s("dns.routeRule"),e.route.rule??"—"],[s("ui.elapsed"),l(e.elapsed_ms,s)]],answers:(e.answers??[]).map(e=>s("dns.answer",{name:e.name,type:e.type,ttl:e.ttl,data:e.data})),cacheText:s(e.cached?"dns.hit":"dns.miss"),cacheTone:e.cached?void 0:"warn"}}function He(e,s,a){return e?a instanceof u&&503===a.status?"unavailable":s?"ready":a?"error":"loading":"unlisted"}const Be=[{id:"full",label:"rule.kind.domain"},{id:"suffix",label:"rule.kind.domainSuffix"},{id:"keyword",label:"rule.kind.domainKeyword"},{id:"regex",label:"dns.matchRegex"}],Ke=e=>e.trim().toLowerCase().replace(/\.$/,"");function Ie(e,s){if(!s.trim())return()=>!0;if("regex"===e){const e=function(e){try{return new RegExp(e,"iu")}catch{return null}}(s);return e&&(s=>e.test(Ke(s)))}if("keyword"===e){const e=s.trim().toLowerCase();return s=>Ke(s).includes(e)}const a=Ke(s),t="suffix"===e&&a.startsWith("."),n=t?a.slice(1):a;return n?"full"===e?e=>Ke(e)===n:e=>{const s=Ke(e);return s.endsWith("."+n)||!t&&s===n}:null}function Qe({go:s,query:n}){const r=m(),l=h(),i=p(),d=e.useMemo(()=>new URLSearchParams(n),[n]),[c,o]=e.useState(d.get("domain")??""),[u,_]=e.useState(d.get("type")??"A"),[N,T]=e.useState(!1);x(d.get("domain"),e=>o(e??"")),x(d.get("type"),e=>_(e??"A"));const[S,C]=e.useState(null),{busy:q,error:k,run:R}=g({rethrow:!0}),M=i.data?.resources,L=e.useMemo(()=>function(e,s,a,t,n,r){const l=s?.dns_query.record_types??[],i="all"===a?l.length>0:l.includes(a);return{types:l,choices:[...l.map(e=>({id:e,label:e})),{id:"all",label:r("dns.allTypes")}],disabled:n||!s?.dns_query.available||!i||!t.trim(),reason:!s||n?null:s.dns_query.available?i?null:r("all"===a?"dns.noTypes":"dns.typeUnsupported"):r("dns.queryUnavailable"),showCache:!!s?.dns_cache.available,cards:e?.results.map(s=>({id:s.type,title:`${e.domain} ${s.type}`,...Ue(s,r),seed:Pe(e.domain,s.type,s.answers??[],s.upstream,null),answerSeeds:(s.answers??[]).map(a=>Fe([a]).length?{address:a.data,seed:We(a.data,e.domain,s.type)}:null)}))??[],tabs:Le(s).map(e=>({id:e.id,label:r(e.titleKey)}))}}(S,M,u,c,!!q,r),[S,M,u,c,q,r]),F=L.tabs.map(e=>e.id),A=d.has("domain")||d.has("device"),E=F.includes("log")?A?"log":"stats":F.includes("query")?"query":F[0]??"query",D=y(n,F,E),P=f(M,"config",{whileLoading:!1}),W=b("query"===D&&P&&f(M,"dns_query",{whileLoading:!1})),O=e.useMemo(()=>P?function(e,s){const n=[...new Set((e??[]).flatMap(e=>e.content?a(e.content).map(t):[]))];return n.length?[{id:"",label:s("dns.upstreamAuto")},...n.map(e=>({id:e,label:e}))]:[]}(W.data?.sources,r):[],[P,W.data,r]),[U,H]=e.useState(""),B=O.some(e=>e.id===U)?U:"";W.data&&U&&!B&&H("");const K=async(e={domain:c,type:u})=>{try{await R("query",async s=>{const a=await ye(l.dnsQuery,e.domain.trim(),"all"===e.type?L.types:[e.type],M?.dns_query.limits?.max_types_per_request??1,s,N?"bypass":"normal",B||void 0);return s.aborted||C(a),a})}catch{}},I=f(M,"dns_query",{whileLoading:!1})&&L.types.length>0,Q=Ae(s,{queryAgain:I?e=>{const a=L.types.includes(e.type)?e.type:"all";s("dns",j("",{tab:"query",domain:e.name.replace(/\.$/,""),type:a,run:"1"}))}:void 0}),$=d.has("run")&&M?n:null,G=e.useEffectEvent(e=>{const a=new URLSearchParams(e);s("dns",j(e,{run:null}),{replace:!0}),K({domain:a.get("domain")??"",type:a.get("type")??"A"})});return e.useEffect(()=>{null!==$&&G($)},[$]),{...L,rule:{...Q,label:e=>r(f(M,"dns_rules",{whileLoading:!1})?"dns.addRequestRuleFor":"dns.addRoutingRuleFor",{domain:e})},domain:c,setDomain:o,type:u,setType:_,bypassCache:N,setBypassCache:T,upstreams:O,upstream:B,setUpstream:H,pending:"query"===q,queryError:k,submit:()=>{K()},setTab:e=>s("dns",w(n,e,M&&!A?E:null)),tab:D,filterDomain:d.get("domain")??"",filterDevice:d.get("device")??"",cacheHref:F.includes("cache")?v("dns",{tab:"cache"}):null,logHref:(e,s)=>v("dns",{tab:"log",[e]:s}),logLinks:[...f(M,"dns_rules",{whileLoading:!1})?[{id:"rules",label:r("rule.dnsTitle"),onAction:()=>s("rules","tab=dns")}]:[],...M?.runtime_settings.available?[{id:"recording",label:r("ui.recordingSettings"),onAction:()=>s("settings","card=runtime")}]:[]],logEnabled:M?.dns_log.available,viewCache:()=>s("dns",j(n,{tab:"cache",domain:S?.domain??""})),clearCacheFilter:()=>s("dns",j(n,{tab:"cache",domain:null}))}}function $e(s){const a=m(),t=_[N()],[n,r]=e.useState(!1),l=be(!C(),n),{contains:i}=qe({sensitivity:"base"}),c=e.useMemo(()=>function(e,s,a,t,n,r,l){const i=s?.dns_cache,c=(e?.entries??[]).filter(e=>!a||l(e.domain,a));return{fields:[[r("dns.entries"),e?d(e.total,n):"—"]],coverage:e?["positive","negative","persistent"].filter(s=>!e.coverage[s]).map(e=>({id:e,text:"persistent"===e?r("dns.memoryOnly"):r("ui.valuePair",{label:r("positive"===e?"dns.positive":"dns.negative"),value:r("dns.notCovered")})})):[],deleteBy:{name:!!i?.available&&!0===i.delete_name,entry:!!i?.available&&!0===i.delete_entry},filterText:a?r("dns.cacheFilter",{domain:a}):"",confirmationText:e?r("dns.flushConfirm",{n:e.total}):r("dns.flushConfirmAll"),flushDisabled:!!t||!s?.dns_cache.available||!s.dns_cache.flush,flushReason:!i||t||i.available&&i.flush?null:r("dns.flushUnsupported"),deleteReason:!(i&&!t&&c.length>0)||i.available&&i.delete_entry?null:r("dns.deleteUnsupported"),empty:r(s?.dns_cache.available&&s.dns_cache.read?"dns.empty":"dns.cacheUnavailable"),rows:c.map(e=>({id:e.entry_id,domain:e.domain,type:e.type,status:e.status,expiresAt:e.expires_at,staleUntil:e.stale_until,deleteLabel:r("dns.deleteEntry",{domain:e.domain,type:e.type}),seed:Pe(e.domain,e.type,[],null,null),pending:t===e.entry_id,disabled:!!t||!s?.dns_cache.available||!s.dns_cache.delete_entry}))}}(l.cache.data,l.capabilities.data?.resources,s,l.busy,t,a,i),[l.cache.data,l.capabilities.data,s,l.busy,t,a,i]),[o,u]=e.useState("suffix"),[h,p]=e.useState(s),[g,y]=e.useState("all");x(s,p);const f=[...new Set([...l.capabilities.data?.resources.dns_query.record_types??[],...(l.cache.data?.entries??[]).map(e=>e.type)])],b=e.useMemo(()=>({kind:o,text:h}),[o,h]),j=T(b,250),v=j!==b,w=l.cache.data?.entries,S="full"===o&&!!h.trim()&&c.deleteBy.name,{matches:q,error:k,pending:F}=function(s,a,t){const n=e.useMemo(()=>(s??[]).filter(e=>"all"===t||e.type===t),[s,t]),r="regex"===a.kind&&!!a.text.trim(),[l,i]=e.useState(null);e.useEffect(()=>{if(!r)return;const e=new Worker(new URL(""+new URL("match.worker-B2aIccpg.js",import.meta.url).href,import.meta.url),{type:"module"});let s,t=!0;const l=(r,l)=>{t&&(t=!1,clearTimeout(s),e.terminate(),i({candidates:n,pattern:a,matches:r?.map(e=>n[e])??[],error:l??(null===r?"dns.invalidRegex":void 0)}))};return e.onmessage=r=>{t&&("ready"===r.data?(s=window.setTimeout(()=>l([],"dns.regexTimeout"),1e3),e.postMessage({text:a.text,names:n.map(e=>e.domain)})):l(r.data))},e.onerror=e=>{e.preventDefault(),l([],"dns.matchFailed")},()=>{t=!1,clearTimeout(s),e.terminate()}},[r,n,a]);const d=e.useMemo(()=>{if(r)return null;const e=Ie(a.kind,a.text);return{matches:e?n.filter(s=>e(s.domain)):[],error:e?void 0:"dns.invalidName"}},[r,n,a]);if(d)return{...d,pending:!1};const c=l?.candidates===n&&l.pattern===a;return{matches:c?l.matches:[],error:c?l.error:void 0,pending:!c}}(w,j,g),{remove:A}=l,E=e.useCallback(e=>{A(e).then(e=>e&&R("positive",a("dns.deleted",{n:e.deleted})),e=>R("negative",a("dns.deleteFailed"),M(e,a)))},[A,a]);return{...c,includeExpired:n,setIncludeExpired:r,matchKind:o,matchText:h,matchType:g,setMatchType:y,setMatchKind:u,setMatchText:e=>{const s=function(e,s){return s.startsWith("*.")?{kind:"suffix",text:s.slice(2)}:{kind:e,text:s}}(o,e);u(s.kind),p(s.text)},matchKinds:Be.map(e=>({id:e.id,label:a(e.label)})),matchTypes:[{id:"all",label:a("dns.allTypes")},...f.map(e=>({id:e,label:e}))],matchError:k?a(k):void 0,matchReason:c.deleteBy.entry||!c.deleteBy.name||S||l.busy?null:a("dns.matchNameOnly"),matchPending:"delete-match"===l.busy,matchDisabled:!!l.busy||v||F||!!k||!S&&!q.length||!h.trim()&&"all"===g||!(c.deleteBy.entry||S),matchConfirmation:S?a("dns.deleteNameConfirm",{name:h.trim(),type:"all"===g?a("dns.allTypes"):g}):a("dns.deleteMatchingConfirm",{n:q.length}),matchListed:q.slice(0,100),matchMore:q.length>100?a("dns.matchMore",{n:q.length-100}):null,removeMatching:async()=>{try{if(S){const e=await l.removeName({name:h.trim(),type:"all"===g?void 0:[g]});return void(e&&R("positive",a("dns.deleted",{n:e.deleted})))}const e=await l.removeMany(q.map(e=>e.entry_id));if(!e)return;e.failed?e.deleted?R("negative",a("dns.deletePartial",{deleted:e.deleted,n:e.failed})):R("negative",a("dns.deleteAllFailed",{n:e.failed})):R("positive",a("dns.deleted",{n:e.deleted}))}catch(e){return a("dns.deleteMatchingFailed",{error:L(e,a)})}},error:l.cache.error,retry:l.cache.refetch,loading:(l.cache.loading||l.capabilities.loading)&&!l.cache.data,flushPending:"flush"===l.busy,remove:E,flush:async()=>{try{const e=await l.flush();e&&R("positive",a("dns.flushed",{matched:e.matched,deleted:e.deleted}))}catch(e){return a("dns.flushFailed",{error:L(e,a)})}},abortFlush:()=>{l.cancel(),l.cache.refetch()}}}function Ge(s){const a=m(),t=_[N()],[n,r]=E(),[l,i]=e.useState(!1),u=je(s,!r&&l);u.data&&!l&&i(!0);const h=e.useMemo(()=>function(e,s,a){if(!e)return null;const{usage:t,coverage:n}=e,r=e=>{const a=o(e);return null===a?"—":d(a,s)},l=t?.entry_capacity??null,i=t&&null!==l?c(t.entries,l):null;return{note:t?null===l?a("dns.chart.usageFacts",{entries:r(t.entries)}):void 0:a("dns.chart.cacheNote",{n:e.total}),usage:t&&null!==l&&null!==i?{meter:o(l)?{value:i,valueLabel:i>0&&i<.5?"<"+a("ui.percent",{n:1}):a("ui.percent",{n:Math.round(i)})}:null,facts:[{label:a("dns.chart.entries"),value:r(t.entries)},{label:a("dns.chart.capacity"),value:r(l)}]}:null,coverage:a("dns.chart.coverage",{kinds:[n.positive&&a("dns.chart.positive"),n.negative&&a("dns.chart.negative")].filter(Boolean).join(a("ui.listSeparator")),persistent:a(n.persistent?"dns.chart.persistent":"dns.chart.memoryOnly")})}}(u.data,t,a),[u.data,t,a]);return{ref:n,card:h,state:He(s,!!h,u.error),error:u.error,retry:u.refetch}}function Je(s,a,t){const n=m(),r=_[N()],[d,c]=e.useState(a);x(a,c);const[o,y]=e.useState("all"),[f,b]=e.useState(t);x(t,b);const j=h(),v=p(),w=T(f),M=S(w),L=""!==w.trim()&&!M,[E,D]=e.useState(M);L||M===E||D(M);const P={name:T(d),type:o,src:L?E:M},W=JSON.stringify(P),O=fe(P,!0===s,!C()),[U,H]=e.useState(null),[B,K]=e.useState(!1),I=g({scope:W});x(W,()=>H(null));const{data:Q,newerWaiting:$}=e.useMemo(()=>function(e,s){const a=s&&new Set(s.records.map(e=>e.id));return{data:s??e,newerWaiting:!!a&&!!e?.records.some(e=>!a.has(e.id))}}(O.data,U),[O.data,U]),G=()=>{I.run("older",async e=>{if(!Q?.next_cursor)return;let s;H(Q);try{s=await j.dnsLog({name:P.name.trim()||void 0,type:"all"===o?void 0:o,src:P.src,cursor:Q.next_cursor,limit:Q.limit},e)}catch(a){if(!(a instanceof u)||e.aborted)throw a;const s=F(a);if(!(410===a.status&&"snapshot_expired"===a.code||400===a.status&&"invalid_request"===a.code)&&!s)throw a;return s&&await A(a.retryAfter,e),H(null),O.refetch(),void R("info",n("dns.olderExpired"))}e.aborted||H(function(e,s){const a=new Set(e.records.map(e=>e.id));return{...e,records:[...e.records,...s.records.filter(e=>!a.has(e.id))],next_cursor:s.next_cursor}}(Q,s))})},J=()=>{I.cancel(),H(null);const e=O.refetch();e&&(K(!0),e.finally(()=>K(!1)))},[V,z]=e.useState(null),X=q(k),Y=v.data?.resources.dns_query.record_types,Z=e.useMemo(()=>function(e,s,a,t=[]){const n=e?.records??[];return{choices:[{id:"all",label:a("dns.allTypes")},...[...new Set([...t,...n.map(e=>e.question.type)])].map(e=>({id:e,label:e}))],total:e?a("dns.logTotal",{n:e.total}):"",totalHelp:e?{title:a("dns.logTotal",{n:e.total}),text:a("dns.logTotalHelp")}:null,loaded:e?.next_cursor?a("dns.logLoaded",{n:n.length}):"",empty:a(void 0===s?"ui.loading":s?"dns.logEmpty":"dns.logUnavailable"),rows:n.map(e=>({id:e.id,observedAt:e.observed_at,name:e.question.name,type:e.question.type,seed:Pe(e.question.name,e.question.type,e.answers,e.upstream,e.src),source:e.src??"—",resultError:"NOERROR"!==e.status,result:"NOERROR"!==e.status?e.status:e.answers.map(e=>e.data).join(", ")||"—",cached:e.cached,upstream:e.cached?a("dns.hit"):e.upstream??"—",elapsed:l(e.elapsed_ms,a)}))}}(Q,s,n,Y),[Q,s,n,Y]),ee=e.useMemo(()=>function(e,s,a,t){const n=e?.records.find(e=>e.id===s);if(!n)return null;const r=Ue(n,t);return{id:n.id,title:n.question.name,answers:r.answers,fields:[[t("ui.type"),n.question.type],[t("ui.device"),n.src??"—"],r.fields[0],[t("ui.cache"),r.cacheText],...r.fields.slice(1),[t("ui.time"),i(n.observed_at,a)]]}}(Q,V,r,n),[Q,V,r,n]);return{...Z,detail:ee,detailTitle:ee?.title??"",name:d,newerWaiting:$,setName:c,type:o,setType:y,src:f,setSrc:b,srcError:L?n("ui.invalidIp"):void 0,selected:ee?V:null,setSelected:z,wide:X,error:I.error??O.error,loading:O.loading&&!Q,hasOlder:!!Q?.next_cursor,loadingOlder:!!I.busy,loadOlder:G,refreshing:B,refresh:J,retry:I.error?G:J,export:()=>{return Re(Me("dns-log","csv"),(e=Q?.records??[],[ke(["id","observed_at","src","name","type","status","cached","upstream","route_source","route_rule","elapsed_ms","answers"]),...e.map(e=>ke([e.id,e.observed_at,e.src,e.question.name,e.question.type,e.status,e.cached?"true":"false",e.upstream,e.route.source,e.route.rule,e.elapsed_ms,e.answers.map(e=>e.data).join(" ")]))].join("\n")+"\n"),"text/csv;charset=utf-8");var e}}}const Ve={cached:"dns.outcome.cached",answered:"dns.outcome.answered",nxdomain:"dns.outcome.nxdomain",failed:"dns.outcome.failed"};function ze({enabled:a,links:t}){const n=m(),{log:r,cacheListed:l,configHref:i}=function(s){const a=fe({},!0===s,!C()),t=p().data?.resources,n=f(t,"config",{whileLoading:!1}),r=b(!0===s&&n),l=r.data?.sources,i=e.useMemo(()=>n&&l?le(l,"dns"):null,[n,l]);return{log:a,cacheListed:f(t,"dns_cache",{whileLoading:!1})&&!0===t?.dns_cache.read,configHref:i}}(a);if(!1===a)return s.jsx(D,{children:n("dns.logUnavailable")});if(void 0===a)return null;const d=r.error,c=r.data?null:d?s.jsx(D,{children:n("dns.chart.noLog")}):s.jsx(P,{}),o=d?s.jsx(W,{error:d,onRetry:r.refetch}):ie(r.data,r.limit)?s.jsx("p",{className:"rp-note",children:n("dns.chart.shortPage",{n:r.data.records.length,limit:r.limit})}):null;return s.jsx(Ye,{records:r.data?.records??Xe,pending:c,notice:o,cacheListed:l,links:{...t,config:i}})}const Xe=[];function Ye({records:a,pending:t,notice:n,cacheListed:r,links:i}){const d=m(),c=de(),o=_[N()],u=e.useMemo(()=>ce(a,o),[a,o]),h={cached:c.positive,answered:c.cat[2],nxdomain:c.notice,failed:c.negative},p=e=>d("ui.percent",{n:null===e?0:Math.round(100*e)}),x=(e,s)=>{const a=s?e/s:0;return e>0&&a<.005?"<"+d("ui.percent",{n:1}):e.995?">"+d("ui.percent",{n:99}):p(a)},g=e=>({id:e.id,value:e.value,color:h[e.outcome],lines:[e.name,l(e.value,d),d(Ve[e.outcome])]}),y=t??(u.total<5?s.jsx(D,{children:d("dns.chart.tooFew")}):null),f=[{label:d("dns.chart.median"),value:l(u.typical,d),icon:s.jsx(O,{}),tint:"c1"},{label:d("dns.chart.p95"),value:l(u.slowest,d),icon:s.jsx(oe,{}),tint:"c4"},{label:d("dns.chart.cacheRate"),value:p(u.cacheRate),icon:s.jsx(U,{}),tint:"c2"},{label:d("dns.chart.failureRate"),value:p(u.failureRate),icon:s.jsx(H,{}),tint:"c5",tone:u.counts.failed?"negative":void 0}];return s.jsxs("div",{className:"rp-chart-page",children:[n,!y&&s.jsx(ue,{facts:f}),s.jsxs("div",{className:"rp-g21",children:[s.jsx(B,{title:d("dns.chart.speed",{n:u.samples.length}),note:y?void 0:d("dns.chart.sample",{n:u.total,uncached:u.uncached,upstream:u.samples.length}),aside:i.config&&s.jsx(K,{appearance:"link",href:i.config,children:d("dns.openConfig")}),children:y??s.jsxs(s.Fragment,{children:[s.jsx(me,{label:d("dns.chart.speed",{n:u.samples.length}),points:u.samples.map(g),marks:null!==u.typical&&null!==u.slowest?[{value:u.typical,label:d("dns.chart.typical",{value:l(u.typical,d)})},{value:u.slowest,label:d("dns.chart.slowest",{value:l(u.slowest,d)})}]:[],rows:u.upstreams.map(e=>({id:e.upstream,label:e.upstream,detail:d("dns.chart.upstream",{n:e.samples.length,median:l(e.median,d)}),points:e.samples.map(g),mark:e.median})),fmt:e=>l(e,d)}),s.jsxs("div",{className:"rp-legend",children:[["answered","nxdomain","failed"].map(e=>s.jsx(he,{swatch:h[e],label:d(Ve[e])},e)),s.jsx(he,{swatch:s.jsx("i",{className:"rp-median-key","aria-hidden":"true"}),label:d("dns.chart.medianKey")})]})]})}),s.jsx(B,{title:d("dns.chart.outcomes"),children:y??s.jsx(pe,{label:d("dns.chart.outcomes"),shares:xe.map(e=>({id:e,label:d(Ve[e]),count:u.counts[e],color:h[e],text:d("dns.chart.share",{n:u.counts[e],share:x(u.counts[e],u.total)})}))})})]}),s.jsxs("div",{className:"rp-g21",children:[s.jsx(es,{analysis:u,standIn:y,logHref:i.log}),s.jsx(Ze,{listed:r,href:i.cache})]})]})}function Ze({listed:e,href:a}){const t=m(),{ref:n,...r}=Ge(e);return s.jsx(B,{ref:n,title:t("dns.chart.cache"),note:"ready"===r.state?r.card?.note:void 0,aside:e&&a&&s.jsx(K,{appearance:"link",href:a,children:t("dns.viewCache")}),children:"unlisted"===r.state?s.jsx(D,{children:t("dns.cacheUnavailable")}):"unavailable"===r.state?s.jsx(D,{children:t("dns.cacheBusy")}):"error"===r.state?s.jsx(W,{error:r.error,onRetry:r.retry}):r.card?s.jsxs(s.Fragment,{children:[r.card.usage&&s.jsxs("div",{className:"rp-form",children:[r.card.usage.meter&&s.jsx($,{label:t("dns.chart.usage"),...r.card.usage.meter}),s.jsx(ue,{facts:r.card.usage.facts})]}),s.jsx("p",{className:"rp-note",children:r.card.coverage})]}):s.jsx(P,{})})}function es({analysis:a,standIn:t,logHref:n}){const r=m(),l=de(),[i,d]=e.useState("device"),c="device"===i?a.devices:a.domains,o=c.top[0]?.count??1;return s.jsx(B,{title:r("dns.chart.ranking"),aside:!t&&s.jsx(ve,{label:r("dns.chart.ranking"),value:i,onChange:d,items:[["device",r("dns.chart.byDevice")],["domain",r("dns.chart.byDomain")]]}),children:t??s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"rp-list",children:c.top.map(e=>s.jsx(I,{label:null===e.key?r("dns.chart.resolver"):s.jsx(K,{appearance:"link",href:n("device"===i?"device":"domain",e.key),children:s.jsx(Q,{children:e.key})}),value:r("dns.chart.count",{n:e.count}),pct:e.count/o*100,color:"device"===i?l.cat[0]:l.cat[3]},e.key??""))}),c.rest>0&&s.jsx("p",{className:"rp-note",children:r("dns.chart.rest",{n:c.rest})})]})})}function ss(e){const a=m(),t=Qe(e),n=s.jsxs(s.Fragment,{children:[t.queryError&&s.jsx(W,{error:t.queryError,onRetry:t.submit,message:e=>a("dns.queryFailed",{error:e})}),s.jsx("form",{className:X(),onSubmit:e=>{e.preventDefault(),t.submit()},children:s.jsx(G,{reason:t.reason,children:s.jsxs(Te,{children:[s.jsx(J,{side:!0,label:a("ui.domain"),value:t.domain,onChange:t.setDomain,width:280,placeholder:"example.com"}),s.jsx(we,{label:a("ui.type"),side:!0,value:t.type,onChange:t.setType,items:t.choices}),t.upstreams.length>0&&s.jsx(we,{label:a("ui.upstream"),side:!0,value:t.upstream,onChange:t.setUpstream,items:t.upstreams}),s.jsx(V,{isSelected:t.bypassCache,onChange:t.setBypassCache,children:a("dns.bypassCache")}),s.jsx(z,{accent:!0,type:"submit",isPending:t.pending,isDisabled:t.disabled,children:a("dns.query")})]})})}),t.cards.length>0&&s.jsx("div",{className:"rp-col",children:t.cards.map(e=>s.jsxs(B,{className:"rp-col",children:[s.jsxs("div",{className:"rp-row",children:[s.jsxs("div",{className:"rp-cluster",children:[s.jsx("h2",{className:"rp-h3",children:e.title}),s.jsx(Y,{tone:e.cacheTone,children:e.cacheText})]}),s.jsxs("div",{className:"rp-cluster",children:[t.rule.canAdd(e.seed)&&s.jsx(z,{quiet:!0,small:!0,onPress:()=>t.rule.open(e.seed),children:a("rule.add")}),t.showCache&&s.jsx(z,{quiet:!0,small:!0,onPress:t.viewCache,children:a("dns.viewCache")})]})]}),s.jsx(Z,{inline:!0,items:e.fields}),e.answers.length?s.jsx("div",{className:"rp-list",children:e.answers.map((n,r)=>{const l=e.answerSeeds[r];return s.jsxs("div",{className:"rp-cluster",children:[s.jsx("div",{className:"rp-code",children:n}),l&&t.rule.canAdd(l.seed)&&s.jsx(z,{quiet:!0,small:!0,label:a("dns.addRuleFor",{value:l.address}),onPress:()=>t.rule.open(l.seed),children:a("rule.add")})]},r)})}):s.jsx(D,{children:a("dns.noAnswers")})]},e.id))})]}),r={stats:s.jsx(ze,{enabled:t.logEnabled,links:{cache:t.cacheHref,log:t.logHref}}),query:n,cache:s.jsx(as,{domain:t.filterDomain,clearFilter:t.clearCacheFilter,rule:t.rule}),log:s.jsx(ts,{enabled:t.logEnabled,initialName:t.filterDomain,initialSrc:t.filterDevice,links:t.logLinks,rule:t.rule})};return s.jsxs("div",{className:"rp-page",children:[s.jsx(Ne,{page:!0,keepMounted:!0,label:a("nav.dns"),items:t.tabs.map(e=>({...e,content:r[e.id]})),value:t.tab,onChange:t.setTab}),s.jsx(Ee,{dialog:t.rule.dialog})]})}function as({domain:a,clearFilter:t,rule:n}){const r=m(),l=$e(a),{remove:i}=l,d=e.useMemo(()=>[{id:"q",label:r("ui.domain"),text:"wrap",minWidth:320,isRowHeader:!0,render:e=>s.jsx("span",{className:"rp-code",children:e.domain})},{id:"t",label:r("ui.type"),minWidth:88,grow:0,drop:3,render:e=>e.type},{id:"s",label:r("ui.state"),minWidth:128,grow:0,render:e=>e.status},{id:"e",label:r("dns.expires"),minWidth:128,drop:2,render:e=>s.jsx(Ce,{at:e.expiresAt})},{id:"st",label:r("dns.staleUntil"),minWidth:128,drop:1,render:e=>s.jsx(Ce,{at:e.staleUntil})},{id:"a",actions:!0,label:r("ui.actions"),minWidth:104,grow:0,render:e=>s.jsxs("div",{className:"rp-cluster nowrap",children:[s.jsx(De,{label:n.label(e.domain),disabled:!n.canAdd(e.seed),onPress:()=>n.open(e.seed)}),s.jsx(z,{quiet:!0,icon:!0,small:!0,label:e.deleteLabel,isPending:e.pending,isDisabled:e.disabled,onPress:()=>i(e.id),children:s.jsx(re,{})})]})}],[r,i,n]);return s.jsxs(s.Fragment,{children:[l.error&&s.jsx(W,{error:l.error,onRetry:l.retry}),s.jsxs(Te,{page:!0,className:"top",children:[s.jsx(Z,{row:!0,items:l.fields}),l.coverage.map(e=>s.jsx(Y,{tone:"warn",children:e.text},e.id)),l.filterText&&s.jsx(z,{onPress:t,children:l.filterText}),s.jsx(V,{isSelected:l.includeExpired,onChange:l.setIncludeExpired,children:r("dns.includeExpired")}),s.jsx("span",{className:"rp-grow"}),s.jsx("div",{className:"rp-col",children:s.jsx(G,{reason:l.flushReason,children:s.jsx(ne,{label:r("dns.flushAll"),confirmationText:l.confirmationText,isPending:l.flushPending,isDisabled:l.flushPending||l.flushDisabled,onConfirm:l.flush,onAbort:l.abortFlush})})})]}),(l.deleteBy.name||l.deleteBy.entry)&&s.jsx(G,{reason:l.matchReason,children:s.jsxs(Te,{page:!0,children:[s.jsx(we,{side:!0,label:r("rule.kind"),value:l.matchKind,onChange:e=>l.setMatchKind(e),items:l.matchKinds}),s.jsx(J,{side:!0,label:r("dns.pattern"),value:l.matchText,onChange:l.setMatchText,error:l.matchError,help:"regex"===l.matchKind?{title:r("dns.pattern"),text:r("dns.regexHelp")}:void 0,width:280,placeholder:"example.com"}),s.jsx(we,{side:!0,label:r("ui.type"),value:l.matchType,onChange:l.setMatchType,items:l.matchTypes}),s.jsx(ne,{label:r("dns.deleteMatching"),confirmationText:l.matchConfirmation,details:s.jsxs("ul",{className:"rp-impact",children:[l.matchListed.map(e=>s.jsx("li",{children:s.jsxs("span",{className:"rp-cluster nowrap",children:[s.jsx(Q,{className:"rp-code",children:e.domain}),s.jsx("span",{className:"rp-note",children:e.type})]})},e.entry_id)),l.matchMore&&s.jsx("li",{className:"rp-note",children:l.matchMore})]}),isPending:l.matchPending,isDisabled:l.matchDisabled,onConfirm:l.removeMatching,onAbort:l.abortFlush})]})}),s.jsx(G,{reason:l.deleteReason,children:s.jsx(Se,{label:r("ui.cache"),height:442,fit:!0,rows:l.rows,loading:l.loading,empty:l.empty,cols:d})})]})}function ts({enabled:a,initialName:t,initialSrc:n,links:r,rule:l}){const i=m(),d=Je(a,t,n),c=e.useMemo(()=>[{id:"t",label:i("ui.time"),minWidth:140,grow:0,render:e=>s.jsx(Ce,{at:e.observedAt})},{id:"q",label:i("ui.domain"),minWidth:200,grow:2,isRowHeader:!0,render:e=>s.jsx(Q,{children:e.name})},{id:"ty",label:i("ui.type"),minWidth:88,grow:0,drop:3,render:e=>e.type},{id:"s",label:i("ui.device"),minWidth:128,drop:2,render:e=>s.jsx(Q,{className:"rp-code",children:e.source})},{id:"r",label:i("dns.result"),minWidth:160,grow:2,render:e=>e.resultError?s.jsx(ee,{small:!0,tone:"err",children:e.result}):s.jsx(Q,{className:"rp-code",children:e.result})},{id:"u",label:i("ui.upstream"),minWidth:128,drop:1,render:e=>e.cached?s.jsx(ee,{small:!0,tone:"ok",children:e.upstream}):s.jsx(Q,{children:e.upstream})},{id:"e",label:i("ui.elapsed"),minWidth:88,grow:0,drop:4,render:e=>e.elapsed},{id:"a",actions:!0,label:i("ui.actions"),minWidth:88,grow:0,render:e=>s.jsx(De,{label:l.label(e.name),disabled:!l.canAdd(e.seed),onPress:()=>l.open(e.seed)})}],[i,l]);return s.jsxs(s.Fragment,{children:[s.jsxs(Te,{page:!0,children:[s.jsx(J,{search:!0,label:i("ui.domain"),value:d.name,onChange:d.setName,placeholder:i("dns.logFilterHint"),width:240}),s.jsx(we,{label:i("ui.type"),side:!0,value:d.type,onChange:d.setType,items:d.choices}),s.jsx(J,{search:!0,label:i("ui.device"),value:d.src,onChange:d.setSrc,error:d.srcError,placeholder:"10.0.0.12",width:160}),d.total&&s.jsx(se,{help:d.totalHelp,children:s.jsx("span",{className:"rp-label",children:d.total})}),d.loaded&&s.jsx("span",{className:"rp-label",children:d.loaded}),s.jsx("span",{className:"rp-grow"}),s.jsx(_e,{actions:[{id:"refresh",label:i("ui.refresh"),icon:s.jsx(ae,{className:"rp-spin-on-press"}),isPending:d.refreshing,onAction:d.refresh},{id:"export",label:i("dns.exportLog"),icon:s.jsx(ge,{}),isDisabled:!d.rows.length,onAction:d.export},...r,...d.hasOlder?[{id:"older",label:i("dns.loadOlder"),isPending:d.loadingOlder,onAction:d.loadOlder}]:[]]})]}),d.error&&s.jsx(W,{error:d.error,onRetry:d.retry}),d.newerWaiting&&s.jsx("p",{className:"rp-note",children:i("dns.newerWaiting")}),s.jsxs("div",{className:"rp-with-panel","data-open":d.detail?"":void 0,children:[s.jsx(Se,{label:i("dns.log"),rowDetail:!0,height:520,rows:d.rows,selected:d.selected,onSelect:d.setSelected,selectOnFocus:d.wide,loading:d.loading,empty:d.empty,cols:c}),s.jsx(te,{open:!!d.detail,title:d.detailTitle,onClose:()=>d.setSelected(null),children:d.detail&&s.jsxs(s.Fragment,{children:[s.jsx(Z,{inline:!0,items:d.detail.fields}),d.detail.answers.length?s.jsx("div",{className:"rp-list",children:d.detail.answers.map((e,a)=>s.jsx("div",{className:"rp-code",children:e},a))}):s.jsx(D,{children:i("dns.noAnswers")})]})})]}),d.hasOlder&&s.jsx("div",{className:"rp-narrow-only",children:s.jsx("div",{className:"rp-cluster",children:s.jsx(z,{small:!0,isPending:d.loadingOlder,onPress:d.loadOlder,children:i("dns.loadOlder")})})})]})}export{ss as Dns}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Dns-muAKZqBa.js b/luci-app-honk/root/etc/honk/doona/assets/Dns-muAKZqBa.js deleted file mode 100644 index 3c1300c4b..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Dns-muAKZqBa.js +++ /dev/null @@ -1 +0,0 @@ -import{r as e,j as s}from"./vendor-react-64fcanlc.js";import{b$ as a,u as t,aa as n,ad as r,ag as l,ac as i,bD as d,av as o,F as c,ap as u,$ as m,da as h,a7 as p,dc as g,a0 as x,a1 as y,w as f,j as b,de as j,aC as v,V as w,dk as _,c7 as N,dl as T,bK as S,dh as q,a8 as C,di as k,b4 as R,c6 as M,aR as F,au as A,D,P as L,dm as P,dn as W,dp as E,Q as O,G as U,aQ as H,T as B,dq as K,bQ as Q,dr as $,O as I,ds as V,aP as G,bs as z,Z as X,aN as Y,dt as Z,bB as J,dj as ee}from"./index-BgFj_VXE.js";import{A as se}from"./AddCircle-prR7q573.js";import{D as ae}from"./Delete-DA-ArqRQ.js";import{Q as te,R as ne,z as re,T as le,V as ie,F as de,C as oe,L as ce,X as ue,Y as me,D as he}from"./activity-D06xJ7oH.js";import{q as pe,f as ge,j as xe,k as ye,S as fe,L as be,A as je}from"./logs-BxISynQ4.js";import{T as ve}from"./Tabs-CD2lZase.js";import{T as we}from"./Toolbar-CIBfeuEz.js";import{D as _e}from"./Table-Dprh3Btz.js";import{T as Ne}from"./TimeCell-B4WLB8Ou.js";import{$ as Te}from"./SearchList-Bhc2_bS4.js";import{c as Se,d as qe,e as Ce}from"./files-Dt8K7QfP.js";import{c as ke,l as Re}from"./format-s2EANuUb.js";import{d as Me}from"./nav-KYKfR_0p.js";import{a as Fe,u as Ae,R as De}from"./useQuickRule-fWQicp9K.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Select-CkiGmyVC.js";import"./useGridSelectionCheckbox-BxnCShqN.js";import"./Virtualizer-CZl-q5wo.js";import"./DaeCode-DEjXqvav.js";import"./daeTokens-BVtuNnWZ.js";import"./SearchSelect-CO6FsBaz.js";import"./flows-xKlsDqlH.js";function Le(e,s,a,t,r){return{domain:e,dip:null,sip:(r&&n(r))??null,outbound:null,matched:null,dns:{type:s,answers:Fe(a),upstream:t,query:{name:e,type:s}}}}const Pe=(e,s,a)=>({domain:null,dip:e,sip:null,outbound:null,matched:null,dns:{type:a,answers:[e],upstream:null,query:{name:s,type:a}}}),We={forced:"dns.route.forced","dns.routing":"dns.route.rules",default:"dns.route.default"};function Ee(e,s){return{fields:[[s("ui.state"),e.status],[s("ui.upstream"),e.upstream??"—"],[s("dns.routeSource"),r(We,e.route.source,s)],[s("dns.routeRule"),e.route.rule??"—"],[s("ui.elapsed"),ke(e.elapsed_ms,s)]],answers:(e.answers??[]).map(e=>s("dns.answer",{name:e.name,type:e.type,ttl:e.ttl,data:e.data})),cacheText:s(e.cached?"dns.hit":"dns.miss"),cacheTone:e.cached?void 0:"warn"}}function Oe(e,s,a){return e?a instanceof d&&503===a.status?"unavailable":s?"ready":a?"error":"loading":"unlisted"}const Ue=[{id:"full",label:"rule.kind.domain"},{id:"suffix",label:"rule.kind.domainSuffix"},{id:"keyword",label:"rule.kind.domainKeyword"},{id:"regex",label:"dns.matchRegex"}],He=e=>e.trim().toLowerCase().replace(/\.$/,"");function Be(e,s){if(!s.trim())return()=>!0;if("regex"===e){const e=function(e){try{return new RegExp(e,"iu")}catch{return null}}(s);return e&&(s=>e.test(He(s)))}if("keyword"===e){const e=s.trim().toLowerCase();return s=>He(s).includes(e)}const a=He(s),t="suffix"===e&&a.startsWith("."),n=t?a.slice(1):a;return n?"full"===e?e=>He(e)===n:e=>{const s=He(e);return s.endsWith("."+n)||!t&&s===n}:null}function Ke({go:s,query:n}){const r=c(),l=u(),i=m(),d=e.useMemo(()=>new URLSearchParams(n),[n]),[o,v]=e.useState(d.get("domain")??""),[w,_]=e.useState(d.get("type")??"A"),[N,T]=e.useState(!1);h(d.get("domain"),e=>v(e??"")),h(d.get("type"),e=>_(e??"A"));const[S,q]=e.useState(null),{busy:C,error:k,run:R}=p({rethrow:!0}),M=i.data?.resources,F=e.useMemo(()=>function(e,s,a,t,n,r){const l=s?.dns_query.record_types??[],i="all"===a?l.length>0:l.includes(a);return{types:l,choices:[...l.map(e=>({id:e,label:e})),{id:"all",label:r("dns.allTypes")}],disabled:n||!s?.dns_query.available||!i||!t.trim(),reason:!s||n?null:s.dns_query.available?i?null:r("all"===a?"dns.noTypes":"dns.typeUnsupported"):r("dns.queryUnavailable"),showCache:!!s?.dns_cache.available,cards:e?.results.map(s=>({id:s.type,title:`${e.domain} ${s.type}`,...Ee(s,r),seed:Le(e.domain,s.type,s.answers??[],s.upstream,null),answerSeeds:(s.answers??[]).map(a=>Fe([a]).length?{address:a.data,seed:Pe(a.data,e.domain,s.type)}:null)}))??[],tabs:Me(s).map(e=>({id:e.id,label:r(e.titleKey)}))}}(S,M,w,o,!!C,r),[S,M,w,o,C,r]),A=F.tabs.map(e=>e.id),D=d.has("domain")||d.has("device"),L=A.includes("log")?D?"log":"stats":A.includes("query")?"query":A[0]??"query",P=g(n,A,L),W=x(M,"config",{whileLoading:!1}),E=y("query"===P&&W&&x(M,"dns_query",{whileLoading:!1})),O=e.useMemo(()=>W?function(e,s){const n=[...new Set((e??[]).flatMap(e=>e.content?a(e.content).map(t):[]))];return n.length?[{id:"",label:s("dns.upstreamAuto")},...n.map(e=>({id:e,label:e}))]:[]}(E.data?.sources,r):[],[W,E.data,r]),[U,H]=e.useState(""),B=O.some(e=>e.id===U)?U:"";E.data&&U&&!B&&H("");const K=async(e={domain:o,type:w})=>{try{await R("query",async s=>{const a=await pe(l.dnsQuery,e.domain.trim(),"all"===e.type?F.types:[e.type],M?.dns_query.limits?.max_types_per_request??1,s,N?"bypass":"normal",B||void 0);return s.aborted||q(a),a})}catch{}},Q=x(M,"dns_query",{whileLoading:!1})&&F.types.length>0,$=Ae(s,{queryAgain:Q?e=>{const a=F.types.includes(e.type)?e.type:"all";s("dns",f("",{tab:"query",domain:e.name.replace(/\.$/,""),type:a,run:"1"}))}:void 0}),I=d.has("run")&&M?n:null,V=e.useEffectEvent(e=>{const a=new URLSearchParams(e);s("dns",f(e,{run:null}),{replace:!0}),K({domain:a.get("domain")??"",type:a.get("type")??"A"})});return e.useEffect(()=>{null!==I&&V(I)},[I]),{...F,rule:{...$,label:e=>r(x(M,"dns_rules",{whileLoading:!1})?"dns.addRequestRuleFor":"dns.addRoutingRuleFor",{domain:e})},domain:o,setDomain:v,type:w,setType:_,bypassCache:N,setBypassCache:T,upstreams:O,upstream:B,setUpstream:H,pending:"query"===C,queryError:k,submit:()=>{K()},setTab:e=>s("dns",j(n,e,M&&!D?L:null)),tab:P,filterDomain:d.get("domain")??"",filterDevice:d.get("device")??"",cacheHref:A.includes("cache")?b("dns",{tab:"cache"}):null,logHref:(e,s)=>b("dns",{tab:"log",[e]:s}),logLinks:[...x(M,"dns_rules",{whileLoading:!1})?[{id:"rules",label:r("rule.dnsTitle"),onAction:()=>s("rules","tab=dns")}]:[],...M?.runtime_settings.available?[{id:"recording",label:r("ui.recordingSettings"),onAction:()=>s("settings","card=runtime")}]:[]],logEnabled:M?.dns_log.available,viewCache:()=>s("dns",f(n,{tab:"cache",domain:S?.domain??""})),clearCacheFilter:()=>s("dns",f(n,{tab:"cache",domain:null}))}}function Qe(s){const a=c(),t=v[w()],n=xe(!T()),{contains:r}=Te({sensitivity:"base"}),i=e.useMemo(()=>function(e,s,a,t,n,r,i){const d=s?.dns_cache,o=(e?.entries??[]).filter(e=>!a||i(e.domain,a));return{fields:[[r("dns.entries"),e?l(e.total,n):"—"]],coverage:e?["positive","negative","persistent"].filter(s=>!e.coverage[s]).map(e=>({id:e,text:"persistent"===e?r("dns.memoryOnly"):r("ui.valuePair",{label:r("positive"===e?"dns.positive":"dns.negative"),value:r("dns.notCovered")})})):[],deleteBy:{name:!!d?.available&&!0===d.delete_name,entry:!!d?.available&&!0===d.delete_entry},filterText:a?r("dns.cacheFilter",{domain:a}):"",confirmationText:e?r("dns.flushConfirm",{n:e.total}):r("dns.flushConfirmAll"),flushDisabled:!!t||!s?.dns_cache.available||!s.dns_cache.flush,flushReason:!d||t||d.available&&d.flush?null:r("dns.flushUnsupported"),deleteReason:!(d&&!t&&o.length>0)||d.available&&d.delete_entry?null:r("dns.deleteUnsupported"),empty:r(s?.dns_cache.available&&s.dns_cache.read?"dns.empty":"dns.cacheUnavailable"),rows:o.map(e=>({id:e.entry_id,domain:e.domain,type:e.type,status:e.status,expiresAt:e.expires_at,staleUntil:e.stale_until,deleteLabel:r("dns.deleteEntry",{domain:e.domain,type:e.type}),seed:Le(e.domain,e.type,[],null,null),pending:t===e.entry_id,disabled:!!t||!s?.dns_cache.available||!s.dns_cache.delete_entry}))}}(n.cache.data,n.capabilities.data?.resources,s,n.busy,t,a,r),[n.cache.data,n.capabilities.data,s,n.busy,t,a,r]),[d,o]=e.useState("suffix"),[u,m]=e.useState(s),[p,g]=e.useState("all");h(s,m);const x=[...new Set([...n.capabilities.data?.resources.dns_query.record_types??[],...(n.cache.data?.entries??[]).map(e=>e.type)])],y=e.useMemo(()=>({kind:d,text:u}),[d,u]),f=_(y,250),b=f!==y,j=n.cache.data?.entries,N="full"===d&&!!u.trim()&&i.deleteBy.name,{matches:S,error:q,pending:M}=function(s,a,t){const n=e.useMemo(()=>(s??[]).filter(e=>"all"===t||e.type===t),[s,t]),r="regex"===a.kind&&!!a.text.trim(),[l,i]=e.useState(null);e.useEffect(()=>{if(!r)return;const e=new Worker(new URL(""+new URL("match.worker-B2aIccpg.js",import.meta.url).href,import.meta.url),{type:"module"});let s,t=!0;const l=(r,l)=>{t&&(t=!1,clearTimeout(s),e.terminate(),i({candidates:n,pattern:a,matches:r?.map(e=>n[e])??[],error:l??(null===r?"dns.invalidRegex":void 0)}))};return e.onmessage=r=>{t&&("ready"===r.data?(s=window.setTimeout(()=>l([],"dns.regexTimeout"),1e3),e.postMessage({text:a.text,names:n.map(e=>e.domain)})):l(r.data))},e.onerror=e=>{e.preventDefault(),l([],"dns.matchFailed")},()=>{t=!1,clearTimeout(s),e.terminate()}},[r,n,a]);const d=e.useMemo(()=>{if(r)return null;const e=Be(a.kind,a.text);return{matches:e?n.filter(s=>e(s.domain)):[],error:e?void 0:"dns.invalidName"}},[r,n,a]);if(d)return{...d,pending:!1};const o=l?.candidates===n&&l.pattern===a;return{matches:o?l.matches:[],error:o?l.error:void 0,pending:!o}}(j,f,p),{remove:F}=n,A=e.useCallback(e=>{F(e).then(e=>e&&C("positive",a("dns.deleted",{n:e.deleted})),e=>C("negative",a("dns.deleteFailed"),k(e,a)))},[F,a]);return{...i,matchKind:d,matchText:u,matchType:p,setMatchType:g,setMatchKind:o,setMatchText:e=>{const s=function(e,s){return s.startsWith("*.")?{kind:"suffix",text:s.slice(2)}:{kind:e,text:s}}(d,e);o(s.kind),m(s.text)},matchKinds:Ue.map(e=>({id:e.id,label:a(e.label)})),matchTypes:[{id:"all",label:a("dns.allTypes")},...x.map(e=>({id:e,label:e}))],matchError:q?a(q):void 0,matchReason:i.deleteBy.entry||!i.deleteBy.name||N||n.busy?null:a("dns.matchNameOnly"),matchPending:"delete-match"===n.busy,matchDisabled:!!n.busy||b||M||!!q||!N&&!S.length||!u.trim()&&"all"===p||!(i.deleteBy.entry||N),matchConfirmation:N?a("dns.deleteNameConfirm",{name:u.trim(),type:"all"===p?a("dns.allTypes"):p}):a("dns.deleteMatchingConfirm",{n:S.length}),matchListed:S.slice(0,100),matchMore:S.length>100?a("dns.matchMore",{n:S.length-100}):null,removeMatching:async()=>{try{if(N){const e=await n.removeName({name:u.trim(),type:"all"===p?void 0:[p]});return void(e&&C("positive",a("dns.deleted",{n:e.deleted})))}const e=await n.removeMany(S.map(e=>e.entry_id));if(!e)return;e.failed?e.deleted?C("negative",a("dns.deletePartial",{deleted:e.deleted,n:e.failed})):C("negative",a("dns.deleteAllFailed",{n:e.failed})):C("positive",a("dns.deleted",{n:e.deleted}))}catch(e){return a("dns.deleteMatchingFailed",{error:R(e,a)})}},error:n.cache.error,retry:n.cache.refetch,loading:(n.cache.loading||n.capabilities.loading)&&!n.cache.data,flushPending:"flush"===n.busy,remove:A,flush:async()=>{try{const e=await n.flush();e&&C("positive",a("dns.flushed",{matched:e.matched,deleted:e.deleted}))}catch(e){return a("dns.flushFailed",{error:R(e,a)})}},abortFlush:()=>{n.cancel(),n.cache.refetch()}}}function $e(s){const a=c(),t=v[w()],[n,r]=F(),[d,u]=e.useState(!1),m=ye(s,!r&&d);m.data&&!d&&u(!0);const h=e.useMemo(()=>function(e,s,a){if(!e)return null;const{usage:t,coverage:n}=e,r=e=>{const a=o(e);return null===a?"—":l(a,s)},d=t?.entry_capacity??null,c=t&&null!==d?i(t.entries,d):null;return{note:t?null===d?a("dns.chart.usageFacts",{entries:r(t.entries)}):void 0:a("dns.chart.cacheNote",{n:e.total}),usage:t&&null!==d&&null!==c?{pct:c,value:c>0&&c<.5?"<"+a("ui.percent",{n:1}):a("ui.percent",{n:Math.round(c)}),facts:[{label:a("dns.chart.entries"),value:r(t.entries)},{label:a("dns.chart.capacity"),value:r(d)}]}:null,coverage:a("dns.chart.coverage",{kinds:[n.positive&&a("dns.chart.positive"),n.negative&&a("dns.chart.negative")].filter(Boolean).join(a("ui.listSeparator")),persistent:a(n.persistent?"dns.chart.persistent":"dns.chart.memoryOnly")})}}(m.data,t,a),[m.data,t,a]);return{ref:n,card:h,state:Oe(s,!!h,m.error),error:m.error,retry:m.refetch}}function Ie(s,a,t){const n=c(),r=v[w()],[l,i]=e.useState(a);h(a,i);const[o,g]=e.useState("all"),[x,y]=e.useState(t);h(t,y);const f=u(),b=m(),j=_(x),k=N(j),R=""!==j.trim()&&!k,[F,A]=e.useState(k);R||k===F||A(k);const D={name:_(l),type:o,src:R?F:k},L=JSON.stringify(D),P=ge(D,!0===s,!T()),[W,E]=e.useState(null),[O,U]=e.useState(!1),H=p({scope:L});h(L,()=>E(null));const{data:B,newerWaiting:K}=e.useMemo(()=>function(e,s){const a=s&&new Set(s.records.map(e=>e.id));return{data:s??e,newerWaiting:!!a&&!!e?.records.some(e=>!a.has(e.id))}}(P.data,W),[P.data,W]),Q=()=>{H.run("older",async e=>{if(!B?.next_cursor)return;let s;E(B);try{s=await f.dnsLog({name:D.name.trim()||void 0,type:"all"===o?void 0:o,src:D.src,cursor:B.next_cursor,limit:B.limit},e)}catch(a){if(!(a instanceof d)||e.aborted)throw a;const s=503===a.status&&"snapshot_unavailable"===a.code&&null!==a.retryAfter;if(!(410===a.status&&"snapshot_expired"===a.code||400===a.status&&"invalid_request"===a.code)&&!s)throw a;return s&&await M(a.retryAfter,e),E(null),P.refetch(),void C("info",n("dns.olderExpired"))}e.aborted||E(function(e,s){const a=new Set(e.records.map(e=>e.id));return{...e,records:[...e.records,...s.records.filter(e=>!a.has(e.id))],next_cursor:s.next_cursor}}(B,s))})},$=()=>{H.cancel(),E(null);const e=P.refetch();e&&(U(!0),e.finally(()=>U(!1)))},[I,V]=e.useState(null),G=S(q),z=b.data?.resources.dns_query.record_types,X=e.useMemo(()=>function(e,s,a,t=[]){const n=e?.records??[];return{choices:[{id:"all",label:a("dns.allTypes")},...[...new Set([...t,...n.map(e=>e.question.type)])].map(e=>({id:e,label:e}))],total:e?a("dns.logTotal",{n:e.total}):"",totalHelp:e?{title:a("dns.logTotal",{n:e.total}),text:a("dns.logTotalHelp")}:null,loaded:e?.next_cursor?a("dns.logLoaded",{n:n.length}):"",empty:a(void 0===s?"ui.loading":s?"dns.logEmpty":"dns.logUnavailable"),rows:n.map(e=>({id:e.id,observedAt:e.observed_at,name:e.question.name,type:e.question.type,seed:Le(e.question.name,e.question.type,e.answers,e.upstream,e.src),source:e.src??"—",resultError:"NOERROR"!==e.status,result:"NOERROR"!==e.status?e.status:e.answers.map(e=>e.data).join(", ")||"—",cached:e.cached,upstream:e.cached?a("dns.hit"):e.upstream??"—",elapsed:ke(e.elapsed_ms,a)}))}}(B,s,n,z),[B,s,n,z]),Y=e.useMemo(()=>function(e,s,a,t){const n=e?.records.find(e=>e.id===s);if(!n)return null;const r=Ee(n,t);return{id:n.id,title:n.question.name,answers:r.answers,fields:[[t("ui.type"),n.question.type],[t("ui.device"),n.src??"—"],r.fields[0],[t("ui.cache"),r.cacheText],...r.fields.slice(1),[t("ui.time"),Re(n.observed_at,a)]]}}(B,I,r,n),[B,I,r,n]);return{...X,detail:Y,detailTitle:Y?.title??"",name:l,newerWaiting:K,setName:i,type:o,setType:g,src:x,setSrc:y,srcError:R?n("ui.invalidIp"):void 0,selected:Y?I:null,setSelected:V,wide:G,error:H.error??P.error,loading:P.loading&&!B,hasOlder:!!B?.next_cursor,loadingOlder:!!H.busy,loadOlder:Q,refreshing:O,refresh:$,retry:H.error?Q:$,export:()=>{return qe(Ce("dns-log","csv"),(e=B?.records??[],[Se(["id","observed_at","src","name","type","status","cached","upstream","route_source","route_rule","elapsed_ms","answers"]),...e.map(e=>Se([e.id,e.observed_at,e.src,e.question.name,e.question.type,e.status,e.cached?"true":"false",e.upstream,e.route.source,e.route.rule,e.elapsed_ms,e.answers.map(e=>e.data).join(" ")]))].join("\n")+"\n"),"text/csv;charset=utf-8");var e}}}const Ve={cached:"dns.outcome.cached",answered:"dns.outcome.answered",nxdomain:"dns.outcome.nxdomain",failed:"dns.outcome.failed"};function Ge({enabled:a,links:t}){const n=c(),{log:r,cacheListed:l,configHref:i}=function(s){const a=ge({},!0===s,!T()),t=m().data?.resources,n=x(t,"config",{whileLoading:!1}),r=y(!0===s&&n),l=r.data?.sources,i=e.useMemo(()=>n&&l?te(l,"dns"):null,[n,l]);return{log:a,cacheListed:x(t,"dns_cache",{whileLoading:!1})&&!0===t?.dns_cache.read,configHref:i}}(a);if(!1===a)return s.jsx(A,{children:n("dns.logUnavailable")});if(void 0===a)return null;const d=r.error,o=r.data?null:d?s.jsx(A,{children:n("dns.chart.noLog")}):s.jsx(D,{}),u=d?s.jsx(L,{error:d,onRetry:r.refetch}):ne(r.data,r.limit)?s.jsx("p",{className:"rp-note",children:n("dns.chart.shortPage",{n:r.data.records.length,limit:r.limit})}):null;return s.jsx(Xe,{records:r.data?.records??ze,pending:o,notice:u,cacheListed:l,links:{...t,config:i}})}const ze=[];function Xe({records:a,pending:t,notice:n,cacheListed:r,links:l}){const i=c(),d=re(),o=v[w()],u=e.useMemo(()=>le(a,o),[a,o]),m={cached:d.positive,answered:d.cat[2],nxdomain:d.notice,failed:d.negative},h=e=>i("ui.percent",{n:null===e?0:Math.round(100*e)}),p=(e,s)=>{const a=s?e/s:0;return e>0&&a<.005?"<"+i("ui.percent",{n:1}):e.995?">"+i("ui.percent",{n:99}):h(a)},g=e=>({id:e.id,value:e.value,color:m[e.outcome],lines:[e.name,ke(e.value,i),i(Ve[e.outcome])]}),x=t??(u.total<5?s.jsx(A,{children:i("dns.chart.tooFew")}):null),y=[{label:i("dns.chart.median"),value:ke(u.typical,i),icon:s.jsx(P,{}),tint:"c1"},{label:i("dns.chart.p95"),value:ke(u.slowest,i),icon:s.jsx(ie,{}),tint:"c4"},{label:i("dns.chart.cacheRate"),value:h(u.cacheRate),icon:s.jsx(W,{}),tint:"c2"},{label:i("dns.chart.failureRate"),value:h(u.failureRate),icon:s.jsx(E,{}),tint:"c5",tone:u.counts.failed?"negative":void 0}];return s.jsxs("div",{className:"rp-chart-page",children:[n,!x&&s.jsx(de,{facts:y}),s.jsxs("div",{className:"rp-g21",children:[s.jsx(O,{title:i("dns.chart.speed",{n:u.samples.length}),note:x?void 0:i("dns.chart.sample",{n:u.total,uncached:u.uncached,upstream:u.samples.length}),aside:l.config&&s.jsx(U,{appearance:"link",href:l.config,children:i("dns.openConfig")}),children:x??s.jsxs(s.Fragment,{children:[s.jsx(oe,{label:i("dns.chart.speed",{n:u.samples.length}),points:u.samples.map(g),marks:null!==u.typical&&null!==u.slowest?[{value:u.typical,label:i("dns.chart.typical",{value:ke(u.typical,i)})},{value:u.slowest,label:i("dns.chart.slowest",{value:ke(u.slowest,i)})}]:[],rows:u.upstreams.map(e=>({id:e.upstream,label:e.upstream,detail:i("dns.chart.upstream",{n:e.samples.length,median:ke(e.median,i)}),points:e.samples.map(g),mark:e.median})),fmt:e=>ke(e,i)}),s.jsxs("div",{className:"rp-legend",children:[["answered","nxdomain","failed"].map(e=>s.jsx(ce,{swatch:m[e],label:i(Ve[e])},e)),s.jsx(ce,{swatch:s.jsx("i",{className:"rp-median-key","aria-hidden":"true"}),label:i("dns.chart.medianKey")})]})]})}),s.jsx(O,{title:i("dns.chart.outcomes"),children:x??s.jsx(ue,{label:i("dns.chart.outcomes"),shares:me.map(e=>({id:e,label:i(Ve[e]),count:u.counts[e],color:m[e],text:i("dns.chart.share",{n:u.counts[e],share:p(u.counts[e],u.total)})}))})})]}),s.jsxs("div",{className:"rp-g21",children:[s.jsx(Ze,{analysis:u,standIn:x,logHref:l.log}),s.jsx(Ye,{listed:r,href:l.cache})]})]})}function Ye({listed:e,href:a}){const t=c(),n=re(),{ref:r,...l}=$e(e);return s.jsx(O,{ref:r,title:t("dns.chart.cache"),note:"ready"===l.state?l.card?.note:void 0,aside:e&&a&&s.jsx(U,{appearance:"link",href:a,children:t("dns.viewCache")}),children:"unlisted"===l.state?s.jsx(A,{children:t("dns.cacheUnavailable")}):"unavailable"===l.state?s.jsx(A,{children:t("dns.cacheBusy")}):"error"===l.state?s.jsx(L,{error:l.error,onRetry:l.retry}):l.card?s.jsxs(s.Fragment,{children:[l.card.usage&&s.jsxs("div",{className:"rp-form",children:[s.jsx(H,{label:t("dns.chart.usage"),value:l.card.usage.value,pct:l.card.usage.pct,color:n.accent}),s.jsx(de,{facts:l.card.usage.facts})]}),s.jsx("p",{className:"rp-note",children:l.card.coverage})]}):s.jsx(D,{})})}function Ze({analysis:a,standIn:t,logHref:n}){const r=c(),l=re(),[i,d]=e.useState("device"),o="device"===i?a.devices:a.domains,u=o.top[0]?.count??1;return s.jsx(O,{title:r("dns.chart.ranking"),aside:!t&&s.jsx(fe,{label:r("dns.chart.ranking"),value:i,onChange:d,items:[["device",r("dns.chart.byDevice")],["domain",r("dns.chart.byDomain")]]}),children:t??s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"rp-list",children:o.top.map(e=>s.jsx(H,{label:null===e.key?r("dns.chart.resolver"):s.jsx(U,{appearance:"link",href:n("device"===i?"device":"domain",e.key),children:s.jsx(B,{children:e.key})}),value:r("dns.chart.count",{n:e.count}),pct:e.count/u*100,color:"device"===i?l.cat[0]:l.cat[3]},e.key??""))}),o.rest>0&&s.jsx("p",{className:"rp-note",children:r("dns.chart.rest",{n:o.rest})})]})})}function Je(e){const a=c(),t=Ke(e),n=s.jsxs(s.Fragment,{children:[t.queryError&&s.jsx(L,{error:t.queryError,onRetry:t.submit,message:e=>a("dns.queryFailed",{error:e})}),s.jsx("form",{className:V(),onSubmit:e=>{e.preventDefault(),t.submit()},children:s.jsx(K,{reason:t.reason,children:s.jsxs(we,{children:[s.jsx(Q,{side:!0,label:a("ui.domain"),value:t.domain,onChange:t.setDomain,width:280,placeholder:"example.com"}),s.jsx(be,{label:a("ui.type"),side:!0,value:t.type,onChange:t.setType,items:t.choices}),t.upstreams.length>0&&s.jsx(be,{label:a("ui.upstream"),side:!0,value:t.upstream,onChange:t.setUpstream,items:t.upstreams}),s.jsx($,{isSelected:t.bypassCache,onChange:t.setBypassCache,children:a("dns.bypassCache")}),s.jsx(I,{accent:!0,type:"submit",isPending:t.pending,isDisabled:t.disabled,children:a("dns.query")})]})})}),t.cards.length>0&&s.jsx("div",{className:"rp-col",children:t.cards.map(e=>s.jsxs(O,{className:"rp-col",children:[s.jsxs("div",{className:"rp-row",children:[s.jsxs("div",{className:"rp-cluster",children:[s.jsx("h2",{className:"rp-h3",children:e.title}),s.jsx(G,{tone:e.cacheTone,children:e.cacheText})]}),s.jsxs("div",{className:"rp-cluster",children:[t.rule.canAdd(e.seed)&&s.jsx(I,{quiet:!0,small:!0,onPress:()=>t.rule.open(e.seed),children:a("rule.add")}),t.showCache&&s.jsx(I,{quiet:!0,small:!0,onPress:t.viewCache,children:a("dns.viewCache")})]})]}),s.jsx(z,{inline:!0,items:e.fields}),e.answers.length?s.jsx("div",{className:"rp-list",children:e.answers.map((n,r)=>{const l=e.answerSeeds[r];return s.jsxs("div",{className:"rp-cluster",children:[s.jsx("div",{className:"rp-code",children:n}),l&&t.rule.canAdd(l.seed)&&s.jsx(I,{quiet:!0,small:!0,label:a("dns.addRuleFor",{value:l.address}),onPress:()=>t.rule.open(l.seed),children:a("rule.add")})]},r)})}):s.jsx(A,{children:a("dns.noAnswers")})]},e.id))})]}),r={stats:s.jsx(Ge,{enabled:t.logEnabled,links:{cache:t.cacheHref,log:t.logHref}}),query:n,cache:s.jsx(es,{domain:t.filterDomain,clearFilter:t.clearCacheFilter,rule:t.rule}),log:s.jsx(ss,{enabled:t.logEnabled,initialName:t.filterDomain,initialSrc:t.filterDevice,links:t.logLinks,rule:t.rule})};return s.jsxs("div",{className:"rp-page",children:[s.jsx(ve,{page:!0,keepMounted:!0,label:a("nav.dns"),items:t.tabs.map(e=>({...e,content:r[e.id]})),value:t.tab,onChange:t.setTab}),s.jsx(De,{dialog:t.rule.dialog})]})}function es({domain:a,clearFilter:t,rule:n}){const r=c(),l=Qe(a),{remove:i}=l,d=e.useMemo(()=>[{id:"q",label:r("ui.domain"),text:"wrap",minWidth:320,isRowHeader:!0,render:e=>s.jsx("span",{className:"rp-code",children:e.domain})},{id:"t",label:r("ui.type"),minWidth:88,grow:0,drop:3,render:e=>e.type},{id:"s",label:r("ui.state"),minWidth:128,grow:0,render:e=>e.status},{id:"e",label:r("dns.expires"),minWidth:128,drop:2,render:e=>s.jsx(Ne,{at:e.expiresAt})},{id:"st",label:r("dns.staleUntil"),minWidth:128,drop:1,render:e=>s.jsx(Ne,{at:e.staleUntil})},{id:"a",actions:!0,label:r("ui.actions"),minWidth:104,grow:0,render:e=>s.jsxs("div",{className:"rp-cluster nowrap",children:[s.jsx(I,{quiet:!0,icon:!0,small:!0,label:n.label(e.domain),isDisabled:!n.canAdd(e.seed),onPress:()=>n.open(e.seed),children:s.jsx(se,{})}),s.jsx(I,{quiet:!0,icon:!0,small:!0,label:e.deleteLabel,isPending:e.pending,isDisabled:e.disabled,onPress:()=>i(e.id),children:s.jsx(ae,{})})]})}],[r,i,n]);return s.jsxs(s.Fragment,{children:[l.error&&s.jsx(L,{error:l.error,onRetry:l.retry}),s.jsxs(we,{page:!0,className:"top",children:[s.jsx(z,{row:!0,items:l.fields}),l.coverage.map(e=>s.jsx(G,{tone:"warn",children:e.text},e.id)),l.filterText&&s.jsx(I,{onPress:t,children:l.filterText}),s.jsx("span",{className:"rp-grow"}),s.jsx("div",{className:"rp-col",children:s.jsx(K,{reason:l.flushReason,children:s.jsx(ee,{label:r("dns.flushAll"),confirmationText:l.confirmationText,isPending:l.flushPending,isDisabled:l.flushPending||l.flushDisabled,onConfirm:l.flush,onAbort:l.abortFlush})})})]}),(l.deleteBy.name||l.deleteBy.entry)&&s.jsx(K,{reason:l.matchReason,children:s.jsxs(we,{page:!0,children:[s.jsx(be,{side:!0,label:r("rule.kind"),value:l.matchKind,onChange:e=>l.setMatchKind(e),items:l.matchKinds}),s.jsx(Q,{side:!0,label:r("dns.pattern"),value:l.matchText,onChange:l.setMatchText,error:l.matchError,help:"regex"===l.matchKind?{title:r("dns.pattern"),text:r("dns.regexHelp")}:void 0,width:280,placeholder:"example.com"}),s.jsx(be,{side:!0,label:r("ui.type"),value:l.matchType,onChange:l.setMatchType,items:l.matchTypes}),s.jsx(ee,{label:r("dns.deleteMatching"),confirmationText:l.matchConfirmation,details:s.jsxs("ul",{className:"rp-impact",children:[l.matchListed.map(e=>s.jsx("li",{children:s.jsxs("span",{className:"rp-cluster nowrap",children:[s.jsx(B,{className:"rp-code",children:e.domain}),s.jsx("span",{className:"rp-note",children:e.type})]})},e.entry_id)),l.matchMore&&s.jsx("li",{className:"rp-note",children:l.matchMore})]}),isPending:l.matchPending,isDisabled:l.matchDisabled,onConfirm:l.removeMatching,onAbort:l.abortFlush})]})}),s.jsx(K,{reason:l.deleteReason,children:s.jsx(_e,{label:r("ui.cache"),height:442,fit:!0,rows:l.rows,loading:l.loading,empty:l.empty,cols:d})})]})}function ss({enabled:a,initialName:t,initialSrc:n,links:r,rule:l}){const i=c(),d=Ie(a,t,n),o=e.useMemo(()=>[{id:"t",label:i("ui.time"),minWidth:140,grow:0,render:e=>s.jsx(Ne,{at:e.observedAt})},{id:"q",label:i("ui.domain"),minWidth:200,grow:2,isRowHeader:!0,render:e=>s.jsx(B,{children:e.name})},{id:"ty",label:i("ui.type"),minWidth:88,grow:0,drop:3,render:e=>e.type},{id:"s",label:i("ui.device"),minWidth:128,drop:2,render:e=>s.jsx(B,{className:"rp-code",children:e.source})},{id:"r",label:i("dns.result"),minWidth:160,grow:2,render:e=>e.resultError?s.jsx(X,{small:!0,tone:"err",children:e.result}):s.jsx(B,{className:"rp-code",children:e.result})},{id:"u",label:i("ui.upstream"),minWidth:128,drop:1,render:e=>e.cached?s.jsx(X,{small:!0,tone:"ok",children:e.upstream}):s.jsx(B,{children:e.upstream})},{id:"e",label:i("ui.elapsed"),minWidth:88,grow:0,drop:4,render:e=>e.elapsed},{id:"a",actions:!0,label:i("ui.actions"),minWidth:88,grow:0,render:e=>s.jsx(I,{quiet:!0,icon:!0,small:!0,label:l.label(e.name),isDisabled:!l.canAdd(e.seed),onPress:()=>l.open(e.seed),children:s.jsx(se,{})})}],[i,l]);return s.jsxs(s.Fragment,{children:[s.jsxs(we,{page:!0,children:[s.jsx(Q,{search:!0,label:i("ui.domain"),value:d.name,onChange:d.setName,placeholder:i("dns.logFilterHint"),width:240}),s.jsx(be,{label:i("ui.type"),side:!0,value:d.type,onChange:d.setType,items:d.choices}),s.jsx(Q,{search:!0,label:i("ui.device"),value:d.src,onChange:d.setSrc,error:d.srcError,placeholder:"10.0.0.12",width:160}),d.total&&s.jsx(Y,{help:d.totalHelp,children:s.jsx("span",{className:"rp-label",children:d.total})}),d.loaded&&s.jsx("span",{className:"rp-label",children:d.loaded}),s.jsx("span",{className:"rp-grow"}),s.jsx(je,{actions:[{id:"refresh",label:i("ui.refresh"),icon:s.jsx(Z,{className:"rp-spin-on-press"}),isPending:d.refreshing,onAction:d.refresh},{id:"export",label:i("dns.exportLog"),icon:s.jsx(he,{}),isDisabled:!d.rows.length,onAction:d.export},...r,...d.hasOlder?[{id:"older",label:i("dns.loadOlder"),isPending:d.loadingOlder,onAction:d.loadOlder}]:[]]})]}),d.error&&s.jsx(L,{error:d.error,onRetry:d.retry}),d.newerWaiting&&s.jsx("p",{className:"rp-note",children:i("dns.newerWaiting")}),s.jsxs("div",{className:"rp-with-panel","data-open":d.detail?"":void 0,children:[s.jsx(_e,{label:i("dns.log"),rowDetail:!0,height:520,rows:d.rows,selected:d.selected,onSelect:d.setSelected,selectOnFocus:d.wide,loading:d.loading,empty:d.empty,cols:o}),s.jsx(J,{open:!!d.detail,title:d.detailTitle,onClose:()=>d.setSelected(null),children:d.detail&&s.jsxs(s.Fragment,{children:[s.jsx(z,{inline:!0,items:d.detail.fields}),d.detail.answers.length?s.jsx("div",{className:"rp-list",children:d.detail.answers.map((e,a)=>s.jsx("div",{className:"rp-code",children:e},a))}):s.jsx(A,{children:i("dns.noAnswers")})]})})]}),d.hasOlder&&s.jsx("div",{className:"rp-narrow-only",children:s.jsx("div",{className:"rp-cluster",children:s.jsx(I,{small:!0,isPending:d.loadingOlder,onPress:d.loadOlder,children:i("dns.loadOlder")})})})]})}export{Je as Dns}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Donut-DQsAiHCN.js b/luci-app-honk/root/etc/honk/doona/assets/Donut-DQsAiHCN.js new file mode 100644 index 000000000..649173fe3 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Donut-DQsAiHCN.js @@ -0,0 +1 @@ +import{r as n,j as t}from"./vendor-react-64fcanlc.js";import{C as e,E as r}from"./index-CmbH0woS.js";import{bb as o,bj as a,be as i,bg as u}from"./activity-CiEWAlFW.js";import{w as l,c,a as s}from"./array-C0VuvQyb.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./ActionGroup-D3mQjUsw.js";import"./Select-BcN72K3H.js";const f=Math.abs,h=Math.atan2,y=Math.cos,p=Math.max,d=Math.min,x=Math.sin,g=Math.sqrt,v=1e-12,m=Math.PI,M=m/2,A=2*m;function j(n){return n>=1?M:n<=-1?-M:Math.asin(n)}function b(n){return n.innerRadius}function w(n){return n.outerRadius}function P(n){return n.startAngle}function R(n){return n.endAngle}function T(n){return n&&n.padAngle}function L(n,t,e,r,o,a,i){var u=n-e,l=t-r,c=(i?a:-a)/g(u*u+l*l),s=c*l,f=-c*u,h=n+s,y=t+f,d=e+s,x=r+f,v=(h+d)/2,m=(y+x)/2,M=d-h,A=x-y,j=M*M+A*A,b=o-a,w=h*x-d*y,P=(A<0?-1:1)*g(p(0,b*b*j-w*w)),R=(w*A-M*P)/j,T=(-w*M-A*P)/j,L=(w*A+M*P)/j,$=(-w*M+A*P)/j,B=R-v,E=T-m,I=L-v,N=$-m;return B*B+E*E>I*I+N*N&&(R=L,T=$),{cx:R,cy:T,x01:-s,y01:-f,x11:R*(o/b-1),y11:T*(o/b-1)}}function $(){var n=b,t=w,e=c(0),r=null,o=P,a=R,i=T,u=null,s=l(p);function p(){var l,c,p,b=+n.apply(this,arguments),w=+t.apply(this,arguments),P=o.apply(this,arguments)-M,R=a.apply(this,arguments)-M,T=f(R-P),$=R>P;if(u||(u=l=s()),wv)if(T>A-v)u.moveTo(w*y(P),w*x(P)),u.arc(0,0,w,P,R,!$),b>v&&(u.moveTo(b*y(R),b*x(R)),u.arc(0,0,b,R,P,$));else{var B,E,I=P,N=R,S=P,k=R,C=T,D=T,F=i.apply(this,arguments)/2,K=F>v&&(r?+r.apply(this,arguments):g(b*b+w*w)),q=d(f(w-b)/2,+e.apply(this,arguments)),G=q,H=q;if(K>v){var V=j(K/b*x(F)),_=j(K/w*x(F));(C-=2*V)>v?(S+=V*=$?1:-1,k-=V):(C=0,S=k=(P+R)/2),(D-=2*_)>v?(I+=_*=$?1:-1,N-=_):(D=0,I=N=(P+R)/2)}var z=w*y(I),J=w*x(I),O=b*y(k),Q=b*x(k);if(q>v){var U,W=w*y(N),X=w*x(N),Y=b*y(S),Z=b*x(S);if(T1?0:p<-1?m:Math.acos(p))/2),an=g(U[0]*U[0]+U[1]*U[1]);G=d(q,(b-an)/(on-1)),H=d(q,(w-an)/(on+1))}else G=H=0}D>v?H>v?(B=L(Y,Z,z,J,w,H,$),E=L(W,X,O,Q,w,H,$),u.moveTo(B.cx+B.x01,B.cy+B.y01),Hv&&C>v?G>v?(B=L(O,Q,W,X,b,-G,$),E=L(z,J,Y,Z,b,-G,$),u.lineTo(B.cx+B.x01,B.cy+B.y01),Gn?1:t>=n?0:NaN}function E(n){return n}function I({label:l,rows:f}){const h=e(),[y,p]=r(Math.round,120),{tip:d,showAt:x,hide:g}=o(),[v,m]=n.useState(null),M=f.filter(n=>null!==n.value&&n.value>0),j=p?.width??0,b=p?.height??0,w=a(M.map(n=>n.value)),P=function(){var n=E,t=B,e=null,r=c(0),o=c(A),a=c(0);function i(i){var u,l,c,f,h,y=(i=s(i)).length,p=0,d=new Array(y),x=new Array(y),g=+r.apply(this,arguments),v=Math.min(A,Math.max(-A,o.apply(this,arguments)-g)),m=Math.min(Math.abs(v)/y,a.apply(this,arguments)),M=m*(v<0?-1:1);for(u=0;u0&&(p+=h);for(null!=t?d.sort(function(n,e){return t(x[n],x[e])}):null!=e&&d.sort(function(n,t){return e(i[n],i[t])}),u=0,c=p?(v-y*M)/p:0;u0?h*c:0)+M,x[l]={data:i[l],index:u,value:h,startAngle:g,endAngle:f,padAngle:m};return x}return i.value=function(t){return arguments.length?(n="function"==typeof t?t:c(+t),i):n},i.sortValues=function(n){return arguments.length?(t=n,e=null,i):t},i.sort=function(n){return arguments.length?(e=n,t=null,i):e},i.startAngle=function(n){return arguments.length?(r="function"==typeof n?n:c(+n),i):r},i.endAngle=function(n){return arguments.length?(o="function"==typeof n?n:c(+n),i):o},i.padAngle=function(n){return arguments.length?(a="function"==typeof n?n:c(+n),i):a},i}().sort(null).value((n,t)=>w[t])(M),R=Math.min(j,b)/2,T=$().innerRadius(R*(44/56)).outerRadius(R).digits(3),L=n=>m(n);n.useLayoutEffect(()=>{const n=null===v?void 0:P[v];if(!n||null===v)return void g();const t=M[v],[e,r]=T.centroid(n);x({x:Math.round(1e4*(j/2+e))/1e4,y:Math.round(1e4*(b/2+r))/1e4,width:j,bounds:{x:0,y:0,width:j,height:b},lines:[h("ui.valuePair",{label:t.name,value:h("ui.share",{bytes:t.text,percent:String(t.value)})})]})});const I=i(M.length,L,()=>{m(null),g()});return t.jsxs("div",{ref:y,style:{height:"100%",width:"100%",position:"relative"},onPointerLeave:I.onPointerLeave,children:[t.jsx(u,{tip:d}),p&&t.jsx("svg",{className:"rp-activity-surface",width:j,height:b,viewBox:`0 0 ${j} ${b}`,style:{display:"block"},role:M.length?"application":"img","aria-label":l,tabIndex:M.length?0:void 0,onFocus:M.length?I.onFocus:void 0,onBlur:I.onBlur,onKeyDown:M.length?I.onKeyDown:void 0,children:t.jsx("g",{transform:`translate(${j/2},${b/2})`,children:P.map((n,e)=>t.jsx("path",{d:T({...n,endAngle:Math.min(n.endAngle,n.startAngle+359.999*Math.PI/180)})??void 0,fill:M[e].color,stroke:"none",onPointerEnter:()=>L(e),onPointerLeave:I.onPointerLeave},M[e].name))})})]})}export{I as DonutPlot}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Donut-ICRrmfL0.js b/luci-app-honk/root/etc/honk/doona/assets/Donut-ICRrmfL0.js deleted file mode 100644 index c419570df..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Donut-ICRrmfL0.js +++ /dev/null @@ -1 +0,0 @@ -import{r as n,j as t}from"./vendor-react-64fcanlc.js";import{F as e,H as r}from"./index-BgFj_VXE.js";import{b8 as o,bg as a,bb as i,bd as l}from"./activity-D06xJ7oH.js";import{w as u,c,a as s}from"./array-C0VuvQyb.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./logs-BxISynQ4.js";import"./Select-CkiGmyVC.js";import"./format-s2EANuUb.js";const f=Math.abs,h=Math.atan2,y=Math.cos,p=Math.max,d=Math.min,x=Math.sin,g=Math.sqrt,v=1e-12,m=Math.PI,M=m/2,A=2*m;function b(n){return n>=1?M:n<=-1?-M:Math.asin(n)}function j(n){return n.innerRadius}function w(n){return n.outerRadius}function P(n){return n.startAngle}function R(n){return n.endAngle}function T(n){return n&&n.padAngle}function L(n,t,e,r,o,a,i){var l=n-e,u=t-r,c=(i?a:-a)/g(l*l+u*u),s=c*u,f=-c*l,h=n+s,y=t+f,d=e+s,x=r+f,v=(h+d)/2,m=(y+x)/2,M=d-h,A=x-y,b=M*M+A*A,j=o-a,w=h*x-d*y,P=(A<0?-1:1)*g(p(0,j*j*b-w*w)),R=(w*A-M*P)/b,T=(-w*M-A*P)/b,L=(w*A+M*P)/b,$=(-w*M+A*P)/b,B=R-v,F=T-m,I=L-v,N=$-m;return B*B+F*F>I*I+N*N&&(R=L,T=$),{cx:R,cy:T,x01:-s,y01:-f,x11:R*(o/j-1),y11:T*(o/j-1)}}function $(){var n=j,t=w,e=c(0),r=null,o=P,a=R,i=T,l=null,s=u(p);function p(){var u,c,p,j=+n.apply(this,arguments),w=+t.apply(this,arguments),P=o.apply(this,arguments)-M,R=a.apply(this,arguments)-M,T=f(R-P),$=R>P;if(l||(l=u=s()),wv)if(T>A-v)l.moveTo(w*y(P),w*x(P)),l.arc(0,0,w,P,R,!$),j>v&&(l.moveTo(j*y(R),j*x(R)),l.arc(0,0,j,R,P,$));else{var B,F,I=P,N=R,S=P,k=R,D=T,E=T,H=i.apply(this,arguments)/2,K=H>v&&(r?+r.apply(this,arguments):g(j*j+w*w)),q=d(f(w-j)/2,+e.apply(this,arguments)),C=q,V=q;if(K>v){var _=b(K/j*x(H)),z=b(K/w*x(H));(D-=2*_)>v?(S+=_*=$?1:-1,k-=_):(D=0,S=k=(P+R)/2),(E-=2*z)>v?(I+=z*=$?1:-1,N-=z):(E=0,I=N=(P+R)/2)}var G=w*y(I),J=w*x(I),O=j*y(k),Q=j*x(k);if(q>v){var U,W=w*y(N),X=w*x(N),Y=j*y(S),Z=j*x(S);if(T1?0:p<-1?m:Math.acos(p))/2),an=g(U[0]*U[0]+U[1]*U[1]);C=d(q,(j-an)/(on-1)),V=d(q,(w-an)/(on+1))}else C=V=0}E>v?V>v?(B=L(Y,Z,G,J,w,V,$),F=L(W,X,O,Q,w,V,$),l.moveTo(B.cx+B.x01,B.cy+B.y01),Vv&&D>v?C>v?(B=L(O,Q,W,X,j,-C,$),F=L(G,J,Y,Z,j,-C,$),l.lineTo(B.cx+B.x01,B.cy+B.y01),Cn?1:t>=n?0:NaN}function F(n){return n}function I({label:u,rows:f}){const h=e(),[y,p]=r(Math.round,120),{tip:d,showAt:x,hide:g}=o(),[v,m]=n.useState(null),M=f.filter(n=>null!==n.value&&n.value>0),b=p?.width??0,j=p?.height??0,w=a(M.map(n=>n.value)),P=function(){var n=F,t=B,e=null,r=c(0),o=c(A),a=c(0);function i(i){var l,u,c,f,h,y=(i=s(i)).length,p=0,d=new Array(y),x=new Array(y),g=+r.apply(this,arguments),v=Math.min(A,Math.max(-A,o.apply(this,arguments)-g)),m=Math.min(Math.abs(v)/y,a.apply(this,arguments)),M=m*(v<0?-1:1);for(l=0;l0&&(p+=h);for(null!=t?d.sort(function(n,e){return t(x[n],x[e])}):null!=e&&d.sort(function(n,t){return e(i[n],i[t])}),l=0,c=p?(v-y*M)/p:0;l0?h*c:0)+M,x[u]={data:i[u],index:l,value:h,startAngle:g,endAngle:f,padAngle:m};return x}return i.value=function(t){return arguments.length?(n="function"==typeof t?t:c(+t),i):n},i.sortValues=function(n){return arguments.length?(t=n,e=null,i):t},i.sort=function(n){return arguments.length?(e=n,t=null,i):e},i.startAngle=function(n){return arguments.length?(r="function"==typeof n?n:c(+n),i):r},i.endAngle=function(n){return arguments.length?(o="function"==typeof n?n:c(+n),i):o},i.padAngle=function(n){return arguments.length?(a="function"==typeof n?n:c(+n),i):a},i}().sort(null).value((n,t)=>w[t])(M),R=Math.min(56,b/2,j/2),T=$().innerRadius(R*(44/56)).outerRadius(R).digits(3),L=n=>m(n);n.useLayoutEffect(()=>{const n=null===v?void 0:P[v];if(!n||null===v)return void g();const t=M[v],[e,r]=T.centroid(n);x({x:Math.round(1e4*(b/2+e))/1e4,y:Math.round(1e4*(j/2+r))/1e4,width:b,bounds:{x:0,y:0,width:b,height:j},lines:[h("ui.valuePair",{label:t.name,value:h("ui.share",{bytes:t.text,percent:String(t.value)})})]})});const I=i(M.length,L,()=>{m(null),g()});return t.jsxs("div",{ref:y,style:{height:"100%",width:"100%",position:"relative"},onPointerLeave:I.onPointerLeave,children:[t.jsx(l,{tip:d}),p&&t.jsx("svg",{className:"rp-activity-surface",width:b,height:j,viewBox:`0 0 ${b} ${j}`,style:{display:"block"},role:M.length?"application":"img","aria-label":u,tabIndex:M.length?0:void 0,onFocus:M.length?I.onFocus:void 0,onBlur:I.onBlur,onKeyDown:M.length?I.onKeyDown:void 0,children:t.jsx("g",{transform:`translate(${b/2},${j/2})`,children:P.map((n,e)=>t.jsx("path",{d:T({...n,endAngle:Math.min(n.endAngle,n.startAngle+359.999*Math.PI/180)})??void 0,fill:M[e].color,stroke:"none",onPointerEnter:()=>L(e),onPointerLeave:I.onPointerLeave},M[e].name))})})]})}export{I as DonutPlot}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Editors-B0Mv3GSe.js b/luci-app-honk/root/etc/honk/doona/assets/Editors-B0Mv3GSe.js new file mode 100644 index 000000000..d1ab586cb --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Editors-B0Mv3GSe.js @@ -0,0 +1 @@ +import{r as e,$ as t,a as r,j as n}from"./vendor-react-64fcanlc.js";import{fS as o,gk as i,fJ as a,fF as s,dx as l,gl as d,gm as c,gn as p,fL as u,fG as g,fH as f,go as m,fI as h,gp as y,gq as D,fT as v,g7 as b,gr as w,gs as x,g8 as T,fQ as k,gt as E,bs as P,du as K,dl as O,bZ as S,aY as C,c$ as I,gd as j,aU as A,bD as R,J as M,E as B,C as L,m as F,gu as $,p as z,R as N,gv as V,gw as X,gx as Y,bJ as H,cT as U,l as q,W as J,O as G,dO as W,c9 as _,dd as Z,d6 as Q,ec as ee,gy as te,Q as re,gz as ne,gA as oe,bw as ie,gB as ae,gC as se,bR as le,gD as de,gE as ce,a4 as pe,b5 as ue}from"./index-CmbH0woS.js";import{aS as ge,aT as fe,aU as me,aV as he,aW as ye,aX as De,aY as ve,aZ as be,a_ as we,a$ as xe,b0 as Te,b1 as ke,b2 as Ee,b3 as Pe,b4 as Ke,b5 as Oe,b6 as Se,b7 as Ce,b8 as Ie,b9 as je,ba as Ae}from"./activity-CiEWAlFW.js";import{$ as Re,a as Me}from"./GridList-ByMoT8kr.js";import{k as Be}from"./Select-BcN72K3H.js";import{D as Le}from"./Delete-CQeLz6oG.js";import{S as Fe,u as $e,$ as ze}from"./ActionGroup-D3mQjUsw.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Checkbox-f7Je53QZ.js";var Ne=function(e){return e[e.none=0]="none",e[e.cancel=0]="cancel",e[e.move=1]="move",e[e.copy=2]="copy",e[e.link=4]="link",e[e.all=7]="all",e}({});const Ve={...Ne,copyMove:3,copyLink:6,linkMove:5,all:7,uninitialized:7},Xe=Ue(Ve);Xe[7]="all";const Ye={none:"cancel",link:"link",copy:"copy",move:"move"},He=Ue(Ye);function Ue(e){let t={};for(let r in e)t[e[r]]=r;return t}const qe=new Set(["text/plain","text/uri-list","text/html"]),Je="application/vnd.react-aria.items+json",Ge="application/octet-stream",We=new WeakMap,_e=Symbol();function Ze(e){let t=new Set;for(let r of e)for(let e of Object.keys(r))t.add(e);return t}function Qe(e){return e||(e="virtual"),"pointer"===e&&(e="virtual"),"virtual"===e&&"undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(pointer: coarse)").matches&&(e="touch"),e}function et(){return Qe(o())}function tt(){return Qe(i())}class rt{constructor(e){this.types=new Set;let t=!1;for(let r of e.items)r.type!==Je&&("file"===r.kind&&(t=!0),r.type?this.types.add(r.type):this.types.add(Ge));this.includesUnknownTypes=!t&&e.types.includes("Files")}has(e){if(Array.isArray(e))return e.some(e=>this.has(e));if(this.includesUnknownTypes||e===_e&&this.types.has(Ge)||"*/*"===e)return!0;if("string"==typeof e){if(e.endsWith("/*")){for(let t of this.types)if(t.startsWith(e.slice(0,-2)))return!0;return!1}return this.types.has(e)}return!1}}function nt(e){if(!e)throw new Error("No file provided");return{kind:"file",type:e.type||Ge,name:e.name,getText:()=>{return"function"==typeof(t=e).text?t.text():new Promise((e,r)=>{let n=new FileReader;n.onload=()=>{e(n.result)},n.onerror=r,n.readAsText(t)});var t},getFile:()=>Promise.resolve(e)}}function ot(e){return{kind:"directory",name:e.name,getEntries:()=>async function*(e){let t,r=e.createReader();do{t=await new Promise((e,t)=>{r.readEntries(e,t)});for(let e of t)if(e.isFile){let t=await it(e);yield nt(t)}else e.isDirectory&&(yield ot(e))}while(t.length>0)}(e)}}function it(e){return new Promise((t,r)=>e.file(t,r))}let at,st={draggingKeys:new Set};function lt(e){st.dropCollectionRef=e}function dt(){st={draggingKeys:new Set}}function ct(e){let{draggingCollectionRef:t,dropCollectionRef:r}=st;return null!=t?.current&&t.current===(e?.current||r?.current)}function pt(e){at=e}let ut=Ne.none;function gt(e){ut=e}let ft=new Map,mt=new Map,ht=null,yt=new Set;function Dt(e){return ft.set(e.element,e),ht?.updateValidDropTargets(),()=>{ft.delete(e.element),ht?.updateValidDropTargets()}}function vt(){let[t,r]=e.useState(ht);return e.useEffect(()=>{let e=()=>r(ht);return yt.add(e),()=>{yt.delete(e)}},[]),t}function bt(){return!!ht}const wt=["pointerdown","pointermove","pointerenter","pointerleave","pointerover","pointerout","pointerup","mousedown","mousemove","mouseenter","mouseleave","mouseover","mouseout","mouseup","touchstart","touchmove","touchend","focusin","focusout"],xt=["pointerup","mouseup","touchend"],Tt={keyboard:"dragStartedKeyboard",touch:"dragStartedTouch",virtual:"dragStartedVirtual"};class kt{constructor(e,t){this.validDropTargets=[],this.currentDropTarget=null,this.currentDropItem=null,this.dropOperation=null,this.mutationObserver=null,this.restoreAriaHidden=null,this.isVirtualClick=!1,this.dragTarget=e,this.stringFormatter=t,this.onKeyDown=this.onKeyDown.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),this.onClick=this.onClick.bind(this),this.onPointerDown=this.onPointerDown.bind(this),this.cancelEvent=this.cancelEvent.bind(this),this.initialFocused=!1}setup(){document.addEventListener("keydown",this.onKeyDown,!0),document.addEventListener("keyup",this.onKeyUp,!0),window.addEventListener("focus",this.onFocus,!0),window.addEventListener("blur",this.onBlur,!0),document.addEventListener("click",this.onClick,!0),document.addEventListener("pointerdown",this.onPointerDown,!0);for(let e of wt)document.addEventListener(e,this.cancelEvent,!0);this.mutationObserver=new MutationObserver(()=>this.updateValidDropTargets()),this.updateValidDropTargets(),a(this.stringFormatter.format(Tt[tt()]))}teardown(){document.removeEventListener("keydown",this.onKeyDown,!0),document.removeEventListener("keyup",this.onKeyUp,!0),window.removeEventListener("focus",this.onFocus,!0),window.removeEventListener("blur",this.onBlur,!0),document.removeEventListener("click",this.onClick,!0),document.removeEventListener("pointerdown",this.onPointerDown,!0);for(let e of wt)document.removeEventListener(e,this.cancelEvent,!0);this.mutationObserver?.disconnect(),this.restoreAriaHidden?.()}onKeyDown(e){this.cancelEvent(e),"Escape"!==e.key?("Tab"!==e.key||e.metaKey||e.altKey||e.ctrlKey||(e.shiftKey?this.previous():this.next()),"function"==typeof this.currentDropTarget?.onKeyDown&&this.currentDropTarget.onKeyDown(e,this.dragTarget)):this.cancel()}onKeyUp(e){this.cancelEvent(e),"Enter"===e.key&&(e.altKey||s(this.getCurrentActivateButton(),l(e))?this.activate(this.currentDropTarget,this.currentDropItem):this.drop())}getCurrentActivateButton(){return this.currentDropItem?.activateButtonRef?.current??this.currentDropTarget?.activateButtonRef?.current??null}onFocus(e){let t=this.getCurrentActivateButton(),r=l(e);if(r===t)return void this.cancelEvent(e);if(r!==this.dragTarget.element&&this.cancelEvent(e),!(r instanceof HTMLElement)||r===this.dragTarget.element)return;let n=this.validDropTargets.find(e=>e.element===r)||this.validDropTargets.find(e=>s(e.element,r));if(!n)return void(this.currentDropTarget?this.currentDropTarget.element.focus():this.dragTarget.element.focus());let o=mt.get(r);n&&this.setCurrentDropTarget(n,o)}onBlur(e){let t=this.getCurrentActivateButton();t&&e.relatedTarget===t?this.cancelEvent(e):(l(e)!==this.dragTarget.element&&this.cancelEvent(e),e.relatedTarget&&e.relatedTarget instanceof HTMLElement||(this.currentDropTarget?this.currentDropTarget.element.focus():this.dragTarget.element.focus()))}onClick(e){if(this.cancelEvent(e),d(e)||this.isVirtualClick){let t=mt.values(),r=l(e),n=[...t].find(e=>e.element===r||s(e.activateButtonRef?.current,r)),o=this.validDropTargets.find(e=>s(e.element,r));if(s(n?.activateButtonRef?.current??o?.activateButtonRef?.current,r)&&o)return void this.activate(o,n);if(l(e)===this.dragTarget.element)return void this.cancel();o&&(this.setCurrentDropTarget(o,n),this.drop(n))}}onPointerDown(e){this.cancelEvent(e),this.isVirtualClick=c(e)}cancelEvent(e){let t=l(e);("focusin"!==e.type&&"focusout"!==e.type||t!==this.dragTarget?.element&&t!==this.getCurrentActivateButton())&&(xt.includes(e.type)||e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation())}updateValidDropTargets(){if(!this.mutationObserver)return;if(this.mutationObserver.disconnect(),this.restoreAriaHidden&&this.restoreAriaHidden(),this.validDropTargets=function(e){let t=Ze(e.items);return[...ft.values()].filter(r=>!r.element.closest('[aria-hidden="true"], [inert]')&&("function"!=typeof r.getDropOperation||"cancel"!==r.getDropOperation(t,e.allowedDropOperations)))}(this.dragTarget),this.validDropTargets.length>0){let e=this.findNearestDropTarget();this.validDropTargets=[...this.validDropTargets.slice(e),...this.validDropTargets.slice(0,e)]}this.currentDropTarget&&!this.validDropTargets.includes(this.currentDropTarget)&&this.setCurrentDropTarget(this.validDropTargets[0]);let e=Ze(this.dragTarget.items),t=[...mt.values()].filter(t=>"function"!=typeof t.getDropOperation||"cancel"!==t.getDropOperation(e,this.dragTarget.allowedDropOperations)),r=this.validDropTargets.filter(e=>!t.some(t=>s(e.element,t.element)));this.restoreAriaHidden=p([this.dragTarget.element,...t.flatMap(e=>e.activateButtonRef?.current?[e.element,e.activateButtonRef?.current]:[e.element]),...r.flatMap(e=>e.activateButtonRef?.current?[e.element,e.activateButtonRef?.current]:[e.element])],{shouldUseInert:!0}),this.mutationObserver.observe(document.body,{subtree:!0,attributes:!0,attributeFilter:["aria-hidden","inert"]})}next(){if(!this.currentDropTarget)return void this.setCurrentDropTarget(this.validDropTargets[0]);let e=this.validDropTargets.indexOf(this.currentDropTarget);e<0?this.setCurrentDropTarget(this.validDropTargets[0]):e===this.validDropTargets.length-1?this.dragTarget.element.closest('[aria-hidden="true"], [inert]')?this.setCurrentDropTarget(this.validDropTargets[0]):(this.setCurrentDropTarget(null),this.dragTarget.element.focus()):this.setCurrentDropTarget(this.validDropTargets[e+1])}previous(){if(!this.currentDropTarget)return void this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length-1]);let e=this.validDropTargets.indexOf(this.currentDropTarget);e<0?this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length-1]):0===e?this.dragTarget.element.closest('[aria-hidden="true"], [inert]')?this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length-1]):(this.setCurrentDropTarget(null),this.dragTarget.element.focus()):this.setCurrentDropTarget(this.validDropTargets[e-1])}findNearestDropTarget(){let e=this.dragTarget.element.getBoundingClientRect(),t=1/0,r=-1,n=-1;for(let o=0;o=0?n:r}setCurrentDropTarget(e,t){if(e!==this.currentDropTarget){if(this.currentDropTarget&&"function"==typeof this.currentDropTarget.onDropExit){let e=this.currentDropTarget.element.getBoundingClientRect();this.currentDropTarget.onDropExit({type:"dropexit",x:e.left+e.width/2,y:e.top+e.height/2})}if(this.currentDropTarget=e,e){if("function"==typeof e.onDropEnter){let t=e.element.getBoundingClientRect();e.onDropEnter({type:"dropenter",x:t.left+t.width/2,y:t.top+t.height/2},this.dragTarget)}t||e?.element.focus()}}if(null!=t&&t!==this.currentDropItem&&(this.currentDropTarget&&"function"==typeof this.currentDropTarget.onDropTargetEnter&&this.currentDropTarget.onDropTargetEnter(t.target),t.element.focus(),this.currentDropItem=t,!this.initialFocused)){let e=t?.element.getAttribute("aria-label");e&&a(e,"polite"),this.initialFocused=!0}}end(){if(this.teardown(),function(){ht=null;for(let e of yt)e()}(),"function"==typeof this.dragTarget.onDragEnd){let e=(this.currentDropTarget&&"cancel"!==this.dropOperation?this.currentDropTarget:this.dragTarget).element.getBoundingClientRect();this.dragTarget.onDragEnd({type:"dragend",x:e.x+e.width/2,y:e.y+e.height/2,dropOperation:this.dropOperation||"cancel"})}this.currentDropTarget&&!this.currentDropTarget.preventFocusOnDrop&&u()?.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),this.setCurrentDropTarget(null)}cancel(){this.setCurrentDropTarget(null),this.end(),this.dragTarget.element.closest('[aria-hidden="true"], [inert]')||this.dragTarget.element.focus(),u()?.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),a(this.stringFormatter.format("dropCanceled"))}drop(e){if(this.currentDropTarget){if("function"==typeof e?.getDropOperation){let t=Ze(this.dragTarget.items);this.dropOperation=e.getDropOperation(t,this.dragTarget.allowedDropOperations)}else if("function"==typeof this.currentDropTarget.getDropOperation){let e=Ze(this.dragTarget.items);this.dropOperation=this.currentDropTarget.getDropOperation(e,this.dragTarget.allowedDropOperations)}else this.dropOperation=this.dragTarget.allowedDropOperations[0];if("function"==typeof this.currentDropTarget.onDrop){let t=this.dragTarget.items.map(e=>({kind:"text",types:new Set(Object.keys(e)),getText:t=>Promise.resolve(e[t])})),r=this.currentDropTarget.element.getBoundingClientRect();this.currentDropTarget.onDrop({type:"drop",x:r.left+r.width/2,y:r.top+r.height/2,items:t,dropOperation:this.dropOperation},e?.target??null)}this.end(),a(this.stringFormatter.format("dropComplete"))}else this.cancel()}activate(e,t){if(e&&"function"==typeof e.onDropActivate){let r=t?.target??null,n=e.element.getBoundingClientRect();e.onDropActivate({type:"dropactivate",x:n.left+n.width/2,y:n.top+n.height/2},r)}}}var Et;Et={"ar-AE":g,"bg-BG":g,"cs-CZ":g,"da-DK":g,"de-DE":g,"el-GR":g,"en-US":{dragItem:e=>`Drag ${e.itemText}`,dragSelectedItems:(e,t)=>`Drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}`,dragDescriptionKeyboard:"Press Enter to start dragging.",dragDescriptionKeyboardAlt:"Press Alt + Enter to start dragging.",dragDescriptionTouch:"Double tap to start dragging.",dragDescriptionVirtual:"Click to start dragging.",dragDescriptionLongPress:"Long press to start dragging.",dragSelectedKeyboard:(e,t)=>`Press Enter to drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}.`,dragSelectedKeyboardAlt:(e,t)=>`Press Alt + Enter to drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}.`,dragSelectedLongPress:(e,t)=>`Long press to drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}.`,dragStartedKeyboard:"Started dragging. Press Tab to navigate to a drop target, then press Enter to drop, or press Escape to cancel.",dragStartedTouch:"Started dragging. Navigate to a drop target, then double tap to drop.",dragStartedVirtual:"Started dragging. Navigate to a drop target, then click or press Enter to drop.",endDragKeyboard:"Dragging. Press Enter to cancel drag.",endDragTouch:"Dragging. Double tap to cancel drag.",endDragVirtual:"Dragging. Click to cancel drag.",dropDescriptionKeyboard:"Press Enter to drop. Press Escape to cancel drag.",dropDescriptionTouch:"Double tap to drop.",dropDescriptionVirtual:"Click to drop.",dropCanceled:"Drop canceled.",dropComplete:"Drop complete.",dropIndicator:"drop indicator",dropOnRoot:"Drop on",dropOnItem:e=>`Drop on ${e.itemText}`,insertBefore:e=>`Insert before ${e.itemText}`,insertBetween:e=>`Insert between ${e.beforeItemText} and ${e.afterItemText}`,insertAfter:e=>`Insert after ${e.itemText}`},"es-ES":g,"et-EE":g,"fi-FI":g,"fr-FR":g,"he-IL":g,"hr-HR":g,"hu-HU":g,"it-IT":g,"ja-JP":g,"ko-KR":g,"lt-LT":g,"lv-LV":g,"nb-NO":g,"nl-NL":g,"pl-PL":g,"pt-BR":g,"pt-PT":g,"ro-RO":g,"ru-RU":g,"sk-SK":g,"sl-SI":g,"sr-SP":g,"sv-SE":g,"tr-TR":g,"uk-UA":g,"zh-CN":{dragDescriptionKeyboard:"按 Enter 开始拖动。",dragDescriptionKeyboardAlt:"按 Alt + Enter 开始拖动。",dragDescriptionLongPress:"长按以开始拖动。",dragDescriptionTouch:"双击开始拖动。",dragDescriptionVirtual:"单击开始拖动。",dragItem:e=>`拖动 ${e.itemText}`,dragSelectedItems:(e,t)=>`拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 选中项目`,other:()=>`${t.number(e.count)} 选中项目`})}`,dragSelectedKeyboard:(e,t)=>`按 Enter 以拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 个选定项`,other:()=>`${t.number(e.count)} 个选定项`})}。`,dragSelectedKeyboardAlt:(e,t)=>`按 Alt + Enter 以拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 个选定项`,other:()=>`${t.number(e.count)} 个选定项`})}。`,dragSelectedLongPress:(e,t)=>`长按以拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 个选定项`,other:()=>`${t.number(e.count)} 个选定项`})}。`,dragStartedKeyboard:"已开始拖动。按 Tab 导航到放置目标,然后按 Enter 放置或按 Escape 取消。",dragStartedTouch:"已开始拖动。导航到放置目标,然后双击放置。",dragStartedVirtual:"已开始拖动。导航到放置目标,然后单击或按 Enter 放置。",dropCanceled:"放置已取消。",dropComplete:"放置已完成。",dropDescriptionKeyboard:"按 Enter 放置。按 Escape 取消拖动。",dropDescriptionTouch:"双击放置。",dropDescriptionVirtual:"单击放置。",dropIndicator:"放置标记",dropOnItem:e=>`放置于 ${e.itemText}`,dropOnRoot:"放置于",endDragKeyboard:"正在拖动。按 Enter 取消拖动。",endDragTouch:"正在拖动。双击取消拖动。",endDragVirtual:"正在拖动。单击取消拖动。",insertAfter:e=>`插入到 ${e.itemText} 之后`,insertBefore:e=>`插入到 ${e.itemText} 之前`,insertBetween:e=>`插入到 ${e.beforeItemText} 和 ${e.afterItemText} 之间`},"zh-TW":{dragDescriptionKeyboard:"按 Enter 鍵以開始拖曳。",dragDescriptionKeyboardAlt:"按 Alt+Enter 鍵以開始拖曳。",dragDescriptionLongPress:"長按以開始拖曳。",dragDescriptionTouch:"輕點兩下以開始拖曳。",dragDescriptionVirtual:"按一下滑鼠以開始拖曳。",dragItem:e=>`拖曳「${e.itemText}」`,dragSelectedItems:(e,t)=>`拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}`,dragSelectedKeyboard:(e,t)=>`按 Enter 鍵以拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}。`,dragSelectedKeyboardAlt:(e,t)=>`按 Alt+Enter 鍵以拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}。`,dragSelectedLongPress:(e,t)=>`長按以拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}。`,dragStartedKeyboard:"已開始拖曳。按 Tab 鍵以瀏覽至放置目標,然後按 Enter 鍵以放置,或按 Escape 鍵以取消。",dragStartedTouch:"已開始拖曳。瀏覽至放置目標,然後輕點兩下以放置。",dragStartedVirtual:"已開始拖曳。瀏覽至放置目標,然後按一下滑鼠或按 Enter 鍵以放置。",dropCanceled:"放置已取消。",dropComplete:"放置已完成。",dropDescriptionKeyboard:"按 Enter 鍵以放置。按 Escape 鍵以取消拖曳。",dropDescriptionTouch:"輕點兩下以放置。",dropDescriptionVirtual:"按一下滑鼠以放置。",dropIndicator:"放置指示器",dropOnItem:e=>`放置在「${e.itemText}」上`,dropOnRoot:"放置在",endDragKeyboard:"拖曳中。按 Enter 鍵以取消拖曳。",endDragTouch:"拖曳中。輕點兩下以取消拖曳。",endDragVirtual:"拖曳中。按一下滑鼠以取消拖曳。",insertAfter:e=>`插入至「${e.itemText}」之後`,insertBefore:e=>`插入至「${e.itemText}」之前`,insertBetween:e=>`插入至「${e.beforeItemText}」和「${e.afterItemText}」之間`}};const Pt={keyboard:{start:"dragDescriptionKeyboard",end:"endDragKeyboard"},touch:{start:"dragDescriptionTouch",end:"endDragTouch"},virtual:{start:"dragDescriptionVirtual",end:"endDragVirtual"}};function Kt(t){let{hasDragButton:r,isDisabled:n}=t,o=f((i=Et)&&i.__esModule?i.default:i,"@react-aria/dnd");var i;let a=e.useRef({options:t,x:0,y:0}).current;a.options=t;let s=e.useRef(null),[p,u]=e.useState(!1),g=e=>{s.current=e,u(!!e)},{addGlobalListener:v,removeAllGlobalListeners:b}=m(),w=e.useRef(null);e.useEffect(()=>()=>{if(s.current&&(!s.current.isConnected||parseInt(e.version,10)<17)){if("function"==typeof a.options.onDragEnd){let e={type:"dragend",x:0,y:0,dropOperation:Ye[at||"none"]};a.options.onDragEnd(e)}g(null),gt(Ne.none),pt(void 0)}},[a]);let x=e=>{if("function"==typeof a.options.onDragStart){let t=e.getBoundingClientRect();a.options.onDragStart({type:"dragstart",x:t.x+t.width/2,y:t.y+t.height/2})}!function(e,t){if(ht)throw new Error("Cannot begin dragging while already dragging");ht=new kt(e,t),requestAnimationFrame(()=>{ht&&(ht.setup(),"keyboard"===tt()&&ht.next())});for(let r of yt)r()}({element:e,items:a.options.getItems(),allowedDropOperations:"function"==typeof a.options.getAllowedDropOperations?a.options.getAllowedDropOperations():["move","copy","link"],onDragEnd(e){g(null),"function"==typeof a.options.onDragEnd&&a.options.onDragEnd(e)}},o),g(e)},T=et(),k=p?Pt[T].end:Pt[T].start,E=h(o.format(k)),P={};return r||(P={...E,onPointerDown(e){if(w.current=c(e.nativeEvent)?"virtual":e.pointerType,e.width<1&&e.height<1&&y()&&D())w.current="virtual";else{let t=e.currentTarget.getBoundingClientRect(),r=e.clientX-t.x,n=e.clientY-t.y,o=t.width/2,i=t.height/2;Math.abs(r-o)<=.5&&Math.abs(n-i)<=.5?w.current="virtual":w.current=e.pointerType}},onKeyDownCapture(e){l(e)===e.currentTarget&&"Enter"===e.key&&(e.preventDefault(),e.stopPropagation())},onKeyUpCapture(e){l(e)===e.currentTarget&&"Enter"===e.key&&(e.preventDefault(),e.stopPropagation(),x(l(e)))},onClick(e){(d(e.nativeEvent)||"virtual"===w.current)&&(e.preventDefault(),e.stopPropagation(),x(l(e)))}}),n?{dragProps:{draggable:"false"},dragButtonProps:{},isDragging:!1}:{dragProps:{...P,draggable:"true",onDragStart:e=>{if(e.defaultPrevented)return;if(e.stopPropagation(),"virtual"===w.current)return e.preventDefault(),x(l(e)),void(w.current=null);"function"==typeof t.onDragStart&&t.onDragStart({type:"dragstart",x:e.clientX,y:e.clientY});let r=t.getItems();e.dataTransfer.clearData?.(),function(e,t){let r=new Map,n=!1,o=[];for(let i of t){let e=Object.keys(i);e.length>1&&(n=!0);let t={};for(let o of e){let e=r.get(o);e?n=!0:(e=[],r.set(o,e));let a=i[o];t[o]=a,e.push(a)}o.push(t)}for(let[i,a]of r)if(qe.has(i)){let t=a.join("\n");e.items.add(t,i)}else e.items.add(a[0],i);if(n){let t=JSON.stringify(o);e.items.add(t,Je)}}(e.dataTransfer,r);let n=Ne.all;if("function"==typeof t.getAllowedDropOperations){let e=t.getAllowedDropOperations();n=Ne.none;for(let t of e)n|=Ne[t]||Ne.none}gt(n);let o=Xe[n]||"none";e.dataTransfer.effectAllowed="cancel"===o?"none":o,"function"==typeof t.preview?.current&&t.preview.current(r,(t,r,n)=>{if(!t)return;let o=t.getBoundingClientRect(),i=e.currentTarget.getBoundingClientRect(),a=e.clientX-i.x,s=e.clientY-i.y;(a>o.width||s>o.height)&&(a=o.width/2,s=o.height/2);let l=a,d=s;"number"==typeof r&&"number"==typeof n&&(l=r,d=n),l=Math.max(0,Math.min(l,o.width)),d=Math.max(0,Math.min(d,o.height));let c=2*Math.round(o.height/2);t.style.height=`${c}px`,e.dataTransfer.setDragImage(t,l,d)}),v(window,"drop",e=>{e.preventDefault(),e.stopPropagation(),console.warn("Drags initiated from the React Aria useDrag hook may only be dropped on a target created with useDrop. This ensures that a keyboard and screen reader accessible alternative is available.")},{once:!0}),a.x=e.clientX,a.y=e.clientY;let i=l(e);requestAnimationFrame(()=>{g(i)})},onDrag:e=>{e.stopPropagation(),e.clientX===a.x&&e.clientY===a.y||("function"==typeof t.onDragMove&&t.onDragMove({type:"dragmove",x:e.clientX,y:e.clientY}),a.x=e.clientX,a.y=e.clientY)},onDragEnd:e=>{if(e.stopPropagation(),"function"==typeof t.onDragEnd){let r={type:"dragend",x:e.clientX,y:e.clientY,dropOperation:Ye[e.dataTransfer.dropEffect]};at&&(r.dropOperation=Ye[at]),t.onDragEnd(r)}g(null),b(),gt(Ne.none),pt(void 0)}},dragButtonProps:{...E,onPress:e=>{"keyboard"!==e.pointerType&&"virtual"!==e.pointerType||x(e.target)}},isDragging:p}}const Ot={keyboard:"dropDescriptionKeyboard",touch:"dropDescriptionTouch",virtual:"dropDescriptionVirtual"};function St(){let e=f((t=Et)&&t.__esModule?t.default:t,"@react-aria/dnd");var t;let r=et(),n=vt();return{dropProps:{...h(n?e.format(Ot[r]):""),onClick:()=>{}}}}function Ct(t){let{hasDropButton:r,isDisabled:n}=t,[o,i]=e.useState(!1),a=e.useRef({x:0,y:0,dragOverElements:new Set,dropEffect:"none",allowedOperations:Ne.all,dropActivateTimer:void 0}).current,d=e=>{if(i(!0),"function"==typeof t.onDropEnter){let r=e.currentTarget.getBoundingClientRect();t.onDropEnter({type:"dropenter",x:e.clientX-r.x,y:e.clientY-r.y})}},c=e=>{if(i(!1),"function"==typeof t.onDropExit){let r=e.currentTarget.getBoundingClientRect();t.onDropExit({type:"dropexit",x:e.clientX-r.x,y:e.clientY-r.y})}},p=v(e=>{"function"==typeof t.onDropEnter&&t.onDropEnter(e)}),u=v(e=>{"function"==typeof t.onDropExit&&t.onDropExit(e)}),g=v(e=>{"function"==typeof t.onDropActivate&&t.onDropActivate(e)}),f=v(e=>{"function"==typeof t.onDrop&&t.onDrop(e)}),m=v((e,r)=>t.getDropOperation?t.getDropOperation(e,r):r[0]),{ref:h}=t;b(()=>{if(!n&&h.current)return Dt({element:h.current,getDropOperation:m,onDropEnter(e){i(!0),p(e)},onDropExit(e){i(!1),u(e)},onDrop:f,onDropActivate:g})},[n,h]);let{dropProps:y}=St();return n?{dropProps:{},dropButtonProps:{isDisabled:!0},isDropTarget:!1}:{dropProps:{...!r&&y,onDragEnter:e=>{if(e.preventDefault(),e.stopPropagation(),a.dragOverElements.add(l(e)),a.dragOverElements.size>1)return;let r=It(e),n=jt(r),o=n[0];if("function"==typeof t.getDropOperation){let i=new rt(e.dataTransfer);o=At(r,t.getDropOperation(i,n))}if("function"==typeof t.getDropOperationForPoint){let i=new rt(e.dataTransfer),a=e.currentTarget.getBoundingClientRect();o=At(r,t.getDropOperationForPoint(i,n,e.clientX-a.x,e.clientY-a.y))}a.x=e.clientX,a.y=e.clientY,a.allowedOperations=r,a.dropEffect=He[o]||"none",e.dataTransfer.dropEffect=a.dropEffect,"cancel"!==o&&d(e)},onDragOver:e=>{e.preventDefault(),e.stopPropagation();let r=It(e);if(e.clientX===a.x&&e.clientY===a.y&&r===a.allowedOperations)return void(e.dataTransfer.dropEffect=a.dropEffect);a.x=e.clientX,a.y=e.clientY;let n=a.dropEffect;if(r!==a.allowedOperations){let n=jt(r),o=n[0];if("function"==typeof t.getDropOperation){let i=new rt(e.dataTransfer);o=At(r,t.getDropOperation(i,n))}a.dropEffect=He[o]||"none"}if("function"==typeof t.getDropOperationForPoint){let n=new rt(e.dataTransfer),o=e.currentTarget.getBoundingClientRect(),i=At(r,t.getDropOperationForPoint(n,jt(r),a.x-o.x,a.y-o.y));a.dropEffect=He[i]||"none"}if(a.allowedOperations=r,e.dataTransfer.dropEffect=a.dropEffect,"none"===a.dropEffect&&"none"!==n?c(e):"none"!==a.dropEffect&&"none"===n&&d(e),"function"==typeof t.onDropMove&&"none"!==a.dropEffect){let r=e.currentTarget.getBoundingClientRect();t.onDropMove({type:"dropmove",x:a.x-r.x,y:a.y-r.y})}if(clearTimeout(a.dropActivateTimer),t.onDropActivate&&"function"==typeof t.onDropActivate&&"none"!==a.dropEffect){let r=t.onDropActivate,n=e.currentTarget.getBoundingClientRect();a.dropActivateTimer=setTimeout(()=>{r({type:"dropactivate",x:a.x-n.x,y:a.y-n.y})},800)}},onDragLeave:e=>{e.preventDefault(),e.stopPropagation();let t=l(e);if(a.dragOverElements.delete(t),t===e.currentTarget)for(let r of a.dragOverElements)s(e.currentTarget,r)||a.dragOverElements.delete(r);a.dragOverElements.size>0||("none"!==a.dropEffect&&c(e),clearTimeout(a.dropActivateTimer))},onDrop:e=>{if(e.preventDefault(),e.stopPropagation(),pt(a.dropEffect),"function"==typeof t.onDrop){let r=Ye[a.dropEffect],n=function(e){let t=[];if(!e)return t;let r=!1;if(e.types.includes(Je))try{let n=e.getData(Je),o=JSON.parse(n);for(let e of o)t.push({kind:"text",types:new Set(Object.keys(e)),getText:t=>Promise.resolve(e[t])});r=!0}catch{}if(!r){let r=new Map;for(let n of e.items)if("string"===n.kind)r.set(n.type||Ge,e.getData(n.type));else if("file"===n.kind)if("function"==typeof n.webkitGetAsEntry){let e=n.webkitGetAsEntry();if(!e)continue;e.isFile?t.push(nt(n.getAsFile())):e.isDirectory&&t.push(ot(e))}else t.push(nt(n.getAsFile()));r.size>0&&t.push({kind:"text",types:new Set(r.keys()),getText:e=>Promise.resolve(r.get(e))})}return t}(e.dataTransfer),o=e.currentTarget.getBoundingClientRect(),i={type:"drop",x:e.clientX-o.x,y:e.clientY-o.y,items:n,dropOperation:r};t.onDrop(i)}let r={...st};a.dragOverElements.clear(),c(e),clearTimeout(a.dropActivateTimer),null==r.draggingCollectionRef?pt(void 0):function(e){st=e}(r)}},dropButtonProps:{...r&&y},isDropTarget:o}}function It(e){let t=Ve[e.dataTransfer.effectAllowed];ut&&(t&=ut);let r=Ne.none;return w()?(e.altKey&&(r|=Ne.copy),e.ctrlKey&&!x()&&(r|=Ne.link),e.metaKey&&(r|=Ne.move)):(e.altKey&&(r|=Ne.link),e.shiftKey&&(r|=Ne.move),e.ctrlKey&&(r|=Ne.copy)),r?t&r:t}function jt(e){let t=[];return e&Ne.move&&t.push("move"),e&Ne.copy&&t.push("copy"),e&Ne.link&&t.push("link"),t}function At(e,t){return e&Ne[t]?t:"cancel"}function Rt(e,t,r){let{draggingCollectionRef:n}=st;t.draggingKeys.size>0&&n?.current!==r.current&&function(e){st.draggingCollectionRef=e}(r)}function Mt(e,t,r,n=!1,o=null){if(!r)return{type:"root"};if("root"===r.type){let t=e.getFirstKey?.()??null;return null!=t?{type:"item",key:t,dropPosition:"before"}:null}if("item"===r.type){let n=null;n=o?"right"===o?e.getKeyRightOf?.(r.key,{includeDisabled:!0}):e.getKeyLeftOf?.(r.key,{includeDisabled:!0}):e.getKeyBelow?.(r.key,{includeDisabled:!0});let i=Ft(t,r.key,e=>t.getKeyAfter(e));if(null!=n&&n!==i)return{type:"item",key:n,dropPosition:r.dropPosition};switch(r.dropPosition){case"before":return{type:"item",key:r.key,dropPosition:"on"};case"on":{let e=t.getItem(r.key),o=null!=n?t.getItem(n):null;return e&&o&&o.level>=e.level?{type:"item",key:o.key,dropPosition:"before"}:{type:"item",key:r.key,dropPosition:"after"}}case"after":{let e=t.getItem(r.key),n=null!=e?.nextKey?t.getItem(e.nextKey):null;for(;null!=n&&"item"!==n.type;)n=null!=n.nextKey?t.getItem(n.nextKey):null;if(e&&null==n&&null!=e.parentKey){let r=t.getItem(e.parentKey);const n=null!=r?.nextKey?t.getItem(r.nextKey):null;if("item"===n?.type)return{type:"item",key:n.key,dropPosition:"before"};if("item"===r?.type)return{type:"item",key:r.key,dropPosition:"after"}}if(n)return{type:"item",key:n.key,dropPosition:"on"}}}}return n?{type:"root"}:null}function Bt(e,t,r,n=!1,o=null){if(!r||n&&"root"===r.type){let r=null,n=e.getLastKey?.();for(;null!=n;){let e=t.getItem(n);if("item"!==e?.type)break;r=n,n=e?.parentKey}return null!=r?{type:"item",key:r,dropPosition:"after"}:null}if("item"===r.type){let n=null;n=o?"left"===o?e.getKeyLeftOf?.(r.key,{includeDisabled:!0}):e.getKeyRightOf?.(r.key,{includeDisabled:!0}):e.getKeyAbove?.(r.key,{includeDisabled:!0});let i=Ft(t,r.key,e=>t.getKeyBefore(e));if(null!=n&&n!==i)return{type:"item",key:n,dropPosition:r.dropPosition};switch(r.dropPosition){case"before":{let e=t.getItem(r.key);if(e&&null!=e.prevKey){let r=Lt(t,e.prevKey);if(r)return r}return null!=n?{type:"item",key:n,dropPosition:"on"}:{type:"root"}}case"on":return{type:"item",key:r.key,dropPosition:"before"};case"after":{let e=Lt(t,r.key);return e||{type:"item",key:r.key,dropPosition:"on"}}}}return"root"!==r.type?{type:"root"}:null}function Lt(e,t){let r=e.getItem(t),n=Ft(e,t,t=>e.getKeyAfter(t)),o=null!=n?e.getItem(n):null;if(r&&o&&o.level>r.level){let t=null;if("lastChildKey"in r)for(t=null!=r.lastChildKey?e.getItem(r.lastChildKey):null;t&&"item"!==t.type&&null!=t.prevKey;)t=e.getItem(t.prevKey);else t=Array.from(r.childNodes).findLast(e=>"item"===e.type)||null;if(t)return{type:"item",key:t.key,dropPosition:"after"}}return null}function Ft(e,t,r){let n=r(t),o=null!=n?e.getItem(n):null;for(;o&&"item"!==o.type;)n=r(o.key),o=null!=n?e.getItem(n):null;return n}function $t(t,r,n){let o=e.useRef({props:t,state:r,nextTarget:null,dropOperation:null}).current;o.props=t,o.state=r;let i=e.useCallback(async e=>{let{onInsert:t,onRootDrop:r,onItemDrop:i,onReorder:a,onMove:s,acceptedDragTypes:l="all",shouldAcceptItemDrop:d}=o.props,{draggingKeys:c}=st,p=ct(n),{target:u,dropOperation:g,items:f}=e,m=f;("all"!==l||d)&&(m=f.filter(e=>{let t;return t="directory"===e.kind?new Set([_e]):"file"===e.kind?new Set([e.type]):e.types,!("all"!==l&&!l.some(e=>t.has(e)))&&("item"!==u.type||"on"!==u.dropPosition||!d||d(u,t))})),m.length>0&&("root"===u.type&&r&&await r({items:m,dropOperation:g}),"item"===u.type&&("on"===u.dropPosition&&i&&await i({items:m,dropOperation:g,isInternal:p,target:u}),s&&p&&await s({keys:c,dropOperation:g,target:u}),"on"!==u.dropPosition&&(!p&&t&&await t({items:m,dropOperation:g,target:u}),p&&a&&await a({keys:c,dropOperation:g,target:u}))))},[o,n]),a=function(t){let r=e.useRef(null),n=e.useRef(!0),o=e.useRef(!0);e.useEffect(()=>{if(t.current){r.current=T(t.current)?t.current:k(t.current);let e=window.getComputedStyle(r.current);n.current=/(auto|scroll)/.test(e.overflowX),o.current=/(auto|scroll)/.test(e.overflowY)}},[t]);let i=e.useRef({timer:void 0,dx:0,dy:0}).current;e.useEffect(()=>()=>{i.timer&&(cancelAnimationFrame(i.timer),i.timer=void 0)},[i]);let a=e.useCallback(()=>{n.current&&r.current&&(r.current.scrollLeft+=i.dx),o.current&&r.current&&(r.current.scrollTop+=i.dy),i.timer&&(i.timer=requestAnimationFrame(a))},[r,i]);return{move(e,t){if(!D()||y()||!r.current)return;let n=r.current.getBoundingClientRect(),o=n.height-20,s=n.width-20;e<20||e>s||t<20||t>o?(e<20?i.dx=e-20:e>s&&(i.dx=e-s),t<20?i.dy=t-20:t>o&&(i.dy=t-o),i.timer||(i.timer=requestAnimationFrame(a))):this.stop()},stop(){i.timer&&(cancelAnimationFrame(i.timer),i.timer=void 0)}}}(n),{dropProps:s}=Ct({ref:n,onDropEnter(){null!=o.nextTarget&&r.setTarget(o.nextTarget)},onDropMove(e){null!=o.nextTarget&&r.setTarget(o.nextTarget),a.move(e.x,e.y)},getDropOperationForPoint(e,i,a,s){let{draggingKeys:l,dropCollectionRef:d}=st,c=ct(n),p=t.dropTargetDelegate.getDropTargetFromPoint(a,s,t=>"cancel"!==r.getDropOperation({target:t,types:e,allowedOperations:i,isInternal:c,draggingKeys:l}));if(!p)return o.dropOperation="cancel",o.nextTarget=null,"cancel";if(o.dropOperation=r.getDropOperation({target:p,types:e,allowedOperations:i,isInternal:c,draggingKeys:l}),"cancel"===o.dropOperation){let t={type:"root"},n=r.getDropOperation({target:t,types:e,allowedOperations:i,isInternal:c,draggingKeys:l});"cancel"!==n&&(p=t,o.dropOperation=n)}return p&&"cancel"!==o.dropOperation&&n?.current!==d?.current&<(n),o.nextTarget="cancel"===o.dropOperation?null:p,o.dropOperation},onDropExit(){lt(void 0),r.setTarget(null),a.stop()},onDropActivate(e){"item"===r.target?.type&&"function"==typeof t.onDropActivate&&t.onDropActivate({type:"dropactivate",x:e.x,y:e.y,target:r.target})},onDrop(e){lt(n),r.target&&c(e,r.target);let{draggingCollectionRef:t}=st;null==t&&dt()}}),l=e.useRef(null),d=e.useCallback(()=>{let{state:e}=o;if(l.current){let{target:t,collection:r,selectedKeys:n,focusedKey:o,isInternal:i,draggingKeys:a}=l.current;if(e.collection.size>r.size&&e.selectionManager.isSelectionEqual(n)){let t=new Set,n=e.collection.getFirstKey();for(;null!=n;){let o=e.collection.getItem(n);"item"!==o?.type||r.getItem(o.key)||t.add(o.key),n=o?.hasChildNodes&&"item"===e.collection.getItem(o.lastChildKey)?.type?o.firstChildKey:e.collection.getKeyAfter(n)}if(e.selectionManager.setSelectedKeys(t),e.selectionManager.focusedKey===o){let r=t.keys().next().value;if(null!=r){let t=e.collection.getItem(r),n=l.current.target,o=!!e.collection.expandedKeys&&e.collection.expandedKeys.has(t?.parentKey);t&&("cell"===t?.type||"item"===n.type&&"on"===n.dropPosition&&!o)&&(r=t.parentKey),null!=r&&e.selectionManager.setFocusedKey(r),"none"===e.selectionManager.selectionMode&&E("keyboard")}}}else null!=o&&e.selectionManager.focusedKey===o&&i&&"item"===t.type&&"on"!==t.dropPosition&&a.has(e.collection.getItem(o)?.parentKey)?(e.selectionManager.setFocusedKey(e.collection.getItem(o)?.parentKey??null),E("keyboard")):e.selectionManager.focusedKey===o&&"item"===t.type&&"on"===t.dropPosition&&null!=e.collection.getItem(t.key)?(e.selectionManager.setFocusedKey(t.key),E("keyboard")):null==e.selectionManager.focusedKey||e.selectionManager.isSelected(e.selectionManager.focusedKey)||E("keyboard");e.selectionManager.setFocused(!0)}},[o]),c=e.useCallback((e,t)=>{let{state:r}=o;l.current={timeout:void 0,focusedKey:r.selectionManager.focusedKey,collection:r.collection,selectedKeys:r.selectionManager.selectedKeys,draggingKeys:st.draggingKeys,isInternal:ct(n),target:t},(o.props.onDrop||i)({type:"drop",x:e.x,y:e.y,target:t,items:e.items,dropOperation:e.dropOperation}),l.current.timeout=setTimeout(()=>{d(),l.current=null},50)},[o,i,n,d]);e.useEffect(()=>()=>{l.current&&clearTimeout(l.current.timeout)},[]),b(()=>{l.current&&r.collection!==l.current.collection&&d()});let{direction:p}=P();e.useEffect(()=>{if(!n.current)return;let e=(e,t=!0,r="down")=>function(e,t,r,n,o=!1,i=!1){switch(n){case"left":return o?Mt(e,t,r,i,"left"):Bt(e,t,r,i,"left");case"right":return o?Bt(e,t,r,i,"right"):Mt(e,t,r,i,"right");case"up":return Bt(e,t,r,i);case"down":return Mt(e,t,r,i)}}(o.props.keyboardDelegate,o.state.collection,e,r,"rtl"===p,t),t=(t,r=!0)=>e(t,r,"up"),r=(e,t,r,i,a=!0)=>{let s,l=0,{draggingKeys:d}=st,c=ct(n);do{let n=i(e,a);if(!n)return null;e=n,s=o.state.getDropOperation({target:n,types:t,allowedOperations:r,isInternal:c,draggingKeys:d}),"root"===e.type&&l++}while("cancel"===s&&!o.state.isDropTarget(e)&&l<2);return"cancel"===s?null:e};return Dt({element:n.current,preventFocusOnDrop:!0,getDropOperation(t,i){if(o.state.target){let{draggingKeys:e}=st,r=ct(n);return o.state.getDropOperation({target:o.state.target,types:t,allowedOperations:i,isInternal:r,draggingKeys:e})}return r(null,t,i,e)?"move":"cancel"},onDropEnter(i,a){let s=Ze(a.items),l=o.state.selectionManager,d=null;lt(n);let c=l.focusedKey,p="after",u=null!=c?o.state.collection.getItem(c):null;if("cell"===u?.type&&(c=u.parentKey),null!=c&&l.isSelected(c)&&(l.selectedKeys.size>1&&l.firstSelectedKey===c?p="before":c=l.lastSelectedKey),null!=c){d={type:"item",key:c,dropPosition:p};let{draggingKeys:i}=st,l=ct(n);"cancel"===o.state.getDropOperation({target:d,types:s,allowedOperations:a.allowedDropOperations,isInternal:l,draggingKeys:i})&&(d=r(d,s,a.allowedDropOperations,e,!1)??r(d,s,a.allowedDropOperations,t,!1))}d||(d=r(null,s,a.allowedDropOperations,e)),o.state.setTarget(d)},onDropExit(){lt(void 0),o.state.setTarget(null)},onDropTargetEnter(e){o.state.setTarget(e)},onDropActivate(e,t){"item"===t?.type&&"on"===t?.dropPosition&&"function"==typeof o.props.onDropActivate&&o.props.onDropActivate({type:"dropactivate",x:e.x,y:e.y,target:t})},onDrop(e,t){lt(n),o.state.target&&c(e,t||o.state.target)},onKeyDown(i,a){let{keyboardDelegate:s}=o.props,l=Ze(a.items);switch(i.key){case"ArrowDown":if(s.getKeyBelow){let t=r(o.state.target,l,a.allowedDropOperations,(t,r)=>e(t,r,"down"));o.state.setTarget(t)}break;case"ArrowUp":if(s.getKeyAbove){let t=r(o.state.target,l,a.allowedDropOperations,(t,r)=>e(t,r,"up"));o.state.setTarget(t)}break;case"ArrowLeft":if(s.getKeyLeftOf){let t=r(o.state.target,l,a.allowedDropOperations,(t,r)=>e(t,r,"left"));o.state.setTarget(t)}break;case"ArrowRight":if(s.getKeyRightOf){let t=r(o.state.target,l,a.allowedDropOperations,(t,r)=>e(t,r,"right"));o.state.setTarget(t)}break;case"Home":if(s.getFirstKey){let t=r(null,l,a.allowedDropOperations,e);o.state.setTarget(t)}break;case"End":if(s.getLastKey){let e=r(null,l,a.allowedDropOperations,t);o.state.setTarget(e)}break;case"PageDown":if(s.getKeyPageBelow){let i=o.state.target;if(i){let d=s.getFirstKey?.();"item"===i.type&&(d=i.key);let c=null;null!=d&&(c=s.getKeyPageBelow(d));let p="item"===i.type?i.dropPosition:"after";if((null==c||"item"===i.type&&i.key===s.getLastKey?.())&&(c=s.getLastKey?.()??null,p="after"),null==c)break;i={type:"item",key:c,dropPosition:p};let{draggingCollectionRef:u,draggingKeys:g}=st,f=u?.current===n?.current;"cancel"===o.state.getDropOperation({target:i,types:l,allowedOperations:a.allowedDropOperations,isInternal:f,draggingKeys:g})&&(i=r(i,l,a.allowedDropOperations,e,!1)??r(i,l,a.allowedDropOperations,t,!1))}else i=r(null,l,a.allowedDropOperations,e);o.state.setTarget(i??o.state.target)}break;case"PageUp":{if(!s.getKeyPageAbove)break;let i=o.state.target;if(i){if("item"===i.type){if(i.key===s.getFirstKey?.())i={type:"root"};else{let e=s.getKeyPageAbove(i.key),t=i.dropPosition;if(null==e&&(e=s.getFirstKey?.(),t="before"),null==e)break;i={type:"item",key:e,dropPosition:t}}let{draggingKeys:d}=st,c=ct(n);"cancel"===o.state.getDropOperation({target:i,types:l,allowedOperations:a.allowedDropOperations,isInternal:c,draggingKeys:d})&&(i=r(i,l,a.allowedDropOperations,t,!1)??r(i,l,a.allowedDropOperations,e,!1))}}else i=r(null,l,a.allowedDropOperations,t);o.state.setTarget(i??o.state.target);break}}o.props.onKeyDown?.(i)}})},[o,n,c,p]);let u=K();return We.set(r,{id:u,ref:n}),{collectionProps:O(s,{id:u,"aria-describedby":null})}}function zt(t,r,n){let{dropProps:o}=St(),i=function(e){let{ref:t}=We.get(e)||{};if(!t)throw new Error("Droppable item outside a droppable collection");return t}(r);e.useEffect(()=>{if(n.current)return e={element:n.current,target:t.target,getDropOperation(e,n){let{draggingKeys:o}=st,a=ct(i);return r.getDropOperation({target:t.target,types:e,allowedOperations:n,isInternal:a,draggingKeys:o})},activateButtonRef:t.activateButtonRef},mt.set(e.element,e),()=>{mt.delete(e.element)};var e},[n,t.target,r,i,t.activateButtonRef]);let a=vt(),{draggingKeys:s}=st,l=ct(i),d=a&&"cancel"!==r.getDropOperation({target:t.target,types:Ze(a.dragTarget.items),allowedOperations:a.dragTarget.allowedDropOperations,isInternal:l,draggingKeys:s}),c=r.isDropTarget(t.target);return e.useEffect(()=>{a&&c&&n.current&&n.current.focus()},[c,a,n]),{dropProps:{...o,"aria-hidden":!a||d?void 0:"true"},isDropTarget:c}}function Nt(e,t,r){let{target:n}=e,{collection:o}=t,i=f((a=Et)&&a.__esModule?a.default:a,"@react-aria/dnd");var a;let s,l=vt(),{dropProps:d}=zt(e,t,r),c=K(),p=e=>null==e?"":o.getTextValue?.(e)??o.getItem(e)?.textValue??"",u="";if("root"===n.type)u=i.format("dropOnRoot"),s=`${c} ${function(e){let{id:t}=We.get(e)||{};if(!t)throw new Error("Droppable item outside a droppable collection");return t}(t)}`;else if("on"===n.dropPosition)u=i.format("dropOnItem",{itemText:p(n.key)});else{let e,t;if("before"===n.dropPosition){let t=o.getItem(n.key)?.prevKey,r=null!=t?o.getItem(t):null;e="item"===r?.type?r.key:null}else e=n.key;if("after"===n.dropPosition){let e=o.getItem(n.key)?.nextKey,r=null!=e?o.getItem(e):null;t="item"===r?.type?r.key:null}else t=n.key;null!=e&&null!=t?u=i.format("insertBetween",{beforeItemText:p(e),afterItemText:p(t)}):null!=e?u=i.format("insertAfter",{itemText:p(e)}):null!=t&&(u=i.format("insertBefore",{itemText:p(t)}))}let g=t.isDropTarget(n),m=l?d["aria-hidden"]:"true";return{dropIndicatorProps:{...d,id:c,"aria-roledescription":i.format("dropIndicator"),"aria-label":u,"aria-labelledby":s,"aria-hidden":m,tabIndex:-1},isDropTarget:g,isHidden:!g&&!!m}}const Vt={keyboard:{selected:"dragSelectedKeyboard",notSelected:"dragDescriptionKeyboard"},touch:{selected:"dragSelectedLongPress",notSelected:"dragDescriptionLongPress"},virtual:{selected:"dragDescriptionVirtual",notSelected:"dragDescriptionVirtual"}};function Xt(e,t){let r=f((n=Et)&&n.__esModule?n.default:n,"@react-aria/dnd");var n;let o,i,a=t.isDisabled||t.selectionManager.isDisabled(e.key),{dragProps:s,dragButtonProps:l}=Kt({getItems:()=>t.getItems(e.key),preview:t.preview,getAllowedDropOperations:t.getAllowedDropOperations,hasDragButton:e.hasDragButton,onDragStart(r){var n;t.startDrag(e.key,r),n=t.draggingKeys,st.draggingKeys=n},onDragMove(e){t.moveDrag(e)},onDragEnd(e){let{dropOperation:r}=e,n="cancel"!==r&&ct();t.endDrag({...e,keys:t.draggingKeys,isInternal:n}),dt()}}),d=t.collection.getItem(e.key),c=t.getKeysForDrag(e.key).size,p=c>1&&t.selectionManager.isSelected(e.key),u=et();if(e.hasDragButton||"none"===t.selectionManager.selectionMode)if(p)o=r.format("dragSelectedItems",{count:c});else{let n=t.collection.getTextValue?.(e.key)??d?.textValue??"";o=r.format("dragItem",{itemText:n})}else{let t=Vt[u][p?"selected":"notSelected"];e.hasAction&&"keyboard"===u&&(t+="Alt"),i=p?r.format(t,{count:c}):r.format(t),delete s.onClick}let g=h(i);if(i&&Object.assign(s,g),!e.hasDragButton&&e.hasAction){let{onKeyDownCapture:e,onKeyUpCapture:t}=s;"touch"===u&&delete s["aria-describedby"],s.onKeyDownCapture=t=>{t.altKey&&e?.(t)},s.onKeyUpCapture=e=>{e.altKey&&t?.(e)}}return{dragProps:a?{}:s,dragButtonProps:{...l,isDisabled:a,"aria-label":o}}}const Yt=t.forwardRef(function(n,o){let i=n.children,[a,s]=e.useState(null),l=e.useRef(null),d=e.useRef(void 0);return e.useImperativeHandle(o,()=>(e,t)=>{let n,o,a,c=i(e);c&&"object"==typeof c&&"element"in c?(n=c.element,o=c.x,a=c.y):n=c,r.flushSync(()=>{s(n)}),t(l.current,o,a),d.current=requestAnimationFrame(()=>{s(null)})},[i]),e.useEffect(()=>()=>{d.current&&cancelAnimationFrame(d.current)},[]),a?t.createElement("div",{style:{zIndex:-100,position:"fixed",top:0,left:-1e5},ref:l},a):null});class Ht{constructor(e,t,r){this.collection=e,this.ref=t,this.layout=r?.layout||"stack",this.orientation=r?.orientation||"vertical",this.direction=r?.direction||"ltr"}getPrimaryStart(e){return"horizontal"===this.orientation?e.left:e.top}getPrimaryEnd(e){return"horizontal"===this.orientation?e.right:e.bottom}getSecondaryStart(e){return"horizontal"===this.orientation?e.top:e.left}getSecondaryEnd(e){return"horizontal"===this.orientation?e.bottom:e.right}getFlowStart(e){return"stack"===this.layout?this.getPrimaryStart(e):this.getSecondaryStart(e)}getFlowEnd(e){return"stack"===this.layout?this.getPrimaryEnd(e):this.getSecondaryEnd(e)}getFlowSize(e){return this.getFlowEnd(e)-this.getFlowStart(e)}getDropTargetFromPoint(e,t,r){if(this.collection[Symbol.iterator]().next().done||!this.ref.current)return{type:"root"};let n=this.ref.current.getBoundingClientRect(),o="horizontal"===this.orientation?e:t,i="horizontal"===this.orientation?t:e;o+=this.getPrimaryStart(n),i+=this.getSecondaryStart(n);let a="stack"===this.layout?o:i,s="horizontal"===this.orientation&&"rtl"===this.direction,l="grid"===this.layout&&"vertical"===this.orientation&&"rtl"===this.direction,d="stack"===this.layout?s:l,c=this.ref.current?.dataset.collection,p=this.ref.current.querySelectorAll(c?`[data-collection="${CSS.escape(c)}"]`:"[data-key]"),u=new Map;for(let D of p)D instanceof HTMLElement&&null!=D.dataset.key&&u.set(D.dataset.key,D);let g=[...this.collection].filter(e=>"item"===e.type);if(g.length<1)return{type:"root"};let f=0,m=g.length;for(;f{t?f=e+1:m=e};if(othis.getPrimaryEnd(c))p(!s);else if(ithis.getSecondaryEnd(c))){let e={type:"item",key:t.key,dropPosition:"on"};if(r(e))a<=this.getFlowStart(c)+5&&r({...e,dropPosition:"before"})?e.dropPosition=d?"after":"before":a>=this.getFlowEnd(c)-5&&r({...e,dropPosition:"after"})&&(e.dropPosition=d?"before":"after");else{let t=this.getFlowStart(c)+this.getFlowSize(c)/2;a<=t&&r({...e,dropPosition:"before"})?e.dropPosition=d?"after":"before":a>=t&&r({...e,dropPosition:"after"})&&(e.dropPosition=d?"before":"after")}return e}p(!l)}}let h=g[Math.min(f,g.length-1)],y=u.get(String(h.key));return n=y?.getBoundingClientRect(),n&&(o{let{onDrop:r,onInsert:n,onItemDrop:o,onReorder:i,onMove:a,onRootDrop:s,getItems:l,renderDragPreview:d,renderDropIndicator:c,dropTargetDelegate:p}=t,u=!!(r||n||o||i||a||s),g={};return!!l&&(g.useDraggableCollectionState=function(r){return function(t){let{getItems:r,isDisabled:n,collection:o,selectionManager:i,onDragStart:a,onDragMove:s,onDragEnd:l,preview:d,getAllowedDropOperations:c}=t,[,p]=e.useState(!1),u=e.useRef(new Set),g=e.useRef(null),f=e=>{let t=new Set;if(i.isSelected(e))for(let r of i.selectedKeys){let e=o.getItem(r);if(e){let n=!1,a=e.parentKey;for(;null!=a;){if(i.selectedKeys.has(a)){n=!0;break}let e=o.getItem(a);a=e?e.parentKey:null}n||t.add(r)}}else t.add(e);return t};return{collection:o,selectionManager:i,get draggedKey(){return g.current},get draggingKeys(){return u.current},isDragging:e=>u.current.has(e),getKeysForDrag:f,getItems(e){let t=f(e),n=[];for(let r of t){let e=o.getItem(r)?.value;null!=e&&n.push(e)}return r(f(e),n)},isDisabled:n,preview:d,getAllowedDropOperations:c,startDrag(e,t){let r=f(e);u.current=r,g.current=e,i.setFocused(!1),p(!0),"function"==typeof a&&a({...t,keys:r})},moveDrag(e){"function"==typeof s&&s({...e,keys:u.current})},endDrag(e){let{isInternal:t}=e;"function"==typeof l&&l({...e,keys:u.current,isInternal:t}),u.current=new Set,g.current=null,p(!1)}}}({...r,...t})},g.useDraggableCollection=Rt,g.useDraggableItem=Xt,g.DragPreview=Yt,g.renderDragPreview=d,g.isVirtualDragging=bt),u&&(g.useDroppableCollectionState=function(r){return function(t){let{acceptedDragTypes:r="all",isDisabled:n,onInsert:o,onRootDrop:i,onItemDrop:a,onReorder:s,onMove:l,shouldAcceptItemDrop:d,collection:c,selectionManager:p,onDropEnter:u,getDropOperation:g,onDrop:f}=t,[m,h]=e.useState(null),y=e.useRef(null),D=e=>{if("before"===e.dropPosition){let t=c.getItem(e.key);return t&&null!=t.prevKey?{type:"item",key:t.prevKey,dropPosition:"after"}:null}if("after"===e.dropPosition){let t=c.getItem(e.key);return t&&null!=t.nextKey?{type:"item",key:t.nextKey,dropPosition:"before"}:null}return null},v=e.useCallback(e=>{let{target:t,types:p,allowedOperations:u,isInternal:m,draggingKeys:h}=e;if(n||!t)return"cancel";if("all"===r||r.some(e=>p.has(e))){let e=o&&"item"===t.type&&!m&&("before"===t.dropPosition||"after"===t.dropPosition),r=s&&"item"===t.type&&m&&("before"===t.dropPosition||"after"===t.dropPosition)&&function(e,t,r){let n=e.getItem(t.key);for(let o of r){let t=e.getItem(o);if(t?.parentKey!==n?.parentKey)return!1}return!0}(c,t,h),n="item"!==t.type||"on"!==t.dropPosition||!d||d(t,p),y=l&&"item"===t.type&&m&&n,D=i&&"root"===t.type&&!m,v=a&&"item"===t.type&&"on"===t.dropPosition&&!(m&&null!=t.key&&h.has(t.key))&&n;if(f||e||r||y||D||v)return g?g(t,p,u):u[0]}return"cancel"},[n,c,r,g,o,i,a,d,s,l,f]);return{collection:c,selectionManager:p,isDisabled:n,target:m,setTarget(e){if(this.isDropTarget(e))return;let r=y.current;r&&"function"==typeof t.onDropExit&&t.onDropExit({type:"dropexit",x:0,y:0,target:r}),e&&"function"==typeof u&&u({type:"dropenter",x:0,y:0,target:e}),y.current=e??null,h(e??null)},isDropTarget(e){let t=y.current;return!(!t||!e)&&(!!Ut(e,t)||"item"===e?.type&&"item"===t?.type&&e.key!==t.key&&e.dropPosition!==t.dropPosition&&"on"!==e.dropPosition&&"on"!==t.dropPosition&&(Ut(D(e),t)||Ut(e,D(t))))},getDropOperation(e){let{target:t,isInternal:r,draggingKeys:n}=e;if(r&&"item"===t.type&&n.size>0){if(n.has(t.key)&&"on"===t.dropPosition)return"cancel";let e=t.key;for(;null!=e;){let t=c.getItem(e),r=t?.parentKey;if(null!=r&&n.has(r))return"cancel";e=r??null}}return v(e)}}}({...r,...t})},g.useDroppableItem=zt,g.useDroppableCollection=function(e,r,n){return $t({...e,...t},r,n)},g.useDropIndicator=Nt,g.renderDropIndicator=c,g.dropTargetDelegate=p,g.ListDropTargetDelegate=Ht),g},[t])}}function Jt({className:e,...t}){return n.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:20,viewBox:"0 0 12 12","aria-hidden":"true",focusable:"false",className:S("rp-icon",e),...t,children:[1.6,6,10.4].flatMap(e=>[3.8,8.2].map(t=>n.jsx("circle",{cx:t,cy:e,r:1.1,fill:"currentColor"},`${t}-${e}`)))})}const Gt="application/x-doona-card",Wt={},_t=new Map,Zt=new Set,Qt=e=>{if(Wt.card=e,_t.clear(),void 0===e)for(const t of Zt)t()},er=e=>[...document.querySelectorAll(".rp-dashboard-cell")].find(t=>t.dataset.instance===e);function tr(e){let t=[1,1];for(let r=1;r<=12;r++){const n=Math.round(e*r);n>0&&Math.abs(e-n/r){const e=t.current;if(!e)return;const r=()=>{const t=e.parentElement.getBoundingClientRect(),r=getComputedStyle(e),n=Number.parseFloat(r.getPropertyValue("--rp-dash-gap"))||0,o=function(e,t,r,n){const o=n?e.map(e=>({...e,left:t-e.right,right:t-e.left})):e,i=new Map;for(const a of o)i.set(Math.round(a.top),[...i.get(Math.round(a.top))??[],a]);return[...i.values()].flatMap(e=>{const i=e[0].top,a=Math.max(...e.map(e=>e.bottom)),s=Math.max(...e.map(e=>e.right))+r;let l=t;for(const t of o)!e.includes(t)&&t.topi+.5&&t.right>s&&(l=Math.min(l,t.left-r));return(l-s+r)/(t+r)<1/6-.01?[]:[{after:e.at(-1).id,left:n?t-l:s,top:i,width:l-s,height:a-i}]})}([...e.querySelectorAll(":scope > .rp-dashboard-cell")].map(e=>{const r=e.getBoundingClientRect();return{id:e.dataset.instance,left:r.left-t.left,right:r.right-t.left,top:r.top-t.top,bottom:r.bottom-t.top}}),t.width,n,"rtl"===r.direction).map(e=>({...e,share:tr((e.width+n)/(t.width+n))}));s(e=>JSON.stringify(e)===JSON.stringify(o)?e:o)};return r(),e.addEventListener("rp-packed",r),()=>e.removeEventListener("rp-packed",r)},[t]),a.map(e=>n.jsx(nr,{section:t,gap:e,label:r(e.share),refusal:o,onPlace:i},e.after))}function nr({section:t,gap:r,label:o,refusal:i,onPlace:a}){const s=e.useRef(null),[l,d]=e.useState(!1),c=(e=Wt.card)=>{const n=t.current;if(void 0===e||!n)return!1;const o=[e,r.after,r.width].join("\n");return _t.has(o)||_t.set(o,(function(e,t,r){const n=er(t),o=er(r);if(!n||o?.parentElement!==e)return;const i=document.createElement("div");i.className="rp-dashboard-cell",i.style.visibility="hidden";for(const d of["data-module","data-size","data-foot","data-width","data-height"]){const e=n.getAttribute(d);null!==e&&i.setAttribute(d,e)}const a=e.dataset.grid;i.dataset.width&&(e.dataset.grid="fraction");const s=n.parentElement===e;s&&n.classList.remove("rp-dashboard-cell"),o.after(i);const l=i.getBoundingClientRect().width;return i.remove(),s&&n.classList.add("rp-dashboard-cell"),void 0===a?delete e.dataset.grid:e.dataset.grid=a,l}(n,e,r.after)??1/0)<=r.width+1),_t.get(o)},{dropProps:p,isDropTarget:u}=Ct({ref:s,getDropOperation:e=>e.has(Gt)&&c()?"move":"cancel",onDrop:async e=>{for(const t of e.items){if("text"!==t.kind||!t.types.has(Gt))continue;const e=await t.getText(Gt);c(e)&&a(e,{target:r.after,after:!0})}}}),g={onDragEnter:()=>d(void 0!==Wt.card&&!c()),onDragLeave:()=>d(!1),onDrop:()=>d(!1)};return e.useEffect(()=>{const e=()=>d(!1);return Zt.add(e),()=>{Zt.delete(e)}},[]),n.jsxs("div",{...O(p,g),ref:s,className:"rp-dashboard-gap rp-label","data-drop-target":u||void 0,"data-refused":l||void 0,style:{left:r.left,top:r.top,width:r.width,height:r.height},children:[o,n.jsx(C,{children:n.jsx("span",{role:"status",children:l?i:""})})]})}const or="application/x-doona-card",ir={current:null};function ar({label:t,profile:r,items:o,textValue:i,dragLabel:a,tools:s,resize:l,gapLabel:d,refusal:c,rearm:p,children:u,onPlace:g,...f}){const m=e.useRef(null);ge(r?m:ir),e.useEffect(()=>{!p?.focus||document.activeElement&&document.activeElement!==document.body||m.current?.querySelector(`[data-key="${CSS.escape(p.focus)}"]`)?.focus()},[p]);const h=async e=>{for(const t of e.items)if("text"===t.kind&&t.types.has(or))return t.getText(or)},{dragAndDropHooks:y}=function(t){const{dragAndDropHooks:r}=qt(t);return{dragAndDropHooks:e.useMemo(()=>function(e){const{useDraggableItem:t,isVirtualDragging:r}=e;return t&&r?{...e,useDraggableItem:(e,n)=>{const o=t(e,n),i=o.dragButtonProps.onPress;return{...o,dragButtonProps:{...o.dragButtonProps,onPress:e=>{r()||i?.(e)}}}}}:e}(r),[r])}}({getItems:e=>[...e].map(e=>({[or]:String(e),"text/plain":i(o.find(t=>t.id===e))})),getAllowedDropOperations:()=>["move"],acceptedDragTypes:[or],getDropOperation:()=>"move",onDragStart:e=>Qt(String([...e.keys][0])),onDragEnd:()=>{Qt(void 0),function(){const e=()=>{document.removeEventListener("pointerdown",e,!0),document.removeEventListener("mousedown",t,!0)},t=t=>{e();const{clientX:r,clientY:n,screenX:o,screenY:i,button:a,buttons:s,ctrlKey:l,shiftKey:d,altKey:c,metaKey:p}=t;t.target?.dispatchEvent(new PointerEvent("pointerdown",{bubbles:!0,cancelable:!0,composed:!0,pointerId:1,pointerType:"mouse",isPrimary:!0,clientX:r,clientY:n,screenX:o,screenY:i,button:a,buttons:s,ctrlKey:l,shiftKey:d,altKey:c,metaKey:p}))};document.addEventListener("pointerdown",e,!0),document.addEventListener("mousedown",t,!0)}()},renderDropIndicator:e=>n.jsx(Be,{target:e,className:"rp-canvas-drop"}),onReorder:e=>{for(const t of e.keys)g(String(t),{target:String(e.target.key),after:"after"===e.target.dropPosition})},onInsert:async e=>{const t=await h(e);t&&g(t,{target:String(e.target.key),after:"after"===e.target.dropPosition})},onRootDrop:async e=>{const t=await h(e);t&&g(t,{})}}),D=n.jsx(Re,{...f,ref:m,"aria-label":t,layout:"grid",className:r?"rp-dash-section":"rp-widget-grid rp-sortable-grid","data-profile":r,"data-grid":r?ye(o):void 0,items:o,dragAndDropHooks:y,dependencies:[u,s,l],children:e=>n.jsxs(Me,{id:e.id,textValue:i(e),className:r?"rp-dashboard-cell":"rp-widget-cell rp-sortable-row",...r?me(e):{"data-size":he(e.size),"data-module":e.module},children:[n.jsxs("div",{className:"rp-dashboard-tools",children:[n.jsx(I,{slot:"drag",className:j({quiet:!0,icon:!0,small:!r}),"aria-label":a(e),children:n.jsx(Jt,{})}),s?.(e)]}),n.jsx(fe,{children:u(e)}),l?.(e)]})});return r?n.jsxs("div",{className:"rp-dashboard-canvas","data-rearm":p?"":void 0,children:[D,d&&n.jsx(rr,{section:m,label:d,refusal:c,onPlace:g})]}):D}function sr({id:t,label:r,added:o,addLabel:i,count:a,onAdd:s,presets:l,row:d,children:c}){const[p,u]=A(void 0,200),[g,f]=e.useState(!1);return u&&!g&&f(!0),n.jsxs("section",{ref:p,className:"rp-widget-gallery-tile","data-added":o||void 0,"data-module":t,"aria-label":r,children:[n.jsx("h3",{className:"rp-h3",children:r}),l&&d?n.jsx(lr,{presets:l,row:d,loaded:g,disabled:o}):n.jsx("div",{className:"rp-widget-gallery-frame",inert:!0,children:n.jsx(R,{value:!1,children:g&&c})}),n.jsxs("div",{className:"rp-cluster",children:[n.jsx(M,{isDisabled:o,label:`${i} ${r}`,onPress:s,children:i}),n.jsx("span",{className:"rp-label",children:a})]})]})}function lr({presets:e,row:t,loaded:r,disabled:o}){const[i,a]=B(Math.round),s=a?a.width/t.width:0;return n.jsx("div",{ref:i,className:"rp-widget-gallery-presets",style:{"--rp-preset-gap":t.gap*s+"px"},children:r&&s>0&&e.map(e=>n.jsx(dr,{preset:e,width:e.share*(t.width+t.gap)-t.gap,scale:s,disabled:o},e.key))})}function dr({preset:e,width:t,scale:r,disabled:o}){const[i,a]=B(Math.round);return n.jsxs("div",{className:"rp-widget-gallery-preset",style:{inlineSize:t*r},children:[n.jsxs("div",{className:"rp-widget-gallery-thumb",style:{blockSize:(a?.height??0)*r},children:[n.jsx("div",{ref:i,className:"rp-widget-gallery-thumb-card",style:{inlineSize:t,scale:String(r)},inert:!0,children:n.jsx(R,{value:!1,children:e.preview})}),n.jsx(I,{className:"rp-widget-gallery-thumb-add","aria-label":e.addLabel,isDisabled:o,onPress:e.onAdd})]}),n.jsx("span",{className:"rp-label",children:e.label})]})}function cr({label:e,children:t}){return n.jsxs("div",{className:"rp-module-option",children:[n.jsx("span",{className:"rp-label",children:e}),t]})}function pr(){const e=document.querySelector(".rp-dashboard-canvas"),t=e&&getComputedStyle(e.querySelector(".rp-dash-section")??e);return{width:e?.getBoundingClientRect().width||1152,gap:Number.parseFloat(t?.getPropertyValue("--rp-dash-gap")??"")||12,snap:Number.parseFloat(t?.getPropertyValue("--rp-dash-snap")??"")||12}}function ur({items:t,add:r,surface:o="panel"}){const i=L(),[a]=e.useState(pr);return Object.keys(F).filter(e=>"panel"===o||!$(e)).map(e=>{const s=t.filter(t=>t.id===e).length,l=De(ve()).find(t=>t.id===e)??z(e),d=e=>{const t=Se(e.width);return a.snap>=12?t:Math.ceil(t*a.snap-1e-6)/a.snap};return n.jsx(sr,{id:e,label:i(F[e].label),added:s>=V,addLabel:i("widgets.add"),count:i("widgets.placedCount",{n:s,max:V}),onAdd:()=>r(e),row:a,presets:"dashboard"===o?xe(l,Te(l)).map(t=>{const o=ke(l,t),a=Ee(t,i);return{key:a,label:a,addLabel:i("widgets.addPreset",{name:i(F[e].label),size:a}),share:d(t),onAdd:()=>r(e,t),preview:n.jsx(be,{id:e,children:n.jsx(N,{value:!0,children:n.jsx("div",{className:"rp-dashboard-cell",...me(Ke(o)),"data-tile":"tall"===o.height?"stacked":void 0,children:n.jsx(Pe,{item:o,preview:!0})})})})}}):void 0,children:"panel"===o&&n.jsx(be,{id:e,children:n.jsx(we,{item:z(e),preview:!0,sample:!0})})},e)})}const gr={area:"dashboard.form.area",sparkline:"dashboard.form.sparkline",donut:"dashboard.form.donut",waffle:"dashboard.form.waffle",dots:"dashboard.form.dots",ranked:"dashboard.form.ranked",kv:"dashboard.form.kv",facts:"dashboard.form.facts"},fr={small:"widgets.small",medium:"widgets.medium",large:"widgets.large",wide:"dashboard.wide"};function mr({active:e,items:t,sizes:r=[],surface:o,update:i,move:a,remove:s}){const l=L();if(!e)return n.jsx("p",{className:"rp-label",children:l("widgets.select")});const d=F[e.id].groupChoice;return n.jsxs(n.Fragment,{children:["dashboard"===o&&Object.values(Oe(e,Te(e),l)).map(e=>e&&n.jsx(cr,{label:e.label,children:n.jsx(Fe,{label:e.label,value:e.value,onChange:t=>i(e.set(t)),items:e.options.map(e=>[e.value,e.label])})},e.label)),r.length>1&&n.jsx(cr,{label:l("widgets.size"),children:n.jsx(Fe,{label:l("widgets.size"),value:e.size,onChange:t=>i({...e,size:t,form:"panel"===o&&"small"===t&&X(e.id,o).includes("kv")?"kv":e.form}),items:r.map(e=>[e,l(fr[e])])})}),X(e.id,o).length>1&&!("small"===e.size&&!e.width&&X(e.id,o).includes("sparkline"))&&n.jsx(cr,{label:l("widgets.form"),children:n.jsx(Fe,{label:l("widgets.form"),value:H(e,o),onChange:t=>i({...e,form:t,size:"large"!==e.size||Y(e.id,t,o).includes("large")?e.size:"medium"}),items:X(e.id,o).map(e=>[e,l(gr[e])])})}),"ranking"===e.id&&n.jsx(cr,{label:l("widgets.rankBy"),children:n.jsx(Fe,{label:l("widgets.rankBy"),value:e.by??"dev",onChange:t=>i({...e,by:"domain"===t?"domain":"dev"}),items:[["dev",l("act.devices")],["domain",l("act.domains")]]})}),"speed"===e.id&&"small"!==e.size&&"sparkline"===H(e,o)&&n.jsx(U,{isSelected:!e.split,onChange:t=>i({...e,split:!t||void 0}),children:l("widgets.combineRates")}),d&&n.jsx(hr,{item:e,automatic:d,update:i}),n.jsxs("div",{className:"rp-cluster rp-module-actions",children:[n.jsx(M,{isDisabled:q(t[0])===q(e),onPress:()=>a(-1),children:l("widgets.up")}),n.jsx(M,{isDisabled:q(t.at(-1))===q(e),onPress:()=>a(1),children:l("widgets.down")}),n.jsx(M,{negative:!0,onPress:s,children:l("widgets.remove")})]})]})}function hr({item:e,automatic:t,update:r}){const o=J(),i=$e(!0===o.data?.resources.groups.available),a=L(),s=a(t);return n.jsx(cr,{label:a("ui.group"),children:n.jsx(G,{label:a("ui.group"),value:e.group??"",items:[{id:"",label:s},...(i.data??[]).map(e=>({id:e.id,label:e.name}))],onChange:t=>r({...e,group:t}),children:i.data?.find(t=>t.id===e.group)?.name??s})})}function yr(e,t,r){const n=De(e).find(e=>q(e)===t);if(!n||r.target===t)return e;const o=e.sections.map(e=>({...e,items:e.items.filter(e=>q(e)!==t)})),i=o.find(e=>e.id===r.section);if(!i)return e;const a=void 0===r.target?-1:i.items.findIndex(e=>q(e)===r.target);return i.items.splice(a<0?i.items.length:a+(r.after?1:0),0,n),{...e,sections:o}}function Dr({width:e,height:t}){return n.jsxs(n.Fragment,{children:[n.jsx(kr,{axis:e,edge:"width"}),t&&n.jsx(kr,{axis:t,edge:"height"})]})}const vr=e=>{const[t,r=1]=e.split("/").map(Number);return t/r||0};function br(e,t){const r=e.closest(".rp-dash-section"),n=getComputedStyle(r),o=getComputedStyle(e),i=Number.parseFloat(n.getPropertyValue("--rp-dash-snap"))||12,a=Number.parseFloat(n.getPropertyValue("--rp-dash-gap"))||0,s=r.getBoundingClientRect().width+Math.min(0,Number.parseFloat(n.marginInlineStart)||0),l=Number.parseFloat(o.getPropertyValue("--rp-span"))||420,d=vr(o.getPropertyValue("--rp-shift"))-vr(o.getPropertyValue("--rp-trim"));return t.map(t=>{if(void 0===t.fraction)return e.dataset.width?l/420*(s+a)-a+d*a:e.getBoundingClientRect().width;return(i>=12?t.fraction:Math.ceil(t.fraction*i-1e-6)/i)*(s+a)-a})}const wr=(e,t,r)=>t.reduce((n,o,i)=>{const a=Math.abs(o-r)-Math.abs(t[n]-r);return a<-.5||a<=.5&&void 0===e[n].fraction&&void 0!==e[i].fraction?i:n},0),xr=new Map,Tr=e=>e.target&&xr.get(e.target)?.(e);function kr({axis:t,edge:r}){const o=e.useRef(null),i=e.useRef(null),{focusProps:a,isFocusVisible:s}=W(),l=()=>o.current.closest(".rp-dashboard-cell"),d=()=>"rtl"===getComputedStyle(o.current).direction,c=Math.max(0,t.options.findIndex(e=>e.value===t.value)),p=e=>{i.current&&(i.current.index=e),t.options[e].value!==t.value&&t.onChange(t.options[e])},{moveProps:u}=ze({onMoveStart:()=>{const e=l().getBoundingClientRect(),n=Number.parseFloat(getComputedStyle(l()).getPropertyValue("--rp-space-16"))||1,o="width"===r?br(l(),t.options):[];i.current={start:c,size:"width"===r?e.width:e.height,travel:0,sizes:o,step:n,index:c},l().dataset.resizing=""},onMove:({deltaX:e,deltaY:n,pointerType:o})=>{const a=i.current;if(!a||"keyboard"===o)return;a.travel+="width"===r?e*(d()?-1:1):n;const s="width"===r?wr(t.options,a.sizes,a.size+a.travel):Math.max(0,Math.min(t.options.length-1,a.start+Math.round(a.travel/a.step)));s!==a.index&&p(s)},onMoveEnd:()=>{i.current=null,delete l().dataset.resizing}}),g=e.useRef(e=>{});return e.useLayoutEffect(()=>{g.current=e=>{const n="width"===r?d()?"ArrowLeft":"ArrowRight":"ArrowDown",o="width"===r?d()?"ArrowRight":"ArrowLeft":"ArrowUp";e.key!==n&&e.key!==o||(e.preventDefault(),e.stopPropagation(),p((e=>{if("width"===r&&void 0===t.options[c].fraction){if(!e)return c;const r=l().getBoundingClientRect().width,n=br(l(),t.options).findIndex((e,n)=>void 0!==t.options[n].fraction&&e>r+1);return n<0?t.options.length-1:n}return Math.max(0,Math.min(t.options.length-1,c+(e?1:-1)))})(e.key===n)))}}),e.useEffect(()=>{return e=o.current,t=e=>g.current(e),xr.size||addEventListener("keydown",Tr,!0),xr.set(e,t),()=>{xr.delete(e),xr.size||removeEventListener("keydown",Tr,!0)};var e,t},[]),n.jsx("div",{ref:o,role:"slider",tabIndex:0,...a,...u,onPointerDown:e=>{e.preventDefault(),e.stopPropagation(),u.onPointerDown?.(e)},className:"rp-dashboard-resize rp-grip","data-edge":r,"data-focus-visible":s||void 0,"aria-label":t.label,"aria-orientation":"width"===r?"horizontal":"vertical","aria-valuemin":0,"aria-valuemax":t.options.length-1,"aria-valuenow":c,"aria-valuetext":t.options[c]?.label})}const Er=(e,t)=>e.filter(e=>e.id===t).lengthq(e)===t)?{instance:_()}:{}}:null;function Pr({draft:t,setDraft:r,render:o}){const i=L(),[a,s]=e.useState({text:"",serial:0}),l=De(t),d=e=>s(t=>({text:e,serial:t.serial+1})),c=e.useRef([]);e.useEffect(()=>()=>c.current.forEach(e=>te(e.key)),[]),e.useEffect(()=>{c.current=c.current.filter(e=>!!e.restorable(t)||(te(e.key),!1))},[t]);const[p,u]=e.useState(null),g=e.useRef({x:Number.NaN,y:Number.NaN});e.useEffect(()=>{const e=e=>{g.current={x:e.clientX,y:e.clientY}};return document.addEventListener("pointerdown",e,!0),document.addEventListener("pointermove",e,!0),()=>{document.removeEventListener("pointerdown",e,!0),document.removeEventListener("pointermove",e,!0)}},[]),e.useEffect(()=>{if(!p)return;const{x:e,y:t}=g.current,r=r=>{r instanceof PointerEvent&&r.clientX===e&&r.clientY===t||u(null)};return document.addEventListener("pointermove",r,!0),document.addEventListener("keydown",r,!0),()=>{document.removeEventListener("pointermove",r,!0),document.removeEventListener("keydown",r,!0)}},[p]);const f=e=>{const{layout:n,restore:o,restorable:a}=function(e,t){const r=e.sections.find(e=>e.items.some(e=>q(e)===t));if(!r)return{layout:e,restore:e=>e,restorable:()=>!1};const n=r.items.findIndex(e=>q(e)===t),o=r.items[n],i=e=>{const r=De(e);return!r.some(e=>q(e)===t)&&r.filter(e=>e.id===o.id).lengthe===r?{...e,items:e.items.filter(e=>e!==o)}:e)},restore:e=>i(e)?{...e,sections:e.sections.map(e=>e.id===r.id?{...e,items:[...e.items.slice(0,n),o,...e.items.slice(n)]}:e)}:e,restorable:i}}(t,q(e)),s=l.findIndex(t=>q(t)===q(e)),d=l[s+1]??l[s-1];u({focus:d&&q(d)}),r(n);const p=pe("neutral",i("widgets.removed",{name:i(F[e.id].label)}),{id:`removed:${q(e)}`,action:{label:i("ui.undo"),onAction:()=>r(e=>e&&o(e)),closeOnAction:!0}});c.current.push({key:p,restorable:a})};return n.jsxs(n.Fragment,{children:[t.sections.map(e=>n.jsx(ar,{label:i("widgets.order"),profile:e.id,items:e.items.map(e=>({...Ke(e),item:e})),textValue:({item:e})=>i(F[e.id].label),dragLabel:({item:e})=>i("widgets.drag",{name:i(F[e.id].label)}),gapLabel:e=>i("dashboard.remaining",{space:e}),refusal:i("dashboard.noRoom"),rearm:p,resize:({item:e})=>{const o=Oe(e,Te(e),i),a=(e,n)=>e&&{label:n,value:e.value,options:e.options,onChange:n=>{r(Ie(t,ue(e.set(n.value)))),d(`${e.label}: ${n.label}`)}};return n.jsx(Dr,{width:a(o.width,i("dashboard.resizeWidth")),height:a(o.height,i("dashboard.resizeHeight"))})},onPlace:(n,o)=>{r(yr(t,n,{section:e.id,...o})),d(i("widgets.reordered"))},tools:({item:e})=>n.jsxs(n.Fragment,{children:[n.jsx(re,{title:i(F[e.id].label),placement:"bottom end",trigger:n.jsx(M,{quiet:!0,icon:!0,label:i("widgets.inspector"),children:n.jsx(ne,{})}),children:()=>n.jsx("div",{className:"rp-module-inspector",children:n.jsx(mr,{active:e,items:l,surface:"dashboard",update:e=>r(Ie(t,ue(e))),move:n=>{r(function(e,t,r){const n=e.sections.findIndex(e=>e.items.some(e=>q(e)===t));if(n<0)return e;const o=e.sections[n].items,i=o.findIndex(e=>q(e)===t),a=o[i+r];if(a)return yr(e,t,{section:e.sections[n].id,target:q(a),after:r>0});const s=e.sections[n+r];if(!s)return e;const l=r>0?s.items[0]:s.items.at(-1);return yr(e,t,{section:s.id,...l?{target:q(l),after:r<0}:{}})}(t,q(e),n)),d(i("widgets.reordered"))},remove:()=>f(e)})})}),n.jsx(M,{quiet:!0,icon:!0,label:i("widgets.removeName",{name:i(F[e.id].label)}),onPress:()=>f(e),children:n.jsx(Le,{})})]}),children:({item:e})=>o(e)},e.id)),n.jsx(C,{children:n.jsx("span",{role:"status",children:n.jsx("span",{children:a.text},a.serial)})})]})}function Kr({draft:t,saved:r,setDraft:o,onClose:i}){const a=L(),[s,l]=e.useState(!1),d=e.useMemo(()=>JSON.stringify(t)!==JSON.stringify(r),[t,r]);return Z(d,i),n.jsxs(n.Fragment,{children:[n.jsx(Q,{title:a("widgets.gallery"),size:"wide",scrollBody:!0,trigger:n.jsx(M,{children:a("widgets.gallery")}),footer:e=>n.jsx(M,{onPress:e,children:a("ui.close")}),children:n.jsx("div",{className:"rp-widget-gallery-grid",children:n.jsx(ur,{items:De(t),add:(e,r)=>o(function(e,t,r){const n=Er(De(e),t);if(!n)return e;const o=r?ke(n,r):n;return{...e,sections:e.sections.map(e=>"extensions"===e.id?{...e,items:[...e.items,o]}:e)}}(t,e,r)),surface:"dashboard"})})}),n.jsx(M,{onPress:()=>o(ve()),children:a("widgets.reset")}),n.jsx(M,{onPress:()=>d?l(!0):i(),children:a("ui.cancel")}),n.jsx(M,{accent:!0,onPress:()=>{Ce(t),i()},children:a("ui.done")}),n.jsx(ee,{title:a("config.discardTitle"),isOpen:s,onCancel:()=>l(!1),confirmLabel:a("config.discard"),onConfirm:i,children:n.jsx("p",{children:a("widgets.discardHelp")})})]})}function Or({onClose:t,backend:r}){const o=L(),[i]=e.useState(oe),a=i.items,[s,l]=e.useState(a),[d,c]=e.useState(!1),[p]=e.useState(()=>i.docked?document.querySelector(".rp-side-dock")?.offsetWidth:void 0),u=i.size?.width??ie,[g,f]=e.useState(u),[m,h]=e.useState(!1),y=g!==(d?ie:u),[D,v]=e.useState(null),[b,w]=e.useState(!1),[x,T]=e.useState({text:"",serial:0}),k=e=>T(t=>({text:e,serial:t.serial+1})),E=d&&ae(oe()),P=e.useMemo(()=>JSON.stringify(a)!==JSON.stringify(s),[a,s])||E||y;Z(P,t);const K=()=>P?w(!0):t(),O=s.find(e=>q(e)===D);return n.jsxs(n.Fragment,{children:[n.jsxs(Q,{title:o("widgets.edit"),size:"wide",scrollBody:!0,isOpen:!0,onOpenChange:e=>{e||K()},footer:()=>n.jsxs(n.Fragment,{children:[n.jsx(M,{onPress:()=>{l(se().items),c(!0),f(ie),v(null)},children:o("widgets.reset")}),n.jsx(M,{onPress:K,children:o("ui.cancel")}),n.jsx(M,{accent:!0,onPress:()=>{le(e=>({...e,version:4,items:s,...d&&ce,...y&&{size:{width:g,height:(d?void 0:e.size?.height)??de}}})),t()},children:o("settings.save")})]}),children:[n.jsx(je,{panelWidth:(d||m?void 0:p)??g,onPanelWidth:e=>{h(!0),f(e)},resizeLabel:o("widgets.resizePreview"),header:n.jsx(Ae,{backend:r,preview:!0}),galleryLabel:o("widgets.gallery"),canvasLabel:o("widgets.canvas"),inspectorLabel:o(O?F[O.id].label:"widgets.inspector"),gallery:n.jsx(ur,{items:s,add:e=>{const t=Er(s,e);t&&(l([...s,t]),v(q(t)),k(o("widgets.addedName",{name:o(F[e].label)})))}}),canvas:n.jsx(ar,{label:o("widgets.order"),items:s.map(e=>({item:e,module:e.id,id:q(e),size:e.size})),textValue:({item:e})=>o(F[e.id].label),selectionMode:"single",selectedKeys:D?new Set([D]):new Set,onSelectionChange:e=>{"all"!==e&&v(String([...e][0]))},dragLabel:({item:e})=>o("widgets.drag",{name:o(F[e.id].label)}),onPlace:(e,{target:t,after:r})=>{t&&(l(n=>{const o=function(e,t,r,n){if(t.has(r))return e;const o=e.filter(e=>!t.has(e)),i=o.indexOf(r);return i<0?e:(o.splice(i+("after"===n?1:0),0,...e.filter(e=>t.has(e))),o)}(n.map(q),new Set([e]),t,r?"after":"before");return o.flatMap(e=>n.find(t=>q(t)===e)??[])}),k(o("widgets.reordered")))},children:({item:e})=>n.jsx(we,{item:e,preview:!0})}),inspector:n.jsx(mr,{active:O,items:s,sizes:O?Y(O.id,H(O,"panel"),"panel"):[],surface:"panel",update:e=>l(t=>t.map(ue(e))),move:e=>{O&&l(function(e,t,r){const n=e.findIndex(e=>q(e)===t),o=n+r;if(n<0||o<0||o>=e.length)return e;const i=[...e];return i.splice(o,0,...i.splice(n,1)),i}(s,q(O),e)),k(o("widgets.reordered"))},remove:()=>{O&&(e=>{const t=q(e);l(e=>e.filter(e=>q(e)!==t)),v(null),k(o("widgets.removed",{name:o(F[e.id].label)}))})(O)}})}),n.jsx(C,{children:n.jsx("span",{role:"status",children:n.jsx("span",{children:x.text},x.serial)})})]}),n.jsx(ee,{title:o("config.discardTitle"),isOpen:b,onCancel:()=>w(!1),confirmLabel:o("config.discard"),onConfirm:t,children:n.jsx("p",{children:o("widgets.discardHelp")})})]})}export{Kr as DashboardActions,Pr as DashboardEditor,Or as WidgetEditor}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Editors-BWyc5snq.css b/luci-app-honk/root/etc/honk/doona/assets/Editors-BWyc5snq.css deleted file mode 100644 index 8dc11167f..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Editors-BWyc5snq.css +++ /dev/null @@ -1 +0,0 @@ -.rp-sortable-row{outline:none;min-inline-size:0;position:relative}.rp-sortable-row[data-focus-visible]{outline:none}.rp-sortable-row:is([data-focus-visible],[data-selected]):before{content:"";inset:calc(0px - var(--rp-sortable-gap,var(--rp-space-2)) - var(--rp-focus-width));border:var(--rp-focus-width) solid var(--rp-focus-color);pointer-events:none;position:absolute}.rp-sortable-grid{outline:none}.rp-sortable-row>[role=gridcell]{display:contents}.rp-sortable-grid[data-drop-target]{outline:2px dashed var(--rp-accent)}.rp-sortable-grid .rp-dashboard-tools{background:0 0;inset-block-start:calc(var(--rp-line-caption) / 2 - var(--rp-space-1));inset-inline-end:0;translate:0 -50%}.rp-sortable-grid .rp-widget-label{padding-inline-end:calc(var(--rp-control) + var(--rp-space-2))}.rp-sortable-row[data-module=divider] .rp-dashboard-tools{background:var(--rp-surface);padding-inline-start:var(--rp-space-1);inset-block-start:50%}.rp-widget-gallery-grid{gap:var(--rp-space-4);grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));display:grid}.rp-widget-gallery-tile{gap:var(--rp-space-3);min-inline-size:0;padding:var(--rp-space-4);border:1px solid var(--rp-line);border-radius:var(--rp-r-lg);flex-direction:column;display:flex}.rp-widget-gallery-tile>.rp-cluster{margin-block-start:auto}.rp-widget-gallery-tile[data-added]{background:var(--rp-fill);--rp-subtle:var(--rp-subtle-text)}.rp-widget-gallery-frame{pointer-events:none;block-size:200px;overflow:hidden;mask-image:linear-gradient(#000 80%,#0000)}.rp-widget-gallery-presets{align-items:flex-start;gap:var(--rp-space-3) var(--rp-preset-gap);flex-wrap:wrap;display:flex}.rp-widget-gallery-preset{gap:var(--rp-space-1);flex-direction:column;min-inline-size:0;display:flex}.rp-widget-gallery-thumb{position:relative;overflow:hidden}.rp-widget-gallery-thumb-card{transform-origin:0 0;pointer-events:none;container:rp-tile/inline-size}.rp-widget-gallery-thumb-card:dir(rtl){transform-origin:100% 0}.rp-widget-gallery-thumb-add{border-radius:var(--rp-r-lg);cursor:pointer;background:0 0;border:0;position:absolute;inset:0}.rp-widget-gallery-thumb-add[data-hovered]{outline:2px solid var(--rp-line);outline-offset:2px}.rp-widget-gallery-thumb-add[data-focus-visible]{outline:2px solid var(--rp-accent);outline-offset:2px}.rp-widget-gallery-thumb-add[data-disabled]{cursor:default;outline:none} diff --git a/luci-app-honk/root/etc/honk/doona/assets/Editors-CF-H0sca.js b/luci-app-honk/root/etc/honk/doona/assets/Editors-CF-H0sca.js deleted file mode 100644 index ebdb7fa2a..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Editors-CF-H0sca.js +++ /dev/null @@ -1 +0,0 @@ -import{r as e,$ as t,a as r,j as n}from"./vendor-react-64fcanlc.js";import{c8 as o,c9 as i,ca as a,cb as s,cc as l,cd as d,ce as c,cf as p,cg as u,ch as g,ci as f,cj as m,ck as h,cl as y,cm as D,cn as v,co as b,cp as w,cq as x,cr as T,cs as k,bf as E,ct as P,cu as K,cv as O,bJ as S,aV as C,cw as I,cx as j,aR as A,bo as R,O as M,H as B,F as L,aZ as F,cy as $,m as N,R as z,cz as V,cA as H,bv as X,l as Y,$ as U,U as q,cB as G,bU as J,cC as W,cD as _,cE as Z,cF as Q,X as ee,cG as te,cH as re,bj as ne,cI as oe,cJ as ie,bu as ae,cK as se,cL as le,a8 as de}from"./index-BgFj_VXE.js";import{u as ce,b as pe,s as ue,d as ge,c as fe,S as me,W as he,p as ye,m as De,e as ve,f as be,h as we,i as xe,j as Te,k as ke,l as Ee,n as Pe,P as Ke,o as Oe}from"./activity-D06xJ7oH.js";import{$ as Se,a as Ce}from"./GridList-BUQihjaB.js";import{$ as Ie}from"./Select-CkiGmyVC.js";import{D as je}from"./Delete-DA-ArqRQ.js";import{S as Ae,u as Re,$ as Me}from"./logs-BxISynQ4.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./format-s2EANuUb.js";import"./useGridSelectionCheckbox-BxnCShqN.js";var Be=function(e){return e[e.none=0]="none",e[e.cancel=0]="cancel",e[e.move=1]="move",e[e.copy=2]="copy",e[e.link=4]="link",e[e.all=7]="all",e}({});const Le={...Be,copyMove:3,copyLink:6,linkMove:5,all:7,uninitialized:7},Fe=ze(Le);Fe[7]="all";const $e={none:"cancel",link:"link",copy:"copy",move:"move"},Ne=ze($e);function ze(e){let t={};for(let r in e)t[e[r]]=r;return t}const Ve=new Set(["text/plain","text/uri-list","text/html"]),He="application/vnd.react-aria.items+json",Xe="application/octet-stream",Ye=new WeakMap,Ue=Symbol();function qe(e){let t=new Set;for(let r of e)for(let e of Object.keys(r))t.add(e);return t}function Ge(e){return e||(e="virtual"),"pointer"===e&&(e="virtual"),"virtual"===e&&"undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(pointer: coarse)").matches&&(e="touch"),e}function Je(){return Ge(o())}function We(){return Ge(i())}class _e{constructor(e){this.types=new Set;let t=!1;for(let r of e.items)r.type!==He&&("file"===r.kind&&(t=!0),r.type?this.types.add(r.type):this.types.add(Xe));this.includesUnknownTypes=!t&&e.types.includes("Files")}has(e){if(Array.isArray(e))return e.some(e=>this.has(e));if(this.includesUnknownTypes||e===Ue&&this.types.has(Xe)||"*/*"===e)return!0;if("string"==typeof e){if(e.endsWith("/*")){for(let t of this.types)if(t.startsWith(e.slice(0,-2)))return!0;return!1}return this.types.has(e)}return!1}}function Ze(e){if(!e)throw new Error("No file provided");return{kind:"file",type:e.type||Xe,name:e.name,getText:()=>{return"function"==typeof(t=e).text?t.text():new Promise((e,r)=>{let n=new FileReader;n.onload=()=>{e(n.result)},n.onerror=r,n.readAsText(t)});var t},getFile:()=>Promise.resolve(e)}}function Qe(e){return{kind:"directory",name:e.name,getEntries:()=>async function*(e){let t,r=e.createReader();do{t=await new Promise((e,t)=>{r.readEntries(e,t)});for(let e of t)if(e.isFile){let t=await et(e);yield Ze(t)}else e.isDirectory&&(yield Qe(e))}while(t.length>0)}(e)}}function et(e){return new Promise((t,r)=>e.file(t,r))}let tt,rt={draggingKeys:new Set};function nt(e){rt.dropCollectionRef=e}function ot(){rt={draggingKeys:new Set}}function it(e){let{draggingCollectionRef:t,dropCollectionRef:r}=rt;return null!=t?.current&&t.current===(e?.current||r?.current)}function at(e){tt=e}let st=Be.none;function lt(e){st=e}let dt=new Map,ct=new Map,pt=null,ut=new Set;function gt(e){return dt.set(e.element,e),pt?.updateValidDropTargets(),()=>{dt.delete(e.element),pt?.updateValidDropTargets()}}function ft(){let[t,r]=e.useState(pt);return e.useEffect(()=>{let e=()=>r(pt);return ut.add(e),()=>{ut.delete(e)}},[]),t}function mt(){return!!pt}const ht=["pointerdown","pointermove","pointerenter","pointerleave","pointerover","pointerout","pointerup","mousedown","mousemove","mouseenter","mouseleave","mouseover","mouseout","mouseup","touchstart","touchmove","touchend","focusin","focusout"],yt=["pointerup","mouseup","touchend"],Dt={keyboard:"dragStartedKeyboard",touch:"dragStartedTouch",virtual:"dragStartedVirtual"};class vt{constructor(e,t){this.validDropTargets=[],this.currentDropTarget=null,this.currentDropItem=null,this.dropOperation=null,this.mutationObserver=null,this.restoreAriaHidden=null,this.isVirtualClick=!1,this.dragTarget=e,this.stringFormatter=t,this.onKeyDown=this.onKeyDown.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),this.onClick=this.onClick.bind(this),this.onPointerDown=this.onPointerDown.bind(this),this.cancelEvent=this.cancelEvent.bind(this),this.initialFocused=!1}setup(){document.addEventListener("keydown",this.onKeyDown,!0),document.addEventListener("keyup",this.onKeyUp,!0),window.addEventListener("focus",this.onFocus,!0),window.addEventListener("blur",this.onBlur,!0),document.addEventListener("click",this.onClick,!0),document.addEventListener("pointerdown",this.onPointerDown,!0);for(let e of ht)document.addEventListener(e,this.cancelEvent,!0);this.mutationObserver=new MutationObserver(()=>this.updateValidDropTargets()),this.updateValidDropTargets(),a(this.stringFormatter.format(Dt[We()]))}teardown(){document.removeEventListener("keydown",this.onKeyDown,!0),document.removeEventListener("keyup",this.onKeyUp,!0),window.removeEventListener("focus",this.onFocus,!0),window.removeEventListener("blur",this.onBlur,!0),document.removeEventListener("click",this.onClick,!0),document.removeEventListener("pointerdown",this.onPointerDown,!0);for(let e of ht)document.removeEventListener(e,this.cancelEvent,!0);this.mutationObserver?.disconnect(),this.restoreAriaHidden?.()}onKeyDown(e){this.cancelEvent(e),"Escape"!==e.key?("Tab"!==e.key||e.metaKey||e.altKey||e.ctrlKey||(e.shiftKey?this.previous():this.next()),"function"==typeof this.currentDropTarget?.onKeyDown&&this.currentDropTarget.onKeyDown(e,this.dragTarget)):this.cancel()}onKeyUp(e){this.cancelEvent(e),"Enter"===e.key&&(e.altKey||s(this.getCurrentActivateButton(),l(e))?this.activate(this.currentDropTarget,this.currentDropItem):this.drop())}getCurrentActivateButton(){return this.currentDropItem?.activateButtonRef?.current??this.currentDropTarget?.activateButtonRef?.current??null}onFocus(e){let t=this.getCurrentActivateButton(),r=l(e);if(r===t)return void this.cancelEvent(e);if(r!==this.dragTarget.element&&this.cancelEvent(e),!(r instanceof HTMLElement)||r===this.dragTarget.element)return;let n=this.validDropTargets.find(e=>e.element===r)||this.validDropTargets.find(e=>s(e.element,r));if(!n)return void(this.currentDropTarget?this.currentDropTarget.element.focus():this.dragTarget.element.focus());let o=ct.get(r);n&&this.setCurrentDropTarget(n,o)}onBlur(e){let t=this.getCurrentActivateButton();t&&e.relatedTarget===t?this.cancelEvent(e):(l(e)!==this.dragTarget.element&&this.cancelEvent(e),e.relatedTarget&&e.relatedTarget instanceof HTMLElement||(this.currentDropTarget?this.currentDropTarget.element.focus():this.dragTarget.element.focus()))}onClick(e){if(this.cancelEvent(e),d(e)||this.isVirtualClick){let t=ct.values(),r=l(e),n=[...t].find(e=>e.element===r||s(e.activateButtonRef?.current,r)),o=this.validDropTargets.find(e=>s(e.element,r));if(s(n?.activateButtonRef?.current??o?.activateButtonRef?.current,r)&&o)return void this.activate(o,n);if(l(e)===this.dragTarget.element)return void this.cancel();o&&(this.setCurrentDropTarget(o,n),this.drop(n))}}onPointerDown(e){this.cancelEvent(e),this.isVirtualClick=c(e)}cancelEvent(e){let t=l(e);("focusin"!==e.type&&"focusout"!==e.type||t!==this.dragTarget?.element&&t!==this.getCurrentActivateButton())&&(yt.includes(e.type)||e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation())}updateValidDropTargets(){if(!this.mutationObserver)return;if(this.mutationObserver.disconnect(),this.restoreAriaHidden&&this.restoreAriaHidden(),this.validDropTargets=function(e){let t=qe(e.items);return[...dt.values()].filter(r=>!r.element.closest('[aria-hidden="true"], [inert]')&&("function"!=typeof r.getDropOperation||"cancel"!==r.getDropOperation(t,e.allowedDropOperations)))}(this.dragTarget),this.validDropTargets.length>0){let e=this.findNearestDropTarget();this.validDropTargets=[...this.validDropTargets.slice(e),...this.validDropTargets.slice(0,e)]}this.currentDropTarget&&!this.validDropTargets.includes(this.currentDropTarget)&&this.setCurrentDropTarget(this.validDropTargets[0]);let e=qe(this.dragTarget.items),t=[...ct.values()].filter(t=>"function"!=typeof t.getDropOperation||"cancel"!==t.getDropOperation(e,this.dragTarget.allowedDropOperations)),r=this.validDropTargets.filter(e=>!t.some(t=>s(e.element,t.element)));this.restoreAriaHidden=p([this.dragTarget.element,...t.flatMap(e=>e.activateButtonRef?.current?[e.element,e.activateButtonRef?.current]:[e.element]),...r.flatMap(e=>e.activateButtonRef?.current?[e.element,e.activateButtonRef?.current]:[e.element])],{shouldUseInert:!0}),this.mutationObserver.observe(document.body,{subtree:!0,attributes:!0,attributeFilter:["aria-hidden","inert"]})}next(){if(!this.currentDropTarget)return void this.setCurrentDropTarget(this.validDropTargets[0]);let e=this.validDropTargets.indexOf(this.currentDropTarget);e<0?this.setCurrentDropTarget(this.validDropTargets[0]):e===this.validDropTargets.length-1?this.dragTarget.element.closest('[aria-hidden="true"], [inert]')?this.setCurrentDropTarget(this.validDropTargets[0]):(this.setCurrentDropTarget(null),this.dragTarget.element.focus()):this.setCurrentDropTarget(this.validDropTargets[e+1])}previous(){if(!this.currentDropTarget)return void this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length-1]);let e=this.validDropTargets.indexOf(this.currentDropTarget);e<0?this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length-1]):0===e?this.dragTarget.element.closest('[aria-hidden="true"], [inert]')?this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length-1]):(this.setCurrentDropTarget(null),this.dragTarget.element.focus()):this.setCurrentDropTarget(this.validDropTargets[e-1])}findNearestDropTarget(){let e=this.dragTarget.element.getBoundingClientRect(),t=1/0,r=-1,n=-1;for(let o=0;o=0?n:r}setCurrentDropTarget(e,t){if(e!==this.currentDropTarget){if(this.currentDropTarget&&"function"==typeof this.currentDropTarget.onDropExit){let e=this.currentDropTarget.element.getBoundingClientRect();this.currentDropTarget.onDropExit({type:"dropexit",x:e.left+e.width/2,y:e.top+e.height/2})}if(this.currentDropTarget=e,e){if("function"==typeof e.onDropEnter){let t=e.element.getBoundingClientRect();e.onDropEnter({type:"dropenter",x:t.left+t.width/2,y:t.top+t.height/2},this.dragTarget)}t||e?.element.focus()}}if(null!=t&&t!==this.currentDropItem&&(this.currentDropTarget&&"function"==typeof this.currentDropTarget.onDropTargetEnter&&this.currentDropTarget.onDropTargetEnter(t.target),t.element.focus(),this.currentDropItem=t,!this.initialFocused)){let e=t?.element.getAttribute("aria-label");e&&a(e,"polite"),this.initialFocused=!0}}end(){if(this.teardown(),function(){pt=null;for(let e of ut)e()}(),"function"==typeof this.dragTarget.onDragEnd){let e=(this.currentDropTarget&&"cancel"!==this.dropOperation?this.currentDropTarget:this.dragTarget).element.getBoundingClientRect();this.dragTarget.onDragEnd({type:"dragend",x:e.x+e.width/2,y:e.y+e.height/2,dropOperation:this.dropOperation||"cancel"})}this.currentDropTarget&&!this.currentDropTarget.preventFocusOnDrop&&u()?.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),this.setCurrentDropTarget(null)}cancel(){this.setCurrentDropTarget(null),this.end(),this.dragTarget.element.closest('[aria-hidden="true"], [inert]')||this.dragTarget.element.focus(),u()?.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),a(this.stringFormatter.format("dropCanceled"))}drop(e){if(this.currentDropTarget){if("function"==typeof e?.getDropOperation){let t=qe(this.dragTarget.items);this.dropOperation=e.getDropOperation(t,this.dragTarget.allowedDropOperations)}else if("function"==typeof this.currentDropTarget.getDropOperation){let e=qe(this.dragTarget.items);this.dropOperation=this.currentDropTarget.getDropOperation(e,this.dragTarget.allowedDropOperations)}else this.dropOperation=this.dragTarget.allowedDropOperations[0];if("function"==typeof this.currentDropTarget.onDrop){let t=this.dragTarget.items.map(e=>({kind:"text",types:new Set(Object.keys(e)),getText:t=>Promise.resolve(e[t])})),r=this.currentDropTarget.element.getBoundingClientRect();this.currentDropTarget.onDrop({type:"drop",x:r.left+r.width/2,y:r.top+r.height/2,items:t,dropOperation:this.dropOperation},e?.target??null)}this.end(),a(this.stringFormatter.format("dropComplete"))}else this.cancel()}activate(e,t){if(e&&"function"==typeof e.onDropActivate){let r=t?.target??null,n=e.element.getBoundingClientRect();e.onDropActivate({type:"dropactivate",x:n.left+n.width/2,y:n.top+n.height/2},r)}}}var bt;bt={"ar-AE":g,"bg-BG":g,"cs-CZ":g,"da-DK":g,"de-DE":g,"el-GR":g,"en-US":{dragItem:e=>`Drag ${e.itemText}`,dragSelectedItems:(e,t)=>`Drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}`,dragDescriptionKeyboard:"Press Enter to start dragging.",dragDescriptionKeyboardAlt:"Press Alt + Enter to start dragging.",dragDescriptionTouch:"Double tap to start dragging.",dragDescriptionVirtual:"Click to start dragging.",dragDescriptionLongPress:"Long press to start dragging.",dragSelectedKeyboard:(e,t)=>`Press Enter to drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}.`,dragSelectedKeyboardAlt:(e,t)=>`Press Alt + Enter to drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}.`,dragSelectedLongPress:(e,t)=>`Long press to drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}.`,dragStartedKeyboard:"Started dragging. Press Tab to navigate to a drop target, then press Enter to drop, or press Escape to cancel.",dragStartedTouch:"Started dragging. Navigate to a drop target, then double tap to drop.",dragStartedVirtual:"Started dragging. Navigate to a drop target, then click or press Enter to drop.",endDragKeyboard:"Dragging. Press Enter to cancel drag.",endDragTouch:"Dragging. Double tap to cancel drag.",endDragVirtual:"Dragging. Click to cancel drag.",dropDescriptionKeyboard:"Press Enter to drop. Press Escape to cancel drag.",dropDescriptionTouch:"Double tap to drop.",dropDescriptionVirtual:"Click to drop.",dropCanceled:"Drop canceled.",dropComplete:"Drop complete.",dropIndicator:"drop indicator",dropOnRoot:"Drop on",dropOnItem:e=>`Drop on ${e.itemText}`,insertBefore:e=>`Insert before ${e.itemText}`,insertBetween:e=>`Insert between ${e.beforeItemText} and ${e.afterItemText}`,insertAfter:e=>`Insert after ${e.itemText}`},"es-ES":g,"et-EE":g,"fi-FI":g,"fr-FR":g,"he-IL":g,"hr-HR":g,"hu-HU":g,"it-IT":g,"ja-JP":g,"ko-KR":g,"lt-LT":g,"lv-LV":g,"nb-NO":g,"nl-NL":g,"pl-PL":g,"pt-BR":g,"pt-PT":g,"ro-RO":g,"ru-RU":g,"sk-SK":g,"sl-SI":g,"sr-SP":g,"sv-SE":g,"tr-TR":g,"uk-UA":g,"zh-CN":{dragDescriptionKeyboard:"按 Enter 开始拖动。",dragDescriptionKeyboardAlt:"按 Alt + Enter 开始拖动。",dragDescriptionLongPress:"长按以开始拖动。",dragDescriptionTouch:"双击开始拖动。",dragDescriptionVirtual:"单击开始拖动。",dragItem:e=>`拖动 ${e.itemText}`,dragSelectedItems:(e,t)=>`拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 选中项目`,other:()=>`${t.number(e.count)} 选中项目`})}`,dragSelectedKeyboard:(e,t)=>`按 Enter 以拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 个选定项`,other:()=>`${t.number(e.count)} 个选定项`})}。`,dragSelectedKeyboardAlt:(e,t)=>`按 Alt + Enter 以拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 个选定项`,other:()=>`${t.number(e.count)} 个选定项`})}。`,dragSelectedLongPress:(e,t)=>`长按以拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 个选定项`,other:()=>`${t.number(e.count)} 个选定项`})}。`,dragStartedKeyboard:"已开始拖动。按 Tab 导航到放置目标,然后按 Enter 放置或按 Escape 取消。",dragStartedTouch:"已开始拖动。导航到放置目标,然后双击放置。",dragStartedVirtual:"已开始拖动。导航到放置目标,然后单击或按 Enter 放置。",dropCanceled:"放置已取消。",dropComplete:"放置已完成。",dropDescriptionKeyboard:"按 Enter 放置。按 Escape 取消拖动。",dropDescriptionTouch:"双击放置。",dropDescriptionVirtual:"单击放置。",dropIndicator:"放置标记",dropOnItem:e=>`放置于 ${e.itemText}`,dropOnRoot:"放置于",endDragKeyboard:"正在拖动。按 Enter 取消拖动。",endDragTouch:"正在拖动。双击取消拖动。",endDragVirtual:"正在拖动。单击取消拖动。",insertAfter:e=>`插入到 ${e.itemText} 之后`,insertBefore:e=>`插入到 ${e.itemText} 之前`,insertBetween:e=>`插入到 ${e.beforeItemText} 和 ${e.afterItemText} 之间`},"zh-TW":{dragDescriptionKeyboard:"按 Enter 鍵以開始拖曳。",dragDescriptionKeyboardAlt:"按 Alt+Enter 鍵以開始拖曳。",dragDescriptionLongPress:"長按以開始拖曳。",dragDescriptionTouch:"輕點兩下以開始拖曳。",dragDescriptionVirtual:"按一下滑鼠以開始拖曳。",dragItem:e=>`拖曳「${e.itemText}」`,dragSelectedItems:(e,t)=>`拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}`,dragSelectedKeyboard:(e,t)=>`按 Enter 鍵以拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}。`,dragSelectedKeyboardAlt:(e,t)=>`按 Alt+Enter 鍵以拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}。`,dragSelectedLongPress:(e,t)=>`長按以拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}。`,dragStartedKeyboard:"已開始拖曳。按 Tab 鍵以瀏覽至放置目標,然後按 Enter 鍵以放置,或按 Escape 鍵以取消。",dragStartedTouch:"已開始拖曳。瀏覽至放置目標,然後輕點兩下以放置。",dragStartedVirtual:"已開始拖曳。瀏覽至放置目標,然後按一下滑鼠或按 Enter 鍵以放置。",dropCanceled:"放置已取消。",dropComplete:"放置已完成。",dropDescriptionKeyboard:"按 Enter 鍵以放置。按 Escape 鍵以取消拖曳。",dropDescriptionTouch:"輕點兩下以放置。",dropDescriptionVirtual:"按一下滑鼠以放置。",dropIndicator:"放置指示器",dropOnItem:e=>`放置在「${e.itemText}」上`,dropOnRoot:"放置在",endDragKeyboard:"拖曳中。按 Enter 鍵以取消拖曳。",endDragTouch:"拖曳中。輕點兩下以取消拖曳。",endDragVirtual:"拖曳中。按一下滑鼠以取消拖曳。",insertAfter:e=>`插入至「${e.itemText}」之後`,insertBefore:e=>`插入至「${e.itemText}」之前`,insertBetween:e=>`插入至「${e.beforeItemText}」和「${e.afterItemText}」之間`}};const wt={keyboard:"dropDescriptionKeyboard",touch:"dropDescriptionTouch",virtual:"dropDescriptionVirtual"};function xt(){let e=f((t=bt)&&t.__esModule?t.default:t,"@react-aria/dnd");var t;let r=Je(),n=ft();return{dropProps:{...m(n?e.format(wt[r]):""),onClick:()=>{}}}}function Tt(t){let{hasDropButton:r,isDisabled:n}=t,[o,i]=e.useState(!1),a=e.useRef({x:0,y:0,dragOverElements:new Set,dropEffect:"none",allowedOperations:Be.all,dropActivateTimer:void 0}).current,d=e=>{if(i(!0),"function"==typeof t.onDropEnter){let r=e.currentTarget.getBoundingClientRect();t.onDropEnter({type:"dropenter",x:e.clientX-r.x,y:e.clientY-r.y})}},c=e=>{if(i(!1),"function"==typeof t.onDropExit){let r=e.currentTarget.getBoundingClientRect();t.onDropExit({type:"dropexit",x:e.clientX-r.x,y:e.clientY-r.y})}},p=h(e=>{"function"==typeof t.onDropEnter&&t.onDropEnter(e)}),u=h(e=>{"function"==typeof t.onDropExit&&t.onDropExit(e)}),g=h(e=>{"function"==typeof t.onDropActivate&&t.onDropActivate(e)}),f=h(e=>{"function"==typeof t.onDrop&&t.onDrop(e)}),m=h((e,r)=>t.getDropOperation?t.getDropOperation(e,r):r[0]),{ref:D}=t;y(()=>{if(!n&&D.current)return gt({element:D.current,getDropOperation:m,onDropEnter(e){i(!0),p(e)},onDropExit(e){i(!1),u(e)},onDrop:f,onDropActivate:g})},[n,D]);let{dropProps:v}=xt();return n?{dropProps:{},dropButtonProps:{isDisabled:!0},isDropTarget:!1}:{dropProps:{...!r&&v,onDragEnter:e=>{if(e.preventDefault(),e.stopPropagation(),a.dragOverElements.add(l(e)),a.dragOverElements.size>1)return;let r=kt(e),n=Et(r),o=n[0];if("function"==typeof t.getDropOperation){let i=new _e(e.dataTransfer);o=Pt(r,t.getDropOperation(i,n))}if("function"==typeof t.getDropOperationForPoint){let i=new _e(e.dataTransfer),a=e.currentTarget.getBoundingClientRect();o=Pt(r,t.getDropOperationForPoint(i,n,e.clientX-a.x,e.clientY-a.y))}a.x=e.clientX,a.y=e.clientY,a.allowedOperations=r,a.dropEffect=Ne[o]||"none",e.dataTransfer.dropEffect=a.dropEffect,"cancel"!==o&&d(e)},onDragOver:e=>{e.preventDefault(),e.stopPropagation();let r=kt(e);if(e.clientX===a.x&&e.clientY===a.y&&r===a.allowedOperations)return void(e.dataTransfer.dropEffect=a.dropEffect);a.x=e.clientX,a.y=e.clientY;let n=a.dropEffect;if(r!==a.allowedOperations){let n=Et(r),o=n[0];if("function"==typeof t.getDropOperation){let i=new _e(e.dataTransfer);o=Pt(r,t.getDropOperation(i,n))}a.dropEffect=Ne[o]||"none"}if("function"==typeof t.getDropOperationForPoint){let n=new _e(e.dataTransfer),o=e.currentTarget.getBoundingClientRect(),i=Pt(r,t.getDropOperationForPoint(n,Et(r),a.x-o.x,a.y-o.y));a.dropEffect=Ne[i]||"none"}if(a.allowedOperations=r,e.dataTransfer.dropEffect=a.dropEffect,"none"===a.dropEffect&&"none"!==n?c(e):"none"!==a.dropEffect&&"none"===n&&d(e),"function"==typeof t.onDropMove&&"none"!==a.dropEffect){let r=e.currentTarget.getBoundingClientRect();t.onDropMove({type:"dropmove",x:a.x-r.x,y:a.y-r.y})}if(clearTimeout(a.dropActivateTimer),t.onDropActivate&&"function"==typeof t.onDropActivate&&"none"!==a.dropEffect){let r=t.onDropActivate,n=e.currentTarget.getBoundingClientRect();a.dropActivateTimer=setTimeout(()=>{r({type:"dropactivate",x:a.x-n.x,y:a.y-n.y})},800)}},onDragLeave:e=>{e.preventDefault(),e.stopPropagation();let t=l(e);if(a.dragOverElements.delete(t),t===e.currentTarget)for(let r of a.dragOverElements)s(e.currentTarget,r)||a.dragOverElements.delete(r);a.dragOverElements.size>0||("none"!==a.dropEffect&&c(e),clearTimeout(a.dropActivateTimer))},onDrop:e=>{if(e.preventDefault(),e.stopPropagation(),at(a.dropEffect),"function"==typeof t.onDrop){let r=$e[a.dropEffect],n=function(e){let t=[];if(!e)return t;let r=!1;if(e.types.includes(He))try{let n=e.getData(He),o=JSON.parse(n);for(let e of o)t.push({kind:"text",types:new Set(Object.keys(e)),getText:t=>Promise.resolve(e[t])});r=!0}catch{}if(!r){let r=new Map;for(let n of e.items)if("string"===n.kind)r.set(n.type||Xe,e.getData(n.type));else if("file"===n.kind)if("function"==typeof n.webkitGetAsEntry){let e=n.webkitGetAsEntry();if(!e)continue;e.isFile?t.push(Ze(n.getAsFile())):e.isDirectory&&t.push(Qe(e))}else t.push(Ze(n.getAsFile()));r.size>0&&t.push({kind:"text",types:new Set(r.keys()),getText:e=>Promise.resolve(r.get(e))})}return t}(e.dataTransfer),o=e.currentTarget.getBoundingClientRect(),i={type:"drop",x:e.clientX-o.x,y:e.clientY-o.y,items:n,dropOperation:r};t.onDrop(i)}let r={...rt};a.dragOverElements.clear(),c(e),clearTimeout(a.dropActivateTimer),null==r.draggingCollectionRef?at(void 0):function(e){rt=e}(r)}},dropButtonProps:{...r&&v},isDropTarget:o}}function kt(e){let t=Le[e.dataTransfer.effectAllowed];st&&(t&=st);let r=Be.none;return D()?(e.altKey&&(r|=Be.copy),e.ctrlKey&&!v()&&(r|=Be.link),e.metaKey&&(r|=Be.move)):(e.altKey&&(r|=Be.link),e.shiftKey&&(r|=Be.move),e.ctrlKey&&(r|=Be.copy)),r?t&r:t}function Et(e){let t=[];return e&Be.move&&t.push("move"),e&Be.copy&&t.push("copy"),e&Be.link&&t.push("link"),t}function Pt(e,t){return e&Be[t]?t:"cancel"}function Kt(e,t,r,n=!1,o=null){if(!r)return{type:"root"};if("root"===r.type){let t=e.getFirstKey?.()??null;return null!=t?{type:"item",key:t,dropPosition:"before"}:null}if("item"===r.type){let n=null;n=o?"right"===o?e.getKeyRightOf?.(r.key,{includeDisabled:!0}):e.getKeyLeftOf?.(r.key,{includeDisabled:!0}):e.getKeyBelow?.(r.key,{includeDisabled:!0});let i=Ct(t,r.key,e=>t.getKeyAfter(e));if(null!=n&&n!==i)return{type:"item",key:n,dropPosition:r.dropPosition};switch(r.dropPosition){case"before":return{type:"item",key:r.key,dropPosition:"on"};case"on":{let e=t.getItem(r.key),o=null!=n?t.getItem(n):null;return e&&o&&o.level>=e.level?{type:"item",key:o.key,dropPosition:"before"}:{type:"item",key:r.key,dropPosition:"after"}}case"after":{let e=t.getItem(r.key),n=null!=e?.nextKey?t.getItem(e.nextKey):null;for(;null!=n&&"item"!==n.type;)n=null!=n.nextKey?t.getItem(n.nextKey):null;if(e&&null==n&&null!=e.parentKey){let r=t.getItem(e.parentKey);const n=null!=r?.nextKey?t.getItem(r.nextKey):null;if("item"===n?.type)return{type:"item",key:n.key,dropPosition:"before"};if("item"===r?.type)return{type:"item",key:r.key,dropPosition:"after"}}if(n)return{type:"item",key:n.key,dropPosition:"on"}}}}return n?{type:"root"}:null}function Ot(e,t,r,n=!1,o=null){if(!r||n&&"root"===r.type){let r=null,n=e.getLastKey?.();for(;null!=n;){let e=t.getItem(n);if("item"!==e?.type)break;r=n,n=e?.parentKey}return null!=r?{type:"item",key:r,dropPosition:"after"}:null}if("item"===r.type){let n=null;n=o?"left"===o?e.getKeyLeftOf?.(r.key,{includeDisabled:!0}):e.getKeyRightOf?.(r.key,{includeDisabled:!0}):e.getKeyAbove?.(r.key,{includeDisabled:!0});let i=Ct(t,r.key,e=>t.getKeyBefore(e));if(null!=n&&n!==i)return{type:"item",key:n,dropPosition:r.dropPosition};switch(r.dropPosition){case"before":{let e=t.getItem(r.key);if(e&&null!=e.prevKey){let r=St(t,e.prevKey);if(r)return r}return null!=n?{type:"item",key:n,dropPosition:"on"}:{type:"root"}}case"on":return{type:"item",key:r.key,dropPosition:"before"};case"after":{let e=St(t,r.key);return e||{type:"item",key:r.key,dropPosition:"on"}}}}return"root"!==r.type?{type:"root"}:null}function St(e,t){let r=e.getItem(t),n=Ct(e,t,t=>e.getKeyAfter(t)),o=null!=n?e.getItem(n):null;if(r&&o&&o.level>r.level){let t=null;if("lastChildKey"in r)for(t=null!=r.lastChildKey?e.getItem(r.lastChildKey):null;t&&"item"!==t.type&&null!=t.prevKey;)t=e.getItem(t.prevKey);else t=Array.from(r.childNodes).findLast(e=>"item"===e.type)||null;if(t)return{type:"item",key:t.key,dropPosition:"after"}}return null}function Ct(e,t,r){let n=r(t),o=null!=n?e.getItem(n):null;for(;o&&"item"!==o.type;)n=r(o.key),o=null!=n?e.getItem(n):null;return n}function It(t,r,n){let o=e.useRef({props:t,state:r,nextTarget:null,dropOperation:null}).current;o.props=t,o.state=r;let i=e.useCallback(async e=>{let{onInsert:t,onRootDrop:r,onItemDrop:i,onReorder:a,onMove:s,acceptedDragTypes:l="all",shouldAcceptItemDrop:d}=o.props,{draggingKeys:c}=rt,p=it(n),{target:u,dropOperation:g,items:f}=e,m=f;("all"!==l||d)&&(m=f.filter(e=>{let t;return t="directory"===e.kind?new Set([Ue]):"file"===e.kind?new Set([e.type]):e.types,!("all"!==l&&!l.some(e=>t.has(e)))&&("item"!==u.type||"on"!==u.dropPosition||!d||d(u,t))})),m.length>0&&("root"===u.type&&r&&await r({items:m,dropOperation:g}),"item"===u.type&&("on"===u.dropPosition&&i&&await i({items:m,dropOperation:g,isInternal:p,target:u}),s&&p&&await s({keys:c,dropOperation:g,target:u}),"on"!==u.dropPosition&&(!p&&t&&await t({items:m,dropOperation:g,target:u}),p&&a&&await a({keys:c,dropOperation:g,target:u}))))},[o,n]),a=function(t){let r=e.useRef(null),n=e.useRef(!0),o=e.useRef(!0);e.useEffect(()=>{if(t.current){r.current=b(t.current)?t.current:w(t.current);let e=window.getComputedStyle(r.current);n.current=/(auto|scroll)/.test(e.overflowX),o.current=/(auto|scroll)/.test(e.overflowY)}},[t]);let i=e.useRef({timer:void 0,dx:0,dy:0}).current;e.useEffect(()=>()=>{i.timer&&(cancelAnimationFrame(i.timer),i.timer=void 0)},[i]);let a=e.useCallback(()=>{n.current&&r.current&&(r.current.scrollLeft+=i.dx),o.current&&r.current&&(r.current.scrollTop+=i.dy),i.timer&&(i.timer=requestAnimationFrame(a))},[r,i]);return{move(e,t){if(!x()||T()||!r.current)return;let n=r.current.getBoundingClientRect(),o=n.height-20,s=n.width-20;e<20||e>s||t<20||t>o?(e<20?i.dx=e-20:e>s&&(i.dx=e-s),t<20?i.dy=t-20:t>o&&(i.dy=t-o),i.timer||(i.timer=requestAnimationFrame(a))):this.stop()},stop(){i.timer&&(cancelAnimationFrame(i.timer),i.timer=void 0)}}}(n),{dropProps:s}=Tt({ref:n,onDropEnter(){null!=o.nextTarget&&r.setTarget(o.nextTarget)},onDropMove(e){null!=o.nextTarget&&r.setTarget(o.nextTarget),a.move(e.x,e.y)},getDropOperationForPoint(e,i,a,s){let{draggingKeys:l,dropCollectionRef:d}=rt,c=it(n),p=t.dropTargetDelegate.getDropTargetFromPoint(a,s,t=>"cancel"!==r.getDropOperation({target:t,types:e,allowedOperations:i,isInternal:c,draggingKeys:l}));if(!p)return o.dropOperation="cancel",o.nextTarget=null,"cancel";if(o.dropOperation=r.getDropOperation({target:p,types:e,allowedOperations:i,isInternal:c,draggingKeys:l}),"cancel"===o.dropOperation){let t={type:"root"},n=r.getDropOperation({target:t,types:e,allowedOperations:i,isInternal:c,draggingKeys:l});"cancel"!==n&&(p=t,o.dropOperation=n)}return p&&"cancel"!==o.dropOperation&&n?.current!==d?.current&&nt(n),o.nextTarget="cancel"===o.dropOperation?null:p,o.dropOperation},onDropExit(){nt(void 0),r.setTarget(null),a.stop()},onDropActivate(e){"item"===r.target?.type&&"function"==typeof t.onDropActivate&&t.onDropActivate({type:"dropactivate",x:e.x,y:e.y,target:r.target})},onDrop(e){nt(n),r.target&&c(e,r.target);let{draggingCollectionRef:t}=rt;null==t&&ot()}}),l=e.useRef(null),d=e.useCallback(()=>{let{state:e}=o;if(l.current){let{target:t,collection:r,selectedKeys:n,focusedKey:o,isInternal:i,draggingKeys:a}=l.current;if(e.collection.size>r.size&&e.selectionManager.isSelectionEqual(n)){let t=new Set,n=e.collection.getFirstKey();for(;null!=n;){let o=e.collection.getItem(n);"item"!==o?.type||r.getItem(o.key)||t.add(o.key),n=o?.hasChildNodes&&"item"===e.collection.getItem(o.lastChildKey)?.type?o.firstChildKey:e.collection.getKeyAfter(n)}if(e.selectionManager.setSelectedKeys(t),e.selectionManager.focusedKey===o){let r=t.keys().next().value;if(null!=r){let t=e.collection.getItem(r),n=l.current.target,o=!!e.collection.expandedKeys&&e.collection.expandedKeys.has(t?.parentKey);t&&("cell"===t?.type||"item"===n.type&&"on"===n.dropPosition&&!o)&&(r=t.parentKey),null!=r&&e.selectionManager.setFocusedKey(r),"none"===e.selectionManager.selectionMode&&k("keyboard")}}}else null!=o&&e.selectionManager.focusedKey===o&&i&&"item"===t.type&&"on"!==t.dropPosition&&a.has(e.collection.getItem(o)?.parentKey)?(e.selectionManager.setFocusedKey(e.collection.getItem(o)?.parentKey??null),k("keyboard")):e.selectionManager.focusedKey===o&&"item"===t.type&&"on"===t.dropPosition&&null!=e.collection.getItem(t.key)?(e.selectionManager.setFocusedKey(t.key),k("keyboard")):null==e.selectionManager.focusedKey||e.selectionManager.isSelected(e.selectionManager.focusedKey)||k("keyboard");e.selectionManager.setFocused(!0)}},[o]),c=e.useCallback((e,t)=>{let{state:r}=o;l.current={timeout:void 0,focusedKey:r.selectionManager.focusedKey,collection:r.collection,selectedKeys:r.selectionManager.selectedKeys,draggingKeys:rt.draggingKeys,isInternal:it(n),target:t},(o.props.onDrop||i)({type:"drop",x:e.x,y:e.y,target:t,items:e.items,dropOperation:e.dropOperation}),l.current.timeout=setTimeout(()=>{d(),l.current=null},50)},[o,i,n,d]);e.useEffect(()=>()=>{l.current&&clearTimeout(l.current.timeout)},[]),y(()=>{l.current&&r.collection!==l.current.collection&&d()});let{direction:p}=E();e.useEffect(()=>{if(!n.current)return;let e=(e,t=!0,r="down")=>function(e,t,r,n,o=!1,i=!1){switch(n){case"left":return o?Kt(e,t,r,i,"left"):Ot(e,t,r,i,"left");case"right":return o?Ot(e,t,r,i,"right"):Kt(e,t,r,i,"right");case"up":return Ot(e,t,r,i);case"down":return Kt(e,t,r,i)}}(o.props.keyboardDelegate,o.state.collection,e,r,"rtl"===p,t),t=(t,r=!0)=>e(t,r,"up"),r=(e,t,r,i,a=!0)=>{let s,l=0,{draggingKeys:d}=rt,c=it(n);do{let n=i(e,a);if(!n)return null;e=n,s=o.state.getDropOperation({target:n,types:t,allowedOperations:r,isInternal:c,draggingKeys:d}),"root"===e.type&&l++}while("cancel"===s&&!o.state.isDropTarget(e)&&l<2);return"cancel"===s?null:e};return gt({element:n.current,preventFocusOnDrop:!0,getDropOperation(t,i){if(o.state.target){let{draggingKeys:e}=rt,r=it(n);return o.state.getDropOperation({target:o.state.target,types:t,allowedOperations:i,isInternal:r,draggingKeys:e})}return r(null,t,i,e)?"move":"cancel"},onDropEnter(i,a){let s=qe(a.items),l=o.state.selectionManager,d=null;nt(n);let c=l.focusedKey,p="after",u=null!=c?o.state.collection.getItem(c):null;if("cell"===u?.type&&(c=u.parentKey),null!=c&&l.isSelected(c)&&(l.selectedKeys.size>1&&l.firstSelectedKey===c?p="before":c=l.lastSelectedKey),null!=c){d={type:"item",key:c,dropPosition:p};let{draggingKeys:i}=rt,l=it(n);"cancel"===o.state.getDropOperation({target:d,types:s,allowedOperations:a.allowedDropOperations,isInternal:l,draggingKeys:i})&&(d=r(d,s,a.allowedDropOperations,e,!1)??r(d,s,a.allowedDropOperations,t,!1))}d||(d=r(null,s,a.allowedDropOperations,e)),o.state.setTarget(d)},onDropExit(){nt(void 0),o.state.setTarget(null)},onDropTargetEnter(e){o.state.setTarget(e)},onDropActivate(e,t){"item"===t?.type&&"on"===t?.dropPosition&&"function"==typeof o.props.onDropActivate&&o.props.onDropActivate({type:"dropactivate",x:e.x,y:e.y,target:t})},onDrop(e,t){nt(n),o.state.target&&c(e,t||o.state.target)},onKeyDown(i,a){let{keyboardDelegate:s}=o.props,l=qe(a.items);switch(i.key){case"ArrowDown":if(s.getKeyBelow){let t=r(o.state.target,l,a.allowedDropOperations,(t,r)=>e(t,r,"down"));o.state.setTarget(t)}break;case"ArrowUp":if(s.getKeyAbove){let t=r(o.state.target,l,a.allowedDropOperations,(t,r)=>e(t,r,"up"));o.state.setTarget(t)}break;case"ArrowLeft":if(s.getKeyLeftOf){let t=r(o.state.target,l,a.allowedDropOperations,(t,r)=>e(t,r,"left"));o.state.setTarget(t)}break;case"ArrowRight":if(s.getKeyRightOf){let t=r(o.state.target,l,a.allowedDropOperations,(t,r)=>e(t,r,"right"));o.state.setTarget(t)}break;case"Home":if(s.getFirstKey){let t=r(null,l,a.allowedDropOperations,e);o.state.setTarget(t)}break;case"End":if(s.getLastKey){let e=r(null,l,a.allowedDropOperations,t);o.state.setTarget(e)}break;case"PageDown":if(s.getKeyPageBelow){let i=o.state.target;if(i){let d=s.getFirstKey?.();"item"===i.type&&(d=i.key);let c=null;null!=d&&(c=s.getKeyPageBelow(d));let p="item"===i.type?i.dropPosition:"after";if((null==c||"item"===i.type&&i.key===s.getLastKey?.())&&(c=s.getLastKey?.()??null,p="after"),null==c)break;i={type:"item",key:c,dropPosition:p};let{draggingCollectionRef:u,draggingKeys:g}=rt,f=u?.current===n?.current;"cancel"===o.state.getDropOperation({target:i,types:l,allowedOperations:a.allowedDropOperations,isInternal:f,draggingKeys:g})&&(i=r(i,l,a.allowedDropOperations,e,!1)??r(i,l,a.allowedDropOperations,t,!1))}else i=r(null,l,a.allowedDropOperations,e);o.state.setTarget(i??o.state.target)}break;case"PageUp":{if(!s.getKeyPageAbove)break;let i=o.state.target;if(i){if("item"===i.type){if(i.key===s.getFirstKey?.())i={type:"root"};else{let e=s.getKeyPageAbove(i.key),t=i.dropPosition;if(null==e&&(e=s.getFirstKey?.(),t="before"),null==e)break;i={type:"item",key:e,dropPosition:t}}let{draggingKeys:d}=rt,c=it(n);"cancel"===o.state.getDropOperation({target:i,types:l,allowedOperations:a.allowedDropOperations,isInternal:c,draggingKeys:d})&&(i=r(i,l,a.allowedDropOperations,t,!1)??r(i,l,a.allowedDropOperations,e,!1))}}else i=r(null,l,a.allowedDropOperations,t);o.state.setTarget(i??o.state.target);break}}o.props.onKeyDown?.(i)}})},[o,n,c,p]);let u=P();return Ye.set(r,{id:u,ref:n}),{collectionProps:K(s,{id:u,"aria-describedby":null})}}function jt(t,r,n){let{dropProps:o}=xt(),i=function(e){let{ref:t}=Ye.get(e)||{};if(!t)throw new Error("Droppable item outside a droppable collection");return t}(r);e.useEffect(()=>{if(n.current)return e={element:n.current,target:t.target,getDropOperation(e,n){let{draggingKeys:o}=rt,a=it(i);return r.getDropOperation({target:t.target,types:e,allowedOperations:n,isInternal:a,draggingKeys:o})},activateButtonRef:t.activateButtonRef},ct.set(e.element,e),()=>{ct.delete(e.element)};var e},[n,t.target,r,i,t.activateButtonRef]);let a=ft(),{draggingKeys:s}=rt,l=it(i),d=a&&"cancel"!==r.getDropOperation({target:t.target,types:qe(a.dragTarget.items),allowedOperations:a.dragTarget.allowedDropOperations,isInternal:l,draggingKeys:s}),c=r.isDropTarget(t.target);return e.useEffect(()=>{a&&c&&n.current&&n.current.focus()},[c,a,n]),{dropProps:{...o,"aria-hidden":!a||d?void 0:"true"},isDropTarget:c}}function At(e,t,r){let{target:n}=e,{collection:o}=t,i=f((a=bt)&&a.__esModule?a.default:a,"@react-aria/dnd");var a;let s,l=ft(),{dropProps:d}=jt(e,t,r),c=P(),p=e=>null==e?"":o.getTextValue?.(e)??o.getItem(e)?.textValue??"",u="";if("root"===n.type)u=i.format("dropOnRoot"),s=`${c} ${function(e){let{id:t}=Ye.get(e)||{};if(!t)throw new Error("Droppable item outside a droppable collection");return t}(t)}`;else if("on"===n.dropPosition)u=i.format("dropOnItem",{itemText:p(n.key)});else{let e,t;if("before"===n.dropPosition){let t=o.getItem(n.key)?.prevKey,r=null!=t?o.getItem(t):null;e="item"===r?.type?r.key:null}else e=n.key;if("after"===n.dropPosition){let e=o.getItem(n.key)?.nextKey,r=null!=e?o.getItem(e):null;t="item"===r?.type?r.key:null}else t=n.key;null!=e&&null!=t?u=i.format("insertBetween",{beforeItemText:p(e),afterItemText:p(t)}):null!=e?u=i.format("insertAfter",{itemText:p(e)}):null!=t&&(u=i.format("insertBefore",{itemText:p(t)}))}let g=t.isDropTarget(n),m=l?d["aria-hidden"]:"true";return{dropIndicatorProps:{...d,id:c,"aria-roledescription":i.format("dropIndicator"),"aria-label":u,"aria-labelledby":s,"aria-hidden":m,tabIndex:-1},isDropTarget:g,isHidden:!g&&!!m}}const Rt={keyboard:{start:"dragDescriptionKeyboard",end:"endDragKeyboard"},touch:{start:"dragDescriptionTouch",end:"endDragTouch"},virtual:{start:"dragDescriptionVirtual",end:"endDragVirtual"}};function Mt(t){let{hasDragButton:r,isDisabled:n}=t,o=f((i=bt)&&i.__esModule?i.default:i,"@react-aria/dnd");var i;let a=e.useRef({options:t,x:0,y:0}).current;a.options=t;let s=e.useRef(null),[p,u]=e.useState(!1),g=e=>{s.current=e,u(!!e)},{addGlobalListener:h,removeAllGlobalListeners:y}=O(),D=e.useRef(null);e.useEffect(()=>()=>{if(s.current&&(!s.current.isConnected||parseInt(e.version,10)<17)){if("function"==typeof a.options.onDragEnd){let e={type:"dragend",x:0,y:0,dropOperation:$e[tt||"none"]};a.options.onDragEnd(e)}g(null),lt(Be.none),at(void 0)}},[a]);let v=e=>{if("function"==typeof a.options.onDragStart){let t=e.getBoundingClientRect();a.options.onDragStart({type:"dragstart",x:t.x+t.width/2,y:t.y+t.height/2})}!function(e,t){if(pt)throw new Error("Cannot begin dragging while already dragging");pt=new vt(e,t),requestAnimationFrame(()=>{pt&&(pt.setup(),"keyboard"===We()&&pt.next())});for(let r of ut)r()}({element:e,items:a.options.getItems(),allowedDropOperations:"function"==typeof a.options.getAllowedDropOperations?a.options.getAllowedDropOperations():["move","copy","link"],onDragEnd(e){g(null),"function"==typeof a.options.onDragEnd&&a.options.onDragEnd(e)}},o),g(e)},b=Je(),w=p?Rt[b].end:Rt[b].start,k=m(o.format(w)),E={};return r||(E={...k,onPointerDown(e){if(D.current=c(e.nativeEvent)?"virtual":e.pointerType,e.width<1&&e.height<1&&T()&&x())D.current="virtual";else{let t=e.currentTarget.getBoundingClientRect(),r=e.clientX-t.x,n=e.clientY-t.y,o=t.width/2,i=t.height/2;Math.abs(r-o)<=.5&&Math.abs(n-i)<=.5?D.current="virtual":D.current=e.pointerType}},onKeyDownCapture(e){l(e)===e.currentTarget&&"Enter"===e.key&&(e.preventDefault(),e.stopPropagation())},onKeyUpCapture(e){l(e)===e.currentTarget&&"Enter"===e.key&&(e.preventDefault(),e.stopPropagation(),v(l(e)))},onClick(e){(d(e.nativeEvent)||"virtual"===D.current)&&(e.preventDefault(),e.stopPropagation(),v(l(e)))}}),n?{dragProps:{draggable:"false"},dragButtonProps:{},isDragging:!1}:{dragProps:{...E,draggable:"true",onDragStart:e=>{if(e.defaultPrevented)return;if(e.stopPropagation(),"virtual"===D.current)return e.preventDefault(),v(l(e)),void(D.current=null);"function"==typeof t.onDragStart&&t.onDragStart({type:"dragstart",x:e.clientX,y:e.clientY});let r=t.getItems();e.dataTransfer.clearData?.(),function(e,t){let r=new Map,n=!1,o=[];for(let i of t){let e=Object.keys(i);e.length>1&&(n=!0);let t={};for(let o of e){let e=r.get(o);e?n=!0:(e=[],r.set(o,e));let a=i[o];t[o]=a,e.push(a)}o.push(t)}for(let[i,a]of r)if(Ve.has(i)){let t=a.join("\n");e.items.add(t,i)}else e.items.add(a[0],i);if(n){let t=JSON.stringify(o);e.items.add(t,He)}}(e.dataTransfer,r);let n=Be.all;if("function"==typeof t.getAllowedDropOperations){let e=t.getAllowedDropOperations();n=Be.none;for(let t of e)n|=Be[t]||Be.none}lt(n);let o=Fe[n]||"none";e.dataTransfer.effectAllowed="cancel"===o?"none":o,"function"==typeof t.preview?.current&&t.preview.current(r,(t,r,n)=>{if(!t)return;let o=t.getBoundingClientRect(),i=e.currentTarget.getBoundingClientRect(),a=e.clientX-i.x,s=e.clientY-i.y;(a>o.width||s>o.height)&&(a=o.width/2,s=o.height/2);let l=a,d=s;"number"==typeof r&&"number"==typeof n&&(l=r,d=n),l=Math.max(0,Math.min(l,o.width)),d=Math.max(0,Math.min(d,o.height));let c=2*Math.round(o.height/2);t.style.height=`${c}px`,e.dataTransfer.setDragImage(t,l,d)}),h(window,"drop",e=>{e.preventDefault(),e.stopPropagation(),console.warn("Drags initiated from the React Aria useDrag hook may only be dropped on a target created with useDrop. This ensures that a keyboard and screen reader accessible alternative is available.")},{once:!0}),a.x=e.clientX,a.y=e.clientY;let i=l(e);requestAnimationFrame(()=>{g(i)})},onDrag:e=>{e.stopPropagation(),e.clientX===a.x&&e.clientY===a.y||("function"==typeof t.onDragMove&&t.onDragMove({type:"dragmove",x:e.clientX,y:e.clientY}),a.x=e.clientX,a.y=e.clientY)},onDragEnd:e=>{if(e.stopPropagation(),"function"==typeof t.onDragEnd){let r={type:"dragend",x:e.clientX,y:e.clientY,dropOperation:$e[e.dataTransfer.dropEffect]};tt&&(r.dropOperation=$e[tt]),t.onDragEnd(r)}g(null),y(),lt(Be.none),at(void 0)}},dragButtonProps:{...k,onPress:e=>{"keyboard"!==e.pointerType&&"virtual"!==e.pointerType||v(e.target)}},isDragging:p}}const Bt={keyboard:{selected:"dragSelectedKeyboard",notSelected:"dragDescriptionKeyboard"},touch:{selected:"dragSelectedLongPress",notSelected:"dragDescriptionLongPress"},virtual:{selected:"dragDescriptionVirtual",notSelected:"dragDescriptionVirtual"}};function Lt(e,t){let r=f((n=bt)&&n.__esModule?n.default:n,"@react-aria/dnd");var n;let o,i,a=t.isDisabled||t.selectionManager.isDisabled(e.key),{dragProps:s,dragButtonProps:l}=Mt({getItems:()=>t.getItems(e.key),preview:t.preview,getAllowedDropOperations:t.getAllowedDropOperations,hasDragButton:e.hasDragButton,onDragStart(r){var n;t.startDrag(e.key,r),n=t.draggingKeys,rt.draggingKeys=n},onDragMove(e){t.moveDrag(e)},onDragEnd(e){let{dropOperation:r}=e,n="cancel"!==r&&it();t.endDrag({...e,keys:t.draggingKeys,isInternal:n}),ot()}}),d=t.collection.getItem(e.key),c=t.getKeysForDrag(e.key).size,p=c>1&&t.selectionManager.isSelected(e.key),u=Je();if(e.hasDragButton||"none"===t.selectionManager.selectionMode)if(p)o=r.format("dragSelectedItems",{count:c});else{let n=t.collection.getTextValue?.(e.key)??d?.textValue??"";o=r.format("dragItem",{itemText:n})}else{let t=Bt[u][p?"selected":"notSelected"];e.hasAction&&"keyboard"===u&&(t+="Alt"),i=p?r.format(t,{count:c}):r.format(t),delete s.onClick}let g=m(i);if(i&&Object.assign(s,g),!e.hasDragButton&&e.hasAction){let{onKeyDownCapture:e,onKeyUpCapture:t}=s;"touch"===u&&delete s["aria-describedby"],s.onKeyDownCapture=t=>{t.altKey&&e?.(t)},s.onKeyUpCapture=e=>{e.altKey&&t?.(e)}}return{dragProps:a?{}:s,dragButtonProps:{...l,isDisabled:a,"aria-label":o}}}function Ft(e,t,r){let{draggingCollectionRef:n}=rt;t.draggingKeys.size>0&&n?.current!==r.current&&function(e){rt.draggingCollectionRef=e}(r)}const $t=t.forwardRef(function(n,o){let i=n.children,[a,s]=e.useState(null),l=e.useRef(null),d=e.useRef(void 0);return e.useImperativeHandle(o,()=>(e,t)=>{let n,o,a,c=i(e);c&&"object"==typeof c&&"element"in c?(n=c.element,o=c.x,a=c.y):n=c,r.flushSync(()=>{s(n)}),t(l.current,o,a),d.current=requestAnimationFrame(()=>{s(null)})},[i]),e.useEffect(()=>()=>{d.current&&cancelAnimationFrame(d.current)},[]),a?t.createElement("div",{style:{zIndex:-100,position:"fixed",top:0,left:-1e5},ref:l},a):null});function Nt(e,t){if(!e)return!t;switch(e.type){case"root":return"root"===t?.type;case"item":return"item"===t?.type&&t?.key===e.key&&t?.dropPosition===e.dropPosition}}class zt{constructor(e,t,r){this.collection=e,this.ref=t,this.layout=r?.layout||"stack",this.orientation=r?.orientation||"vertical",this.direction=r?.direction||"ltr"}getPrimaryStart(e){return"horizontal"===this.orientation?e.left:e.top}getPrimaryEnd(e){return"horizontal"===this.orientation?e.right:e.bottom}getSecondaryStart(e){return"horizontal"===this.orientation?e.top:e.left}getSecondaryEnd(e){return"horizontal"===this.orientation?e.bottom:e.right}getFlowStart(e){return"stack"===this.layout?this.getPrimaryStart(e):this.getSecondaryStart(e)}getFlowEnd(e){return"stack"===this.layout?this.getPrimaryEnd(e):this.getSecondaryEnd(e)}getFlowSize(e){return this.getFlowEnd(e)-this.getFlowStart(e)}getDropTargetFromPoint(e,t,r){if(this.collection[Symbol.iterator]().next().done||!this.ref.current)return{type:"root"};let n=this.ref.current.getBoundingClientRect(),o="horizontal"===this.orientation?e:t,i="horizontal"===this.orientation?t:e;o+=this.getPrimaryStart(n),i+=this.getSecondaryStart(n);let a="stack"===this.layout?o:i,s="horizontal"===this.orientation&&"rtl"===this.direction,l="grid"===this.layout&&"vertical"===this.orientation&&"rtl"===this.direction,d="stack"===this.layout?s:l,c=this.ref.current?.dataset.collection,p=this.ref.current.querySelectorAll(c?`[data-collection="${CSS.escape(c)}"]`:"[data-key]"),u=new Map;for(let D of p)D instanceof HTMLElement&&null!=D.dataset.key&&u.set(D.dataset.key,D);let g=[...this.collection].filter(e=>"item"===e.type);if(g.length<1)return{type:"root"};let f=0,m=g.length;for(;f{t?f=e+1:m=e};if(othis.getPrimaryEnd(c))p(!s);else if(ithis.getSecondaryEnd(c))){let e={type:"item",key:t.key,dropPosition:"on"};if(r(e))a<=this.getFlowStart(c)+5&&r({...e,dropPosition:"before"})?e.dropPosition=d?"after":"before":a>=this.getFlowEnd(c)-5&&r({...e,dropPosition:"after"})&&(e.dropPosition=d?"before":"after");else{let t=this.getFlowStart(c)+this.getFlowSize(c)/2;a<=t&&r({...e,dropPosition:"before"})?e.dropPosition=d?"after":"before":a>=t&&r({...e,dropPosition:"after"})&&(e.dropPosition=d?"before":"after")}return e}p(!l)}}let h=g[Math.min(f,g.length-1)],y=u.get(String(h.key));return n=y?.getBoundingClientRect(),n&&(o{let{onDrop:r,onInsert:n,onItemDrop:o,onReorder:i,onMove:a,onRootDrop:s,getItems:l,renderDragPreview:d,renderDropIndicator:c,dropTargetDelegate:p}=t,u=!!(r||n||o||i||a||s),g={};return!!l&&(g.useDraggableCollectionState=function(r){return function(t){let{getItems:r,isDisabled:n,collection:o,selectionManager:i,onDragStart:a,onDragMove:s,onDragEnd:l,preview:d,getAllowedDropOperations:c}=t,[,p]=e.useState(!1),u=e.useRef(new Set),g=e.useRef(null),f=e=>{let t=new Set;if(i.isSelected(e))for(let r of i.selectedKeys){let e=o.getItem(r);if(e){let n=!1,a=e.parentKey;for(;null!=a;){if(i.selectedKeys.has(a)){n=!0;break}let e=o.getItem(a);a=e?e.parentKey:null}n||t.add(r)}}else t.add(e);return t};return{collection:o,selectionManager:i,get draggedKey(){return g.current},get draggingKeys(){return u.current},isDragging:e=>u.current.has(e),getKeysForDrag:f,getItems(e){let t=f(e),n=[];for(let r of t){let e=o.getItem(r)?.value;null!=e&&n.push(e)}return r(f(e),n)},isDisabled:n,preview:d,getAllowedDropOperations:c,startDrag(e,t){let r=f(e);u.current=r,g.current=e,i.setFocused(!1),p(!0),"function"==typeof a&&a({...t,keys:r})},moveDrag(e){"function"==typeof s&&s({...e,keys:u.current})},endDrag(e){let{isInternal:t}=e;"function"==typeof l&&l({...e,keys:u.current,isInternal:t}),u.current=new Set,g.current=null,p(!1)}}}({...r,...t})},g.useDraggableCollection=Ft,g.useDraggableItem=Lt,g.DragPreview=$t,g.renderDragPreview=d,g.isVirtualDragging=mt),u&&(g.useDroppableCollectionState=function(r){return function(t){let{acceptedDragTypes:r="all",isDisabled:n,onInsert:o,onRootDrop:i,onItemDrop:a,onReorder:s,onMove:l,shouldAcceptItemDrop:d,collection:c,selectionManager:p,onDropEnter:u,getDropOperation:g,onDrop:f}=t,[m,h]=e.useState(null),y=e.useRef(null),D=e=>{if("before"===e.dropPosition){let t=c.getItem(e.key);return t&&null!=t.prevKey?{type:"item",key:t.prevKey,dropPosition:"after"}:null}if("after"===e.dropPosition){let t=c.getItem(e.key);return t&&null!=t.nextKey?{type:"item",key:t.nextKey,dropPosition:"before"}:null}return null},v=e.useCallback(e=>{let{target:t,types:p,allowedOperations:u,isInternal:m,draggingKeys:h}=e;if(n||!t)return"cancel";if("all"===r||r.some(e=>p.has(e))){let e=o&&"item"===t.type&&!m&&("before"===t.dropPosition||"after"===t.dropPosition),r=s&&"item"===t.type&&m&&("before"===t.dropPosition||"after"===t.dropPosition)&&function(e,t,r){let n=e.getItem(t.key);for(let o of r){let t=e.getItem(o);if(t?.parentKey!==n?.parentKey)return!1}return!0}(c,t,h),n="item"!==t.type||"on"!==t.dropPosition||!d||d(t,p),y=l&&"item"===t.type&&m&&n,D=i&&"root"===t.type&&!m,v=a&&"item"===t.type&&"on"===t.dropPosition&&!(m&&null!=t.key&&h.has(t.key))&&n;if(f||e||r||y||D||v)return g?g(t,p,u):u[0]}return"cancel"},[n,c,r,g,o,i,a,d,s,l,f]);return{collection:c,selectionManager:p,isDisabled:n,target:m,setTarget(e){if(this.isDropTarget(e))return;let r=y.current;r&&"function"==typeof t.onDropExit&&t.onDropExit({type:"dropexit",x:0,y:0,target:r}),e&&"function"==typeof u&&u({type:"dropenter",x:0,y:0,target:e}),y.current=e??null,h(e??null)},isDropTarget(e){let t=y.current;return!(!t||!e)&&(!!Nt(e,t)||"item"===e?.type&&"item"===t?.type&&e.key!==t.key&&e.dropPosition!==t.dropPosition&&"on"!==e.dropPosition&&"on"!==t.dropPosition&&(Nt(D(e),t)||Nt(e,D(t))))},getDropOperation(e){let{target:t,isInternal:r,draggingKeys:n}=e;if(r&&"item"===t.type&&n.size>0){if(n.has(t.key)&&"on"===t.dropPosition)return"cancel";let e=t.key;for(;null!=e;){let t=c.getItem(e),r=t?.parentKey;if(null!=r&&n.has(r))return"cancel";e=r??null}}return v(e)}}}({...r,...t})},g.useDroppableItem=jt,g.useDroppableCollection=function(e,r,n){return It({...e,...t},r,n)},g.useDropIndicator=At,g.renderDropIndicator=c,g.dropTargetDelegate=p,g.ListDropTargetDelegate=zt),g},[t])}}function Ht({className:e,...t}){return n.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:20,viewBox:"0 0 12 12","aria-hidden":"true",focusable:"false",className:S("rp-icon",e),...t,children:[1.6,6,10.4].flatMap(e=>[3.8,8.2].map(t=>n.jsx("circle",{cx:t,cy:e,r:1.1,fill:"currentColor"},`${t}-${e}`)))})}const Xt="application/x-doona-card",Yt={},Ut=new Map,qt=new Set,Gt=e=>{if(Yt.card=e,Ut.clear(),void 0===e)for(const t of qt)t()},Jt=e=>[...document.querySelectorAll(".rp-dashboard-cell")].find(t=>t.dataset.instance===e);function Wt(e){let t=[1,1];for(let r=1;r<=12;r++){const n=Math.round(e*r);n>0&&Math.abs(e-n/r){const e=t.current;if(!e)return;const r=()=>{const t=e.parentElement.getBoundingClientRect(),r=getComputedStyle(e),n=Number.parseFloat(r.getPropertyValue("--rp-dash-gap"))||0,o=function(e,t,r,n){const o=n?e.map(e=>({...e,left:t-e.right,right:t-e.left})):e,i=new Map;for(const a of o)i.set(Math.round(a.top),[...i.get(Math.round(a.top))??[],a]);return[...i.values()].flatMap(e=>{const i=e[0].top,a=Math.max(...e.map(e=>e.bottom)),s=Math.max(...e.map(e=>e.right))+r;let l=t;for(const t of o)!e.includes(t)&&t.topi+.5&&t.right>s&&(l=Math.min(l,t.left-r));return(l-s+r)/(t+r)<1/6-.01?[]:[{after:e.at(-1).id,left:n?t-l:s,top:i,width:l-s,height:a-i}]})}([...e.querySelectorAll(":scope > .rp-dashboard-cell")].map(e=>{const r=e.getBoundingClientRect();return{id:e.dataset.instance,left:r.left-t.left,right:r.right-t.left,top:r.top-t.top,bottom:r.bottom-t.top}}),t.width,n,"rtl"===r.direction).map(e=>({...e,share:Wt((e.width+n)/(t.width+n))}));s(e=>JSON.stringify(e)===JSON.stringify(o)?e:o)};return r(),e.addEventListener("rp-packed",r),()=>e.removeEventListener("rp-packed",r)},[t]),a.map(e=>n.jsx(Zt,{section:t,gap:e,label:r(e.share),refusal:o,onPlace:i},e.after))}function Zt({section:t,gap:r,label:o,refusal:i,onPlace:a}){const s=e.useRef(null),[l,d]=e.useState(!1),c=(e=Yt.card)=>{const n=t.current;if(void 0===e||!n)return!1;const o=[e,r.after,r.width].join("\n");return Ut.has(o)||Ut.set(o,(function(e,t,r){const n=Jt(t),o=Jt(r);if(!n||o?.parentElement!==e)return;const i=document.createElement("div");i.className="rp-dashboard-cell",i.style.visibility="hidden";for(const d of["data-module","data-size","data-foot","data-width","data-height"]){const e=n.getAttribute(d);null!==e&&i.setAttribute(d,e)}const a=e.dataset.grid;i.dataset.width&&(e.dataset.grid="fraction");const s=n.parentElement===e;s&&n.classList.remove("rp-dashboard-cell"),o.after(i);const l=i.getBoundingClientRect().width;return i.remove(),s&&n.classList.add("rp-dashboard-cell"),void 0===a?delete e.dataset.grid:e.dataset.grid=a,l}(n,e,r.after)??1/0)<=r.width+1),Ut.get(o)},{dropProps:p,isDropTarget:u}=Tt({ref:s,getDropOperation:e=>e.has(Xt)&&c()?"move":"cancel",onDrop:async e=>{for(const t of e.items){if("text"!==t.kind||!t.types.has(Xt))continue;const e=await t.getText(Xt);c(e)&&a(e,{target:r.after,after:!0})}}}),g={onDragEnter:()=>d(void 0!==Yt.card&&!c()),onDragLeave:()=>d(!1),onDrop:()=>d(!1)};return e.useEffect(()=>{const e=()=>d(!1);return qt.add(e),()=>{qt.delete(e)}},[]),n.jsxs("div",{...K(p,g),ref:s,className:"rp-dashboard-gap rp-label","data-drop-target":u||void 0,"data-refused":l||void 0,style:{left:r.left,top:r.top,width:r.width,height:r.height},children:[o,n.jsx(C,{children:n.jsx("span",{role:"status",children:l?i:""})})]})}const Qt="application/x-doona-card",er={current:null};function tr({label:t,profile:r,items:o,textValue:i,dragLabel:a,tools:s,resize:l,gapLabel:d,refusal:c,rearm:p,children:u,onPlace:g,...f}){const m=e.useRef(null);ce(r?m:er),e.useEffect(()=>{!p?.focus||document.activeElement&&document.activeElement!==document.body||m.current?.querySelector(`[data-key="${CSS.escape(p.focus)}"]`)?.focus()},[p]);const h=async e=>{for(const t of e.items)if("text"===t.kind&&t.types.has(Qt))return t.getText(Qt)},{dragAndDropHooks:y}=function(t){const{dragAndDropHooks:r}=Vt(t);return{dragAndDropHooks:e.useMemo(()=>function(e){const{useDraggableItem:t,isVirtualDragging:r}=e;return t&&r?{...e,useDraggableItem:(e,n)=>{const o=t(e,n),i=o.dragButtonProps.onPress;return{...o,dragButtonProps:{...o.dragButtonProps,onPress:e=>{r()||i?.(e)}}}}}:e}(r),[r])}}({getItems:e=>[...e].map(e=>({[Qt]:String(e),"text/plain":i(o.find(t=>t.id===e))})),getAllowedDropOperations:()=>["move"],acceptedDragTypes:[Qt],getDropOperation:()=>"move",onDragStart:e=>Gt(String([...e.keys][0])),onDragEnd:()=>{Gt(void 0),function(){const e=()=>{document.removeEventListener("pointerdown",e,!0),document.removeEventListener("mousedown",t,!0)},t=t=>{e();const{clientX:r,clientY:n,screenX:o,screenY:i,button:a,buttons:s,ctrlKey:l,shiftKey:d,altKey:c,metaKey:p}=t;t.target?.dispatchEvent(new PointerEvent("pointerdown",{bubbles:!0,cancelable:!0,composed:!0,pointerId:1,pointerType:"mouse",isPrimary:!0,clientX:r,clientY:n,screenX:o,screenY:i,button:a,buttons:s,ctrlKey:l,shiftKey:d,altKey:c,metaKey:p}))};document.addEventListener("pointerdown",e,!0),document.addEventListener("mousedown",t,!0)}()},renderDropIndicator:e=>n.jsx(Ie,{target:e,className:"rp-canvas-drop"}),onReorder:e=>{for(const t of e.keys)g(String(t),{target:String(e.target.key),after:"after"===e.target.dropPosition})},onInsert:async e=>{const t=await h(e);t&&g(t,{target:String(e.target.key),after:"after"===e.target.dropPosition})},onRootDrop:async e=>{const t=await h(e);t&&g(t,{})}}),D=n.jsx(Se,{...f,ref:m,"aria-label":t,layout:"grid",className:r?"rp-dash-section":"rp-widget-grid rp-sortable-grid","data-profile":r,"data-grid":r?ue(o):void 0,items:o,dragAndDropHooks:y,dependencies:[u,s,l],children:e=>n.jsxs(Ce,{id:e.id,textValue:i(e),className:r?"rp-dashboard-cell":"rp-widget-cell rp-sortable-row",...r?pe(e):{"data-size":"wide"===e.size?"large":e.size,"data-module":e.module},children:[n.jsxs("div",{className:"rp-dashboard-tools",children:[n.jsx(I,{slot:"drag",className:j({quiet:!0,icon:!0,small:!r}),"aria-label":a(e),children:n.jsx(Ht,{})}),s?.(e)]}),n.jsx("div",{className:"rp-dashboard-body",inert:!0,children:u(e)}),l?.(e)]})});return r?n.jsxs("div",{className:"rp-dashboard-canvas","data-rearm":p?"":void 0,children:[D,d&&n.jsx(_t,{section:m,label:d,refusal:c,onPlace:g})]}):D}function rr({id:t,label:r,added:o,addLabel:i,count:a,onAdd:s,presets:l,row:d,children:c}){const[p,u]=A(void 0,200),[g,f]=e.useState(!1);return u&&!g&&f(!0),n.jsxs("section",{ref:p,className:"rp-widget-gallery-tile","data-added":o||void 0,"data-module":t,"aria-label":r,children:[n.jsx("h3",{className:"rp-h3",children:r}),l&&d?n.jsx(nr,{presets:l,row:d,loaded:g,disabled:o}):n.jsx("div",{className:"rp-widget-gallery-frame",inert:!0,children:n.jsx(R,{value:!1,children:g&&c})}),n.jsxs("div",{className:"rp-cluster",children:[n.jsx(M,{isDisabled:o,label:`${i} ${r}`,onPress:s,children:i}),n.jsx("span",{className:"rp-label",children:a})]})]})}function nr({presets:e,row:t,loaded:r,disabled:o}){const[i,a]=B(Math.round),s=a?a.width/t.width:0;return n.jsx("div",{ref:i,className:"rp-widget-gallery-presets",style:{"--rp-preset-gap":t.gap*s+"px"},children:r&&s>0&&e.map(e=>n.jsx(or,{preset:e,width:e.share*(t.width+t.gap)-t.gap,scale:s,disabled:o},e.key))})}function or({preset:e,width:t,scale:r,disabled:o}){const[i,a]=B(Math.round);return n.jsxs("div",{className:"rp-widget-gallery-preset",style:{inlineSize:t*r},children:[n.jsxs("div",{className:"rp-widget-gallery-thumb",style:{blockSize:(a?.height??0)*r},children:[n.jsx("div",{ref:i,className:"rp-widget-gallery-thumb-card",style:{inlineSize:t,scale:String(r)},inert:!0,children:n.jsx(R,{value:!1,children:e.preview})}),n.jsx(I,{className:"rp-widget-gallery-thumb-add","aria-label":e.addLabel,isDisabled:o,onPress:e.onAdd})]}),n.jsx("span",{className:"rp-label",children:e.label})]})}function ir({label:e,children:t}){return n.jsxs("div",{className:"rp-module-option",children:[n.jsx("span",{className:"rp-label",children:e}),t]})}function ar(){const e=document.querySelector(".rp-dashboard-canvas"),t=e&&getComputedStyle(e.querySelector(".rp-dash-section")??e);return{width:e?.getBoundingClientRect().width||1152,gap:Number.parseFloat(t?.getPropertyValue("--rp-dash-gap")??"")||12,snap:Number.parseFloat(t?.getPropertyValue("--rp-dash-snap")??"")||12}}function sr({items:t,add:r,surface:o="panel"}){const i=L(),[a]=e.useState(ar);return Object.keys(F).filter(e=>"panel"===o||!$(e)).map(e=>{const s=t.filter(t=>t.id===e).length,l=ge(fe()).find(t=>t.id===e)??N(e),d=e=>{const t=ke(e.width);return a.snap>=12?t:Math.ceil(t*a.snap-1e-6)/a.snap};return n.jsx(rr,{id:e,label:i(F[e].label),added:s>=V,addLabel:i("widgets.add"),count:i("widgets.placedCount",{n:s,max:V}),onAdd:()=>r(e),row:a,presets:"dashboard"===o?ye(l,De(l)).map(t=>{const o=ve(l,t),a=be(t,i);return{key:a,label:a,addLabel:i("widgets.addPreset",{name:i(F[e].label),size:a}),share:d(t),onAdd:()=>r(e,t),preview:n.jsx(me,{id:e,children:n.jsx(z,{value:!0,children:n.jsx("div",{className:"rp-dashboard-cell",...pe(xe(o)),"data-tile":"tall"===o.height?"stacked":void 0,children:n.jsx(we,{item:o,preview:!0})})})})}}):void 0,children:"panel"===o&&n.jsx(me,{id:e,children:n.jsx(he,{item:N(e),preview:!0,sample:!0})})},e)})}const lr={area:"dashboard.form.area",sparkline:"dashboard.form.sparkline",donut:"dashboard.form.donut",waffle:"dashboard.form.waffle",dots:"dashboard.form.dots",ranked:"dashboard.form.ranked",kv:"dashboard.form.kv",facts:"dashboard.form.facts"},dr={small:"widgets.small",medium:"widgets.medium",large:"widgets.large",wide:"dashboard.wide"};function cr({active:e,items:t,sizes:r=[],surface:o,update:i,move:a,remove:s}){const l=L();return e?n.jsxs(n.Fragment,{children:["dashboard"===o&&Object.values(Te(e,De(e),l)).map(e=>e&&n.jsx(ir,{label:e.label,children:n.jsx(Ae,{label:e.label,value:e.value,onChange:t=>i(e.set(t)),items:e.options.map(e=>[e.value,e.label])})},e.label)),r.length>1&&n.jsx(ir,{label:l("widgets.size"),children:n.jsx(Ae,{label:l("widgets.size"),value:e.size,onChange:t=>i({...e,size:t,form:"panel"===o&&"small"===t&&H(e.id,o).includes("kv")?"kv":e.form}),items:r.map(e=>[e,l(dr[e])])})}),H(e.id,o).length>1&&!("small"===e.size&&!e.width&&H(e.id,o).includes("sparkline"))&&n.jsx(ir,{label:l("widgets.form"),children:n.jsx(Ae,{label:l("widgets.form"),value:X(e,o),onChange:t=>i({...e,form:t}),items:H(e.id,o).map(e=>[e,l(lr[e])])})}),"ranking"===e.id&&n.jsx(ir,{label:l("widgets.rankBy"),children:n.jsx(Ae,{label:l("widgets.rankBy"),value:e.by??"dev",onChange:t=>i({...e,by:"domain"===t?"domain":"dev"}),items:[["dev",l("widgets.devices")],["domain",l("widgets.domains")]]})}),["nodeLatency","policyGroups","latency"].includes(e.id)&&n.jsx(pr,{item:e,update:i}),n.jsxs("div",{className:"rp-cluster rp-module-actions",children:[n.jsx(M,{isDisabled:Y(t[0])===Y(e),onPress:()=>a(-1),children:l("widgets.up")}),n.jsx(M,{isDisabled:Y(t.at(-1))===Y(e),onPress:()=>a(1),children:l("widgets.down")}),n.jsx(M,{negative:!0,onPress:s,children:l("widgets.remove")})]})]}):n.jsx("p",{className:"rp-label",children:l("widgets.select")})}function pr({item:e,update:t}){const r=U(),o=Re(!0===r.data?.resources.groups.available),i=L(),a=i("latency"===e.id?"act.groupFollow":"dashboard.allGroups");return n.jsx(ir,{label:i("ui.group"),children:n.jsx(q,{label:i("ui.group"),value:e.group??"",items:[{id:"",label:a},...(o.data??[]).map(e=>({id:e.id,label:e.name}))],onChange:r=>t({...e,group:r}),children:o.data?.find(t=>t.id===e.group)?.name??a})})}function ur(e,t,r){const n=ge(e).find(e=>Y(e)===t);if(!n||r.target===t)return e;const o=e.sections.map(e=>({...e,items:e.items.filter(e=>Y(e)!==t)})),i=o.find(e=>e.id===r.section);if(!i)return e;const a=void 0===r.target?-1:i.items.findIndex(e=>Y(e)===r.target);return i.items.splice(a<0?i.items.length:a+(r.after?1:0),0,n),{...e,sections:o}}function gr({width:e,height:t}){return n.jsxs(n.Fragment,{children:[n.jsx(vr,{axis:e,edge:"width"}),t&&n.jsx(vr,{axis:t,edge:"height"})]})}const fr=e=>{const[t,r=1]=e.split("/").map(Number);return t/r||0};function mr(e,t){const r=e.closest(".rp-dash-section"),n=getComputedStyle(r),o=getComputedStyle(e),i=Number.parseFloat(n.getPropertyValue("--rp-dash-snap"))||12,a=Number.parseFloat(n.getPropertyValue("--rp-dash-gap"))||0,s=r.getBoundingClientRect().width+Math.min(0,Number.parseFloat(n.marginInlineStart)||0),l=Number.parseFloat(o.getPropertyValue("--rp-span"))||420,d=fr(o.getPropertyValue("--rp-shift"))-fr(o.getPropertyValue("--rp-trim"));return t.map(t=>{if(void 0===t.fraction)return e.dataset.width?l/420*(s+a)-a+d*a:e.getBoundingClientRect().width;return(i>=12?t.fraction:Math.ceil(t.fraction*i-1e-6)/i)*(s+a)-a})}const hr=(e,t,r)=>t.reduce((n,o,i)=>{const a=Math.abs(o-r)-Math.abs(t[n]-r);return a<-.5||a<=.5&&void 0===e[n].fraction&&void 0!==e[i].fraction?i:n},0),yr=new Map,Dr=e=>e.target&&yr.get(e.target)?.(e);function vr({axis:t,edge:r}){const o=e.useRef(null),i=e.useRef(null),{focusProps:a,isFocusVisible:s}=G(),l=()=>o.current.closest(".rp-dashboard-cell"),d=()=>"rtl"===getComputedStyle(o.current).direction,c=Math.max(0,t.options.findIndex(e=>e.value===t.value)),p=e=>{i.current&&(i.current.index=e),t.options[e].value!==t.value&&t.onChange(t.options[e])},{moveProps:u}=Me({onMoveStart:()=>{const e=l().getBoundingClientRect(),n=Number.parseFloat(getComputedStyle(l()).getPropertyValue("--rp-space-16"))||1,o="width"===r?mr(l(),t.options):[];i.current={start:c,size:"width"===r?e.width:e.height,travel:0,sizes:o,step:n,index:c},l().dataset.resizing=""},onMove:({deltaX:e,deltaY:n,pointerType:o})=>{const a=i.current;if(!a||"keyboard"===o)return;a.travel+="width"===r?e*(d()?-1:1):n;const s="width"===r?hr(t.options,a.sizes,a.size+a.travel):Math.max(0,Math.min(t.options.length-1,a.start+Math.round(a.travel/a.step)));s!==a.index&&p(s)},onMoveEnd:()=>{i.current=null,delete l().dataset.resizing}}),g=e.useRef(e=>{});return e.useLayoutEffect(()=>{g.current=e=>{const n="width"===r?d()?"ArrowLeft":"ArrowRight":"ArrowDown",o="width"===r?d()?"ArrowRight":"ArrowLeft":"ArrowUp";e.key!==n&&e.key!==o||(e.preventDefault(),e.stopPropagation(),p((e=>{if("width"===r&&void 0===t.options[c].fraction){if(!e)return c;const r=l().getBoundingClientRect().width,n=mr(l(),t.options).findIndex((e,n)=>void 0!==t.options[n].fraction&&e>r+1);return n<0?t.options.length-1:n}return Math.max(0,Math.min(t.options.length-1,c+(e?1:-1)))})(e.key===n)))}}),e.useEffect(()=>{return e=o.current,t=e=>g.current(e),yr.size||addEventListener("keydown",Dr,!0),yr.set(e,t),()=>{yr.delete(e),yr.size||removeEventListener("keydown",Dr,!0)};var e,t},[]),n.jsx("div",{ref:o,role:"slider",tabIndex:0,...a,...u,onPointerDown:e=>{e.preventDefault(),e.stopPropagation(),u.onPointerDown?.(e)},className:"rp-dashboard-resize","data-edge":r,"data-focus-visible":s||void 0,"aria-label":t.label,"aria-orientation":"width"===r?"horizontal":"vertical","aria-valuemin":0,"aria-valuemax":t.options.length-1,"aria-valuenow":c,"aria-valuetext":t.options[c]?.label})}const br=(e,t)=>e.filter(e=>e.id===t).lengthY(e)===t)?{instance:J()}:{}}:null;const wr=(e,t)=>Oe(e,e=>Y(e)===Y(t)?t:e);function xr({draft:t,setDraft:r,render:o}){const i=L(),[a,s]=e.useState({text:"",serial:0}),l=ge(t),d=e=>s(t=>({text:e,serial:t.serial+1})),c=e.useRef([]);e.useEffect(()=>()=>c.current.forEach(e=>Q(e.key)),[]),e.useEffect(()=>{c.current=c.current.filter(e=>!!e.restorable(t)||(Q(e.key),!1))},[t]);const[p,u]=e.useState(null),g=e.useRef({x:Number.NaN,y:Number.NaN});e.useEffect(()=>{const e=e=>{g.current={x:e.clientX,y:e.clientY}};return document.addEventListener("pointerdown",e,!0),document.addEventListener("pointermove",e,!0),()=>{document.removeEventListener("pointerdown",e,!0),document.removeEventListener("pointermove",e,!0)}},[]),e.useEffect(()=>{if(!p)return;const{x:e,y:t}=g.current,r=r=>{r instanceof PointerEvent&&r.clientX===e&&r.clientY===t||u(null)};return document.addEventListener("pointermove",r,!0),document.addEventListener("keydown",r,!0),()=>{document.removeEventListener("pointermove",r,!0),document.removeEventListener("keydown",r,!0)}},[p]);const f=e=>{const{layout:n,restore:o,restorable:a}=function(e,t){const r=e.sections.find(e=>e.items.some(e=>Y(e)===t));if(!r)return{layout:e,restore:e=>e,restorable:()=>!1};const n=r.items.findIndex(e=>Y(e)===t),o=r.items[n],i=e=>{const r=ge(e);return!r.some(e=>Y(e)===t)&&r.filter(e=>e.id===o.id).lengthe===r?{...e,items:e.items.filter(e=>e!==o)}:e)},restore:e=>i(e)?{...e,sections:e.sections.map(e=>e.id===r.id?{...e,items:[...e.items.slice(0,n),o,...e.items.slice(n)]}:e)}:e,restorable:i}}(t,Y(e)),s=l.findIndex(t=>Y(t)===Y(e)),d=l[s+1]??l[s-1];u({focus:d&&Y(d)}),r(n);const p=de("neutral",i("widgets.removed",{name:i(F[e.id].label)}),{id:`removed:${Y(e)}`,action:{label:i("widgets.undo"),onAction:()=>r(e=>e&&o(e)),closeOnAction:!0}});c.current.push({key:p,restorable:a})};return n.jsxs(n.Fragment,{children:[t.sections.map(e=>n.jsx(tr,{label:i("widgets.order"),profile:e.id,items:e.items.map(e=>({...xe(e),item:e})),textValue:({item:e})=>i(F[e.id].label),dragLabel:({item:e})=>i("widgets.drag",{name:i(F[e.id].label)}),gapLabel:e=>i("dashboard.remaining",{space:e}),refusal:i("dashboard.noRoom"),rearm:p,resize:({item:e})=>{const o=Te(e,De(e),i),a=(e,n)=>e&&{label:n,value:e.value,options:e.options,onChange:n=>{r(wr(t,e.set(n.value))),d(`${e.label}: ${n.label}`)}};return n.jsx(gr,{width:a(o.width,i("dashboard.resizeWidth")),height:a(o.height,i("dashboard.resizeHeight"))})},onPlace:(n,o)=>{r(ur(t,n,{section:e.id,...o})),d(i("widgets.reordered"))},tools:({item:e})=>n.jsxs(n.Fragment,{children:[n.jsx(ee,{title:i(F[e.id].label),placement:"bottom end",trigger:n.jsx(M,{quiet:!0,icon:!0,label:i("widgets.inspector"),children:n.jsx(te,{})}),children:()=>n.jsx("div",{className:"rp-module-inspector",children:n.jsx(cr,{active:e,items:l,surface:"dashboard",update:e=>r(wr(t,e)),move:n=>{r(function(e,t,r){const n=e.sections.findIndex(e=>e.items.some(e=>Y(e)===t));if(n<0)return e;const o=e.sections[n].items,i=o.findIndex(e=>Y(e)===t),a=o[i+r];if(a)return ur(e,t,{section:e.sections[n].id,target:Y(a),after:r>0});const s=e.sections[n+r];if(!s)return e;const l=r>0?s.items[0]:s.items.at(-1);return ur(e,t,{section:s.id,...l?{target:Y(l),after:r<0}:{}})}(t,Y(e),n)),d(i("widgets.reordered"))},remove:()=>f(e)})})}),n.jsx(M,{quiet:!0,icon:!0,label:i("widgets.removeName",{name:i(F[e.id].label)}),onPress:()=>f(e),children:n.jsx(je,{})})]}),children:({item:e})=>o(e)},e.id)),n.jsx(C,{children:n.jsx("span",{role:"status",children:n.jsx("span",{children:a.text},a.serial)})})]})}function Tr({draft:t,saved:r,setDraft:o,onClose:i}){const a=L(),[s,l]=e.useState(!1),d=e.useMemo(()=>JSON.stringify(t)!==JSON.stringify(r),[t,r]);return W(d,i),n.jsxs(n.Fragment,{children:[n.jsx(_,{title:a("widgets.gallery"),size:"wide",scrollBody:!0,trigger:n.jsx(M,{children:a("widgets.gallery")}),footer:e=>n.jsx(M,{onPress:e,children:a("ui.close")}),children:n.jsx("div",{className:"rp-widget-gallery-grid",children:n.jsx(sr,{items:ge(t),add:(e,r)=>o(function(e,t,r){const n=br(ge(e),t);if(!n)return e;const o=r?ve(n,r):n;return{...e,sections:e.sections.map(e=>"extensions"===e.id?{...e,items:[...e.items,o]}:e)}}(t,e,r)),surface:"dashboard"})})}),n.jsx(M,{onPress:()=>o(fe()),children:a("widgets.reset")}),n.jsx(M,{onPress:()=>d?l(!0):i(),children:a("ui.cancel")}),n.jsx(M,{accent:!0,onPress:()=>{Ee(t),i()},children:a("ui.done")}),n.jsx(Z,{title:a("config.discardTitle"),isOpen:s,onCancel:()=>l(!1),confirmLabel:a("config.discard"),onConfirm:i,children:n.jsx("p",{children:a("widgets.discardHelp")})})]})}function kr({onClose:t,backend:r}){const o=L(),[i]=e.useState(re),a=i.items,[s,l]=e.useState(a),[d,c]=e.useState(!1),[p]=e.useState(()=>i.docked?document.querySelector(".rp-side-dock")?.offsetWidth:void 0),u=i.size?.width??ne.width,[g,f]=e.useState(u),[m,h]=e.useState(!1),y=g!==(d?ne.width:u),[D,v]=e.useState(null),[b,w]=e.useState(!1),[x,T]=e.useState({text:"",serial:0}),k=e=>T(t=>({text:e,serial:t.serial+1})),E=d&&oe(re()),P=e.useMemo(()=>JSON.stringify(a)!==JSON.stringify(s),[a,s])||E||y;W(P,t);const K=()=>P?w(!0):t(),O=s.find(e=>Y(e)===D);return n.jsxs(n.Fragment,{children:[n.jsxs(_,{title:o("widgets.edit"),size:"wide",scrollBody:!0,isOpen:!0,onOpenChange:e=>{e||K()},footer:()=>n.jsxs(n.Fragment,{children:[n.jsx(M,{onPress:()=>{l(ie().items),c(!0),f(ne.width),v(null)},children:o("widgets.reset")}),n.jsx(M,{onPress:K,children:o("ui.cancel")}),n.jsx(M,{accent:!0,onPress:()=>{ae(e=>({...e,version:4,items:s,...d&&le,...y&&{size:{width:g,height:(d?void 0:e.size?.height)??se}}})),t()},children:o("settings.save")})]}),children:[n.jsx(Pe,{panelWidth:(d||m?void 0:p)??g,onPanelWidth:e=>{h(!0),f(e)},resizeLabel:o("widgets.resizePreview"),header:n.jsx(Ke,{backend:r,preview:!0}),galleryLabel:o("widgets.gallery"),canvasLabel:o("widgets.canvas"),inspectorLabel:o(O?F[O.id].label:"widgets.inspector"),gallery:n.jsx(sr,{items:s,add:e=>{const t=br(s,e);t&&(l([...s,t]),v(Y(t)),k(o("widgets.addedName",{name:o(F[e].label)})))}}),canvas:n.jsx(tr,{label:o("widgets.order"),items:s.map(e=>({item:e,module:e.id,id:Y(e),size:e.size})),textValue:({item:e})=>o(F[e.id].label),selectionMode:"single",selectedKeys:D?new Set([D]):new Set,onSelectionChange:e=>{"all"!==e&&v(String([...e][0]))},dragLabel:({item:e})=>o("widgets.drag",{name:o(F[e.id].label)}),onPlace:(e,{target:t,after:r})=>{t&&(l(n=>{const o=function(e,t,r,n){if(t.has(r))return e;const o=e.filter(e=>!t.has(e)),i=o.indexOf(r);return i<0?e:(o.splice(i+("after"===n?1:0),0,...e.filter(e=>t.has(e))),o)}(n.map(Y),new Set([e]),t,r?"after":"before");return o.flatMap(e=>n.find(t=>Y(t)===e)??[])}),k(o("widgets.reordered")))},children:({item:e})=>n.jsx(he,{item:e,preview:!0})}),inspector:n.jsx(cr,{active:O,items:s,sizes:O?F[O.id].sizes:[],surface:"panel",update:e=>l(t=>t.map(t=>Y(t)===Y(e)?e:t)),move:e=>{O&&l(function(e,t,r){const n=e.findIndex(e=>Y(e)===t),o=n+r;if(n<0||o<0||o>=e.length)return e;const i=[...e];return i.splice(o,0,...i.splice(n,1)),i}(s,Y(O),e)),k(o("widgets.reordered"))},remove:()=>{O&&(e=>{const t=Y(e);l(e=>e.filter(e=>Y(e)!==t)),v(null),k(o("widgets.removed",{name:o(F[e.id].label)}))})(O)}})}),n.jsx(C,{children:n.jsx("span",{role:"status",children:n.jsx("span",{children:x.text},x.serial)})})]}),n.jsx(Z,{title:o("config.discardTitle"),isOpen:b,onCancel:()=>w(!1),confirmLabel:o("config.discard"),onConfirm:t,children:n.jsx("p",{children:o("widgets.discardHelp")})})]})}export{Tr as DashboardActions,xr as DashboardEditor,kr as WidgetEditor}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Editors-rPgk_VZK.css b/luci-app-honk/root/etc/honk/doona/assets/Editors-rPgk_VZK.css new file mode 100644 index 000000000..30b3447cf --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Editors-rPgk_VZK.css @@ -0,0 +1 @@ +.rp-dashboard-body{display:contents}.rp-dashboard-tools{z-index:1;gap:var(--rp-space-2);border-radius:var(--rp-r-md);background:var(--rp-base);display:flex;position:absolute;inset-block-start:var(--rp-space-3);inset-inline-end:var(--rp-space-3)}.rp-dashboard-tools [slot=drag]{touch-action:none;cursor:grab}.rp-grip:before{content:"";inline-size:calc(var(--rp-space-1) / var(--rp-preview-scale,1));block-size:calc(var(--rp-space-6) / var(--rp-preview-scale,1));border-radius:var(--rp-r-pill);background:var(--rp-subtle);box-shadow:0 0 0 calc(var(--rp-space-half) / var(--rp-preview-scale,1)) var(--rp-base)}.rp-sortable-row{outline:none;min-inline-size:0;position:relative}.rp-sortable-row[data-focus-visible]{outline:none}.rp-sortable-row:is([data-focus-visible],[data-selected]):before{content:"";inset:calc(0px - var(--rp-sortable-gap,var(--rp-space-2)) - var(--rp-focus-width));border:var(--rp-focus-width) solid var(--rp-focus-color);pointer-events:none;position:absolute}.rp-sortable-grid{outline:none}.rp-sortable-row>[role=gridcell]{display:contents}.rp-sortable-grid[data-drop-target]{outline:2px dashed var(--rp-accent)}.rp-sortable-grid .rp-dashboard-tools{background:0 0;inset-block-start:calc(var(--rp-line-caption) / 2 - var(--rp-space-1));inset-inline-end:0;translate:0 -50%}.rp-sortable-grid .rp-widget-label{padding-inline-end:calc(var(--rp-control) + var(--rp-space-2))}.rp-sortable-row[data-module=divider] .rp-dashboard-tools{background:var(--rp-surface);padding-inline-start:var(--rp-space-1);inset-block-start:50%}.rp-widget-gallery-grid{gap:var(--rp-space-4);grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));display:grid}.rp-widget-gallery-tile{gap:var(--rp-space-3);min-inline-size:0;padding:var(--rp-space-4);border:1px solid var(--rp-line);border-radius:var(--rp-r-lg);flex-direction:column;display:flex}.rp-widget-gallery-tile>.rp-cluster{margin-block-start:auto}.rp-widget-gallery-tile[data-added]{background:var(--rp-fill);--rp-subtle:var(--rp-subtle-text)}.rp-widget-gallery-frame{pointer-events:none;block-size:200px;overflow:hidden;mask-image:linear-gradient(#000 80%,#0000)}.rp-widget-gallery-presets{align-items:flex-start;gap:var(--rp-space-3) var(--rp-preset-gap);flex-wrap:wrap;display:flex}.rp-widget-gallery-preset{gap:var(--rp-space-1);flex-direction:column;min-inline-size:0;display:flex}.rp-widget-gallery-thumb{position:relative;overflow:hidden}.rp-widget-gallery-thumb-card{transform-origin:0 0;pointer-events:none;container:rp-tile/inline-size}.rp-widget-gallery-thumb-card:dir(rtl){transform-origin:100% 0}.rp-widget-gallery-thumb-add{border-radius:var(--rp-r-lg);cursor:pointer;background:0 0;border:0;position:absolute;inset:0}.rp-widget-gallery-thumb-add[data-hovered]{outline:2px solid var(--rp-line);outline-offset:2px}.rp-widget-gallery-thumb-add[data-focus-visible]{outline:2px solid var(--rp-accent);outline-offset:2px}.rp-widget-gallery-thumb-add[data-disabled]{cursor:default;outline:none} diff --git a/luci-app-honk/root/etc/honk/doona/assets/Events-DhkgQmOB.js b/luci-app-honk/root/etc/honk/doona/assets/Events-DhkgQmOB.js deleted file mode 100644 index c333ca32b..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Events-DhkgQmOB.js +++ /dev/null @@ -1 +0,0 @@ -import{r as e,j as t}from"./vendor-react-64fcanlc.js";import{ad as n,ak as s,ai as r,j as a,ap as i,F as o,aC as l,V as d,$ as c,da as m,ar as u,as as p,f_ as v,f$ as f,T as h,aN as j,bs as x,G as w,Z as b,O as g,P as k}from"./index-BgFj_VXE.js";import{v as y,L as T}from"./logs-BxISynQ4.js";import{T as N}from"./Toolbar-CIBfeuEz.js";import{D as _}from"./Table-Dprh3Btz.js";import{d as C,e as O}from"./files-Dt8K7QfP.js";import{l as H}from"./format-s2EANuUb.js";import{O as S,D as F}from"./activity-D06xJ7oH.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Select-CkiGmyVC.js";import"./useGridSelectionCheckbox-BxnCShqN.js";import"./Virtualizer-CZl-q5wo.js";const R={buffer_overflow:["event.gap.overflow","event.gapHelp.overflow"],evicted:["event.gap.evicted","event.gapHelp.evicted"]};function W(e,t){const n="flow.gap"===e.event&&Object.hasOwn(R,e.data.reason)?R[e.data.reason]:void 0;return n&&{title:t(n[0]),text:t(n[1])}}function D(e,t){const n=e=>e?[{id:"flow",label:t("event.viewFlow"),href:a("flows",{tab:"records",id:e})}]:[];switch(e.event){case"flow.updated":return n(e.data.resource_id);case"flow.gap":return[...n(e.data.resource_id),{id:"recording",label:t("ui.recordingSettings"),href:S}];case"generation.changed":return[{id:"config",label:t("event.viewConfig"),href:a("config")}];default:return[]}}const K=new WeakMap;function M(e,t,a,i,o,l,d,c,m=!1,u=()=>!1){const p="without-runtime"===t||c.includes(t)?t:"all",v=e.filter(e=>"all"===p||("without-runtime"===p?"runtime.updated"!==e.event:e.event===p)).slice(0,o);return{kind:p,rows:v.map(e=>function(e,t,a,i){const o=K.get(e);if(o&&o.locale===t)return o.row;const l=i?{key:"event.lostHistory"}:r(e,a),d={id:e.id,timestamp:H(e.data.observed_at,t),iso:e.data.observed_at,kind:e.event,kindText:n(s,e.event,a),summary:a(l.key,l.params),help:W(e,a),links:D(e,a)};return K.set(e,{locale:t,row:d}),d}(e,l,d,u(e))),kinds:[{id:"without-runtime",label:d("event.withoutRuntime")},{id:"all",label:d("event.allKinds")},...c.map(e=>({id:e,label:n(s,e,d)}))],status:m&&!1!==i?{tone:"err",text:d("event.disconnected")}:{tone:a?"ok":null===i?"muted":"warn",text:d(!1===i?"event.unavailable":a?"event.connected":null===i?"ui.loading":"event.reconnecting")},limitText:d("event.limit",{n:o}),shown:v}}function P(){const t=i(),n=o(),s=l[d()],r=c(),a=r.data?.resources.events.kinds,[h,j]=e.useState("without-runtime"),x="all"!==h&&"runtime.updated"!==h&&a?.includes(h),w=y("without-runtime"!==h&&!x),b=e.useMemo(()=>M(w.events,h,w.connected,w.available,f,s,n,a??[],!!w.error,v),[w.events,h,w.connected,w.available,w.error,s,n,a]);return m(b.kind,j),{...b,setKind:j,cursor:w.cursor,error:w.error,retry:()=>{u().then(()=>p(t))},loading:!w.error&&!w.connected&&!1!==w.available&&!w.events.length,export:()=>{return C(O("doona-events","json"),(e=b.shown,JSON.stringify(e,null,2)+"\n"),"application/json");var e}}}function V(){const n=o(),s=P(),r=e.useMemo(()=>[{id:"t",label:n("ui.time"),minWidth:200,grow:0,drop:1,render:e=>t.jsx(h,{className:"rp-code",text:e.iso,children:e.timestamp})},{id:"k",label:n("event.kind"),minWidth:224,drop:2,render:e=>t.jsx(h,{text:e.kind,children:e.kindText})},{id:"m",label:n("event.summary"),minWidth:240,isRowHeader:!0,render:e=>t.jsx(j,{fill:!0,help:e.help,children:t.jsx(h,{children:e.summary})})}],[n]),a=e.useCallback(e=>t.jsxs(t.Fragment,{children:[t.jsx(x,{inline:!0,items:[[n("ui.time"),e.timestamp],[n("event.kind"),e.kindText],[n("event.summary"),e.summary]]}),e.links.length>0&&t.jsx("div",{className:"rp-cluster",children:e.links.map(e=>t.jsx(w,{appearance:"button",small:!0,href:e.href,children:e.label},e.id))})]}),[n]);return t.jsxs("div",{className:"rp-page",children:[t.jsxs(N,{page:!0,children:[t.jsx(T,{label:n("event.kind"),side:!0,value:s.kind,onChange:s.setKind,items:s.kinds}),t.jsx(b,{small:!0,tone:s.status.tone,children:s.status.text}),s.cursor&&t.jsx(h,{text:s.cursor,children:t.jsx("span",{className:"rp-label",children:n("event.cursor")})}),t.jsx("span",{className:"rp-label",children:s.limitText}),t.jsx("span",{className:"rp-grow"}),t.jsxs(g,{isDisabled:!s.rows.length,onPress:s.export,children:[t.jsx(F,{}),n("event.export")]})]}),s.error&&t.jsx(k,{error:s.error,onRetry:s.retry}),t.jsx(_,{label:n("nav.events"),stream:!0,flow:!0,loading:s.loading,rows:s.rows,empty:n("event.empty"),cols:r,detail:a})]})}export{V as Events}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Events-DtW4Lnh_.js b/luci-app-honk/root/etc/honk/doona/assets/Events-DtW4Lnh_.js new file mode 100644 index 000000000..73d55ffec --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Events-DtW4Lnh_.js @@ -0,0 +1 @@ +import{r as e,j as t}from"./vendor-react-64fcanlc.js";import{ae as n,an as r,ap as s,am as a,j as i,at as o,C as l,aF as d,P as c,W as m,cC as u,av as p,aw as v,fa as h,fb as f,T as x,aQ as j,bG as w,D as b,V as g,J as k,K as y}from"./index-CmbH0woS.js";import{v as T,L as C}from"./ActionGroup-D3mQjUsw.js";import{T as N}from"./Toolbar-B9K5nAyx.js";import{D as H}from"./Table-Cfbaho6J.js";import{d as _,e as D}from"./files-Dt8K7QfP.js";import{n as W,D as K}from"./activity-CiEWAlFW.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Select-BcN72K3H.js";import"./Checkbox-f7Je53QZ.js";import"./Virtualizer-itu1Kg0o.js";const S={buffer_overflow:["event.gap.overflow","event.gapHelp.overflow"],evicted:["event.gap.evicted","event.gapHelp.evicted"]};function F(e,t){const n="flow.gap"===e.event&&Object.hasOwn(S,e.data.reason)?S[e.data.reason]:void 0;return n&&{title:t(n[0]),text:t(n[1])}}function G(e,t){const n=e=>e?[{id:"flow",label:t("event.viewFlow"),href:i("flows",{tab:"records",id:e})}]:[];switch(e.event){case"flow.updated":return n(e.data.resource_id);case"flow.gap":return[...n(e.data.resource_id),{id:"recording",label:t("ui.recordingSettings"),href:W}];case"generation.changed":return[{id:"config",label:t("event.viewConfig"),href:i("config")}];default:return[]}}const M=new WeakMap;function O(e,t,i,o,l,d,c,m,u=!1,p=()=>!1){const v="without-runtime"===t||m.includes(t)?t:"all",h=e.filter(e=>"all"===v||("without-runtime"===v?"runtime.updated"!==e.event:e.event===v)).slice(0,l);return{kind:v,rows:h.map(e=>function(e,t,i,o){const l=M.get(e);if(l&&l.locale===t)return l.row;const d=o?{key:"event.lostHistory"}:s(e,i),c={id:e.id,timestamp:a(e.data.observed_at,t),iso:e.data.observed_at,kind:e.event,kindText:n(r,e.event,i),summary:i(d.key,d.params),help:F(e,i),links:G(e,i)};return M.set(e,{locale:t,row:c}),c}(e,d,c,p(e))),kinds:[{id:"without-runtime",label:c("event.withoutRuntime")},{id:"all",label:c("event.allKinds")},...m.map(e=>({id:e,label:n(r,e,c)}))],status:u&&!1!==o?{tone:"err",text:c("event.disconnected")}:{tone:i?"ok":null===o?"muted":"warn",text:c(!1===o?"event.unavailable":i?"event.connected":null===o?"ui.loading":"event.reconnecting")},limitText:c("event.limit",{n:l}),shown:h}}function R(){const t=o(),n=l(),r=d[c()],s=m(),a=s.data?.resources.events.kinds,[i,x]=e.useState("without-runtime"),j="all"!==i&&"runtime.updated"!==i&&a?.includes(i),w=T("without-runtime"!==i&&!j),b=e.useMemo(()=>O(w.events,i,w.connected,w.available,f,r,n,a??[],!!w.error,h),[w.events,i,w.connected,w.available,w.error,r,n,a]);return u(b.kind,x),{...b,setKind:x,cursor:w.cursor,error:w.error,retry:()=>{p().then(()=>v(t))},loading:!w.error&&!w.connected&&!1!==w.available&&!w.events.length,export:()=>{return _(D("doona-events","json"),(e=b.shown,JSON.stringify(e,null,2)+"\n"),"application/json");var e}}}function J(){const n=l(),r=R(),s=e.useMemo(()=>[{id:"t",label:n("ui.time"),minWidth:212,grow:0,drop:1,render:e=>t.jsx(x,{className:"rp-code",text:e.iso,children:e.timestamp})},{id:"k",label:n("event.kind"),minWidth:224,drop:2,render:e=>t.jsx(x,{text:e.kind,children:e.kindText})},{id:"m",label:n("event.summary"),minWidth:240,isRowHeader:!0,render:e=>t.jsx(j,{fill:!0,help:e.help,children:t.jsx(x,{children:e.summary})})}],[n]),a=e.useCallback(e=>t.jsxs(t.Fragment,{children:[t.jsx(w,{inline:!0,items:[[n("ui.time"),e.timestamp],[n("event.kind"),e.kindText],[n("event.summary"),e.summary]]}),e.links.length>0&&t.jsx("div",{className:"rp-cluster",children:e.links.map(e=>t.jsx(b,{appearance:"button",small:!0,href:e.href,children:e.label},e.id))})]}),[n]);return t.jsxs("div",{className:"rp-page",children:[t.jsxs(N,{page:!0,children:[t.jsx(C,{label:n("event.kind"),side:!0,value:r.kind,onChange:r.setKind,items:r.kinds}),t.jsx(g,{small:!0,tone:r.status.tone,children:r.status.text}),r.cursor&&t.jsx(x,{text:r.cursor,children:t.jsx("span",{className:"rp-label",children:n("event.cursor")})}),t.jsx("span",{className:"rp-label",children:r.limitText}),t.jsx("span",{className:"rp-grow"}),t.jsxs(k,{isDisabled:!r.rows.length,onPress:r.export,children:[t.jsx(K,{}),n("event.export")]})]}),r.error&&t.jsx(y,{error:r.error,onRetry:r.retry}),t.jsx(H,{label:n("nav.events"),stream:!0,flow:!0,loading:r.loading,rows:r.rows,empty:n("event.empty"),cols:s,detail:a})]})}export{J as Events}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/FlagPicker-DvzEtm7E.js b/luci-app-honk/root/etc/honk/doona/assets/FlagPicker-DvzEtm7E.js deleted file mode 100644 index e34af9ed1..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/FlagPicker-DvzEtm7E.js +++ /dev/null @@ -1 +0,0 @@ -import{r as e,j as a}from"./vendor-react-64fcanlc.js";import{F as s,V as l,dG as i,aC as n,fi as o,cD as r,O as t}from"./index-BgFj_VXE.js";import{S as c}from"./SearchSelect-CO6FsBaz.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Select-CkiGmyVC.js";import"./SearchList-Bhc2_bS4.js";import"./Virtualizer-CZl-q5wo.js";function m({name:r,value:t,automaticFlag:m,onChange:d}){const f=s(),g=l(),j=e.useMemo(()=>i(n[g]),[g]),p=o(r),u=j.find(e=>e.flag===m),h=u?f("flags.detected",{region:u.label}):f("flags.automatic");return a.jsx("div",{className:"rp-list",children:a.jsx(c,{label:f("flags.region"),description:f(p?"flags.embedded":"flags.help"),isDisabled:p,searchLabel:f("flags.search"),value:p?"automatic":t,onChange:d,sections:[{id:"flags",items:[{id:"automatic",label:h,flag:m},{id:"none",label:f("flags.none"),flag:null},...j]}]})})}function d({name:e,onClose:l,...i}){const n=s();return a.jsxs(r,{narrow:!0,title:n("flags.edit"),isOpen:!0,onOpenChange:e=>{e||l()},footer:()=>a.jsx(t,{onPress:l,children:n("ui.close")}),children:[a.jsx("p",{className:"rp-note",children:e}),a.jsx(m,{name:e,...i})]})}export{m as FlagField,d as FlagPicker}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/FlagPicker-v8i5Q7lf.js b/luci-app-honk/root/etc/honk/doona/assets/FlagPicker-v8i5Q7lf.js new file mode 100644 index 000000000..fe37572b9 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/FlagPicker-v8i5Q7lf.js @@ -0,0 +1 @@ +import{r as e,j as a}from"./vendor-react-64fcanlc.js";import{C as s,P as l,d9 as n,aF as o,eu as i,d6 as r,J as t}from"./index-CmbH0woS.js";import{S as c}from"./SearchSelect-CuaWhoLz.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Select-BcN72K3H.js";import"./SearchList-CJ8rQxgu.js";import"./Virtualizer-itu1Kg0o.js";function m({name:r,value:t,automaticFlag:m,onChange:d}){const f=s(),g=l(),j=e.useMemo(()=>n(o[g]),[g]),p=i(r),u=j.find(e=>e.flag===m),h=u?f("flags.detected",{region:u.label}):f("flags.automatic");return a.jsx("div",{className:"rp-list",children:a.jsx(c,{label:f("flags.region"),description:f(p?"flags.embedded":"flags.help"),isDisabled:p,searchLabel:f("flags.search"),value:p?"automatic":t,onChange:d,sections:[{id:"flags",items:[{id:"automatic",label:h,flag:m},{id:"none",label:f("flags.none"),flag:null},...j]}]})})}function d({name:e,onClose:l,...n}){const o=s();return a.jsxs(r,{narrow:!0,title:o("flags.edit"),isOpen:!0,onOpenChange:e=>{e||l()},footer:()=>a.jsx(t,{onPress:l,children:o("ui.close")}),children:[a.jsx("p",{className:"rp-note",children:e}),a.jsx(m,{name:e,...n})]})}export{m as FlagField,d as FlagPicker}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Flows-B78_vhjx.css b/luci-app-honk/root/etc/honk/doona/assets/Flows-B78_vhjx.css new file mode 100644 index 000000000..309695810 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Flows-B78_vhjx.css @@ -0,0 +1 @@ +.rp-topology{min-width:0;overflow:hidden}.rp-tree{gap:var(--rp-space-2);overscroll-behavior-x:contain;flex-direction:column;min-width:0;display:flex;overflow-x:auto}.rp-tree-hint{color:var(--rp-subtle);font-size:var(--rp-text-xs);line-height:16px;display:none}@media (width<=599.98px){.rp-tree-hint{display:block}}.rp-tree-captions{height:16px;position:relative}.rp-tree-captions>.rp-label{text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;position:absolute;top:0}.rp-tree-canvas{position:relative}.rp-tree-links{pointer-events:none;fill:none;stroke:var(--rp-muted);stroke-linecap:round;position:absolute;inset:0;overflow:visible}.rp-tree-links path{opacity:.55;transition:opacity var(--rp-duration) var(--rp-ease)}.rp-tree-links path[data-kind=direct]{stroke:var(--rp-positive)}.rp-tree-links path[data-kind=block]{stroke:var(--rp-negative)}.rp-tree-links path[data-kind=group]{stroke:var(--rp-iris)}.rp-tree-links path[data-kind=node]{stroke:var(--rp-accent)}.rp-tree-links path[data-state=active]{opacity:1}.rp-tree-links path[data-state=dim]{opacity:.1}.rp-tree-tile{box-sizing:border-box;align-items:center;gap:var(--rp-space-2);height:36px;padding:0 var(--rp-space-2h);border-radius:var(--rp-r-md);background:var(--rp-overlay);color:var(--rp-text);font:inherit;font-size:var(--rp-text-sm);text-align:start;cursor:pointer;border:2px solid #0000;line-height:16px;display:flex;position:absolute}.rp-tree-tile.dim{opacity:.35}.rp-tree-tile[data-hovered]{background:var(--rp-hl-med)}.rp-tree-tile[data-selected]{border-color:var(--rp-accent);background:var(--rp-selected)}.rp-tree-tile[data-focus-visible]{outline:var(--rp-focus-width) solid var(--rp-focus-color);outline-offset:calc(-1 * var(--rp-focus-width));border-color:#0000}.rp-tree-tile .l{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.rp-tree-tile[data-stage=rule] .l{font-family:var(--rp-font-mono);font-size:var(--rp-text-xs);font-variant-ligatures:none}.rp-tree-tile .s{font-size:var(--rp-text-xs);color:var(--rp-subtle);margin-inline-start:var(--rp-space-2)}.rp-tree-tile .s.ok{color:var(--rp-positive-text)}.rp-tree-tile .s.warn{color:var(--rp-notice-text)}.rp-tree-tile .s.err{color:var(--rp-negative-text)}.rp-tree-tile .c{font-variant-numeric:tabular-nums;color:var(--rp-subtle);flex:none;font-weight:700} diff --git a/luci-app-honk/root/etc/honk/doona/assets/Flows-Bc5zvW8x.js b/luci-app-honk/root/etc/honk/doona/assets/Flows-Bc5zvW8x.js deleted file mode 100644 index 856f96e29..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Flows-Bc5zvW8x.js +++ /dev/null @@ -1 +0,0 @@ -import{r as e,j as t}from"./vendor-react-64fcanlc.js";import{O as n}from"./OutboundTag-jvAhyeqj.js";import{l as a,i as o,u as s,c as r,R as l,S as i,L as d}from"./logs-BxISynQ4.js";import{i as u,aa as c,al as p,an as m,am as f,dc as g,de as w,w as h,d5 as b,ad as v,d7 as j,d8 as x,aC as y,j as k,aB as _,o as M,ag as N,F as L,V as S,K as C,O as P,N as T,bJ as O,aP as F,$ as R,a0 as H,bK as q,dh as E,db as W,D,P as $,T as A,aW as I,G as U,bB as B,bs as K,au as G,Q as J}from"./index-BgFj_VXE.js";import{M as Q,H as V,N as z,K as X,O as Y,G as Z}from"./activity-D06xJ7oH.js";import{w as ee}from"./labels-DPpd4zRF.js";import{l as te,c as ne}from"./format-s2EANuUb.js";import{c as ae,C as oe}from"./Coverage-VYQXivNr.js";import{f as se}from"./nav-D44ro1l_.js";import{T as re}from"./Tabs-CD2lZase.js";import{T as le}from"./Toolbar-CIBfeuEz.js";import{D as ie}from"./Table-Dprh3Btz.js";import{T as de}from"./TimeCell-B4WLB8Ou.js";import{A as ue}from"./AddCircle-prR7q573.js";import{b as ce,u as pe,c as me}from"./flows-xKlsDqlH.js";import{u as fe}from"./outbounds-BApwKyMu.js";import{u as ge,R as we}from"./useQuickRule-fWQicp9K.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Tag-PTwIjtR6.js";import"./Select-CkiGmyVC.js";import"./useGridSelectionCheckbox-BxnCShqN.js";import"./Virtualizer-CZl-q5wo.js";import"./DaeCode-DEjXqvav.js";import"./daeTokens-BVtuNnWZ.js";import"./SearchSelect-CO6FsBaz.js";import"./SearchList-Bhc2_bS4.js";const he=["client","rule","outbound","node"];function be(e,t){if(e.rule_id)return null!==e.rule_generation_id&&e.rule_generation_id===t?e.rule_id:e.rule_id+"\0"+e.rule_expression}function ve(e,t,n,a){switch(t){case"client":{const t=c(e.input?.src??void 0);return{label:t??"unknown",unknown:!t}}case"rule":return e.rule_expression?{label:e.rule_expression,unknown:!1,key:be(e,a)}:{label:"unknown",unknown:!0};case"outbound":return e.outbound?{label:e.outbound,unknown:!1}:{label:"unknown",unknown:!0};case"node":{if(u(e.outbound))return null;const t=e.chain.at(-1)??null;return t?{label:n.get(t)??t,unknown:!1,key:t}:{label:"unknown",unknown:!0}}}}const je=(e,t)=>V(e,t.unknown?"":t.key??t.label),xe=e=>Q(e,he)?.kind,ye=new Map;function ke(e,t,n){const a=xe(t);return a?e.filter(e=>{const o=ve(e,a,ye,n?.generation_id);return null!==o&&je(a,o)===t}):[]}function _e(e,t,n,a){const o=Q(e,he);if(!o||""===o.value)return a(null);const{kind:s,value:r}=o;return"rule"===s?r.includes("\0")?r.slice(r.indexOf("\0")+1):t.find(e=>e.rule_id===r)?.expression??r:"node"===s?n.get(r)??r:"client"===s?r:a(r)}function Me(e,t,n,a,o="rule"){const s=(e=>new Map(e.map(e=>[e.id,e.name])))(n),r=new Map(t.map(e=>[e.id,e])),l=new Map(t.map(e=>[e.name,e])),i=new Map(n.map(e=>[e.id,e])),d=new Map,c=new Map,g=new Map,w=new Map,h=(e,t)=>{const n=e+">"+t;let a=w.get(n);return a||w.set(n,a={source:e,target:t,count:0}),a},b=(e,t,n=!1)=>{const a=je("node",{key:e,label:t,unknown:n});let o=g.get(a);if(!o){const s=n?void 0:i.get(e),r=s&&m(s);g.set(a,o={id:a,label:t,count:0,unknown:n||void 0,latency:f(r),unavailable:"unavailable"===r?.state})}return o},v=(e,t=!1)=>{const n=je("outbound",{label:e,unknown:t});let a=c.get(n);if(a)return a;const o=t?void 0:l.get(e),d=t?{groups:[],member:null}:p(e,o?.selection.tcp_member_id?"tcp":"udp",l,r,i),m=d.groups.map(e=>({name:e.name,kind:e.policy.kind,policy:e.policy.native})),f=d.member;return a={id:n,label:e,count:0,unknown:t||void 0,kind:t?"unknown":u(e)?e:m.length?"group":"unknown",groups:m,node:f&&b(f,s.get(f)??f).id},c.set(n,a),a.node&&h(n,a.node),a},j=(e,t,n=!1)=>{let a=d.get(e);return a||d.set(e,a={id:e,label:t,count:0,unknown:n||void 0,outbound:null,must:!1}),a};if("rule"===o)for(const u of a?.rules??[]){const e=j(je("rule",{key:u.rule_id,label:u.expression}),u.expression);e.must=u.must,u.outbound&&(e.outbound=v(u.outbound).id,h(e.id,e.outbound))}const x=[o,"outbound","node"];for(const u of e){let e;for(const t of x){const n=ve(u,t,s,a?.generation_id);if(!n)break;const o="outbound"===t?v(n.label,n.unknown):"node"===t?b(n.key??n.label,n.label,n.unknown):j(je(t,n),n.label,n.unknown);o.count++,e&&h(e.id,o.id).count++,e=o}}for(const u of t)v(u.name);const y=new Set([...d.values()].map(e=>e.outbound)),k=new Set([...c.values()].flatMap(e=>e.groups.slice(1).map(e=>e.name))),_=[...c.values()].filter(e=>e.count||y.has(e.id)||!k.has(e.label)),M=new Set(_.map(e=>e.id)),N=[...w.values()].filter(e=>M.has(e.source)||M.has(e.target)),L=new Set(N.map(e=>e.target));return{by:o,leaves:[...d.values()],outbounds:_,nodes:[...g.values()].filter(e=>L.has(e.id)),links:N}}const Ne=new WeakMap;function Le(e){const t=Ne.get(e);if(t)return t;const n=new Map,a=new Map,o=new Map;for(const l of e.links){for(const[e,t]of[[n,l.source],[a,l.target]]){let n=e.get(t);n||e.set(t,n=[]),n.push(l)}(!o.has(l.source)||o.get(l.source).countnull==e?"—":{key:e?"ui.yes":"ui.no"};function Te(e,t,n,a,o,s){return{tree:e,state:t?e.leaves.length||e.outbounds.length?"ready":"empty":n?"error":"loading",pinLabel:a?s("flow.viewPinned",{n:o}):null}}const Oe={input:"flow.stage.input",route:"flow.stage.route",dial_mode:"flow.stage.dialMode",dns:"flow.stage.dns",outbound:"flow.stage.outbound",connection:"flow.stage.connection",datapath:"flow.stage.datapath",reroute:"flow.stage.reroute"},Fe={complete:"flow.status.complete",partial:"flow.status.partial",disabled:"flow.status.disabled"};function Re(e,t,n,a){if(!e)return null;const o=y[n];return{title:e.input.domain||e.input.dst||e.id,status:v(Fe,e.trace.status,t),tone:"complete"===e.trace.status?void 0:"warn",revision:t("flow.revision",{n:e.revision}),fields:[[t("ui.state"),v(b,e.state,t)],...a?[[t("conn.node"),a.path??a.node]]:[],...a?.expression?[[t("conn.rule"),a.expression]]:[],...e.trace.missing.length?[[t("flow.missing"),_(n,e.trace.missing.map(e=>v(Se,e,t)))]]:[]],connectionHref:e.connection_id?k("connections",{id:e.connection_id}):null,steps:[...e.trace.steps].sort((e,t)=>e.seq-t.seq).map(e=>{const n=function(e){const t=e=>null==e?"—":"object"==typeof e?JSON.stringify(e):String(e);switch(e.stage){case"input":return Object.entries(e.data.values).filter(([,e])=>null!=e&&""!==e).map(([e,n])=>{const a=Ce[e];return[void 0!==a&&a.includes(".")?a:{key:"flow.f.input",params:{name:a??e}},"string"!=typeof n||"ingress"!==e&&"domain_source"!==e?t(n):ee(n)]});case"route":return[["flow.f.chain",e.data.chain],["flow.f.plane",ee(e.data.plane)],["ui.rule",e.data.rules.filter(e=>"matched"===e.result).map(e=>e.expression??e.rule_id).join(", ")||"—"],["ui.outbound",t(e.data.outbound)],["flow.f.must",Pe(e.data.must)]];case"dial_mode":return[["flow.f.dialTarget",e.data.configured+" → "+e.data.effective_target],["flow.f.verification",ee(e.data.verification)]];case"dns":return[["ui.name",e.data.name],["flow.f.source",ee(e.data.source)],["flow.f.cache",ee(e.data.cache)],["ui.upstream",t(e.data.upstream)],["flow.f.selectedIp",t(e.data.selected_ip)]];case"outbound":return[["ui.outbound",t(e.data.routed_outbound)+" → "+t(e.data.effective_outbound)],["flow.f.selectionPath",e.data.selection_path.map(e=>e.group_id+" → "+t(e.member_name??e.member_id)).join(" / ")||"—"],["flow.f.leafNode",t(e.data.leaf_node_id)],["ui.target",t(e.data.target)],["ui.state",ee(e.data.status)]];case"connection":return[["ui.state",Object.hasOwn(b,e.data.state)?{key:b[e.data.state]}:e.data.state],["flow.f.milestone",ee(e.data.milestone)],["flow.f.reason",ee(e.data.reason)]];case"datapath":return[["flow.f.plane",ee(e.data.plane)],["flow.f.action",ee(e.data.action)],["flow.f.reason",ee(e.data.reason)]];case"reroute":return[["flow.f.performed",Pe(e.data.performed)],["flow.f.reason",ee(e.data.reason)]];default:return null}}(e);return{id:e.seq,stage:v(Oe,e.stage,t),observed:te(e.observed_at,o),elapsed:null==e.elapsed_us?"—":t("ui.microseconds",{n:e.elapsed_us}),fields:n?.map(([e,n])=>["string"==typeof e?t(e):t(e.key,e.params),"string"==typeof n?n:t(n.key,n.params)])??null,raw:n?"":JSON.stringify(e.data,null,2)}})}}const He=30,qe=[5,4,3],Ee={rule:0,client:0,outbound:1,node:2};function We(e,t,n,o){const s=null===t?void 0:Math.max(t,720),r=((s??0)-112)/qe.reduce((e,t)=>e+t),l=e=>{const t=Ee[e];return{left:qe.slice(0,t).reduce((e,t)=>e+t*r+56,0),width:qe[t]*r}},i=function(e){const t=new Map;let n=0;const a=new Map,{parents:o}=Le(e);for(const l of[...e.leaves,...e.outbounds]){const e=o.get(l.id);if(e){let t=a.get(e);t||a.set(e,t=[]),t.push(l.id)}}const s=e=>{const o=a.get(e)??[];if(o.length){for(const e of o)s(e);t.set(e,(t.get(o[0])+t.get(o[o.length-1]))/2)}else t.set(e,n++)},r=new Set;for(const l of e.outbounds)r.add(o.get(l.id)??l.id);for(const l of e.nodes)r.add(l.id);for(const l of e.leaves)o.has(l.id)||r.add(l.id);for(const l of r)s(l);return{rows:n,at:t}}(e),d=function(e,t,n){const o=(e,n)=>e.unknown?t("flow.mapUnknown"):n,s=[...e.leaves.map(t=>({id:t.id,stage:e.by,name:o(t,t.label),badge:t.must?"must":void 0,notes:[],count:t.count})),...e.outbounds.map(e=>({id:e.id,stage:"outbound",name:o(e,M(e.label,t)),notes:[...e.groups.slice(1).map(e=>({text:"› "+e.name})),...e.groups.slice(-1).map(e=>({text:z({kind:e.kind,native:e.policy},t).label})),..."group"!==e.kind||e.node?[]:[{text:t("flow.treeNoNode")}]],count:e.count})),...e.nodes.map(e=>({id:e.id,stage:"node",name:o(e,e.label),notes:null!=e.latency?[{text:ne(e.latency,t),tone:a(e.latency)}]:e.unavailable?[{text:t("ui.unavailable"),tone:"err"}]:[],count:e.count}))],r=new Map(s.map(e=>[e.id,e.name])),{outgoing:l,incoming:i}=Le(e);return s.map(e=>{const a=(l.get(e.id)??[]).map(e=>r.get(e.target)),o="node"===e.stage?(i.get(e.id)??[]).map(e=>r.get(e.source)):[],s=[e.name,...e.badge?[e.badge]:[],...e.notes.map(e=>e.text),t("flow.treeFlows",{n:e.count})];return o.length&&s.push(t("flow.treeFrom",{names:_(n,o)})),a.length&&s.push(t("flow.treeTo",{names:_(n,a)})),{...e,countText:N(e.count,y[n]),label:s.join(t("ui.separator"))}})}(e,n,o).map(e=>({view:e,style:{top:44*i.at.get(e.id),...l(e.stage)}})),u=new Map(e.outbounds.map(e=>[e.id,e])),c=e.links.flatMap(t=>{if(!i.at.has(t.source)||!i.at.has(t.target))return[];const n="outbound"===xe(t.source)?"outbound":e.by,a=l(n),o=a.left+a.width,s=l("outbound"===n?"node":"outbound").left,r=44*i.at.get(t.source)+18,d=44*i.at.get(t.target)+18,c=(o+s)/2;return[{link:t,id:t.source+">"+t.target,path:`M${o},${r} C${c},${r} ${c},${d} ${s},${d}`,width:Math.min(8,1.5+1.25*Math.log2(1+t.count)),dash:t.count?void 0:"4 4",kind:"outbound"===n?"node":u.get(t.target)?.kind??"group"}]});return{width:s,height:44*i.rows-8,captions:[{stage:e.by,label:n("rule"===e.by?"flow.mapRule":"flow.stageClient"),style:l(e.by)},{stage:"outbound",label:n("flow.mapOutbound"),style:l("outbound")},{stage:"node",label:n("flow.mapNode"),style:l("node")}],placed:d,geometry:c}}function De(t,n,a){const o=L(),s=S(),[r,l]=e.useState(He),[i,d]=e.useState(null),[u,c]=C(),p=e.useMemo(()=>Le(t),[t]),m=e.useMemo(()=>function(e,t){return e.leaves.length<=t?e:{...e,leaves:e.leaves.slice(0,t)}}(t,r),[t,r]),f=e.useMemo(()=>We(m,c,o,s),[m,c,o,s]),g=e.useMemo(()=>new Set(f.placed.map(e=>e.view.id)),[f.placed]),w=e.useMemo(()=>new Set([...t.leaves,...t.outbounds,...t.nodes].map(e=>e.id)),[t]),h=i&&g.has(i)?i:n&&w.has(n)?n:null,b=e.useMemo(()=>h?function(e,t){const n=new Set([t]),a=new Set;for(const[o,s]of[[e.outgoing,"target"],[e.incoming,"source"]]){const e=[t];for(const t of e)for(const r of o.get(t)??[])a.has(r)||(a.add(r),n.has(r[s])||(n.add(r[s]),e.push(r[s])))}return{items:n,edges:a}}(p,h):null,[p,h]);e.useEffect(()=>{if(!n)return;const e=e=>{"Escape"===e.key&&a(null)};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[n,a]);const v=e.useRef(n);e.useLayoutEffect(()=>{v.current=n},[n]);const j=e.useCallback(e=>a(v.current===e?null:e),[a]);return{...f,ref:u,ready:void 0!==f.width,active:b,pinned:n,pin:j,hover:d,more:t.leaves.length>r?o("flow.treeShowMore",{n:Math.min(He,t.leaves.length-r)}):null,fewer:r>He?o("flow.treeFewer",{n:He}):null,showMore:()=>l(e=>Math.min(t.leaves.length,e+He)),showFewer:()=>l(He)}}const $e=e.memo(function({view:e,style:n,dim:a,selected:s,pin:r,hover:l}){return t.jsxs(o,{"aria-label":e.label,className:O("rp-tree-tile",a&&"dim"),"data-id":e.id,"data-stage":e.stage,style:n,isSelected:s,onChange:()=>r(e.id),onHoverStart:()=>l(e.id),onHoverEnd:()=>l(null),onFocus:()=>l(e.id),onBlur:()=>l(null),children:[t.jsxs("span",{className:"l",children:["node"===e.stage?t.jsx("b",{children:t.jsx(T,{name:e.name})}):"rule"===e.stage||"client"===e.stage?e.name:t.jsx("b",{children:e.name}),e.notes.map((e,n)=>t.jsx("span",{className:O("s",e.tone),children:e.text},n))]}),e.badge&&t.jsx(F,{children:e.badge}),t.jsx("span",{className:"c",children:e.countText})]})});function Ae({tree:e,pinned:n,onPin:a}){const{ref:o,...s}=De(e,n,a);return t.jsxs("div",{className:"rp-tree",ref:o,children:[t.jsx("div",{className:"rp-tree-captions",style:{width:s.width},children:s.captions.map(e=>t.jsx("span",{className:"rp-label",style:e.style,children:e.label},e.stage))}),t.jsxs("div",{className:"rp-tree-canvas",style:{height:s.height,width:s.width},children:[s.ready&&t.jsx("svg",{className:"rp-tree-links",width:s.width,height:s.height,"aria-hidden":!0,children:s.geometry.map(e=>t.jsx("path",{d:e.path,strokeWidth:e.width,"data-kind":e.kind,"data-state":s.active?s.active.edges.has(e.link)?"active":"dim":void 0,strokeDasharray:e.dash},e.id))}),s.ready&&s.placed.map(({view:e,style:n})=>t.jsx($e,{view:e,style:n,dim:!!s.active&&!s.active.items.has(e.id),selected:s.pinned===e.id,pin:s.pin,hover:s.hover},e.id))]}),s.more&&t.jsx(P,{small:!0,quiet:!0,onPress:s.showMore,children:s.more}),s.fewer&&t.jsx(P,{small:!0,quiet:!0,onPress:s.showFewer,children:s.fewer})]})}function Ie({go:t,query:n}){const a=L(),o=S(),r=q(E),l=e.useMemo(()=>new URLSearchParams(n),[n]),i=l.get("network"),d="tcp"===i||"udp"===i?i:"all",p=l.get("state")??"",m=Object.hasOwn(b,p)?p:"all",f=l.get("connection_id")??void 0,g=R().data?.resources,w=ce({connection_id:f,network:d,state:m},H(g,"flows",{whileLoading:!0})),y=H(g,"rules",{whileLoading:!1}),k=pe(y),_=fe(),N=l.get("id"),C=me(N),P=l.get("path"),T=e.useMemo(()=>{const e=w.data?.flows??[];return P?ke(e,P,k.data):e},[w.data,P,k.data]),O=k.data?.generation_id,F=e.useMemo(()=>function(e,t,n,a,o,s){return{rows:e.map(e=>({id:e.id,target:e.input?.domain||e.input?.dst||e.id,node:x(e,o,a),nodeName:!u(e.outbound)&&e.chain.length>0,path:j(e,o,a),expression:e.rule_expression,ruleId:null!==e.rule_generation_id&&e.rule_generation_id===n?e.rule_id:null,recomputed:"recomputed"===e.rule_source,network:e.network.toUpperCase(),state:v(b,e.state,o),startedAt:e.started_at,seed:{domain:e.input?.domain??null,dip:c(e.input?.dst??void 0)??null,sip:c(e.input?.src??void 0)??null,outbound:e.outbound,matched:e.rule_id&&"unknown"!==e.rule_source?{id:e.rule_id,expression:e.rule_expression,generation:e.rule_generation_id}:null}})),coverage:t?ae(t,o,s):null,stateOptions:[{id:"all",label:o("flow.allStates")},...Object.entries(b).map(([e,t])=>({id:e,label:o(t)}))]}}(T,w.data,O,_,a,o),[T,w.data,O,_,a,o]),W=F.rows.find(e=>e.id===N),D=s(H(g,"groups",{whileLoading:!1})).data,$=e.useMemo(()=>{const e=Re(C.data??void 0,a,o,W);return e&&{...e,outboundTag:X(C.data.outbound,D,a)}},[C.data,a,o,W,D]),A=ge(t);return{...F,detail:$,rule:{canAdd:A.canAdd,open:A.open,label:e=>a("conn.addRuleFor",{target:e}),noTarget:a("flow.ruleNoTarget"),dialog:A.dialog},network:d,setNetwork:e=>t("flows",h(n,{network:"all"===e?null:e})),state:m,setState:e=>t("flows",h(n,{state:"all"===e?null:e})),wide:r,id:N,rulesListed:y,error:w.error,retry:w.refetch,loading:w.loading&&!w.data,panelOpen:!!N&&(!!C.data||C.loading||!!C.error),panelTitle:$?.title??N??"",detailError:C.error,detailRetry:C.refetch,detailLoading:!C.data&&C.loading,select:e=>t("flows",h(n,{id:e}),{replace:null!==N}),pinLabel:P?a("flow.mapFilter",{label:_e(P,k.data?.rules??[],_,e=>null===e?a("flow.mapUnknown"):M(e,a))}):null,clearPin:()=>t("flows",h(n,{path:null})),connectionLabel:f?a("flow.connectionFilter",{connectionId:f}):null,clearConnection:()=>t("flows",h(n,{connection_id:null})),recordingHref:g?.runtime_settings.available?Y:null}}function Ue({go:e,query:t}){const n=L(),a=R(),o=function(e,t,n){const a=se(e).map(e=>({id:e.id,label:n(e.titleKey)})),o=a[0]?.id??"map";return{tabs:a,tab:g(t,a.map(e=>e.id),o),fallback:e?o:null}}(a.data?.resources,t,n);return W(a.data?.resources),{...o,loading:a.loading&&!a.data,error:a.error,retry:a.refetch,changeTab:n=>e("flows",function(e,t,n){return w(h(e,"map"===t?{id:null,connection_id:null}:{by:null}),t,n)}(t,n,o.fallback))}}function Be(e){const n=L(),a=Ue(e),o={map:t.jsx(Ke,{...e}),records:t.jsx(Ge,{...e})};return a.loading?t.jsx(D,{}):a.error?t.jsx($,{error:a.error,onRetry:a.retry}):t.jsx("div",{className:"rp-page",children:t.jsx(re,{page:!0,label:n("nav.flows"),items:a.tabs.map(e=>({...e,content:o[e.id]})),value:a.tab,onChange:a.changeTab})})}function Ke(n){const a=L(),o=function({go:t,query:n}){const a=L(),o=new URLSearchParams(n),l=R().data?.resources,i=ce({},H(l,"flows",{whileLoading:!0})),d=s(H(l,"groups",{whileLoading:!1})),u=r(H(l,"nodes",{whileLoading:!1})),c=pe(H(l,"rules",{whileLoading:!1})),p="client"===o.get("by")?"client":"rule",m=e.useMemo(()=>Me(i.data?.flows??[],d.data??[],u.data??[],c.data,p),[i.data,d.data,u.data,c.data,p]),f=o.get("path"),g=e.useRef(n);e.useLayoutEffect(()=>{g.current=n},[n]);const w=e.useCallback(e=>t("flows",h(g.current,{path:e})),[t]),b=e.useMemo(()=>f?ke(i.data?.flows??[],f,c.data).length:0,[i.data,f,c.data]);return{...Te(m,[i,c,d,u].every(e=>void 0!==e.data||e.error||!e.loading)&&!!(i.data||c.data||d.data),!!i.error,f,b,a),by:p,pinned:f,error:i.error??d.error??u.error??c.error,retry:()=>{i.refetch(),d.refetch(),u.refetch(),c.refetch()},pin:w,changeBy:e=>t("flows",h(n,{by:"client"===e?"client":null,path:null})),viewPinned:()=>t("flows",h(n,{tab:"records"}))}}(n);return t.jsxs("section",{className:"rp-col","aria-label":a("flow.map"),children:[t.jsxs(le,{page:!0,children:[o.pinLabel?t.jsx(P,{onPress:o.viewPinned,children:o.pinLabel}):t.jsx("span",{className:"rp-label",children:a("flow.mapFilterHint")}),t.jsx("span",{className:"rp-grow"}),t.jsx(P,{quiet:!0,isDisabled:!o.pinLabel,onPress:()=>o.pin(null),children:a("flow.clearMapFilter")})]}),t.jsx($,{error:o.error,onRetry:o.retry}),t.jsxs(J,{title:a("flow.topology"),note:a("flow.topologyNote"),className:"rp-topology",aside:t.jsx(i,{label:a("flow.topology"),value:o.by,onChange:o.changeBy,items:[["rule",a("flow.byRule")],["client",a("flow.byClient")]]}),children:["loading"===o.state&&t.jsx(D,{}),"empty"===o.state&&t.jsx(G,{children:a("flow.mapEmpty")}),"ready"===o.state&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"rp-tree-hint",children:a("flow.treePanHint")}),t.jsx(Ae,{tree:o.tree,pinned:o.pinned,onPin:o.pin})]})]})]})}function Ge(a){const o=L(),s=Ie(a),r=s.detail,u=e.useRef(s.rule);e.useLayoutEffect(()=>{u.current=s.rule});const c=e.useMemo(()=>[{id:"target",label:o("ui.target"),minWidth:128,grow:2,isRowHeader:!0,render:e=>t.jsx(A,{children:e.target})},{id:"node",label:o("conn.node"),minWidth:96,drop:2,render:e=>e.nodeName?t.jsx(T,{name:e.node,className:"rp-chain",text:e.path??void 0}):t.jsx(A,{className:"rp-chain",text:e.path??void 0,children:e.node})},{id:"rule",label:o("conn.rule"),minWidth:152,grow:2,drop:1,render:e=>t.jsxs("span",{className:"rp-rule",children:[t.jsx(l,{expression:e.expression,href:Z(e.ruleId,s.rulesListed)}),e.recomputed&&t.jsx(F,{children:o("conn.recomputed")})]})},{id:"network",label:o("ui.protocol"),minWidth:64,grow:0,drop:3,render:e=>e.network},{id:"state",label:o("ui.state"),minWidth:112,grow:0,drop:5,render:e=>e.state},{id:"started",label:o("ui.started"),minWidth:140,grow:0,drop:4,render:e=>t.jsx(de,{at:e.startedAt})},{id:"actions",actions:!0,label:o("ui.actions"),minWidth:88,grow:0,render:e=>{const n=u.current,a=!n.canAdd(e.seed);return t.jsx(P,{quiet:!0,icon:!0,small:!0,label:n.label(e.target),tip:a?n.noTarget:void 0,isDisabled:a,onPress:()=>u.current.open(e.seed),children:t.jsx(ue,{})})}}],[o,s.rulesListed]);return t.jsxs(t.Fragment,{children:[t.jsx($,{error:s.error,onRetry:s.retry}),t.jsxs(le,{page:!0,children:[t.jsx(i,{label:o("ui.network"),value:s.network,onChange:s.setNetwork,items:[["all",o("ui.all")],["tcp",o("ui.tcp")],["udp",o("ui.udp")]]}),t.jsx(d,{label:o("ui.state"),side:!0,value:s.state,onChange:s.setState,items:s.stateOptions}),s.pinLabel&&t.jsxs(P,{label:o("ui.valuePair",{label:o("flow.clearMapFilter"),value:s.pinLabel}),onPress:s.clearPin,children:[s.pinLabel,t.jsx(I,{})]}),s.connectionLabel&&t.jsxs(P,{label:o("ui.valuePair",{label:o("flow.clearConnectionFilter"),value:s.connectionLabel}),onPress:s.clearConnection,children:[s.connectionLabel,t.jsx(I,{})]}),s.coverage&&t.jsx(oe,{view:s.coverage}),s.recordingHref&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"rp-grow"}),t.jsx(U,{appearance:"button",quiet:!0,href:s.recordingHref,children:o("ui.recordingSettings")})]})]}),t.jsxs("div",{className:"rp-with-panel","data-open":s.panelOpen?"":void 0,children:[t.jsx(ie,{label:o("flow.records"),rowDetail:!0,loading:s.loading,rows:s.rows,height:442,selected:s.id,onSelect:s.select,selectOnFocus:s.wide,empty:o("flow.empty"),cols:c}),t.jsxs(B,{open:s.panelOpen,title:s.panelTitle,onClose:()=>s.select(null),children:[t.jsx($,{error:s.detailError,onRetry:s.detailRetry}),s.detailLoading&&t.jsx(D,{children:o("flow.detailLoading")}),r&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"rp-cluster",children:[t.jsx(F,{tone:r.tone,children:r.status}),t.jsx("span",{className:"rp-label",children:r.revision})]}),t.jsx(K,{inline:!0,items:[[o("ui.outbound"),t.jsx(n,{...r.outboundTag})],...r.fields]}),t.jsx("div",{className:"rp-cluster",children:r.connectionHref&&t.jsx(U,{appearance:"button",small:!0,href:r.connectionHref,children:o("flow.viewConnection")})}),t.jsxs("div",{className:"rp-list",children:[!r.steps.length&&t.jsx(G,{children:o("ui.empty")}),r.steps.map(e=>t.jsxs("div",{className:"rp-col rp-step",children:[t.jsxs("div",{className:"rp-cluster",children:[t.jsx(F,{children:e.stage}),t.jsx(A,{text:e.observed,className:"rp-label",children:e.elapsed})]}),e.fields?t.jsx(K,{inline:!0,items:e.fields}):t.jsx("pre",{className:"rp-flow-raw rp-code",children:t.jsx("code",{children:e.raw})})]},e.id))]})]})]})]}),t.jsx(we,{dialog:s.rule.dialog})]})}export{Be as Flows}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Flows-Bgp2RBuw.css b/luci-app-honk/root/etc/honk/doona/assets/Flows-Bgp2RBuw.css deleted file mode 100644 index e5370e209..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Flows-Bgp2RBuw.css +++ /dev/null @@ -1 +0,0 @@ -.rp-topology{min-width:0;overflow:hidden}.rp-tree{gap:var(--rp-space-2);overscroll-behavior-x:contain;flex-direction:column;min-width:0;display:flex;overflow-x:auto}.rp-tree-hint{color:var(--rp-subtle);font-size:var(--rp-text-xs);line-height:16px;display:none}@media (width<=600px){.rp-tree-hint{display:block}}.rp-tree-captions{height:16px;position:relative}.rp-tree-captions>.rp-label{text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;position:absolute;top:0}.rp-tree-canvas{position:relative}.rp-tree-links{pointer-events:none;fill:none;stroke:var(--rp-muted);stroke-linecap:round;position:absolute;inset:0;overflow:visible}.rp-tree-links path{opacity:.55;transition:opacity var(--rp-duration) var(--rp-ease)}.rp-tree-links path[data-kind=direct]{stroke:var(--rp-positive)}.rp-tree-links path[data-kind=block]{stroke:var(--rp-negative)}.rp-tree-links path[data-kind=group]{stroke:var(--rp-iris)}.rp-tree-links path[data-kind=node]{stroke:var(--rp-accent)}.rp-tree-links path[data-state=active]{opacity:1}.rp-tree-links path[data-state=dim]{opacity:.1}.rp-tree-tile{box-sizing:border-box;align-items:center;gap:var(--rp-space-2);height:36px;padding:0 var(--rp-space-2h);border-radius:var(--rp-r-md);background:var(--rp-overlay);color:var(--rp-text);font:inherit;font-size:var(--rp-text-sm);text-align:start;cursor:pointer;border:2px solid #0000;line-height:16px;display:flex;position:absolute}.rp-tree-tile.dim{opacity:.35}.rp-tree-tile[data-hovered]{background:var(--rp-hl-med)}.rp-tree-tile[data-selected]{border-color:var(--rp-accent);background:var(--rp-selected)}.rp-tree-tile[data-focus-visible]{outline:var(--rp-focus-width) solid var(--rp-focus-color);outline-offset:calc(-1 * var(--rp-focus-width));border-color:#0000}.rp-tree-tile .l{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.rp-tree-tile[data-stage=rule] .l{font-family:var(--rp-font-mono);font-size:var(--rp-text-xs);font-variant-ligatures:none}.rp-tree-tile .s{font-size:var(--rp-text-xs);color:var(--rp-subtle);margin-inline-start:var(--rp-space-2)}.rp-tree-tile .s.ok{color:var(--rp-positive-text)}.rp-tree-tile .s.warn{color:var(--rp-notice-text)}.rp-tree-tile .s.err{color:var(--rp-negative-text)}.rp-tree-tile .c{font-variant-numeric:tabular-nums;color:var(--rp-subtle);flex:none;font-weight:700}.rp-impact-section{gap:var(--rp-space-2);flex-direction:column;min-width:0;display:flex}.rp-impact{gap:var(--rp-space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.rp-impact.grid{gap:var(--rp-space-2) var(--rp-space-6);grid-template-columns:repeat(auto-fill,minmax(min(100%,176px),1fr));display:grid}.rp-impact>li{align-items:flex-start;gap:var(--rp-space-1);flex-direction:column;min-width:0;display:flex}.rp-impact>li>.rp-cluster{gap:var(--rp-space-2);max-width:100%}.rp-impact>li>.rp-cluster>.rp-note{flex:none} diff --git a/luci-app-honk/root/etc/honk/doona/assets/Flows-CqGEdGAH.js b/luci-app-honk/root/etc/honk/doona/assets/Flows-CqGEdGAH.js new file mode 100644 index 000000000..b632190d8 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Flows-CqGEdGAH.js @@ -0,0 +1 @@ +import{r as e,j as t}from"./vendor-react-64fcanlc.js";import{O as n}from"./OutboundTag-DROnordp.js";import{l as a,i as o,u as s,c as r,R as l,S as i,L as d}from"./ActionGroup-D3mQjUsw.js";import{i as u,ab as c,ao as p,a8 as m,a7 as f,cE as g,cG as w,w as h,cx as b,ae as v,cz as j,cA as x,aF as y,am as k,j as _,aE as M,o as N,as as L,ai as S,C as T,P as C,G as P,J as F,N as O,bZ as R,aS as E,W as H,X as W,b_ as q,cJ as D,cD as A,A as I,K as $,T as G,aZ as J,D as U,bQ as Q,bG as z,az as B,M as K}from"./index-CmbH0woS.js";import{l as V,i as Z,m as X,o as Y,n as ee,h as te}from"./activity-CiEWAlFW.js";import{w as ne}from"./labels-D8xxfRTQ.js";import{c as ae,C as oe}from"./Coverage-P-BXHg4t.js";import{f as se}from"./nav-Y_78QUku.js";import{T as re}from"./Tabs-BzeNgTje.js";import{T as le}from"./Toolbar-B9K5nAyx.js";import{D as ie}from"./Table-Cfbaho6J.js";import{T as de}from"./TimeCell-D0UB-mKs.js";import{a as ue,u as ce,b as pe}from"./flows-BMReQznn.js";import{u as me}from"./outbounds-CUyNhEhE.js";import{u as fe,Q as ge,R as we}from"./useQuickRule-C0zoMd-O.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Tag-fyQjN-Xw.js";import"./Select-BcN72K3H.js";import"./Checkbox-f7Je53QZ.js";import"./Virtualizer-itu1Kg0o.js";import"./DaeCode-DEjXqvav.js";import"./daeTokens-BVtuNnWZ.js";import"./AddCircle-JwHCi_at.js";import"./SearchSelect-CuaWhoLz.js";import"./SearchList-CJ8rQxgu.js";const he=["client","rule","outbound","node"];function be(e,t){if(e.rule_id)return null!==e.rule_generation_id&&e.rule_generation_id===t?e.rule_id:e.rule_id+"\0"+e.rule_expression}function ve(e,t,n,a){switch(t){case"client":{const t=c(e.input?.src??void 0);return{label:t??"unknown",unknown:!t}}case"rule":return e.rule_expression?{label:e.rule_expression,unknown:!1,key:be(e,a)}:{label:"unknown",unknown:!0};case"outbound":return e.outbound?{label:e.outbound,unknown:!1}:{label:"unknown",unknown:!0};case"node":{if(u(e.outbound))return null;const t=e.chain.at(-1)??null;return t?{label:n.get(t)??t,unknown:!1,key:t}:{label:"unknown",unknown:!0}}}}const je=(e,t)=>Z(e,t.unknown?"":t.key??t.label),xe=e=>V(e,he)?.kind,ye=new Map;function ke(e,t,n){const a=xe(t);return a?e.filter(e=>{const o=ve(e,a,ye,n?.generation_id);return null!==o&&je(a,o)===t}):[]}function _e(e,t,n,a){const o=V(e,he);if(!o||""===o.value)return a(null);const{kind:s,value:r}=o;return"rule"===s?r.includes("\0")?r.slice(r.indexOf("\0")+1):t.find(e=>e.rule_id===r)?.expression??r:"node"===s?n.get(r)??r:"client"===s?r:a(r)}function Me(e,t,n,a,o="rule"){const s=(e=>new Map(e.map(e=>[e.id,e.name])))(n),r=new Map(t.map(e=>[e.id,e])),l=new Map(t.map(e=>[e.name,e])),i=new Map(n.map(e=>[e.id,e])),d=new Map,c=new Map,g=new Map,w=new Map,h=(e,t)=>{const n=e+">"+t;let a=w.get(n);return a||w.set(n,a={source:e,target:t,count:0}),a},b=(e,t,n=!1)=>{const a=je("node",{key:e,label:t,unknown:n});let o=g.get(a);if(!o){const s=n?void 0:i.get(e),r=s&&m(s);g.set(a,o={id:a,label:t,count:0,unknown:n||void 0,latency:f(r),unavailable:"unavailable"===r?.state})}return o},v=(e,t=!1)=>{const n=je("outbound",{label:e,unknown:t});let a=c.get(n);if(a)return a;const o=t?void 0:l.get(e),d=t?{groups:[],member:null}:p(e,o?.selection.tcp_member_id?"tcp":"udp",l,r,i),m=d.groups.map(e=>({name:e.name,kind:e.policy.kind,policy:e.policy.native})),f=d.member;return a={id:n,label:e,count:0,unknown:t||void 0,kind:t?"unknown":u(e)?e:m.length?"group":"unknown",groups:m,node:f&&b(f,s.get(f)??f).id},c.set(n,a),a.node&&h(n,a.node),a},j=(e,t,n=!1)=>{let a=d.get(e);return a||d.set(e,a={id:e,label:t,count:0,unknown:n||void 0,outbound:null,must:!1}),a};if("rule"===o)for(const u of a?.rules??[]){const e=j(je("rule",{key:u.rule_id,label:u.expression}),u.expression);e.must=u.must,u.outbound&&(e.outbound=v(u.outbound).id,h(e.id,e.outbound))}const x=[o,"outbound","node"];for(const u of e){let e;for(const t of x){const n=ve(u,t,s,a?.generation_id);if(!n)break;const o="outbound"===t?v(n.label,n.unknown):"node"===t?b(n.key??n.label,n.label,n.unknown):j(je(t,n),n.label,n.unknown);o.count++,e&&h(e.id,o.id).count++,e=o}}for(const u of t)v(u.name);const y=new Set([...d.values()].map(e=>e.outbound)),k=new Set([...c.values()].flatMap(e=>e.groups.slice(1).map(e=>e.name))),_=[...c.values()].filter(e=>e.count||y.has(e.id)||!k.has(e.label)),M=new Set(_.map(e=>e.id)),N=[...w.values()].filter(e=>M.has(e.source)||M.has(e.target)),L=new Set(N.map(e=>e.target));return{by:o,leaves:[...d.values()],outbounds:_,nodes:[...g.values()].filter(e=>L.has(e.id)),links:N}}const Ne=new WeakMap;function Le(e){const t=Ne.get(e);if(t)return t;const n=new Map,a=new Map,o=new Map;for(const l of e.links){for(const[e,t]of[[n,l.source],[a,l.target]]){let n=e.get(t);n||e.set(t,n=[]),n.push(l)}(!o.has(l.source)||o.get(l.source).countnull==e?"—":{key:e?"ui.yes":"ui.no"};function Pe(e,t,n,a,o,s){return{tree:e,state:t?e.leaves.length||e.outbounds.length?"ready":"empty":n?"error":"loading",pinLabel:a?s("flow.viewPinned",{n:o}):null}}const Fe={input:"flow.stage.input",route:"flow.stage.route",dial_mode:"flow.stage.dialMode",dns:"nav.dns",outbound:"ui.outbound",connection:"flow.stage.connection",datapath:"ov.datapath",reroute:"flow.stage.reroute"},Oe={complete:"flow.status.complete",partial:"flow.status.partial",disabled:"flow.status.disabled"};function Re(e,t,n,a){if(!e)return null;const o=y[n];return{title:e.input.domain||e.input.dst||e.id,status:v(Oe,e.trace.status,t),tone:"complete"===e.trace.status?void 0:"warn",revision:t("flow.revision",{n:e.revision}),fields:[[t("ui.state"),v(b,e.state,t)],...a?[[t("nodes.node"),a.path??a.node]]:[],...a?.expression?[[t("ui.rule"),a.expression]]:[],...e.trace.missing.length?[[t("flow.missing"),M(n,e.trace.missing.map(e=>v(Se,e,t)))]]:[]],connectionHref:e.connection_id?_("connections",{id:e.connection_id}):null,steps:[...e.trace.steps].sort((e,t)=>e.seq-t.seq).map(e=>{const n=function(e){const t=e=>null==e?"—":"object"==typeof e?JSON.stringify(e):String(e);switch(e.stage){case"input":return Object.entries(e.data.values).filter(([,e])=>null!=e&&""!==e).map(([e,n])=>{const a=Te[e];return[void 0!==a&&a.includes(".")?a:{key:"flow.f.input",params:{name:a??e}},"string"!=typeof n||"ingress"!==e&&"domain_source"!==e?t(n):ne(n)]});case"route":return[["conn.chain",e.data.chain],["flow.f.plane",ne(e.data.plane)],["ui.rule",e.data.rules.filter(e=>"matched"===e.result).map(e=>e.expression??e.rule_id).join(", ")||"—"],["ui.outbound",t(e.data.outbound)],["flow.f.must",Ce(e.data.must)]];case"dial_mode":return[["flow.f.dialTarget",e.data.configured+" → "+e.data.effective_target],["flow.f.verification",ne(e.data.verification)]];case"dns":return[["ui.name",e.data.name],["ui.source",ne(e.data.source)],["ui.cache",ne(e.data.cache)],["ui.upstream",t(e.data.upstream)],["flow.f.selectedIp",t(e.data.selected_ip)]];case"outbound":return[["ui.outbound",t(e.data.routed_outbound)+" → "+t(e.data.effective_outbound)],["flow.f.selectionPath",e.data.selection_path.map(e=>e.group_id+" → "+t(e.member_name??e.member_id)).join(" / ")||"—"],["flow.f.leafNode",t(e.data.leaf_node_id)],["ui.target",t(e.data.target)],["ui.state",ne(e.data.status)]];case"connection":return[["ui.state",Object.hasOwn(b,e.data.state)?{key:b[e.data.state]}:e.data.state],["flow.f.milestone",ne(e.data.milestone)],["flow.f.reason",ne(e.data.reason)]];case"datapath":return[["flow.f.plane",ne(e.data.plane)],["flow.f.action",ne(e.data.action)],["flow.f.reason",ne(e.data.reason)]];case"reroute":return[["flow.f.performed",Ce(e.data.performed)],["flow.f.reason",ne(e.data.reason)]];default:return null}}(e);return{id:e.seq,stage:v(Fe,e.stage,t),observed:k(e.observed_at,o),elapsed:null==e.elapsed_us?"—":t("ui.microseconds",{n:e.elapsed_us}),fields:n?.map(([e,n])=>["string"==typeof e?t(e):t(e.key,e.params),"string"==typeof n?n:t(n.key,n.params)])??null,raw:n?"":JSON.stringify(e.data,null,2)}})}}const Ee=30,He=[5,4,3],We={rule:0,client:0,outbound:1,node:2};function qe(e,t,n,o){const s=null===t?void 0:Math.max(t,720),r=((s??0)-112)/He.reduce((e,t)=>e+t),l=e=>{const t=We[e];return{left:He.slice(0,t).reduce((e,t)=>e+t*r+56,0),width:He[t]*r}},i=function(e){const t=new Map;let n=0;const a=new Map,{parents:o}=Le(e);for(const l of[...e.leaves,...e.outbounds]){const e=o.get(l.id);if(e){let t=a.get(e);t||a.set(e,t=[]),t.push(l.id)}}const s=e=>{const o=a.get(e)??[];if(o.length){for(const e of o)s(e);t.set(e,(t.get(o[0])+t.get(o[o.length-1]))/2)}else t.set(e,n++)},r=new Set;for(const l of e.outbounds)r.add(o.get(l.id)??l.id);for(const l of e.nodes)r.add(l.id);for(const l of e.leaves)o.has(l.id)||r.add(l.id);for(const l of r)s(l);return{rows:n,at:t}}(e),d=function(e,t,n){const o=(e,n)=>e.unknown?t("ui.unknown"):n,s=[...e.leaves.map(t=>({id:t.id,stage:e.by,name:o(t,t.label),badge:t.must?"must":void 0,notes:[],count:t.count})),...e.outbounds.map(e=>({id:e.id,stage:"outbound",name:o(e,N(e.label,t)),notes:[...e.groups.slice(1).map(e=>({text:"› "+e.name})),...e.groups.slice(-1).map(e=>({text:X({kind:e.kind,native:e.policy},t).label})),..."group"!==e.kind||e.node?[]:[{text:t("flow.treeNoNode")}]],count:e.count})),...e.nodes.map(e=>({id:e.id,stage:"node",name:o(e,e.label),notes:null!=e.latency?[{text:L(e.latency,t),tone:a(e.latency)}]:e.unavailable?[{text:t("ui.unavailable"),tone:"err"}]:[],count:e.count}))],r=new Map(s.map(e=>[e.id,e.name])),{outgoing:l,incoming:i}=Le(e);return s.map(e=>{const a=(l.get(e.id)??[]).map(e=>r.get(e.target)),o="node"===e.stage?(i.get(e.id)??[]).map(e=>r.get(e.source)):[],s=[e.name,...e.badge?[e.badge]:[],...e.notes.map(e=>e.text),t("flow.treeFlows",{n:e.count})];return o.length&&s.push(t("flow.treeFrom",{names:M(n,o)})),a.length&&s.push(t("flow.treeTo",{names:M(n,a)})),{...e,countText:S(e.count,y[n]),label:s.join(t("ui.separator"))}})}(e,n,o).map(e=>({view:e,style:{top:44*i.at.get(e.id),...l(e.stage)}})),u=new Map(e.outbounds.map(e=>[e.id,e])),c=e.links.flatMap(t=>{if(!i.at.has(t.source)||!i.at.has(t.target))return[];const n="outbound"===xe(t.source)?"outbound":e.by,a=l(n),o=a.left+a.width,s=l("outbound"===n?"node":"outbound").left,r=44*i.at.get(t.source)+18,d=44*i.at.get(t.target)+18,c=(o+s)/2;return[{link:t,id:t.source+">"+t.target,path:`M${o},${r} C${c},${r} ${c},${d} ${s},${d}`,width:Math.min(8,1.5+1.25*Math.log2(1+t.count)),dash:t.count?void 0:"4 4",kind:"outbound"===n?"node":u.get(t.target)?.kind??"group"}]});return{width:s,height:44*i.rows-8,captions:[{stage:e.by,label:n("rule"===e.by?"ui.rule":"ui.device"),style:l(e.by)},{stage:"outbound",label:n("ui.outbound"),style:l("outbound")},{stage:"node",label:n("nodes.node"),style:l("node")}],placed:d,geometry:c}}function De(t,n,a){const o=T(),s=C(),[r,l]=e.useState(Ee),[i,d]=e.useState(null),[u,c]=P(),p=e.useMemo(()=>Le(t),[t]),m=e.useMemo(()=>function(e,t){return e.leaves.length<=t?e:{...e,leaves:e.leaves.slice(0,t)}}(t,r),[t,r]),f=e.useMemo(()=>qe(m,c,o,s),[m,c,o,s]),g=e.useMemo(()=>new Set(f.placed.map(e=>e.view.id)),[f.placed]),w=e.useMemo(()=>new Set([...t.leaves,...t.outbounds,...t.nodes].map(e=>e.id)),[t]),h=i&&g.has(i)?i:n&&w.has(n)?n:null,b=e.useMemo(()=>h?function(e,t){const n=new Set([t]),a=new Set;for(const[o,s]of[[e.outgoing,"target"],[e.incoming,"source"]]){const e=[t];for(const t of e)for(const r of o.get(t)??[])a.has(r)||(a.add(r),n.has(r[s])||(n.add(r[s]),e.push(r[s])))}return{items:n,edges:a}}(p,h):null,[p,h]);e.useEffect(()=>{if(!n)return;const e=e=>{"Escape"===e.key&&a(null)};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[n,a]);const v=e.useRef(n);e.useLayoutEffect(()=>{v.current=n},[n]);const j=e.useCallback(e=>a(v.current===e?null:e),[a]);return{...f,ref:u,ready:void 0!==f.width,active:b,pinned:n,pin:j,hover:d,more:t.leaves.length>r?o("flow.treeShowMore",{n:Math.min(Ee,t.leaves.length-r)}):null,fewer:r>Ee?o("flow.treeFewer",{n:Ee}):null,showMore:()=>l(e=>Math.min(t.leaves.length,e+Ee)),showFewer:()=>l(Ee)}}const Ae=e.memo(function({view:e,style:n,dim:a,selected:s,pin:r,hover:l}){return t.jsxs(o,{"aria-label":e.label,className:R("rp-tree-tile",a&&"dim"),"data-id":e.id,"data-stage":e.stage,style:n,isSelected:s,onChange:()=>r(e.id),onHoverStart:()=>l(e.id),onHoverEnd:()=>l(null),onFocus:()=>l(e.id),onBlur:()=>l(null),children:[t.jsxs("span",{className:"l",children:["node"===e.stage?t.jsx("b",{children:t.jsx(O,{name:e.name})}):"rule"===e.stage||"client"===e.stage?e.name:t.jsx("b",{children:e.name}),e.notes.map((e,n)=>t.jsx("span",{className:R("s",e.tone),children:e.text},n))]}),e.badge&&t.jsx(E,{children:e.badge}),t.jsx("span",{className:"c",children:e.countText})]})});function Ie({tree:e,pinned:n,onPin:a}){const{ref:o,...s}=De(e,n,a);return t.jsxs("div",{className:"rp-tree",ref:o,children:[t.jsx("div",{className:"rp-tree-captions",style:{width:s.width},children:s.captions.map(e=>t.jsx("span",{className:"rp-label",style:e.style,children:e.label},e.stage))}),t.jsxs("div",{className:"rp-tree-canvas",style:{height:s.height,width:s.width},children:[s.ready&&t.jsx("svg",{className:"rp-tree-links",width:s.width,height:s.height,"aria-hidden":!0,children:s.geometry.map(e=>t.jsx("path",{d:e.path,strokeWidth:e.width,"data-kind":e.kind,"data-state":s.active?s.active.edges.has(e.link)?"active":"dim":void 0,strokeDasharray:e.dash},e.id))}),s.ready&&s.placed.map(({view:e,style:n})=>t.jsx(Ae,{view:e,style:n,dim:!!s.active&&!s.active.items.has(e.id),selected:s.pinned===e.id,pin:s.pin,hover:s.hover},e.id))]}),s.more&&t.jsx(F,{small:!0,quiet:!0,onPress:s.showMore,children:s.more}),s.fewer&&t.jsx(F,{small:!0,quiet:!0,onPress:s.showFewer,children:s.fewer})]})}function $e({go:t,query:n}){const a=T(),o=C(),r=q(D),l=e.useMemo(()=>new URLSearchParams(n),[n]),i=l.get("network"),d="tcp"===i||"udp"===i?i:"all",p=l.get("state")??"",m=Object.hasOwn(b,p)?p:"all",f=l.get("connection_id")??void 0,g=H().data?.resources,w=ue({connection_id:f,network:d,state:m},W(g,"flows",{whileLoading:!0})),y=W(g,"rules",{whileLoading:!1}),k=ce(y),_=me(),M=l.get("id"),L=pe(M),S=l.get("path"),P=e.useMemo(()=>{const e=w.data?.flows??[];return S?ke(e,S,k.data):e},[w.data,S,k.data]),F=k.data?.generation_id,O=e.useMemo(()=>function(e,t,n,a,o,s){return{rows:e.map(e=>({id:e.id,target:e.input?.domain||e.input?.dst||e.id,node:x(e,o,a),nodeName:!u(e.outbound)&&e.chain.length>0,path:j(e,o,a),expression:e.rule_expression,ruleId:null!==e.rule_generation_id&&e.rule_generation_id===n?e.rule_id:null,recomputed:"recomputed"===e.rule_source,network:e.network.toUpperCase(),state:v(b,e.state,o),startedAt:e.started_at,seed:{domain:e.input?.domain??null,dip:c(e.input?.dst??void 0)??null,sip:c(e.input?.src??void 0)??null,outbound:e.outbound,matched:e.rule_id&&"unknown"!==e.rule_source?{id:e.rule_id,expression:e.rule_expression,generation:e.rule_generation_id}:null}})),coverage:t?ae(t,o,s):null,stateOptions:[{id:"all",label:o("flow.allStates")},...Object.entries(b).map(([e,t])=>({id:e,label:o(t)}))]}}(P,w.data,F,_,a,o),[P,w.data,F,_,a,o]),R=O.rows.find(e=>e.id===M),E=s(W(g,"groups",{whileLoading:!1})).data,A=e.useMemo(()=>{const e=Re(L.data??void 0,a,o,R);return e&&{...e,outboundTag:Y(L.data.outbound,E,a)}},[L.data,a,o,R,E]),I=fe(t);return{...O,detail:A,rule:{canAdd:I.canAdd,open:I.open,label:e=>a("conn.addRuleFor",{target:e}),noTarget:a("flow.ruleNoTarget"),dialog:I.dialog},network:d,setNetwork:e=>t("flows",h(n,{network:"all"===e?null:e})),state:m,setState:e=>t("flows",h(n,{state:"all"===e?null:e})),wide:r,id:M,rulesListed:y,error:w.error,retry:w.refetch,loading:w.loading&&!w.data,panelOpen:!!M&&(!!L.data||L.loading||!!L.error),panelTitle:A?.title??M??"",detailError:L.error,detailRetry:L.refetch,detailLoading:!L.data&&L.loading,select:e=>t("flows",h(n,{id:e}),{replace:null!==M}),pinLabel:S?a("flow.mapFilter",{label:_e(S,k.data?.rules??[],_,e=>null===e?a("ui.unknown"):N(e,a))}):null,clearPin:()=>t("flows",h(n,{path:null})),connectionLabel:f?a("flow.connectionFilter",{connectionId:f}):null,clearConnection:()=>t("flows",h(n,{connection_id:null})),recordingHref:g?.runtime_settings.available?ee:null}}function Ge({go:e,query:t}){const n=T(),a=H(),o=function(e,t,n){const a=se(e).map(e=>({id:e.id,label:n(e.titleKey)})),o=a[0]?.id??"map";return{tabs:a,tab:g(t,a.map(e=>e.id),o),fallback:e?o:null}}(a.data?.resources,t,n);return A(a.data?.resources),{...o,loading:a.loading&&!a.data,error:a.error,retry:a.refetch,changeTab:n=>e("flows",function(e,t,n){return w(h(e,"map"===t?{id:null,connection_id:null}:{by:null}),t,n)}(t,n,o.fallback))}}function Je(e){const n=T(),a=Ge(e),o={map:t.jsx(Ue,{...e}),records:t.jsx(Qe,{...e})};return a.loading?t.jsx(I,{}):a.error?t.jsx($,{error:a.error,onRetry:a.retry}):t.jsx("div",{className:"rp-page",children:t.jsx(re,{page:!0,label:n("nav.flows"),items:a.tabs.map(e=>({...e,content:o[e.id]})),value:a.tab,onChange:a.changeTab})})}function Ue(n){const a=T(),o=function({go:t,query:n}){const a=T(),o=new URLSearchParams(n),l=H().data?.resources,i=ue({},W(l,"flows",{whileLoading:!0})),d=s(W(l,"groups",{whileLoading:!1})),u=r(W(l,"nodes",{whileLoading:!1})),c=ce(W(l,"rules",{whileLoading:!1})),p="client"===o.get("by")?"client":"rule",m=e.useMemo(()=>Me(i.data?.flows??[],d.data??[],u.data??[],c.data,p),[i.data,d.data,u.data,c.data,p]),f=o.get("path"),g=e.useRef(n);e.useLayoutEffect(()=>{g.current=n},[n]);const w=e.useCallback(e=>t("flows",h(g.current,{path:e})),[t]),b=e.useMemo(()=>f?ke(i.data?.flows??[],f,c.data).length:0,[i.data,f,c.data]);return{...Pe(m,[i,c,d,u].every(e=>void 0!==e.data||e.error||!e.loading)&&!!(i.data||c.data||d.data),!!i.error,f,b,a),by:p,pinned:f,error:i.error??d.error??u.error??c.error,retry:()=>{i.refetch(),d.refetch(),u.refetch(),c.refetch()},pin:w,changeBy:e=>t("flows",h(n,{by:"client"===e?"client":null,path:null})),viewPinned:()=>t("flows",h(n,{tab:"records"}))}}(n);return t.jsxs("section",{className:"rp-col","aria-label":a("flow.map"),children:[t.jsxs(le,{page:!0,children:[o.pinLabel?t.jsx(F,{onPress:o.viewPinned,children:o.pinLabel}):t.jsx("span",{className:"rp-label",children:a("flow.mapFilterHint")}),t.jsx("span",{className:"rp-grow"}),t.jsx(F,{quiet:!0,isDisabled:!o.pinLabel,onPress:()=>o.pin(null),children:a("flow.clearMapFilter")})]}),t.jsx($,{error:o.error,onRetry:o.retry}),t.jsxs(K,{title:a("flow.topology"),note:a("flow.topologyNote"),className:"rp-topology",aside:t.jsx(i,{label:a("flow.topology"),value:o.by,onChange:o.changeBy,items:[["rule",a("flow.byRule")],["client",a("conn.byClient")]]}),children:["loading"===o.state&&t.jsx(I,{}),"empty"===o.state&&t.jsx(B,{children:a("flow.mapEmpty")}),"ready"===o.state&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"rp-tree-hint",children:a("flow.treePanHint")}),t.jsx(Ie,{tree:o.tree,pinned:o.pinned,onPin:o.pin})]})]})]})}function Qe(a){const o=T(),s=$e(a),r=s.detail,u=e.useRef(s.rule);e.useLayoutEffect(()=>{u.current=s.rule});const c=e.useMemo(()=>[{id:"target",label:o("ui.target"),minWidth:128,grow:2,isRowHeader:!0,render:e=>t.jsx(G,{children:e.target})},{id:"node",label:o("nodes.node"),minWidth:96,drop:2,render:e=>e.nodeName?t.jsx(O,{name:e.node,className:"rp-chain",text:e.path??void 0}):t.jsx(G,{className:"rp-chain",text:e.path??void 0,children:e.node})},{id:"rule",label:o("ui.rule"),minWidth:152,grow:2,drop:1,render:e=>t.jsxs("span",{className:"rp-rule",children:[t.jsx(l,{expression:e.expression,href:te(e.ruleId,s.rulesListed)}),e.recomputed&&t.jsx(E,{children:o("conn.recomputed")})]})},{id:"network",label:o("ui.protocol"),minWidth:64,grow:0,drop:3,render:e=>e.network},{id:"state",label:o("ui.state"),minWidth:112,grow:0,drop:5,render:e=>e.state},{id:"started",label:o("ui.started"),minWidth:140,grow:0,drop:4,render:e=>t.jsx(de,{at:e.startedAt})},{id:"actions",actions:!0,label:o("ui.actions"),minWidth:88,grow:0,render:e=>{const n=u.current,a=!n.canAdd(e.seed);return t.jsx(ge,{label:n.label(e.target),disabled:a,tip:n.noTarget,onPress:()=>u.current.open(e.seed)})}}],[o,s.rulesListed]);return t.jsxs(t.Fragment,{children:[t.jsx($,{error:s.error,onRetry:s.retry}),t.jsxs(le,{page:!0,children:[t.jsx(i,{label:o("ui.network"),value:s.network,onChange:s.setNetwork,items:[["all",o("ui.all")],["tcp",o("ui.tcp")],["udp",o("ui.udp")]]}),t.jsx(d,{label:o("ui.state"),side:!0,value:s.state,onChange:s.setState,items:s.stateOptions}),s.pinLabel&&t.jsxs(F,{label:o("ui.valuePair",{label:o("flow.clearMapFilter"),value:s.pinLabel}),onPress:s.clearPin,children:[s.pinLabel,t.jsx(J,{})]}),s.connectionLabel&&t.jsxs(F,{label:o("ui.valuePair",{label:o("flow.clearConnectionFilter"),value:s.connectionLabel}),onPress:s.clearConnection,children:[s.connectionLabel,t.jsx(J,{})]}),s.coverage&&t.jsx(oe,{view:s.coverage}),s.recordingHref&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"rp-grow"}),t.jsx(U,{appearance:"button",quiet:!0,href:s.recordingHref,children:o("ui.recordingSettings")})]})]}),t.jsxs("div",{className:"rp-with-panel","data-open":s.panelOpen?"":void 0,children:[t.jsx(ie,{label:o("flow.records"),rowDetail:!0,loading:s.loading,rows:s.rows,height:442,selected:s.id,onSelect:s.select,selectOnFocus:s.wide,empty:o("flow.empty"),cols:c}),t.jsxs(Q,{open:s.panelOpen,title:s.panelTitle,onClose:()=>s.select(null),children:[t.jsx($,{error:s.detailError,onRetry:s.detailRetry}),s.detailLoading&&t.jsx(I,{children:o("flow.detailLoading")}),r&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"rp-cluster",children:[t.jsx(E,{tone:r.tone,children:r.status}),t.jsx("span",{className:"rp-label",children:r.revision})]}),t.jsx(z,{inline:!0,items:[[o("ui.outbound"),t.jsx(n,{...r.outboundTag})],...r.fields]}),t.jsx("div",{className:"rp-cluster",children:r.connectionHref&&t.jsx(U,{appearance:"button",small:!0,href:r.connectionHref,children:o("flow.viewConnection")})}),t.jsxs("div",{className:"rp-list",children:[!r.steps.length&&t.jsx(B,{children:o("ui.empty")}),r.steps.map(e=>t.jsxs("div",{className:"rp-col rp-step",children:[t.jsxs("div",{className:"rp-cluster",children:[t.jsx(E,{children:e.stage}),t.jsx(G,{text:e.observed,className:"rp-label",children:e.elapsed})]}),e.fields?t.jsx(z,{inline:!0,items:e.fields}):t.jsx("pre",{className:"rp-flow-raw rp-code",children:t.jsx("code",{children:e.raw})})]},e.id))]})]})]})]}),t.jsx(we,{dialog:s.rule.dialog})]})}export{Je as Flows}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/GridList-BUQihjaB.js b/luci-app-honk/root/etc/honk/doona/assets/GridList-BUQihjaB.js deleted file mode 100644 index 4a5c893ab..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/GridList-BUQihjaB.js +++ /dev/null @@ -1 +0,0 @@ -import{dP as e,ct as t,dQ as r,cu as o,bf as a,dR as i,dS as l,dT as n,dU as s,dV as d,cg as c,dW as u,dX as p,dY as g,dZ as y,cp as f,cc as v,d_ as b,cb as h,d$ as m,e0 as k,e1 as D,e2 as w,e3 as E,e4 as P,e5 as M,e6 as x,cB as S,e7 as A,e8 as K,e9 as C,ea as T,eb as B,ec as N,ed as I,ee as F,ef as R,eg as V,eh as L,ei as H,ej as U,ek as O,el as z,em as $,en as j,eo as G}from"./index-BgFj_VXE.js";import{$ as W,a as _,b as q,c as Q,d as X,e as Y}from"./useGridSelectionCheckbox-BxnCShqN.js";import{d as Z,e as J,f as ee,g as te,h as re,i as oe,j as ae}from"./Select-CkiGmyVC.js";import{r as ie,$ as le}from"./vendor-react-64fcanlc.js";const ne=new WeakMap;function se(e,t){let{id:r}=ne.get(e)??{};if(!r)throw new Error("Unknown list");return`${r}-${function(e){return"string"==typeof e?e.replace(/\s*/g,""):""+e}(t)}`}const de={ltr:"ArrowRight",rtl:"ArrowLeft"},ce={ltr:"ArrowLeft",rtl:"ArrowRight"};function ue(e,t,r){let{node:m,isVirtualized:k,focusMode:D="row",allowsArrowNavigation:w}=e,{direction:E}=a(),{onAction:P,linkBehavior:M,keyboardNavigationBehavior:x,shouldSelectOnPressUp:S}=ne.get(t),A=i(),K=ie.useRef(null),C=()=>{if(null!==r.current){if("child"===D){if(d(r.current)&&r.current!==c(u(r.current)))return;let e=p(r.current,{tabbable:!0}).firstChild();if(e)return g(e),void y(e,{containingElement:f(e)})}(null!=K.current&&m.key!==K.current||!d(r.current))&&g(r.current)}},T={},B=e.hasChildItems,N=t.selectionManager.isLink(m.key);if(null!=m&&"expandedKeys"in t){let e=t.collection.getChildren?.(m.key);B=B||[...e??[]].length>1,null==P&&!N&&"none"===t.selectionManager.selectionMode&&B&&(P=()=>t.toggleKey(m.key));let r=B?t.expandedKeys.has(m.key):void 0,o=1,a=m.index;if(m.level>=0&&null!=m?.parentKey){let e=t.collection.getItem(m.parentKey);if(e){let r=function(e,t){let r=t.getChildren?.(e.key),o=r?Array.from(r):[],a=o.length>0?o[0]:null,i=[];for(;a;)i.push(a),a=null!=a.nextKey?t.getItem(a.nextKey):null;return i}(e,t.collection);o=[...r].filter(e=>"item"===e.type).length,a>0&&"item"!==r[0].type&&(a-=1)}}else o=[...t.collection].filter(e=>0===e.level&&"item"===e.type).length;T={"aria-expanded":r,"aria-level":m.level+1,"aria-posinset":a+1,"aria-setsize":o}}let{itemProps:I,...F}=l({selectionManager:t.selectionManager,key:m.key,ref:r,isVirtualized:k,shouldSelectOnPressUp:e.shouldSelectOnPressUp||S,onAction:P||m.props?.onAction?n(m.props?.onAction,P?()=>P(m.key):void 0):void 0,focus:C,linkBehavior:M}),R=s(m.props),V=F.hasAction?R:{},L=o(I,V,{role:"row",onKeyDownCapture:"arrow"===x||w?e=>{let o=c(u(r.current));if(!h(e.currentTarget,v(e))||!r.current||!o)return;let a=p(r.current);if(a.currentNode=o,!pe(e,t,m,B,E,o,r.current,w))switch(e.key){case"ArrowLeft":if("arrow"===x){let t="rtl"===E?a.nextNode():a.previousNode();if(t)e.preventDefault(),e.stopPropagation(),g(t),y(t,{containingElement:f(r.current)});else if(e.preventDefault(),e.stopPropagation(),"rtl"===E)g(r.current),y(r.current,{containingElement:f(r.current)});else{a.currentNode=r.current;let e=ge(a);e&&(g(e),y(e,{containingElement:f(r.current)}))}}break;case"ArrowRight":if("arrow"===x){let t="rtl"===E?a.previousNode():a.nextNode();if(t)e.preventDefault(),e.stopPropagation(),g(t),y(t,{containingElement:f(r.current)});else if(e.preventDefault(),e.stopPropagation(),"ltr"===E)g(r.current),y(r.current,{containingElement:f(r.current)});else{a.currentNode=r.current;let e=ge(a);e&&(g(e),y(e,{containingElement:f(r.current)}))}}break;case"ArrowUp":case"ArrowDown":!e.altKey&&h(r.current,v(e))&&(e.stopPropagation(),e.preventDefault(),r.current.parentElement?.dispatchEvent(new KeyboardEvent(e.nativeEvent.type,e.nativeEvent)))}}:void 0,onFocus:e=>{K.current=m.key,v(e)===r.current?"child"===D&&e.relatedTarget&&h(r.current,e.relatedTarget)||requestAnimationFrame(()=>{"child"===D&&c(u(r.current))===r.current&&C()}):b()||t.selectionManager.setFocusedKey(m.key)},"aria-label":m["aria-label"]||m.textValue||void 0,"aria-selected":t.selectionManager.canSelectItem(m.key)?t.selectionManager.isSelected(m.key):void 0,"aria-disabled":t.selectionManager.isDisabled(m.key)||void 0,"aria-labelledby":A&&(m["aria-label"]||m.textValue)?`${se(t,m.key)} ${A}`:void 0,id:se(t,m.key)});"child"===D&&w&&"tab"===x&&(L.tabIndex=-1);let H=L.onKeyDown;if(L.onKeyDown=e=>{(e=>{let o=c(u(r.current));if(h(e.currentTarget,v(e))&&r.current&&o){if("tab"===x){if(v(e)!==r.current&&"Tab"!==e.key)return void e.stopPropagation();if(pe(e,t,m,B,E,o,r.current,w))return}if("Tab"===e.key&&"tab"===x){let t=p(r.current,{tabbable:!0});t.currentNode=o,(e.shiftKey?t.previousNode():t.nextNode())&&e.stopPropagation()}}})(e),e.isPropagationStopped()||H?.(e)},k){let{collection:e}=t,r=[...e];L["aria-rowindex"]=r.find(e=>"section"===e.type)?[...e.getKeys()].filter(t=>"section"!==e.getItem(t)?.type).findIndex(e=>e===m.key)+1:m.index+1}return{rowProps:{...o(L,T)},gridCellProps:{role:"gridcell","aria-colindex":1},descriptionProps:{id:A},...F}}function pe(e,t,r,o,a,i,l,n){if(!("expandedKeys"in t)||!n&&i!==l)return!1;if(e.key===de[a]&&t.selectionManager.focusedKey===r.key&&o&&!t.expandedKeys.has(r.key))return t.toggleKey(r.key),e.stopPropagation(),!0;if(e.key===ce[a]&&t.selectionManager.focusedKey===r.key){if(o&&t.expandedKeys.has(r.key))return t.toggleKey(r.key),e.stopPropagation(),!0;if(!t.expandedKeys.has(r.key)&&r.parentKey&&"item"===t.collection.getItem(r.parentKey)?.type)return t.selectionManager.setFocusedKey(r.parentKey),e.stopPropagation(),!0}return!1}function ge(e){let t=null,r=null;do{r=e.lastChild(),r&&(t=r)}while(r);return t}const ye=ie.createContext(null),fe=ie.forwardRef(function(e,t){return[e,t]=m(e,t,ye),le.createElement(k,{content:le.createElement(D,e)},r=>le.createElement(ve,{props:e,collection:r,gridListRef:t}))});function ve({props:i,collection:l,gridListRef:n}){[i,n]=m(i,n,F);let s,d,c,{shouldUseVirtualFocus:u,filter:p,disallowTypeAhead:g,UNSTABLE_focusOnEntry:y,...f}=i,{dragAndDropHooks:v,keyboardNavigationBehavior:b="arrow",layout:h="stack",orientation:k="vertical"}=i,{CollectionRoot:D,isVirtualized:w,layoutDelegate:E,dropTargetDelegate:P}=ie.useContext(M),x=ee({...f,collection:l,children:void 0,layoutDelegate:E}),A=te(x,p),B=H({usage:"search",sensitivity:"base"}),{disabledBehavior:N,disabledKeys:I}=A.selectionManager,{direction:R}=a(),V=ie.useMemo(()=>new U({collection:A.collection,collator:B,ref:n,disabledKeys:I,disabledBehavior:N,layoutDelegate:E,layout:h,orientation:k,direction:R}),[A.collection,n,h,k,I,N,E,B,R]),{gridProps:L}=function(a,i,l){let{isVirtualized:n,keyboardDelegate:s,layoutDelegate:d,onAction:c,disallowTypeAhead:u,linkBehavior:p="action",keyboardNavigationBehavior:g="arrow",escapeKeyBehavior:y="clearSelection",shouldSelectOnPressUp:f}=a;a["aria-label"]||a["aria-labelledby"]||console.warn("An aria-label or aria-labelledby prop is required for accessibility.");let{listProps:v}=e({selectionManager:i.selectionManager,collection:i.collection,disabledKeys:i.disabledKeys,ref:l,keyboardDelegate:s,layoutDelegate:d,isVirtualized:n,selectOnFocus:"replace"===i.selectionManager.selectionBehavior,shouldFocusWrap:a.shouldFocusWrap,linkBehavior:p,disallowTypeAhead:u,autoFocus:a.autoFocus,escapeKeyBehavior:y,UNSTABLE_focusOnEntry:a.UNSTABLE_focusOnEntry}),b=t(a.id);ne.set(i,{id:b,onAction:c,linkBehavior:p,keyboardNavigationBehavior:g,shouldSelectOnPressUp:f});let h=W({selectionManager:i.selectionManager,hasItemActions:!!c}),m=_(l,{isDisabled:0!==i.collection.size}),k=r(a,{labelable:!0}),D=o(k,{role:"grid",id:b,"aria-multiselectable":"multiple"===i.selectionManager.selectionMode?"true":void 0},0===i.collection.size?{tabIndex:m?-1:0}:v,h);return n&&(D["aria-rowcount"]=i.collection.size,D["aria-colcount"]=1),q({},i),{gridProps:D}}({...f,keyboardDelegate:V,keyboardNavigationBehavior:"grid"===h?"tab":b,isVirtualized:w,shouldSelectOnPressUp:i.shouldSelectOnPressUp,disallowTypeAhead:g,UNSTABLE_focusOnEntry:y},A,n),$=A.selectionManager,j=!!v?.useDraggableCollectionState,G=!!v?.useDroppableCollectionState;ie.useRef(j),ie.useRef(G),ie.useEffect(()=>{},[j,G]);let Q=!1,X=null,Y=ie.useRef(null);if(j&&v){s=v.useDraggableCollectionState({collection:A.collection,selectionManager:$,preview:v.renderDragPreview?Y:void 0}),v.useDraggableCollection({},s,n);let e=v.DragPreview;X=v.renderDragPreview?le.createElement(e,{ref:Y},v.renderDragPreview):null}if(G&&v){d=v.useDroppableCollectionState({collection:A.collection,selectionManager:$});let e=v.dropTargetDelegate||P||new v.ListDropTargetDelegate(l,n,{layout:h,direction:R,orientation:k});c=v.useDroppableCollection({keyboardDelegate:V,dropTargetDelegate:e},d,n),Q=d.isDropTarget({type:"root"})}let{focusProps:se,isFocused:de,isFocusVisible:ce}=S(),ue=0===A.collection.size,pe={isDropTarget:Q,orientation:k,isEmpty:ue,isFocused:de,isFocusVisible:ce,layout:h,state:A},ge=K({...i,children:void 0,defaultClassName:"react-aria-GridList",values:pe}),ye=null;if(ue&&i.renderEmptyState){let e=i.renderEmptyState(pe);ye=le.createElement("div",{role:"row","aria-rowindex":1,style:{display:"contents"}},le.createElement("div",{role:"gridcell",style:{display:"contents"}},e))}let fe=r(i,{global:!0});return le.createElement(O,null,le.createElement(C.div,{...o(fe,ge,L,se,c?.collectionProps,null),ref:n,slot:i.slot||void 0,onScroll:i.onScroll,"data-drop-target":Q||void 0,"data-empty":ue||void 0,"data-focused":de||void 0,"data-focus-visible":ce||void 0,"data-layout":h,"data-orientation":k},le.createElement(T,{values:[[Z,A],[J,{dragAndDropHooks:v,dragState:s,dropState:d}],[re,{render:he}]]},G&&le.createElement(De,null),le.createElement(z,null,le.createElement(D,{collection:A.collection,scrollRef:n,persistedKeys:ae($,v,d),renderDropIndicator:oe(v,d)}))),ye,X))}const be=w(E,function(e,t,a){let i=ie.useContext(Z),{dragAndDropHooks:l,dragState:n,dropState:s}=ie.useContext(J),d=P(t),{isVirtualized:c}=ie.useContext(M),u=n&&!(n.isDisabled||n.selectionManager.isDisabled(a.key)),{rowProps:p,gridCellProps:g,descriptionProps:y,...f}=ue({node:a,shouldSelectOnPressUp:!!n,isVirtualized:c,focusMode:e.focusMode,allowsArrowNavigation:e.allowsArrowNavigation},i,d),{hoverProps:v,isHovered:b}=x({isDisabled:!f.allowsSelection&&!f.hasAction&&!u,onHoverStart:a.props.onHoverStart,onHoverChange:a.props.onHoverChange,onHoverEnd:a.props.onHoverEnd}),{isFocusVisible:h,focusProps:m}=S(),{isFocusVisible:k,focusProps:D}=S({within:!0}),{checkboxProps:w}=function(e,t){let{key:r}=e;const{checkboxProps:o}=Q(e,t);return{checkboxProps:{...o,"aria-labelledby":`${o.id} ${se(t,r)}`}}}({key:a.key},i),E="all"===i.selectionManager.disabledBehavior&&f.isDisabled?{isDisabled:!0}:{},H=null;n&&l&&(H=l.useDraggableItem({key:a.key,hasDragButton:!0},n));let U=null,O=ie.useRef(null),{visuallyHiddenProps:z}=A();s&&l&&(U=l.useDropIndicator({target:{type:"item",key:a.key,dropPosition:"on"}},s,O));let $=n&&n.isDragging(a.key),j=K({...e,id:void 0,children:a.rendered,defaultClassName:"react-aria-GridListItem",values:{...f,isHovered:b,isFocusVisible:h,isFocusVisibleWithin:k,selectionMode:i.selectionManager.selectionMode,selectionBehavior:i.selectionManager.selectionBehavior,allowsDragging:!!n,isDragging:$,isDropTarget:U?.isDropTarget,id:a.key,state:i}}),G=ie.useRef(null);ie.useEffect(()=>{n&&!G.current&&console.warn('Draggable items in a GridList must contain a