@odigos/ui-kit 0.0.257 → 0.0.258

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.
Files changed (57) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/lib/chunks/{connections-scope-RiHZnCRk.js → connections-scope-DgpFs9S1.js} +1 -1
  3. package/lib/chunks/{helpers-CUmUiA_l.js → helpers-BlFl20R2.js} +2 -2
  4. package/lib/chunks/index-BVL5-zQa.js +155 -0
  5. package/lib/chunks/{source-instrument-form-context-8HLrHGI9.js → source-instrument-form-context-o2ynNRPg.js} +1 -1
  6. package/lib/chunks/ui-components-BmIux5o5.js +1692 -0
  7. package/lib/chunks/{use-odigos-api-DnIoW4_W.js → use-odigos-api-hslZLdix.js} +2 -2
  8. package/lib/components/_v2/autocomplete/index.d.ts +4 -0
  9. package/lib/components/_v2/badge/index.d.ts +2 -2
  10. package/lib/components/_v2/cards/status-card/index.d.ts +2 -2
  11. package/lib/components/_v2/condition/index.d.ts +2 -2
  12. package/lib/components/_v2/drop-data/index.d.ts +2 -0
  13. package/lib/components/_v2/table/index.d.ts +4 -0
  14. package/lib/components/_v2/table/styled.d.ts +1 -0
  15. package/lib/components/_v2/table/table-rows/index.d.ts +6 -0
  16. package/lib/components/_v2/table/types.d.ts +6 -0
  17. package/lib/components/scroll-y/index.d.ts +4 -0
  18. package/lib/components/v2.js +1 -1
  19. package/lib/components.js +1 -1
  20. package/lib/constants.js +1 -1
  21. package/lib/containers/_v2/_drawers/edit-rule-drawer/helpers.d.ts +1 -1
  22. package/lib/containers/_v2/_drawers/edit-source-drawer/profiling/flame-graph-canvas.d.ts +6 -0
  23. package/lib/containers/_v2/_drawers/edit-source-drawer/profiling/flamebearer.d.ts +3 -1
  24. package/lib/containers/_v2/_drawers/edit-source-drawer/profiling/symbol-table/index.d.ts +34 -0
  25. package/lib/containers/_v2/_drawers/edit-source-drawer/profiling/symbol-table/modify-rules-modal.d.ts +10 -0
  26. package/lib/containers/_v2/_drawers/edit-source-drawer/profiling/symbol-table/symbol-instrumentation.d.ts +86 -0
  27. package/lib/containers/_v2/_drawers/edit-source-drawer/profiling/symbol-table/use-symbol-instrumentation.d.ts +69 -0
  28. package/lib/containers/service-map/react-flow/columns/active-node-info.d.ts +2 -0
  29. package/lib/containers/service-map/react-flow/columns/column-root.d.ts +4 -0
  30. package/lib/containers/service-map/react-flow/{search-and-select-nodes.d.ts → columns/search-and-select-nodes.d.ts} +0 -1
  31. package/lib/containers/service-map/service-map-context.d.ts +3 -3
  32. package/lib/containers/v2.js +158 -143
  33. package/lib/containers.js +30 -12
  34. package/lib/contexts/odigos-api.js +1 -1
  35. package/lib/contexts.js +1 -1
  36. package/lib/functions/get-health-badge-label/index.d.ts +2 -2
  37. package/lib/functions/get-status-color/index.d.ts +2 -2
  38. package/lib/functions/get-status-from-pod-status/index.d.ts +2 -2
  39. package/lib/functions/get-status-icon/index.d.ts +2 -2
  40. package/lib/functions/get-status-type-from-odigos-health/index.d.ts +2 -2
  41. package/lib/functions/map-desired-status-to-condition-status/index.d.ts +2 -2
  42. package/lib/functions.js +1 -1
  43. package/lib/hooks.js +1 -1
  44. package/lib/snippets/_v2/sampling-rule-form-sections/preset-with-custom-input.d.ts +1 -1
  45. package/lib/snippets/v2.js +1 -1
  46. package/lib/snippets.js +1 -1
  47. package/lib/store/useProgressStore.d.ts +2 -2
  48. package/lib/store.js +1 -1
  49. package/lib/theme.js +1 -1
  50. package/lib/types/common/index.d.ts +5 -10
  51. package/lib/types/sampling.d.ts +2 -0
  52. package/lib/types.js +1 -1
  53. package/lib/visuals.js +1 -1
  54. package/package.json +1 -1
  55. package/lib/chunks/index-hiRPXsEi.js +0 -155
  56. package/lib/chunks/ui-components-B1TCLO_N.js +0 -1666
  57. package/lib/containers/_v2/_drawers/edit-source-drawer/profiling/symbol-table.d.ts +0 -21
@@ -1,5 +1,5 @@
1
- import{useMemo as e,useContext as t,createContext as r,useCallback as a,useState as n,useEffect as o}from"react";import{HttpLink as i,from as s,split as c,ApolloClient as d,InMemoryCache as u,ApolloProvider as l,useLazyQuery as E,useApolloClient as f,useQuery as T,gql as _}from"@apollo/client";import{jsx as S}from"react/jsx-runtime";import{onError as y}from"@apollo/client/link/error";import{setContext as R}from"@apollo/client/link/context";import{getMainDefinition as p}from"@apollo/client/utilities";import{O as m,F as O,p as A,o as I,U as N,V as C,E as h,P as g,T as L,h as P,W as G,X as U,Y as v,Z as D,_ as w,$ as F,a0 as M}from"./ui-components-B1TCLO_N.js";const k=e=>{if(!e)return!1;const t=e.toLowerCase();return t.includes("authentication required")||t.includes("authentication expired")||t.includes("http 401")},b=r(null),H=()=>{const e=t(b);if(!e)throw new Error("[ui-kit] useOdigosApi() / useXxxApi() called outside of <OdigosApiProvider>. Make sure the host app mounts the provider at its layout level.");return e},Y=({apolloConfig:t,operations:r,context:a,children:n})=>{const o=e(()=>(e=>{const t=new i({uri:e.httpUrl,credentials:e.credentials??"same-origin"}),r=y(({graphQLErrors:t,networkError:r})=>{t&&t.length>0&&t.some(e=>k(e.message))&&e.onAuthError?.(),r&&(401===r.statusCode||k(r.message))&&e.onAuthError?.()}),a=R(async(t,r)=>{const a={...r.headers};if(e.authHeader){const t=await e.authHeader();Object.assign(a,t)}return e.csrfHeader&&Object.assign(a,e.csrfHeader()),{headers:a}}),n=[];e.additionalLinks?.length&&n.push(...e.additionalLinks),n.push(a,r,t);let o=s(n);e.wsLink&&(o=c(({query:e})=>{const t=p(e);return"OperationDefinition"===t.kind&&"subscription"===t.operation},e.wsLink,o));const l=e.defaultFetchPolicies;return new d({link:o,cache:new u({addTypename:e.addTypename??!0,typePolicies:e.cacheTypePolicies}),defaultOptions:{watchQuery:{fetchPolicy:l?.watchQuery??"cache-and-network"},query:{fetchPolicy:l?.query??"cache-first"},mutate:{fetchPolicy:l?.mutate??"network-only"}}})})(t),[t.httpUrl,t.wsLink,t.addTypename,t.credentials]),E=e(()=>({operations:r,context:a,apolloConfig:t}),[r,a,t]);return S(l,{client:o,children:S(b.Provider,{value:E,children:n})})},W=b,V=(e,t)=>{if(e)return"string"==typeof e?e:N(e,t)},x=e=>{const{addNotification:t}=m(),r=(r,a,n,o,i)=>t({type:r,title:a,message:n,crdType:e,target:V(o,e),hideFromHistory:i});return{notify:r,notifyError:(e,t,a)=>r(I.Error,e,t,a),notifySuccess:(e,t,a)=>r(I.Success,e,t,a),notifyPending:(e,t)=>r(I.Default,"Pending",e,t,!0),notifyReadonly:()=>{t({type:I.Warning,title:A.READONLY,message:O.READONLY_WARNING,hideFromHistory:!0})}}},K=e=>{e({type:I.Warning,title:A.READONLY,message:O.READONLY_WARNING,hideFromHistory:!0})},$=e=>({error:e,results:[],allSucceeded:!1,anySucceeded:!1,successCount:0,failureCount:0}),B=(e,t)=>{if(e)return"function"==typeof e?e(t):e},j=e=>{if(!e)return"Unknown error";if(e instanceof Error)return e.cause instanceof Error?e.cause.message:e.message;if("object"==typeof e){const t=e;return t.cause?.message||t.message||String(e)}return String(e)},q=(e,t)=>e.client??t,Q=async(e,t,r,a,n)=>{if(!t)return{error:"Query operation not configured"};if(t.canRun&&!t.canRun(a))return{data:void 0};if(t.run)try{return await t.run(q(t,e),r,a)}catch(e){return{error:j(e)}}const o=B(t.document,a);if(!o)return{error:"Query operation not supported in this context"};const i=t.transformVariables?t.transformVariables(r,a):r,s=q(t,e);try{const e=await s.query({query:o,variables:i,fetchPolicy:n??"network-only"});return{data:t.transformResult?t.transformResult(e.data,a):e.data,error:e.error?j(e.error):void 0}}catch(e){return{error:j(e)}}},X=async(e,t,r,a)=>{if(!t)return{error:"Mutation operation not configured"};if(t.canRun&&!t.canRun(a))return{data:void 0};if(t.run)try{return await t.run(q(t,e),r,a)}catch(e){return{error:j(e)}}const n=B(t.document,a);if(!n)return{error:"Mutation operation not supported in this context"};const o=t.transformVariables?t.transformVariables(r,a):r,i=q(t,e);try{const e=await i.mutate({mutation:n,variables:o});return{data:t.transformResult?t.transformResult(e.data,a):e.data,error:void 0}}catch(e){return{error:j(e)}}},z=async(e,t,r,a,n)=>{if(!t)return $("Multi fetch operation not configured");if(!r.length)return $("No proxy ids supplied for multi fetch");const o=q(t,e);if(t.transformVariablesMulti&&(t.documentMulti||t.document)){const e=t.transformVariablesMulti(r,a,n),i=[];for(const r of e)try{const e=await o.query({query:r.document,variables:r.variables,fetchPolicy:"network-only"});t.transformMultiResult?t.transformMultiResult(e.data,n).forEach(e=>i.push(e)):r.proxyIDs.forEach(t=>{i.push({proxyID:t,success:!e.error,data:e.data,error:e.error?.message})})}catch(e){const t=j(e);r.proxyIDs.forEach(e=>i.push({proxyID:e,success:!1,error:t}))}const s=i.filter(e=>e.success).length,c=i.length-s,d=Array.from(new Set(i.filter(e=>!!e.error).map(e=>e.error)));return{results:i,allSucceeded:0===c,anySucceeded:s>0,successCount:s,failureCount:c,error:d.length?d.join(", "):void 0}}const i=await Promise.all(r.map(async r=>{const o={...n,proxyID:r},i=await Q(e,t,a,o);return{proxyID:r,success:!i.error,data:i.data,error:i.error}})),s=i.filter(e=>e.success).length,c=i.length-s,d=Array.from(new Set(i.filter(e=>!!e.error).map(e=>e.error)));return{results:i,allSucceeded:0===c,anySucceeded:s>0,successCount:s,failureCount:c,error:d.length?d.join(", "):void 0}},J=_`
1
+ import{useMemo as e,useContext as t,createContext as r,useCallback as a,useState as n,useEffect as o}from"react";import{HttpLink as i,from as s,split as c,ApolloClient as d,InMemoryCache as u,ApolloProvider as l,useLazyQuery as E,useApolloClient as f,useQuery as T,gql as _}from"@apollo/client";import{jsx as S}from"react/jsx-runtime";import{onError as y}from"@apollo/client/link/error";import{setContext as R}from"@apollo/client/link/context";import{getMainDefinition as p}from"@apollo/client/utilities";import{W as m,F as O,p as A,o as I,Z as N,_ as C,E as h,P as g,T as L,h as P,$ as G,a0 as v,a1 as U,a2 as D,a3 as w,a4 as F,a5 as M}from"./ui-components-BmIux5o5.js";const k=e=>{if(!e)return!1;const t=e.toLowerCase();return t.includes("authentication required")||t.includes("authentication expired")||t.includes("http 401")},b=r(null),H=()=>{const e=t(b);if(!e)throw new Error("[ui-kit] useOdigosApi() / useXxxApi() called outside of <OdigosApiProvider>. Make sure the host app mounts the provider at its layout level.");return e},W=({apolloConfig:t,operations:r,context:a,children:n})=>{const o=e(()=>(e=>{const t=new i({uri:e.httpUrl,credentials:e.credentials??"same-origin"}),r=y(({graphQLErrors:t,networkError:r})=>{t&&t.length>0&&t.some(e=>k(e.message))&&e.onAuthError?.(),r&&(401===r.statusCode||k(r.message))&&e.onAuthError?.()}),a=R(async(t,r)=>{const a={...r.headers};if(e.authHeader){const t=await e.authHeader();Object.assign(a,t)}return e.csrfHeader&&Object.assign(a,e.csrfHeader()),{headers:a}}),n=[];e.additionalLinks?.length&&n.push(...e.additionalLinks),n.push(a,r,t);let o=s(n);e.wsLink&&(o=c(({query:e})=>{const t=p(e);return"OperationDefinition"===t.kind&&"subscription"===t.operation},e.wsLink,o));const l=e.defaultFetchPolicies;return new d({link:o,cache:new u({addTypename:e.addTypename??!0,typePolicies:e.cacheTypePolicies}),defaultOptions:{watchQuery:{fetchPolicy:l?.watchQuery??"cache-and-network"},query:{fetchPolicy:l?.query??"cache-first"},mutate:{fetchPolicy:l?.mutate??"network-only"}}})})(t),[t.httpUrl,t.wsLink,t.addTypename,t.credentials]),E=e(()=>({operations:r,context:a,apolloConfig:t}),[r,a,t]);return S(l,{client:o,children:S(b.Provider,{value:E,children:n})})},Y=b,x=(e,t)=>{if(e)return"string"==typeof e?e:N(e,t)},K=e=>{const{addNotification:t}=m(),r=(r,a,n,o,i)=>t({type:r,title:a,message:n,crdType:e,target:x(o,e),hideFromHistory:i});return{notify:r,notifyError:(e,t,a)=>r(I.Error,e,t,a),notifySuccess:(e,t,a)=>r(I.Success,e,t,a),notifyPending:(e,t)=>r(I.Default,"Pending",e,t,!0),notifyReadonly:()=>{t({type:I.Warning,title:A.READONLY,message:O.READONLY_WARNING,hideFromHistory:!0})}}},V=e=>{e({type:I.Warning,title:A.READONLY,message:O.READONLY_WARNING,hideFromHistory:!0})},$=e=>({error:e,results:[],allSucceeded:!1,anySucceeded:!1,successCount:0,failureCount:0}),B=(e,t)=>{if(e)return"function"==typeof e?e(t):e},j=e=>{if(!e)return"Unknown error";if(e instanceof Error)return e.cause instanceof Error?e.cause.message:e.message;if("object"==typeof e){const t=e;return t.cause?.message||t.message||String(e)}return String(e)},q=(e,t)=>e.client??t,Q=async(e,t,r,a,n)=>{if(!t)return{error:"Query operation not configured"};if(t.canRun&&!t.canRun(a))return{data:void 0};if(t.run)try{return await t.run(q(t,e),r,a)}catch(e){return{error:j(e)}}const o=B(t.document,a);if(!o)return{error:"Query operation not supported in this context"};const i=t.transformVariables?t.transformVariables(r,a):r,s=q(t,e);try{const e=await s.query({query:o,variables:i,fetchPolicy:n??"network-only"});return{data:t.transformResult?t.transformResult(e.data,a):e.data,error:e.error?j(e.error):void 0}}catch(e){return{error:j(e)}}},z=async(e,t,r,a)=>{if(!t)return{error:"Mutation operation not configured"};if(t.canRun&&!t.canRun(a))return{data:void 0};if(t.run)try{return await t.run(q(t,e),r,a)}catch(e){return{error:j(e)}}const n=B(t.document,a);if(!n)return{error:"Mutation operation not supported in this context"};const o=t.transformVariables?t.transformVariables(r,a):r,i=q(t,e);try{const e=await i.mutate({mutation:n,variables:o});return{data:t.transformResult?t.transformResult(e.data,a):e.data,error:void 0}}catch(e){return{error:j(e)}}},J=async(e,t,r,a,n)=>{if(!t)return $("Multi fetch operation not configured");if(!r.length)return $("No proxy ids supplied for multi fetch");const o=q(t,e);if(t.transformVariablesMulti&&(t.documentMulti||t.document)){const e=t.transformVariablesMulti(r,a,n),i=[];for(const r of e)try{const e=await o.query({query:r.document,variables:r.variables,fetchPolicy:"network-only"});t.transformMultiResult?t.transformMultiResult(e.data,n).forEach(e=>i.push(e)):r.proxyIDs.forEach(t=>{i.push({proxyID:t,success:!e.error,data:e.data,error:e.error?.message})})}catch(e){const t=j(e);r.proxyIDs.forEach(e=>i.push({proxyID:e,success:!1,error:t}))}const s=i.filter(e=>e.success).length,c=i.length-s,d=Array.from(new Set(i.filter(e=>!!e.error).map(e=>e.error)));return{results:i,allSucceeded:0===c,anySucceeded:s>0,successCount:s,failureCount:c,error:d.length?d.join(", "):void 0}}const i=await Promise.all(r.map(async r=>{const o={...n,proxyID:r},i=await Q(e,t,a,o);return{proxyID:r,success:!i.error,data:i.data,error:i.error}})),s=i.filter(e=>e.success).length,c=i.length-s,d=Array.from(new Set(i.filter(e=>!!e.error).map(e=>e.error)));return{results:i,allSucceeded:0===c,anySucceeded:s>0,successCount:s,failureCount:c,error:d.length?d.join(", "):void 0}},X=_`
2
2
  query OdigosApiNoop {
3
3
  __typename
4
4
  }
