@omniviewdev/runtime 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,77 @@
1
+ export declare const styles: {
2
+ Panel: {
3
+ position: "fixed";
4
+ right: string;
5
+ bottom: number;
6
+ zIndex: "calc(var(--ov-z-toast, 9999) + 1)";
7
+ width: string;
8
+ minWidth: number;
9
+ maxHeight: string;
10
+ display: "flex";
11
+ flexDirection: "column";
12
+ overflow: "hidden";
13
+ padding: number;
14
+ };
15
+ Header: {
16
+ flex: string;
17
+ gap: string;
18
+ paddingInline: string;
19
+ background: string;
20
+ borderBottom: string;
21
+ };
22
+ HeaderActions: {
23
+ marginLeft: string;
24
+ };
25
+ List: {
26
+ minHeight: number;
27
+ overflowY: "auto";
28
+ overscrollBehavior: "contain";
29
+ };
30
+ Notice: {
31
+ borderTop: string;
32
+ };
33
+ Row: {
34
+ display: "flex";
35
+ alignItems: "center";
36
+ gap: string;
37
+ padding: string;
38
+ };
39
+ ErrorIcon: {
40
+ flex: string;
41
+ color: "var(--ov-color-danger)";
42
+ };
43
+ Message: {
44
+ flex: number;
45
+ minWidth: number;
46
+ justifyContent: "flex-start";
47
+ textAlign: "left";
48
+ };
49
+ MessageText: {
50
+ minWidth: number;
51
+ overflowWrap: "anywhere";
52
+ };
53
+ Details: {
54
+ padding: string;
55
+ };
56
+ Code: {
57
+ display: "block";
58
+ margin: string;
59
+ padding: string;
60
+ maxHeight: number;
61
+ overflow: "auto";
62
+ whiteSpace: "pre-wrap";
63
+ overflowWrap: "anywhere";
64
+ lineHeight: number;
65
+ userSelect: "text";
66
+ };
67
+ Actions: {
68
+ display: "flex";
69
+ flexWrap: "wrap";
70
+ gap: string;
71
+ };
72
+ CopyError: {
73
+ margin: number;
74
+ padding: string;
75
+ borderTop: string;
76
+ };
77
+ };
@@ -1,8 +1,10 @@
1
1
  import { default as React, ReactNode } from 'react';
2
2
  type VariantType = 'default' | 'success' | 'error' | 'warning' | 'info';
3
3
  type SnackbarContextType = {
4
+ notificationCount: number;
4
5
  showSnackbar(message: string, status: VariantType, icon?: string, details?: string): void;
5
6
  showSnackbar(options: ShowSnackbarOptions): void;
7
+ openNotifications(): void;
6
8
  };
