@odigos/ui-kit 0.0.238 → 0.0.240

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 (169) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/lib/chunks/helpers-D-6cJlOn.js +19 -0
  3. package/lib/chunks/index-RUJS9Blu.js +147 -0
  4. package/lib/chunks/source-instrument-form-context-CEgbaSRi.js +1 -0
  5. package/lib/chunks/ui-components-B0BVzW_z.js +1570 -0
  6. package/lib/chunks/{vendor-C150cdxb.js → vendor-Be0cOokr.js} +1 -1
  7. package/lib/components/_v2/button/index.d.ts +1 -1
  8. package/lib/components/_v2/cards/data-card/index.d.ts +6 -1
  9. package/lib/components/_v2/condition/index.d.ts +1 -0
  10. package/lib/components/_v2/drawer/header/index.d.ts +2 -0
  11. package/lib/components/_v2/drawer/index.d.ts +1 -1
  12. package/lib/components/_v2/drop-data/index.d.ts +3 -4
  13. package/lib/components/_v2/icon-group/index.d.ts +10 -0
  14. package/lib/components/_v2/index.d.ts +1 -0
  15. package/lib/components/_v2/input-table/types.d.ts +2 -0
  16. package/lib/components/_v2/tag/index.d.ts +10 -0
  17. package/lib/components/_v2/typography/index.d.ts +2 -0
  18. package/lib/components/index.d.ts +0 -22
  19. package/lib/components/v2.js +1 -1
  20. package/lib/components.js +1 -1
  21. package/lib/constants/sources/index.d.ts +10 -5
  22. package/lib/constants/strings/index.d.ts +92 -0
  23. package/lib/constants.js +1 -1
  24. package/lib/containers/_v2/_drawers/add-source-drawer/strings.d.ts +54 -0
  25. package/lib/containers/_v2/_drawers/edit-source-drawer/common/index.d.ts +1 -0
  26. package/lib/containers/_v2/_drawers/edit-source-drawer/common/pods-header.d.ts +8 -0
  27. package/lib/containers/_v2/_drawers/edit-source-drawer/helpers.d.ts +12 -0
  28. package/lib/containers/_v2/_drawers/edit-source-drawer/index.d.ts +19 -0
  29. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/containers-card/distro-override.d.ts +11 -0
  30. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/containers-card/index.d.ts +7 -0
  31. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/containers-card/popup-form.d.ts +15 -0
  32. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/containers-card/runtime-override.d.ts +10 -0
  33. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/health-card.d.ts +6 -0
  34. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/index.d.ts +11 -0
  35. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/main-card.d.ts +6 -0
  36. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/index.d.ts +6 -0
  37. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/pods-list/container-row.d.ts +9 -0
  38. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/pods-list/helpers.d.ts +19 -0
  39. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/pods-list/index.d.ts +12 -0
  40. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/pods-list/pod-row.d.ts +8 -0
  41. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/pods-list/process-row.d.ts +11 -0
  42. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/pods-list/row-header.d.ts +13 -0
  43. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/pods-list/types.d.ts +18 -0
  44. package/lib/containers/_v2/_drawers/edit-source-drawer/overview/statuses-card.d.ts +9 -0
  45. package/lib/containers/_v2/_drawers/edit-source-drawer/peers/index.d.ts +11 -0
  46. package/lib/containers/_v2/_drawers/edit-source-drawer/pods/containers-card/index.d.ts +7 -0
  47. package/lib/containers/_v2/_drawers/edit-source-drawer/pods/containers-card/process-card.d.ts +5 -0
  48. package/lib/containers/_v2/_drawers/edit-source-drawer/pods/debug-commands.d.ts +6 -0
  49. package/lib/containers/_v2/_drawers/edit-source-drawer/pods/index.d.ts +7 -0
  50. package/lib/containers/_v2/_drawers/edit-source-drawer/pods/pod-card.d.ts +8 -0
  51. package/lib/containers/{source-drawer → _v2/_drawers/edit-source-drawer}/profiling/index.d.ts +2 -2
  52. package/lib/containers/_v2/_drawers/index.d.ts +1 -0
  53. package/lib/containers/_v2/_forms/edit-source-form/index.d.ts +2 -0
  54. package/lib/containers/_v2/_forms/index.d.ts +1 -0
  55. package/lib/containers/_v2/_modals/index.d.ts +1 -0
  56. package/lib/containers/_v2/_modals/onboarding-done/background.d.ts +5 -0
  57. package/lib/containers/_v2/_modals/onboarding-done/index.d.ts +3 -0
  58. package/lib/containers/_v2/overview/columns/column/index.d.ts +2 -2
  59. package/lib/containers/_v2/overview/columns/column/list-item.d.ts +2 -2
  60. package/lib/containers/_v2/overview/columns/column/source-visual-state.d.ts +3 -3
  61. package/lib/containers/_v2/overview/drawers/index.d.ts +2 -4
  62. package/lib/containers/_v2/overview/search/builder.d.ts +4 -4
  63. package/lib/containers/index.d.ts +0 -3
  64. package/lib/containers/service-map/helpers/build-map-nodes.d.ts +2 -2
  65. package/lib/containers/v2.js +269 -124
  66. package/lib/containers.js +19 -19
  67. package/lib/contexts/action-form-context.d.ts +0 -1
  68. package/lib/contexts/destination-form-context.d.ts +0 -1
  69. package/lib/contexts/index.d.ts +1 -0
  70. package/lib/contexts/rule-form-context.d.ts +0 -1
  71. package/lib/contexts/source-edit-form-context.d.ts +17 -0
  72. package/lib/contexts.js +1 -1
  73. package/lib/functions/filter-sources/index.d.ts +2 -2
  74. package/lib/functions/filter-sources-by-stream/index.d.ts +2 -2
  75. package/lib/functions/get-conditions-booleans/index.d.ts +5 -3
  76. package/lib/functions/get-containers-counts/index.d.ts +2 -2
  77. package/lib/functions/get-containers-icons/index.d.ts +5 -3
  78. package/lib/functions/get-entity-id/index.d.ts +8 -4
  79. package/lib/functions/get-main-container-language/index.d.ts +2 -2
  80. package/lib/functions/get-virtual-service-icon/index.d.ts +1 -1
  81. package/lib/functions/get-workload-id/index.d.ts +2 -2
  82. package/lib/functions/index.d.ts +2 -0
  83. package/lib/functions/is-pod-injected-with-agent/index.d.ts +4 -0
  84. package/lib/functions/map-desired-status-to-condition-status/index.d.ts +2 -0
  85. package/lib/functions.js +1 -1
  86. package/lib/hooks/index.d.ts +0 -1
  87. package/lib/hooks/useActionFormData.d.ts +1 -1
  88. package/lib/hooks/useSourceFormData.d.ts +2 -2
  89. package/lib/hooks/useTimeAgo.d.ts +11 -0
  90. package/lib/hooks.js +1 -1
  91. package/lib/icons/brand/index.d.ts +3 -0
  92. package/lib/icons/brand/odigos-logo-text-colored-central/index.d.ts +2 -0
  93. package/lib/icons/brand/odigos-logo-text-colored-community/index.d.ts +2 -0
  94. package/lib/icons/brand/odigos-logo-text-colored-enterprise/index.d.ts +2 -0
  95. package/lib/icons.js +1 -1
  96. package/lib/mock-data/index.d.ts +0 -1
  97. package/lib/mock-data/profiling/index.d.ts +1 -1
  98. package/lib/mock-data/service-map/index.d.ts +1 -1
  99. package/lib/mock-data/sources/index.d.ts +4 -7
  100. package/lib/snippets/_v2/delete-modal/index.d.ts +3 -0
  101. package/lib/snippets/_v2/dynamic-field/index.d.ts +2 -3
  102. package/lib/snippets/_v2/odigos-logo-text-by-tier/index.d.ts +2 -0
  103. package/lib/snippets/_v2/rich-title/index.d.ts +5 -0
  104. package/lib/snippets/_v2/wide-drawer/index.d.ts +7 -1
  105. package/lib/snippets/index.d.ts +0 -4
  106. package/lib/snippets/v2.js +1 -1
  107. package/lib/snippets.js +49 -1
  108. package/lib/store/useEntityStore.d.ts +2 -2
  109. package/lib/store/useFilterStore.d.ts +8 -14
  110. package/lib/store/useSelectedStore.d.ts +2 -2
  111. package/lib/store/useSetupStore.d.ts +10 -15
  112. package/lib/store.js +1 -1
  113. package/lib/theme.js +1 -1
  114. package/lib/types/common/index.d.ts +28 -0
  115. package/lib/types/destinations/index.d.ts +3 -3
  116. package/lib/types/namespaces/index.d.ts +3 -3
  117. package/lib/types/service-map/index.d.ts +2 -2
  118. package/lib/types/sources/index.d.ts +4 -41
  119. package/lib/types/workload/index.d.ts +145 -3
  120. package/lib/types.js +1 -1
  121. package/lib/visuals.js +1 -1
  122. package/package.json +1 -1
  123. package/lib/chunks/index-CCaTS6aq.js +0 -145
  124. package/lib/chunks/index-ChkHWnzu.js +0 -77
  125. package/lib/chunks/index-D6SlbWIi.js +0 -3
  126. package/lib/chunks/ui-components-rpRyPe3l.js +0 -2235
  127. package/lib/components/badge/index.d.ts +0 -11
  128. package/lib/components/button/index.d.ts +0 -6
  129. package/lib/components/cancel-warning/index.d.ts +0 -10
  130. package/lib/components/checkbox/index.d.ts +0 -15
  131. package/lib/components/condition-details/index.d.ts +0 -10
  132. package/lib/components/data-card/data-card-fields/index.d.ts +0 -23
  133. package/lib/components/data-card/index.d.ts +0 -17
  134. package/lib/components/data-tab/index.d.ts +0 -43
  135. package/lib/components/delete-warning/index.d.ts +0 -13
  136. package/lib/components/describe-row/index.d.ts +0 -13
  137. package/lib/components/drawer/drawer-footer/index.d.ts +0 -16
  138. package/lib/components/drawer/drawer-header/index.d.ts +0 -24
  139. package/lib/components/drawer/index.d.ts +0 -15
  140. package/lib/components/dropdown/index.d.ts +0 -25
  141. package/lib/components/extend-arrow/index.d.ts +0 -8
  142. package/lib/components/field-error/index.d.ts +0 -4
  143. package/lib/components/field-label/index.d.ts +0 -11
  144. package/lib/components/input/index.d.ts +0 -15
  145. package/lib/components/modal/index.d.ts +0 -14
  146. package/lib/components/monitors-icons/index.d.ts +0 -11
  147. package/lib/components/no-data-found/index.d.ts +0 -6
  148. package/lib/components/popup-form/index.d.ts +0 -18
  149. package/lib/components/status/index.d.ts +0 -17
  150. package/lib/components/tab-list/index.d.ts +0 -18
  151. package/lib/components/warning-modal/index.d.ts +0 -24
  152. package/lib/containers/overview-drawer/index.d.ts +0 -27
  153. package/lib/containers/source-drawer/build-card.d.ts +0 -3
  154. package/lib/containers/source-drawer/describe/index.d.ts +0 -13
  155. package/lib/containers/source-drawer/index.d.ts +0 -23
  156. package/lib/containers/source-drawer/libraries/index.d.ts +0 -12
  157. package/lib/containers/source-drawer/odigos-health/index.d.ts +0 -5
  158. package/lib/containers/source-drawer/peers/index.d.ts +0 -12
  159. package/lib/containers/source-form/index.d.ts +0 -8
  160. package/lib/hooks/useSourceSelectionFormData.d.ts +0 -32
  161. package/lib/mock-data/workload/index.d.ts +0 -2
  162. package/lib/snippets/add-button/index.d.ts +0 -9
  163. package/lib/snippets/copy-text/index.d.ts +0 -7
  164. package/lib/snippets/pod-container/index.d.ts +0 -5
  165. package/lib/snippets/source-container/index.d.ts +0 -7
  166. package/lib/snippets/source-container/override-runtime.d.ts +0 -10
  167. /package/lib/containers/{source-drawer → _v2/_drawers/edit-source-drawer}/profiling/flame-graph-canvas.d.ts +0 -0
  168. /package/lib/containers/{source-drawer → _v2/_drawers/edit-source-drawer}/profiling/flamebearer.d.ts +0 -0
  169. /package/lib/containers/{source-drawer → _v2/_drawers/edit-source-drawer}/profiling/symbol-table.d.ts +0 -0