5
- `,Z=(e,t)=>{if(e)return"function"==typeof e?e(t):e},ee=(e,t)=>e[t],te=(e,t,r)=>{if(void 0===t)return;return e?.transformResult?e.transformResult(t,r):t},re=(e,t,r)=>{if(!e)return;const a=e.transformVariables;return a?a(t,r):t},ae=(t,r,n)=>{const{operations:o,context:i}=H(),s=ee(o,t),c=e(()=>Z(s?.document,i),[s,i]),d=e(()=>re(s,r,i),[s,r,i]),u=!s||!c,l=!!s?.canRun&&!s.canRun(i),E=n?.skip||u||l,f=T(c??J,{variables:d,skip:E,pollInterval:n?.pollInterval,fetchPolicy:n?.fetchPolicy??"cache-and-network",notifyOnNetworkStatusChange:n?.notifyOnNetworkStatusChange,client:s?.client,onCompleted:n?.onCompleted?e=>{const t=te(s,e,i);void 0!==t&&n.onCompleted(t)}:void 0,onError:n?.onError}),_=e(()=>{if(!E)return te(s,f.data,i)},[s,i,f.data,E]),S=a(async()=>{if(u)return{data:void 0};const e=await f.refetch();return{data:te(s,e.data,i)}},[s,i,f,u]);return{data:_,loading:!E&&f.loading,error:f.error,refetch:S,unsupported:u}},ne=(t,r)=>{const{operations:n,context:o}=H(),i=ee(n,t),s=e(()=>Z(i?.document,o),[i,o]),c=!i||!s,[d,u]=E(s??J,{fetchPolicy:r?.fetchPolicy??"network-only",notifyOnNetworkStatusChange:r?.notifyOnNetworkStatusChange,client:i?.client});return{execute:a(async e=>{if(c)return{error:void 0};if(i?.canRun&&!i.canRun(o))return{data:void 0};const t=re(i,e,o),r=await d({variables:t});return r.error?{error:r.error}:{data:te(i,r.data,o)}},[i,o,d,c]),data:e(()=>te(i,u.data,o),[i,o,u.data]),loading:u.loading,error:u.error,called:u.called,unsupported:c}},oe=(t,r)=>{const{operations:o,context:i}=H(),s=f(),c=ee(o,t),d=e(()=>Z(c?.document,i),[c,i]),u=!c||!d,[l,E]=n({loading:!1,called:!1}),T=a(()=>E({loading:!1,called:!1}),[]);return[a(async e=>{if(u||!d)return{error:void 0};if(c?.canRun&&!c.canRun(i))return{data:void 0};const t=re(c,e,i),a=c?.client??s;E(e=>({...e,loading:!0,called:!0}));try{const e=await a.mutate({mutation:d,variables:t}),n=te(c,e.data,i);if(E({data:n,loading:!1,error:void 0,called:!0}),r?.refetchQueries){const e=a.refetchQueries({include:r.refetchQueries});r?.awaitRefetchQueries&&await e}return void 0!==n&&r?.onCompleted?.(n),{data:n}}catch(e){const t=e;return E({data:void 0,loading:!1,error:t,called:!0}),r?.onError?.(t),{error:t}}},[c,i,s,d,u,r]),{data:l.data,loading:l.loading,error:l.error,called:l.called,unsupported:u,reset:T}]},ie=[],se=(e,t,r,a)=>{let n=!0;const o={sources:[]};for(const[i,s]of Object.entries(e)){if(!s.length)continue;n=!1;const e=s.map(({id:e,selected:t,currentStreamName:a})=>({namespace:e.namespace,name:e.name,kind:e.kind,selected:void 0!==t&&t,currentStreamName:a||r}));let c=0,d=0;for(const r of e){const e=t.find(e=>e.id.namespace===i&&e.id.name===r.name&&e.id.kind===r.kind),a=e?.dataStreamNames||[];r.selected&&!e?c++:!r.selected&&e&&a.length<=1&&d++}a(c,d),o.sources.push(...e)}return{payload:o,isEmpty:n}},ce=(e,t)=>{let r=!0;const a={namespaces:[]};for(const[n,{selected:o,currentStreamName:i}]of Object.entries(e))"boolean"==typeof o&&(r=!1,a.namespaces.push({namespace:n,selected:o,currentStreamName:i||t}));return{payload:a,isEmpty:r}},de={filter:{markedForInstrumentation:!0}},ue=[],le=[],Ee=async e=>{const t=(e=>{try{return new URL("/diagnose/download",e).toString()}catch{return null}})(e.httpUrl);if(t)try{const[r,a]=await Promise.all([Promise.resolve(e.authHeader?.()??{}),Promise.resolve(e.csrfHeader?.()??{})]),n=await fetch(t,{credentials:e.credentials??"same-origin",headers:{...r,...a}});if(!n.ok)throw new Error(`Failed to download diagnose archive: ${n.status} ${n.statusText}`);((e,t)=>{if("undefined"==typeof document)return;const r=URL.createObjectURL(e),a=document.createElement("a");a.href=r,a.download=t,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(r)})(await n.blob(),`odigos-diagnose-${Date.now()}.tar.gz`)}catch(e){}},fe=[],Te=[],_e=[],Se=[],ye=(e,t)=>({...e,fields:e.fields.filter(({value:e})=>void 0!==e),currentStreamName:t}),Re=()=>{const{operations:t,context:r}=H(),n=f(),i=((e,t)=>{const r=f(),{notifyError:n,notifySuccess:o,notifyPending:i,notifyReadonly:s}=x(h.Source),{selectedStreamName:c}=P(),{setProgress:d,resetProgress:u}=G(),{setConfiguredSources:l,setConfiguredFutureApps:E}=U(),T=(e,t)=>{const{progress:r}=G.getState();e>0&&d(v.Instrumenting,{total:(r[v.Instrumenting]?.total||0)+e,current:r[v.Instrumenting]?.current||0}),t>0&&d(v.Uninstrumenting,{total:(r[v.Uninstrumenting]?.total||0)+t,current:r[v.Uninstrumenting]?.current||0})},_=a(async()=>{const{error:a}=await Q(r,e.GET_WORKLOADS,de,t);a&&n(C.Read,a)},[r,e.GET_WORKLOADS,t,n]);return{useSources:()=>{const e=ae("GET_WORKLOADS",de,{fetchPolicy:"cache-first"});return{items:e.data?.workloads??ue,loading:e.loading,refetch:_}},fetchAll:_,fetchByTargets:async(a,o)=>{const i=!!o?.slim,s=a.map(e=>D(e,h.Source)).filter(e=>e.namespace&&e.name&&e.kind);if(0===s.length)return;if(s.length>50)return void await _();const c=i&&e.GET_WORKLOADS_BY_IDS_SLIM?e.GET_WORKLOADS_BY_IDS_SLIM:e.GET_WORKLOADS_BY_IDS,{error:d}=await Q(r,c,{ids:s.map(({namespace:e,kind:t,name:r})=>({namespace:e,kind:t,name:r}))},t);d?n(C.Read,d):await _()},fetchById:async a=>{const{data:o,error:i}=await Q(r,e.GET_WORKLOADS_BY_IDS,{ids:[{namespace:a.namespace,kind:a.kind,name:a.name}]},t);if(!i)return o?.workloadsByIds?.find(e=>e.id.namespace===a.namespace&&e.id.kind===a.kind&&e.id.name===a.name);n(C.Read,i)},fetchLibraries:async a=>Q(r,e.GET_SOURCE_LIBRARIES,a,t),fetchPeerSources:async a=>Q(r,e.GET_PEER_SOURCES,{serviceName:a},t),usePeerSources:(e,t)=>ae("GET_PEER_SOURCES",e,t),persist:async(a,o)=>{if(t.isReadonly)return s();const{data:d}=await Q(r,e.GET_WORKLOADS,de,t,"cache-first"),f=d?.workloads??ue,{payload:_,isEmpty:S}=se(a,f,c,T),{payload:y,isEmpty:R}=ce(o,c);let p=!1;S||(p=!0,i("Persisting sources...")),R||p||i("Persisting namespaces...");const{error:m}=await X(r,e.PERSIST_SOURCES,_,t);if(m&&(u(v.Instrumenting),u(v.Uninstrumenting),n(C.Update,m)),e.PERSIST_NAMESPACES){const{error:a}=await X(r,e.PERSIST_NAMESPACES,y,t);a&&n(C.Update,a)}l({}),E({})},persistV2:async a=>{if(t.isReadonly)return s(),{error:"readonly"};const n=[];for(const[,o]of Object.entries(a)){const a={sources:[]},i={namespaces:[]};for(const e of o)e.name&&e.kind?a.sources.push(e):i.namespaces.push(e);if(i.namespaces.length>0&&e.PERSIST_NAMESPACES){const{error:a}=await X(r,e.PERSIST_NAMESPACES,i,t);a&&n.push(a)}if(a.sources.length>0){const{error:o}=await X(r,e.PERSIST_SOURCES,a,t);o&&n.push(o)}}return n.length?{error:n.join(", ")}:void 0},update:async(a,d)=>{if(t.isReadonly)return s();i("Updating source...");const u={sourceId:a,patchSourceRequest:{...d,currentStreamName:c}},{data:l,error:E}=await X(r,e.UPDATE_SOURCE,u,t);E?n(C.Update,E,a):l?.updateK8sActualSource&&o(C.Update,`Successfully updated "${a.name}" source`,a)},restartWorkloads:async a=>{if(t.isReadonly)return s();i("Restarting sources...");const{data:c,error:d}=await X(r,e.RESTART_WORKLOADS,{sourceIds:a},t);d?n(C.Update,d):c?.restartWorkloads&&o(C.Update,`Successfully restarted ${a.length} sources`)},restartPod:async(a,c)=>{if(t.isReadonly)return s();i("Restarting pod...");const{data:d,error:u}=await X(r,e.RESTART_POD,{namespace:a,name:c},t);u?n(C.Update,u):d?.restartPod&&o(C.Update,`Successfully restarted pod ${a}/${c}`)},recoverFromRollback:async a=>{if(t.isReadonly)return s();i("Recovering from rollback...");const{data:c,error:d}=await X(r,e.RECOVER_FROM_ROLLBACK,{sourceId:a},t);d?n(C.Update,d,a):c?.recoverFromRollbackForWorkload&&o(C.Update,"Successfully triggered recovery from rollback")}}})(t,r),s=((e,t)=>{const r=f(),{notifyError:a,notifySuccess:n,notifyReadonly:o}=x(h.Destination),{selectedStreamName:i}=P(),s=async()=>{const{error:n}=await Q(r,e.GET_DESTINATIONS,void 0,t);n&&a(C.Read,n)};return{useDestinations:()=>{const e=ae("GET_DESTINATIONS",void 0,{fetchPolicy:"cache-first"});return{items:e.data?.computePlatform?.destinations??e.data?.destinations??Se,loading:e.loading,refetch:s}},useDestinationCategories:()=>{const e=ae("GET_DESTINATION_CATEGORIES",void 0);return{data:e.data,loading:e.loading}},usePotentialDestinations:()=>{const e=ae("GET_POTENTIAL_DESTINATIONS",void 0);return{data:e.data,loading:e.loading}},fetchAll:s,testConnection:async a=>{const{data:n}=await X(r,e.TEST_DESTINATION_CONNECTION,{destination:ye(a,i)},t);return n},create:async c=>{if(t.isReadonly)return o();const{error:d}=await X(r,e.CREATE_DESTINATION,{destination:ye(c,i)},t);d?a(C.Create,d):(n(C.Create,`Successfully created "${c.type}" destination`),await s())},update:async(c,d)=>{if(t.isReadonly)return o();const{data:u,error:l}=await X(r,e.UPDATE_DESTINATION,{id:c,destination:ye(d,i)},t);l?a(C.Update,l,c):u?.updateDestination&&(n(C.Update,`Successfully updated "${d.type}" destination`,c),await s())},remove:async c=>{if(t.isReadonly)return o();const{data:d}=await Q(r,e.GET_DESTINATIONS,void 0,t,"cache-first"),u=d?.computePlatform?.destinations??d?.destinations??Se,l=u.find(e=>w(e)===c)?.destinationType?.type,{error:E}=await X(r,e.DELETE_DESTINATION,{id:c,currentStreamName:i},t);E?a(C.Delete,E,c):(n(C.Delete,`Successfully deleted "${l??c}" destination`,c),await s())}}})(t,r),c=((e,t)=>{const r=f(),{notifyError:a,notifySuccess:n,notifyReadonly:o}=x(h.Action),i=async()=>{const{error:n}=await Q(r,e.GET_ACTIONS,void 0,t);n&&a(C.Read,n)};return{useActions:()=>{const e=ae("GET_ACTIONS",void 0,{fetchPolicy:"cache-first"});return{items:e.data?.computePlatform?.actions??e.data?.actions??le,loading:e.loading,refetch:i}},fetchAll:i,create:async s=>{if(t.isReadonly)return o();if(!e.CREATE_ACTION)return;const{error:c}=await X(r,e.CREATE_ACTION,{action:s},t);c?a(C.Create,c):(n(C.Create,`Successfully created "${s.type}" action`),await i())},update:async(s,c)=>{if(t.isReadonly)return o();if(!e.UPDATE_ACTION)return;const{error:d}=await X(r,e.UPDATE_ACTION,{id:s,action:c},t);d?a(C.Update,d,s):(n(C.Update,`Successfully updated "${c.type}" action`,s),await i())},remove:async(s,c)=>{if(t.isReadonly)return o();if(!e.DELETE_ACTION)return;const{error:d}=await X(r,e.DELETE_ACTION,{id:s,actionType:c},t);d?a(C.Delete,d,s):(n(C.Delete,`Successfully deleted "${c}" action`,s),await i())}}})(t,r),d=((t,r)=>{const a=f(),{notifyError:n,notifySuccess:o,notifyReadonly:i}=x(h.InstrumentationRule),s=async()=>{const{error:e}=await Q(a,t.GET_INSTRUMENTATION_RULES,void 0,r);e&&n(C.Read,e)};return{useRules:()=>{const t=ae("GET_INSTRUMENTATION_RULES",void 0,{fetchPolicy:"cache-first"});return{items:e(()=>(t.data?.computePlatform?.instrumentationRules??t.data?.instrumentationRules??[]).map(M),[t.data]),loading:t.loading,refetch:s}},fetchAll:s,create:async(e,c)=>{if(r.isReadonly)return i();if(!t.CREATE_INSTRUMENTATION_RULE)return;const{error:d}=await X(a,t.CREATE_INSTRUMENTATION_RULE,{instrumentationRule:F(e)},r);d?n(C.Create,d):(o(C.Create,`Successfully created${c?` "${c}"`:""} rule`),await s())},update:async(e,c,d)=>{if(r.isReadonly)return i();if(!t.UPDATE_INSTRUMENTATION_RULE)return;const{error:u}=await X(a,t.UPDATE_INSTRUMENTATION_RULE,{ruleId:e,instrumentationRule:F(c)},r);u?n(C.Update,u,e):(o(C.Update,`Successfully updated${d?` "${d}"`:""} rule`,e),await s())},remove:async(e,c)=>{if(r.isReadonly)return i();if(!t.DELETE_INSTRUMENTATION_RULE)return;const{error:d}=await X(a,t.DELETE_INSTRUMENTATION_RULE,{ruleId:e},r);d?n(C.Delete,d,e):(o(C.Delete,`Successfully deleted${c?` "${c}"`:""} rule`,e),await s())}}})(t,r),u=((e,t)=>{const r=f(),{addNotification:a}=m(),{setDataStreams:n}=P(),i=(e,t)=>a({type:I.Error,title:e,message:t}),s=async()=>{const{data:a,error:o}=await Q(r,e.GET_DATA_STREAMS,void 0,t);if(o)i(C.Read,o);else if(a){const e=a.computePlatform?.dataStreams??a.dataStreams??[];n(e)}},c=e.CREATE_DATA_STREAM?async n=>{if(t.isReadonly)return K(a);const{error:o}=await X(r,e.CREATE_DATA_STREAM,{stream:n},t);o?i(C.Create,o):await s()}:void 0;return{useDataStreams:()=>{const e=ae("GET_DATA_STREAMS",void 0,{fetchPolicy:"cache-first"}),t=e.data?.computePlatform?.dataStreams??e.data?.dataStreams??_e;return o(()=>{n(t)},[JSON.stringify(t.map(e=>e.name))]),{items:t,loading:e.loading,refetch:s}},fetchAll:s,create:c,update:async(n,o)=>{if(t.isReadonly)return K(a);const{error:c}=await X(r,e.UPDATE_DATA_STREAM,{id:n,dataStream:o},t);c?i(C.Update,c):await s()},remove:async n=>{if(t.isReadonly)return K(a);const{error:o}=await X(r,e.DELETE_DATA_STREAM,{id:n},t);o?i(C.Delete,o):await s()}}})(t,r),l=((e,t)=>{const r=f(),{notifyError:a,notifyReadonly:n}=x(h.Namespace),o=async()=>{const n=await Q(r,e.GET_NAMESPACES_WITH_WORKLOADS,void 0,t);return n.error&&a(C.Read,n.error),n};return{useNamespaces:()=>{const e=ae("GET_NAMESPACES_WITH_WORKLOADS",void 0,{fetchPolicy:"cache-first"});return{items:e.data?.namespaces??Te,loading:e.loading,refetch:o}},fetchAll:o,persist:async o=>{if(t.isReadonly)return n();const{error:i}=await X(r,e.PERSIST_NAMESPACES,o,t);return i&&a(C.Update,i),i?{error:i}:void 0}}})(t,r),E=((e,t)=>{const r=f(),{notifyError:a}=x(h.Source);return{fetch:async n=>{const o=await Q(r,e.GET_K8S_MANIFEST,n,t);return o.error&&a(C.Read,o.error),o}}})(t,r),T=((e,t)=>{const r=f(),{notifyError:a,notifySuccess:n,notifyReadonly:o}=x(h.Source);return{useEffectiveConfig:(e,t)=>ae("GET_EFFECTIVE_CONFIG",e,t),useConfigYamls:e=>ae("GET_CONFIG_YAMLS",void 0,e),getEffectiveConfig:async a=>e.GET_EFFECTIVE_CONFIG?Q(r,e.GET_EFFECTIVE_CONFIG,{id:a},t):{error:"GET_EFFECTIVE_CONFIG not configured"},applyConfigurations:e.UPDATE_REMOTE_CONFIG?async(n,i)=>{if(t.isReadonly)return o();const{error:s}=await X(r,e.UPDATE_REMOTE_CONFIG,{formData:n,connectionIds:i},t);return s&&a(C.Update,s),s?{error:s}:void 0}:void 0,getConfigYamls:e.GET_CONFIG_YAMLS?async()=>Q(r,e.GET_CONFIG_YAMLS,void 0,t):void 0,updateLocalUiConfig:e.UPDATE_LOCAL_UI_CONFIG?async i=>{if(t.isReadonly)return o();const{error:s}=await X(r,e.UPDATE_LOCAL_UI_CONFIG,{config:i},t);return s?a(C.Update,s):n(C.Update,"Local UI configuration updated successfully"),s?{error:s}:void 0}:void 0,resetLocalUiConfigToDefaults:e.RESET_LOCAL_UI_CONFIG_TO_FACTORY_DEFAULTS?async()=>{if(t.isReadonly)return o();const{error:i}=await X(r,e.RESET_LOCAL_UI_CONFIG_TO_FACTORY_DEFAULTS,void 0,t);return i?a(C.Update,i):n(C.Update,"Local UI configuration reset to factory defaults"),i?{error:i}:void 0}:void 0}})(t,r),_=((e,t)=>{const r=f(),{apolloConfig:a}=H();return{fetchDescribeOdigos:e.GET_DESCRIBE_ODIGOS?async()=>Q(r,e.GET_DESCRIBE_ODIGOS,void 0,t):void 0,fetchDescribeSource:e.GET_DESCRIBE_SOURCE?async a=>Q(r,e.GET_DESCRIBE_SOURCE,a,t):void 0,downloadDiagnose:e.GET_DIAGNOSE?async(n,o)=>{const i=await Q(r,e.GET_DIAGNOSE,{input:n,dryRun:o?.dryRun??!1},t),s=i?.data?.stats?.fileCount??0;return!i.error&&s>0&&!o?.dryRun&&await Ee(a),i}:void 0}})(t,r),S=((e,t)=>{const r=f(),{notifyError:a,notifyReadonly:n}=x(h.Source),o=async()=>{e.GET_TOKENS&&await Q(r,e.GET_TOKENS,void 0,t)};return{useTokens:()=>{const e=ae("GET_TOKENS",void 0,{fetchPolicy:"cache-first"});return{items:e.data??ie,loading:e.loading,refetch:o}},updateToken:e.UPDATE_TOKEN?async o=>{if(t.isReadonly)return n();const{error:i}=await X(r,e.UPDATE_TOKEN,{token:o},t);return i&&a(C.Update,i),i?{error:i}:void 0}:void 0}})(t,r),y=((e,t)=>{const r=f();return{useMetrics:e=>ae("GET_METRICS",void 0,e),fetch:async()=>Q(r,e.GET_METRICS,void 0,t)}})(t,r),R=((e,t)=>{const r=f();return{useServiceMap:e=>ae("GET_SERVICE_MAP",void 0,e),fetch:e.GET_SERVICE_MAP?async()=>Q(r,e.GET_SERVICE_MAP,void 0,t):void 0}})(t,r),p=((e,t)=>{const r=f();return{useSlots:e=>ae("GET_PROFILING_SLOTS",void 0,e),useSourceProfiling:(e,t)=>ae("GET_SOURCE_PROFILING",e,t),fetchSlots:e.GET_PROFILING_SLOTS?async()=>Q(r,e.GET_PROFILING_SLOTS,void 0,t):void 0,fetchSourceProfiling:e.GET_SOURCE_PROFILING?async a=>Q(r,e.GET_SOURCE_PROFILING,a,t):void 0,enableProfiling:e.ENABLE_SOURCE_PROFILING?async a=>X(r,e.ENABLE_SOURCE_PROFILING,a,t):void 0}})(t,r),O=((e,t)=>{const r=f();return{useGatewayInfo:e=>ae("GET_GATEWAY_INFO",void 0,e),useGatewayPods:e=>ae("GET_GATEWAY_PODS",void 0,e),useNodeCollectorInfo:e=>ae("GET_NODE_COLLECTOR_INFO",void 0,e),useNodeCollectorPods:e=>ae("GET_NODE_COLLECTOR_PODS",void 0,e),usePodInfo:(e,t)=>ae("GET_COLLECTOR_POD_INFO",e,t),getGatewayInfo:e.GET_GATEWAY_INFO?async()=>Q(r,e.GET_GATEWAY_INFO,void 0,t):void 0,getGatewayPods:e.GET_GATEWAY_PODS?async()=>Q(r,e.GET_GATEWAY_PODS,void 0,t):void 0,getNodeCollectorInfo:e.GET_NODE_COLLECTOR_INFO?async()=>Q(r,e.GET_NODE_COLLECTOR_INFO,void 0,t):void 0,getNodeCollectorPods:e.GET_NODE_COLLECTOR_PODS?async()=>Q(r,e.GET_NODE_COLLECTOR_PODS,void 0,t):void 0,getExtendedPodInfo:e.GET_COLLECTOR_POD_INFO?async(a,n)=>Q(r,e.GET_COLLECTOR_POD_INFO,{namespace:a,name:n},t):void 0}})(t,r),A=((e,t)=>{const r=f(),{notifyError:a,notifySuccess:n,notifyReadonly:o}=x(h.SamplingRule),i=async()=>{e.GET_SAMPLING_RULES&&await Q(r,e.GET_SAMPLING_RULES,void 0,t)},s=(e,s)=>e?async c=>{if(t.isReadonly)return o();const{error:d}=await X(r,e,c,t);return d?a(s,d):(n(C.Create,"Successfully created sampling rule"),await i()),d?{error:d}:void 0}:void 0,c=(e,s)=>e?async(c,d)=>{if(t.isReadonly)return o();const{error:u}=await X(r,e,{samplingId:d.samplingId,ruleId:c,rule:d.rule},t);return u?a(s,u):(n(C.Update,"Successfully updated sampling rule"),await i()),u?{error:u}:void 0}:void 0,d=e=>e?async(s,c)=>{if(t.isReadonly)return o();const{error:d}=await X(r,e,{samplingId:c,ruleId:s},t);return d?a(C.Delete,d):(n(C.Delete,"Successfully deleted sampling rule"),await i()),d?{error:d}:void 0}:void 0;return{useSamplingRules:()=>{const e=ae("GET_SAMPLING_RULES",void 0,{fetchPolicy:"cache-first"});return{items:e.data?.computePlatform?.samplingRules??e.data?.samplingRules??fe,k8sHealthProbesConfig:e.data?.computePlatform?.k8sHealthProbesConfig??e.data?.k8sHealthProbesConfig??null,loading:e.loading,refetch:i}},fetchAll:e.GET_SAMPLING_RULES?async()=>Q(r,e.GET_SAMPLING_RULES,void 0,t):void 0,createNoisy:s(e.CREATE_NOISY_OPERATION_RULE,C.Create),updateNoisy:c(e.UPDATE_NOISY_OPERATION_RULE,C.Update),deleteNoisy:d(e.DELETE_NOISY_OPERATION_RULE),createHighlyRelevant:s(e.CREATE_HIGHLY_RELEVANT_OPERATION_RULE,C.Create),updateHighlyRelevant:c(e.UPDATE_HIGHLY_RELEVANT_OPERATION_RULE,C.Update),deleteHighlyRelevant:d(e.DELETE_HIGHLY_RELEVANT_OPERATION_RULE),createCostReduction:s(e.CREATE_COST_REDUCTION_RULE,C.Create),updateCostReduction:c(e.UPDATE_COST_REDUCTION_RULE,C.Update),deleteCostReduction:d(e.DELETE_COST_REDUCTION_RULE),updateK8sHealthProbesConfig:e.UPDATE_LOCAL_UI_SAMPLING_CONFIG?async n=>{if(t.isReadonly)return o();const{error:s}=await X(r,e.UPDATE_LOCAL_UI_SAMPLING_CONFIG,{config:{k8sHealthProbesSampling:n}},t);return s?a(C.Update,s):await i(),s?{error:s}:void 0}:void 0}})(t,r),N=((e,t)=>{const r=f();return{useSnapshots:()=>{const e=ae("GET_ALL_CLUSTER_SNAPSHOTS",void 0,{fetchPolicy:"cache-first"});return{data:e.data,loading:e.loading,unsupported:e.unsupported,refetch:e.refetch}},getAllClusterSnapshots:e.GET_ALL_CLUSTER_SNAPSHOTS?async()=>Q(r,e.GET_ALL_CLUSTER_SNAPSHOTS,void 0,t):void 0,getClusterSnapshot:e.GET_CLUSTER_SNAPSHOT?async a=>Q(r,e.GET_CLUSTER_SNAPSHOT,{clusterId:a},t):void 0}})(t,r);return{sourcesApi:i,destinationsApi:s,actionsApi:c,instrumentationRulesApi:d,dataStreamsApi:u,namespacesApi:l,k8sManifestApi:E,configApi:T,describeApi:_,tokensApi:S,metricsApi:y,serviceMapApi:R,profilingApi:p,collectorsApi:O,samplingApi:A,snapshotsApi:N,capabilities:e(()=>((e,t)=>{const r=t.platformType===g.Vm,a=t.tier===L.Onprem,n=!r;return{canBulkPersistSources:n&&!!e.PERSIST_SOURCES,canInstrumentNamespaces:n&&!!e.PERSIST_NAMESPACES,canFetchSnapshots:n&&!!e.GET_ALL_CLUSTER_SNAPSHOTS,canRecoverFromRollback:n&&!!e.RECOVER_FROM_ROLLBACK,canRestartWorkloads:n&&!!e.RESTART_WORKLOADS,canFetchPeerSources:!!e.GET_PEER_SOURCES,canFetchSourceLibraries:!!e.GET_SOURCE_LIBRARIES,canFetchK8sManifest:n&&!!e.GET_K8S_MANIFEST,canCreateDestination:n&&!!e.CREATE_DESTINATION,canTestConnection:n&&!!e.TEST_DESTINATION_CONNECTION,canFetchDestinationCategories:!!e.GET_DESTINATION_CATEGORIES,canFetchPotentialDestinations:n&&!!e.GET_POTENTIAL_DESTINATIONS,canCreateAction:n&&!!e.CREATE_ACTION,canCreateInstrumentationRule:n&&!!e.CREATE_INSTRUMENTATION_RULE,canApplyEffectiveConfig:n&&!!e.UPDATE_REMOTE_CONFIG&&!!e.GET_EFFECTIVE_CONFIG,canFetchEffectiveConfig:!!e.GET_EFFECTIVE_CONFIG,canFetchConfigYamls:!!e.GET_CONFIG_YAMLS,canFetchProfiling:n&&!!e.GET_PROFILING_SLOTS,canFetchCollectorInfo:n&&!!e.GET_GATEWAY_INFO,canManageSamplingRules:!!e.GET_SAMPLING_RULES,isEnterprise:a,isVm:r}})(t,r),[t,r]),resetCache:a(async()=>{await n.cache.reset()},[n])}};export{Y as O,W as _,se as a,oe as b,ae as c,Re as d,H as e,z as f,ce as p,X as r,ne as u};
5
+ `,Z=(e,t)=>{if(e)return"function"==typeof e?e(t):e},ee=(e,t)=>e[t],te=(e,t,r)=>{if(void 0===t)return;return e?.transformResult?e.transformResult(t,r):t},re=(e,t,r)=>{if(!e)return;const a=e.transformVariables;return a?a(t,r):t},ae=(t,r,n)=>{const{operations:o,context:i}=H(),s=ee(o,t),c=e(()=>Z(s?.document,i),[s,i]),d=e(()=>re(s,r,i),[s,r,i]),u=!s||!c,l=!!s?.canRun&&!s.canRun(i),E=n?.skip||u||l,f=T(c??X,{variables:d,skip:E,pollInterval:n?.pollInterval,fetchPolicy:n?.fetchPolicy??"cache-and-network",notifyOnNetworkStatusChange:n?.notifyOnNetworkStatusChange,client:s?.client,onCompleted:n?.onCompleted?e=>{const t=te(s,e,i);void 0!==t&&n.onCompleted(t)}:void 0,onError:n?.onError}),_=e(()=>{if(!E)return te(s,f.data,i)},[s,i,f.data,E]),S=a(async()=>{if(u)return{data:void 0};const e=await f.refetch();return{data:te(s,e.data,i)}},[s,i,f,u]);return{data:_,loading:!E&&f.loading,error:f.error,refetch:S,unsupported:u}},ne=(t,r)=>{const{operations:n,context:o}=H(),i=ee(n,t),s=e(()=>Z(i?.document,o),[i,o]),c=!i||!s,[d,u]=E(s??X,{fetchPolicy:r?.fetchPolicy??"network-only",notifyOnNetworkStatusChange:r?.notifyOnNetworkStatusChange,client:i?.client});return{execute:a(async e=>{if(c)return{error:void 0};if(i?.canRun&&!i.canRun(o))return{data:void 0};const t=re(i,e,o),r=await d({variables:t});return r.error?{error:r.error}:{data:te(i,r.data,o)}},[i,o,d,c]),data:e(()=>te(i,u.data,o),[i,o,u.data]),loading:u.loading,error:u.error,called:u.called,unsupported:c}},oe=(t,r)=>{const{operations:o,context:i}=H(),s=f(),c=ee(o,t),d=e(()=>Z(c?.document,i),[c,i]),u=!c||!d,[l,E]=n({loading:!1,called:!1}),T=a(()=>E({loading:!1,called:!1}),[]);return[a(async e=>{if(u||!d)return{error:void 0};if(c?.canRun&&!c.canRun(i))return{data:void 0};const t=re(c,e,i),a=c?.client??s;E(e=>({...e,loading:!0,called:!0}));try{const e=await a.mutate({mutation:d,variables:t}),n=te(c,e.data,i);if(E({data:n,loading:!1,error:void 0,called:!0}),r?.refetchQueries){const e=a.refetchQueries({include:r.refetchQueries});r?.awaitRefetchQueries&&await e}return void 0!==n&&r?.onCompleted?.(n),{data:n}}catch(e){const t=e;return E({data:void 0,loading:!1,error:t,called:!0}),r?.onError?.(t),{error:t}}},[c,i,s,d,u,r]),{data:l.data,loading:l.loading,error:l.error,called:l.called,unsupported:u,reset:T}]},ie=[],se=(e,t,r,a)=>{let n=!0;const o={sources:[]};for(const[i,s]of Object.entries(e)){if(!s.length)continue;n=!1;const e=s.map(({id:e,selected:t,currentStreamName:a})=>({namespace:e.namespace,name:e.name,kind:e.kind,selected:void 0!==t&&t,currentStreamName:a||r}));let c=0,d=0;for(const r of e){const e=t.find(e=>e.id.namespace===i&&e.id.name===r.name&&e.id.kind===r.kind),a=e?.dataStreamNames||[];r.selected&&!e?c++:!r.selected&&e&&a.length<=1&&d++}a(c,d),o.sources.push(...e)}return{payload:o,isEmpty:n}},ce=(e,t)=>{let r=!0;const a={namespaces:[]};for(const[n,{selected:o,currentStreamName:i}]of Object.entries(e))"boolean"==typeof o&&(r=!1,a.namespaces.push({namespace:n,selected:o,currentStreamName:i||t}));return{payload:a,isEmpty:r}},de={filter:{markedForInstrumentation:!0}},ue=[],le=[],Ee=async e=>{const t=(e=>{try{return new URL("/diagnose/download",e).toString()}catch{return null}})(e.httpUrl);if(t)try{const[r,a]=await Promise.all([Promise.resolve(e.authHeader?.()??{}),Promise.resolve(e.csrfHeader?.()??{})]),n=await fetch(t,{credentials:e.credentials??"same-origin",headers:{...r,...a}});if(!n.ok)throw new Error(`Failed to download diagnose archive: ${n.status} ${n.statusText}`);((e,t)=>{if("undefined"==typeof document)return;const r=URL.createObjectURL(e),a=document.createElement("a");a.href=r,a.download=t,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(r)})(await n.blob(),`odigos-diagnose-${Date.now()}.tar.gz`)}catch(e){}},fe=[],Te=[],_e=[],Se=[],ye=(e,t)=>({...e,fields:e.fields.filter(({value:e})=>void 0!==e),currentStreamName:t}),Re=()=>{const{operations:t,context:r}=H(),n=f(),i=((e,t)=>{const r=f(),{notifyError:n,notifySuccess:o,notifyPending:i,notifyReadonly:s}=K(h.Source),{selectedStreamName:c}=P(),{setProgress:d,resetProgress:u}=G(),{setConfiguredSources:l,setConfiguredFutureApps:E}=v(),T=(e,t)=>{const{progress:r}=G.getState();e>0&&d(U.Instrumenting,{total:(r[U.Instrumenting]?.total||0)+e,current:r[U.Instrumenting]?.current||0}),t>0&&d(U.Uninstrumenting,{total:(r[U.Uninstrumenting]?.total||0)+t,current:r[U.Uninstrumenting]?.current||0})},_=a(async()=>{const{error:a}=await Q(r,e.GET_WORKLOADS,de,t);a&&n(C.Read,a)},[r,e.GET_WORKLOADS,t,n]);return{useSources:()=>{const e=ae("GET_WORKLOADS",de,{fetchPolicy:"cache-first"});return{items:e.data?.workloads??ue,loading:e.loading,refetch:_}},fetchAll:_,fetchByTargets:async(a,o)=>{const i=!!o?.slim,s=a.map(e=>D(e,h.Source)).filter(e=>e.namespace&&e.name&&e.kind);if(0===s.length)return;if(s.length>50)return void await _();const c=i&&e.GET_WORKLOADS_BY_IDS_SLIM?e.GET_WORKLOADS_BY_IDS_SLIM:e.GET_WORKLOADS_BY_IDS,{error:d}=await Q(r,c,{ids:s.map(({namespace:e,kind:t,name:r})=>({namespace:e,kind:t,name:r}))},t);d?n(C.Read,d):await _()},fetchById:async a=>{const{data:o,error:i}=await Q(r,e.GET_WORKLOADS_BY_IDS,{ids:[{namespace:a.namespace,kind:a.kind,name:a.name}]},t);if(!i)return o?.workloadsByIds?.find(e=>e.id.namespace===a.namespace&&e.id.kind===a.kind&&e.id.name===a.name);n(C.Read,i)},fetchLibraries:async a=>Q(r,e.GET_SOURCE_LIBRARIES,a,t),fetchPeerSources:async a=>Q(r,e.GET_PEER_SOURCES,{serviceName:a},t),usePeerSources:(e,t)=>ae("GET_PEER_SOURCES",e,t),persist:async(a,o)=>{if(t.isReadonly)return s();const{data:d}=await Q(r,e.GET_WORKLOADS,de,t,"cache-first"),f=d?.workloads??ue,{payload:_,isEmpty:S}=se(a,f,c,T),{payload:y,isEmpty:R}=ce(o,c);let p=!1;S||(p=!0,i("Persisting sources...")),R||p||i("Persisting namespaces...");const{error:m}=await z(r,e.PERSIST_SOURCES,_,t);if(m&&(u(U.Instrumenting),u(U.Uninstrumenting),n(C.Update,m)),e.PERSIST_NAMESPACES){const{error:a}=await z(r,e.PERSIST_NAMESPACES,y,t);a&&n(C.Update,a)}l({}),E({})},persistV2:async a=>{if(t.isReadonly)return s(),{error:"readonly"};const n=[];for(const[,o]of Object.entries(a)){const a={sources:[]},i={namespaces:[]};for(const e of o)e.name&&e.kind?a.sources.push(e):i.namespaces.push(e);if(i.namespaces.length>0&&e.PERSIST_NAMESPACES){const{error:a}=await z(r,e.PERSIST_NAMESPACES,i,t);a&&n.push(a)}if(a.sources.length>0){const{error:o}=await z(r,e.PERSIST_SOURCES,a,t);o&&n.push(o)}}return n.length?{error:n.join(", ")}:void 0},update:async(a,d)=>{if(t.isReadonly)return s();i("Updating source...");const u={sourceId:a,patchSourceRequest:{...d,currentStreamName:c}},{data:l,error:E}=await z(r,e.UPDATE_SOURCE,u,t);E?n(C.Update,E,a):l?.updateK8sActualSource&&o(C.Update,`Successfully updated "${a.name}" source`,a)},restartWorkloads:async a=>{if(t.isReadonly)return s();i("Restarting sources...");const{data:c,error:d}=await z(r,e.RESTART_WORKLOADS,{sourceIds:a},t);d?n(C.Update,d):c?.restartWorkloads&&o(C.Update,`Successfully restarted ${a.length} sources`)},restartPod:async(a,c)=>{if(t.isReadonly)return s();i("Restarting pod...");const{data:d,error:u}=await z(r,e.RESTART_POD,{namespace:a,name:c},t);u?n(C.Update,u):d?.restartPod&&o(C.Update,`Successfully restarted pod ${a}/${c}`)},recoverFromRollback:async a=>{if(t.isReadonly)return s();i("Recovering from rollback...");const{data:c,error:d}=await z(r,e.RECOVER_FROM_ROLLBACK,{sourceId:a},t);d?n(C.Update,d,a):c?.recoverFromRollbackForWorkload&&o(C.Update,"Successfully triggered recovery from rollback")}}})(t,r),s=((e,t)=>{const r=f(),{notifyError:a,notifySuccess:n,notifyReadonly:o}=K(h.Destination),{selectedStreamName:i}=P(),s=async()=>{const{error:n}=await Q(r,e.GET_DESTINATIONS,void 0,t);n&&a(C.Read,n)};return{useDestinations:()=>{const e=ae("GET_DESTINATIONS",void 0,{fetchPolicy:"cache-first"});return{items:e.data?.computePlatform?.destinations??e.data?.destinations??Se,loading:e.loading,refetch:s}},useDestinationCategories:()=>{const e=ae("GET_DESTINATION_CATEGORIES",void 0);return{data:e.data,loading:e.loading}},usePotentialDestinations:()=>{const e=ae("GET_POTENTIAL_DESTINATIONS",void 0);return{data:e.data,loading:e.loading}},fetchAll:s,testConnection:async a=>{const{data:n}=await z(r,e.TEST_DESTINATION_CONNECTION,{destination:ye(a,i)},t);return n},create:async c=>{if(t.isReadonly)return o();const{error:d}=await z(r,e.CREATE_DESTINATION,{destination:ye(c,i)},t);d?a(C.Create,d):(n(C.Create,`Successfully created "${c.type}" destination`),await s())},update:async(c,d)=>{if(t.isReadonly)return o();const{data:u,error:l}=await z(r,e.UPDATE_DESTINATION,{id:c,destination:ye(d,i)},t);l?a(C.Update,l,c):u?.updateDestination&&(n(C.Update,`Successfully updated "${d.type}" destination`,c),await s())},remove:async c=>{if(t.isReadonly)return o();const{data:d}=await Q(r,e.GET_DESTINATIONS,void 0,t,"cache-first"),u=d?.computePlatform?.destinations??d?.destinations??Se,l=u.find(e=>w(e)===c)?.destinationType?.type,{error:E}=await z(r,e.DELETE_DESTINATION,{id:c,currentStreamName:i},t);E?a(C.Delete,E,c):(n(C.Delete,`Successfully deleted "${l??c}" destination`,c),await s())}}})(t,r),c=((e,t)=>{const r=f(),{notifyError:a,notifySuccess:n,notifyReadonly:o}=K(h.Action),i=async()=>{const{error:n}=await Q(r,e.GET_ACTIONS,void 0,t);n&&a(C.Read,n)};return{useActions:()=>{const e=ae("GET_ACTIONS",void 0,{fetchPolicy:"cache-first"});return{items:e.data?.computePlatform?.actions??e.data?.actions??le,loading:e.loading,refetch:i}},fetchAll:i,create:async s=>{if(t.isReadonly)return o();if(!e.CREATE_ACTION)return;const{error:c}=await z(r,e.CREATE_ACTION,{action:s},t);c?a(C.Create,c):(n(C.Create,`Successfully created "${s.type}" action`),await i())},update:async(s,c)=>{if(t.isReadonly)return o();if(!e.UPDATE_ACTION)return;const{error:d}=await z(r,e.UPDATE_ACTION,{id:s,action:c},t);d?a(C.Update,d,s):(n(C.Update,`Successfully updated "${c.type}" action`,s),await i())},remove:async(s,c)=>{if(t.isReadonly)return o();if(!e.DELETE_ACTION)return;const{error:d}=await z(r,e.DELETE_ACTION,{id:s,actionType:c},t);d?a(C.Delete,d,s):(n(C.Delete,`Successfully deleted "${c}" action`,s),await i())}}})(t,r),d=((t,r)=>{const a=f(),{notifyError:n,notifySuccess:o,notifyReadonly:i}=K(h.InstrumentationRule),s=async()=>{const{error:e}=await Q(a,t.GET_INSTRUMENTATION_RULES,void 0,r);e&&n(C.Read,e)};return{useRules:()=>{const t=ae("GET_INSTRUMENTATION_RULES",void 0,{fetchPolicy:"cache-first"});return{items:e(()=>(t.data?.computePlatform?.instrumentationRules??t.data?.instrumentationRules??[]).map(M),[t.data]),loading:t.loading,refetch:s}},fetchAll:s,create:async(e,c)=>{if(r.isReadonly)return i();if(!t.CREATE_INSTRUMENTATION_RULE)return;const{error:d}=await z(a,t.CREATE_INSTRUMENTATION_RULE,{instrumentationRule:F(e)},r);d?n(C.Create,d):(o(C.Create,`Successfully created${c?` "${c}"`:""} rule`),await s())},update:async(e,c,d)=>{if(r.isReadonly)return i();if(!t.UPDATE_INSTRUMENTATION_RULE)return;const{error:u}=await z(a,t.UPDATE_INSTRUMENTATION_RULE,{ruleId:e,instrumentationRule:F(c)},r);u?n(C.Update,u,e):(o(C.Update,`Successfully updated${d?` "${d}"`:""} rule`,e),await s())},remove:async(e,c)=>{if(r.isReadonly)return i();if(!t.DELETE_INSTRUMENTATION_RULE)return;const{error:d}=await z(a,t.DELETE_INSTRUMENTATION_RULE,{ruleId:e},r);d?n(C.Delete,d,e):(o(C.Delete,`Successfully deleted${c?` "${c}"`:""} rule`,e),await s())}}})(t,r),u=((e,t)=>{const r=f(),{addNotification:a}=m(),{setDataStreams:n}=P(),i=(e,t)=>a({type:I.Error,title:e,message:t}),s=async()=>{const{data:a,error:o}=await Q(r,e.GET_DATA_STREAMS,void 0,t);if(o)i(C.Read,o);else if(a){const e=a.computePlatform?.dataStreams??a.dataStreams??[];n(e)}},c=e.CREATE_DATA_STREAM?async n=>{if(t.isReadonly)return V(a);const{error:o}=await z(r,e.CREATE_DATA_STREAM,{stream:n},t);o?i(C.Create,o):await s()}:void 0;return{useDataStreams:()=>{const e=ae("GET_DATA_STREAMS",void 0,{fetchPolicy:"cache-first"}),t=e.data?.computePlatform?.dataStreams??e.data?.dataStreams??_e;return o(()=>{n(t)},[JSON.stringify(t.map(e=>e.name))]),{items:t,loading:e.loading,refetch:s}},fetchAll:s,create:c,update:async(n,o)=>{if(t.isReadonly)return V(a);const{error:c}=await z(r,e.UPDATE_DATA_STREAM,{id:n,dataStream:o},t);c?i(C.Update,c):await s()},remove:async n=>{if(t.isReadonly)return V(a);const{error:o}=await z(r,e.DELETE_DATA_STREAM,{id:n},t);o?i(C.Delete,o):await s()}}})(t,r),l=((e,t)=>{const r=f(),{notifyError:a,notifyReadonly:n}=K(h.Namespace),o=async()=>{const n=await Q(r,e.GET_NAMESPACES_WITH_WORKLOADS,void 0,t);return n.error&&a(C.Read,n.error),n};return{useNamespaces:()=>{const e=ae("GET_NAMESPACES_WITH_WORKLOADS",void 0,{fetchPolicy:"cache-first"});return{items:e.data?.namespaces??Te,loading:e.loading,refetch:o}},fetchAll:o,persist:async o=>{if(t.isReadonly)return n();const{error:i}=await z(r,e.PERSIST_NAMESPACES,o,t);return i&&a(C.Update,i),i?{error:i}:void 0}}})(t,r),E=((e,t)=>{const r=f(),{notifyError:a}=K(h.Source);return{fetch:async n=>{const o=await Q(r,e.GET_K8S_MANIFEST,n,t);return o.error&&a(C.Read,o.error),o}}})(t,r),T=((e,t)=>{const r=f(),{notifyError:a,notifySuccess:n,notifyReadonly:o}=K(h.Source);return{useEffectiveConfig:(e,t)=>ae("GET_EFFECTIVE_CONFIG",e,t),useConfigYamls:e=>ae("GET_CONFIG_YAMLS",void 0,e),getEffectiveConfig:async a=>e.GET_EFFECTIVE_CONFIG?Q(r,e.GET_EFFECTIVE_CONFIG,{id:a},t):{error:"GET_EFFECTIVE_CONFIG not configured"},applyConfigurations:e.UPDATE_REMOTE_CONFIG?async(n,i)=>{if(t.isReadonly)return o();const{error:s}=await z(r,e.UPDATE_REMOTE_CONFIG,{formData:n,connectionIds:i},t);return s&&a(C.Update,s),s?{error:s}:void 0}:void 0,getConfigYamls:e.GET_CONFIG_YAMLS?async()=>Q(r,e.GET_CONFIG_YAMLS,void 0,t):void 0,updateLocalUiConfig:e.UPDATE_LOCAL_UI_CONFIG?async i=>{if(t.isReadonly)return o();const{error:s}=await z(r,e.UPDATE_LOCAL_UI_CONFIG,{config:i},t);return s?a(C.Update,s):n(C.Update,"Local UI configuration updated successfully"),s?{error:s}:void 0}:void 0,resetLocalUiConfigToDefaults:e.RESET_LOCAL_UI_CONFIG_TO_FACTORY_DEFAULTS?async()=>{if(t.isReadonly)return o();const{error:i}=await z(r,e.RESET_LOCAL_UI_CONFIG_TO_FACTORY_DEFAULTS,void 0,t);return i?a(C.Update,i):n(C.Update,"Local UI configuration reset to factory defaults"),i?{error:i}:void 0}:void 0}})(t,r),_=((e,t)=>{const r=f(),{apolloConfig:a}=H();return{fetchDescribeOdigos:e.GET_DESCRIBE_ODIGOS?async()=>Q(r,e.GET_DESCRIBE_ODIGOS,void 0,t):void 0,fetchDescribeSource:e.GET_DESCRIBE_SOURCE?async a=>Q(r,e.GET_DESCRIBE_SOURCE,a,t):void 0,downloadDiagnose:e.GET_DIAGNOSE?async(n,o)=>{const i=await Q(r,e.GET_DIAGNOSE,{input:n,dryRun:o?.dryRun??!1},t),s=i?.data?.stats?.fileCount??0;return!i.error&&s>0&&!o?.dryRun&&await Ee(a),i}:void 0}})(t,r),S=((e,t)=>{const r=f(),{notifyError:a,notifyReadonly:n}=K(h.Source),o=async()=>{e.GET_TOKENS&&await Q(r,e.GET_TOKENS,void 0,t)};return{useTokens:()=>{const e=ae("GET_TOKENS",void 0,{fetchPolicy:"cache-first"});return{items:e.data??ie,loading:e.loading,refetch:o}},updateToken:e.UPDATE_TOKEN?async o=>{if(t.isReadonly)return n();const{error:i}=await z(r,e.UPDATE_TOKEN,{token:o},t);return i&&a(C.Update,i),i?{error:i}:void 0}:void 0}})(t,r),y=((e,t)=>{const r=f();return{useMetrics:e=>ae("GET_METRICS",void 0,e),fetch:async()=>Q(r,e.GET_METRICS,void 0,t)}})(t,r),R=((e,t)=>{const r=f();return{useServiceMap:e=>ae("GET_SERVICE_MAP",void 0,e),fetch:e.GET_SERVICE_MAP?async()=>Q(r,e.GET_SERVICE_MAP,void 0,t):void 0}})(t,r),p=((e,t)=>{const r=f();return{useSlots:e=>ae("GET_PROFILING_SLOTS",void 0,e),useSourceProfiling:(e,t)=>ae("GET_SOURCE_PROFILING",e,t),fetchSlots:e.GET_PROFILING_SLOTS?async()=>Q(r,e.GET_PROFILING_SLOTS,void 0,t):void 0,fetchSourceProfiling:e.GET_SOURCE_PROFILING?async a=>Q(r,e.GET_SOURCE_PROFILING,a,t):void 0,enableProfiling:e.ENABLE_SOURCE_PROFILING?async a=>z(r,e.ENABLE_SOURCE_PROFILING,a,t):void 0}})(t,r),O=((e,t)=>{const r=f();return{useGatewayInfo:e=>ae("GET_GATEWAY_INFO",void 0,e),useGatewayPods:e=>ae("GET_GATEWAY_PODS",void 0,e),useNodeCollectorInfo:e=>ae("GET_NODE_COLLECTOR_INFO",void 0,e),useNodeCollectorPods:e=>ae("GET_NODE_COLLECTOR_PODS",void 0,e),usePodInfo:(e,t)=>ae("GET_COLLECTOR_POD_INFO",e,t),getGatewayInfo:e.GET_GATEWAY_INFO?async()=>Q(r,e.GET_GATEWAY_INFO,void 0,t):void 0,getGatewayPods:e.GET_GATEWAY_PODS?async()=>Q(r,e.GET_GATEWAY_PODS,void 0,t):void 0,getNodeCollectorInfo:e.GET_NODE_COLLECTOR_INFO?async()=>Q(r,e.GET_NODE_COLLECTOR_INFO,void 0,t):void 0,getNodeCollectorPods:e.GET_NODE_COLLECTOR_PODS?async()=>Q(r,e.GET_NODE_COLLECTOR_PODS,void 0,t):void 0,getExtendedPodInfo:e.GET_COLLECTOR_POD_INFO?async(a,n)=>Q(r,e.GET_COLLECTOR_POD_INFO,{namespace:a,name:n},t):void 0}})(t,r),A=((e,t)=>{const r=f(),{notifyError:a,notifySuccess:n,notifyReadonly:o}=K(h.SamplingRule),i=async()=>{e.GET_SAMPLING_RULES&&await Q(r,e.GET_SAMPLING_RULES,void 0,t)},s=(e,s)=>e?async c=>{if(t.isReadonly)return o();const{error:d}=await z(r,e,c,t);return d?a(s,d):(n(C.Create,"Successfully created sampling rule"),await i()),d?{error:d}:void 0}:void 0,c=(e,s)=>e?async(c,d)=>{if(t.isReadonly)return o();const{error:u}=await z(r,e,{samplingId:d.samplingId,ruleId:c,rule:d.rule},t);return u?a(s,u):(n(C.Update,"Successfully updated sampling rule"),await i()),u?{error:u}:void 0}:void 0,d=e=>e?async(s,c)=>{if(t.isReadonly)return o();const{error:d}=await z(r,e,{samplingId:c,ruleId:s},t);return d?a(C.Delete,d):(n(C.Delete,"Successfully deleted sampling rule"),await i()),d?{error:d}:void 0}:void 0;return{useSamplingRules:()=>{const e=ae("GET_SAMPLING_RULES",void 0,{fetchPolicy:"cache-first"});return{items:e.data?.computePlatform?.samplingRules??e.data?.samplingRules??fe,k8sHealthProbesConfig:e.data?.computePlatform?.k8sHealthProbesConfig??e.data?.k8sHealthProbesConfig??null,loading:e.loading,refetch:i}},fetchAll:e.GET_SAMPLING_RULES?async()=>Q(r,e.GET_SAMPLING_RULES,void 0,t):void 0,createNoisy:s(e.CREATE_NOISY_OPERATION_RULE,C.Create),updateNoisy:c(e.UPDATE_NOISY_OPERATION_RULE,C.Update),deleteNoisy:d(e.DELETE_NOISY_OPERATION_RULE),createHighlyRelevant:s(e.CREATE_HIGHLY_RELEVANT_OPERATION_RULE,C.Create),updateHighlyRelevant:c(e.UPDATE_HIGHLY_RELEVANT_OPERATION_RULE,C.Update),deleteHighlyRelevant:d(e.DELETE_HIGHLY_RELEVANT_OPERATION_RULE),createCostReduction:s(e.CREATE_COST_REDUCTION_RULE,C.Create),updateCostReduction:c(e.UPDATE_COST_REDUCTION_RULE,C.Update),deleteCostReduction:d(e.DELETE_COST_REDUCTION_RULE),updateK8sHealthProbesConfig:e.UPDATE_LOCAL_UI_SAMPLING_CONFIG?async n=>{if(t.isReadonly)return o();const{error:s}=await z(r,e.UPDATE_LOCAL_UI_SAMPLING_CONFIG,{config:{k8sHealthProbesSampling:n}},t);return s?a(C.Update,s):await i(),s?{error:s}:void 0}:void 0}})(t,r),N=((e,t)=>{const r=f();return{useSnapshots:()=>{const e=ae("GET_ALL_CLUSTER_SNAPSHOTS",void 0,{fetchPolicy:"cache-first"});return{data:e.data,loading:e.loading,unsupported:e.unsupported,refetch:e.refetch}},getAllClusterSnapshots:e.GET_ALL_CLUSTER_SNAPSHOTS?async()=>Q(r,e.GET_ALL_CLUSTER_SNAPSHOTS,void 0,t):void 0,getClusterSnapshot:e.GET_CLUSTER_SNAPSHOT?async a=>Q(r,e.GET_CLUSTER_SNAPSHOT,{clusterId:a},t):void 0}})(t,r);return{sourcesApi:i,destinationsApi:s,actionsApi:c,instrumentationRulesApi:d,dataStreamsApi:u,namespacesApi:l,k8sManifestApi:E,configApi:T,describeApi:_,tokensApi:S,metricsApi:y,serviceMapApi:R,profilingApi:p,collectorsApi:O,samplingApi:A,snapshotsApi:N,capabilities:e(()=>((e,t)=>{const r=t.platformType===g.Vm,a=t.tier===L.Onprem,n=!r;return{canBulkPersistSources:n&&!!e.PERSIST_SOURCES,canInstrumentNamespaces:n&&!!e.PERSIST_NAMESPACES,canFetchSnapshots:n&&!!e.GET_ALL_CLUSTER_SNAPSHOTS,canRecoverFromRollback:n&&!!e.RECOVER_FROM_ROLLBACK,canRestartWorkloads:n&&!!e.RESTART_WORKLOADS,canFetchPeerSources:!!e.GET_PEER_SOURCES,canFetchSourceLibraries:!!e.GET_SOURCE_LIBRARIES,canFetchK8sManifest:n&&!!e.GET_K8S_MANIFEST,canCreateDestination:n&&!!e.CREATE_DESTINATION,canTestConnection:n&&!!e.TEST_DESTINATION_CONNECTION,canFetchDestinationCategories:!!e.GET_DESTINATION_CATEGORIES,canFetchPotentialDestinations:n&&!!e.GET_POTENTIAL_DESTINATIONS,canCreateAction:n&&!!e.CREATE_ACTION,canCreateInstrumentationRule:n&&!!e.CREATE_INSTRUMENTATION_RULE,canApplyEffectiveConfig:n&&!!e.UPDATE_REMOTE_CONFIG&&!!e.GET_EFFECTIVE_CONFIG,canFetchEffectiveConfig:!!e.GET_EFFECTIVE_CONFIG,canFetchConfigYamls:!!e.GET_CONFIG_YAMLS,canFetchProfiling:n&&!!e.GET_PROFILING_SLOTS,canFetchCollectorInfo:n&&!!e.GET_GATEWAY_INFO,canManageSamplingRules:!!e.GET_SAMPLING_RULES,isEnterprise:a,isVm:r}})(t,r),[t,r]),resetCache:a(async()=>{await n.cache.reset()},[n])}};export{W as O,Y as _,se as a,oe as b,ae as c,Re as d,H as e,J as f,ce as p,z as r,ne as u};
@@ -1,7 +1,11 @@
1
1
  import { type FC } from 'react';
