@odigos/ui-kit 0.0.244 → 0.0.245

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 (35) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/lib/chunks/{helpers-aJJ1GhqS.js → helpers-D-CznSVG.js} +1 -1
  3. package/lib/chunks/{index-BnOPIhIp.js → index-CA2MiIDy.js} +17 -17
  4. package/lib/chunks/source-instrument-form-context-C002ZZ9a.js +1 -0
  5. package/lib/chunks/ui-components-CFTFbtTq.js +1614 -0
  6. package/lib/components/_v2/input-table/dynamic-field/index.d.ts +1 -0
  7. package/lib/components/_v2/input-table/types.d.ts +2 -1
  8. package/lib/components/_v2/typography/index.d.ts +8 -0
  9. package/lib/components/_v2/typography-truncatable/index.d.ts +18 -10
  10. package/lib/components/v2.js +1 -1
  11. package/lib/components.js +1 -1
  12. package/lib/constants/index.d.ts +1 -0
  13. package/lib/constants/regex.d.ts +40 -0
  14. package/lib/constants.js +1 -1
  15. package/lib/containers/_v2/_drawers/index.d.ts +1 -0
  16. package/lib/containers/_v2/_drawers/regex-tester-drawer/highlighter.d.ts +20 -0
  17. package/lib/containers/_v2/_drawers/regex-tester-drawer/index.d.ts +13 -0
  18. package/lib/containers/_v2/_forms/add-action-form/custom-fields/extract-attribute/index.d.ts +5 -0
  19. package/lib/containers/v2.js +237 -121
  20. package/lib/containers.js +1 -1
  21. package/lib/contexts.js +1 -1
  22. package/lib/functions.js +1 -1
  23. package/lib/hooks/index.d.ts +1 -0
  24. package/lib/hooks/useOverflow.d.ts +26 -0
  25. package/lib/hooks.js +1 -1
  26. package/lib/snippets/v2.js +1 -1
  27. package/lib/snippets.js +2 -2
  28. package/lib/store.js +1 -1
  29. package/lib/theme.js +1 -1
  30. package/lib/types/actions/index.d.ts +16 -2
  31. package/lib/types.js +1 -1
  32. package/lib/visuals.js +1 -1
  33. package/package.json +1 -1
  34. package/lib/chunks/source-instrument-form-context-5GXsAhJd.js +0 -1
  35. package/lib/chunks/ui-components-Dnqp-MQm.js +0 -1592
package/lib/containers.js CHANGED
@@ -1,4 +1,4 @@
1
- import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{useState as n,useRef as i,useCallback as a,useEffect as o}from"react";import{MarkerType as s,useNodesState as c,useEdgesState as d}from"@xyflow/react";import{N as l,D as p,E as u,g,d as h,e as m,S as y,f,h as v,i as x,F as S,j as N,k as b,l as K,m as T,n as w}from"./chunks/ui-components-Dnqp-MQm.js";import{UserIcon as k,ImageErrorIcon as M,ChevronDownIcon as $,ChevronRightIcon as C}from"./icons.js";import I,{useTheme as z}from"styled-components";import{E}from"./chunks/vendor-Be0cOokr.js";import{Flow as G}from"./snippets.js";import"zustand";import"javascript-time-ago";import"prism-react-renderer";import"react-error-boundary";import"react-dom";import"virtua";const R=e=>`${u.Source}-${e}-${l.MapItem}`,V=(e,t,r)=>{const n=e.isVirtual,i=r?[k]:n?[g(e)]:t?h(t):[M],{priorotizedStatus:a}=n?{priorotizedStatus:void 0}:m(t?.conditions||[]);return{id:e.graphKey,title:e.serviceName,icons:i,isVirtual:n,status:a,aggService:e}},D=e=>!(!e||"user"!==e.serviceName||e.id.namespace||e.id.name||e.id.kind),A=({theme:e,nodes:t,aggregatedServiceMap:r})=>{const n=[],i=new Map(t.map(e=>[e.id,e]));for(const t of r){const r=R(t.graphKey),a=i.get(r);if(!a)continue;const o=a.data?.status===y.Error;for(const a of t.connections){const c=R(a.targetGraphKey);i.has(c)&&n.push({id:`${r}-to-${c}`,type:"smoothstep",source:r,target:c,data:{sourceGraphKey:t.graphKey,targetGraphKey:a.targetGraphKey},markerEnd:{type:s.ArrowClosed},style:{stroke:o?e?.colors.dark_red:e?.colors.border}})}}return n},j=e=>{const t=e.lastIndexOf("|");return-1===t?{graphKey:e,detail:""}:{graphKey:e.substring(0,t),detail:e.substring(t+1)}},O=new E,_=`${u.Source}-user-${l.MapItem}`,q={"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"},B=I.div`
1
+ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{useState as n,useRef as i,useCallback as a,useEffect as o}from"react";import{MarkerType as s,useNodesState as c,useEdgesState as d}from"@xyflow/react";import{N as l,D as p,E as u,g,d as h,e as m,S as y,f,h as v,i as x,F as S,j as N,k as b,l as K,m as T,n as w}from"./chunks/ui-components-CFTFbtTq.js";import{UserIcon as k,ImageErrorIcon as M,ChevronDownIcon as $,ChevronRightIcon as C}from"./icons.js";import I,{useTheme as z}from"styled-components";import{E}from"./chunks/vendor-Be0cOokr.js";import{Flow as G}from"./snippets.js";import"zustand";import"javascript-time-ago";import"prism-react-renderer";import"react-error-boundary";import"react-dom";import"virtua";const R=e=>`${u.Source}-${e}-${l.MapItem}`,V=(e,t,r)=>{const n=e.isVirtual,i=r?[k]:n?[g(e)]:t?h(t):[M],{priorotizedStatus:a}=n?{priorotizedStatus:void 0}:m(t?.conditions||[]);return{id:e.graphKey,title:e.serviceName,icons:i,isVirtual:n,status:a,aggService:e}},D=e=>!(!e||"user"!==e.serviceName||e.id.namespace||e.id.name||e.id.kind),A=({theme:e,nodes:t,aggregatedServiceMap:r})=>{const n=[],i=new Map(t.map(e=>[e.id,e]));for(const t of r){const r=R(t.graphKey),a=i.get(r);if(!a)continue;const o=a.data?.status===y.Error;for(const a of t.connections){const c=R(a.targetGraphKey);i.has(c)&&n.push({id:`${r}-to-${c}`,type:"smoothstep",source:r,target:c,data:{sourceGraphKey:t.graphKey,targetGraphKey:a.targetGraphKey},markerEnd:{type:s.ArrowClosed},style:{stroke:o?e?.colors.dark_red:e?.colors.border}})}}return n},j=e=>{const t=e.lastIndexOf("|");return-1===t?{graphKey:e,detail:""}:{graphKey:e.substring(0,t),detail:e.substring(t+1)}},O=new E,_=`${u.Source}-user-${l.MapItem}`,q={"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"},B=I.div`
2
2
  padding: 8px 0;
3
3
  `,F=I.div`
4
4
  display: flex;