package/lib/containers.js CHANGED
@@ -1,14 +1,14 @@
1
- import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import i,{useTheme as n}from"styled-components";import{c as o,d as s,I as c,P as d,e as l,T as p,F as g,f as h,h as u,i as m,S as y,j as f,k as v,l as x,m as b,n as w,E as N,o as k,p as T,q as $,r as K,s as C,t as M,v as z,w as E,x as I}from"./chunks/ui-components-rpRyPe3l.js";import{NotificationIcon as R,TrashIcon as G,UserIcon as _,ImageErrorIcon as D,ChevronDownIcon as V,ChevronRightIcon as A}from"./icons.js";export{O as OverviewDrawer,S as SourceDrawer,a as SourceForm}from"./chunks/index-ChkHWnzu.js";import{useState as j,useRef as q,useCallback as P,useEffect as B}from"react";import{MarkerType as L,useNodesState as F,useEdgesState as W}from"@xyflow/react";import{E as H}from"./chunks/vendor-C150cdxb.js";import"zustand";import"javascript-time-ago";import"react-dom";import"prism-react-renderer";import"react-error-boundary";import"virtua";import"./chunks/index-D6SlbWIi.js";const U=i.div`
1
+ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import i,{useTheme as n}from"styled-components";import{d as o,u as a,I as s,a as c,N as d,e as l,F as p,f as g,g as h,C as u,S as m,h as y,i as f,j as v,k as x,D as b,E as w,l as N,m as S,n as k,o as T,p as $,q as K,r as C,s as M}from"./chunks/ui-components-B0BVzW_z.js";import{NotificationIcon as z,TrashIcon as E,UserIcon as I,ImageErrorIcon as R,ChevronDownIcon as G,ChevronRightIcon as _}from"./icons.js";import{useState as D,useRef as V,useCallback as A,useEffect as O}from"react";import{MarkerType as j,useNodesState as q,useEdgesState as B}from"@xyflow/react";import{E as F}from"./chunks/vendor-Be0cOokr.js";import{Flow as L}from"./snippets.js";import"zustand";import"javascript-time-ago";import"prism-react-renderer";import"react-error-boundary";import"react-dom";import"virtua";const P=i.div`
2
2
  position: relative;
3
3
  width: fit-content;
4
- `,X=i(f)`
4
+ `,W=i(y)`
5
5
  gap: 12px;
6
6
  padding: 0 12px;
7
- `,J=i(g)`
7
+ `,H=i(p)`
8
8
  gap: 12px;
9
9
  max-height: 400px;
10
10
  overflow-y: auto;
11
- `,Q=i.div`
11
+ `,U=i.div`
12
12
  position: absolute;
13
13
  bottom: 0;
14
14
  left: 0;