2
+ import type { SVG } from '@/types';
2
3
  export interface AutocompleteOption {
3
4
  id: string;
4
5
  label: string;
6
+ icon?: SVG;
7
+ badge?: string;
8
+ secondaryLabel?: string;
5
9
  }
6
10
  interface BaseAutocompleteProps {
7
11
  'data-id'?: string;
@@ -1,12 +1,12 @@
1
1
  import { CSSProperties, type FC } from 'react';
2
+ import { type SVG, StatusType } from '@/types';
2
3
  import { TypographySize } from '../typography';
3
- import { type SVG, StatusType, OtherStatusType, OtherStatus } from '@/types';
4
4
  export interface BadgeProps {
5
5
  label?: string | number;
6
6
  leftIcon?: SVG;
7
7
  rightIcon?: SVG;
8
8
  tooltip?: string;
9
- status?: StatusType | OtherStatusType | OtherStatus;
9
+ status?: StatusType;
10
10
  useSecondaryTone?: boolean;
11
11
  invertColors?: boolean;
12
12
  textSize?: TypographySize;
@@ -1,7 +1,7 @@
1
1
  import { type FC } from 'react';
2
- import { type SVG, StatusType, OtherStatusType } from '@/types';
2
+ import { type SVG, StatusType } from '@/types';
3
3
  export interface StatusCardProps {
4
- status: StatusType | OtherStatusType;
4
+ status: StatusType;
5
5
  icon?: SVG;
6
6
  title: string;
7
7
  description: string;
@@ -1,5 +1,5 @@
1
1
  import { type CSSProperties, type FC } from 'react';
2
- import { OtherStatus, OtherStatusType, SVG, StatusType } from '@/types';
2
+ import { type SVG, StatusType } from '@/types';
3
3
  interface ConditionAction {
4
4
  'data-id'?: string;
5
5
  icon: SVG;
@@ -7,7 +7,7 @@ interface ConditionAction {
7
7
  onClick: () => void;
8
8
  }
9
9
  export interface ConditionProps {
10
- status: StatusType | OtherStatus | OtherStatusType;
10
+ status: StatusType;
11
11
  title: string;
12
12
  subTitle?: string;
13
13
  badgeLabel?: string;
@@ -15,6 +15,8 @@ export interface DropDataOption<T = string> {
15
15
  color?: CSSProperties['color'];
16
16
  icon?: SVG;
17
17
  withCheckbox?: boolean;
18
+ badge?: string;
19
+ secondaryLabel?: string;
18
20
  }
19
21
  export interface DropDataProps {
20
22
  defaultOpen?: boolean;
@@ -23,5 +23,9 @@ export interface TableProps {
23
23
  onFiltersChange?: (filters: {
24
24
  [key: string]: TableRowCell['rawValue'][];
25
25
  }) => void;
26
+ /** Id of the row (matched against `TableRow.id`) to highlight and scroll into view. */
27
+ activeRowId?: string | null;
28
+ /** Bump to (re)trigger a scroll to `activeRowId` even when it's unchanged (e.g. the same row was re-selected externally). */
29
+ scrollSignal?: number;
26
30
  }
27
31
  export declare const Table: FC<TableProps>;
@@ -29,6 +29,7 @@ interface TdProps {
29
29
  $withClick: boolean;
30
30
  $hovered: boolean;
31
31
  $selected: boolean;
32
+ $highlighted?: boolean;
32
33
  $isLastRow: boolean;
33
34
  $isFirstCell: boolean;
34
35
  $isLastCell: boolean;
@@ -11,6 +11,12 @@ interface TableRowsProps {
11
11
  rowActionsPushRightPosition?: CSSProperties['right'];
12
12
  rowActionsPushLeftPosition?: CSSProperties['left'];
13
13
  withCheckboxes?: boolean;
14
+ /** Row id (matched against `TableRow.id`) to visually highlight. */
15
+ activeRowId?: string | null;
16
+ /** Index of the row to scroll into view (within `rows`), forwarded to the virtualized list. */
17
+ scrollToIndex?: number | null;
18
+ /** Bump to (re)trigger the scroll even when the index is unchanged. */
19
+ scrollSignal?: number;
14
20
  }
15
21
  export declare const TableRows: FC<TableRowsProps>;
16
22
  export {};
@@ -36,10 +36,16 @@ export interface TableRowCell {
36
36
  component?: FC;
37
37
  }
38
38
  export interface TableRow {
39
+ /** Optional stable identity for the row, used to drive `activeRowId` highlight + scroll-into-view. */
40
+ id?: string;
39
41
  cells: TableRowCell[];
40
42
  onClick?: () => void;
41
43
  isSelected?: boolean;
42
44
  onSelect?: () => void;
43
45
  onDeselect?: () => void;
44
46
  hideCheckbox?: boolean;
47
+ /** Render the checkbox but lock it (e.g. the row is managed elsewhere). Excluded from the header "select all". */
48
+ checkboxDisabled?: boolean;
49
+ /** Tooltip shown on hover over a (typically disabled) checkbox, explaining why it can't be toggled. */
50
+ checkboxTooltip?: string;
45
51
  }
@@ -6,6 +6,10 @@ interface ScrollYProps {
6
6
  elements: ReactNode[];
7
7
  noAnimation?: boolean;
8
8
  onTopIndexChange?: (topIndex: number) => void;
9
+ /** Index of an item to scroll into view. Re-triggered whenever `scrollSignal` changes (so repeated requests for the same index still scroll). */
10
+ scrollToIndex?: number | null;
11
+ /** Bump this to (re)trigger a scroll to `scrollToIndex` even when the index value is unchanged. */
12
+ scrollSignal?: number;
9
13
  }
10
14
  declare const ScrollY: FC<ScrollYProps>;
11
15
  export { ScrollY, type ScrollYProps };
@@ -1 +1 @@
1
- export{eD as Autocomplete,B as Badge,ac as Button,ad as ButtonSize,gi as ButtonTab,gj as ButtonTabList,ae as ButtonVariants,M as Checkbox,gk as CheckboxList,dd as CheckboxSize,bf as CliCommand,b9 as Condition,aZ as Conditions,gl as DEFAULT_TIME_UNITS,aY as DataCard,a9 as Drawer,bQ as DropData,bS as DropDataAlignX,bR as DropDataAlignY,aL as DropDown,a3 as FieldMessage,a2 as FieldTitle,dv as GaugeChart,gm as GaugeChartVariant,gn as Header,go as HoverActions,aM as IconButton,aN as IconButtonSize,w as IconGroup,al as Input,a8 as InputList,a4 as InputTable,d6 as Island,aO as Loader,bV as Modal,gp as Navbar,N as NoData,R as Note,ai as Radio,gq as RadioGroup,ak as RadioSize,z as Search,aH as SectionCard,gr as SectionCardSize,af as Segment,ao as SegmentSize,bs as SegmentVariant,du as StatusCard,d7 as Stepper,bu as Table,bv as TableVariant,b3 as Tag,be as TagVariants,aq as TextArea,dw as TextCard,dP as TimeInput,a6 as Toggle,a7 as ToggleLabelAlign,gs as ToggleList,aS as ToggleSize,gt as ToggleVariant,an as TruncatableTypography,b as Typography,ab as TypographyColor,c as TypographySize,aT as TypographyVariants,ay as WarningModal,gu as resolveTypographyColor}from"../chunks/ui-components-B1TCLO_N.js";import"react/jsx-runtime";import"styled-components";import"../icons.js";import"zustand";import"react";import"javascript-time-ago";import"javascript-time-ago/locale/en";import"prism-react-renderer";import"../chunks/vendor-BFqT13Me.js";import"zustand/middleware";import"react-error-boundary";import"react-dom";import"virtua";
1
+ export{eB as Autocomplete,R as Badge,B as Button,z as ButtonSize,gg as ButtonTab,gh as ButtonTabList,L as ButtonVariants,V as Checkbox,gi as CheckboxList,db as CheckboxSize,bd as CliCommand,b8 as Condition,aY as Conditions,gj as DEFAULT_TIME_UNITS,aX as DataCard,ae as Drawer,bP as DropData,bR as DropDataAlignX,bQ as DropDataAlignY,aL as DropDown,a8 as FieldMessage,a7 as FieldTitle,dt as GaugeChart,gk as GaugeChartVariant,gl as Header,gm as HoverActions,aM as IconButton,aN as IconButtonSize,w as IconGroup,al as Input,ad as InputList,a9 as InputTable,bu as Island,aO as Loader,bU as Modal,gn as Navbar,N as NoData,Y as Note,ai as Radio,go as RadioGroup,ak as RadioSize,U as Search,aH as SectionCard,gp as SectionCardSize,M as Segment,ao as SegmentSize,bq as SegmentVariant,ds as StatusCard,d5 as Stepper,bs as Table,bt as TableVariant,b2 as Tag,bc as TagVariants,aq as TextArea,du as TextCard,dN as TimeInput,ab as Toggle,ac as ToggleLabelAlign,gq as ToggleList,aR as ToggleSize,gr as ToggleVariant,an as TruncatableTypography,b as Typography,O as TypographyColor,c as TypographySize,aS as TypographyVariants,ay as WarningModal,gs as resolveTypographyColor}from"../chunks/ui-components-BmIux5o5.js";import"react/jsx-runtime";import"styled-components";import"../icons.js";import"zustand";import"react";import"javascript-time-ago";import"javascript-time-ago/locale/en";import"prism-react-renderer";import"../chunks/vendor-BFqT13Me.js";import"zustand/middleware";import"react-error-boundary";import"react-dom";import"virtua";
package/lib/components.js CHANGED
@@ -1 +1 @@
1
- export{aK as CenterThis,eJ as Code,am as Divider,f_ as ErrorBoundary,f$ as FadeLoader,a1 as FlexColumn,y as FlexRow,g0 as IconButton,g1 as IconGroup,g2 as IconWrapped,g3 as ImageControlled,g4 as LoadingText,g5 as ModalBody,g6 as NotificationNote,g7 as Overlay,aX as Padding,d5 as PageContent,a as Popup,g8 as ScrollX,L as ScrollY,bj as SkeletonLoader,g9 as TableContainer,ga as TableTitleWrap,gb as TableWrap,gc as Text,gd as ToggleCodeComponent,au as Tooltip,dx as UpgradeRequiredWrapper,ge as VerticalScroll,gf as getLinksFromText,gg as getStrongsFromText,gh as renderText}from"./chunks/ui-components-B1TCLO_N.js";import"react/jsx-runtime";import"styled-components";import"./icons.js";import"zustand";import"react";import"javascript-time-ago";import"javascript-time-ago/locale/en";import"prism-react-renderer";import"./chunks/vendor-BFqT13Me.js";import"zustand/middleware";import"react-error-boundary";import"react-dom";import"virtua";
1
+ export{aK as CenterThis,eH as Code,am as Divider,fY as ErrorBoundary,fZ as FadeLoader,a6 as FlexColumn,y as FlexRow,f_ as IconButton,f$ as IconGroup,g0 as IconWrapped,g1 as ImageControlled,g2 as LoadingText,g3 as ModalBody,g4 as NotificationNote,g5 as Overlay,aW as Padding,d4 as PageContent,a as Popup,g6 as ScrollX,Q as ScrollY,bh as SkeletonLoader,g7 as TableContainer,g8 as TableTitleWrap,g9 as TableWrap,ga as Text,gb as ToggleCodeComponent,au as Tooltip,dv as UpgradeRequiredWrapper,gc as VerticalScroll,gd as getLinksFromText,ge as getStrongsFromText,gf as renderText}from"./chunks/ui-components-BmIux5o5.js";import"react/jsx-runtime";import"styled-components";import"./icons.js";import"zustand";import"react";import"javascript-time-ago";import"javascript-time-ago/locale/en";import"prism-react-renderer";import"./chunks/vendor-BFqT13Me.js";import"zustand/middleware";import"react-error-boundary";import"react-dom";import"virtua";
package/lib/constants.js CHANGED
@@ -1 +1 @@
1
- export{A as ACTION_OPTIONS,fE as ALL_SOURCES,bx as BTN_CANCEL,dB as BTN_CREATE_FIRST_RULE,bE as BTN_CREATE_RULE,bA as BTN_DELETE_RULE,dR as BTN_EDIT_AUTO_RULE,bz as BTN_EDIT_RULE,bM as BTN_SAVE,by as BTN_SAVE_RULE,aW as BUTTON_TEXTS,bB as CATEGORY_DESCRIPTIONS,et as CATEGORY_LABELS,bF as CATEGORY_TITLES,fF as CREATE_COST_REDUCTION_AUTO_RULE_DRAWER_TITLE,fG as CREATE_HIGHLY_RELEVANT_AUTO_RULE_DRAWER_TITLE,fH as CREATE_NOISY_AUTO_RULE_DRAWER_TITLE,aV as DEFAULT_CLUSTER_ID,aU as DEFAULT_CLUSTER_NAME,dp as DEFAULT_DATA_STREAM_NAME,dY as DESC_DURATION,dX as DESC_ERRORS,d$ as DESC_OPERATION,fI as DESC_PERCENTAGE_HIGHLY_RELEVANT,aD as DESC_PERCENTAGE_NOISY,eu as DESC_RULE_TYPE,eC as DESC_SOURCE_SCOPE,aP as DESTINATION_CATEGORIES,aw as DISPLAY_LANGUAGES,p as DISPLAY_TITLES,ap as DOCS_BASE_URL,D as DestinationCategoryTypes,bI as EDIT_COST_REDUCTION_AUTO_RULE_DRAWER_SUBTITLE,bJ as EDIT_COST_REDUCTION_AUTO_RULE_DRAWER_TITLE,bG as EDIT_HIGHLY_RELEVANT_AUTO_RULE_DRAWER_SUBTITLE,bH as EDIT_HIGHLY_RELEVANT_AUTO_RULE_DRAWER_TITLE,bK as EDIT_NOISY_AUTO_RULE_DRAWER_SUBTITLE,bL as EDIT_NOISY_AUTO_RULE_DRAWER_TITLE,bC as EDIT_TITLES,eb as EMPTY_VALUE,aj as EXTRACTION_FORMAT_COPY,ag as EXTRACT_ATTRIBUTE_FORM,dz as FILTER_TYPE_ALL,F as FORM_ALERTS,I as INSTRUMENTATION_RULE_OPTIONS,dZ as LABEL_CUSTOM_DURATION,aI as LABEL_CUSTOM_PERCENTAGE,aG as LABEL_DISABLED,dy as LABEL_DISABLED_RULE,el as LABEL_DROP_ALL,aA as LABEL_DROP_AT_MOST,aF as LABEL_ENABLED,e4 as LABEL_HTTP_ROUTE,e6 as LABEL_HTTP_ROUTE_PREFIX,e8 as LABEL_KAFKA_TOPIC,em as LABEL_KEEP_ALL,ei as LABEL_KEEP_AT_LEAST,ej as LABEL_KEEP_AT_MOST,eh as LABEL_KEEP_PERCENTAGE,dW as LABEL_KEEP_TRACES_DURATION,dU as LABEL_KEEP_TRACES_ERRORS,e7 as LABEL_METHOD,ep as LABEL_NOTE,dS as LABEL_NO_PREVIEW,ea as LABEL_OPERATION_TYPE,fJ as LABEL_RULE_DISABLED,fK as LABEL_RULE_ENABLED,en as LABEL_RULE_NAME,eo as LABEL_RULE_TYPE,ek as LABEL_SAMPLE,e1 as LABEL_SERVER_ADDRESS,e3 as LABEL_TEMPLATED_PATH,e5 as LABEL_TEMPLATED_PATH_PREFIX,bp as LANGUAGE_OPTIONS,db as MONITORS_OPTIONS,ew as NOTE_ENTIRE_CLUSTER,eB as NOTE_SOURCE_SCOPE_LOGIC,fL as OPENTELEMETRY_EBPF_DISTRO_OPTION,ed as OPERATION_ALL,ec as OPERATION_HTTP_CLIENT,e9 as OPERATION_HTTP_SERVER,ee as OPERATION_KAFKA_CONSUMER,ef as OPERATION_KAFKA_PRODUCER,bo as OTEL_DISTRO_NAME_OPTIONS,eg as PERCENTAGE_SECTION_DESCRIPTIONS,er as PLACEHOLDER_NOTE,e2 as PLACEHOLDER_ROUTE,eq as PLACEHOLDER_RULE_NAME,eE as PLACEHOLDER_SEARCH_SOURCE,e0 as PLACEHOLDER_SERVER_ADDRESS,bb as PROCESS_ATTRIBUTE_NAMES,aa as REGEX_TESTER_DRAWER,aE as SAMPLING_AUTO_RULE_TITLE,dH as SAMPLING_BTN_CREATE_RULE,dF as SAMPLING_BTN_DOCS,dG as SAMPLING_BTN_REFRESH,aC as SAMPLING_COST_REDUCTION_AUTO_RULE_TITLE,dK as SAMPLING_DELETE_MODAL_APPROVE,dL as SAMPLING_DELETE_MODAL_CANCEL,dM as SAMPLING_DELETE_MODAL_DESCRIPTION,dN as SAMPLING_DELETE_MODAL_TITLE,bN as SAMPLING_DRAWER_WIDTH,dE as SAMPLING_DUPLICATE_RULE_WARNING,az as SAMPLING_HIGHLY_RELEVANT_AUTO_RULE_TITLE,cE as SAMPLING_ONBOARDING_ADVANCED_LEFT_BULLET_1,cF as SAMPLING_ONBOARDING_ADVANCED_LEFT_BULLET_2,cG as SAMPLING_ONBOARDING_ADVANCED_LEFT_BULLET_3,cH as SAMPLING_ONBOARDING_ADVANCED_LEFT_TITLE,cI as SAMPLING_ONBOARDING_ADVANCED_RIGHT_BULLET_1,cJ as SAMPLING_ONBOARDING_ADVANCED_RIGHT_BULLET_2,cK as SAMPLING_ONBOARDING_ADVANCED_RIGHT_BULLET_3,cL as SAMPLING_ONBOARDING_ADVANCED_RIGHT_BULLET_4,cM as SAMPLING_ONBOARDING_ADVANCED_RIGHT_BULLET_5,cN as SAMPLING_ONBOARDING_ADVANCED_RIGHT_TITLE,cP as SAMPLING_ONBOARDING_ADVANCED_SUBTITLE,cO as SAMPLING_ONBOARDING_ADVANCED_TITLE,d4 as SAMPLING_ONBOARDING_AMBIENT_LABEL,ca as SAMPLING_ONBOARDING_BTN_GO_TO,bX as SAMPLING_ONBOARDING_BTN_NEXT,cD as SAMPLING_ONBOARDING_BTN_READ_MORE,cl as SAMPLING_ONBOARDING_BTN_SKIP,cm as SAMPLING_ONBOARDING_BTN_START,cQ as SAMPLING_ONBOARDING_COMMON_BANNER,d3 as SAMPLING_ONBOARDING_COMMON_RULES_SECTION,cT as SAMPLING_ONBOARDING_DROP_DESCRIPTION,cS as SAMPLING_ONBOARDING_DROP_SUBTITLE,cR as SAMPLING_ONBOARDING_DROP_TITLE,cW as SAMPLING_ONBOARDING_ERROR_PRESET_NAME,cV as SAMPLING_ONBOARDING_ERROR_PRESET_TOGGLE_LABEL,cZ as SAMPLING_ONBOARDING_KEEP_DESCRIPTION,cY as SAMPLING_ONBOARDING_KEEP_SUBTITLE,cX as SAMPLING_ONBOARDING_KEEP_TITLE,c_ as SAMPLING_ONBOARDING_KEEP_USE_CASE_1,c$ as SAMPLING_ONBOARDING_KEEP_USE_CASE_2,d0 as SAMPLING_ONBOARDING_KEEP_USE_CASE_3,d1 as SAMPLING_ONBOARDING_KEEP_USE_CASE_4,d2 as SAMPLING_ONBOARDING_KEEP_USE_CASE_5,c2 as SAMPLING_ONBOARDING_NOISY_BANNER,b_ as SAMPLING_ONBOARDING_NOISY_DESCRIPTION,c1 as SAMPLING_ONBOARDING_NOISY_PRESET_NAME,b$ as SAMPLING_ONBOARDING_NOISY_PRESET_SECTION,c0 as SAMPLING_ONBOARDING_NOISY_PRESET_TOGGLE_LABEL,bZ as SAMPLING_ONBOARDING_NOISY_SUBTITLE,bY as SAMPLING_ONBOARDING_NOISY_TITLE,cU as SAMPLING_ONBOARDING_PRESET_RULES_SECTION,bW as SAMPLING_ONBOARDING_RECOMMENDED_BADGE,cA as SAMPLING_ONBOARDING_STRATEGY_ADVANCED_BADGE,cB as SAMPLING_ONBOARDING_STRATEGY_ADVANCED_DESC,cC as SAMPLING_ONBOARDING_STRATEGY_ADVANCED_NAME,cx as SAMPLING_ONBOARDING_STRATEGY_DROP_BADGE,cv as SAMPLING_ONBOARDING_STRATEGY_DROP_BULLET_1,cw as SAMPLING_ONBOARDING_STRATEGY_DROP_BULLET_2,cy as SAMPLING_ONBOARDING_STRATEGY_DROP_DESC,cz as SAMPLING_ONBOARDING_STRATEGY_DROP_NAME,cs as SAMPLING_ONBOARDING_STRATEGY_KEEP_BADGE,cq as SAMPLING_ONBOARDING_STRATEGY_KEEP_BULLET_1,cr as SAMPLING_ONBOARDING_STRATEGY_KEEP_BULLET_2,ct as SAMPLING_ONBOARDING_STRATEGY_KEEP_DESC,cu as SAMPLING_ONBOARDING_STRATEGY_KEEP_NAME,cp as SAMPLING_ONBOARDING_STRATEGY_KEEP_WARNING,co as SAMPLING_ONBOARDING_STRATEGY_SUBTITLE,cn as SAMPLING_ONBOARDING_STRATEGY_TITLE,c7 as SAMPLING_ONBOARDING_SUCCESS_BULLET_1,c8 as SAMPLING_ONBOARDING_SUCCESS_BULLET_2,c9 as SAMPLING_ONBOARDING_SUCCESS_BULLET_3,c6 as SAMPLING_ONBOARDING_SUCCESS_INTRO,c5 as SAMPLING_ONBOARDING_SUCCESS_SUBTITLE,c4 as SAMPLING_ONBOARDING_SUCCESS_TITLE,ck as SAMPLING_ONBOARDING_WELCOME_BANNER,cd as SAMPLING_ONBOARDING_WELCOME_INTRO,ce as SAMPLING_ONBOARDING_WELCOME_STAGE_1_DESC,cf as SAMPLING_ONBOARDING_WELCOME_STAGE_1_TITLE,cg as SAMPLING_ONBOARDING_WELCOME_STAGE_2_DESC,ch as SAMPLING_ONBOARDING_WELCOME_STAGE_2_TITLE,ci as SAMPLING_ONBOARDING_WELCOME_STAGE_3_DESC,cj as SAMPLING_ONBOARDING_WELCOME_STAGE_3_TITLE,cc as SAMPLING_ONBOARDING_WELCOME_SUBTITLE,cb as SAMPLING_ONBOARDING_WELCOME_TITLE,dI as SAMPLING_PAGE_DESCRIPTION,dJ as SAMPLING_PAGE_TITLE,eG as SCOPE_AND_LABEL,eF as SCOPE_GROUP_ANY_OF_HINT,eA as SCOPE_GROUP_LANGUAGES_TITLE,ez as SCOPE_GROUP_NAMESPACES_TITLE,ex as SCOPE_GROUP_SOURCES_TITLE,dV as SECTION_DURATION,dT as SECTION_ERRORS,aB as SECTION_KEEP_PERCENTAGE,d_ as SECTION_OPERATION,ev as SECTION_SAMPLING_PREVIEW,eH as SECTION_SOURCE_SCOPE,da as STORAGE_KEYS,dA as TITLE_NO_RESULTS,dC as TITLE_NO_RULES,fM as TOKEN_ABOUT_TO_EXPIRE,es as TOOLTIP_NOTE,ey as UNKNOWN_SOURCE_LABEL,bD as UNNAMED_RULE,dD as getNoResultsSubTitle}from"./chunks/ui-components-B1TCLO_N.js";import"react/jsx-runtime";import"styled-components";import"./icons.js";import"zustand";import"react";import"javascript-time-ago";import"javascript-time-ago/locale/en";import"prism-react-renderer";import"./chunks/vendor-BFqT13Me.js";import"zustand/middleware";import"react-error-boundary";import"react-dom";import"virtua";
1
+ export{A as ACTION_OPTIONS,fC as ALL_SOURCES,bw as BTN_CANCEL,dz as BTN_CREATE_FIRST_RULE,bD as BTN_CREATE_RULE,bz as BTN_DELETE_RULE,dP as BTN_EDIT_AUTO_RULE,by as BTN_EDIT_RULE,bL as BTN_SAVE,bx as BTN_SAVE_RULE,aV as BUTTON_TEXTS,bA as CATEGORY_DESCRIPTIONS,er as CATEGORY_LABELS,bE as CATEGORY_TITLES,fD as CREATE_COST_REDUCTION_AUTO_RULE_DRAWER_TITLE,fE as CREATE_HIGHLY_RELEVANT_AUTO_RULE_DRAWER_TITLE,fF as CREATE_NOISY_AUTO_RULE_DRAWER_TITLE,aU as DEFAULT_CLUSTER_ID,aT as DEFAULT_CLUSTER_NAME,dm as DEFAULT_DATA_STREAM_NAME,dW as DESC_DURATION,dV as DESC_ERRORS,dZ as DESC_OPERATION,fG as DESC_PERCENTAGE_HIGHLY_RELEVANT,aD as DESC_PERCENTAGE_NOISY,es as DESC_RULE_TYPE,eA as DESC_SOURCE_SCOPE,aP as DESTINATION_CATEGORIES,aw as DISPLAY_LANGUAGES,p as DISPLAY_TITLES,ap as DOCS_BASE_URL,D as DestinationCategoryTypes,bH as EDIT_COST_REDUCTION_AUTO_RULE_DRAWER_SUBTITLE,bI as EDIT_COST_REDUCTION_AUTO_RULE_DRAWER_TITLE,bF as EDIT_HIGHLY_RELEVANT_AUTO_RULE_DRAWER_SUBTITLE,bG as EDIT_HIGHLY_RELEVANT_AUTO_RULE_DRAWER_TITLE,bJ as EDIT_NOISY_AUTO_RULE_DRAWER_SUBTITLE,bK as EDIT_NOISY_AUTO_RULE_DRAWER_TITLE,bB as EDIT_TITLES,e9 as EMPTY_VALUE,aj as EXTRACTION_FORMAT_COPY,ag as EXTRACT_ATTRIBUTE_FORM,dx as FILTER_TYPE_ALL,F as FORM_ALERTS,I as INSTRUMENTATION_RULE_OPTIONS,dX as LABEL_CUSTOM_DURATION,aI as LABEL_CUSTOM_PERCENTAGE,aG as LABEL_DISABLED,dw as LABEL_DISABLED_RULE,ej as LABEL_DROP_ALL,aA as LABEL_DROP_AT_MOST,aF as LABEL_ENABLED,e2 as LABEL_HTTP_ROUTE,e4 as LABEL_HTTP_ROUTE_PREFIX,e6 as LABEL_KAFKA_TOPIC,ek as LABEL_KEEP_ALL,eg as LABEL_KEEP_AT_LEAST,eh as LABEL_KEEP_AT_MOST,ef as LABEL_KEEP_PERCENTAGE,dU as LABEL_KEEP_TRACES_DURATION,dS as LABEL_KEEP_TRACES_ERRORS,e5 as LABEL_METHOD,en as LABEL_NOTE,dQ as LABEL_NO_PREVIEW,e8 as LABEL_OPERATION_TYPE,fH as LABEL_RULE_DISABLED,fI as LABEL_RULE_ENABLED,el as LABEL_RULE_NAME,em as LABEL_RULE_TYPE,ei as LABEL_SAMPLE,d$ as LABEL_SERVER_ADDRESS,e1 as LABEL_TEMPLATED_PATH,e3 as LABEL_TEMPLATED_PATH_PREFIX,bn as LANGUAGE_OPTIONS,d9 as MONITORS_OPTIONS,eu as NOTE_ENTIRE_CLUSTER,ez as NOTE_SOURCE_SCOPE_LOGIC,fJ as OPENTELEMETRY_EBPF_DISTRO_OPTION,eb as OPERATION_ALL,ea as OPERATION_HTTP_CLIENT,e7 as OPERATION_HTTP_SERVER,ec as OPERATION_KAFKA_CONSUMER,ed as OPERATION_KAFKA_PRODUCER,bm as OTEL_DISTRO_NAME_OPTIONS,ee as PERCENTAGE_SECTION_DESCRIPTIONS,ep as PLACEHOLDER_NOTE,e0 as PLACEHOLDER_ROUTE,eo as PLACEHOLDER_RULE_NAME,eC as PLACEHOLDER_SEARCH_SOURCE,d_ as PLACEHOLDER_SERVER_ADDRESS,ba as PROCESS_ATTRIBUTE_NAMES,af as REGEX_TESTER_DRAWER,aE as SAMPLING_AUTO_RULE_TITLE,dF as SAMPLING_BTN_CREATE_RULE,dD as SAMPLING_BTN_DOCS,dE as SAMPLING_BTN_REFRESH,aC as SAMPLING_COST_REDUCTION_AUTO_RULE_TITLE,dI as SAMPLING_DELETE_MODAL_APPROVE,dJ as SAMPLING_DELETE_MODAL_CANCEL,dK as SAMPLING_DELETE_MODAL_DESCRIPTION,dL as SAMPLING_DELETE_MODAL_TITLE,bM as SAMPLING_DRAWER_WIDTH,dC as SAMPLING_DUPLICATE_RULE_WARNING,az as SAMPLING_HIGHLY_RELEVANT_AUTO_RULE_TITLE,cD as SAMPLING_ONBOARDING_ADVANCED_LEFT_BULLET_1,cE as SAMPLING_ONBOARDING_ADVANCED_LEFT_BULLET_2,cF as SAMPLING_ONBOARDING_ADVANCED_LEFT_BULLET_3,cG as SAMPLING_ONBOARDING_ADVANCED_LEFT_TITLE,cH as SAMPLING_ONBOARDING_ADVANCED_RIGHT_BULLET_1,cI as SAMPLING_ONBOARDING_ADVANCED_RIGHT_BULLET_2,cJ as SAMPLING_ONBOARDING_ADVANCED_RIGHT_BULLET_3,cK as SAMPLING_ONBOARDING_ADVANCED_RIGHT_BULLET_4,cL as SAMPLING_ONBOARDING_ADVANCED_RIGHT_BULLET_5,cM as SAMPLING_ONBOARDING_ADVANCED_RIGHT_TITLE,cO as SAMPLING_ONBOARDING_ADVANCED_SUBTITLE,cN as SAMPLING_ONBOARDING_ADVANCED_TITLE,d3 as SAMPLING_ONBOARDING_AMBIENT_LABEL,c9 as SAMPLING_ONBOARDING_BTN_GO_TO,bW as SAMPLING_ONBOARDING_BTN_NEXT,cC as SAMPLING_ONBOARDING_BTN_READ_MORE,ck as SAMPLING_ONBOARDING_BTN_SKIP,cl as SAMPLING_ONBOARDING_BTN_START,cP as SAMPLING_ONBOARDING_COMMON_BANNER,d2 as SAMPLING_ONBOARDING_COMMON_RULES_SECTION,cS as SAMPLING_ONBOARDING_DROP_DESCRIPTION,cR as SAMPLING_ONBOARDING_DROP_SUBTITLE,cQ as SAMPLING_ONBOARDING_DROP_TITLE,cV as SAMPLING_ONBOARDING_ERROR_PRESET_NAME,cU as SAMPLING_ONBOARDING_ERROR_PRESET_TOGGLE_LABEL,cY as SAMPLING_ONBOARDING_KEEP_DESCRIPTION,cX as SAMPLING_ONBOARDING_KEEP_SUBTITLE,cW as SAMPLING_ONBOARDING_KEEP_TITLE,cZ as SAMPLING_ONBOARDING_KEEP_USE_CASE_1,c_ as SAMPLING_ONBOARDING_KEEP_USE_CASE_2,c$ as SAMPLING_ONBOARDING_KEEP_USE_CASE_3,d0 as SAMPLING_ONBOARDING_KEEP_USE_CASE_4,d1 as SAMPLING_ONBOARDING_KEEP_USE_CASE_5,c1 as SAMPLING_ONBOARDING_NOISY_BANNER,bZ as SAMPLING_ONBOARDING_NOISY_DESCRIPTION,c0 as SAMPLING_ONBOARDING_NOISY_PRESET_NAME,b_ as SAMPLING_ONBOARDING_NOISY_PRESET_SECTION,b$ as SAMPLING_ONBOARDING_NOISY_PRESET_TOGGLE_LABEL,bY as SAMPLING_ONBOARDING_NOISY_SUBTITLE,bX as SAMPLING_ONBOARDING_NOISY_TITLE,cT as SAMPLING_ONBOARDING_PRESET_RULES_SECTION,bV as SAMPLING_ONBOARDING_RECOMMENDED_BADGE,cz as SAMPLING_ONBOARDING_STRATEGY_ADVANCED_BADGE,cA as SAMPLING_ONBOARDING_STRATEGY_ADVANCED_DESC,cB as SAMPLING_ONBOARDING_STRATEGY_ADVANCED_NAME,cw as SAMPLING_ONBOARDING_STRATEGY_DROP_BADGE,cu as SAMPLING_ONBOARDING_STRATEGY_DROP_BULLET_1,cv as SAMPLING_ONBOARDING_STRATEGY_DROP_BULLET_2,cx as SAMPLING_ONBOARDING_STRATEGY_DROP_DESC,cy as SAMPLING_ONBOARDING_STRATEGY_DROP_NAME,cr as SAMPLING_ONBOARDING_STRATEGY_KEEP_BADGE,cp as SAMPLING_ONBOARDING_STRATEGY_KEEP_BULLET_1,cq as SAMPLING_ONBOARDING_STRATEGY_KEEP_BULLET_2,cs as SAMPLING_ONBOARDING_STRATEGY_KEEP_DESC,ct as SAMPLING_ONBOARDING_STRATEGY_KEEP_NAME,co as SAMPLING_ONBOARDING_STRATEGY_KEEP_WARNING,cn as SAMPLING_ONBOARDING_STRATEGY_SUBTITLE,cm as SAMPLING_ONBOARDING_STRATEGY_TITLE,c6 as SAMPLING_ONBOARDING_SUCCESS_BULLET_1,c7 as SAMPLING_ONBOARDING_SUCCESS_BULLET_2,c8 as SAMPLING_ONBOARDING_SUCCESS_BULLET_3,c5 as SAMPLING_ONBOARDING_SUCCESS_INTRO,c4 as SAMPLING_ONBOARDING_SUCCESS_SUBTITLE,c3 as SAMPLING_ONBOARDING_SUCCESS_TITLE,cj as SAMPLING_ONBOARDING_WELCOME_BANNER,cc as SAMPLING_ONBOARDING_WELCOME_INTRO,cd as SAMPLING_ONBOARDING_WELCOME_STAGE_1_DESC,ce as SAMPLING_ONBOARDING_WELCOME_STAGE_1_TITLE,cf as SAMPLING_ONBOARDING_WELCOME_STAGE_2_DESC,cg as SAMPLING_ONBOARDING_WELCOME_STAGE_2_TITLE,ch as SAMPLING_ONBOARDING_WELCOME_STAGE_3_DESC,ci as SAMPLING_ONBOARDING_WELCOME_STAGE_3_TITLE,cb as SAMPLING_ONBOARDING_WELCOME_SUBTITLE,ca as SAMPLING_ONBOARDING_WELCOME_TITLE,dG as SAMPLING_PAGE_DESCRIPTION,dH as SAMPLING_PAGE_TITLE,eE as SCOPE_AND_LABEL,eD as SCOPE_GROUP_ANY_OF_HINT,ey as SCOPE_GROUP_LANGUAGES_TITLE,ex as SCOPE_GROUP_NAMESPACES_TITLE,ev as SCOPE_GROUP_SOURCES_TITLE,dT as SECTION_DURATION,dR as SECTION_ERRORS,aB as SECTION_KEEP_PERCENTAGE,dY as SECTION_OPERATION,et as SECTION_SAMPLING_PREVIEW,eF as SECTION_SOURCE_SCOPE,d8 as STORAGE_KEYS,dy as TITLE_NO_RESULTS,dA as TITLE_NO_RULES,fK as TOKEN_ABOUT_TO_EXPIRE,eq as TOOLTIP_NOTE,ew as UNKNOWN_SOURCE_LABEL,bC as UNNAMED_RULE,dB as getNoResultsSubTitle}from"./chunks/ui-components-BmIux5o5.js";import"react/jsx-runtime";import"styled-components";import"./icons.js";import"zustand";import"react";import"javascript-time-ago";import"javascript-time-ago/locale/en";import"prism-react-renderer";import"./chunks/vendor-BFqT13Me.js";import"zustand/middleware";import"react-error-boundary";import"react-dom";import"virtua";
@@ -1,7 +1,7 @@
1
1
  import { type ReactNode } from 'react';
2
+ import { DefaultTheme } from 'styled-components/dist/types';
2
3
  import { type DataCardProps } from '@/components/_v2';
3
4
  import { type InstrumentationRule, type InstrumentationRuleOption } from '@/types';
4
- import { DefaultTheme } from 'styled-components/dist/types';
5
5
  /**
6
6
  * Build the items shown in the view-mode `DataCard` (Type, Status, Name, Managed by Profile, Notes).
7
7
  */
@@ -20,5 +20,11 @@ export interface FlameGraphCanvasProps {
20
20
  /** Notifies the parent whenever the user toggles fullscreen, so the parent can react (e.g. widen the surrounding drawer). */
21
21
  onFullscreenChange?: (isFullscreen: boolean) => void;
22
22
  profilingSlots: ProfilingSlots | null;
23
+ /** Fired with the symbol name whenever a frame is clicked (in addition to zooming), so the parent can scroll the symbol table to it (PLAT-1246). */
24
+ onFrameClick?: (name: string) => void;
25
+ /** Fired when the zoom view changes: the set of symbol names inside the current zoom subtree, or `null` when fully zoomed out. Lets the parent filter the symbol table to the zoomed-in scope (PLAT-1246). */
26
+ onZoomedSymbolsChange?: (names: string[] | null) => void;
27
+ /** Fired when the user clicks "Reset zoom", so the parent can clear the frame-driven table highlight (PLAT-1246). */
28
+ onResetZoom?: () => void;
23
29
  }
24
30
  export declare const FlameGraphCanvas: FC<FlameGraphCanvasProps>;
@@ -51,7 +51,7 @@ export declare function collectSubtreeFlameRects(all: FlameRect[], root: FlameRe
51
51
  * toward shallower levels, so we prefer the most direct child instead of jumping deep into the call tree.
52
52
  * Returns `null` when no further zoom is meaningful (e.g. already at a leaf).
53
53
  */
54
- export declare function zoomInTarget(fb: Flamebearer, zoomRoot: FlameRect | null): FlameRect | null;
54
+ export declare function zoomInTarget(fb: Flamebearer, zoomRoot: FlameRect | null, allRects?: FlameRect[]): FlameRect | null;
55
55
  export declare function flameBarMatchesSearch(name: string, query: string): boolean;
56
56
  /** Pixel layout for one flame bar (canvas + hit testing). */
57
57
  export type FlameLayoutBar = {
@@ -74,6 +74,8 @@ export interface ComputeFlameLayoutOptions {
74
74
  shouldKeepName?: (name: string) => boolean;
75
75
  /** Merge straight-line recursion (parent → single same-name child of equal width) into a single bar — pyroscope's "collapse recursive frames". */
76
76
  collapseRecursive?: boolean;
77
+ /** Pre-flattened rects for this `fb` (from `flattenFlameRects`). Pass it to avoid re-flattening on every layout pass (the caller can memoize it once per `fb`). */
78
+ allRects?: FlameRect[];
77
79
  }
78
80
  /**
79
81
  * Compute the on-canvas layout. See `ComputeFlameLayoutOptions` for the toggles.
@@ -0,0 +1,34 @@
1
+ import { type FC } from 'react';
2
+ import { ProgrammingLanguages } from '@/types';
3
+ import { type SymbolTableRow } from '../flamebearer';
4
+ import type { SymbolTableInstrumentation } from './use-symbol-instrumentation';
5
+ import { type TableRowCell } from '@/components/_v2';
6
+ /** Shape of `Table`'s controlled filters map (columnKey → selected option ids). Re-exported so callers can hold the lifted state. */
7
+ export type SymbolTableFilters = {
8
+ [columnKey: string]: TableRowCell['rawValue'][];
9
+ };
10
+ export interface SymbolTableProps {
11
+ /** Full symbol set. Search filtering for display happens here (via `searchQuery`) so the instrumentation selection isn't dropped when filtered. */
12
+ rows: SymbolTableRow[];
13
+ languages?: ProgrammingLanguages[] | null;
14
+ /** The custom-instrumentation wiring, lifted to the profiling container so the flame graph shares the same selection (PLAT-1246). */
15
+ instrumentation: SymbolTableInstrumentation;
16
+ /** Free-text symbol-name filter applied for display only. */
17
+ searchQuery?: string;
18
+ /** Controlled column filters. Provide together with `onFiltersChange` to share the table's filters with the flame graph (PLAT-1001 #1). */
19
+ filters?: SymbolTableFilters;
20
+ onFiltersChange?: (filters: SymbolTableFilters) => void;
21
+ /** When set (the flame graph is zoomed in), restrict the displayed rows to the symbols inside the zoomed subtree (PLAT-1246). */
22
+ zoomedSymbols?: string[] | null;
23
+ /** Symbol name to highlight + scroll into view (driven by clicking a flame-graph frame). */
24
+ highlightSymbol?: string | null;
25
+ /** Bump to (re)trigger the scroll to `highlightSymbol` even when it's unchanged. */
26
+ scrollSignal?: number;
27
+ }
28
+ /**
29
+ * Build a flame-graph-friendly name predicate from the table's lifted column filters. Only the Java column filters are
30
+ * projected onto the flame graph; the "only instrumentable" filter is table-only (it would hide most of the call tree).
31
+ * Returns `undefined` when no Java filtering is needed so callers can pass it straight through to `FlameGraphCanvas`.
32
+ */
33
+ export declare function buildJavaSymbolNamePredicate(filters: SymbolTableFilters | undefined, languages: ProgrammingLanguages[] | null | undefined): ((name: string) => boolean) | undefined;
34
+ export declare const SymbolTable: FC<SymbolTableProps>;
@@ -0,0 +1,10 @@
1
+ import { type FC } from 'react';
2
+ import type { PendingModify } from './use-symbol-instrumentation';
3
+ export interface ModifyRulesModalProps {
4
+ /** The staged change set, or `null` to keep the modal closed. */
5
+ pendingModify: PendingModify | null;
6
+ onClose: () => void;
7
+ onConfirm: () => void;
8
+ }
9
+ /** Confirmation modal listing the symbols that will be added (new rule each) or removed before the API calls run. */
10
+ export declare const ModifyRulesModal: FC<ModifyRulesModalProps>;
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Bridges the profiling symbol table to custom-instrumentation rules (PLAT-1243).
3
+ *
4
+ * Profiling rows are *display strings* emitted by the language profiler, not structured
5
+ * probes. To let a user "instrument this symbol" we do a best-effort parse of the symbol
6
+ * into the `customInstrumentations` probe shape the `InstrumentationRule` API expects:
7
+ * - Go (pprof): `pkg/path.Func`, `pkg/path.(*Recv).Method`, `main.Func`
8
+ * - Java (async-profiler): `void com.example.Foo.bar(int)`, `com.example.Foo.bar`
9
+ *
10
+ * The parse is intentionally lenient: the resulting probe is used to create/update the
11
+ * rule (after the user confirms in a warning modal), and the same parse powers the "already
12
+ * instrumented" indicator (matched against existing rules that apply to this source).
13
+ *
14
+ * PLAT-1246: all add/remove from the UI funnels into a *single* source-scoped rule named
15
+ * "Profiling Symbols" (see `PROFILING_SYMBOLS_RULE_NAME`). Symbols covered by *other* rules are
16
+ * still read to render the checkbox as selected, but those rules are never modified from here —
17
+ * a symbol only present in another rule renders a disabled checkbox naming the owning rule.
18
+ */
19
+ import { GolangCustomProbe, JavaCustomProbe, ProgrammingLanguages, type InstrumentationRule, type InstrumentationRuleFormData, type SourcesScopes, type Workload } from '@/types';
20
+ /** Languages that support custom instrumentation today — mirrors the `CustomInstrumentation` rule option in `INSTRUMENTATION_RULE_OPTIONS`. */
21
+ export declare const CUSTOM_INSTRUMENTATION_LANGUAGES: ProgrammingLanguages[];
22
+ /**
23
+ * Name of the single, UI-managed custom-instrumentation rule that the profiling tab creates and edits (PLAT-1246).
24
+ * Every add/remove from the symbol table or flame graph only ever touches this one rule — symbols instrumented by
25
+ * other (manually authored) rules are read for the "selected" indicator but never modified from here.
26
+ */
27
+ export declare const PROFILING_SYMBOLS_RULE_NAME = "Profiling Symbols";
28
+ export interface ResolvedSymbolProbe {
29
+ language: ProgrammingLanguages.Go | ProgrammingLanguages.Java;
30
+ golang?: GolangCustomProbe;
31
+ java?: JavaCustomProbe;
32
+ }
33
+ /**
34
+ * Parse a Go pprof symbol into a probe. Returns `null` when the symbol lacks a package
35
+ * separator (e.g. a runtime frame like `runtime.mallocgc` still parses; a bare token does not).
36
+ */
37
+ export declare function parseGoSymbolToProbe(symbol: string): GolangCustomProbe | null;
38
+ /**
39
+ * Parse a Java async-profiler symbol into a probe. Strips a leading return type / modifiers
40
+ * and any argument list, then splits the fully-qualified name into class + method.
41
+ */
42
+ export declare function parseJavaSymbolToProbe(symbol: string): JavaCustomProbe | null;
43
+ /** Which supported languages apply to a source (intersection of detected languages and {Go, Java}). */
44
+ export declare function supportedLanguagesForSource(languages: ProgrammingLanguages[] | null | undefined): ProgrammingLanguages[];
45
+ /**
46
+ * Resolve a profiling symbol to a single (language, probe) pair, scoped to the source's
47
+ * supported languages. Returns `null` when the source has no supported language or the
48
+ * symbol can't be parsed for the chosen language.
49
+ */
50
+ export declare function resolveSymbolProbe(symbol: string, sourceSupportedLanguages: ProgrammingLanguages[]): ResolvedSymbolProbe | null;
51
+ /** Whether a rule's source scope applies to this workload (empty scope = wildcard / all sources). Pass `language` to also gate on the rule's language list. */
52
+ export declare function ruleAppliesToSource(scopes: SourcesScopes | null | undefined, source: Workload, language?: ProgrammingLanguages): boolean;
53
+ /**
54
+ * Locate the single UI-managed "Profiling Symbols" rule applicable to this source (PLAT-1246), or `null` when it
55
+ * doesn't exist yet (the first add mints it). Prefers a rule scoped specifically to this source over a broader
56
+ * wildcard match, so we always edit the one the profiling tab created rather than some unrelated wildcard rule.
57
+ */
58
+ export declare function findProfilingSymbolsRule(rules: InstrumentationRule[], source: Workload): InstrumentationRule | null;
59
+ export interface MatchedSymbolRule {
60
+ rule: InstrumentationRule;
61
+ resolved: ResolvedSymbolProbe;
62
+ }
63
+ /**
64
+ * Find *every* custom-instrumentation rule (applicable to this source) that already instruments the
65
+ * given symbol — a symbol can be covered by more than one rule (e.g. a source-scoped rule plus a
66
+ * broader shared one). Used to flag the row as instrumented and to fully remove the probe from all
67
+ * rules when the user unchecks it.
68
+ */
69
+ export declare function findRulesForSymbol(symbol: string, source: Workload, sourceSupportedLanguages: ProgrammingLanguages[], rules: InstrumentationRule[]): MatchedSymbolRule[];
70
+ /** Build the full `InstrumentationRuleFormData` for an `update` mutation that only swaps the rule's probes. */
71
+ export declare function buildRuleUpdateFormData(rule: InstrumentationRule, customInstrumentations: InstrumentationRule['customInstrumentations']): InstrumentationRuleFormData;
72
+ /**
73
+ * Build the create-mode form data for the single source-scoped "Profiling Symbols" rule (PLAT-1246), seeded with the
74
+ * given probes. Used only when no managed rule exists yet; subsequent adds/removes update it via `buildRuleUpdateFormData`.
75
+ */
76
+ export declare function buildProfilingSymbolsCreateFormData(resolved: ResolvedSymbolProbe[], source: Workload): InstrumentationRuleFormData;
77
+ /**
78
+ * Fold a batch of probe additions + removals into a rule's `customInstrumentations`, returning the
79
+ * new probe map plus an `isEmpty` flag (the caller deletes the rule instead of updating when it ends
80
+ * up empty). Removals/additions are matched by probe identity, and additions are de-duped against
81
+ * the rule's existing probes so re-adding an already-present symbol is a no-op.
82
+ */
83
+ export declare function applyProbeChangesToRule(rule: InstrumentationRule, added: ResolvedSymbolProbe[], removed: ResolvedSymbolProbe[]): {
84
+ customInstrumentations: InstrumentationRule['customInstrumentations'];
85
+ isEmpty: boolean;
86
+ };
@@ -0,0 +1,69 @@
1
+ import type { SymbolTableRow } from '../flamebearer';
2
+ import { type ProgrammingLanguages, type Workload } from '@/types';
3
+ import { PROFILING_SYMBOLS_RULE_NAME, type MatchedSymbolRule } from './symbol-instrumentation';
4
+ /** Per-symbol custom-instrumentation state, derived from the source's rules + the symbol parser. */
5
+ export interface SymbolInstrumentationState {
6
+ /** Whether the symbol could be parsed into a probe (and is therefore selectable). */
7
+ parsable: boolean;
8
+ /** Whether the symbol is part of the UI-managed "Profiling Symbols" rule. */
9
+ inManagedRule: boolean;
10
+ /** Rules *other* than the managed rule that already instrument this symbol (read-only from the UI's perspective). */
11
+ otherRules: MatchedSymbolRule[];
12
+ /** Whether a checkbox should be rendered for this symbol at all (selection enabled + parsable). */
13
+ showCheckbox: boolean;
14
+ /** Whether the checkbox is rendered but locked — the symbol lives *only* in another rule, so it must be edited there. */
15
+ checkboxDisabled: boolean;
16
+ /** Tooltip for a disabled checkbox, naming the owning rule(s) so the user knows where to change it manually. */
17
+ checkboxTooltip?: string;
18
+ /** Whether the per-row "add" hover action should be enabled. */
19
+ addEnabled: boolean;
20
+ /** Tooltip for the add action (e.g. the reason it's disabled). */
21
+ addTooltip: string;
22
+ }
23
+ /** The wiring `SymbolTable` (and the flame graph) consume to render the per-symbol actions, indicator + checkboxes. */
24
+ export interface SymbolTableInstrumentation {
25
+ getSymbolState: (symbol: string) => SymbolInstrumentationState;
26
+ /** Per-row hover "add" action — stages adding the symbol to the managed rule. */
27
+ onAdd: (symbol: string) => void;
28
+ /** Per-row hover "remove" action — stages removing the symbol from the managed rule (other rules are left untouched). */
29
+ onRemove: (symbol: string) => void;
30
+ /** Whether the checkbox column is shown at all (source supports custom instrumentation + user can create). */
31
+ selectionEnabled: boolean;
32
+ /** Current checked state of a symbol. Symbols in any matching rule default to checked. */
33
+ isSelected: (symbol: string) => boolean;
34
+ /** Toggle a single symbol's selection. No-op for disabled (other-rule-only) symbols. */
35
+ onToggleSymbol: (symbol: string, selected: boolean) => void;
36
+ }
37
+ /** Symbols staged for the confirmation modal: all changes apply to the single managed "Profiling Symbols" rule. */
38
+ export interface PendingModify {
39
+ add: string[];
40
+ remove: string[];
41
+ }
42
+ export interface UseSymbolInstrumentationResult {
43
+ instrumentation: SymbolTableInstrumentation;
44
+ /** Number of staged add + remove symbols (drives the Island visibility/badge). */
45
+ pendingCount: number;
46
+ /** The change set awaiting confirmation, or `null` when the modal is closed. */
47
+ pendingModify: PendingModify | null;
48
+ closeModify: () => void;
49
+ /** Stage the current bulk checkbox selection for confirmation. */
50
+ openBulkModify: () => void;
51
+ /** Clear the bulk checkbox selection. */
52
+ resetSelection: () => void;
53
+ /** Apply the staged change set against the API and reset. */
54
+ confirmModify: () => void;
55
+ }
56
+ /**
57
+ * Owns the profiling tab's custom-instrumentation behaviour (PLAT-1246). It matches symbols against the existing
58
+ * rules, tracks the bulk checkbox selection, and applies confirmed add/remove changes against the *single* UI-managed
59
+ * "Profiling Symbols" rule (created on first add, deleted when emptied). Symbols covered only by other rules render a
60
+ * disabled checkbox. `rows` should be the full (unfiltered) symbol set so a staged selection isn't silently dropped
61
+ * when the table is search-filtered.
62
+ */
63
+ export declare function useSymbolInstrumentation({ source, languages, rows }: {
64
+ source: Workload;
65
+ languages?: ProgrammingLanguages[] | null;
66
+ rows: SymbolTableRow[];
67
+ }): UseSymbolInstrumentationResult;
68
+ /** Re-exported so callers (e.g. the flame graph hint) can reference the managed rule's name without re-importing the bridge. */
69
+ export { PROFILING_SYMBOLS_RULE_NAME };
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const ActiveNodeInfo: () => React.JSX.Element | null;
@@ -0,0 +1,4 @@
1
+ import { type ReactNode, type FC } from 'react';
2
+ export declare const ColumnRoot: FC<{
3
+ children: ReactNode;
4
+ }>;
@@ -1,3 +1,2 @@
1
1
  import { type FC } from 'react';
2
- export declare const SAERCH_AND_SELECT_NODES_WIDTH = 358;
3
2
  export declare const SearchAndSelectNodes: FC;
@@ -11,9 +11,9 @@ interface ServiceMapContextValue {
11
11
  fitViewTrigger: number;
12
12
  hoveredNodeId: string | null;
13
13
  setHoveredNodeId: (id: string | null) => void;
14
- selectedNodeId: string | null;
15
- toggleSelectedNode: (id: string) => void;
16
- resetSelectedNode: () => void;
14
+ activeNodeId: string | null;
15
+ toggleActiveNode: (id: string) => void;
16
+ resetActiveNode: () => void;
17
17
  }
18
18
  export declare const useServiceMapContext: () => ServiceMapContextValue;
19
19
  interface ServiceMapProviderProps {