package/lib/contexts.js CHANGED
@@ -1 +1 @@
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-5GXsAhJd.js";export{O as OdigosProvider,c as checkVersionSupport,u as useOdigos}from"./chunks/helpers-aJJ1GhqS.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-Dnqp-MQm.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
+ 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-C002ZZ9a.js";export{O as OdigosProvider,c as checkVersionSupport,u as useOdigos}from"./chunks/helpers-D-CznSVG.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-CFTFbtTq.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};
package/lib/functions.js CHANGED
@@ -1 +1 @@
1
- export{aV as buildBadgeForDesiredStatus,f2 as capitalizeFirstLetter,f3 as cleanObjectEmptyStringsValues,a8 as compareCondition,f4 as decimalsOnly,p as deepClone,dd as entityIdKey,dh as filterActions,dg as filterDestinations,aO as filterDestinationsByStream,df as filterSources,d1 as filterSourcesByStream,f5 as flattenObjectKeys,b8 as formatBytes,f6 as formatDuration,bJ as generateId,aM as getActionIcon,e as getConditionsBooleans,bm as getContainersIcons,f7 as getContainersInstrumentedCount,f8 as getDeepValue,az as getDestinationIcon,f9 as getDetectedLanguageIcons,a_ as getEffectiveLanguage,bg as getEffectiveRuntimeVersion,d7 as getEntityIcon,aH as getEntityId,dc as getEntityIdKey,d6 as getEntityLabel,ba as getHealthBadgeLabel,fa as getIdFromSseTarget,aS as getInstrumentationRuleIcon,fb as getMainContainerLanguage,fc as getMetricForEntity,fd as getMonitorIcon,fe as getPlatformIcon,ff as getPlatformLabel,ag as getProgrammingLanguageIcon,fg as getRecursiveValues,d as getSourceLanguageIcons,fh as getSseTargetFromId,fi as getStatusColor,dm as getStatusFromPodStatus,db as getStatusIcon,bb as getStatusTypeFromOdigosHealth,fj as getValueForRange,g as getVirtualServiceIcon,b6 as getWorkloadId,aP as getYamlFieldsForDestination,fk as hasUnhealthyInstances,s as isEmpty,x as isLegalK8sLabel,bF as isOverTime,fl as isStringABoolean,fm as isTimeElapsed,bf as isValidVersion,fn as mapConditions,aY as mapDesiredStatusToConditionStatus,aN as mapDestinationFieldsForDisplay,G as mapExportedSignals,z as mapSupportedSignals,fo as numbersOnly,fp as parseBooleanFromString,fq as parseJsonStringToPrettyString,a9 as prepareDestinationFormData,fr as removeEmptyValuesFromObject,C as safeJsonParse,fs as safeJsonStringify,ft as setDeepValue,fu as sleep,aQ as splitCamelString,fv as stringifyNonStringValues,t as trimVersion}from"./chunks/ui-components-Dnqp-MQm.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";
1
+ export{b1 as buildBadgeForDesiredStatus,f6 as capitalizeFirstLetter,f7 as cleanObjectEmptyStringsValues,ah as compareCondition,f8 as decimalsOnly,p as deepClone,di as entityIdKey,dm as filterActions,dl as filterDestinations,aW as filterDestinationsByStream,dk as filterSources,d7 as filterSourcesByStream,f9 as flattenObjectKeys,bg as formatBytes,fa as formatDuration,bR as generateId,aU as getActionIcon,e as getConditionsBooleans,bu as getContainersIcons,fb as getContainersInstrumentedCount,fc as getDeepValue,aH as getDestinationIcon,fd as getDetectedLanguageIcons,b6 as getEffectiveLanguage,bo as getEffectiveRuntimeVersion,dd as getEntityIcon,aP as getEntityId,dh as getEntityIdKey,dc as getEntityLabel,bi as getHealthBadgeLabel,fe as getIdFromSseTarget,a_ as getInstrumentationRuleIcon,ff as getMainContainerLanguage,fg as getMetricForEntity,fh as getMonitorIcon,fi as getPlatformIcon,fj as getPlatformLabel,ao as getProgrammingLanguageIcon,fk as getRecursiveValues,d as getSourceLanguageIcons,fl as getSseTargetFromId,fm as getStatusColor,ds as getStatusFromPodStatus,dg as getStatusIcon,bj as getStatusTypeFromOdigosHealth,fn as getValueForRange,g as getVirtualServiceIcon,be as getWorkloadId,aX as getYamlFieldsForDestination,fo as hasUnhealthyInstances,s as isEmpty,x as isLegalK8sLabel,bN as isOverTime,fp as isStringABoolean,fq as isTimeElapsed,bn as isValidVersion,fr as mapConditions,b4 as mapDesiredStatusToConditionStatus,aV as mapDestinationFieldsForDisplay,G as mapExportedSignals,z as mapSupportedSignals,fs as numbersOnly,ft as parseBooleanFromString,fu as parseJsonStringToPrettyString,ai as prepareDestinationFormData,fv as removeEmptyValuesFromObject,C as safeJsonParse,fw as safeJsonStringify,fx as setDeepValue,fy as sleep,aY as splitCamelString,fz as stringifyNonStringValues,t as trimVersion}from"./chunks/ui-components-CFTFbtTq.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";
@@ -10,6 +10,7 @@ export * from './useGenericForm';
10
10
  export * from './useInstrumentationRuleFormData';
11
11
  export * from './useKeyDown';
12
12
  export * from './useOnClickOutside';
13
+ export * from './useOverflow';
13
14
  export * from './useScrollIntoViewWhen';
14
15
  export * from './useScrollTo';
15
16
  export * from './usePopup';
