@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.
- package/CHANGELOG.md +27 -0
- package/lib/chunks/helpers-D-6cJlOn.js +19 -0
- package/lib/chunks/index-RUJS9Blu.js +147 -0
- package/lib/chunks/source-instrument-form-context-CEgbaSRi.js +1 -0
- package/lib/chunks/ui-components-B0BVzW_z.js +1570 -0
- package/lib/chunks/{vendor-C150cdxb.js → vendor-Be0cOokr.js} +1 -1
- package/lib/components/_v2/button/index.d.ts +1 -1
- package/lib/components/_v2/cards/data-card/index.d.ts +6 -1
- package/lib/components/_v2/condition/index.d.ts +1 -0
- package/lib/components/_v2/drawer/header/index.d.ts +2 -0
- package/lib/components/_v2/drawer/index.d.ts +1 -1
- package/lib/components/_v2/drop-data/index.d.ts +3 -4
- package/lib/components/_v2/icon-group/index.d.ts +10 -0
- package/lib/components/_v2/index.d.ts +1 -0
- package/lib/components/_v2/input-table/types.d.ts +2 -0
- package/lib/components/_v2/tag/index.d.ts +10 -0
- package/lib/components/_v2/typography/index.d.ts +2 -0
- package/lib/components/index.d.ts +0 -22
- package/lib/components/v2.js +1 -1
- package/lib/components.js +1 -1
- package/lib/constants/sources/index.d.ts +10 -5
- package/lib/constants/strings/index.d.ts +92 -0
- package/lib/constants.js +1 -1
- package/lib/containers/_v2/_drawers/add-source-drawer/strings.d.ts +54 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/common/index.d.ts +1 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/common/pods-header.d.ts +8 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/helpers.d.ts +12 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/index.d.ts +19 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/containers-card/distro-override.d.ts +11 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/containers-card/index.d.ts +7 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/containers-card/popup-form.d.ts +15 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/containers-card/runtime-override.d.ts +10 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/health-card.d.ts +6 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/index.d.ts +11 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/main-card.d.ts +6 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/index.d.ts +6 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/pods-list/container-row.d.ts +9 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/pods-list/helpers.d.ts +19 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/pods-list/index.d.ts +12 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/pods-list/pod-row.d.ts +8 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/pods-list/process-row.d.ts +11 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/pods-list/row-header.d.ts +13 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/pods-card/pods-list/types.d.ts +18 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/overview/statuses-card.d.ts +9 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/peers/index.d.ts +11 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/pods/containers-card/index.d.ts +7 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/pods/containers-card/process-card.d.ts +5 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/pods/debug-commands.d.ts +6 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/pods/index.d.ts +7 -0
- package/lib/containers/_v2/_drawers/edit-source-drawer/pods/pod-card.d.ts +8 -0
- package/lib/containers/{source-drawer → _v2/_drawers/edit-source-drawer}/profiling/index.d.ts +2 -2
- package/lib/containers/_v2/_drawers/index.d.ts +1 -0
- package/lib/containers/_v2/_forms/edit-source-form/index.d.ts +2 -0
- package/lib/containers/_v2/_forms/index.d.ts +1 -0
- package/lib/containers/_v2/_modals/index.d.ts +1 -0
- package/lib/containers/_v2/_modals/onboarding-done/background.d.ts +5 -0
- package/lib/containers/_v2/_modals/onboarding-done/index.d.ts +3 -0
- package/lib/containers/_v2/overview/columns/column/index.d.ts +2 -2
- package/lib/containers/_v2/overview/columns/column/list-item.d.ts +2 -2
- package/lib/containers/_v2/overview/columns/column/source-visual-state.d.ts +3 -3
- package/lib/containers/_v2/overview/drawers/index.d.ts +2 -4
- package/lib/containers/_v2/overview/search/builder.d.ts +4 -4
- package/lib/containers/index.d.ts +0 -3
- package/lib/containers/service-map/helpers/build-map-nodes.d.ts +2 -2
- package/lib/containers/v2.js +269 -124
- package/lib/containers.js +19 -19
- package/lib/contexts/action-form-context.d.ts +0 -1
- package/lib/contexts/destination-form-context.d.ts +0 -1
- package/lib/contexts/index.d.ts +1 -0
- package/lib/contexts/rule-form-context.d.ts +0 -1
- package/lib/contexts/source-edit-form-context.d.ts +17 -0
- package/lib/contexts.js +1 -1
- package/lib/functions/filter-sources/index.d.ts +2 -2
- package/lib/functions/filter-sources-by-stream/index.d.ts +2 -2
- package/lib/functions/get-conditions-booleans/index.d.ts +5 -3
- package/lib/functions/get-containers-counts/index.d.ts +2 -2
- package/lib/functions/get-containers-icons/index.d.ts +5 -3
- package/lib/functions/get-entity-id/index.d.ts +8 -4
- package/lib/functions/get-main-container-language/index.d.ts +2 -2
- package/lib/functions/get-virtual-service-icon/index.d.ts +1 -1
- package/lib/functions/get-workload-id/index.d.ts +2 -2
- package/lib/functions/index.d.ts +2 -0
- package/lib/functions/is-pod-injected-with-agent/index.d.ts +4 -0
- package/lib/functions/map-desired-status-to-condition-status/index.d.ts +2 -0
- package/lib/functions.js +1 -1
- package/lib/hooks/index.d.ts +0 -1
- package/lib/hooks/useActionFormData.d.ts +1 -1
- package/lib/hooks/useSourceFormData.d.ts +2 -2
- package/lib/hooks/useTimeAgo.d.ts +11 -0
- package/lib/hooks.js +1 -1
- package/lib/icons/brand/index.d.ts +3 -0
- package/lib/icons/brand/odigos-logo-text-colored-central/index.d.ts +2 -0
- package/lib/icons/brand/odigos-logo-text-colored-community/index.d.ts +2 -0
- package/lib/icons/brand/odigos-logo-text-colored-enterprise/index.d.ts +2 -0
- package/lib/icons.js +1 -1
- package/lib/mock-data/index.d.ts +0 -1
- package/lib/mock-data/profiling/index.d.ts +1 -1
- package/lib/mock-data/service-map/index.d.ts +1 -1
- package/lib/mock-data/sources/index.d.ts +4 -7
- package/lib/snippets/_v2/delete-modal/index.d.ts +3 -0
- package/lib/snippets/_v2/dynamic-field/index.d.ts +2 -3
- package/lib/snippets/_v2/odigos-logo-text-by-tier/index.d.ts +2 -0
- package/lib/snippets/_v2/rich-title/index.d.ts +5 -0
- package/lib/snippets/_v2/wide-drawer/index.d.ts +7 -1
- package/lib/snippets/index.d.ts +0 -4
- package/lib/snippets/v2.js +1 -1
- package/lib/snippets.js +49 -1
- package/lib/store/useEntityStore.d.ts +2 -2
- package/lib/store/useFilterStore.d.ts +8 -14
- package/lib/store/useSelectedStore.d.ts +2 -2
- package/lib/store/useSetupStore.d.ts +10 -15
- package/lib/store.js +1 -1
- package/lib/theme.js +1 -1
- package/lib/types/common/index.d.ts +28 -0
- package/lib/types/destinations/index.d.ts +3 -3
- package/lib/types/namespaces/index.d.ts +3 -3
- package/lib/types/service-map/index.d.ts +2 -2
- package/lib/types/sources/index.d.ts +4 -41
- package/lib/types/workload/index.d.ts +145 -3
- package/lib/types.js +1 -1
- package/lib/visuals.js +1 -1
- package/package.json +1 -1
- package/lib/chunks/index-CCaTS6aq.js +0 -145
- package/lib/chunks/index-ChkHWnzu.js +0 -77
- package/lib/chunks/index-D6SlbWIi.js +0 -3
- package/lib/chunks/ui-components-rpRyPe3l.js +0 -2235
- package/lib/components/badge/index.d.ts +0 -11
- package/lib/components/button/index.d.ts +0 -6
- package/lib/components/cancel-warning/index.d.ts +0 -10
- package/lib/components/checkbox/index.d.ts +0 -15
- package/lib/components/condition-details/index.d.ts +0 -10
- package/lib/components/data-card/data-card-fields/index.d.ts +0 -23
- package/lib/components/data-card/index.d.ts +0 -17
- package/lib/components/data-tab/index.d.ts +0 -43
- package/lib/components/delete-warning/index.d.ts +0 -13
- package/lib/components/describe-row/index.d.ts +0 -13
- package/lib/components/drawer/drawer-footer/index.d.ts +0 -16
- package/lib/components/drawer/drawer-header/index.d.ts +0 -24
- package/lib/components/drawer/index.d.ts +0 -15
- package/lib/components/dropdown/index.d.ts +0 -25
- package/lib/components/extend-arrow/index.d.ts +0 -8
- package/lib/components/field-error/index.d.ts +0 -4
- package/lib/components/field-label/index.d.ts +0 -11
- package/lib/components/input/index.d.ts +0 -15
- package/lib/components/modal/index.d.ts +0 -14
- package/lib/components/monitors-icons/index.d.ts +0 -11
- package/lib/components/no-data-found/index.d.ts +0 -6
- package/lib/components/popup-form/index.d.ts +0 -18
- package/lib/components/status/index.d.ts +0 -17
- package/lib/components/tab-list/index.d.ts +0 -18
- package/lib/components/warning-modal/index.d.ts +0 -24
- package/lib/containers/overview-drawer/index.d.ts +0 -27
- package/lib/containers/source-drawer/build-card.d.ts +0 -3
- package/lib/containers/source-drawer/describe/index.d.ts +0 -13
- package/lib/containers/source-drawer/index.d.ts +0 -23
- package/lib/containers/source-drawer/libraries/index.d.ts +0 -12
- package/lib/containers/source-drawer/odigos-health/index.d.ts +0 -5
- package/lib/containers/source-drawer/peers/index.d.ts +0 -12
- package/lib/containers/source-form/index.d.ts +0 -8
- package/lib/hooks/useSourceSelectionFormData.d.ts +0 -32
- package/lib/mock-data/workload/index.d.ts +0 -2
- package/lib/snippets/add-button/index.d.ts +0 -9
- package/lib/snippets/copy-text/index.d.ts +0 -7
- package/lib/snippets/pod-container/index.d.ts +0 -5
- package/lib/snippets/source-container/index.d.ts +0 -7
- package/lib/snippets/source-container/override-runtime.d.ts +0 -10
- /package/lib/containers/{source-drawer → _v2/_drawers/edit-source-drawer}/profiling/flame-graph-canvas.d.ts +0 -0
- /package/lib/containers/{source-drawer → _v2/_drawers/edit-source-drawer}/profiling/flamebearer.d.ts +0 -0
- /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{
|
|
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
|
-
`,
|
|
4
|
+
`,W=i(y)`
|
|
5
5
|
gap: 12px;
|
|
6
6
|
padding: 0 12px;
|
|
7
|
-
`,
|
|
7
|
+
`,H=i(p)`
|
|
8
8
|
gap: 12px;
|
|
9
9
|
max-height: 400px;
|
|
10
10
|
overflow-y: auto;
|
|
11
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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+
|
|
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
|
-
`,
|
|
41
|
-
background-color: ${({$type:e,theme:t})=>t.text[e]+
|
|
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
|
-
`,
|
|
48
|
+
`,Z=i.div`
|
|
49
49
|
width: 290px;
|
|
50
|
-
`,
|
|
50
|
+
`,ee=i.div`
|
|
51
51
|
margin-bottom: 6px;
|
|
52
|
-
`,
|
|
52
|
+
`,te=i.div`
|
|
53
53
|
display: flex;
|
|
54
54
|
align-items: center;
|
|
55
55
|
gap: 6px;
|
|
56
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
77
|
+
`,ue=i.div`
|
|
78
78
|
padding: 4px 0 8px;
|
|
79
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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};
|
|
@@ -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;
|
package/lib/contexts/index.d.ts
CHANGED
|
@@ -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';
|
|
@@ -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{
|
|
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
|
|
3
|
-
export declare const filterSources: (sources:
|
|
2
|
+
import { type Workload } from '@/types';
|
|
3
|
+
export declare const filterSources: (sources: Workload[], filters: FiltersState) => Workload[];
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const filterSourcesByStream: (sources:
|
|
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
|
-
|
|
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 {
|
|
2
|
-
export declare const getContainersInstrumentedCount: (containers:
|
|
1
|
+
import type { Workload } from '@/types';
|
|
2
|
+
export declare const getContainersInstrumentedCount: (containers: Workload["containers"]) => string;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
export declare const
|
|
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<
|
|
6
|
+
export declare const getSourceLanguageIcons: (source: Pick<Workload, "runtimeInfo" | "containers">) => SVG[];
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
|
2
|
-
export declare const getMainContainerLanguage: (source:
|
|
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 {
|
|
2
|
-
export declare const getWorkloadId: (
|
|
1
|
+
import type { Workload, WorkloadId } from '@/types';
|
|
2
|
+
export declare const getWorkloadId: (w?: WorkloadId | Workload) => WorkloadId;
|
package/lib/functions/index.d.ts
CHANGED
|
@@ -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;
|
package/lib/functions.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{
|
|
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";
|
package/lib/hooks/index.d.ts
CHANGED
|
@@ -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<"
|
|
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
|
|
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: ({
|
|
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{
|
|
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';
|