7
9
  type SnackbarProviderProps = {
8
10
  children: ReactNode;
package/dist/index.cjs CHANGED
@@ -1,2 +1,4 @@
1
- "use strict";var ot=Object.defineProperty;var it=(t,e,n)=>e in t?ot(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var L=(t,e,n)=>it(t,typeof e!="symbol"?e+"":e,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const x=require("react/jsx-runtime"),l=require("react"),H=require("react-router-dom");require("./index-D_aIcqH0.cjs");const E=require("./graphservice-CWIVejHl.cjs"),N=require("./models-CGYstu7u.cjs"),D=require("./events-CtgYnKmS.cjs"),S=require("@tanstack/react-query"),at=require("@omniviewdev/base-ui"),ct=require("./legacyEnum-DkV5yRdA.cjs"),te=l.createContext(void 0),F={PLUGIN_NOT_FOUND:"omniview:plugin/not-found",PLUGIN_NOT_LOADED:"omniview:plugin/not-loaded",PLUGIN_ALREADY_LOADED:"omniview:plugin/already-loaded",PLUGIN_INSTALL_FAILED:"omniview:plugin/install-failed",PLUGIN_LOAD_FAILED:"omniview:plugin/load-failed",PLUGIN_BUILD_FAILED:"omniview:plugin/build-failed",PLUGIN_COMMITTED_CLEANUP_PENDING:"omniview:plugin/committed-cleanup-pending",PLUGIN_COMMIT_UNCERTAIN:"omniview:plugin/commit-uncertain",SETTINGS_MISSING_CONFIG:"omniview:settings/missing-config",SETTINGS_INVALID_CONFIG:"omniview:settings/invalid-config",RESOURCE_NOT_FOUND:"omniview:resource/not-found",RESOURCE_FORBIDDEN:"omniview:resource/forbidden",RESOURCE_UNAUTHORIZED:"omniview:resource/unauthorized",RESOURCE_CONFLICT:"omniview:resource/conflict",RESOURCE_TIMEOUT:"omniview:resource/timeout",RESOURCE_LIMIT:"omniview:resource/limit",RESOURCE_CONTINUATION_EXPIRED:"omniview:resource/continuation-expired",RESOURCE_RESET_REQUIRED:"omniview:resource/reset-required",RESOURCE_PARTIAL:"omniview:resource/partial",RESOURCE_PROVIDER_ERROR:"omniview:resource/provider-error",CONNECTION_NOT_FOUND:"omniview:connection/not-found",CONNECTION_FAILED:"omniview:connection/failed",SESSION_NOT_FOUND:"omniview:session/not-found",SESSION_FAILED:"omniview:session/failed",CANCELLED:"omniview:cancelled",INTERNAL:"omniview:internal",VALIDATION:"omniview:validation",NOT_IMPLEMENTED:"omniview:not-implemented"},Re={INVALID_REQUEST:[F.VALIDATION,400,"correctRequest"],UNSUPPORTED:[F.NOT_IMPLEMENTED,501,"refreshContract"],FORBIDDEN:[F.RESOURCE_FORBIDDEN,403,"none"],UNAUTHORIZED:[F.RESOURCE_UNAUTHORIZED,401,"none"],NOT_FOUND:[F.RESOURCE_NOT_FOUND,404,"none"],CONFLICT:[F.RESOURCE_CONFLICT,409,"refreshContract"],ALREADY_EXISTS:[F.RESOURCE_CONFLICT,409,"refreshContract"],CANCELLED:[F.CANCELLED,499,"none"],TIMEOUT:[F.RESOURCE_TIMEOUT,408,"none"],UNAVAILABLE:[F.CONNECTION_FAILED,503,"reconnect"],CONNECTION_ERROR:[F.CONNECTION_FAILED,503,"reconnect"],CERTIFICATE_ERROR:[F.CONNECTION_FAILED,502,"reconnect"],RESOURCE_LIMIT:[F.RESOURCE_LIMIT,429,"correctRequest"],CONTINUATION_EXPIRED:[F.RESOURCE_CONTINUATION_EXPIRED,410,"restartQuery"],RESET_REQUIRED:[F.RESOURCE_RESET_REQUIRED,409,"restartQuery"],PARTIAL_RESULT:[F.RESOURCE_PARTIAL,422,"none"],PROVIDER_ERROR:[F.RESOURCE_PROVIDER_ERROR,502,"none"],INTERNAL:[F.INTERNAL,500,"none"]};function ae(t){return typeof t=="object"&&t!==null?t:void 0}function $(t,e){return typeof t=="string"&&t.length>0&&t.length<=e}function ce(){return{type:F.CANCELLED,code:"CANCELLED",title:"Cancelled",status:499,detail:"The operation was cancelled.",recovery:"none"}}function Z(t,e){if(e>4)return;if(t==="cancelled")return ce();if(typeof t=="string"){const r=t.trim();if(!r.startsWith("{"))return;try{return Z(JSON.parse(r),e+1)}catch{return}}const n=ae(t);if(n){if(n.name==="AbortError"||n.name==="CancelError")return ce();if($(n.type,256)&&$(n.title,256)&&typeof n.status=="number"&&Number.isInteger(n.status)&&n.status>=100&&n.status<=599&&typeof n.detail=="string"&&n.detail.length<=4096){const r={type:n.type,title:n.title,status:n.status,detail:n.detail};$(n.code,64)&&(r.code=n.code),$(n.requestId,256)&&(r.requestId=n.requestId),$(n.instance,512)&&(r.instance=n.instance),Array.isArray(n.suggestions)&&(r.suggestions=n.suggestions.filter(i=>$(i,512)).slice(0,8)),Array.isArray(n.actions)&&(r.actions=n.actions.filter(i=>{const o=ae(i);return!!o&&["navigate","retry","open-url","copy"].includes(String(o.type))&&$(o.label,256)&&(o.target===void 0||$(o.target,4096))}).slice(0,8)),["correctRequest","refreshContract","restartQuery","reconnect","none"].includes(String(n.recovery))&&(r.recovery=n.recovery);const s=ae(n.location);return(s==null?void 0:s.unit)==="utf8-byte"&&typeof s.start=="number"&&typeof s.end=="number"&&Number.isSafeInteger(s.start)&&Number.isSafeInteger(s.end)&&s.start>=0&&s.end>=s.start&&(r.location={start:s.start,end:s.end,unit:"utf8-byte"}),r}if(typeof n.code=="string"&&typeof n.title=="string"&&typeof n.message=="string"){let r=n.code;if(r==="PERMISSION_DENIED"&&(r="FORBIDDEN"),["INVALID_INPUT","FILTER_UNKNOWN_FIELD","FILTER_INVALID_OPERATOR"].includes(r)&&(r="INVALID_REQUEST"),Object.prototype.hasOwnProperty.call(Re,r)||(r="INTERNAL"),r==="CANCELLED")return ce();const[s,i,o]=Re[r],a=r==="FORBIDDEN"||r==="UNAUTHORIZED"||r==="INTERNAL"||r==="PROVIDER_ERROR";return{type:s,status:i,code:r,recovery:o,title:a?r==="FORBIDDEN"?"Access denied":r==="UNAUTHORIZED"?"Authentication required":"Operation failed":$(n.title,256)?n.title:"Operation failed",detail:a?"The operation could not be completed.":$(n.message,4096)?n.message:"The operation could not be completed.",...!a&&Array.isArray(n.suggestions)?{suggestions:n.suggestions.filter(c=>$(c,512)).slice(0,8)}:{}}}return Z(n.message,e+1)??Z(n.cause,e+1)}}function Q(t){return Z(t,0)??{type:F.INTERNAL,title:t==null?"Unknown error":"Error",status:500,detail:t==null?"An unknown error occurred.":"The operation could not be completed."}}function z(t){return Q(t).type===F.CANCELLED}function Ae(t){switch(t.type){case"navigate":return{label:t.label,onClick:()=>{window.location.hash=t.target??""}};case"open-url":return{label:t.label,onClick:()=>{window.open(t.target,"_blank")}};case"copy":return{label:t.label,onClick:()=>{navigator.clipboard.writeText(t.target??"")}};case"retry":return{label:t.label,onClick:()=>{}};default:return{label:t.label,onClick:()=>{}}}}function Te(t,e){var s,i;const n=[t.detail,...((s=t.suggestions)==null?void 0:s.map(o=>`• ${o}`))??[]].join(`
2
- `);return{message:e||(t.title!=="Error"?t.title:"Operation failed"),status:"error",details:n,actions:(i=t.actions)==null?void 0:i.map(Ae)}}function j(t,e,n){if(z(e))return;const r=Q(e);t(Te(r,n))}function M(t,e){return n=>{if(z(n))return;const r=Q(n);t(Te(r,r.title!=="Error"?r.title:e))}}function ut(t){const{children:e,pluginId:n}=t,[r,s]=l.useState({}),[i,o]=l.useState(new N.PluginMeta),[a,c]=l.useState(!1),[d,u]=l.useState(null),f=l.useRef(0),p=l.useRef(0);console.debug("[PluginContextProvider] render",{pluginId:n,metaLoaded:a,metaError:!!d});const y=l.useCallback(()=>{if(n===void 0||n==="")return;const _=++f.current;console.debug(`[PluginContextProvider] fetching settings for "${n}"`),E.PluginValues(n).then(g=>{_===f.current&&(console.debug(`[PluginContextProvider] settings loaded for "${n}"`,Object.keys(g)),s(g))}).catch(g=>{if(_!==f.current)return;const h=Q(g);console.error(`[PluginContextProvider] error fetching settings for "${n}":`,h.detail)})},[n]),m=l.useCallback(()=>{if(n===void 0||n===""){console.debug("[PluginContextProvider] skipping meta fetch — empty pluginId");return}const _=++p.current;console.debug(`[PluginContextProvider] fetching meta for "${n}"`),u(null),E.GetPluginMeta(n).then(g=>{_===p.current&&(console.debug(`[PluginContextProvider] meta loaded for "${n}"`,{name:g==null?void 0:g.name,version:g==null?void 0:g.version}),o(g),c(!0))}).catch(g=>{if(_!==p.current)return;const h=Q(g);console.error(`[PluginContextProvider] error fetching meta for "${n}":`,h.detail),u(h.detail),c(!1)})},[n]);return l.useEffect(()=>{if(a)return;const _=()=>{y(),m()},g=[D.On("plugin/init_complete",_),D.On("plugin/dev_install_complete",h=>{var b;((b=h.data)==null?void 0:b.id)===n&&_()}),D.On("plugin/inventory_changed",_)];return()=>{for(const h of g)h()}},[n,a,y,m]),l.useEffect(()=>(console.debug(`[PluginContextProvider] useEffect — pluginId changed to "${n}"`),c(!1),u(null),s({}),y(),m(),()=>{++f.current,++p.current}),[n,y,m]),d?x.jsx("div",{style:{display:"flex",flex:1,alignItems:"center",justifyContent:"center",padding:24},children:x.jsxs("div",{style:{maxWidth:480,width:"100%",border:"1px solid #7F1D1D",borderRadius:8,backgroundColor:"#1C1917",padding:20,fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},children:[x.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:12},children:[x.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"#EF4444",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[x.jsx("circle",{cx:"12",cy:"12",r:"10"}),x.jsx("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),x.jsx("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]}),x.jsx("span",{style:{fontSize:14,fontWeight:600,color:"#FECACA"},children:"Plugin failed to load"})]}),x.jsx("p",{style:{fontSize:13,color:"#A1A1AA",margin:"0 0 16px"},children:d}),x.jsx("button",{onClick:()=>m(),style:{background:"transparent",color:"#F87171",border:"1px solid #7F1D1D",borderRadius:6,padding:"6px 14px",fontSize:13,fontWeight:500,cursor:"pointer"},children:"Retry"})]})}):a?x.jsx(te.Provider,{value:{pluginId:n,settings:r,meta:i},children:e}):x.jsxs("div",{style:{display:"flex",flex:1,alignItems:"center",justifyContent:"center"},children:[x.jsx("div",{style:{width:24,height:24,border:"2px solid #3F3F46",borderTopColor:"#A1A1AA",borderRadius:"50%",animation:"plugin-spin 0.8s linear infinite"}}),x.jsx("style",{children:"@keyframes plugin-spin { to { transform: rotate(360deg); } }"})]})}function ne(){const t=l.useContext(te);if(!t)throw new Error("usePluginContext must be used within a PluginContextProvider");return t}function lt(){return ne().settings}const ge=l.createContext(void 0),dt=({children:t})=>{const[e,n]=l.useState({}),r=l.useRef(0),s=l.useCallback(()=>{const o=r.current+1;r.current=o,E.Values().then(a=>{o===r.current&&n(a)}).catch(a=>{o===r.current&&console.error("Error fetching settings:",a)})},[]);l.useEffect(()=>{const o=D.On("settings/changed",()=>s());return s(),()=>{r.current+=1,o()}},[s]);const i=l.useCallback(()=>{s()},[s]);return x.jsx(ge.Provider,{value:{settings:e,reload:i},children:t})},De={height:32,focused:0,tabs:[],createTab:()=>{},createTabs:()=>{},updateTab:()=>{},focusTab:()=>{},reorderTab:()=>{},closeTab:()=>{},closeTabs:()=>{},resizeDrawer:()=>{},closeDrawer:()=>{},fullscreenDrawer:()=>{}},Fe=l.createContext(De),xe=l.createContext(void 0),Ne=l.createContext(void 0),he=l.createContext(void 0),ft=3e4,pt=({children:t})=>{const[e,n]=l.useState([]),r=l.useCallback(a=>{n(c=>[a,...c])},[]),s=l.useCallback((a,c)=>{n(d=>d.map(u=>u.id===a?{...u,...c}:u))},[]),i=l.useCallback(a=>{n(c=>c.filter(d=>d.id!==a))},[]);l.useEffect(()=>{const a=[];for(const c of e)if(c.status!=="running"){const d=Date.now()-(c.completedAt??c.startedAt),u=Math.max(0,ft-d);a.push(setTimeout(()=>i(c.id),u))}return()=>a.forEach(clearTimeout)},[e,i]);const o=l.useMemo(()=>({operations:e,addOperation:r,updateOperation:s,removeOperation:i}),[e,r,s,i]);return x.jsx(he.Provider,{value:o,children:t})};var fe=function(t,e){return fe=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(n[s]=r[s])},fe(t,e)};function yt(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");fe(t,e);function n(){this.constructor=t}t.prototype=e===null?Object.create(e):(n.prototype=e.prototype,new n)}var ue="Invariant Violation",be=Object.setPrototypeOf,gt=be===void 0?function(t,e){return t.__proto__=e,t}:be,ht=function(t){yt(e,t);function e(n){n===void 0&&(n=ue);var r=t.call(this,typeof n=="number"?ue+": "+n+" (see https://github.com/apollographql/invariant-packages)":n)||this;return r.framesToPop=1,r.name=ue,gt(r,e.prototype),r}return e}(Error);function pe(t,e){if(!t)throw new ht(e)}var Le=["debug","log","warn","error","silent"],mt=Le.indexOf("log");function Y(t){return function(){if(Le.indexOf(t)>=mt){var e=console[t]||console.log;return e.apply(console,arguments)}}}(function(t){t.debug=Y("debug"),t.log=Y("log"),t.warn=Y("warn"),t.error=Y("error")})(pe||(pe={}));const Me=l.createContext(void 0),ke=()=>l.useContext(Me);function Et(t){const e=ke(),n=l.useRef(null),r=e==null?void 0:e.getExtensionPoint(t),s=l.useCallback(o=>{const a=[];return e&&a.push(e.subscribe(o)),r&&a.push(r.subscribe(o)),()=>{for(const c of a)c()}},[e,t,r]),i=l.useCallback(()=>{const o=e==null?void 0:e.getExtensionPoint(t);if(!o){if(n.current&&n.current.store===void 0)return n.current.sentinel;const d={};return n.current={store:void 0,version:-1,sentinel:d},d}const a=n.current;if(a&&a.store===o&&a.version===o.version)return a.sentinel;const c={};return n.current={store:o,version:o.version,sentinel:c},c},[e,t]);return l.useSyncExternalStore(s,i),e==null?void 0:e.getExtensionPoint(t)}const St=({registry:t,children:e})=>{const n=l.useRef(t);return pe(n.current===t,"You can't change the extension registry after it has been rendered"),x.jsx(Me.Provider,{value:n.current,children:e})},le=t=>{if(!t||typeof t!="string")throw new TypeError(`extensionName is required to be a string and can't be: "${t}" (${typeof t})`);return t.trim()};class qe{constructor(e){L(this,"id");L(this,"mode");L(this,"_pluginId");L(this,"_version",0);L(this,"_contributions",new Map);L(this,"_lookupCache",new Map);L(this,"_matcher");L(this,"_select");L(this,"_listeners",new Set);this.id=e.id,this.mode=e.mode??"multiple",this._pluginId=e.pluginId,this._matcher=e.matcher,this._select=e.select}get pluginId(){return this._pluginId}get version(){return this._version}register(e){if(this._contributions.has(e.id))throw new Error(`Contribution with id "${e.id}" already exists in extension point "${this.id}"`);this._contributions.set(e.id,e),this._invalidateCache(),this._notify()}unregister(e){this._contributions.delete(e)&&(this._invalidateCache(),this._notify())}provide(e){return this._getMatched(e).map(r=>r.value)}list(e){return this._getMatched(e)}listAll(){return Array.from(this._contributions.values())}subscribe(e){return this._listeners.add(e),()=>{this._listeners.delete(e)}}removeContributionsByPlugin(e){let n=!1;for(const[r,s]of this._contributions)s.plugin===e&&(this._contributions.delete(r),n=!0);n&&(this._invalidateCache(),this._notify())}_getMatched(e){const n=this._getCacheKey(e);if(n!=null){const s=this._lookupCache.get(n);if(s){const i=s.map(o=>this._contributions.get(o)).filter(o=>o!=null);return this._applyMode(i,e)}}let r=this._sortDeterministic(Array.from(this._contributions.values()));return this._matcher&&e!==void 0&&(r=r.filter(s=>this._matcher(s,e))),n!=null&&this._lookupCache.set(n,r.map(s=>s.id)),this._applyMode(r,e)}_applyMode(e,n){if(this.mode==="single"){if(this._select){const r=this._select(e,n);return r?[r]:[]}return e.length>0?[e[0]]:[]}return e}_sortDeterministic(e){return[...e].sort((n,r)=>{const s=n.plugin.localeCompare(r.plugin);return s!==0?s:n.id.localeCompare(r.id)})}_getCacheKey(e){if(e!=null&&typeof e=="object"&&"getCacheKey"in e){const n=e.getCacheKey;if(typeof n=="function")return n()}}_invalidateCache(){this._lookupCache.clear()}_notify(){this._version++;for(const e of this._listeners)e()}}class Ct{constructor(e){L(this,"_stores",new Map);L(this,"_storeUnsubs",new Map);L(this,"_listeners",new Set);if(e!=null&&e.initialStores)for(const n of e.initialStores)this.addExtensionPoint(n)}addExtensionPoint(e){const n=le(e.id);if(this._stores.has(n)){const s=this._stores.get(n);throw new Error(`Extension point "${n}" already exists (owned by "${s.pluginId??"unknown"}")`)}const r=new qe({...e,id:n});this._stores.set(n,r),this._storeUnsubs.set(n,r.subscribe(()=>this._notify())),this._notify()}getExtensionPoint(e){const n=le(e);return this._stores.get(n)}hasExtensionPoint(e){const n=le(e);return this._stores.has(n)}listExtensionPoints(){return Array.from(this._stores.keys())}removeExtensionPoints(e){var r;let n=!1;for(const[s,i]of this._stores)i.pluginId===e&&((r=this._storeUnsubs.get(s))==null||r(),this._storeUnsubs.delete(s),this._stores.delete(s),n=!0);n&&this._notify()}removeContributions(e){for(const n of this._stores.values())n.removeContributionsByPlugin(e);this._notify()}subscribe(e){return this._listeners.add(e),()=>{this._listeners.delete(e)}}_notify(){for(const e of this._listeners)e()}}const Ue=l.createContext(void 0),_t={default:"info",info:"info",success:"success",warning:"warning",error:"danger"},wt=({children:t})=>{const{toast:e}=at.useToast(),[n,r]=l.useState([]),s=o=>{r(a=>[...a,o])},i=(o,a,c)=>{const d=typeof o=="object";let u="",f="info",p,y=5e3,m;if(d){if(u=o.message,o.showOnce){if(n.includes(u))return;s(u)}f=o.status,p=o.details,y=o.autoHideDuration??5e3,m=o.actions}else u=o,f=a,p=c;e(p??u,{severity:_t[f]??"info",title:p?u:void 0,duration:y,action:m==null?void 0:m[0]})};return x.jsx(Ue.Provider,{value:{showSnackbar:i},children:t})},U=()=>{const t=l.useContext(Ue);if(t===void 0)throw new Error("useCustomSnackbar must be used within a CustomSnackbarProvider");return t};function T(t){const e=l.useContext(te),n=(e==null?void 0:e.pluginId)??t;if(!n)throw new Error("pluginID must be provided either via PluginContext or as an explicit parameter");return n}const Rt=({pluginID:t,connectionID:e})=>{const n=T(t),r=S.useQueryClient(),{showSnackbar:s}=U(),i=[n,"connection","detail",e],{mutateAsync:o}=S.useMutation({mutationFn:async()=>E.StartConnection(n,e),onSuccess(f){r.setQueryData(i,f),r.invalidateQueries({queryKey:["EDITOR_SCHEMAS",n,e]})},onError:M(s,"Failed to start connection")}),{mutateAsync:a}=S.useMutation({mutationFn:async()=>E.StopConnection(n,e),onSuccess(f){r.setQueryData(i,f)},onError:M(s,"Failed to stop connection")}),{mutateAsync:c}=S.useMutation({mutationFn:async f=>E.UpdateConnection(n,f),onSuccess(f,{name:p}){s({message:`Connection ${p} successfully updated`,status:"success"}),r.setQueryData(i,f),r.setQueriesData({queryKey:[n,"connection","list"]},y=>y==null?void 0:y.map(m=>m.id===e?f:m))},onError:M(s,"Failed to update connection")}),{mutateAsync:d}=S.useMutation({mutationFn:async()=>E.RemoveConnection(n,e),onSuccess(){s({message:"Connection successfully removed",status:"success"}),r.setQueryData(i,void 0),r.setQueriesData({queryKey:[n,"connection","list"]},f=>f==null?void 0:f.filter(p=>p.id!==e))},onError:M(s,"Failed to remove connection")});return{connection:S.useQuery({queryKey:i,queryFn:async()=>E.GetConnection(n,e)}),startConnection:o,stopConnection:a,updateConnection:c,deleteConnection:d}},$e=t=>[t,"connection","list"],bt=({plugin:t})=>{const e=T(t),n=S.useQueryClient(),{showSnackbar:r}=U(),s=$e(e),{mutateAsync:i}=S.useMutation({mutationFn:async d=>E.StartConnectionWatch(e,d.id),onError:M(r,"Failed to start connection watch")}),{mutateAsync:o}=S.useMutation({mutationFn:async d=>E.StopConnectionWatch(e,d.id),onError:M(r,"Failed to stop connection watch")}),a=l.useCallback(d=>{const u=d.data;console.log("got update to connections",u),n.setQueryData(s,u)},[n,s]);return l.useEffect(()=>{const d=D.On(`${e}/connection/sync`,a);return()=>{d()}},[e,a]),{connections:S.useQuery({queryKey:s,queryFn:async()=>{try{return await E.ListConnections(e)}catch(d){console.log(d),M(r,"Failed to load connections")(d)}return[]},staleTime:3e4,placeholderData:S.keepPreviousData}),startWatch:i,stopWatch:o}},vt=({pluginID:t,connectionID:e})=>{const n=T(t),r=[n,"connection","namespaces",e];return{namespaces:S.useQuery({queryKey:r,queryFn:async()=>E.GetConnectionNamespaces(n,e)})}},P=ct.withLegacyNames(N.WatchState,"WatchState");function ye(t){const e=Object.values(t.states),n=e.length;let r=0,s=0,i=0,o=0;for(const u of e)u===P.WatchStateSynced&&r++,(u===P.WatchStateError||u===P.WatchStateFailed)&&s++,u===P.WatchStateForbidden&&i++,u===P.WatchStateSkipped&&o++;const a=n-o,c=e.filter(u=>u===P.WatchStateSynced||u===P.WatchStateError||u===P.WatchStateStopped||u===P.WatchStateFailed||u===P.WatchStateForbidden).length,d=a>0?c/a:0;return{pluginID:t.pluginID,connectionID:t.connectionID,totalResources:n,watchedTotal:a,syncedCount:r,errorCount:s,forbiddenCount:i,skippedCount:o,doneCount:c,progress:d}}function ee(t){return t.watchedTotal>0&&t.doneCount>=t.watchedTotal}function Qe(t){return t.some(e=>!ee(e))}function je(t){const e=t.reduce((r,s)=>r+s.watchedTotal,0);return e===0?0:t.reduce((r,s)=>r+s.doneCount,0)/e}function me(t){return`${t.pluginId}/${t.connection}`}function We(t,e){const n=me(e);t.has(n)||t.set(n,{states:{},pluginID:e.pluginId,connectionID:e.connection});const r=t.get(n);return r.states[e.resourceKey]=e.state,r}function It(){const[t,e]=l.useState(new Set),[n,r]=l.useState({}),[s,i]=l.useState(new Map),o=l.useRef(new Map),[a,c]=l.useState(new Map);l.useEffect(()=>{const C=D.On("plugin/crash_recovery_failed",O=>{const w=O.data,R=w==null?void 0:w.pluginID;R&&c(I=>{const A=new Map(I);return A.set(R,w.error??"Crash recovery failed"),A})}),v=D.On("plugin/recovered",O=>{const w=O.data,R=w==null?void 0:w.pluginID;R&&c(I=>{if(!I.has(R))return I;const A=new Map(I);return A.delete(R),A})});return()=>{C(),v()}},[]),l.useEffect(()=>{E.GetAllConnectionStates().then(C=>{if(!C)return;const v={},O=new Set,w=new Map;for(const[R,I]of Object.entries(C))if(I){v[R]=I.map(A=>A.connection);for(const A of I){if(!A.started)continue;const q=`${R}/${A.connection.id}`;O.add(q);const k={pluginID:R,connectionID:A.connection.id,states:{}};if(A.resources)for(const[ie,st]of Object.entries(A.resources))k.states[ie]=st;o.current.set(q,k),w.set(q,ye(k))}}r(v),e(O),i(w)}).catch(()=>{})},[]),l.useEffect(()=>D.On("connection/status",v=>{const O=v.data,w=`${O.pluginID}/${O.connectionID}`;O.status==="DISCONNECTED"?(e(R=>{const I=new Set(R);return I.delete(w),I}),i(R=>{const I=new Map(R);return I.delete(w),I}),o.current.delete(w)):e(R=>{const I=new Set(R);return I.add(w),I}),E.ListAllConnections().then(R=>{if(!R)return;const I={};for(const[A,q]of Object.entries(R))q!=null&&(I[A]=q);r(I)}).catch(()=>{})}),[]);const d=l.useCallback(C=>{const v=C.data,O=me(v);e(I=>{if(I.has(O))return I;const A=new Set(I);return A.add(O),A});const w=We(o.current,v),R=ye(w);i(I=>{const A=new Map(I);return A.set(O,R),A})},[]);l.useEffect(()=>D.On("watch/STATE",d),[d]);const u=l.useCallback(async(C,v)=>{await E.StopConnection(C,v)},[]),f=l.useCallback(async(C,v)=>{await E.StartConnectionWatch(C,v)},[]),p=l.useCallback(async C=>{const v=a.get(C);c(O=>{if(!O.has(C))return O;const w=new Map(O);return w.delete(C),w});try{await E.RetryFailedPlugin(C)}catch(O){throw c(w=>{const R=new Map(w);return R.set(C,v??"Reload failed"),R}),O}},[a]),y=[];for(const C of t){const[v,O]=C.split("/",2),R=(n[v]??[]).find(ie=>ie.id===O),I=s.get(C),A=I!=null&&!ee(I),q=I!=null&&I.errorCount>0,k=a.get(v);y.push({pluginID:v,connectionID:O,name:(R==null?void 0:R.name)??O,avatar:(R==null?void 0:R.avatar)??"",isStarted:!0,sync:I,isSyncing:A,hasErrors:q||k!=null,pluginFailed:k!=null,pluginError:k})}const m=new Map;for(const C of y){const v=m.get(C.pluginID)??[];v.push(C),m.set(C.pluginID,v)}const _=Array.from(s.values()),g=y.filter(C=>C.isSyncing),h=y.filter(C=>C.hasErrors),b=y.filter(C=>C.pluginFailed);return{entries:y,grouped:m,connectedCount:y.length,syncingCount:g.length,errorCount:h.length,failedCount:b.length,hasSyncing:Qe(_),aggregateProgress:je(_),disconnect:u,retryWatch:f,retryPlugin:p}}function Ot(t,e){return e===null?t===null:Array.isArray(e)?Array.isArray(t):typeof e=="object"?typeof t=="object"&&t!==null&&!Array.isArray(t):typeof t==typeof e}function Pt(t,e,n){const r=T(t),s=S.useQueryClient(),i=[r,"data",e],o=S.useQuery({queryKey:i,queryFn:async()=>{const c=await E.Get(r,e);return c==null?n:Ot(c,n)?c:(console.warn(`[usePluginData] stored value for "${e}" has unexpected type (expected ${Array.isArray(n)?"array":typeof n}, got ${Array.isArray(c)?"array":typeof c}). Using default.`),n)}}),a=S.useMutation({mutationFn:async c=>{await E.Set(r,e,c)},onMutate:async c=>{await s.cancelQueries({queryKey:i});const d=s.getQueryData(i);return s.setQueryData(i,c),{previous:d}},onError:(c,d,u)=>{(u==null?void 0:u.previous)!==void 0&&s.setQueryData(i,u.previous)},onSettled:()=>{s.invalidateQueries({queryKey:i})}});return{data:o.data??n,update:async c=>{await a.mutateAsync(c)},isLoading:o.isLoading}}const At=()=>{const t=l.useContext(xe);if(!t)throw new Error("useRightDrawer must be used within a RightDrawerProvider");return t},Ee=()=>{const t=l.useContext(Fe);if(t===void 0)throw new Error("useBottomDrawer must be used within a BottomDrawerProvider");return t},Tt=({pluginID:t})=>{const e=T(t),{showSnackbar:n}=U(),{createTab:r,updateTab:s}=Ee();return{createSession:S.useMutation({mutationFn:async({connectionID:o,icon:a,label:c,opts:d})=>{const u=`pending-${crypto.randomUUID()}`;r({id:u,title:c??"Connecting...",variant:"terminal",icon:a??"LuSquareTerminal",properties:{status:"connecting",pluginID:e,connectionID:o,opts:{...d}}});const f=N.SessionOptions.createFrom({command:["/bin/bash"],tty:!0,...d});try{const p=await E.CreateSession(e,o,f);if(!p)throw new Error("Failed to create session: null response");s({id:u},{id:p.id,title:c??`Session ${p.id.substring(0,8)}`,properties:{status:"connected",pluginID:e,connectionID:o,opts:{...d}}})}catch(p){const y=Q(p);s({id:u},{properties:{status:"error",error:y.detail,pluginID:e,connectionID:o,opts:{...d}}}),j(n,p,"Failed to start session")}}}).mutateAsync}},Dt=({pluginID:t})=>{const e=T(t),{showSnackbar:n}=U(),{createTab:r}=Ee(),s=S.useMutation({mutationFn:async({connectionID:o,resourceKey:a,resourceID:c,resourceData:d,icon:u,label:f,target:p,follow:y=!0,tailLines:m=1e3,params:_})=>{const g=N.CreateSessionOptions.createFrom({resource_key:a,resource_id:c,resource_data:d,options:N.LogSessionOptions.createFrom({target:p??"",follow:y,include_previous:!1,include_timestamps:!0,tail_lines:m,since_seconds:0,limit_bytes:0,include_source_events:!0,params:_??{}})}),h=await E.CreateSession$1(e,o,g);if(!h)throw new Error("Failed to create log session: null response");return r({id:h.id,title:f??`Logs ${h.id.substring(0,8)}`,variant:"logs",icon:u??"LuLogs"}),h},onError:M(n,"Failed to start log session")}),i=S.useMutation({mutationFn:async o=>{await E.CloseSession(o)},onError:M(n,"Failed to close log session")});return{createLogSession:s.mutateAsync,closeLogSession:i.mutateAsync}},Ft=()=>S.useQuery({queryKey:["metric","providers"],queryFn:E.GetProviders,staleTime:3e4}),Ge=t=>S.useQuery({queryKey:["metric","providers",t],queryFn:()=>E.GetProvidersForResource(t),enabled:!!t,staleTime:3e4}),xt=t=>{var g,h;const{connectionID:e,resourceKey:n,resourceID:r,resourceNamespace:s="",resourceData:i={},metricIDs:o=[],shape:a=0,timeRange:c,refreshInterval:d=0,enabled:u=!0}=t,{data:f,isLoading:p}=Ge(n),y=f??[],m=c?Math.max(Math.floor((c.end.getTime()-c.start.getTime())/250),15e3)*1e6:0,_=S.useQuery({queryKey:["metric","query",e,n,r,s,o,a,(g=c==null?void 0:c.start)==null?void 0:g.getTime(),(h=c==null?void 0:c.end)==null?void 0:h.getTime()],queryFn:async()=>{const b=await E.QueryAll(e,n,r,s,i,o,a,((c==null?void 0:c.start)??new Date(0)).toISOString(),((c==null?void 0:c.end)??new Date(0)).toISOString(),m),C={};for(const[v,O]of Object.entries(b))O!=null&&(C[v]=O);return C},enabled:u&&!!e&&!!n&&(n.startsWith("cluster::")||!!r)&&y.length>0,refetchInterval:d>0?d:void 0,staleTime:5e3,placeholderData:S.keepPreviousData});return{data:_.data??void 0,providers:y,isLoading:p||_.isLoading,error:_.error,refetch:_.refetch}},Nt=t=>{const{pluginID:e,connectionID:n,resourceKey:r,resourceID:s,resourceNamespace:i="",resourceData:o={},metricIDs:a=[],interval:c=1e4,enabled:d=!0}=t,u=T(e),[f,p]=l.useState(null),[y,m]=l.useState(null),[_,g]=l.useState(!1),[h,b]=l.useState(null),C=l.useRef(null),v=l.useCallback(async()=>{if(!(!d||!u||!n||!r||!s))try{const w=await E.Subscribe(u,n,{resource_key:r,resource_id:s,resource_namespace:i,resource_data:o,metric_ids:a,interval:c*1e6});m(w),g(!0),b(null);const R=D.On(`core/metrics/data/${w}`,A=>{const q=A.data;try{const k=JSON.parse(q);k.results&&p(k.results)}catch(k){console.error("Failed to parse metric stream data:",k)}}),I=D.On(`core/metrics/error/${w}`,A=>{const q=A.data;try{const k=JSON.parse(q);b(k.error||"Unknown error")}catch{b("Failed to parse metric stream error")}});C.current=()=>{R(),I()}}catch(w){b(w instanceof Error?w.message:String(w))}},[u,n,r,s,i,a,c,d]),O=l.useCallback(async()=>{if(y)try{await E.Unsubscribe(y)}catch(w){console.error("Failed to unsubscribe:",w)}C.current&&(C.current(),C.current=null),m(null),g(!1)},[y]);return l.useEffect(()=>()=>{y&&E.Unsubscribe(y).catch(console.error),C.current&&C.current()},[y]),{data:f,subscriptionID:y,isStreaming:_,error:h,start:v,stop:O}},W=["networker","portforward","all-sessions"];function Lt(){const{showSnackbar:t}=U(),e=S.useQueryClient(),n=S.useQuery({queryKey:[...W],queryFn:async()=>E.ListAllPortForwardSessions().catch(i=>{if(Q(i).detail.includes("not found"))return[];throw i}),retry:!1});l.useEffect(()=>{const i=D.On("core/networker/portforward/created",()=>{e.invalidateQueries({queryKey:[...W]})}),o=D.On("core/networker/portforward/closed",()=>{e.invalidateQueries({queryKey:[...W]})});return()=>{i(),o()}},[e]);const r=n.data??[],s=S.useMutation({mutationFn:async i=>E.ClosePortForwardSession(i),onError:M(t,"Failed to close port forwarding session"),onSuccess:async()=>{await e.invalidateQueries({queryKey:[...W]})}});return{sessions:n,activeSessions:r,closeSession:s.mutateAsync,openInBrowser:i=>D.OpenURL(`http://localhost:${i}`)}}function Mt({pluginID:t,connectionID:e,resourceID:n}){const r=T(t),s=["networker","portforward","sessions",r,e,n],{showSnackbar:i}=U(),o=S.useQueryClient(),a=S.useQuery({queryKey:s,queryFn:async()=>E.FindPortForwardSessions(r,e,N.FindPortForwardSessionRequest.createFrom({resource_id:n,connection_id:e})).catch(u=>{const f=Q(u);return f.detail.includes("not found")?[]:(i({message:"Failed to fetch port forward sessions",status:"error",details:f.detail}),[])}),retry:!1}),c=S.useMutation({mutationFn:async({opts:u})=>{const f=N.PortForwardSessionOptions.createFrom({local_port:u.localPort||0,remote_port:u.remotePort,protocol:u.protocol||"TCP",connection_type:"RESOURCE",connection:{resource_data:u.resource,connection_id:e,plugin_id:r,resource_id:u.resourceId,resource_key:u.resourceKey},labels:u.labels??{},params:u.parameters??{}}),p=await E.StartResourcePortForwardingSession(r,e,f);if(!p)throw new Error("Failed to start port forwarding: null response");return u.openInBrowser&&D.OpenURL(`http://localhost:${p.local_port}`),p},onError:M(i,"Failed to start port forwarding session"),onSuccess:async()=>{await Promise.all([o.invalidateQueries({queryKey:s}),o.invalidateQueries({queryKey:[...W]})])}}),d=S.useMutation({mutationFn:async({opts:u})=>E.ClosePortForwardSession(u.sessionID),onError:M(i,"Failed to close port forwarding session"),onSuccess:async()=>{await Promise.all([o.invalidateQueries({queryKey:s}),o.invalidateQueries({queryKey:[...W]})])}});return{sessions:a,forward:c.mutateAsync,close:d.mutateAsync}}const kt=()=>{const t=l.useContext(Ne);if(!t)throw new Error("useConfirmationModal must be used within a ConfirmationModalProvider");return t},qt=({pluginID:t,connectionID:e,resourceKey:n,resourceID:r,namespace:s=""})=>{const i=T(t),o=S.useQueryClient(),{showSnackbar:a}=U(),c=["RESOURCE",i,e,n,r,s],{mutateAsync:d}=S.useMutation({mutationFn:async p=>E.Update(i,e,n,N.UpdateInput.createFrom({input:p.input,id:r,namespace:s})),onSuccess:async()=>{a(`Resource ${r} updated`,"success"),await o.invalidateQueries({queryKey:c})},onError:M(a,`Failed to update resource ${r}`)}),{mutateAsync:u}=S.useMutation({mutationFn:async(p={})=>E.Delete(i,e,n,N.DeleteInput.createFrom({id:r,namespace:s,gracePeriodSeconds:p.gracePeriodSeconds})),onSuccess:async()=>{a(`Resource ${r} deleted`,"success"),await o.invalidateQueries({queryKey:c})},onError:M(a,`Failed to delete resource ${r}`)});return{resource:S.useQuery({queryKey:c,queryFn:async()=>E.Get$1(i,e,n,N.GetInput.createFrom({id:r,namespace:s})),retry:!1}),update:d,remove:u}},Ut=t=>{const e=["component",t.plugin,t.resource,t.area];return{component:S.useQuery({queryKey:e,queryFn:async()=>E.GetResourceAreaComponent(t)})}},$t=({pluginID:t,connectionID:e})=>{const n=T(t),r=[n,"resource_groups","list"];return{groups:S.useQuery({queryKey:r,queryFn:async()=>E.GetResourceGroups(n,e),retry:!1})}},Qt=({pluginID:t,connectionID:e,searches:n})=>{const r=T(t),s=o=>[r,e,o.key,o.namespaces,"list"];return S.useQueries({queries:n.map(o=>({queryKey:s(o),queryFn:async()=>E.List(r,e,o.key,N.ListInput.createFrom({order:[{field:"name",descending:!1}],pagination:{page:1,pageSize:200},namespaces:o.namespaces})).then(a=>a?(console.log(a.result),a.result&&o.postFilter?Object.values(a.result).filter(o.postFilter):Object.values(a.result||{})):[]),retry:!1}))})},jt=({pluginID:t,resourceKey:e})=>{const n=T(t),r=[n,"resources",e];return{resourceType:S.useQuery({queryKey:r,queryFn:async()=>E.GetResourceType(n,e),retry:!1})}},Wt=({pluginID:t,connectionID:e})=>{const n=T(t),r=[n,"resources","list",e];return{types:S.useQuery({queryKey:r,queryFn:async()=>E.GetResourceTypes(n,e),retry:!1})}};var J=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Gt(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Kt="Expected a function",Ke="__lodash_hash_undefined__",Bt="[object Function]",Ht="[object GeneratorFunction]",zt="[object Symbol]",Vt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Yt=/^\w*$/,Jt=/^\./,Xt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Zt=/[\\^$.*+?()[\]{}|]/g,en=/\\(\\)?/g,tn=/^\[object .+?Constructor\]$/,nn=typeof J=="object"&&J&&J.Object===Object&&J,rn=typeof self=="object"&&self&&self.Object===Object&&self,Se=nn||rn||Function("return this")();function sn(t,e){return t==null?void 0:t[e]}function on(t){var e=!1;if(t!=null&&typeof t.toString!="function")try{e=!!(t+"")}catch{}return e}var an=Array.prototype,cn=Function.prototype,Be=Object.prototype,de=Se["__core-js_shared__"],ve=function(){var t=/[^.]+$/.exec(de&&de.keys&&de.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),He=cn.toString,Ce=Be.hasOwnProperty,ze=Be.toString,un=RegExp("^"+He.call(Ce).replace(Zt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ie=Se.Symbol,ln=an.splice,dn=Ve(Se,"Map"),V=Ve(Object,"create"),Oe=Ie?Ie.prototype:void 0,Pe=Oe?Oe.toString:void 0;function G(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function fn(){this.__data__=V?V(null):{}}function pn(t){return this.has(t)&&delete this.__data__[t]}function yn(t){var e=this.__data__;if(V){var n=e[t];return n===Ke?void 0:n}return Ce.call(e,t)?e[t]:void 0}function gn(t){var e=this.__data__;return V?e[t]!==void 0:Ce.call(e,t)}function hn(t,e){var n=this.__data__;return n[t]=V&&e===void 0?Ke:e,this}G.prototype.clear=fn;G.prototype.delete=pn;G.prototype.get=yn;G.prototype.has=gn;G.prototype.set=hn;function B(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function mn(){this.__data__=[]}function En(t){var e=this.__data__,n=re(e,t);if(n<0)return!1;var r=e.length-1;return n==r?e.pop():ln.call(e,n,1),!0}function Sn(t){var e=this.__data__,n=re(e,t);return n<0?void 0:e[n][1]}function Cn(t){return re(this.__data__,t)>-1}function _n(t,e){var n=this.__data__,r=re(n,t);return r<0?n.push([t,e]):n[r][1]=e,this}B.prototype.clear=mn;B.prototype.delete=En;B.prototype.get=Sn;B.prototype.has=Cn;B.prototype.set=_n;function K(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function wn(){this.__data__={hash:new G,map:new(dn||B),string:new G}}function Rn(t){return se(this,t).delete(t)}function bn(t){return se(this,t).get(t)}function vn(t){return se(this,t).has(t)}function In(t,e){return se(this,t).set(t,e),this}K.prototype.clear=wn;K.prototype.delete=Rn;K.prototype.get=bn;K.prototype.has=vn;K.prototype.set=In;function re(t,e){for(var n=t.length;n--;)if(kn(t[n][0],e))return n;return-1}function On(t,e){e=Dn(e,t)?[e]:Tn(e);for(var n=0,r=e.length;t!=null&&n<r;)t=t[Ln(e[n++])];return n&&n==r?t:void 0}function Pn(t){if(!Je(t)||xn(t))return!1;var e=qn(t)||on(t)?un:tn;return e.test(Mn(t))}function An(t){if(typeof t=="string")return t;if(we(t))return Pe?Pe.call(t):"";var e=t+"";return e=="0"&&1/t==-1/0?"-0":e}function Tn(t){return Ye(t)?t:Nn(t)}function se(t,e){var n=t.__data__;return Fn(e)?n[typeof e=="string"?"string":"hash"]:n.map}function Ve(t,e){var n=sn(t,e);return Pn(n)?n:void 0}function Dn(t,e){if(Ye(t))return!1;var n=typeof t;return n=="number"||n=="symbol"||n=="boolean"||t==null||we(t)?!0:Yt.test(t)||!Vt.test(t)||e!=null&&t in Object(e)}function Fn(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}function xn(t){return!!ve&&ve in t}var Nn=_e(function(t){t=$n(t);var e=[];return Jt.test(t)&&e.push(""),t.replace(Xt,function(n,r,s,i){e.push(s?i.replace(en,"$1"):r||n)}),e});function Ln(t){if(typeof t=="string"||we(t))return t;var e=t+"";return e=="0"&&1/t==-1/0?"-0":e}function Mn(t){if(t!=null){try{return He.call(t)}catch{}try{return t+""}catch{}}return""}function _e(t,e){if(typeof t!="function"||e&&typeof e!="function")throw new TypeError(Kt);var n=function(){var r=arguments,s=e?e.apply(this,r):r[0],i=n.cache;if(i.has(s))return i.get(s);var o=t.apply(this,r);return n.cache=i.set(s,o),o};return n.cache=new(_e.Cache||K),n}_e.Cache=K;function kn(t,e){return t===e||t!==t&&e!==e}var Ye=Array.isArray;function qn(t){var e=Je(t)?ze.call(t):"";return e==Bt||e==Ht}function Je(t){var e=typeof t;return!!t&&(e=="object"||e=="function")}function Un(t){return!!t&&typeof t=="object"}function we(t){return typeof t=="symbol"||Un(t)&&ze.call(t)==zt}function $n(t){return t==null?"":An(t)}function Qn(t,e,n){var r=t==null?void 0:On(t,e);return r===void 0?n:r}var jn=Qn;const X=Gt(jn);function Xe(t,e,n){const r=t??{result:[],success:!0,totalCount:0},s=[...r.result??[]];for(const i of e){const o=X(i.payload.data,n);switch(i.type){case"ADD":{s.findIndex(c=>X(c,n)===o)===-1&&s.push(i.payload.data);break}case"UPDATE":{const a=s.findIndex(c=>X(c,n)===o);a!==-1&&(s[a]=i.payload.data);break}case"DELETE":{const a=s.findIndex(c=>X(c,n)===o);a!==-1&&s.splice(a,1);break}}}return{...r,result:s}}function Ze(t,e,n,r,s,i){const o=(i==null?void 0:i.syncWindowMs)??500,a=l.useRef([]),c=l.useRef(null),d=l.useRef(null),u=l.useRef(s);u.current=s;const f=l.useCallback(()=>{const y=a.current;if(a.current=[],c.current!==null&&(clearTimeout(c.current),c.current=null),d.current!==null&&(cancelAnimationFrame(d.current),d.current=null),!(y.length===0||!r)){t.setQueryData(e,m=>Xe(m,y,r));for(const m of y)(m.type==="ADD"||m.type==="UPDATE")&&t.setQueryData(n(m.payload.id,m.payload.namespace),{result:m.payload.data})}},[t,e,n,r]),p=l.useCallback(y=>{a.current.push(y),!(c.current!==null||d.current!==null)&&(c.current=setTimeout(f,o),u.current!==1&&(d.current=requestAnimationFrame(f)))},[f,o]);return l.useEffect(()=>()=>{c.current!==null&&(clearTimeout(c.current),c.current=null),d.current!==null&&(cancelAnimationFrame(d.current),d.current=null)},[]),p}const Wn=({pluginID:t,connectionID:e,resourceKey:n,idAccessor:r,namespaces:s})=>{const i=T(t),o=S.useQueryClient(),{showSnackbar:a}=U(),c=l.useMemo(()=>s??[],[s]),d=l.useMemo(()=>[i,e,n,c,"list"],[i,e,n,c]),u=l.useCallback((g,h)=>[i,e,n,h,g],[i,e,n]),{mutateAsync:f}=S.useMutation({mutationFn:async g=>E.Create(i,e,n,N.CreateInput.createFrom({input:g.input,namespace:g.namespace??(c.length===1?c[0]:"")})),onSuccess:async g=>{var v;const h=g==null?void 0:g.result;let b="";(v=h==null?void 0:h.metadata)!=null&&v.name?b=h.metadata.name:h!=null&&h.id?b=h.id:h!=null&&h.name?b=h.name:h!=null&&h.ID?b=h.ID:h!=null&&h.Name&&(b=h.Name);const C=b?`Resource ${b} created`:"Resource created";a(C,"success"),await o.invalidateQueries({queryKey:d})},onError:M(a,"Failed to create resource")}),p=S.useQuery({queryKey:d,queryFn:async()=>E.List(i,e,n,N.ListInput.createFrom({order:[{field:"name",descending:!1}],pagination:{page:1,pageSize:200},namespaces:c})),placeholderData:(g,h)=>g,retry:!1}),[y,m]=l.useState(P.WatchStateIdle);l.useEffect(()=>D.On(`${i}/${e}/watch/STATE`,h=>{const b=h.data;b.resourceKey===n&&m(b.state)}),[i,e,n]);const _=Ze(o,d,u,r,y);return l.useEffect(()=>{if(!r)return;E.SubscribeResource(i,e,n);const g=D.On(`${i}/${e}/${n}/ADD`,C=>_({type:"ADD",payload:C.data})),h=D.On(`${i}/${e}/${n}/UPDATE`,C=>_({type:"UPDATE",payload:C.data})),b=D.On(`${i}/${e}/${n}/DELETE`,C=>_({type:"DELETE",payload:C.data}));return()=>{g(),h(),b(),E.UnsubscribeResource(i,e,n)}},[i,e,n,_]),{resources:p,create:f,watchState:y,isSyncing:y===P.WatchStateSyncing,isSynced:y===P.WatchStateSynced,watchError:y===P.WatchStateError}},Gn=({pluginID:t})=>{const e=T(t),{showSnackbar:n}=U(),r=S.useMutation({mutationFn:async({opts:o,input:a})=>E.Create(e,o.connectionID,o.resourceKey,N.CreateInput.createFrom({input:a.input,namespace:a.namespace??o.namespace??""})),onSuccess:(o,{opts:a})=>{n(`Resource ${a.resourceID} created`,"success")},onError(o,{opts:a}){j(n,o,`Failed to create resource ${a.resourceID}`)}}),s=S.useMutation({mutationFn:async({opts:o,input:a})=>E.Update(e,o.connectionID,o.resourceKey,N.UpdateInput.createFrom({input:a.input,id:o.resourceID,namespace:o.namespace??""})),onSuccess:(o,{opts:a})=>{n(`Resource ${a.resourceID} updated`,"success")},onError(o,{opts:a}){j(n,o,`Failed to update resource ${a.resourceID}`)}}),i=S.useMutation({mutationFn:async({opts:o,input:a})=>E.Delete(e,o.connectionID,o.resourceKey,N.DeleteInput.createFrom({id:o.resourceID,namespace:o.namespace??"",gracePeriodSeconds:a.gracePeriodSeconds})),onSuccess:(o,{opts:a})=>{n(`Resource ${a.resourceID} deleted`,"success")},onError(o,{opts:a}){j(n,o,`Failed to delete resource ${a.resourceID}`)}});return{create:r.mutateAsync,update:s.mutateAsync,remove:i.mutateAsync}},Kn=({pluginID:t,connectionID:e,resourceKey:n,enabled:r=!0})=>{const s=T(t),i=S.useQuery({queryKey:["RESOURCE_ACTIONS",s,e,n],queryFn:()=>E.GetActions(s,e,n),enabled:r&&!!s&&!!e&&!!n,staleTime:5*60*1e3});return{actions:i.data??[],isLoading:i.isLoading,error:i.error}},Bn=({pluginID:t,connectionID:e,resourceKey:n})=>{const r=T(t),s=S.useQueryClient(),{showSnackbar:i}=U(),o=S.useMutation({mutationFn:async({actionID:a,id:c="",namespace:d="",params:u={}})=>E.ExecuteAction(r,e,n,a,N.ActionInput.createFrom({id:c,namespace:d,params:u})),onSuccess:a=>{a!=null&&a.message&&i(a.message,"success"),s.invalidateQueries({queryKey:["RESOURCES",r,e,n]})},onError:(a,c)=>{j(i,a,`Failed to execute action "${c.actionID}"`)}});return{executeAction:o.mutateAsync,isExecuting:o.isPending,error:o.error}},Hn=({pluginID:t,connectionID:e,enabled:n=!0})=>{const r=T(t),s=S.useQuery({queryKey:["EDITOR_SCHEMAS",r,e],queryFn:()=>E.GetEditorSchemas(r,e),enabled:n&&!!r&&!!e,staleTime:10*60*1e3,retry:1});return{schemas:s.data??[],isLoading:s.isLoading,error:s.error,refetch:s.refetch}},zn=({pluginID:t,connectionID:e,enabled:n=!0})=>{const r=T(t),s=S.useQueryClient(),i=[r,e,"watch-state"],o=l.useRef([]),a=l.useRef(!1),c=l.useCallback(p=>{s.setQueryData(i,y=>{if(!y)return y;const m={...y.resources,[p.resourceKey]:p.state},_={...y.resourceCounts,[p.resourceKey]:p.resourceCount};let g=0,h=0;for(const b of Object.values(m))b===P.WatchStateSynced&&g++,(b===P.WatchStateError||b===P.WatchStateFailed)&&h++;return{...y,resources:m,resourceCounts:_,totalResources:Object.keys(m).length,syncedCount:g,errorCount:h}})},[s,r,e]),d=S.useQuery({queryKey:i,queryFn:async()=>{const p=await E.GetWatchState(r,e);if(!p)throw new Error("Failed to get watch state: null response");const y={};let m=0,_=0;for(const[h,b]of Object.entries(p.resources??{}))b!=null&&(y[h]=b,b===P.WatchStateSynced&&m++,b===P.WatchStateError&&_++);const g={};for(const[h,b]of Object.entries(p.resourceCounts??{}))b!=null&&(g[h]=b);return{connection:p.connectionId,resources:y,resourceCounts:g,totalResources:Object.keys(y).length,syncedCount:m,errorCount:_}},enabled:n&&!!r&&!!e,refetchInterval:p=>{const y=p.state.data;if(!y||y.totalResources===0)return 3e3;let m=0;for(const _ of Object.values(y.resources))(_===P.WatchStateSynced||_===P.WatchStateError||_===P.WatchStateStopped||_===P.WatchStateFailed||_===P.WatchStateForbidden||_===P.WatchStateSkipped)&&m++;return m>=y.totalResources?!1:3e3}});l.useEffect(()=>{if(!d.data||a.current)return;a.current=!0;const p=o.current;o.current=[];for(const y of p)c(y)},[d.data,c]),l.useEffect(()=>{if(!n||!r||!e)return;a.current=!1,o.current=[];const p=D.On(`${r}/${e}/watch/STATE`,y=>{const m=y.data;a.current?c(m):o.current.push(m)});return()=>{p(),a.current=!1,o.current=[]}},[r,e,n,c]);const u=d.data;let f=0;if(u!=null&&u.resources)for(const p of Object.values(u.resources))(p===P.WatchStateSynced||p===P.WatchStateError||p===P.WatchStateStopped||p===P.WatchStateFailed||p===P.WatchStateForbidden||p===P.WatchStateSkipped)&&f++;return{summary:d,getResourceState:p=>u==null?void 0:u.resources[p],isFullySynced:u?u.totalResources>0&&f===u.totalResources:!1,syncProgress:u&&u.totalResources>0?f/u.totalResources:0,errorCount:(u==null?void 0:u.errorCount)??0}},Vn=()=>{const[t,e]=l.useState(new Map),n=l.useRef(new Map),r=l.useRef(new Map),s=l.useCallback(d=>{const u=d.data,f=me(u),p=We(n.current,u),y=ye(p);if(e(m=>{const _=new Map(m);return _.set(f,y),_}),r.current.has(f)&&(clearTimeout(r.current.get(f)),r.current.delete(f)),ee(y)){const m=setTimeout(()=>{e(_=>{const g=new Map(_);return g.delete(f),g}),n.current.delete(f),r.current.delete(f)},5e3);r.current.set(f,m)}},[]);l.useEffect(()=>{const d=D.On("watch/STATE",s);return()=>{d();for(const u of r.current.values())clearTimeout(u)}},[s]);const i=Array.from(t.values()),o=Qe(i),a=i.find(d=>!ee(d))??i[0]??null,c=je(i);return{syncs:i,hasSyncing:o,primarySync:a,aggregateProgress:c}},et=()=>{const t=l.useContext(he);if(!t)throw new Error("useOperations must be used within an OperationsProvider");return t},Yn=({pluginID:t,connectionID:e,resourceKey:n})=>{const r=T(t),{showSnackbar:s}=U(),{addOperation:i,updateOperation:o}=et(),a=l.useRef(new Set),c=l.useCallback((f,p=!1)=>{var y,m,_;f.disposed||(f.disposed=!0,(y=f.unsubscribe)==null||y.call(f),(m=f.open)==null||m.cancel(),(_=f.attach)==null||_.cancel(),f.handle&&(E.CancelStreamAction(f.handle).catch(()=>{}),p&&o(f.handle,{status:"cancelled",message:"Cancelled",completedAt:Date.now()})),a.current.delete(f))},[o]);l.useEffect(()=>()=>{for(const f of a.current)c(f,!0)},[r,e,n,c]);const d=l.useCallback(async({actionID:f,id:p,namespace:y,label:m,params:_={}})=>{const g={disposed:!1,terminal:!1,sequence:0};a.current.add(g);try{g.open=E.StreamAction(r,e,n,f,N.ActionInput.createFrom({id:p,namespace:y,params:_}));const h=await g.open;if(g.open=void 0,g.disposed)return E.CancelStreamAction(h).catch(()=>{}),h;g.handle=h,i({id:h,label:m,resourceKey:n,resourceName:p,namespace:y,connectionID:e,status:"running",startedAt:Date.now()});const b=v=>{if(g.disposed||!Number.isSafeInteger(v.sequence)||v.sequence<=g.sequence)return;g.sequence=v.sequence;const O=v.event,w=O.data??{};if(O.type==="error"){g.terminal=!0;const R=Q(O.error);o(h,{status:z(R)?"cancelled":"error",message:R.title,completedAt:Date.now()}),j(s,R,m),c(g)}else if(O.type==="complete"){g.terminal=!0;const R=typeof w.message=="string"?w.message:`${m} completed`;o(h,{status:"completed",message:R,completedAt:Date.now()}),s(R,"success"),c(g)}else o(h,{message:typeof w.message=="string"?w.message:void 0,progress:typeof w.ready=="number"&&typeof w.desired=="number"?{ready:w.ready,desired:w.desired}:void 0})};g.unsubscribe=D.On(`action/stream/${h}`,v=>b(v.data)),g.attach=E.AttachStreamAction(h);const C=await g.attach;return g.attach=void 0,b(C),h}catch(h){if(g.terminal&&g.handle)return g.handle;throw g.disposed||(g.handle&&o(g.handle,{status:z(h)?"cancelled":"error",message:Q(h).title,completedAt:Date.now()}),j(s,h,`Failed to start "${f}"`)),c(g),h}},[r,e,n,i,o,s,c]),u=l.useCallback(f=>{for(const p of a.current)if(p.handle===f){c(p,!0);return}},[c]);return{startStreamAction:d,cancelStreamAction:u}};function tt(t,e){return`${t}/${e}/graph/CHANGED`}function oe(t,e,n,r){const s=S.useQueryClient(),i=l.useRef(n);i.current=n;const o=JSON.stringify(n);l.useEffect(()=>{if(!r||!t||!e)return;const a=D.On(tt(t,e),()=>{s.invalidateQueries({queryKey:i.current,exact:!0})});return()=>{a()}},[s,t,e,o,r])}const Jn={owns:{outgoing:"Owns",incoming:"Owned by"},runs_on:{outgoing:"Runs on",incoming:"Running here"},uses:{outgoing:"Uses",incoming:"Used by"},exposes:{outgoing:"Exposes",incoming:"Exposed by"},manages:{outgoing:"Manages",incoming:"Managed by"},member_of:{outgoing:"Member of",incoming:"Members"},selects:{outgoing:"Selects",incoming:"Selected by"}};function Xn(t,e){const n=Jn[t];if(n)return n[e];const r=t.replace(/_/g," ");return e==="outgoing"?r:`${r} (incoming)`}function Zn(t,e){return t.pluginId===e.pluginId&&t.connectionId===e.connectionId&&t.resourceKey===e.resourceKey&&t.id===e.id&&(t.namespace??"")===(e.namespace??"")}function nt(t,e){return e.map(n=>{const r=Zn(n.source,t);return{resource:r?n.target:n.source,type:n.type,direction:r?"outgoing":"incoming",label:n.label}})}const er=({pluginID:t,connectionID:e,resourceKey:n,resourceID:r,namespace:s="",direction:i="both",relationshipType:o,enabled:a=!0,refetchInterval:c=!1})=>{const d=T(t),u=["RESOURCE_RELATED",d,e,n,s,r,i,o??null],f=a&&!!d&&!!e&&!!n&&!!r;oe(d,e,u,f);const p=S.useQuery({queryKey:u,queryFn:async()=>E.GetRelated(d,e,n,s,r,i,o??null),enabled:f,refetchInterval:c}),y={pluginId:d,connectionId:e,resourceKey:n,id:r,namespace:s},m=p.data??[];return{related:nt(y,m),edges:m,isLoading:p.isLoading,isFetching:p.isFetching,error:p.error,refetch:p.refetch}},tr=({pluginID:t,connectionID:e,resourceKey:n,resourceID:r,namespace:s="",maxDepth:i=3,enabled:o=!0,refetchInterval:a=!1})=>{const c=T(t),d=["RESOURCE_DEPENDENCY_TREE",c,e,n,s,r,i],u=o&&!!c&&!!e&&!!n&&!!r;oe(c,e,d,u);const f=S.useQuery({queryKey:d,queryFn:async()=>E.GetDependencyTree(c,e,n,s,r,i),enabled:u,refetchInterval:a});return{tree:f.data??null,isLoading:f.isLoading,isFetching:f.isFetching,error:f.error,refetch:f.refetch}},nr=({pluginID:t,connectionID:e,resourceKey:n,resourceID:r,namespace:s="",upDepth:i=2,downDepth:o=3,enabled:a=!0})=>{const c=T(t),d=["RESOURCE_GRAPH",c,e,n,s,r,i,o],u=a&&!!c&&!!e&&!!n&&!!r;oe(c,e,d,u);const f=S.useQuery({queryKey:d,queryFn:async()=>E.GetSubgraph(c,e,n,s,r,i,o),enabled:u});return{graph:f.data??null,isLoading:f.isLoading,isFetching:f.isFetching,error:f.error,refetch:f.refetch}},rr=()=>{const t=l.useContext(ge);if(!t)throw new Error("useSettings must be used within a SettingsProvider");return t},sr=({to:t,withinContext:e,...n})=>{const{pluginId:r}=ne();r||console.error("Link used outside of a plugin context");const s=`/_plugin/${r}${t.startsWith("/")?"":"/"}${t}`;return l.useMemo(()=>x.jsx(H.Link,{style:{textDecoration:"none",color:"inherit"},...n,to:s}),[n,s])};function or(){const t=H.useNavigate(),e=H.useLocation(),{pluginId:n}=ne();n||console.error("usePluginRouter used outside of a plugin context");const r=`/_plugin/${n}`,s=e.pathname.startsWith(r)?e.pathname.slice(r.length)||"/":e.pathname,i=l.useCallback((o,a)=>{const{...c}=a??{};o.startsWith("/")?t(`${r}${o}`,c):t(o,c)},[t,r]);return l.useMemo(()=>({location:e,navigate:i,pluginPath:s}),[e,i,s])}class ir{}class ar{constructor(){L(this,"_extensions");L(this,"root");L(this,"pages");L(this,"_routes")}get extensions(){return this._extensions||[]}get Routes(){var e;if(!this._routes&&this.root)return[{path:"",index:!0,Component:this.root}];if(!((e=this._routes)!=null&&e.length))throw new Error("cannot use plugin without a root page or router");return this._routes}get Window(){if(!this._routes&&this.root)return x.jsx(this.root,{});const e=H.createMemoryRouter(this._routes||[]);return x.jsx(H.RouterProvider,{router:e})}registerExtensionPoints(e){return this._extensions=e||[],this}setRootPage(e){return this.root=e,this}withPage(e,n){return this.pages||(this.pages={}),this.pages[e]?(console.warn("Cannot register page with the same name. Please use a different name."),this):(this.pages[e]=n,this)}withRoutes(e){return this._routes=e,this}}var rt=(t=>(t.MISSING_MANIFEST="MISSING_MANIFEST",t.MISSING_PLUGIN="MISSING_PLUGIN",t.MISSING_ENTRYPOINT="MISSING_ENTRYPOINT",t))(rt||{});const cr=t=>{const e=t.split("::");return e.length===1?{group:"core",version:"",kind:e[0]}:{group:e[0]||"core",version:e[1]||"",kind:e[2]||e[0]}},ur=t=>!t||t==="core"?"Core":t.charAt(0).toUpperCase()+t.slice(1);exports.ALL_SESSIONS_KEY=W;exports.BottomDrawerContext=Fe;exports.ConfirmationModalContext=Ne;exports.ErrorTypes=F;exports.ExtensionPointRegistry=Ct;exports.ExtensionPointStore=qe;exports.ExtensionProvider=St;exports.Link=sr;exports.OperationsContext=he;exports.OperationsProvider=pt;exports.PluginContext=te;exports.PluginContextProvider=ut;exports.PluginErrorCode=rt;exports.PluginWindow=ar;exports.PluginWindowRootProps=ir;exports.RightDrawerContext=xe;exports.SettingsContext=ge;exports.SettingsProvider=dt;exports.SnackbarProvider=wt;exports.WatchState=P;exports.actionToSnackbar=Ae;exports.applyBatch=Xe;exports.connectionListQueryKey=$e;exports.createErrorHandler=M;exports.defaultState=De;exports.formatGroup=ur;exports.graphChangedEvent=tt;exports.isCancelledError=z;exports.parseAppError=Q;exports.parseResourceKey=cr;exports.relationshipLabel=Xn;exports.showAppError=j;exports.toRelatedResources=nt;exports.useActiveSyncs=Vn;exports.useBottomDrawer=Ee;exports.useConfirmationModal=kt;exports.useConnection=Rt;exports.useConnectionNamespaces=vt;exports.useConnectionStatus=It;exports.useConnections=bt;exports.useDependencyTree=tr;exports.useEditorSchemas=Hn;exports.useEventBatcher=Ze;exports.useExec=Tt;exports.useExecuteAction=Bn;exports.useExtensionPoint=Et;exports.useExtensionRegistry=ke;exports.useLogs=Dt;exports.useMetricProviders=Ft;exports.useMetricProvidersForResource=Ge;exports.useMetricStream=Nt;exports.useOperations=et;exports.usePluginContext=ne;exports.usePluginData=Pt;exports.usePluginRouter=or;exports.usePluginSettings=lt;exports.usePortForwardSessions=Lt;exports.useRefetchOnGraphChange=oe;exports.useRelatedResources=er;exports.useResolvedPluginId=T;exports.useResource=qt;exports.useResourceActions=Kn;exports.useResourceAreaComponent=Ut;exports.useResourceGraph=nr;exports.useResourceGroups=$t;exports.useResourceMetrics=xt;exports.useResourceMutations=Gn;exports.useResourcePortForwarder=Mt;exports.useResourceSearch=Qt;exports.useResourceType=jt;exports.useResourceTypes=Wt;exports.useResources=Wn;exports.useRightDrawer=At;exports.useSettings=rr;exports.useSnackbar=U;exports.useStreamAction=Yn;exports.useWatchState=zn;
1
+ "use strict";var at=Object.defineProperty;var ct=(t,e,n)=>e in t?at(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var M=(t,e,n)=>ct(t,typeof e!="symbol"?e+"":e,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const C=require("react/jsx-runtime"),l=require("react"),Y=require("react-router-dom");require("./index-D_aIcqH0.cjs");const E=require("./graphservice-1J8q3eeL.cjs"),L=require("./models-BQsuB2Lj.cjs"),D=require("./events-CtgYnKmS.cjs"),v=require("@tanstack/react-query"),N=require("@omniviewdev/base-ui"),ut=require("./legacyEnum-DkV5yRdA.cjs"),re=l.createContext(void 0),F={PLUGIN_NOT_FOUND:"omniview:plugin/not-found",PLUGIN_NOT_LOADED:"omniview:plugin/not-loaded",PLUGIN_ALREADY_LOADED:"omniview:plugin/already-loaded",PLUGIN_INSTALL_FAILED:"omniview:plugin/install-failed",PLUGIN_LOAD_FAILED:"omniview:plugin/load-failed",PLUGIN_BUILD_FAILED:"omniview:plugin/build-failed",PLUGIN_COMMITTED_CLEANUP_PENDING:"omniview:plugin/committed-cleanup-pending",PLUGIN_COMMIT_UNCERTAIN:"omniview:plugin/commit-uncertain",SETTINGS_MISSING_CONFIG:"omniview:settings/missing-config",SETTINGS_INVALID_CONFIG:"omniview:settings/invalid-config",RESOURCE_NOT_FOUND:"omniview:resource/not-found",RESOURCE_FORBIDDEN:"omniview:resource/forbidden",RESOURCE_UNAUTHORIZED:"omniview:resource/unauthorized",RESOURCE_CONFLICT:"omniview:resource/conflict",RESOURCE_TIMEOUT:"omniview:resource/timeout",RESOURCE_LIMIT:"omniview:resource/limit",RESOURCE_CONTINUATION_EXPIRED:"omniview:resource/continuation-expired",RESOURCE_RESET_REQUIRED:"omniview:resource/reset-required",RESOURCE_PARTIAL:"omniview:resource/partial",RESOURCE_PROVIDER_ERROR:"omniview:resource/provider-error",CONNECTION_NOT_FOUND:"omniview:connection/not-found",CONNECTION_FAILED:"omniview:connection/failed",SESSION_NOT_FOUND:"omniview:session/not-found",SESSION_FAILED:"omniview:session/failed",CANCELLED:"omniview:cancelled",INTERNAL:"omniview:internal",VALIDATION:"omniview:validation",NOT_IMPLEMENTED:"omniview:not-implemented"},Re={INVALID_REQUEST:[F.VALIDATION,400,"correctRequest"],UNSUPPORTED:[F.NOT_IMPLEMENTED,501,"refreshContract"],FORBIDDEN:[F.RESOURCE_FORBIDDEN,403,"none"],UNAUTHORIZED:[F.RESOURCE_UNAUTHORIZED,401,"none"],NOT_FOUND:[F.RESOURCE_NOT_FOUND,404,"none"],CONFLICT:[F.RESOURCE_CONFLICT,409,"refreshContract"],ALREADY_EXISTS:[F.RESOURCE_CONFLICT,409,"refreshContract"],CANCELLED:[F.CANCELLED,499,"none"],TIMEOUT:[F.RESOURCE_TIMEOUT,408,"none"],UNAVAILABLE:[F.CONNECTION_FAILED,503,"reconnect"],CONNECTION_ERROR:[F.CONNECTION_FAILED,503,"reconnect"],CERTIFICATE_ERROR:[F.CONNECTION_FAILED,502,"reconnect"],RESOURCE_LIMIT:[F.RESOURCE_LIMIT,429,"correctRequest"],CONTINUATION_EXPIRED:[F.RESOURCE_CONTINUATION_EXPIRED,410,"restartQuery"],RESET_REQUIRED:[F.RESOURCE_RESET_REQUIRED,409,"restartQuery"],PARTIAL_RESULT:[F.RESOURCE_PARTIAL,422,"none"],PROVIDER_ERROR:[F.RESOURCE_PROVIDER_ERROR,502,"none"],INTERNAL:[F.INTERNAL,500,"none"]};function ue(t){return typeof t=="object"&&t!==null?t:void 0}function Q(t,e){return typeof t=="string"&&t.length>0&&t.length<=e}function le(){return{type:F.CANCELLED,code:"CANCELLED",title:"Cancelled",status:499,detail:"The operation was cancelled.",recovery:"none"}}function te(t,e){if(e>4)return;if(t==="cancelled")return le();if(typeof t=="string"){const r=t.trim();if(!r.startsWith("{"))return;try{return te(JSON.parse(r),e+1)}catch{return}}const n=ue(t);if(n){if(n.name==="AbortError"||n.name==="CancelError")return le();if(Q(n.type,256)&&Q(n.title,256)&&typeof n.status=="number"&&Number.isInteger(n.status)&&n.status>=100&&n.status<=599&&typeof n.detail=="string"&&n.detail.length<=4096){const r={type:n.type,title:n.title,status:n.status,detail:n.detail};Q(n.code,64)&&(r.code=n.code),Q(n.requestId,256)&&(r.requestId=n.requestId),Q(n.instance,512)&&(r.instance=n.instance),Array.isArray(n.suggestions)&&(r.suggestions=n.suggestions.filter(i=>Q(i,512)).slice(0,8)),Array.isArray(n.actions)&&(r.actions=n.actions.filter(i=>{const o=ue(i);return!!o&&["navigate","retry","open-url","copy"].includes(String(o.type))&&Q(o.label,256)&&(o.target===void 0||Q(o.target,4096))}).slice(0,8)),["correctRequest","refreshContract","restartQuery","reconnect","none"].includes(String(n.recovery))&&(r.recovery=n.recovery);const s=ue(n.location);return(s==null?void 0:s.unit)==="utf8-byte"&&typeof s.start=="number"&&typeof s.end=="number"&&Number.isSafeInteger(s.start)&&Number.isSafeInteger(s.end)&&s.start>=0&&s.end>=s.start&&(r.location={start:s.start,end:s.end,unit:"utf8-byte"}),r}if(typeof n.code=="string"&&typeof n.title=="string"&&typeof n.message=="string"){let r=n.code;if(r==="PERMISSION_DENIED"&&(r="FORBIDDEN"),["INVALID_INPUT","FILTER_UNKNOWN_FIELD","FILTER_INVALID_OPERATOR"].includes(r)&&(r="INVALID_REQUEST"),Object.prototype.hasOwnProperty.call(Re,r)||(r="INTERNAL"),r==="CANCELLED")return le();const[s,i,o]=Re[r],a=r==="FORBIDDEN"||r==="UNAUTHORIZED"||r==="INTERNAL"||r==="PROVIDER_ERROR";return{type:s,status:i,code:r,recovery:o,title:a?r==="FORBIDDEN"?"Access denied":r==="UNAUTHORIZED"?"Authentication required":"Operation failed":Q(n.title,256)?n.title:"Operation failed",detail:a?"The operation could not be completed.":Q(n.message,4096)?n.message:"The operation could not be completed.",...!a&&Array.isArray(n.suggestions)?{suggestions:n.suggestions.filter(c=>Q(c,512)).slice(0,8)}:{}}}return te(n.message,e+1)??te(n.cause,e+1)}}function W(t){return te(t,0)??{type:F.INTERNAL,title:t==null?"Unknown error":"Error",status:500,detail:t==null?"An unknown error occurred.":"The operation could not be completed."}}function V(t){return W(t).type===F.CANCELLED}function Ae(t){switch(t.type){case"navigate":return{label:t.label,onClick:()=>{window.location.hash=t.target??""}};case"open-url":return{label:t.label,onClick:()=>{window.open(t.target,"_blank")}};case"copy":return{label:t.label,onClick:()=>{navigator.clipboard.writeText(t.target??"")}};case"retry":return{label:t.label,onClick:()=>{}};default:return{label:t.label,onClick:()=>{}}}}function De(t,e){var s,i;const n=[t.detail,...((s=t.suggestions)==null?void 0:s.map(o=>`• ${o}`))??[]].join(`
2
+ `);return{message:e||(t.title!=="Error"?t.title:"Operation failed"),status:"error",details:n,actions:(i=t.actions)==null?void 0:i.map(Ae)}}function G(t,e,n){if(V(e))return;const r=W(e);t(De(r,n))}function q(t,e){return n=>{if(V(n))return;const r=W(n);t(De(r,r.title!=="Error"?r.title:e))}}function lt(t){const{children:e,pluginId:n}=t,[r,s]=l.useState({}),[i,o]=l.useState(new L.PluginMeta),[a,c]=l.useState(!1),[f,d]=l.useState(null),p=l.useRef(0),g=l.useRef(0);console.debug("[PluginContextProvider] render",{pluginId:n,metaLoaded:a,metaError:!!f});const y=l.useCallback(()=>{if(n===void 0||n==="")return;const _=++p.current;console.debug(`[PluginContextProvider] fetching settings for "${n}"`),E.PluginValues(n).then(u=>{_===p.current&&(console.debug(`[PluginContextProvider] settings loaded for "${n}"`,Object.keys(u)),s(u))}).catch(u=>{if(_!==p.current)return;const h=W(u);console.error(`[PluginContextProvider] error fetching settings for "${n}":`,h.detail)})},[n]),S=l.useCallback(()=>{if(n===void 0||n===""){console.debug("[PluginContextProvider] skipping meta fetch — empty pluginId");return}const _=++g.current;console.debug(`[PluginContextProvider] fetching meta for "${n}"`),d(null),E.GetPluginMeta(n).then(u=>{_===g.current&&(console.debug(`[PluginContextProvider] meta loaded for "${n}"`,{name:u==null?void 0:u.name,version:u==null?void 0:u.version}),o(u),c(!0))}).catch(u=>{if(_!==g.current)return;const h=W(u);console.error(`[PluginContextProvider] error fetching meta for "${n}":`,h.detail),d(h.detail),c(!1)})},[n]);return l.useEffect(()=>{if(a)return;const _=()=>{y(),S()},u=[D.On("plugin/init_complete",_),D.On("plugin/dev_install_complete",h=>{var R;((R=h.data)==null?void 0:R.id)===n&&_()}),D.On("plugin/inventory_changed",_)];return()=>{for(const h of u)h()}},[n,a,y,S]),l.useEffect(()=>(console.debug(`[PluginContextProvider] useEffect — pluginId changed to "${n}"`),c(!1),d(null),s({}),y(),S(),()=>{++p.current,++g.current}),[n,y,S]),f?C.jsx("div",{style:{display:"flex",flex:1,alignItems:"center",justifyContent:"center",padding:24},children:C.jsxs("div",{style:{maxWidth:480,width:"100%",border:"1px solid #7F1D1D",borderRadius:8,backgroundColor:"#1C1917",padding:20,fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},children:[C.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:12},children:[C.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"#EF4444",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[C.jsx("circle",{cx:"12",cy:"12",r:"10"}),C.jsx("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),C.jsx("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]}),C.jsx("span",{style:{fontSize:14,fontWeight:600,color:"#FECACA"},children:"Plugin failed to load"})]}),C.jsx("p",{style:{fontSize:13,color:"#A1A1AA",margin:"0 0 16px"},children:f}),C.jsx("button",{onClick:()=>S(),style:{background:"transparent",color:"#F87171",border:"1px solid #7F1D1D",borderRadius:6,padding:"6px 14px",fontSize:13,fontWeight:500,cursor:"pointer"},children:"Retry"})]})}):a?C.jsx(re.Provider,{value:{pluginId:n,settings:r,meta:i},children:e}):C.jsxs("div",{style:{display:"flex",flex:1,alignItems:"center",justifyContent:"center"},children:[C.jsx("div",{style:{width:24,height:24,border:"2px solid #3F3F46",borderTopColor:"#A1A1AA",borderRadius:"50%",animation:"plugin-spin 0.8s linear infinite"}}),C.jsx("style",{children:"@keyframes plugin-spin { to { transform: rotate(360deg); } }"})]})}function se(){const t=l.useContext(re);if(!t)throw new Error("usePluginContext must be used within a PluginContextProvider");return t}function dt(){return se().settings}const me=l.createContext(void 0),ft=({children:t})=>{const[e,n]=l.useState({}),r=l.useRef(0),s=l.useCallback(()=>{const o=r.current+1;r.current=o,E.Values().then(a=>{o===r.current&&n(a)}).catch(a=>{o===r.current&&console.error("Error fetching settings:",a)})},[]);l.useEffect(()=>{const o=D.On("settings/changed",()=>s());return s(),()=>{r.current+=1,o()}},[s]);const i=l.useCallback(()=>{s()},[s]);return C.jsx(me.Provider,{value:{settings:e,reload:i},children:t})},Fe={height:32,focused:0,tabs:[],createTab:()=>{},createTabs:()=>{},updateTab:()=>{},focusTab:()=>{},reorderTab:()=>{},closeTab:()=>{},closeTabs:()=>{},resizeDrawer:()=>{},closeDrawer:()=>{},fullscreenDrawer:()=>{}},Ne=l.createContext(Fe),Le=l.createContext(void 0),ke=l.createContext(void 0),Ee=l.createContext(void 0),pt=3e4,ht=({children:t})=>{const[e,n]=l.useState([]),r=l.useCallback(a=>{n(c=>[a,...c])},[]),s=l.useCallback((a,c)=>{n(f=>f.map(d=>d.id===a?{...d,...c}:d))},[]),i=l.useCallback(a=>{n(c=>c.filter(f=>f.id!==a))},[]);l.useEffect(()=>{const a=[];for(const c of e)if(c.status!=="running"){const f=Date.now()-(c.completedAt??c.startedAt),d=Math.max(0,pt-f);a.push(setTimeout(()=>i(c.id),d))}return()=>a.forEach(clearTimeout)},[e,i]);const o=l.useMemo(()=>({operations:e,addOperation:r,updateOperation:s,removeOperation:i}),[e,r,s,i]);return C.jsx(Ee.Provider,{value:o,children:t})};var he=function(t,e){return he=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(n[s]=r[s])},he(t,e)};function gt(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");he(t,e);function n(){this.constructor=t}t.prototype=e===null?Object.create(e):(n.prototype=e.prototype,new n)}var de="Invariant Violation",xe=Object.setPrototypeOf,yt=xe===void 0?function(t,e){return t.__proto__=e,t}:xe,mt=function(t){gt(e,t);function e(n){n===void 0&&(n=de);var r=t.call(this,typeof n=="number"?de+": "+n+" (see https://github.com/apollographql/invariant-packages)":n)||this;return r.framesToPop=1,r.name=de,yt(r,e.prototype),r}return e}(Error);function ge(t,e){if(!t)throw new mt(e)}var Me=["debug","log","warn","error","silent"],Et=Me.indexOf("log");function X(t){return function(){if(Me.indexOf(t)>=Et){var e=console[t]||console.log;return e.apply(console,arguments)}}}(function(t){t.debug=X("debug"),t.log=X("log"),t.warn=X("warn"),t.error=X("error")})(ge||(ge={}));const qe=l.createContext(void 0),Ue=()=>l.useContext(qe);function St(t){const e=Ue(),n=l.useRef(null),r=e==null?void 0:e.getExtensionPoint(t),s=l.useCallback(o=>{const a=[];return e&&a.push(e.subscribe(o)),r&&a.push(r.subscribe(o)),()=>{for(const c of a)c()}},[e,t,r]),i=l.useCallback(()=>{const o=e==null?void 0:e.getExtensionPoint(t);if(!o){if(n.current&&n.current.store===void 0)return n.current.sentinel;const f={};return n.current={store:void 0,version:-1,sentinel:f},f}const a=n.current;if(a&&a.store===o&&a.version===o.version)return a.sentinel;const c={};return n.current={store:o,version:o.version,sentinel:c},c},[e,t]);return l.useSyncExternalStore(s,i),e==null?void 0:e.getExtensionPoint(t)}const Ct=({registry:t,children:e})=>{const n=l.useRef(t);return ge(n.current===t,"You can't change the extension registry after it has been rendered"),C.jsx(qe.Provider,{value:n.current,children:e})},fe=t=>{if(!t||typeof t!="string")throw new TypeError(`extensionName is required to be a string and can't be: "${t}" (${typeof t})`);return t.trim()};class je{constructor(e){M(this,"id");M(this,"mode");M(this,"_pluginId");M(this,"_version",0);M(this,"_contributions",new Map);M(this,"_lookupCache",new Map);M(this,"_matcher");M(this,"_select");M(this,"_listeners",new Set);this.id=e.id,this.mode=e.mode??"multiple",this._pluginId=e.pluginId,this._matcher=e.matcher,this._select=e.select}get pluginId(){return this._pluginId}get version(){return this._version}register(e){if(this._contributions.has(e.id))throw new Error(`Contribution with id "${e.id}" already exists in extension point "${this.id}"`);this._contributions.set(e.id,e),this._invalidateCache(),this._notify()}unregister(e){this._contributions.delete(e)&&(this._invalidateCache(),this._notify())}provide(e){return this._getMatched(e).map(r=>r.value)}list(e){return this._getMatched(e)}listAll(){return Array.from(this._contributions.values())}subscribe(e){return this._listeners.add(e),()=>{this._listeners.delete(e)}}removeContributionsByPlugin(e){let n=!1;for(const[r,s]of this._contributions)s.plugin===e&&(this._contributions.delete(r),n=!0);n&&(this._invalidateCache(),this._notify())}_getMatched(e){const n=this._getCacheKey(e);if(n!=null){const s=this._lookupCache.get(n);if(s){const i=s.map(o=>this._contributions.get(o)).filter(o=>o!=null);return this._applyMode(i,e)}}let r=this._sortDeterministic(Array.from(this._contributions.values()));return this._matcher&&e!==void 0&&(r=r.filter(s=>this._matcher(s,e))),n!=null&&this._lookupCache.set(n,r.map(s=>s.id)),this._applyMode(r,e)}_applyMode(e,n){if(this.mode==="single"){if(this._select){const r=this._select(e,n);return r?[r]:[]}return e.length>0?[e[0]]:[]}return e}_sortDeterministic(e){return[...e].sort((n,r)=>{const s=n.plugin.localeCompare(r.plugin);return s!==0?s:n.id.localeCompare(r.id)})}_getCacheKey(e){if(e!=null&&typeof e=="object"&&"getCacheKey"in e){const n=e.getCacheKey;if(typeof n=="function")return n()}}_invalidateCache(){this._lookupCache.clear()}_notify(){this._version++;for(const e of this._listeners)e()}}class vt{constructor(e){M(this,"_stores",new Map);M(this,"_storeUnsubs",new Map);M(this,"_listeners",new Set);if(e!=null&&e.initialStores)for(const n of e.initialStores)this.addExtensionPoint(n)}addExtensionPoint(e){const n=fe(e.id);if(this._stores.has(n)){const s=this._stores.get(n);throw new Error(`Extension point "${n}" already exists (owned by "${s.pluginId??"unknown"}")`)}const r=new je({...e,id:n});this._stores.set(n,r),this._storeUnsubs.set(n,r.subscribe(()=>this._notify())),this._notify()}getExtensionPoint(e){const n=fe(e);return this._stores.get(n)}hasExtensionPoint(e){const n=fe(e);return this._stores.has(n)}listExtensionPoints(){return Array.from(this._stores.keys())}removeExtensionPoints(e){var r;let n=!1;for(const[s,i]of this._stores)i.pluginId===e&&((r=this._storeUnsubs.get(s))==null||r(),this._storeUnsubs.delete(s),this._stores.delete(s),n=!0);n&&this._notify()}removeContributions(e){for(const n of this._stores.values())n.removeContributionsByPlugin(e);this._notify()}subscribe(e){return this._listeners.add(e),()=>{this._listeners.delete(e)}}_notify(){for(const e of this._listeners)e()}}const j={Panel:{position:"fixed",right:"var(--ov-space-3)",bottom:36,zIndex:"calc(var(--ov-z-toast, 9999) + 1)",width:"min(480px, calc(100vw - 24px))",minWidth:0,maxHeight:"min(560px, calc(100dvh - 64px))",display:"flex",flexDirection:"column",overflow:"hidden",padding:0},Header:{flex:"none",gap:"var(--ov-space-2)",paddingInline:"var(--ov-space-3)",background:"var(--ov-color-bg-surface-raised)",borderBottom:"1px solid var(--ov-color-border-muted)"},HeaderActions:{marginLeft:"auto"},List:{minHeight:0,overflowY:"auto",overscrollBehavior:"contain"},Notice:{borderTop:"1px solid var(--ov-color-border-muted)"},Row:{display:"flex",alignItems:"center",gap:"var(--ov-space-1)",padding:"var(--ov-space-2) var(--ov-space-2) var(--ov-space-2) var(--ov-space-3)"},ErrorIcon:{flex:"none",color:"var(--ov-color-danger)"},Message:{flex:1,minWidth:0,justifyContent:"flex-start",textAlign:"left"},MessageText:{minWidth:0,overflowWrap:"anywhere"},Details:{padding:"0 var(--ov-space-3) var(--ov-space-3) 36px"},Code:{display:"block",margin:"var(--ov-space-2) 0",padding:"var(--ov-space-3)",maxHeight:240,overflow:"auto",whiteSpace:"pre-wrap",overflowWrap:"anywhere",lineHeight:1.5,userSelect:"text"},Actions:{display:"flex",flexWrap:"wrap",gap:"var(--ov-space-2)"},CopyError:{margin:0,padding:"var(--ov-space-3)",borderTop:"1px solid var(--ov-color-border-muted)"}},$e=l.createContext(void 0),wt={default:"info",info:"info",success:"success",warning:"warning",error:"danger"},_t=({children:t})=>{const{toast:e}=N.useToast(),[n,r]=l.useState([]),[s,i]=l.useState([]),[o,a]=l.useState(!1),[c,f]=l.useState(),[d,p]=l.useState(""),g=l.useRef(Date.now()),y=l.useRef(null);l.useEffect(()=>{var R;if(!o)return;const u=document.activeElement;(R=y.current)==null||R.focus();const h=m=>{m.key==="Escape"&&(m.stopPropagation(),a(!1))};return document.addEventListener("keydown",h),()=>{document.removeEventListener("keydown",h),u instanceof HTMLElement&&u.isConnected&&u.focus()}},[o]);const S=u=>{r(h=>[...h,u])},_=(u,h,R)=>{const m=typeof u=="object";let w="",x="info",b,I=5e3,O;if(m){if(w=u.message,u.showOnce){if(n.includes(w))return;S(w)}x=u.status,b=u.details,I=u.autoHideDuration??5e3,O=u.actions}else w=u,x=h,b=R;let P;if(x==="error"){const U={id:++g.current,message:w,details:b,created:new Date().toISOString(),actions:O};i(k=>[...k,U].slice(-20)),P={label:"Details",onClick:()=>{f(U.id),a(!0)}}}e(x==="error"?w:b??w,{severity:wt[x]??"info",title:x!=="error"&&b?w:void 0,duration:I,action:P??(O==null?void 0:O[0])})};return C.jsxs($e.Provider,{value:{showSnackbar:_,openNotifications:()=>{a(!0)},notificationCount:s.length},children:[t,o&&C.jsxs(N.Card,{ref:y,style:j.Panel,size:"sm",variant:"outline",surface:"overlay",elevation:3,"aria-label":"Notifications",tabIndex:-1,children:[C.jsxs(N.Toolbar,{size:"sm",style:j.Header,children:[C.jsx(N.Text,{size:"sm",weight:"semibold",children:"Notifications"}),C.jsx(N.Text,{size:"xs",tone:"muted",children:s.length}),C.jsxs(N.Toolbar.Group,{style:j.HeaderActions,children:[C.jsx(N.IconButton,{size:"sm",variant:"ghost","aria-label":"Clear history",title:"Clear history",disabled:s.length===0,onClick:()=>{i([]),f(void 0),p("")},children:C.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5","aria-hidden":"true",children:C.jsx("path",{d:"m3 3 6 6m0-6L3 9M13 6h8M3 14h18M3 20h18"})})}),C.jsx(N.IconButton,{size:"sm",variant:"ghost","aria-label":"Close notifications",title:"Close notifications",onClick:()=>{a(!1)},children:C.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5","aria-hidden":"true",children:C.jsx("path",{d:"m6 9 6 6 6-6"})})})]})]}),C.jsxs("div",{style:j.List,children:[s.length===0&&C.jsx(N.EmptyState,{size:"sm",title:"No recent errors",description:"Error details will appear here."}),s.slice().reverse().map(u=>{var R,m;const h=c===u.id;return C.jsxs("div",{style:j.Notice,children:[C.jsxs("div",{style:j.Row,children:[C.jsxs("svg",{style:j.ErrorIcon,width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5","aria-label":"Error",role:"img",children:[C.jsx("circle",{cx:"12",cy:"12",r:"9"}),C.jsx("path",{d:"m9 9 6 6m0-6-6 6"})]}),C.jsx(N.Button,{size:"sm",variant:"ghost",style:j.Message,"aria-expanded":h,"aria-controls":`notification-${u.id}`,title:u.message,onClick:()=>{f(h?void 0:u.id),p("")},children:C.jsx(N.Text,{size:"sm",style:j.MessageText,truncate:!h,children:u.message})}),C.jsx(N.IconButton,{size:"sm",variant:"ghost","aria-label":h?"Collapse details":"Expand details",title:h?"Collapse details":"Expand details","aria-expanded":h,"aria-controls":`notification-${u.id}`,onClick:()=>{f(h?void 0:u.id),p("")},children:C.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5","aria-hidden":"true",children:C.jsx("path",{d:h?"m6 15 6-6 6 6":"m6 9 6 6 6-6"})})}),C.jsx(N.IconButton,{size:"sm",variant:"ghost","aria-label":`Dismiss ${u.message}`,title:"Dismiss notification",onClick:()=>{i(w=>w.filter(x=>x.id!==u.id)),h&&(f(void 0),p(""))},children:C.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5","aria-hidden":"true",children:C.jsx("path",{d:"m6 6 12 12m0-12L6 18"})})})]}),C.jsx("div",{id:`notification-${u.id}`,hidden:!h,style:j.Details,children:h&&C.jsxs(C.Fragment,{children:[C.jsx(N.Text,{size:"xs",tone:"muted",children:C.jsx("time",{dateTime:u.created,children:new Date(u.created).toLocaleString()})}),C.jsx(N.Code,{size:"sm",style:j.Code,children:(R=u.details)!=null&&R.length?u.details:u.message}),C.jsxs("div",{style:j.Actions,children:[C.jsx(N.Button,{size:"sm",variant:"ghost",onClick:async()=>{p("");try{await navigator.clipboard.writeText(`${u.message}
3
+ ${u.created}
4
+ ${u.details??""}`)}catch{p("Copy failed. Select the diagnostic text and copy it manually.")}},children:"Copy details"}),(m=u.actions)==null?void 0:m.map((w,x)=>C.jsx(N.Button,{size:"sm",variant:"outline",onClick:w.onClick,children:w.label},`${w.label}-${x}`))]})]})})]},u.id)})]}),d&&C.jsx(N.Text,{as:"p",size:"sm",role:"status",style:j.CopyError,children:d})]})]})},$=()=>{const t=l.useContext($e);if(t===void 0)throw new Error("useCustomSnackbar must be used within a CustomSnackbarProvider");return t};function A(t){const e=l.useContext(re),n=(e==null?void 0:e.pluginId)??t;if(!n)throw new Error("pluginID must be provided either via PluginContext or as an explicit parameter");return n}const bt=({pluginID:t,connectionID:e})=>{const n=A(t),r=v.useQueryClient(),{showSnackbar:s}=$(),i=[n,"connection","detail",e],{mutateAsync:o}=v.useMutation({mutationFn:async()=>E.StartConnection(n,e),onSuccess(p){r.setQueryData(i,p),r.invalidateQueries({queryKey:["EDITOR_SCHEMAS",n,e]})},onError:q(s,"Failed to start connection")}),{mutateAsync:a}=v.useMutation({mutationFn:async()=>E.StopConnection(n,e),onSuccess(p){r.setQueryData(i,p)},onError:q(s,"Failed to stop connection")}),{mutateAsync:c}=v.useMutation({mutationFn:async p=>E.UpdateConnection(n,p),onSuccess(p,{name:g}){s({message:`Connection ${g} successfully updated`,status:"success"}),r.setQueryData(i,p),r.setQueriesData({queryKey:[n,"connection","list"]},y=>y==null?void 0:y.map(S=>S.id===e?p:S))},onError:q(s,"Failed to update connection")}),{mutateAsync:f}=v.useMutation({mutationFn:async()=>E.RemoveConnection(n,e),onSuccess(){s({message:"Connection successfully removed",status:"success"}),r.setQueryData(i,void 0),r.setQueriesData({queryKey:[n,"connection","list"]},p=>p==null?void 0:p.filter(g=>g.id!==e))},onError:q(s,"Failed to remove connection")});return{connection:v.useQuery({queryKey:i,queryFn:async()=>E.GetConnection(n,e)}),startConnection:o,stopConnection:a,updateConnection:c,deleteConnection:f}},Qe=t=>[t,"connection","list"],Rt=({plugin:t})=>{const e=A(t),n=v.useQueryClient(),{showSnackbar:r}=$(),s=Qe(e),{mutateAsync:i}=v.useMutation({mutationFn:async f=>E.StartConnectionWatch(e,f.id),onError:q(r,"Failed to start connection watch")}),{mutateAsync:o}=v.useMutation({mutationFn:async f=>E.StopConnectionWatch(e,f.id),onError:q(r,"Failed to stop connection watch")}),a=l.useCallback(f=>{const d=f.data;console.log("got update to connections",d),n.setQueryData(s,d)},[n,s]);return l.useEffect(()=>{const f=D.On(`${e}/connection/sync`,a);return()=>{f()}},[e,a]),{connections:v.useQuery({queryKey:s,queryFn:async()=>{try{return await E.ListConnections(e)}catch(f){console.log(f),q(r,"Failed to load connections")(f)}return[]},staleTime:3e4,placeholderData:v.keepPreviousData}),startWatch:i,stopWatch:o}},xt=({pluginID:t,connectionID:e})=>{const n=A(t),r=[n,"connection","namespaces",e];return{namespaces:v.useQuery({queryKey:r,queryFn:async()=>E.GetConnectionNamespaces(n,e)})}},T=ut.withLegacyNames(L.WatchState,"WatchState");function ye(t){const e=Object.values(t.states),n=e.length;let r=0,s=0,i=0,o=0;for(const d of e)d===T.WatchStateSynced&&r++,(d===T.WatchStateError||d===T.WatchStateFailed)&&s++,d===T.WatchStateForbidden&&i++,d===T.WatchStateSkipped&&o++;const a=n-o,c=e.filter(d=>d===T.WatchStateSynced||d===T.WatchStateError||d===T.WatchStateStopped||d===T.WatchStateFailed||d===T.WatchStateForbidden).length,f=a>0?c/a:0;return{pluginID:t.pluginID,connectionID:t.connectionID,totalResources:n,watchedTotal:a,syncedCount:r,errorCount:s,forbiddenCount:i,skippedCount:o,doneCount:c,progress:f}}function ne(t){return t.watchedTotal>0&&t.doneCount>=t.watchedTotal}function We(t){return t.some(e=>!ne(e))}function Ge(t){const e=t.reduce((r,s)=>r+s.watchedTotal,0);return e===0?0:t.reduce((r,s)=>r+s.doneCount,0)/e}function Se(t){return`${t.pluginId}/${t.connection}`}function Be(t,e){const n=Se(e);t.has(n)||t.set(n,{states:{},pluginID:e.pluginId,connectionID:e.connection});const r=t.get(n);return r.states[e.resourceKey]=e.state,r}function It(){const[t,e]=l.useState(new Set),[n,r]=l.useState({}),[s,i]=l.useState(new Map),o=l.useRef(new Map),[a,c]=l.useState(new Map);l.useEffect(()=>{const m=D.On("plugin/crash_recovery_failed",x=>{const b=x.data,I=b==null?void 0:b.pluginID;I&&c(O=>{const P=new Map(O);return P.set(I,b.error??"Crash recovery failed"),P})}),w=D.On("plugin/recovered",x=>{const b=x.data,I=b==null?void 0:b.pluginID;I&&c(O=>{if(!O.has(I))return O;const P=new Map(O);return P.delete(I),P})});return()=>{m(),w()}},[]),l.useEffect(()=>{E.GetAllConnectionStates().then(m=>{if(!m)return;const w={},x=new Set,b=new Map;for(const[I,O]of Object.entries(m))if(O){w[I]=O.map(P=>P.connection);for(const P of O){if(!P.started)continue;const U=`${I}/${P.connection.id}`;x.add(U);const k={pluginID:I,connectionID:P.connection.id,states:{}};if(P.resources)for(const[ce,it]of Object.entries(P.resources))k.states[ce]=it;o.current.set(U,k),b.set(U,ye(k))}}r(w),e(x),i(b)}).catch(()=>{})},[]),l.useEffect(()=>D.On("connection/status",w=>{const x=w.data,b=`${x.pluginID}/${x.connectionID}`;x.status==="DISCONNECTED"?(e(I=>{const O=new Set(I);return O.delete(b),O}),i(I=>{const O=new Map(I);return O.delete(b),O}),o.current.delete(b)):e(I=>{const O=new Set(I);return O.add(b),O}),E.ListAllConnections().then(I=>{if(!I)return;const O={};for(const[P,U]of Object.entries(I))U!=null&&(O[P]=U);r(O)}).catch(()=>{})}),[]);const f=l.useCallback(m=>{const w=m.data,x=Se(w);e(O=>{if(O.has(x))return O;const P=new Set(O);return P.add(x),P});const b=Be(o.current,w),I=ye(b);i(O=>{const P=new Map(O);return P.set(x,I),P})},[]);l.useEffect(()=>D.On("watch/STATE",f),[f]);const d=l.useCallback(async(m,w)=>{await E.StopConnection(m,w)},[]),p=l.useCallback(async(m,w)=>{await E.StartConnectionWatch(m,w)},[]),g=l.useCallback(async m=>{const w=a.get(m);c(x=>{if(!x.has(m))return x;const b=new Map(x);return b.delete(m),b});try{await E.RetryFailedPlugin(m)}catch(x){throw c(b=>{const I=new Map(b);return I.set(m,w??"Reload failed"),I}),x}},[a]),y=[];for(const m of t){const[w,x]=m.split("/",2),I=(n[w]??[]).find(ce=>ce.id===x),O=s.get(m),P=O!=null&&!ne(O),U=O!=null&&O.errorCount>0,k=a.get(w);y.push({pluginID:w,connectionID:x,name:(I==null?void 0:I.name)??x,avatar:(I==null?void 0:I.avatar)??"",isStarted:!0,sync:O,isSyncing:P,hasErrors:U||k!=null,pluginFailed:k!=null,pluginError:k})}const S=new Map;for(const m of y){const w=S.get(m.pluginID)??[];w.push(m),S.set(m.pluginID,w)}const _=Array.from(s.values()),u=y.filter(m=>m.isSyncing),h=y.filter(m=>m.hasErrors),R=y.filter(m=>m.pluginFailed);return{entries:y,grouped:S,connectedCount:y.length,syncingCount:u.length,errorCount:h.length,failedCount:R.length,hasSyncing:We(_),aggregateProgress:Ge(_),disconnect:d,retryWatch:p,retryPlugin:g}}function Ot(t,e){return e===null?t===null:Array.isArray(e)?Array.isArray(t):typeof e=="object"?typeof t=="object"&&t!==null&&!Array.isArray(t):typeof t==typeof e}function Tt(t,e,n){const r=A(t),s=v.useQueryClient(),i=[r,"data",e],o=v.useQuery({queryKey:i,queryFn:async()=>{const c=await E.Get(r,e);return c==null?n:Ot(c,n)?c:(console.warn(`[usePluginData] stored value for "${e}" has unexpected type (expected ${Array.isArray(n)?"array":typeof n}, got ${Array.isArray(c)?"array":typeof c}). Using default.`),n)}}),a=v.useMutation({mutationFn:async c=>{await E.Set(r,e,c)},onMutate:async c=>{await s.cancelQueries({queryKey:i});const f=s.getQueryData(i);return s.setQueryData(i,c),{previous:f}},onError:(c,f,d)=>{(d==null?void 0:d.previous)!==void 0&&s.setQueryData(i,d.previous)},onSettled:()=>{s.invalidateQueries({queryKey:i})}});return{data:o.data??n,update:async c=>{await a.mutateAsync(c)},isLoading:o.isLoading}}const Pt=()=>{const t=l.useContext(Le);if(!t)throw new Error("useRightDrawer must be used within a RightDrawerProvider");return t},Ce=()=>{const t=l.useContext(Ne);if(t===void 0)throw new Error("useBottomDrawer must be used within a BottomDrawerProvider");return t},At=({pluginID:t})=>{const e=A(t),{showSnackbar:n}=$(),{createTab:r,updateTab:s}=Ce();return{createSession:v.useMutation({mutationFn:async({connectionID:o,icon:a,label:c,opts:f})=>{const d=`pending-${crypto.randomUUID()}`;r({id:d,title:c??"Connecting...",variant:"terminal",icon:a??"LuSquareTerminal",properties:{status:"connecting",pluginID:e,connectionID:o,opts:{...f}}});const p=L.SessionOptions.createFrom({command:["/bin/bash"],tty:!0,...f});try{const g=await E.CreateSession(e,o,p);if(!g)throw new Error("Failed to create session: null response");s({id:d},{id:g.id,title:c??`Session ${g.id.substring(0,8)}`,properties:{status:"connected",pluginID:e,connectionID:o,opts:{...f}}})}catch(g){const y=W(g);s({id:d},{properties:{status:"error",error:y.detail,pluginID:e,connectionID:o,opts:{...f}}}),G(n,g,"Failed to start session")}}}).mutateAsync}},Dt=({pluginID:t})=>{const e=A(t),{showSnackbar:n}=$(),{createTab:r}=Ce(),s=v.useMutation({mutationFn:async({connectionID:o,resourceKey:a,resourceID:c,resourceData:f,icon:d,label:p,target:g,follow:y=!0,tailLines:S=1e3,params:_})=>{const u=L.CreateSessionOptions.createFrom({resource_key:a,resource_id:c,resource_data:f,options:L.LogSessionOptions.createFrom({target:g??"",follow:y,include_previous:!1,include_timestamps:!0,tail_lines:S,since_seconds:0,limit_bytes:0,include_source_events:!0,params:_??{}})}),h=await E.CreateSession$1(e,o,u);if(!h)throw new Error("Failed to create log session: null response");return r({id:h.id,title:p??`Logs ${h.id.substring(0,8)}`,variant:"logs",icon:d??"LuLogs"}),h},onError:q(n,"Failed to start log session")}),i=v.useMutation({mutationFn:async o=>{await E.CloseSession(o)},onError:q(n,"Failed to close log session")});return{createLogSession:s.mutateAsync,closeLogSession:i.mutateAsync}},Ft=()=>v.useQuery({queryKey:["metric","providers"],queryFn:E.GetProviders,staleTime:3e4}),He=t=>v.useQuery({queryKey:["metric","providers",t],queryFn:()=>E.GetProvidersForResource(t),enabled:!!t,staleTime:3e4}),Nt=t=>{var u,h;const{connectionID:e,resourceKey:n,resourceID:r,resourceNamespace:s="",resourceData:i={},metricIDs:o=[],shape:a=0,timeRange:c,refreshInterval:f=0,enabled:d=!0}=t,{data:p,isLoading:g}=He(n),y=p??[],S=c?Math.max(Math.floor((c.end.getTime()-c.start.getTime())/250),15e3)*1e6:0,_=v.useQuery({queryKey:["metric","query",e,n,r,s,o,a,(u=c==null?void 0:c.start)==null?void 0:u.getTime(),(h=c==null?void 0:c.end)==null?void 0:h.getTime()],queryFn:async()=>{const R=await E.QueryAll(e,n,r,s,i,o,a,((c==null?void 0:c.start)??new Date(0)).toISOString(),((c==null?void 0:c.end)??new Date(0)).toISOString(),S),m={};for(const[w,x]of Object.entries(R))x!=null&&(m[w]=x);return m},enabled:d&&!!e&&!!n&&(n.startsWith("cluster::")||!!r)&&y.length>0,refetchInterval:f>0?f:void 0,staleTime:5e3,placeholderData:v.keepPreviousData});return{data:_.data??void 0,providers:y,isLoading:g||_.isLoading,error:_.error,refetch:_.refetch}},Lt=t=>{const{pluginID:e,connectionID:n,resourceKey:r,resourceID:s,resourceNamespace:i="",resourceData:o={},metricIDs:a=[],interval:c=1e4,enabled:f=!0}=t,d=A(e),[p,g]=l.useState(null),[y,S]=l.useState(null),[_,u]=l.useState(!1),[h,R]=l.useState(null),m=l.useRef(null),w=l.useCallback(async()=>{if(!(!f||!d||!n||!r||!s))try{const b=await E.Subscribe(d,n,{resource_key:r,resource_id:s,resource_namespace:i,resource_data:o,metric_ids:a,interval:c*1e6});S(b),u(!0),R(null);const I=D.On(`core/metrics/data/${b}`,P=>{const U=P.data;try{const k=JSON.parse(U);k.results&&g(k.results)}catch(k){console.error("Failed to parse metric stream data:",k)}}),O=D.On(`core/metrics/error/${b}`,P=>{const U=P.data;try{const k=JSON.parse(U);R(k.error||"Unknown error")}catch{R("Failed to parse metric stream error")}});m.current=()=>{I(),O()}}catch(b){R(b instanceof Error?b.message:String(b))}},[d,n,r,s,i,a,c,f]),x=l.useCallback(async()=>{if(y)try{await E.Unsubscribe(y)}catch(b){console.error("Failed to unsubscribe:",b)}m.current&&(m.current(),m.current=null),S(null),u(!1)},[y]);return l.useEffect(()=>()=>{y&&E.Unsubscribe(y).catch(console.error),m.current&&m.current()},[y]),{data:p,subscriptionID:y,isStreaming:_,error:h,start:w,stop:x}},B=["networker","portforward","all-sessions"];function kt(){const{showSnackbar:t}=$(),e=v.useQueryClient(),n=v.useQuery({queryKey:[...B],queryFn:async()=>E.ListAllPortForwardSessions().catch(i=>{if(W(i).detail.includes("not found"))return[];throw i}),retry:!1});l.useEffect(()=>{const i=D.On("core/networker/portforward/created",()=>{e.invalidateQueries({queryKey:[...B]})}),o=D.On("core/networker/portforward/closed",()=>{e.invalidateQueries({queryKey:[...B]})});return()=>{i(),o()}},[e]);const r=n.data??[],s=v.useMutation({mutationFn:async i=>E.ClosePortForwardSession(i),onError:q(t,"Failed to close port forwarding session"),onSuccess:async()=>{await e.invalidateQueries({queryKey:[...B]})}});return{sessions:n,activeSessions:r,closeSession:s.mutateAsync,openInBrowser:i=>D.OpenURL(`http://localhost:${i}`)}}function Mt({pluginID:t,connectionID:e,resourceID:n}){const r=A(t),s=["networker","portforward","sessions",r,e,n],{showSnackbar:i}=$(),o=v.useQueryClient(),a=v.useQuery({queryKey:s,queryFn:async()=>E.FindPortForwardSessions(r,e,L.FindPortForwardSessionRequest.createFrom({resource_id:n,connection_id:e})).catch(d=>{const p=W(d);return p.detail.includes("not found")?[]:(i({message:"Failed to fetch port forward sessions",status:"error",details:p.detail}),[])}),retry:!1}),c=v.useMutation({mutationFn:async({opts:d})=>{const p=L.PortForwardSessionOptions.createFrom({local_port:d.localPort||0,remote_port:d.remotePort,protocol:d.protocol||"TCP",connection_type:"RESOURCE",connection:{resource_data:d.resource,connection_id:e,plugin_id:r,resource_id:d.resourceId,resource_key:d.resourceKey},labels:d.labels??{},params:d.parameters??{}}),g=await E.StartResourcePortForwardingSession(r,e,p);if(!g)throw new Error("Failed to start port forwarding: null response");return d.openInBrowser&&D.OpenURL(`http://localhost:${g.local_port}`),g},onError:q(i,"Failed to start port forwarding session"),onSuccess:async()=>{await Promise.all([o.invalidateQueries({queryKey:s}),o.invalidateQueries({queryKey:[...B]})])}}),f=v.useMutation({mutationFn:async({opts:d})=>E.ClosePortForwardSession(d.sessionID),onError:q(i,"Failed to close port forwarding session"),onSuccess:async()=>{await Promise.all([o.invalidateQueries({queryKey:s}),o.invalidateQueries({queryKey:[...B]})])}});return{sessions:a,forward:c.mutateAsync,close:f.mutateAsync}}const qt=()=>{const t=l.useContext(ke);if(!t)throw new Error("useConfirmationModal must be used within a ConfirmationModalProvider");return t},Ut=({pluginID:t,connectionID:e,resourceKey:n,resourceID:r,namespace:s=""})=>{const i=A(t),o=v.useQueryClient(),{showSnackbar:a}=$(),c=["RESOURCE",i,e,n,r,s],{mutateAsync:f}=v.useMutation({mutationFn:async g=>E.Update(i,e,n,L.UpdateInput.createFrom({input:g.input,id:r,namespace:s})),onSuccess:async()=>{a(`Resource ${r} updated`,"success"),await o.invalidateQueries({queryKey:c})},onError:q(a,`Failed to update resource ${r}`)}),{mutateAsync:d}=v.useMutation({mutationFn:async(g={})=>E.Delete(i,e,n,L.DeleteInput.createFrom({id:r,namespace:s,gracePeriodSeconds:g.gracePeriodSeconds})),onSuccess:async()=>{a(`Resource ${r} deleted`,"success"),await o.invalidateQueries({queryKey:c})},onError:q(a,`Failed to delete resource ${r}`)});return{resource:v.useQuery({queryKey:c,queryFn:async()=>E.Get$1(i,e,n,L.GetInput.createFrom({id:r,namespace:s})),retry:!1}),update:f,remove:d}},jt=t=>{const e=["component",t.plugin,t.resource,t.area];return{component:v.useQuery({queryKey:e,queryFn:async()=>E.GetResourceAreaComponent(t)})}},$t=({pluginID:t,connectionID:e})=>{const n=A(t),r=[n,"resource_groups","list"];return{groups:v.useQuery({queryKey:r,queryFn:async()=>E.GetResourceGroups(n,e),retry:!1})}},Qt=({pluginID:t,connectionID:e,searches:n})=>{const r=A(t),s=o=>[r,e,o.key,o.namespaces,"list"];return v.useQueries({queries:n.map(o=>({queryKey:s(o),queryFn:async()=>E.List(r,e,o.key,L.ListInput.createFrom({order:[{field:"name",descending:!1}],pagination:{page:1,pageSize:200},namespaces:o.namespaces})).then(a=>a?(console.log(a.result),a.result&&o.postFilter?Object.values(a.result).filter(o.postFilter):Object.values(a.result||{})):[]),retry:!1}))})},Wt=({pluginID:t,resourceKey:e})=>{const n=A(t),r=[n,"resources",e];return{resourceType:v.useQuery({queryKey:r,queryFn:async()=>E.GetResourceType(n,e),retry:!1})}},Gt=({pluginID:t,connectionID:e})=>{const n=A(t),r=[n,"resources","list",e];return{types:v.useQuery({queryKey:r,queryFn:async()=>E.GetResourceTypes(n,e),retry:!1})}};var Z=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Bt(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Ht="Expected a function",Ke="__lodash_hash_undefined__",Kt="[object Function]",zt="[object GeneratorFunction]",Yt="[object Symbol]",Vt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Jt=/^\w*$/,Xt=/^\./,Zt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,en=/[\\^$.*+?()[\]{}|]/g,tn=/\\(\\)?/g,nn=/^\[object .+?Constructor\]$/,rn=typeof Z=="object"&&Z&&Z.Object===Object&&Z,sn=typeof self=="object"&&self&&self.Object===Object&&self,ve=rn||sn||Function("return this")();function on(t,e){return t==null?void 0:t[e]}function an(t){var e=!1;if(t!=null&&typeof t.toString!="function")try{e=!!(t+"")}catch{}return e}var cn=Array.prototype,un=Function.prototype,ze=Object.prototype,pe=ve["__core-js_shared__"],Ie=function(){var t=/[^.]+$/.exec(pe&&pe.keys&&pe.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),Ye=un.toString,we=ze.hasOwnProperty,Ve=ze.toString,ln=RegExp("^"+Ye.call(we).replace(en,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Oe=ve.Symbol,dn=cn.splice,fn=Je(ve,"Map"),J=Je(Object,"create"),Te=Oe?Oe.prototype:void 0,Pe=Te?Te.toString:void 0;function H(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function pn(){this.__data__=J?J(null):{}}function hn(t){return this.has(t)&&delete this.__data__[t]}function gn(t){var e=this.__data__;if(J){var n=e[t];return n===Ke?void 0:n}return we.call(e,t)?e[t]:void 0}function yn(t){var e=this.__data__;return J?e[t]!==void 0:we.call(e,t)}function mn(t,e){var n=this.__data__;return n[t]=J&&e===void 0?Ke:e,this}H.prototype.clear=pn;H.prototype.delete=hn;H.prototype.get=gn;H.prototype.has=yn;H.prototype.set=mn;function z(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function En(){this.__data__=[]}function Sn(t){var e=this.__data__,n=oe(e,t);if(n<0)return!1;var r=e.length-1;return n==r?e.pop():dn.call(e,n,1),!0}function Cn(t){var e=this.__data__,n=oe(e,t);return n<0?void 0:e[n][1]}function vn(t){return oe(this.__data__,t)>-1}function wn(t,e){var n=this.__data__,r=oe(n,t);return r<0?n.push([t,e]):n[r][1]=e,this}z.prototype.clear=En;z.prototype.delete=Sn;z.prototype.get=Cn;z.prototype.has=vn;z.prototype.set=wn;function K(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function _n(){this.__data__={hash:new H,map:new(fn||z),string:new H}}function bn(t){return ie(this,t).delete(t)}function Rn(t){return ie(this,t).get(t)}function xn(t){return ie(this,t).has(t)}function In(t,e){return ie(this,t).set(t,e),this}K.prototype.clear=_n;K.prototype.delete=bn;K.prototype.get=Rn;K.prototype.has=xn;K.prototype.set=In;function oe(t,e){for(var n=t.length;n--;)if(qn(t[n][0],e))return n;return-1}function On(t,e){e=Dn(e,t)?[e]:An(e);for(var n=0,r=e.length;t!=null&&n<r;)t=t[kn(e[n++])];return n&&n==r?t:void 0}function Tn(t){if(!Ze(t)||Nn(t))return!1;var e=Un(t)||an(t)?ln:nn;return e.test(Mn(t))}function Pn(t){if(typeof t=="string")return t;if(be(t))return Pe?Pe.call(t):"";var e=t+"";return e=="0"&&1/t==-1/0?"-0":e}function An(t){return Xe(t)?t:Ln(t)}function ie(t,e){var n=t.__data__;return Fn(e)?n[typeof e=="string"?"string":"hash"]:n.map}function Je(t,e){var n=on(t,e);return Tn(n)?n:void 0}function Dn(t,e){if(Xe(t))return!1;var n=typeof t;return n=="number"||n=="symbol"||n=="boolean"||t==null||be(t)?!0:Jt.test(t)||!Vt.test(t)||e!=null&&t in Object(e)}function Fn(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}function Nn(t){return!!Ie&&Ie in t}var Ln=_e(function(t){t=$n(t);var e=[];return Xt.test(t)&&e.push(""),t.replace(Zt,function(n,r,s,i){e.push(s?i.replace(tn,"$1"):r||n)}),e});function kn(t){if(typeof t=="string"||be(t))return t;var e=t+"";return e=="0"&&1/t==-1/0?"-0":e}function Mn(t){if(t!=null){try{return Ye.call(t)}catch{}try{return t+""}catch{}}return""}function _e(t,e){if(typeof t!="function"||e&&typeof e!="function")throw new TypeError(Ht);var n=function(){var r=arguments,s=e?e.apply(this,r):r[0],i=n.cache;if(i.has(s))return i.get(s);var o=t.apply(this,r);return n.cache=i.set(s,o),o};return n.cache=new(_e.Cache||K),n}_e.Cache=K;function qn(t,e){return t===e||t!==t&&e!==e}var Xe=Array.isArray;function Un(t){var e=Ze(t)?Ve.call(t):"";return e==Kt||e==zt}function Ze(t){var e=typeof t;return!!t&&(e=="object"||e=="function")}function jn(t){return!!t&&typeof t=="object"}function be(t){return typeof t=="symbol"||jn(t)&&Ve.call(t)==Yt}function $n(t){return t==null?"":Pn(t)}function Qn(t,e,n){var r=t==null?void 0:On(t,e);return r===void 0?n:r}var Wn=Qn;const ee=Bt(Wn);function et(t,e,n){const r=t??{result:[],success:!0,totalCount:0},s=[...r.result??[]];for(const i of e){const o=ee(i.payload.data,n);switch(i.type){case"ADD":{s.findIndex(c=>ee(c,n)===o)===-1&&s.push(i.payload.data);break}case"UPDATE":{const a=s.findIndex(c=>ee(c,n)===o);a!==-1&&(s[a]=i.payload.data);break}case"DELETE":{const a=s.findIndex(c=>ee(c,n)===o);a!==-1&&s.splice(a,1);break}}}return{...r,result:s}}function tt(t,e,n,r,s,i){const o=(i==null?void 0:i.syncWindowMs)??500,a=l.useRef([]),c=l.useRef(null),f=l.useRef(null),d=l.useRef(s);d.current=s;const p=l.useCallback(()=>{const y=a.current;if(a.current=[],c.current!==null&&(clearTimeout(c.current),c.current=null),f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),!(y.length===0||!r)){t.setQueryData(e,S=>et(S,y,r));for(const S of y)(S.type==="ADD"||S.type==="UPDATE")&&t.setQueryData(n(S.payload.id,S.payload.namespace),{result:S.payload.data})}},[t,e,n,r]),g=l.useCallback(y=>{a.current.push(y),!(c.current!==null||f.current!==null)&&(c.current=setTimeout(p,o),d.current!==1&&(f.current=requestAnimationFrame(p)))},[p,o]);return l.useEffect(()=>()=>{c.current!==null&&(clearTimeout(c.current),c.current=null),f.current!==null&&(cancelAnimationFrame(f.current),f.current=null)},[]),g}const Gn=({pluginID:t,connectionID:e,resourceKey:n,idAccessor:r,namespaces:s})=>{const i=A(t),o=v.useQueryClient(),{showSnackbar:a}=$(),c=l.useMemo(()=>s??[],[s]),f=l.useMemo(()=>[i,e,n,c,"list"],[i,e,n,c]),d=l.useCallback((u,h)=>[i,e,n,h,u],[i,e,n]),{mutateAsync:p}=v.useMutation({mutationFn:async u=>E.Create(i,e,n,L.CreateInput.createFrom({input:u.input,namespace:u.namespace??(c.length===1?c[0]:"")})),onSuccess:async u=>{var w;const h=u==null?void 0:u.result;let R="";(w=h==null?void 0:h.metadata)!=null&&w.name?R=h.metadata.name:h!=null&&h.id?R=h.id:h!=null&&h.name?R=h.name:h!=null&&h.ID?R=h.ID:h!=null&&h.Name&&(R=h.Name);const m=R?`Resource ${R} created`:"Resource created";a(m,"success"),await o.invalidateQueries({queryKey:f})},onError:q(a,"Failed to create resource")}),g=v.useQuery({queryKey:f,queryFn:async()=>E.List(i,e,n,L.ListInput.createFrom({order:[{field:"name",descending:!1}],pagination:{page:1,pageSize:200},namespaces:c})),placeholderData:(u,h)=>u,retry:!1}),[y,S]=l.useState(T.WatchStateIdle);l.useEffect(()=>D.On(`${i}/${e}/watch/STATE`,h=>{const R=h.data;R.resourceKey===n&&S(R.state)}),[i,e,n]);const _=tt(o,f,d,r,y);return l.useEffect(()=>{if(!r)return;E.SubscribeResource(i,e,n);const u=D.On(`${i}/${e}/${n}/ADD`,m=>_({type:"ADD",payload:m.data})),h=D.On(`${i}/${e}/${n}/UPDATE`,m=>_({type:"UPDATE",payload:m.data})),R=D.On(`${i}/${e}/${n}/DELETE`,m=>_({type:"DELETE",payload:m.data}));return()=>{u(),h(),R(),E.UnsubscribeResource(i,e,n)}},[i,e,n,_]),{resources:g,create:p,watchState:y,isSyncing:y===T.WatchStateSyncing,isSynced:y===T.WatchStateSynced,watchError:y===T.WatchStateError}},Bn=({pluginID:t})=>{const e=A(t),{showSnackbar:n}=$(),r=v.useMutation({mutationFn:async({opts:o,input:a})=>E.Create(e,o.connectionID,o.resourceKey,L.CreateInput.createFrom({input:a.input,namespace:a.namespace??o.namespace??""})),onSuccess:(o,{opts:a})=>{n(`Resource ${a.resourceID} created`,"success")},onError(o,{opts:a}){G(n,o,`Failed to create resource ${a.resourceID}`)}}),s=v.useMutation({mutationFn:async({opts:o,input:a})=>E.Update(e,o.connectionID,o.resourceKey,L.UpdateInput.createFrom({input:a.input,id:o.resourceID,namespace:o.namespace??""})),onSuccess:(o,{opts:a})=>{n(`Resource ${a.resourceID} updated`,"success")},onError(o,{opts:a}){G(n,o,`Failed to update resource ${a.resourceID}`)}}),i=v.useMutation({mutationFn:async({opts:o,input:a})=>E.Delete(e,o.connectionID,o.resourceKey,L.DeleteInput.createFrom({id:o.resourceID,namespace:o.namespace??"",gracePeriodSeconds:a.gracePeriodSeconds})),onSuccess:(o,{opts:a})=>{n(`Resource ${a.resourceID} deleted`,"success")},onError(o,{opts:a}){G(n,o,`Failed to delete resource ${a.resourceID}`)}});return{create:r.mutateAsync,update:s.mutateAsync,remove:i.mutateAsync}},Hn=({pluginID:t,connectionID:e,resourceKey:n,enabled:r=!0})=>{const s=A(t),i=v.useQuery({queryKey:["RESOURCE_ACTIONS",s,e,n],queryFn:()=>E.GetActions(s,e,n),enabled:r&&!!s&&!!e&&!!n,staleTime:5*60*1e3});return{actions:i.data??[],isLoading:i.isLoading,error:i.error}},Kn=({pluginID:t,connectionID:e,resourceKey:n})=>{const r=A(t),s=v.useQueryClient(),{showSnackbar:i}=$(),o=v.useMutation({mutationFn:async({actionID:a,id:c="",namespace:f="",params:d={}})=>E.ExecuteAction(r,e,n,a,L.ActionInput.createFrom({id:c,namespace:f,params:d})),onSuccess:a=>{a!=null&&a.message&&i(a.message,"success"),s.invalidateQueries({queryKey:["RESOURCES",r,e,n]})},onError:(a,c)=>{G(i,a,`Failed to execute action "${c.actionID}"`)}});return{executeAction:o.mutateAsync,isExecuting:o.isPending,error:o.error}},zn=({pluginID:t,connectionID:e,enabled:n=!0})=>{const r=A(t),s=v.useQuery({queryKey:["EDITOR_SCHEMAS",r,e],queryFn:()=>E.GetEditorSchemas(r,e),enabled:n&&!!r&&!!e,staleTime:10*60*1e3,retry:1});return{schemas:s.data??[],isLoading:s.isLoading,error:s.error,refetch:s.refetch}},Yn=({pluginID:t,connectionID:e,enabled:n=!0})=>{const r=A(t),s=v.useQueryClient(),i=[r,e,"watch-state"],o=l.useRef([]),a=l.useRef(!1),c=l.useCallback(g=>{s.setQueryData(i,y=>{if(!y)return y;const S={...y.resources,[g.resourceKey]:g.state},_={...y.resourceCounts,[g.resourceKey]:g.resourceCount};let u=0,h=0;for(const R of Object.values(S))R===T.WatchStateSynced&&u++,(R===T.WatchStateError||R===T.WatchStateFailed)&&h++;return{...y,resources:S,resourceCounts:_,totalResources:Object.keys(S).length,syncedCount:u,errorCount:h}})},[s,r,e]),f=v.useQuery({queryKey:i,queryFn:async()=>{const g=await E.GetWatchState(r,e);if(!g)throw new Error("Failed to get watch state: null response");const y={};let S=0,_=0;for(const[h,R]of Object.entries(g.resources??{}))R!=null&&(y[h]=R,R===T.WatchStateSynced&&S++,R===T.WatchStateError&&_++);const u={};for(const[h,R]of Object.entries(g.resourceCounts??{}))R!=null&&(u[h]=R);return{connection:g.connectionId,resources:y,resourceCounts:u,totalResources:Object.keys(y).length,syncedCount:S,errorCount:_}},enabled:n&&!!r&&!!e,refetchInterval:g=>{const y=g.state.data;if(!y||y.totalResources===0)return 3e3;let S=0;for(const _ of Object.values(y.resources))(_===T.WatchStateSynced||_===T.WatchStateError||_===T.WatchStateStopped||_===T.WatchStateFailed||_===T.WatchStateForbidden||_===T.WatchStateSkipped)&&S++;return S>=y.totalResources?!1:3e3}});l.useEffect(()=>{if(!f.data||a.current)return;a.current=!0;const g=o.current;o.current=[];for(const y of g)c(y)},[f.data,c]),l.useEffect(()=>{if(!n||!r||!e)return;a.current=!1,o.current=[];const g=D.On(`${r}/${e}/watch/STATE`,y=>{const S=y.data;a.current?c(S):o.current.push(S)});return()=>{g(),a.current=!1,o.current=[]}},[r,e,n,c]);const d=f.data;let p=0;if(d!=null&&d.resources)for(const g of Object.values(d.resources))(g===T.WatchStateSynced||g===T.WatchStateError||g===T.WatchStateStopped||g===T.WatchStateFailed||g===T.WatchStateForbidden||g===T.WatchStateSkipped)&&p++;return{summary:f,getResourceState:g=>d==null?void 0:d.resources[g],isFullySynced:d?d.totalResources>0&&p===d.totalResources:!1,syncProgress:d&&d.totalResources>0?p/d.totalResources:0,errorCount:(d==null?void 0:d.errorCount)??0}},Vn=()=>{const[t,e]=l.useState(new Map),n=l.useRef(new Map),r=l.useRef(new Map),s=l.useCallback(f=>{const d=f.data,p=Se(d),g=Be(n.current,d),y=ye(g);if(e(S=>{const _=new Map(S);return _.set(p,y),_}),r.current.has(p)&&(clearTimeout(r.current.get(p)),r.current.delete(p)),ne(y)){const S=setTimeout(()=>{e(_=>{const u=new Map(_);return u.delete(p),u}),n.current.delete(p),r.current.delete(p)},5e3);r.current.set(p,S)}},[]);l.useEffect(()=>{const f=D.On("watch/STATE",s);return()=>{f();for(const d of r.current.values())clearTimeout(d)}},[s]);const i=Array.from(t.values()),o=We(i),a=i.find(f=>!ne(f))??i[0]??null,c=Ge(i);return{syncs:i,hasSyncing:o,primarySync:a,aggregateProgress:c}},nt=()=>{const t=l.useContext(Ee);if(!t)throw new Error("useOperations must be used within an OperationsProvider");return t},Jn=({pluginID:t,connectionID:e,resourceKey:n})=>{const r=A(t),{showSnackbar:s}=$(),{addOperation:i,updateOperation:o}=nt(),a=l.useRef(new Set),c=l.useCallback((p,g=!1)=>{var y,S,_;p.disposed||(p.disposed=!0,(y=p.unsubscribe)==null||y.call(p),(S=p.open)==null||S.cancel(),(_=p.attach)==null||_.cancel(),p.handle&&(E.CancelStreamAction(p.handle).catch(()=>{}),g&&o(p.handle,{status:"cancelled",message:"Cancelled",completedAt:Date.now()})),a.current.delete(p))},[o]);l.useEffect(()=>()=>{for(const p of a.current)c(p,!0)},[r,e,n,c]);const f=l.useCallback(async({actionID:p,id:g,namespace:y,label:S,params:_={}})=>{const u={disposed:!1,terminal:!1,sequence:0};a.current.add(u);try{u.open=E.StreamAction(r,e,n,p,L.ActionInput.createFrom({id:g,namespace:y,params:_}));const h=await u.open;if(u.open=void 0,u.disposed)return E.CancelStreamAction(h).catch(()=>{}),h;u.handle=h,i({id:h,label:S,resourceKey:n,resourceName:g,namespace:y,connectionID:e,status:"running",startedAt:Date.now()});const R=w=>{if(u.disposed||!Number.isSafeInteger(w.sequence)||w.sequence<=u.sequence)return;u.sequence=w.sequence;const x=w.event,b=x.data??{};if(x.type==="error"){u.terminal=!0;const I=W(x.error);o(h,{status:V(I)?"cancelled":"error",message:I.title,completedAt:Date.now()}),G(s,I,S),c(u)}else if(x.type==="complete"){u.terminal=!0;const I=typeof b.message=="string"?b.message:`${S} completed`;o(h,{status:"completed",message:I,completedAt:Date.now()}),s(I,"success"),c(u)}else o(h,{message:typeof b.message=="string"?b.message:void 0,progress:typeof b.ready=="number"&&typeof b.desired=="number"?{ready:b.ready,desired:b.desired}:void 0})};u.unsubscribe=D.On(`action/stream/${h}`,w=>R(w.data)),u.attach=E.AttachStreamAction(h);const m=await u.attach;return u.attach=void 0,R(m),h}catch(h){if(u.terminal&&u.handle)return u.handle;throw u.disposed||(u.handle&&o(u.handle,{status:V(h)?"cancelled":"error",message:W(h).title,completedAt:Date.now()}),G(s,h,`Failed to start "${p}"`)),c(u),h}},[r,e,n,i,o,s,c]),d=l.useCallback(p=>{for(const g of a.current)if(g.handle===p){c(g,!0);return}},[c]);return{startStreamAction:f,cancelStreamAction:d}};function rt(t,e){return`${t}/${e}/graph/CHANGED`}function ae(t,e,n,r){const s=v.useQueryClient(),i=l.useRef(n);i.current=n;const o=JSON.stringify(n);l.useEffect(()=>{if(!r||!t||!e)return;const a=D.On(rt(t,e),()=>{s.invalidateQueries({queryKey:i.current,exact:!0})});return()=>{a()}},[s,t,e,o,r])}const Xn={owns:{outgoing:"Owns",incoming:"Owned by"},runs_on:{outgoing:"Runs on",incoming:"Running here"},uses:{outgoing:"Uses",incoming:"Used by"},exposes:{outgoing:"Exposes",incoming:"Exposed by"},manages:{outgoing:"Manages",incoming:"Managed by"},member_of:{outgoing:"Member of",incoming:"Members"},selects:{outgoing:"Selects",incoming:"Selected by"}};function Zn(t,e){const n=Xn[t];if(n)return n[e];const r=t.replace(/_/g," ");return e==="outgoing"?r:`${r} (incoming)`}function er(t,e){return t.pluginId===e.pluginId&&t.connectionId===e.connectionId&&t.resourceKey===e.resourceKey&&t.id===e.id&&(t.namespace??"")===(e.namespace??"")}function st(t,e){return e.map(n=>{const r=er(n.source,t);return{resource:r?n.target:n.source,type:n.type,direction:r?"outgoing":"incoming",label:n.label}})}const tr=({pluginID:t,connectionID:e,resourceKey:n,resourceID:r,namespace:s="",direction:i="both",relationshipType:o,enabled:a=!0,refetchInterval:c=!1})=>{const f=A(t),d=["RESOURCE_RELATED",f,e,n,s,r,i,o??null],p=a&&!!f&&!!e&&!!n&&!!r;ae(f,e,d,p);const g=v.useQuery({queryKey:d,queryFn:async()=>E.GetRelated(f,e,n,s,r,i,o??null),enabled:p,refetchInterval:c}),y={pluginId:f,connectionId:e,resourceKey:n,id:r,namespace:s},S=g.data??[];return{related:st(y,S),edges:S,isLoading:g.isLoading,isFetching:g.isFetching,error:g.error,refetch:g.refetch}},nr=({pluginID:t,connectionID:e,resourceKey:n,resourceID:r,namespace:s="",maxDepth:i=3,enabled:o=!0,refetchInterval:a=!1})=>{const c=A(t),f=["RESOURCE_DEPENDENCY_TREE",c,e,n,s,r,i],d=o&&!!c&&!!e&&!!n&&!!r;ae(c,e,f,d);const p=v.useQuery({queryKey:f,queryFn:async()=>E.GetDependencyTree(c,e,n,s,r,i),enabled:d,refetchInterval:a});return{tree:p.data??null,isLoading:p.isLoading,isFetching:p.isFetching,error:p.error,refetch:p.refetch}},rr=({pluginID:t,connectionID:e,resourceKey:n,resourceID:r,namespace:s="",upDepth:i=2,downDepth:o=3,enabled:a=!0})=>{const c=A(t),f=["RESOURCE_GRAPH",c,e,n,s,r,i,o],d=a&&!!c&&!!e&&!!n&&!!r;ae(c,e,f,d);const p=v.useQuery({queryKey:f,queryFn:async()=>E.GetSubgraph(c,e,n,s,r,i,o),enabled:d});return{graph:p.data??null,isLoading:p.isLoading,isFetching:p.isFetching,error:p.error,refetch:p.refetch}},sr=()=>{const t=l.useContext(me);if(!t)throw new Error("useSettings must be used within a SettingsProvider");return t},or=({to:t,withinContext:e,...n})=>{const{pluginId:r}=se();r||console.error("Link used outside of a plugin context");const s=`/_plugin/${r}${t.startsWith("/")?"":"/"}${t}`;return l.useMemo(()=>C.jsx(Y.Link,{style:{textDecoration:"none",color:"inherit"},...n,to:s}),[n,s])};function ir(){const t=Y.useNavigate(),e=Y.useLocation(),{pluginId:n}=se();n||console.error("usePluginRouter used outside of a plugin context");const r=`/_plugin/${n}`,s=e.pathname.startsWith(r)?e.pathname.slice(r.length)||"/":e.pathname,i=l.useCallback((o,a)=>{const{...c}=a??{};o.startsWith("/")?t(`${r}${o}`,c):t(o,c)},[t,r]);return l.useMemo(()=>({location:e,navigate:i,pluginPath:s}),[e,i,s])}class ar{}class cr{constructor(){M(this,"_extensions");M(this,"root");M(this,"pages");M(this,"_routes")}get extensions(){return this._extensions||[]}get Routes(){var e;if(!this._routes&&this.root)return[{path:"",index:!0,Component:this.root}];if(!((e=this._routes)!=null&&e.length))throw new Error("cannot use plugin without a root page or router");return this._routes}get Window(){if(!this._routes&&this.root)return C.jsx(this.root,{});const e=Y.createMemoryRouter(this._routes||[]);return C.jsx(Y.RouterProvider,{router:e})}registerExtensionPoints(e){return this._extensions=e||[],this}setRootPage(e){return this.root=e,this}withPage(e,n){return this.pages||(this.pages={}),this.pages[e]?(console.warn("Cannot register page with the same name. Please use a different name."),this):(this.pages[e]=n,this)}withRoutes(e){return this._routes=e,this}}var ot=(t=>(t.MISSING_MANIFEST="MISSING_MANIFEST",t.MISSING_PLUGIN="MISSING_PLUGIN",t.MISSING_ENTRYPOINT="MISSING_ENTRYPOINT",t))(ot||{});const ur=t=>{const e=t.split("::");return e.length===1?{group:"core",version:"",kind:e[0]}:{group:e[0]||"core",version:e[1]||"",kind:e[2]||e[0]}},lr=t=>!t||t==="core"?"Core":t.charAt(0).toUpperCase()+t.slice(1);exports.ALL_SESSIONS_KEY=B;exports.BottomDrawerContext=Ne;exports.ConfirmationModalContext=ke;exports.ErrorTypes=F;exports.ExtensionPointRegistry=vt;exports.ExtensionPointStore=je;exports.ExtensionProvider=Ct;exports.Link=or;exports.OperationsContext=Ee;exports.OperationsProvider=ht;exports.PluginContext=re;exports.PluginContextProvider=lt;exports.PluginErrorCode=ot;exports.PluginWindow=cr;exports.PluginWindowRootProps=ar;exports.RightDrawerContext=Le;exports.SettingsContext=me;exports.SettingsProvider=ft;exports.SnackbarProvider=_t;exports.WatchState=T;exports.actionToSnackbar=Ae;exports.applyBatch=et;exports.connectionListQueryKey=Qe;exports.createErrorHandler=q;exports.defaultState=Fe;exports.formatGroup=lr;exports.graphChangedEvent=rt;exports.isCancelledError=V;exports.parseAppError=W;exports.parseResourceKey=ur;exports.relationshipLabel=Zn;exports.showAppError=G;exports.toRelatedResources=st;exports.useActiveSyncs=Vn;exports.useBottomDrawer=Ce;exports.useConfirmationModal=qt;exports.useConnection=bt;exports.useConnectionNamespaces=xt;exports.useConnectionStatus=It;exports.useConnections=Rt;exports.useDependencyTree=nr;exports.useEditorSchemas=zn;exports.useEventBatcher=tt;exports.useExec=At;exports.useExecuteAction=Kn;exports.useExtensionPoint=St;exports.useExtensionRegistry=Ue;exports.useLogs=Dt;exports.useMetricProviders=Ft;exports.useMetricProvidersForResource=He;exports.useMetricStream=Lt;exports.useOperations=nt;exports.usePluginContext=se;exports.usePluginData=Tt;exports.usePluginRouter=ir;exports.usePluginSettings=dt;exports.usePortForwardSessions=kt;exports.useRefetchOnGraphChange=ae;exports.useRelatedResources=tr;exports.useResolvedPluginId=A;exports.useResource=Ut;exports.useResourceActions=Hn;exports.useResourceAreaComponent=jt;exports.useResourceGraph=rr;exports.useResourceGroups=$t;exports.useResourceMetrics=Nt;exports.useResourceMutations=Bn;exports.useResourcePortForwarder=Mt;exports.useResourceSearch=Qt;exports.useResourceType=Wt;exports.useResourceTypes=Gt;exports.useResources=Gn;exports.useRightDrawer=Pt;exports.useSettings=sr;exports.useSnackbar=$;exports.useStreamAction=Jn;exports.useWatchState=Yn;