@@ -0,0 +1,26 @@
1
+ import { type DependencyList, type RefObject } from 'react';
2
+ type OverflowAxis = 'horizontal' | 'vertical';
3
+ interface UseOverflowOptions {
4
+ /**
5
+ * Which axis to measure. `'horizontal'` checks `scrollWidth > clientWidth` (single-line
6
+ * ellipsis); `'vertical'` checks `scrollHeight > clientHeight` (multi-line `-webkit-line-clamp`).
7
+ * Defaults to `'horizontal'`.
8
+ */
9
+ axis?: OverflowAxis;
10
+ /**
11
+ * Re-measure whenever any of these change (e.g. the rendered text). Size changes are
12
+ * already covered by `ResizeObserver`, so only pass values that affect content, not layout.
13
+ */
14
+ deps?: DependencyList;
15
+ }
16
+ /**
17
+ * Reports whether the referenced element's content overflows along the given axis.
18
+ *
19
+ * - Reacts to size changes via `ResizeObserver`.
20
+ * - Re-checks after `document.fonts.ready` because custom fonts can shift text metrics
21
+ * between first paint and font-ready, leading to false negatives initially.
22
+ * - Uses a `+1` subpixel guard so rounding doesn't report overflow when there is no
23
+ * visual truncation.
24
+ */
25
+ export declare const useOverflow: <T extends HTMLElement>(ref: RefObject<T | null>, { axis, deps }?: UseOverflowOptions) => boolean;
26
+ export {};
package/lib/hooks.js CHANGED
@@ -1 +1 @@
1
- export{fG as IGNORE_OUTSIDE_CLICK_ATTR,fH as useActionFormData,fI as useBodyScroll,d5 as useClickNode,m as useClickNotification,de as useContainerSize,b9 as useCopy,fJ as useDataStreamFormData,fK as useDestinationFormData,o as useGenericForm,fL as useInstrumentationRuleFormData,bE as useKeyDown,bc as useOnClickOutside,u as usePopup,aU as useScrollIntoViewWhen,dK as useScrollTo,d4 as useSessionStorage,fM as useSourceFormData,aT as useTimeAgo}from"./chunks/ui-components-Dnqp-MQm.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";
1
+ export{fK as IGNORE_OUTSIDE_CLICK_ATTR,fL as useActionFormData,fM as useBodyScroll,db as useClickNode,m as useClickNotification,dj as useContainerSize,bh as useCopy,fN as useDataStreamFormData,fO as useDestinationFormData,o as useGenericForm,fP as useInstrumentationRuleFormData,bM as useKeyDown,bk as useOnClickOutside,fQ as useOverflow,u as usePopup,b0 as useScrollIntoViewWhen,dO as useScrollTo,da as useSessionStorage,fR as useSourceFormData,a$ as useTimeAgo}from"./chunks/ui-components-CFTFbtTq.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";
@@ -1 +1 @@
1
- export{b2 as ActionType,dl as Actions,dk as RichTitle}from"../chunks/ui-components-Dnqp-MQm.js";export{C as CancelModal,j as DURATION_OPTIONS,g as DeleteModal,e as DurationErrorsSection,D as DynamicField,N as NOISY_PERCENTAGE_OPTIONS,h as OdigosLogoTextByTier,O as OperationSection,a as PERCENTAGE_OPTIONS,f as PercentageSection,P as PresetWithCustomInput,R as RuleInfoSection,d as RuleTypeSection,b as SamplingPreviewSection,S as SignalsCheckboxList,c as SourceScopeSection,U as UpgradeModal,i as WIDE_DRAWER_WIDTH,W as WideDrawer,Y as YamlSectionCard}from"../chunks/index-BnOPIhIp.js";export{C as ColoredSpan,x as ColoredSpanVariant}from"../chunks/helpers-aJJ1GhqS.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";
1
+ export{ba as ActionType,dr as Actions,dq as RichTitle}from"../chunks/ui-components-CFTFbtTq.js";export{C as CancelModal,j as DURATION_OPTIONS,g as DeleteModal,e as DurationErrorsSection,D as DynamicField,N as NOISY_PERCENTAGE_OPTIONS,h as OdigosLogoTextByTier,O as OperationSection,a as PERCENTAGE_OPTIONS,f as PercentageSection,P as PresetWithCustomInput,R as RuleInfoSection,d as RuleTypeSection,b as SamplingPreviewSection,S as SignalsCheckboxList,c as SourceScopeSection,U as UpgradeModal,i as WIDE_DRAWER_WIDTH,W as WideDrawer,Y as YamlSectionCard}from"../chunks/index-CA2MiIDy.js";export{C as ColoredSpan,x as ColoredSpanVariant}from"../chunks/helpers-D-CznSVG.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/snippets.js CHANGED
@@ -1,4 +1,4 @@
1
- import{jsx as e,jsxs as o,Fragment as t}from"react/jsx-runtime";import{memo as r,useRef as i,useEffect as n}from"react";import"./chunks/vendor-Be0cOokr.js";import d,{useTheme as s}from"styled-components";import{a4 as a,R as l,eB as c,h as p,S as m,db as u,d5 as h,k as g,N as b}from"./chunks/ui-components-Dnqp-MQm.js";import{Handle as x,Position as f,ReactFlowProvider as v,ReactFlow as y,Controls as w,ControlButton as N,useReactFlow as k}from"@xyflow/react";import{RefreshIcon as $}from"./icons.js";import"javascript-time-ago";import"zustand";import"prism-react-renderer";import"react-error-boundary";import"react-dom";import"virtua";const C=d(l)`
1
+ import{jsx as e,jsxs as o,Fragment as t}from"react/jsx-runtime";import{memo as r,useRef as i,useEffect as n}from"react";import"./chunks/vendor-Be0cOokr.js";import d,{useTheme as s}from"styled-components";import{ac as a,R as l,eF as c,h as p,S as m,dg as u,db as h,k as g,N as b}from"./chunks/ui-components-CFTFbtTq.js";import{Handle as x,Position as f,ReactFlowProvider as v,ReactFlow as y,Controls as w,ControlButton as N,useReactFlow as k}from"@xyflow/react";import{RefreshIcon as $}from"./icons.js";import"javascript-time-ago";import"zustand";import"prism-react-renderer";import"react-error-boundary";import"react-dom";import"virtua";const C=d(l)`
2
2
  max-width: 300px;
3
3
  padding: 12px;
4
4
  border-radius: 12px;
@@ -46,4 +46,4 @@ import{jsx as e,jsxs as o,Fragment as t}from"react/jsx-runtime";import{memo as r
46
46
  transform: scale(1.4);
47
47
  }
48
48
  }