@@ -17,19 +17,19 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import i,{useThe
17
17
  border-radius: 0 0 24px 24px;
18
18
  background: ${({theme:e})=>`linear-gradient(to top, ${e.colors.dropdown_bg}, transparent)`};
19
19
  pointer-events: none;
20
- `,Y=i(p)`
20
+ `,X=i(l)`
21
21
  background-color: ${({theme:e})=>e.colors.orange_soft};
22
22
  color: ${({theme:e})=>e.text.primary};
23
23
  border-radius: 32px;
24
24
  width: fit-content;
25
25
  padding: 2px 8px;
26
- `,Z=()=>{const r=n(),{notifications:i,markAsSeen:a}=o(),g=i.filter(({hideFromHistory:e})=>!e),h=g.filter(({seen:e})=>!e),u=h.length,{popupRef:m,popupOpen:y,setPopupOpen:f,popupPosition:v,handlePosition:x}=s({defaultClientHeight:420,defaultClientwidth:400,onClickOutside:()=>{u&&h.forEach(({id:e})=>a(e))}});return e(U,{children:[t(c,{onClick:()=>{x(0,0),f(e=>!e)},tooltip:"Notifications",withPing:!!u,pingColor:r.colors.orange_og,children:t(R,{size:18})}),e(d,{ref:m,isOpen:y,right:v.left,maxWidth:"400px",header:e(X,{children:[t(p,{size:20,children:"Notifications"}),!!u&&e(Y,{size:12,family:"secondary",children:[u," new"]})]}),children:[t(J,{children:g.length?g.map(e=>t(oe,{...e,onClick:()=>f(!1)},`notification-${e.id}`)):t(l,{title:"No notifications",subTitle:""})}),t(Q,{})]})]})},ee=i.div`
26
+ `,J=()=>{const r=n(),{notifications:i,markAsSeen:p}=o(),g=i.filter(({hideFromHistory:e})=>!e),h=g.filter(({seen:e})=>!e),u=h.length,{popupRef:m,popupOpen:y,setPopupOpen:f,popupPosition:v,handlePosition:x}=a({defaultClientHeight:420,defaultClientwidth:400,onClickOutside:()=>{u&&h.forEach(({id:e})=>p(e))}});return e(P,{children:[t(s,{onClick:()=>{x(0,0),f(e=>!e)},tooltip:"Notifications",withPing:!!u,pingColor:r.colors.orange_og,children:t(z,{size:18})}),e(c,{ref:m,isOpen:y,right:v.left,maxWidth:"400px",header:e(W,{children:[t(l,{size:20,children:"Notifications"}),!!u&&e(X,{size:12,family:"secondary",children:[u," new"]})]}),children:[t(H,{children:g.length?g.map(e=>t(re,{...e,onClick:()=>f(!1)},`notification-${e.id}`)):t(d,{title:"No notifications",subTitle:""})}),t(U,{})]})]})},Q=i.div`
27
27
  display: flex;
28
28
  align-items: flex-start;
29
29
  gap: 12px;
30
30
  padding: 16px;
31
31
  border-radius: 16px;
32
- background-color: ${({theme:e})=>e.colors.dropdown_bg_2+v["080"]};
32
+ background-color: ${({theme:e})=>e.colors.dropdown_bg_2+f["080"]};
33
33
  cursor: not-allowed;
34
34
  &.click-enabled {
35
35
  cursor: pointer;
@@ -37,30 +37,30 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import i,{useThe
37
37
  background-color: ${({theme:e})=>e.colors.dropdown_bg_2};
38
38
  }
39
39
  }
40
- `,te=i.div`
41
- background-color: ${({$type:e,theme:t})=>t.text[e]+v["015"]};
40
+ `,Y=i.div`
41
+ background-color: ${({$type:e,theme:t})=>t.text[e]+f["015"]};
42
42
  border-radius: 8px;
43
43
  width: 36px;
44
44
  height: 36px;
45
45
  display: flex;
46
46
  align-items: center;
47
47
  justify-content: center;
48
- `,re=i.div`
48
+ `,Z=i.div`
49
49
  width: 290px;
50
- `,ie=i.div`
50
+ `,ee=i.div`
51
51
  margin-bottom: 6px;
52
- `,ne=i.div`
52
+ `,te=i.div`
53
53
  display: flex;
54
54
  align-items: center;
55
55
  gap: 6px;
56
- `,oe=({id:i,seen:o,type:a,title:s,message:c,time:d,crdType:l,target:g,onClick:f})=>{const v=n(),{formatTimeAgo:b}=h(),{onClickNotification:w}=u(),S=!!l&&!!g,N=s?.toLowerCase().includes(m.Delete.toLowerCase())||!1,k=x(a,v);return e(ee,{className:S?"click-enabled":"",onClick:()=>{S&&(f(),w({id:i,crdType:l,target:g}))},children:[t(te,{$type:N?y.Error:a,children:t(N?G:k,{})}),e(re,{children:[t(ie,{children:t(p,{size:14,children:c})}),e(ne,{children:[t(p,{size:10,color:v.text.grey,children:b(d)}),!o&&e(r,{children:[t(p,{size:10,children:"·"}),t(p,{size:10,color:v.colors.orange_soft,children:"new"})]})]})]})]},`notification-${i}`)},ae=e=>`${N.Source}-${e}-${b.MapItem}`,se=(e,t,r)=>{const i=e.isVirtual,n=r?[_]:i?[k(e)]:t?T(t):[D],{priorotizedStatus:o}=i?{priorotizedStatus:void 0}:$(t?.conditions||[]);return{id:e.graphKey,title:e.serviceName,icons:n,isVirtual:i,status:o,aggService:e}},ce=e=>!(!e||"user"!==e.otelServiceName||e.namespace||e.name||e.kind),de=({theme:e,nodes:t,aggregatedServiceMap:r})=>{const i=[],n=new Map(t.map(e=>[e.id,e]));for(const t of r){const r=ae(t.graphKey),o=n.get(r);if(!o)continue;const a=o.data?.status===y.Error;for(const o of t.connections){const s=ae(o.targetGraphKey);n.has(s)&&i.push({id:`${r}-to-${s}`,type:"smoothstep",source:r,target:s,data:{sourceGraphKey:t.graphKey,targetGraphKey:o.targetGraphKey},markerEnd:{type:L.ArrowClosed},style:{stroke:a?e?.colors.dark_red:e?.colors.border}})}}return i},le=e=>{const t=e.lastIndexOf("|");return-1===t?{graphKey:e,detail:""}:{graphKey:e.substring(0,t),detail:e.substring(t+1)}},pe=new H,ge=`${N.Source}-user-${b.MapItem}`,he={"elk.algorithm":"layered","elk.direction":"RIGHT","elk.layered.spacing.nodeNodeBetweenLayers":"150","elk.spacing.nodeNode":"120","elk.layered.nodePlacement.strategy":"NETWORK_SIMPLEX","elk.layered.spacing.edgeEdgeBetweenLayers":"30","elk.layered.spacing.edgeNodeBetweenLayers":"40"},ue=i.div`
56
+ `,re=({id:i,seen:o,type:a,title:s,message:c,time:d,crdType:p,target:y,onClick:f})=>{const x=n(),{formatTimeAgo:b}=g(),{onClickNotification:w}=h(),N=!!p&&!!y,S=s?.toLowerCase().includes(u.Delete.toLowerCase())||!1,k=v(a,x);return e(Q,{className:N?"click-enabled":"",onClick:()=>{N&&(f(),w({id:i,crdType:p,target:y}))},children:[t(Y,{$type:S?m.Error:a,children:t(S?E:k,{})}),e(Z,{children:[t(ee,{children:t(l,{size:14,children:c})}),e(te,{children:[t(l,{size:10,color:x.text.grey,children:b(d)}),!o&&e(r,{children:[t(l,{size:10,children:"·"}),t(l,{size:10,color:x.colors.orange_soft,children:"new"})]})]})]})]},`notification-${i}`)},ie=e=>`${w.Source}-${e}-${x.MapItem}`,ne=(e,t,r)=>{const i=e.isVirtual,n=r?[I]:i?[N(e)]:t?S(t):[R],{priorotizedStatus:o}=i?{priorotizedStatus:void 0}:k(t?.conditions||[]);return{id:e.graphKey,title:e.serviceName,icons:n,isVirtual:i,status:o,aggService:e}},oe=e=>!(!e||"user"!==e.serviceName||e.id.namespace||e.id.name||e.id.kind),ae=({theme:e,nodes:t,aggregatedServiceMap:r})=>{const i=[],n=new Map(t.map(e=>[e.id,e]));for(const t of r){const r=ie(t.graphKey),o=n.get(r);if(!o)continue;const a=o.data?.status===m.Error;for(const o of t.connections){const s=ie(o.targetGraphKey);n.has(s)&&i.push({id:`${r}-to-${s}`,type:"smoothstep",source:r,target:s,data:{sourceGraphKey:t.graphKey,targetGraphKey:o.targetGraphKey},markerEnd:{type:j.ArrowClosed},style:{stroke:a?e?.colors.dark_red:e?.colors.border}})}}return i},se=e=>{const t=e.lastIndexOf("|");return-1===t?{graphKey:e,detail:""}:{graphKey:e.substring(0,t),detail:e.substring(t+1)}},ce=new F,de=`${w.Source}-user-${x.MapItem}`,le={"elk.algorithm":"layered","elk.direction":"RIGHT","elk.layered.spacing.nodeNodeBetweenLayers":"150","elk.spacing.nodeNode":"120","elk.layered.nodePlacement.strategy":"NETWORK_SIMPLEX","elk.layered.spacing.edgeEdgeBetweenLayers":"30","elk.layered.spacing.edgeNodeBetweenLayers":"40"},pe=i.div`
57
57
  padding: 8px 0;
58
- `,me=i.div`
58
+ `,ge=i.div`
59
59
  display: flex;
60
60
  gap: 12px;
61
61
  align-items: center;
62
62
  padding: 4px 0 4px 16px;
63
- `,ye=i.button`
63
+ `,he=i.button`
64
64
  display: flex;
65
65
  align-items: center;
66
66
  gap: 4px;
@@ -74,13 +74,13 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import i,{useThe
74
74
  &:hover {
75
75
  text-decoration: underline;
76
76
  }
77
- `,fe=i.div`
77
+ `,ue=i.div`
78
78
  padding: 4px 0 8px;
79
- `,ve=({conn:r,onToggle:i,isExpanded:n})=>{const o=r.details.length>0;return t(ue,{children:e(f,{$justifyContent:"space-between",$alignItems:"center",children:[t(p,{size:14,weight:500,children:r.targetServiceName}),o&&e(ye,{onClick:i,children:[t(n?V:A,{size:12}),n?"hide attributes":`${r.details.length} attribute${r.details.length>1?"s":""}`]})]})})},xe=({conn:e})=>{const i=n();return t(r,{children:e.details.map(e=>t(me,{children:t(p,{size:12,color:i.text.secondary,style:{flex:1},children:e.value})},e.value))})},be=({connections:i,isVirtual:o,attributes:a})=>{const[s,c]=j(new Set),d=n();if(o){const i=Object.entries(a||{});return e(r,{children:[t(p,{size:12,color:d.text.info,children:"This service is not instrumented. It was detected from client-side spans of services that communicate with it."}),i.length>0&&e(r,{children:[t(fe,{style:{paddingTop:16},children:t(p,{size:11,color:d.text.info,children:"Attributes"})}),i.map(([r,i])=>e(me,{children:[t(p,{size:12,color:d.text.secondary,children:r}),t(p,{size:12,children:i})]},r))]})]})}return i.length?e(r,{children:[t(fe,{children:t(p,{size:11,color:d.text.info,children:"Connected services"})}),i.map(r=>e("div",{children:[t(ve,{conn:r,isExpanded:s.has(r.targetGraphKey),onToggle:()=>{return e=r.targetGraphKey,void c(t=>{const r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r});var e}}),s.has(r.targetGraphKey)&&t(xe,{conn:r}),t(C,{})]},r.targetGraphKey))]}):t(p,{size:12,color:d.text.info,children:"No outgoing connections"})},we=({conn:i})=>{const o=n();return i?t(r,{children:i.details.length>0?e(r,{children:[t(fe,{children:t(p,{size:11,color:o.text.info,children:"Attribute breakdown"})}),i.details.map(e=>t(me,{children:t(p,{size:12,style:{flex:1},children:e.value})},e.value))]}):t(p,{size:12,color:o.text.info,style:{padding:"8px 0"},children:"No attribute breakdown"})}):t(p,{size:12,color:o.text.info,children:"No data for this connection"})},Se=({drawerState:e,aggregatedData:r,onClose:i})=>{if(!e)return null;const n=new Map(r.map(e=>[e.graphKey,e]));let o="",a="",s=null;if("node"===e.type){const r=n.get(e.graphKey);o=r?.serviceName||e.graphKey,a=r?.isVirtual?"Virtual service (uninstrumented)":"Outgoing connections",s=t(be,{connections:r?.connections||[],isVirtual:r?.isVirtual,attributes:r?.attributes})}else{const r=n.get(e.sourceKey),i=r?.connections.find(t=>t.targetGraphKey===e.targetKey);o=`${r?.serviceName||e.sourceKey} → ${i?.targetServiceName||e.targetKey}`,a="Connection details",s=t(we,{conn:i})}return t(K,{isOpen:!0,width:"420px",position:"right",header:{title:o,subTitle:a,onClose:i},children:s})},Ne=i.div`
79
+ `,me=({conn:r,onToggle:i,isExpanded:n})=>{const o=r.details.length>0;return t(pe,{children:e(y,{$justifyContent:"space-between",$alignItems:"center",children:[t(l,{size:14,weight:500,children:r.targetServiceName}),o&&e(he,{onClick:i,children:[t(n?G:_,{size:12}),n?"hide attributes":`${r.details.length} attribute${r.details.length>1?"s":""}`]})]})})},ye=({conn:e})=>{const i=n();return t(r,{children:e.details.map(e=>t(ge,{children:t(l,{size:12,color:i.text.secondary,style:{flex:1},children:e.value})},e.value))})},fe=({connections:i,isVirtual:o,attributes:a})=>{const[s,c]=D(new Set),d=n();if(o){const i=Object.entries(a||{});return e(r,{children:[t(l,{size:12,color:d.text.info,children:"This service is not instrumented. It was detected from client-side spans of services that communicate with it."}),i.length>0&&e(r,{children:[t(ue,{style:{paddingTop:16},children:t(l,{size:11,color:d.text.info,children:"Attributes"})}),i.map(([r,i])=>e(ge,{children:[t(l,{size:12,color:d.text.secondary,children:r}),t(l,{size:12,children:i})]},r))]})]})}return i.length?e(r,{children:[t(ue,{children:t(l,{size:11,color:d.text.info,children:"Connected services"})}),i.map(r=>e("div",{children:[t(me,{conn:r,isExpanded:s.has(r.targetGraphKey),onToggle:()=>{return e=r.targetGraphKey,void c(t=>{const r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r});var e}}),s.has(r.targetGraphKey)&&t(ye,{conn:r}),t($,{})]},r.targetGraphKey))]}):t(l,{size:12,color:d.text.info,children:"No outgoing connections"})},ve=({conn:i})=>{const o=n();return i?t(r,{children:i.details.length>0?e(r,{children:[t(ue,{children:t(l,{size:11,color:o.text.info,children:"Attribute breakdown"})}),i.details.map(e=>t(ge,{children:t(l,{size:12,style:{flex:1},children:e.value})},e.value))]}):t(l,{size:12,color:o.text.info,style:{padding:"8px 0"},children:"No attribute breakdown"})}):t(l,{size:12,color:o.text.info,children:"No data for this connection"})},xe=({drawerState:e,aggregatedData:r,onClose:i})=>{if(!e)return null;const n=new Map(r.map(e=>[e.graphKey,e]));let o="",a="",s=null;if("node"===e.type){const r=n.get(e.graphKey);o=r?.serviceName||e.graphKey,a=r?.isVirtual?"Virtual service (uninstrumented)":"Outgoing connections",s=t(fe,{connections:r?.connections||[],isVirtual:r?.isVirtual,attributes:r?.attributes})}else{const r=n.get(e.sourceKey),i=r?.connections.find(t=>t.targetGraphKey===e.targetKey);o=`${r?.serviceName||e.sourceKey} → ${i?.targetServiceName||e.targetKey}`,a="Connection details",s=t(ve,{conn:i})}return t(T,{isOpen:!0,width:"420px",position:"right",header:{title:o,subTitle:a,onClose:i},children:s})},be=i.div`
80
80
  width: 100%;
81
81
  height: ${({$heightToRemove:e})=>`calc(100vh - ${e}px)`};
82
82
  position: relative;
83
- `,ke={namespace:"",name:"",kind:"",otelServiceName:"user",selected:!0,numberOfInstances:0,dataStreamNames:[],containers:[],conditions:[]},Te=`${N.Source}-`,$e=`-${b.MapItem}`,Ke=.15,Ce=({heightToRemove:r,serviceMap:i,onRefresh:o})=>{const a=n(),s=M(e=>e.sources),[c,d,l]=F([]),[p,g,h]=W([]),[u,m]=j(0),[y,f]=j(null),v=q([]);v.current=c;const x=q(a);x.current=a;const S=q([]),k=q([]),T=P(()=>m(e=>e+1),[]),{activeNodeId:$,setActiveNodeType:K,setActiveNodeId:C}=z();B(()=>{if(!$)return;const e=(t=$).startsWith(Te)&&t.endsWith($e)?t.slice(Te.length,-$e.length):null;var t;e&&f({type:"node",graphKey:e})},[$]);const I=P((e,t)=>{const{sourceGraphKey:r,targetGraphKey:i}=t.data||{};r&&i&&(K(null),C(null),f({type:"edge",sourceKey:r,targetKey:i}))},[K,C]),R=P(()=>{f(null),K(null),C(null)},[K,C]),G=P((e,t)=>{const r=t.id;g(e=>e.map(e=>e.source===r||e.target===r?{...e,animated:!0,style:{...e.style,strokeWidth:2.5},labelStyle:{...e.labelStyle,opacity:1},labelBgStyle:{...e.labelBgStyle,opacity:1}}:{...e,style:{...e.style,opacity:Ke},labelStyle:{...e.labelStyle,opacity:Ke},labelBgStyle:{...e.labelBgStyle,opacity:Ke}}))},[g]),O=P(()=>{g(k.current)},[g]);return B(()=>{let e=!1;const t=(e=>{const t=new Map,r=new Set,i=(e,r,i=!1)=>{let n=t.get(e);return n||(n={serviceName:r,isVirtual:i,attributes:{},connectionMap:new Map},t.set(e,n)),n},n=(e,t)=>{if(t)for(const{key:r,value:i}of t)r in e||(e[r]=i)};for(const t of e){const{graphKey:e}=le(t.nodeId),o=i(e,t.serviceName);o.isVirtual=!1;for(const e of t.services){const{graphKey:t,detail:a}=le(e.nodeId);e.isVirtual&&(r.add(t),n(i(t,e.serviceName,!0).attributes,e.nodeAttributes));let s=o.connectionMap.get(t);if(s||(s={targetGraphKey:t,targetServiceName:e.serviceName,totalRequests:0,lastDateTime:e.dateTime,details:[]},o.connectionMap.set(t,s)),s.totalRequests+=e.requests,e.dateTime>s.lastDateTime&&(s.lastDateTime=e.dateTime),a){const t=s.details.find(e=>e.value===a);t?(t.requests+=e.requests,e.dateTime>t.dateTime&&(t.dateTime=e.dateTime)):s.details.push({value:a,requests:e.requests,dateTime:e.dateTime})}}}const o=[...t.entries()];for(const[,{connectionMap:e}]of o)for(const[n,o]of e)t.has(n)||i(n,o.targetServiceName,r.has(n));const a=[];for(const[e,{serviceName:r,isVirtual:i,attributes:n,connectionMap:o}]of t){const t=[...o.values()];t.sort((e,t)=>e.targetGraphKey.localeCompare(t.targetGraphKey)),a.push({graphKey:e,serviceName:r,isVirtual:i,connections:t,attributes:n})}return a.sort((e,t)=>e.graphKey.localeCompare(t.graphKey)),a})(i);S.current=t;const r=(({sources:e,aggregatedServiceMap:t})=>{const r=[],i={x:0,y:0};if(t.length&&e.length)for(const n of t){const t=ae(n.graphKey),o=e.find(e=>n.serviceName===e.otelServiceName||n.serviceName===e.name);r.push({id:t,type:b.MapItem,position:i,data:se(n,o,ce(o)),measured:{width:80,height:80}})}else r.push({id:`${N.Source}-${b.NoData}`,type:b.NoData,position:i,data:{subTitle:w.ARE_SERVICES_INSTRUMENTED_AND_PRODUCING_TRAFFIC}});return r})({aggregatedServiceMap:t,sources:[ke].concat(s)});if(1===r.length&&r[0].id===`${N.Source}-${b.NoData}`)return d(r),g([]),void(k.current=[]);const n=new Set(v.current.map(e=>e.id)),o=new Set(r.map(e=>e.id)),a=r.some(e=>!n.has(e.id)),c=v.current.some(e=>!o.has(e.id));if(!(a||c)){const e=new Map(v.current.map(e=>[e.id,e.position]));d(r.map(t=>({...t,position:e.get(t.id)??t.position})));const i=de({theme:x.current,nodes:r,aggregatedServiceMap:t});return k.current=i,void g(i)}return(async(e,t,r={})=>{const i={id:"root",layoutOptions:{...he,...r},children:e.map(e=>({id:e.id,width:80,height:80,...e.id===ge?{layoutOptions:{"elk.layered.layering.layerConstraint":"FIRST","elk.alignment":"CENTER"}}:{}})),edges:t.map(e=>({id:e.id,sources:[e.source],targets:[e.target]}))},n=await pe.layout(i),o=new Map;return n.children?.forEach(e=>{o.set(e.id,{x:e.x??0,y:e.y??0})}),{nodes:e.map(e=>({...e,position:o.get(e.id)??e.position})),edges:t}})(r,de({theme:x.current,nodes:r,aggregatedServiceMap:t})).then(({nodes:t})=>{if(e)return;d(t);const r=de({theme:x.current,nodes:t,aggregatedServiceMap:S.current});k.current=r,g(r),T()}),()=>{e=!0}},[i,s]),B(()=>{if(!v.current.length)return;const e=de({theme:a,nodes:v.current,aggregatedServiceMap:S.current});k.current=e,g(e)},[a]),e(Ne,{$heightToRemove:r,children:[t(E,{nodes:c,edges:p,onNodesChange:l,onEdgesChange:h,onEdgeClick:I,onNodeMouseEnter:G,onNodeMouseLeave:O,onRefresh:o,fitViewTrigger:u,zoomOnScroll:!0}),t(Se,{drawerState:y,aggregatedData:S.current,onClose:R})]})},Me=i.div`
83
+ `,we={id:{namespace:"",name:"",kind:""},serviceName:"user",markedForInstrumentation:{markedForInstrumentation:!0}},Ne=`${w.Source}-`,Se=`-${x.MapItem}`,ke=.15,Te=({heightToRemove:r,serviceMap:i,onRefresh:o})=>{const a=n(),s=K(e=>e.sources),[c,d,l]=q([]),[p,g,h]=B([]),[u,m]=D(0),[y,f]=D(null),v=V([]);v.current=c;const N=V(a);N.current=a;const S=V([]),k=V([]),T=A(()=>m(e=>e+1),[]),{activeNodeId:$,setActiveNodeType:M,setActiveNodeId:z}=C();O(()=>{if(!$)return;const e=(t=$).startsWith(Ne)&&t.endsWith(Se)?t.slice(Ne.length,-Se.length):null;var t;e&&f({type:"node",graphKey:e})},[$]);const E=A((e,t)=>{const{sourceGraphKey:r,targetGraphKey:i}=t.data||{};r&&i&&(M(null),z(null),f({type:"edge",sourceKey:r,targetKey:i}))},[M,z]),I=A(()=>{f(null),M(null),z(null)},[M,z]),R=A((e,t)=>{const r=t.id;g(e=>e.map(e=>e.source===r||e.target===r?{...e,animated:!0,style:{...e.style,strokeWidth:2.5},labelStyle:{...e.labelStyle,opacity:1},labelBgStyle:{...e.labelBgStyle,opacity:1}}:{...e,style:{...e.style,opacity:ke},labelStyle:{...e.labelStyle,opacity:ke},labelBgStyle:{...e.labelBgStyle,opacity:ke}}))},[g]),G=A(()=>{g(k.current)},[g]);return O(()=>{let e=!1;const t=(e=>{const t=new Map,r=new Set,i=(e,r,i=!1)=>{let n=t.get(e);return n||(n={serviceName:r,isVirtual:i,attributes:{},connectionMap:new Map},t.set(e,n)),n},n=(e,t)=>{if(t)for(const{key:r,value:i}of t)r in e||(e[r]=i)};for(const t of e){const{graphKey:e}=se(t.nodeId),o=i(e,t.serviceName);o.isVirtual=!1;for(const e of t.services){const{graphKey:t,detail:a}=se(e?.nodeId??"");e.isVirtual&&(r.add(t),n(i(t,e.serviceName,!0).attributes,e.nodeAttributes));let s=o.connectionMap.get(t);if(s||(s={targetGraphKey:t,targetServiceName:e.serviceName,totalRequests:0,lastDateTime:e.dateTime,details:[]},o.connectionMap.set(t,s)),s.totalRequests+=e.requests,e.dateTime>s.lastDateTime&&(s.lastDateTime=e.dateTime),a){const t=s.details.find(e=>e.value===a);t?(t.requests+=e.requests,e.dateTime>t.dateTime&&(t.dateTime=e.dateTime)):s.details.push({value:a,requests:e.requests,dateTime:e.dateTime})}}}const o=[...t.entries()];for(const[,{connectionMap:e}]of o)for(const[n,o]of e)t.has(n)||i(n,o.targetServiceName,r.has(n));const a=[];for(const[e,{serviceName:r,isVirtual:i,attributes:n,connectionMap:o}]of t){const t=[...o.values()];t.sort((e,t)=>e.targetGraphKey.localeCompare(t.targetGraphKey)),a.push({graphKey:e,serviceName:r,isVirtual:i,connections:t,attributes:n})}return a.sort((e,t)=>e.graphKey.localeCompare(t.graphKey)),a})(i);S.current=t;const r=(({sources:e,aggregatedServiceMap:t})=>{const r=[],i={x:0,y:0};if(t.length&&e.length)for(const n of t){const t=ie(n.graphKey),o=e.find(e=>n.serviceName===e.serviceName||n.serviceName===e.id.name);r.push({id:t,type:x.MapItem,position:i,data:ne(n,o,oe(o)),measured:{width:80,height:80}})}else r.push({id:`${w.Source}-${x.NoData}`,type:x.NoData,position:i,data:{subTitle:b.ARE_SERVICES_INSTRUMENTED_AND_PRODUCING_TRAFFIC}});return r})({aggregatedServiceMap:t,sources:[we].concat(s)});if(1===r.length&&r[0].id===`${w.Source}-${x.NoData}`)return d(r),g([]),void(k.current=[]);const n=new Set(v.current.map(e=>e.id)),o=new Set(r.map(e=>e.id)),a=r.some(e=>!n.has(e.id)),c=v.current.some(e=>!o.has(e.id));if(!(a||c)){const e=new Map(v.current.map(e=>[e.id,e.position]));d(r.map(t=>({...t,position:e.get(t.id)??t.position})));const i=ae({theme:N.current,nodes:r,aggregatedServiceMap:t});return k.current=i,void g(i)}return(async(e,t,r={})=>{const i={id:"root",layoutOptions:{...le,...r},children:e.map(e=>({id:e.id,width:80,height:80,...e.id===de?{layoutOptions:{"elk.layered.layering.layerConstraint":"FIRST","elk.alignment":"CENTER"}}:{}})),edges:t.map(e=>({id:e.id,sources:[e.source],targets:[e.target]}))},n=await ce.layout(i),o=new Map;return n.children?.forEach(e=>{o.set(e.id,{x:e.x??0,y:e.y??0})}),{nodes:e.map(e=>({...e,position:o.get(e.id)??e.position})),edges:t}})(r,ae({theme:N.current,nodes:r,aggregatedServiceMap:t})).then(({nodes:t})=>{if(e)return;d(t);const r=ae({theme:N.current,nodes:t,aggregatedServiceMap:S.current});k.current=r,g(r),T()}),()=>{e=!0}},[i,s]),O(()=>{if(!v.current.length)return;const e=ae({theme:a,nodes:v.current,aggregatedServiceMap:S.current});k.current=e,g(e)},[a]),e(be,{$heightToRemove:r,children:[t(L,{nodes:c,edges:p,onNodesChange:l,onEdgesChange:h,onEdgeClick:E,onNodeMouseEnter:R,onNodeMouseLeave:G,onRefresh:o,fitViewTrigger:u,zoomOnScroll:!0}),t(xe,{drawerState:y,aggregatedData:S.current,onClose:I})]})},$e=i.div`
84
84
  position: fixed;
85
85
  bottom: 12px;
86
86
  left: 12px;
@@ -89,4 +89,4 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import i,{useThe
89
89
  flex-direction: column-reverse;
90
90
  gap: 6px;
91
91
  max-width: 600px;
92
- `,ze=()=>{const{notifications:e,markAsDismissed:r,markAsSeen:i}=o(),{onClickNotification:n}=u();return t(Me,{children:e.filter(({dismissed:e})=>!e).map(({id:e,type:o,title:a,message:s,crdType:c,target:d})=>t(I,{id:e,type:o,title:a,message:s,action:c&&d?{label:"go to details",onClick:()=>n({id:e,crdType:c,target:d},{dismissToast:!0})}:void 0,onClose:()=>(({id:e,asSeen:t})=>{r(e),i(e)})({id:e,asSeen:!0})},`toast-${e}`))})};export{Z as NotificationManager,Ce as ServiceMap,ze as ToastList};
92
+ `,Ke=()=>{const{notifications:e,markAsDismissed:r,markAsSeen:i}=o(),{onClickNotification:n}=h();return t($e,{children:e.filter(({dismissed:e})=>!e).map(({id:e,type:o,title:a,message:s,crdType:c,target:d})=>t(M,{id:e,type:o,title:a,message:s,action:c&&d?{label:"go to details",onClick:()=>n({id:e,crdType:c,target:d},{dismissToast:!0})}:void 0,onClose:()=>(({id:e,asSeen:t})=>{r(e),i(e)})({id:e,asSeen:!0})},`toast-${e}`))})};export{J as NotificationManager,Te as ServiceMap,Ke as ToastList};
@@ -10,7 +10,6 @@ interface ActionFormContextValue {
10
10
  errorMessage?: string;
11
11
  preparedFormData: ActionFormData;
12
12
  };
13
- errorMessage?: string;
14
13
  }
15
14
  export declare const ActionFormContextProvider: FC<{
16
15
  children: ReactNode;
@@ -18,7 +18,6 @@ interface DestinationFormContextType {
18
18
  onChangeActiveForm: (payload: Omit<ActiveForm, 'dynamicFields'> | null) => void;
19
19
  loadDestination: (destination: Destination, categories: DestinationCategories) => void;
20
20
  genericForm?: GenericFormResult<DestinationFormData>;
21
- formErrorMessage?: string;
22
21
  validateFormData: () => {
23
22
  errorMessage?: string;
24
23
  preparedFormData: DestinationFormData;
@@ -4,5 +4,6 @@ export * from './destination-form-context';
4
4
  export * from './odigos-context';
5
5
  export * from './rule-form-context';
6
6
  export * from './sampling-rules-form-context';
7
+ export * from './source-edit-form-context';
7
8
  export * from './source-instrument-form-context';
8
9
  export * from './storybook-context';
@@ -10,7 +10,6 @@ interface RuleFormContextValue {
10
10
  errorMessage?: string;
11
11
  preparedFormData: InstrumentationRuleFormData;
12
12
  };
13
- errorMessage?: string;
14
13
  }
15
14
  export declare const RuleFormContextProvider: FC<{
16
15
  children: ReactNode;
@@ -0,0 +1,17 @@
1
+ import { type FC, type ReactNode } from 'react';
2
+ import { type SourceFormData, type Workload } from '@/types';
3
+ import { type GenericFormResult } from '@/hooks/useGenericForm';
4
+ interface SourceEditFormContextValue {
5
+ loadSource: (source: Workload) => void;
6
+ genericForm?: GenericFormResult<SourceFormData>;
7
+ validateFormData: () => {
8
+ errorMessage?: string;
9
+ preparedFormData: SourceFormData;
10
+ };
11
+ errorMessage?: string;
12
+ }
13
+ export declare const SourceEditFormContextProvider: FC<{
14
+ children: ReactNode;
15
+ }>;
16
+ export declare const useSourceEditFormContext: () => SourceEditFormContextValue;
17
+ export {};
package/lib/contexts.js CHANGED
@@ -1 +1 @@
1
- export{dq as ActionFormContextProvider,dR as DataStreamFormContextProvider,dp as DestinationFormContextProvider,gJ as OdigosProvider,dr as RuleFormContextProvider,b1 as SamplingRuleFormType,bO as SamplingRulesFormProvider,dn as SourceInstrumentFormContextProvider,gK as StorybookProvider,dl as checkVersionSupport,aG as useActionFormContext,a_ as useDataStreamFormContext,aK as useDestinationFormContext,ak as useOdigos,aX as useRuleFormContext,b0 as useSamplingRulesFormContext,bv as useSourceInstrumentFormContext,gL as useStorybook}from"./chunks/ui-components-rpRyPe3l.js";import"react/jsx-runtime";import"styled-components";import"./icons.js";import"zustand";import"react";import"javascript-time-ago";import"./chunks/vendor-C150cdxb.js";import"@xyflow/react";import"react-dom";import"prism-react-renderer";import"react-error-boundary";import"virtua";
1
+ export{A as ActionFormContextProvider,D as DataStreamFormContextProvider,a as DestinationFormContextProvider,R as RuleFormContextProvider,S as SamplingRuleFormType,b as SamplingRulesFormProvider,c as SourceEditFormContextProvider,d as SourceInstrumentFormContextProvider,u as useActionFormContext,e as useDataStreamFormContext,f as useDestinationFormContext,g as useRuleFormContext,h as useSamplingRulesFormContext,i as useSourceEditFormContext,j as useSourceInstrumentFormContext}from"./chunks/source-instrument-form-context-CEgbaSRi.js";export{O as OdigosProvider,c as checkVersionSupport,u as useOdigos}from"./chunks/helpers-D-6cJlOn.js";import{jsx as r}from"react/jsx-runtime";import{useMemo as o,useContext as t,createContext as s}from"react";import"./chunks/ui-components-B0BVzW_z.js";import"styled-components";import"./icons.js";import"zustand";import"javascript-time-ago";import"./chunks/vendor-Be0cOokr.js";import"prism-react-renderer";import"react-error-boundary";import"react-dom";import"virtua";const m=s({formType:void 0}),n=({children:e,formType:t})=>{const s=o(()=>({formType:t}),[t]);return r(m.Provider,{value:s,children:e})},p=()=>t(m);export{n as StorybookProvider,p as useStorybook};
@@ -1,3 +1,3 @@
1
1
  import type { FiltersState } from '@/store';
2
- import { type Source } from '@/types';
3
- export declare const filterSources: (sources: Source[], filters: FiltersState) => Source[];
2
+ import { type Workload } from '@/types';
3
+ export declare const filterSources: (sources: Workload[], filters: FiltersState) => Workload[];
@@ -1,2 +1,2 @@
1
- import type { Source } from '@/types';
2
- export declare const filterSourcesByStream: (sources: Source[], streamName: string) => Source[];
1
+ import type { Workload } from '@/types';
2
+ export declare const filterSourcesByStream: (sources: Workload[], streamName: string) => Workload[];
@@ -1,5 +1,5 @@
1
- import { StatusType, type Condition } from '@/types';
2
- export declare const getConditionsBooleans: (conditions: Condition[]) => {
1
+ import { StatusType, type Condition, K8sWorkloadConditions } from '@/types';
2
+ interface ConditionsBooleans {
3
3
  errors: Condition[];
4
4
  hasErrors: boolean;
5
5
  warnings: Condition[];
@@ -9,4 +9,6 @@ export declare const getConditionsBooleans: (conditions: Condition[]) => {
9
9
  loadings: Condition[];
10
10
  hasLoadings: boolean;
11
11
  priorotizedStatus: StatusType | undefined;
12
- };
12
+ }
13
+ export declare const getConditionsBooleans: (conditions?: Condition[] | K8sWorkloadConditions | null) => ConditionsBooleans;
14
+ export {};
@@ -1,2 +1,2 @@
1
- import type { Source } from '@/types';
2
- export declare const getContainersInstrumentedCount: (containers: Source["containers"]) => string;
1
+ import type { Workload } from '@/types';
2
+ export declare const getContainersInstrumentedCount: (containers: Workload["containers"]) => string;
@@ -1,4 +1,6 @@
1
- import type { ProgrammingLanguages, Source, SVG } from '@/types';
2
- export declare const getContainersIcons: (containers: Source["containers"]) => SVG[];
1
+ import { ProgrammingLanguages, type Workload, type SVG } from '@/types';
2
+ export declare const getEffectiveLanguage: (container?: NonNullable<Workload["containers"]>[number]) => ProgrammingLanguages;
3
+ export declare const getEffectiveRuntimeVersion: (container?: NonNullable<Workload["containers"]>[number]) => string | null;
4
+ export declare const getContainersIcons: (containers: Workload["containers"]) => SVG[];
3
5
  export declare const getDetectedLanguageIcons: (languages: ProgrammingLanguages[] | null | undefined) => SVG[];
4
- export declare const getSourceLanguageIcons: (source: Pick<Source, "detectedLanguages" | "containers">) => SVG[];
6
+ export declare const getSourceLanguageIcons: (source: Pick<Workload, "runtimeInfo" | "containers">) => SVG[];
@@ -1,4 +1,8 @@
1
- import type { AnyObj, WorkloadId } from '@/types';
2
- export declare const getEntityId: (item: AnyObj) => string | WorkloadId | undefined;
3
- export declare const entityIdKey: (id: string | WorkloadId | undefined) => string;
4
- export declare const getEntityIdKey: (item: AnyObj) => string;
1
+ import type { Action, Destination, InstrumentationRule, Metric, Namespace, Workload, WorkloadId } from '@/types';
2
+ type Entity = Namespace | Workload | Destination | Action | InstrumentationRule | (Metric & WorkloadId) | (Metric & {
3
+ id: string;
4
+ });
5
+ export declare const getEntityId: (item: Entity) => string | WorkloadId | undefined;
6
+ export declare const entityIdKey: (id?: string | WorkloadId) => string;
7
+ export declare const getEntityIdKey: (item: Entity) => string;
8
+ export {};
@@ -1,2 +1,2 @@
1
- import { ProgrammingLanguages, type Source } from '@/types';
2
- export declare const getMainContainerLanguage: (source: Source) => ProgrammingLanguages;
1
+ import { ProgrammingLanguages, type Workload } from '@/types';
2
+ export declare const getMainContainerLanguage: (source: Workload) => ProgrammingLanguages;
@@ -1,2 +1,2 @@
1
1
  import type { AggregatedService, SVG } from '@/types';
2
- export declare const getVirtualServiceIcon: (aggService: AggregatedService) => SVG;
2
+ export declare const getVirtualServiceIcon: (aggService: Pick<AggregatedService, "serviceName" | "attributes">) => SVG;
@@ -1,2 +1,2 @@
1
- import type { Source, WorkloadId } from '@/types';
2
- export declare const getWorkloadId: ({ namespace, name, kind }: Source) => WorkloadId;
1
+ import type { Workload, WorkloadId } from '@/types';
2
+ export declare const getWorkloadId: (w?: WorkloadId | Workload) => WorkloadId;
@@ -42,10 +42,12 @@ export * from './has-unhealthy-instances';
42
42
  export * from './is-emtpy';
43
43
  export * from './is-legal-k8s-label';
44
44
  export * from './is-over-time';
45
+ export * from './is-pod-injected-with-agent';
45
46
  export * from './is-string-a-boolean';
46
47
  export * from './is-time-elapsed';
47
48
  export * from './is-valid-version';
48
49
  export * from './map-conditions';
50
+ export * from './map-desired-status-to-condition-status';
49
51
  export * from './map-destination-fields-for-display';
50
52
  export * from './map-signals';
51
53
  export * from './decimals-only';
@@ -0,0 +1,4 @@
1
+ import type { K8sWorkloadPod } from '@/types/workload';
2
+ export declare const EBPF_DOES_NOT_NEED_AGENT_INJECT = "PodManifestInjectionOptional";
3
+ export declare const AGENT_NOT_INJECTED_AS_EXPECTED = "AgentNotInjectedAsExpected";
4
+ export declare const isPodInjectedWithAgent: (pod: Pick<K8sWorkloadPod, "agentInjected" | "agentInjectedStatus">) => boolean;
@@ -0,0 +1,2 @@
1
+ import { DesiredStateProgress, OtherStatus, StatusType } from '@/types';
2
+ export declare const mapDesiredStatusToConditionStatus: (status?: DesiredStateProgress | null) => StatusType | OtherStatus;
package/lib/functions.js CHANGED
@@ -1 +1 @@
1
- export{fT as capitalizeFirstLetter,fU as cleanObjectEmptyStringsValues,aJ as compareCondition,fV as decimalsOnly,a0 as deepClone,dK as entityIdKey,dP as filterActions,dO as filterDestinations,bF as filterDestinationsByStream,dN as filterSources,am as filterSourcesByStream,fW as flattenObjectKeys,dL as formatBytes,fX as formatDuration,g as generateId,bC as getActionIcon,q as getConditionsBooleans,at as getContainersIcons,fY as getContainersInstrumentedCount,fZ as getDeepValue,bk as getDestinationIcon,f_ as getDetectedLanguageIcons,dB as getEntityIcon,bz as getEntityId,dH as getEntityIdKey,dA as getEntityLabel,f$ as getIdFromSseTarget,bJ as getInstrumentationRuleIcon,g0 as getMainContainerLanguage,g1 as getMetricForEntity,g2 as getMonitorIcon,g3 as getPlatformIcon,g4 as getPlatformLabel,aZ as getProgrammingLanguageIcon,g5 as getRecursiveValues,p as getSourceLanguageIcons,g6 as getSseTargetFromId,g7 as getStatusColor,dV as getStatusFromPodStatus,l as getStatusIcon,U as getStatusTypeFromOdigosHealth,g8 as getValueForRange,o as getVirtualServiceIcon,ao as getWorkloadId,bG as getYamlFieldsForDestination,W as hasUnhealthyInstances,aA as isEmpty,g9 as isLegalK8sLabel,c0 as isOverTime,a1 as isStringABoolean,ga as isTimeElapsed,gb as isValidVersion,gc as mapConditions,bE as mapDestinationFieldsForDisplay,aN as mapExportedSignals,aO as mapSupportedSignals,gd as numbersOnly,a2 as parseBooleanFromString,ge as parseJsonStringToPrettyString,aP as prepareDestinationFormData,gf as removeEmptyValuesFromObject,bl as safeJsonParse,gg as safeJsonStringify,gh as setDeepValue,gi as sleep,O as splitCamelString,gj as stringifyNonStringValues,gk as trimVersion}from"./chunks/ui-components-rpRyPe3l.js";import"react/jsx-runtime";import"styled-components";import"./icons.js";import"zustand";import"react";import"javascript-time-ago";import"./chunks/vendor-C150cdxb.js";import"@xyflow/react";import"react-dom";import"prism-react-renderer";import"react-error-boundary";import"virtua";
1
+ export{f4 as AGENT_NOT_INJECTED_AS_EXPECTED,f5 as EBPF_DOES_NOT_NEED_AGENT_INJECT,f6 as capitalizeFirstLetter,f7 as cleanObjectEmptyStringsValues,af as compareCondition,f8 as decimalsOnly,w as deepClone,di as entityIdKey,dm as filterActions,dl as filterDestinations,aV as filterDestinationsByStream,dk as filterSources,d6 as filterSourcesByStream,f9 as flattenObjectKeys,bd as formatBytes,fa as formatDuration,bO as generateId,aT as getActionIcon,n as getConditionsBooleans,br as getContainersIcons,fb as getContainersInstrumentedCount,fc as getDeepValue,aG as getDestinationIcon,fd as getDetectedLanguageIcons,b4 as getEffectiveLanguage,bm as getEffectiveRuntimeVersion,dc as getEntityIcon,aO as getEntityId,dg as getEntityIdKey,db as getEntityLabel,fe as getIdFromSseTarget,aZ as getInstrumentationRuleIcon,ff as getMainContainerLanguage,fg as getMetricForEntity,fh as getMonitorIcon,fi as getPlatformIcon,fj as getPlatformLabel,ao as getProgrammingLanguageIcon,fk as getRecursiveValues,m as getSourceLanguageIcons,fl as getSseTargetFromId,fm as getStatusColor,ds as getStatusFromPodStatus,j as getStatusIcon,bf as getStatusTypeFromOdigosHealth,fn as getValueForRange,l as getVirtualServiceIcon,bb as getWorkloadId,aW as getYamlFieldsForDestination,fo as hasUnhealthyInstances,G as isEmpty,J as isLegalK8sLabel,bK as isOverTime,a_ as isPodInjectedWithAgent,fp as isStringABoolean,fq as isTimeElapsed,bl as isValidVersion,fr as mapConditions,a$ as mapDesiredStatusToConditionStatus,aU as mapDestinationFieldsForDisplay,Q as mapExportedSignals,L as mapSupportedSignals,fs as numbersOnly,ft as parseBooleanFromString,fu as parseJsonStringToPrettyString,ah as prepareDestinationFormData,fv as removeEmptyValuesFromObject,O as safeJsonParse,fw as safeJsonStringify,fx as setDeepValue,fy as sleep,aX as splitCamelString,fz as stringifyNonStringValues,t as trimVersion}from"./chunks/ui-components-B0BVzW_z.js";import"react/jsx-runtime";import"styled-components";import"./icons.js";import"zustand";import"react";import"javascript-time-ago";import"./chunks/vendor-Be0cOokr.js";import"prism-react-renderer";import"react-error-boundary";import"react-dom";import"virtua";
@@ -14,5 +14,4 @@ export * from './useScrollTo';
14
14
  export * from './usePopup';
15
15
  export * from './useSessionStorage';
16
16
  export * from './useSourceFormData';
17
- export * from './useSourceSelectionFormData';
18
17
  export * from './useTimeAgo';
@@ -1,7 +1,7 @@
1
1
  import { type Action, type ActionFormData } from '@/types';
2
2
  export declare const useActionFormData: () => {
3
3
  formData: ActionFormData;
4
- formErrors: Partial<Record<"disabled" | "type" | "name" | "notes" | "signals" | "fields", string>>;
4
+ formErrors: Partial<Record<"type" | "disabled" | "name" | "notes" | "signals" | "fields", string>>;
5
5
  handleFormChange: (key?: string | undefined, val?: any, obj?: ActionFormData | undefined) => void;
6
6
  resetFormData: (overrideForm?: ActionFormData | undefined) => void;
7
7
  validateForm: (params?: {
@@ -1,9 +1,9 @@
1
- import { type Source, type SourceFormData } from '@/types';
1
+ import { type Workload, type SourceFormData } from '@/types';
2
2
  export declare const useSourceFormData: () => {
3
3
  formData: SourceFormData;
4
4
  formErrors: Partial<Record<keyof SourceFormData, string>>;
5
5
  handleFormChange: (key?: string | undefined, val?: any, obj?: SourceFormData | undefined) => void;
6
6
  resetFormData: (overrideForm?: SourceFormData | undefined) => void;
7
7
  validateForm: () => boolean;
8
- loadFormWithDrawerItem: ({ otelServiceName, name }: Source) => void;
8
+ loadFormWithDrawerItem: ({ serviceName, id }: Workload) => void;
9
9
  };
@@ -1,4 +1,15 @@
1
1
  export type FormatTimeAgo = (wen: Date | number | string) => string;
2
+ export type DurationStyle = 'long' | 'short';
3
+ export interface FormatDurationAgoOptions {
4
+ /** Max number of units to include in the output. Defaults to 2. */
5
+ units?: number;
6
+ /** "long" => "4 hours 12 minutes", "short" => "4h12m". Defaults to "long". */
7
+ style?: DurationStyle;
8
+ /** Append " ago" suffix (long style only). Defaults to true. */
9
+ suffix?: boolean;
10
+ }
11
+ export type FormatDurationAgo = (wen: Date | number | string, opts?: FormatDurationAgoOptions) => string;
2
12
  export declare const useTimeAgo: () => {
3
13
  formatTimeAgo: FormatTimeAgo;
14
+ formatDurationAgo: FormatDurationAgo;
4
15
  };
package/lib/hooks.js CHANGED
@@ -1 +1 @@
1
- export{gC as IGNORE_OUTSIDE_CLICK_ATTR,gD as useActionFormData,gE as useBodyScroll,dz as useClickNode,h as useClickNotification,dM as useContainerSize,u as useCopy,gF as useDataStreamFormData,gG as useDestinationFormData,bD as useGenericForm,gH as useInstrumentationRuleFormData,z as useKeyDown,dw as useOnClickOutside,d as usePopup,ew as useScrollTo,dy as useSessionStorage,an as useSourceFormData,gI as useSourceSelectionFormData,f as useTimeAgo}from"./chunks/ui-components-rpRyPe3l.js";import"react/jsx-runtime";import"styled-components";import"./icons.js";import"zustand";import"react";import"javascript-time-ago";import"./chunks/vendor-C150cdxb.js";import"@xyflow/react";import"react-dom";import"prism-react-renderer";import"react-error-boundary";import"virtua";
1
+ export{fL as IGNORE_OUTSIDE_CLICK_ATTR,fM as useActionFormData,fN as useBodyScroll,da as useClickNode,g as useClickNotification,dj as useContainerSize,be as useCopy,fO as useDataStreamFormData,fP as useDestinationFormData,v as useGenericForm,fQ as useInstrumentationRuleFormData,bJ as useKeyDown,bi as useOnClickOutside,u as usePopup,dP as useScrollTo,d9 as useSessionStorage,fR as useSourceFormData,f as useTimeAgo}from"./chunks/ui-components-B0BVzW_z.js";import"react/jsx-runtime";import"styled-components";import"./icons.js";import"zustand";import"react";import"javascript-time-ago";import"./chunks/vendor-Be0cOokr.js";import"prism-react-renderer";import"react-error-boundary";import"react-dom";import"virtua";
@@ -3,3 +3,6 @@ export * from './odigos-logo-text';
3
3
  export * from './odigos-logo-text-central';
4
4
  export * from './odigos-logo-text-community';
5
5
  export * from './odigos-logo-text-enterprise';
6
+ export * from './odigos-logo-text-colored-central';
7
+ export * from './odigos-logo-text-colored-community';
8
+ export * from './odigos-logo-text-colored-enterprise';
@@ -0,0 +1,2 @@
1
+ import type { SVG } from '@/types';
2
+ export declare const OdigosLogoTextColoredCentral: SVG;
@@ -0,0 +1,2 @@
1
+ import type { SVG } from '@/types';
2
+ export declare const OdigosLogoTextColoredCommunity: SVG;
@@ -0,0 +1,2 @@
1
+ import type { SVG } from '@/types';
2
+ export declare const OdigosLogoTextColoredEnterprise: SVG;