49
- `,B={[b.MapItem]:z,[b.NoData]:E},I=({trigger:e})=>{const{fitView:o}=k(),t=i(!0);return n(()=>{t.current?t.current=!1:e>0&&requestAnimationFrame(()=>o(M))},[e,o]),null},L=({nodes:t,edges:r,onNodesChange:i,onEdgesChange:n,fitViewTrigger:d=0,zoomOnScroll:s=!1,onEdgeClick:a,onNodeMouseEnter:l,onNodeMouseLeave:c,onRefresh:p})=>{const{onClickNode:m}=h(),{setActiveNodeType:u,setActiveNodeId:b}=g();return o(y,{zoomOnScroll:s,nodes:t,nodeTypes:B,edges:r,onNodeClick:m,onEdgeClick:a,onNodeMouseEnter:l,onNodeMouseLeave:c,onNodesChange:i,onEdgesChange:n,onBlur:()=>{u(null),b(null)},children:[e(I,{trigger:d}),e(A,{children:e(w,{position:"bottom-right",orientation:"horizontal",showInteractive:!1,showZoom:!0,showFitView:!0,fitViewOptions:M,children:p&&e(N,{onClick:p,children:e($,{size:20})})})})]})},O=o=>e(T,{children:e(v,{children:e(L,{...o})})});export{O as Flow,z as MapItemNode,E as NoDataNode};
49
+ `,F={[b.MapItem]:z,[b.NoData]:E},I=({trigger:e})=>{const{fitView:o}=k(),t=i(!0);return n(()=>{t.current?t.current=!1:e>0&&requestAnimationFrame(()=>o(M))},[e,o]),null},L=({nodes:t,edges:r,onNodesChange:i,onEdgesChange:n,fitViewTrigger:d=0,zoomOnScroll:s=!1,onEdgeClick:a,onNodeMouseEnter:l,onNodeMouseLeave:c,onRefresh:p})=>{const{onClickNode:m}=h(),{setActiveNodeType:u,setActiveNodeId:b}=g();return o(y,{zoomOnScroll:s,nodes:t,nodeTypes:F,edges:r,onNodeClick:m,onEdgeClick:a,onNodeMouseEnter:l,onNodeMouseLeave:c,onNodesChange:i,onEdgesChange:n,onBlur:()=>{u(null),b(null)},children:[e(I,{trigger:d}),e(A,{children:e(w,{position:"bottom-right",orientation:"horizontal",showInteractive:!1,showZoom:!0,showFitView:!0,fitViewOptions:M,children:p&&e(N,{onClick:p,children:e($,{size:20})})})})]})},O=o=>e(T,{children:e(v,{children:e(L,{...o})})});export{O as Flow,z as MapItemNode,E as NoDataNode};
package/lib/store.js CHANGED
@@ -1 +1 @@
1
- export{aE as ProgressKeys,k as useActiveNodeStore,fF as useDarkMode,w as useDataStreamStore,b5 as useDrawerStore,j as useEntityStore,d0 as useFilterStore,bK as useModalStore,l as useNotificationStore,aD as useProgressStore,d9 as useSelectedStore,di as useSetupStore}from"./chunks/ui-components-Dnqp-MQm.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";
1
+ export{aM as ProgressKeys,k as useActiveNodeStore,fJ as useDarkMode,w as useDataStreamStore,bd as useDrawerStore,j as useEntityStore,d6 as useFilterStore,bS as useModalStore,l as useNotificationStore,aL as useProgressStore,df as useSelectedStore,dn as useSetupStore}from"./chunks/ui-components-CFTFbtTq.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/theme.js CHANGED
@@ -1 +1 @@
1
- export{fN as Provider,fO as animations,fP as opacity,fQ as palettes}from"./chunks/ui-components-Dnqp-MQm.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";
1
+ export{fS as Provider,fT as animations,fU as opacity,fV as palettes}from"./chunks/ui-components-CFTFbtTq.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";
@@ -6,7 +6,8 @@ export declare enum ActionType {
6
6
  DeleteAttributes = "DeleteAttribute",
7
7
  RenameAttributes = "RenameAttribute",
8
8
  PiiMasking = "PiiMasking",
9
- URLTemplatization = "URLTemplatization"
9
+ URLTemplatization = "URLTemplatization",
10
+ ExtractAttribute = "ExtractAttribute"
10
11
  }
11
12
  export declare enum ActionKeyTypes {
12
13
  CollectContainerAttributes = "collectContainerAttributes",
@@ -20,7 +21,8 @@ export declare enum ActionKeyTypes {
20
21
  AttributeNamesToDelete = "attributeNamesToDelete",
21
22
  Renames = "renames",
22
23
  PiiCategories = "piiCategories",
23
- UrlTemplatizationRulesGroups = "urlTemplatizationRulesGroups"
24
+ UrlTemplatizationRulesGroups = "urlTemplatizationRulesGroups",
25
+ Extractions = "extractions"
24
26
  }
25
27
  export interface ActionOption {
26
28
  type?: ActionType;
@@ -64,6 +66,7 @@ export interface ActionFields {
64
66
  } | null;
65
67
  [ActionKeyTypes.PiiCategories]?: string[] | null;
66
68
  [ActionKeyTypes.UrlTemplatizationRulesGroups]?: UrlTemplatizationRulesGroup[] | null;
69
+ [ActionKeyTypes.Extractions]?: Extraction[] | null;
67
70
  }
68
71
  export declare enum K8sAttributesFrom {
69
72
  Pod = "pod",
@@ -166,6 +169,17 @@ export interface TemplatizationWorkloadFilter {
166
169
  kind?: WorkloadKind;
167
170
  name?: string;
168
171
  }
172
+ export declare enum ExtractionDataFormat {
173
+ JSON = "json",
174
+ SQL = "sql",
175
+ ResourcePath = "resource_path"
176
+ }
177
+ export interface Extraction {
178
+ targetAttributeName: string;
179
+ lookupKey?: string;
180
+ dataFormat?: ExtractionDataFormat | '';
181
+ regex?: string;
182
+ }
169
183
  export interface UrlTemplatizationRulesGroup {
170
184
  filterK8sNamespace?: string;
171
185
  /** @deprecated Use workloadFilters instead. Kept for backward compatibility with existing CRs. */
package/lib/types.js CHANGED
@@ -1 +1 @@
1
- export{q as ActionKeyTypes,r as ActionType,eC as AddNodeTypes,eD as AgentInjectedReason,eE as BooleanOperation,ab as CodeAttributesKeyTypes,eF as ConditionType,eG as Crud,K as CustomInstrumentationsKeyTypes,aW as DesiredStateProgress,eH as DestinationTypes,eI as EdgeTypes,E as EntityTypes,H as FieldTypes,L as GolangCustomProbe,J as HeadersCollectionKeyTypes,dM as InputTypes,eJ as InstallationMethod,O as InstrumentationRuleType,eK as IntrumentationStatus,M as JavaCustomProbe,eL as JsonOperation,Y as K8sAttributesFrom,Q as K8sResourceKind,eM as K8sWorkloadContainerAgentConfigTracesHeadSamplingCheckConditionOperator,eN as ListDirection,N as NodeTypes,eO as NumberOperation,eP as OtelDistroName,eQ as OtherEntityTypes,a$ as OtherStatus,aA as OtherStatusType,ad as PayloadCollectionKeyTypes,P as PlatformType,eR as PodContainerLifecycleStatus,eS as PodContainerStatus,eT as PodPhase,eU as Profile,bj as ProgrammingLanguages,eV as SIGNAL_KEY_TO_TYPE,eW as SIGNAL_TYPE_TO_KEY,eX as SignalKey,B as SignalType,eY as SortDirection,S as StatusType,eZ as StringOperation,T as Tier,e_ as WorkloadRolloutReason,dn as WorkloadRolloutStatus}from"./chunks/ui-components-Dnqp-MQm.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";
1
+ export{q as ActionKeyTypes,r as ActionType,eG as AddNodeTypes,eH as AgentInjectedReason,eI as BooleanOperation,aj as CodeAttributesKeyTypes,eJ as ConditionType,eK as Crud,K as CustomInstrumentationsKeyTypes,b2 as DesiredStateProgress,eL as DestinationTypes,eM as EdgeTypes,E as EntityTypes,a7 as ExtractionDataFormat,H as FieldTypes,L as GolangCustomProbe,J as HeadersCollectionKeyTypes,dQ as InputTypes,eN as InstallationMethod,O as InstrumentationRuleType,eO as IntrumentationStatus,M as JavaCustomProbe,eP as JsonOperation,Y as K8sAttributesFrom,Q as K8sResourceKind,eQ as K8sWorkloadContainerAgentConfigTracesHeadSamplingCheckConditionOperator,eR as ListDirection,N as NodeTypes,eS as NumberOperation,eT as OtelDistroName,eU as OtherEntityTypes,b7 as OtherStatus,aI as OtherStatusType,al as PayloadCollectionKeyTypes,P as PlatformType,eV as PodContainerLifecycleStatus,eW as PodContainerStatus,eX as PodPhase,eY as Profile,br as ProgrammingLanguages,eZ as SIGNAL_KEY_TO_TYPE,e_ as SIGNAL_TYPE_TO_KEY,e$ as SignalKey,B as SignalType,f0 as SortDirection,S as StatusType,f1 as StringOperation,T as Tier,f2 as WorkloadRolloutReason,dt as WorkloadRolloutStatus}from"./chunks/ui-components-CFTFbtTq.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/visuals.js CHANGED
@@ -1 +1 @@
1
- export{e$ as VISUAL_ODIGOS_LOGO_HEIGHT,f0 as VISUAL_ODIGOS_LOGO_WIDTH,ez as VisualGreenRings,f1 as VisualOdigosLogo,bV as VisualPurpleRings}from"./chunks/ui-components-Dnqp-MQm.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";
1
+ export{f3 as VISUAL_ODIGOS_LOGO_HEIGHT,f4 as VISUAL_ODIGOS_LOGO_WIDTH,eD as VisualGreenRings,f5 as VisualOdigosLogo,c1 as VisualPurpleRings}from"./chunks/ui-components-CFTFbtTq.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odigos/ui-kit",
3
- "version": "0.0.244",
3
+ "version": "0.0.245",
4
4
  "author": "Odigos",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{jsx as e}from"react/jsx-runtime";import{useState as t,useCallback as a,useMemo as n,useContext as r,createContext as s,useRef as o,useEffect as i}from"react";import{o as l,p as d,A as c,q as u,r as m,s as p,v as h,w as f,x as v,j as g,y,z as b,B as D,C,G as E,H as S,I as k,J as F,K as I,L as w,M as A,O as N,Q as R,T as P,E as T}from"./ui-components-Dnqp-MQm.js";import{b as x,a as O,d as L,v as M,g as U,u as j}from"./helpers-aJJ1GhqS.js";const G={type:"",disabled:!1,name:"",notes:"",signals:[],fields:{}},K=s(null),V="All row fields are required",_="At least one row is required",q=(e,t)=>!!e&&t.every(t=>{const a=e[t];return Array.isArray(a)?a.length>0:!("string"==typeof(n=a)?!n.trim():p(n));var n}),H=({children:r})=>{const[s,o]=t(null),i=l(G),f=a(e=>{i.resetFormData(),i.handleErrorChange(void 0,void 0,{}),e?.type&&i.handleFormChange("type",e.type),o(e)},[]),v=a(e=>{var t;i.resetFormData((({type:e,name:t,notes:a,disabled:n,signals:r,fields:s})=>({type:e,name:t||"",notes:a||"",disabled:!!n,signals:r??[],fields:s??{}}))(e)),i.handleErrorChange(void 0,void 0,{}),o((t=e.type,c.find(e=>e.type===t)??null))},[]),g=a(()=>{if(!s)return{errorMessage:"No action type selected",preparedFormData:d(G)};const e=(e=>{const t=d(e),a=t.fields||{},n=a[u.UrlTemplatizationRulesGroups];n?.length&&(a[u.UrlTemplatizationRulesGroups]=n.map(e=>({...e,templatizationRules:(e.templatizationRules||[]).filter(e=>!!e.template?.trim())})));const r=a[u.AttributeNamesToDelete];r?.length&&(a[u.AttributeNamesToDelete]=r.filter(e=>!!e?.trim()));const s=a[u.Renames];return s&&(a[u.Renames]=Object.fromEntries(Object.entries(s).filter(([e,t])=>!!e?.trim()&&!!t?.trim()))),t.fields=a,t})(i.formData),t={};p(e.signals)&&(t.signals=h.FIELD_IS_REQUIRED),s.type&&Object.assign(t,((e,t,a)=>{const n={},r=t.fields||{},s=a.fields||{};switch(e){case m.K8sAttributes:{const e=!(r[u.CollectContainerAttributes]||r[u.CollectReplicaSetAttributes]||r[u.CollectWorkloadId]||r[u.CollectClusterId]),t=!r[u.LabelsAttributes]?.length,a=!r[u.AnnotationsAttributes]?.length;e&&t&&a&&(n[u.CollectContainerAttributes]="Enable at least one option or add a label/annotation row");const s=r[u.LabelsAttributes];s?.some(e=>!q(e,["labelKey","attributeKey","fromSources"]))&&(n[u.LabelsAttributes]=V);const o=r[u.AnnotationsAttributes];o?.some(e=>!q(e,["annotationKey","attributeKey","fromSources"]))&&(n[u.AnnotationsAttributes]=V);break}case m.AddClusterInfo:{const e=r[u.ClusterAttributes];e?.length?e.some(e=>!q(e,["attributeName","attributeStringValue"]))&&(n[u.ClusterAttributes]=V):n[u.ClusterAttributes]=_;break}case m.DeleteAttributes:{const e=s[u.AttributeNamesToDelete]||[],t=r[u.AttributeNamesToDelete]||[];t.length?e.length>t.length&&(n[u.AttributeNamesToDelete]=V):n[u.AttributeNamesToDelete]=e.length?V:_;break}case m.RenameAttributes:{const e=Object.entries(s[u.Renames]||{}),t=Object.entries(r[u.Renames]||{}),a=e.some(([e,t])=>!e?.trim()||!t?.trim());t.length?a&&(n[u.Renames]=V):n[u.Renames]=e.length?V:_;break}case m.PiiMasking:{const e=r[u.PiiCategories];e?.length||(n[u.PiiCategories]="Select at least one attribute to mask");break}case m.URLTemplatization:{const e=r[u.UrlTemplatizationRulesGroups];(!e?.length||e.some(e=>!e.templatizationRules?.length))&&(n[u.UrlTemplatizationRulesGroups]="Each rule group needs at least one non-blank template");break}}return n})(s.type,e,i.formData)),i.handleErrorChange(void 0,void 0,t);return{errorMessage:Object.keys(t).length>0?"Invalid form values":void 0,preparedFormData:e}},[i,s]),y=n(()=>({selectedOption:s,onSelectOption:f,loadAction:v,genericForm:i,validateFormData:g}),[s,f,v,i,g]);return e(K.Provider,{value:y,children:r})},z=()=>{const e=r(K);if(!e)throw new Error("useActionFormContext must be used within an ActionFormContextProvider");return e},J={name:""},Q=s(null),W=({children:r,defaultExcludeName:s=""})=>{const{dataStreams:i}=f(),[c,u]=t(void 0),[m,p]=t(s),[g,y]=t(void 0),[b,D]=t(null),C=o(null),E=l(J),S=a(e=>{E.resetFormData({name:e}),E.handleErrorChange(void 0,void 0,{}),u(void 0),p(e),y(e),D(null),C.current=null},[]),k=a(()=>{const e=d(E.formData),t=(e=>{const t={};return e.name?v(e.name)||(t.name=h.ILLEGAL_K8S_LABEL):t.name=h.FIELD_IS_REQUIRED,t})(e);E.handleErrorChange(void 0,void 0,t);const a=Object.keys(t).length>0?h.REQUIRED_FIELDS:void 0;return u(a),{errorMessage:a,preparedFormData:e}},[E]),F=a(async e=>{const{errorMessage:t,preparedFormData:a}=k();if(t)return;const n=i.find(e=>e.name===a.name&&e.name!==m);if(n)return C.current=e,void D({preparedFormData:a,existingName:n.name,editingName:g});await e(a)},[k,i,m,g]),I=a(async()=>{const e=C.current,t=b?.preparedFormData;C.current=null,D(null),e&&t&&await e(t)},[b]),w=a(()=>{C.current=null,D(null)},[]),A=n(()=>({genericForm:E,loadDataStream:S,editingName:g,validateFormData:k,requestSubmit:F,pendingMerge:b,confirmMerge:I,cancelMerge:w,errorMessage:c,excludeName:m,setExcludeName:p}),[E,S,g,k,F,b,I,w,c,m]);return e(Q.Provider,{value:A,children:r})},$=()=>{const e=r(Q);if(!e)throw new Error("useDataStreamFormContext must be used within a DataStreamFormContextProvider");return e},B={type:"",name:"",currentStreamName:"",disabled:!1,exportedSignals:{logs:!1,metrics:!1,traces:!1,profiles:!1},fields:[]},X={activeForm:null,onChangeActiveForm:()=>{},loadDestination:()=>{},genericForm:void 0,validateFormData:()=>({isOk:!1,preparedFormData:d(B)}),unsavedDestinations:[],thisUnsavedDestination:void 0,setUnsavedDestinations:()=>{},addUnsavedDestination:()=>{},updateUnsavedDestination:()=>{},deleteUnsavedDestination:()=>{}},Y=s(X),Z=e=>e.filter(e=>!!e).map(e=>{const{name:t,componentType:a,componentProperties:n,displayName:r,initialValue:s,renderCondition:o}=e,i=a===S.Dropdown,l=C(n,{});return{componentType:a,renderCondition:o,name:t,title:r,value:s,placeholder:l.placeholder||(i?"Select an option":void 0),options:i&&Array.isArray(l.values)?l.values.map(e=>({id:e,label:e})):void 0,...l}}),ee=({children:r})=>{const{selectedStreamName:s}=f(),o=g(e=>e.destinations),[c,u]=t(null),[m,v]=t(X.unsavedDestinations),S=n(()=>"number"==typeof c?.unsavedIdx?m[c.unsavedIdx]:void 0,[c,m]),k=a((e,t)=>{c&&(v(t=>[...t,{...e,option:c.option}]),u(t?e=>e?{...e,listType:y.UNSAVED,unsavedIdx:m.length}:null:null))},[c,m.length]),F=a((e,t,a)=>{c&&(v(a=>a.map((a,n)=>n===e?{...a,...t,option:c.option}:a)),u(a?e=>e?{...e,listType:y.UNSAVED}:null:null))},[c]),I=a(e=>{v(t=>t.filter((t,a)=>a!==e)),u(null)},[]),w=l({...B,currentStreamName:s});i(()=>{if(!c)return;if(S)return void w.resetFormData({...S.formData});if(c.listType===y.EXISTS&&c.option.id){const e=o.find(e=>e.id===c.option.id);if(e)return void w.resetFormData({type:e.destinationType.type,name:e.name||e.destinationType.displayName,currentStreamName:s,disabled:!!e.disabled,exportedSignals:{logs:!!e.exportedSignals?.logs,metrics:!!e.exportedSignals?.metrics,traces:!!e.exportedSignals?.traces,profiles:!!e.exportedSignals?.profiles},fields:c.dynamicFields.map(e=>({key:e.name,value:e.value}))})}const e=b(c.option.supportedSignals);w.resetFormData({type:c.option.type,name:c.option.displayName,currentStreamName:s,disabled:!1,exportedSignals:{logs:e.includes(D.Logs),metrics:e.includes(D.Metrics),traces:e.includes(D.Traces),profiles:e.includes(D.Profiles)},fields:c.dynamicFields.map(e=>({key:e.name,value:e.value}))})},[c,S]);const A=a(e=>{w.resetFormData(),w.handleErrorChange(void 0,void 0,{}),u(e?{...e,dynamicFields:e.option?.fields?Z(e.option.fields):[]}:null)},[]),N=a((e,t)=>{let a;for(const n of t){const t=n.items.find(t=>t.type===e.destinationType.type);if(t){a=t;break}}const n=C(e.fields,{}),r={id:e.id,type:e.destinationType.type,displayName:e.name||e.destinationType.displayName,selected:!0,testConnectionSupported:a?.testConnectionSupported??!1,supportedSignals:e.destinationType.supportedSignals,fields:a?a.fields.map(e=>({...e,initialValue:n[e.name]??e.initialValue})):[]},s=Z(r.fields);u({listType:y.EXISTS,option:r,dynamicFields:s})},[]),R=a(()=>{const e=d(w.formData),t={};c?.dynamicFields.forEach(({name:a,required:n})=>{if(n){const n=e.fields.find(e=>e.key===a)?.value;p(n)&&(t[a]=h.FIELD_IS_REQUIRED)}});return E(e.exportedSignals).length||(t.exportedSignals=h.FIELD_IS_REQUIRED),w.handleErrorChange(void 0,void 0,t),{errorMessage:0===Object.keys(t).length?void 0:"Invalid form values",preparedFormData:e}},[w,c]);return e(Y.Provider,{value:{activeForm:c,onChangeActiveForm:A,loadDestination:N,genericForm:w,validateFormData:R,unsavedDestinations:m,thisUnsavedDestination:S,setUnsavedDestinations:v,addUnsavedDestination:k,updateUnsavedDestination:F,deleteUnsavedDestination:I},children:r})},te=()=>r(Y),ae={disabled:!1,ruleName:"",notes:"",workloads:null,instrumentationLibraries:null,payloadCollection:null,codeAttributes:null,headersCollection:null,customInstrumentations:null},ne=s(null),re=({children:r})=>{const[s,o]=t(null),i=l(ae),c=a(e=>{i.resetFormData(),i.handleErrorChange(void 0,void 0,{}),o(e)},[]),u=a(e=>{var t;i.resetFormData((({ruleName:e,notes:t,disabled:a,workloads:n,instrumentationLibraries:r,payloadCollection:s,codeAttributes:o,headersCollection:i,customInstrumentations:l})=>({ruleName:e||"",notes:t||"",disabled:!!a,workloads:n??null,instrumentationLibraries:r??null,payloadCollection:s??null,codeAttributes:o??null,headersCollection:i??null,customInstrumentations:l??null}))(e)),i.handleErrorChange(void 0,void 0,{}),o((t=e.type,k.find(e=>e.type===t)??null))},[]),m=a(()=>{if(!s)return{errorMessage:"No rule type selected",preparedFormData:d(ae)};const e=(e=>{const t=d(e);return t.headersCollection?.[F.HeaderKeys]?.length&&(t.headersCollection[F.HeaderKeys]=t.headersCollection[F.HeaderKeys].map(e=>e.trim()).filter(e=>e)),t.customInstrumentations?.[I.Golang]?.length&&(t.customInstrumentations[I.Golang]=t.customInstrumentations[I.Golang].map(e=>new w(e.packageName,e.functionName,e.receiverName,e.receiverMethodName)).filter(e=>{return t=e,!!(t.packageName?.trim()||t.functionName?.trim()||t.receiverName?.trim()||t.receiverMethodName?.trim());var t})),t.customInstrumentations?.[I.Java]?.length&&(t.customInstrumentations[I.Java]=t.customInstrumentations[I.Java].map(e=>new A(e.className,e.methodName)).filter(e=>{return t=e,!(!t.className?.trim()&&!t.methodName?.trim());var t})),t})(i.formData),t=((e,t)=>{const a={};switch(e){case N.CodeAttributes:Object.values(t.codeAttributes||{}).some(e=>null!=e)||(a.codeAttributes="Code attributes are required");break;case N.PayloadCollection:Object.values(t.payloadCollection||{}).some(e=>null!=e)||(a.payloadCollection="Payload collection are required");break;case N.HeadersCollection:t.headersCollection?.[F.HeaderKeys]?.length||(a.headersCollection="Header keys are required");break;case N.CustomInstrumentation:{const e=t.customInstrumentations?.[I.Golang]||[],n=t.customInstrumentations?.[I.Java]||[];if(!e.length&&!n.length){a.customInstrumentations="Custom instrumentation are required";break}const r=e.findIndex(e=>!new w(e.packageName,e.functionName,e.receiverName,e.receiverMethodName).Verify());if(-1!==r){a.customInstrumentations=`Golang probe #${r+1} is invalid: provide a package name plus either a function name OR both a receiver name and receiver method name`;break}const s=n.findIndex(e=>!new A(e.className,e.methodName).Verify());if(-1!==s){a.customInstrumentations=`Java probe #${s+1} is invalid: both class name and method name are required`;break}break}}return a})(s.type,e);return i.handleErrorChange(void 0,void 0,t),{errorMessage:Object.keys(t).length>0?"Invalid form values":void 0,preparedFormData:e}},[i,s]),p=n(()=>({selectedOption:s,onSelectOption:c,loadRule:u,genericForm:i,validateFormData:m}),[s,c,u,i,m]);return e(ne.Provider,{value:p,children:r})},se=()=>{const e=r(ne);if(!e)throw new Error("useRuleFormContext must be used within a RuleFormContextProvider");return e};var oe;!function(e){e.Create="create",e.View="view",e.EditAutoNoisy="edit-auto-noisy",e.EditAutoCostReduction="edit-auto-cost-reduction",e.EditAutoHighlyRelevant="edit-auto-highly-relevant"}(oe||(oe={}));const ie=s(null),le=["50","25","10","1"];function de(e){const t=String(e);return le.includes(t)?t:"custom"}const ce=({category:r,sourceOptions:s=[],namespaceOptions:o=[],children:d})=>{const{formData:c,handleFormChange:u,resetFormData:m}=l(U(r)),[p,h]=t(null);i(()=>{m(U(r)),h(null)},[r]);const f=a(e=>{h(null),u(void 0,void 0,{...c,...e})},[c,u]),v=a(()=>{m(U(r)),h(null)},[r,m]),g=n(()=>({formType:oe.Create,category:r,formData:c,handleChange:f,resetForm:v,duplicateWarning:p,setDuplicateWarning:h,sourceOptions:s,namespaceOptions:o}),[r,c,f,v,p,s,o]);return e(ie.Provider,{value:g,children:d})},ue=({data:r,defaultEditMode:s,sourceOptions:d=[],namespaceOptions:c=[],children:u})=>{const[m,p]=t(!1),{formData:h,handleFormChange:f,resetFormData:v}=l(void 0),g=o(null),[y,b]=t(null);i(()=>{r!==g.current&&(g.current=r,r&&s?(v(M(r)),b(null),p(!0)):(p(!1),b(null)))},[r,s]);const D=a(e=>{b(null),f(void 0,void 0,{...h,...e})},[h,f]),C=a(()=>{r&&(v(M(r)),b(null),p(!0))},[r,v]),E=a(()=>{p(!1),b(null)},[]),S=n(()=>({formType:oe.View,data:r,isEditing:m,formData:h,handleChange:D,handleEdit:C,handleCancelEdit:E,duplicateWarning:y,setDuplicateWarning:b,sourceOptions:d,namespaceOptions:c}),[r,m,h,D,C,E,y,d,c]);return e(ie.Provider,{value:S,children:u})};function me(e){const[a,r]=t(()=>0===e?"all":"sample"),[s,o]=t(()=>de(e)),[l,d]=t(()=>"custom"===de(e)?String(e):"");i(()=>{r(0===e?"all":"sample");const t=de(e);o(t),d("custom"===t?String(e):"")},[e]);const c=n(()=>"all"===a?0:"custom"===s?Number(l)||0:Number(s),[a,s,l]);return{percentageMode:a,setPercentageMode:r,percentagePreset:s,setPercentagePreset:o,customPercentage:l,setCustomPercentage:d,resolvedPercentage:c}}const pe=({enabled:a,keepPercentage:r,children:s})=>{const[o,l]=t(a),d=me(r);i(()=>{l(a)},[a]);const c=n(()=>L({enabled:o,keepPercentage:d.resolvedPercentage}),[o,d.resolvedPercentage]),u=n(()=>({formType:oe.EditAutoNoisy,localEnabled:o,setLocalEnabled:l,...d,summary:c}),[o,d,c]);return e(ie.Provider,{value:u,children:s})},he=({enabled:a,dropPercentage:r,children:s})=>{const[o,l]=t(a),d=me(r);i(()=>{l(a)},[a]);const c=n(()=>O(o?{disabled:!1,percentageAtMost:d.resolvedPercentage}:null),[o,d.resolvedPercentage]),u=n(()=>({formType:oe.EditAutoCostReduction,localEnabled:o,setLocalEnabled:l,...d,summary:c}),[o,d,c]);return e(ie.Provider,{value:u,children:s})},fe=({enabled:a,children:r})=>{const[s,o]=t(a);i(()=>{o(a)},[a]);const l=n(()=>x(s?{disabled:!1}:null),[s]),d=n(()=>({formType:oe.EditAutoHighlyRelevant,localEnabled:s,setLocalEnabled:o,summary:l}),[s,l]);return e(ie.Provider,{value:d,children:r})},ve=t=>{switch(t.formType){case oe.Create:return e(ce,{...t});case oe.View:return e(ue,{...t});case oe.EditAutoNoisy:return e(pe,{...t});case oe.EditAutoCostReduction:return e(he,{...t});case oe.EditAutoHighlyRelevant:return e(fe,{...t})}};function ge(e){const t=r(ie);if(!t)throw new Error("useSamplingRulesFormContext must be used within a SamplingRulesFormProvider");if(e&&t.formType!==e)throw new Error(`Expected formType "${e}" but found "${t.formType}"`);return t}const ye={otelServiceName:"",currentStreamName:""},be=s(null),De=({children:r})=>{const[s,o]=t(void 0),i=l(ye),c=a(e=>{i.resetFormData((({serviceName:e,id:t})=>({otelServiceName:e||t.name||"",currentStreamName:""}))(e)),i.handleErrorChange(void 0,void 0,{}),o(void 0)},[]),u=a(()=>{const e=d(i.formData);return i.handleErrorChange(void 0,void 0,{}),o(void 0),{errorMessage:void 0,preparedFormData:e}},[i]),m=n(()=>({loadSource:c,genericForm:i,validateFormData:u,errorMessage:s}),[c,i,u,s]);return e(be.Provider,{value:m,children:r})},Ce=()=>{const e=r(be);if(!e)throw new Error("useSourceEditFormContext must be used within a SourceEditFormContextProvider");return e},Ee=new Set([R.StaticPod]),Se=e=>{const t=e.workloads.filter(({selected:e})=>e).length,a=e.workloads.length;return{selectedCount:t,isAllSourced:t>0&&t===a,isSomeSourced:t>0&&t<a,isFutureApps:e.selected||!1}},ke=(e,t,a)=>{if(t&&!e.name.toLowerCase().includes(t.toLowerCase()))return!1;if(a.showOnlySelected){const{isAllSourced:t,isSomeSourced:a,isFutureApps:n}=Se(e);return t||a||n}return!0},Fe=(e,t,a)=>!(t&&!e.name.toLowerCase().includes(t.toLowerCase()))&&(!a.showOnlySelected||e.selected),Ie=s({snapshots:null,setSnapshots:()=>{},isFetching:!1,setIsFetching:()=>{},formData:[],handleSourceChange:()=>{},handleSelectAll:()=>{},formDiff:{},isFormDirty:!1}),we=({children:r,selectedConnectionIds:s,initialInputs:o})=>{const{tier:l}=j(),c=l===P.Onprem,{selectedStreamName:u}=f(),[m,p]=t(!1),[h,v]=t(null),[g,y]=t([]);i(()=>{h&&y(e=>{const t=((e,t)=>d(((e,t)=>e.clusters.filter(({clusterId:e})=>!t||t.includes(e)))(e,t)))(h,s);return t.map(t=>{const a=e?.find(e=>e.clusterId===t.clusterId),n=a??t;if(o?.[t.clusterId]){const e=o[t.clusterId],a=d(n);return e.forEach(e=>{const t=a.namespaces.find(t=>t.name===e.namespace);if(t)if(e.name&&e.kind){const a=t.workloads.find(t=>t.name===e.name&&t.kind===e.kind);a&&(a.selected=e.selected)}else t.selected=e.selected,e.selected&&t.workloads.forEach(e=>{Ee.has(e.kind)&&!c||(e.selected=!0)})}),a}return n})})},[h,s,o]);const{formDiff:b,isFormDirty:D}=n(()=>{const e=((e,t,a)=>{const n={};return e.forEach(e=>{e.namespaces.forEach(r=>{const s=t.find(t=>t.clusterId===e.clusterId)?.namespaces.find(e=>e.name===r.name),o=r.selected||!1;if(o!==s?.selected)n[e.clusterId]||(n[e.clusterId]=[]),n[e.clusterId].push({namespace:r.name,selected:o,currentStreamName:a}),o?n[e.clusterId]=n[e.clusterId].filter(e=>e.namespace!==r.name||e.namespace===r.name&&(!e.name||!e.kind)):r.workloads.forEach(t=>{t.selected&&n[e.clusterId].push({namespace:r.name,name:t.name,kind:t.kind,selected:!0,currentStreamName:a})});else{const t=((e,t,a)=>{const n=[];return t.workloads.forEach(r=>{const s=e?.workloads.find(e=>e.name===r.name&&e.kind===r.kind);r.selected!==s?.selected&&n.push({namespace:t.name,name:r.name,kind:r.kind,selected:r.selected||!1,currentStreamName:a})}),n})(s,r,a);t.length>0&&(n[e.clusterId]||(n[e.clusterId]=[]),n[e.clusterId].push(...t))}})}),n})(g,h?.clusters||[],u);return{formDiff:e,isFormDirty:Object.keys(e).length>0}},[g,h,u]),C=a(e=>!c&&Ee.has(e),[c]),E=a(({clusterId:e,workloadId:t,selected:a,auto:n})=>{y(r=>{const s=d(r),o=s.findIndex(t=>t.clusterId===e);if(-1===o)return s;const i=s[o].namespaces.findIndex(e=>e.name===t.namespace);if(-1===i)return s;if(t.kind&&t.name){const e=s[o].namespaces[i].workloads.findIndex(e=>e.name===t.name&&e.kind===t.kind);if(-1===e)return s;const n="boolean"==typeof a?a:!s[o].namespaces[i].workloads[e].selected;if(s[o].namespaces[i].workloads[e].selected=n,n){s[o].namespaces[i].workloads.filter(e=>!C(e.kind)).every(e=>e.selected)&&(s[o].namespaces[i].selected=!0)}else s[o].namespaces[i].selected=!1}else{const e="boolean"==typeof n?n:!s[o].namespaces[i].selected;s[o].namespaces[i].selected=e,e?s[o].namespaces[i].workloads.forEach(e=>{C(e.kind)||(e.selected=!0)}):"boolean"!=typeof a||a||s[o].namespaces[i].workloads.forEach(e=>{e.selected=!1})}return s})},[C]),S=a(({clusterId:e,namespaceName:t,boolean:a,searchText:n="",searchBy:r="",filters:s})=>{y(o=>{const i=d(o),l=r===T.Namespace?n:"",c=r===T.Source?n:"",u=!!l||!!c||!!s?.showOnlySelected;return i.forEach((n,r)=>{e&&n.clusterId!==e||n.namespaces.forEach(({name:e,workloads:n},o)=>{if(!t||e===t)if(u)if(t){n.forEach((e,t)=>{a&&C(e.kind)||Fe(e,c,s||{showOnlySelected:!1})&&(i[r].namespaces[o].workloads[t].selected=a)});const e=i[r].namespaces[o].workloads.filter(e=>!C(e.kind)).every(e=>e.selected);i[r].namespaces[o].selected=e}else{if(!ke(i[r].namespaces[o],l,s||{showOnlySelected:!1}))return;i[r].namespaces[o].selected=a,n.forEach((e,t)=>{a&&C(e.kind)||(i[r].namespaces[o].workloads[t].selected=a)})}else i[r].namespaces[o].selected=a,n.forEach((e,t)=>{a&&C(e.kind)||(i[r].namespaces[o].workloads[t].selected=a)})})}),i})},[C]);return e(Ie.Provider,{value:{snapshots:h,setSnapshots:v,isFetching:m,setIsFetching:p,formData:g,handleSourceChange:E,handleSelectAll:S,formDiff:b,isFormDirty:D},children:r})},Ae=()=>r(Ie);export{H as A,W as D,Ee as E,re as R,oe as S,ee as a,ve as b,De as c,we as d,$ as e,te as f,se as g,ge as h,Ce as i,Ae as j,Fe as k,ke as l,Se as m,z as u};