@odigos/ui-kit 0.0.57 → 0.0.59

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 CHANGED
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.59](https://github.com/odigos-io/ui-kit/compare/ui-kit-v0.0.58...ui-kit-v0.0.59) (2025-07-16)
4
+
5
+
6
+ ### Features
7
+
8
+ * add support for center buttons in DrawerFooter component ([#245](https://github.com/odigos-io/ui-kit/issues/245)) ([3b95eb4](https://github.com/odigos-io/ui-kit/commit/3b95eb420a028d43e666f75f60bc546a6d75c85d))
9
+
10
+ ## [0.0.58](https://github.com/odigos-io/ui-kit/compare/ui-kit-v0.0.57...ui-kit-v0.0.58) (2025-07-16)
11
+
12
+
13
+ ### Features
14
+
15
+ * add supported languages for instrumentation rules ([#243](https://github.com/odigos-io/ui-kit/issues/243)) ([534e196](https://github.com/odigos-io/ui-kit/commit/534e196f9118bcdff5a72f05e5e42e0d5c841a6b))
16
+ * enhance useGenericForm hook with isFormDirty state ([#240](https://github.com/odigos-io/ui-kit/issues/240)) ([3cc2f2b](https://github.com/odigos-io/ui-kit/commit/3cc2f2ba0092ac8ea7652c977c564221a7c714ab))
17
+ * filter by running instances for source selection form ([#244](https://github.com/odigos-io/ui-kit/issues/244)) ([1122570](https://github.com/odigos-io/ui-kit/commit/1122570267ecb3158a944c3215d2adceea229e08))
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * dropdown values for destination during onboarding ([#242](https://github.com/odigos-io/ui-kit/issues/242)) ([bd528dd](https://github.com/odigos-io/ui-kit/commit/bd528ddb06cda7824d9960abb1e7341b352cbc64))
23
+
3
24
  ## [0.0.57](https://github.com/odigos-io/ui-kit/compare/ui-kit-v0.0.56...ui-kit-v0.0.57) (2025-07-15)
4
25
 
5
26
 
@@ -5,6 +5,9 @@ interface DrawerFooterProps {
5
5
  leftButtons?: (ButtonProps & {
6
6
  'data-id': string;
7
7
  })[];
8
+ centerButtons?: (ButtonProps & {
9
+ 'data-id': string;
10
+ })[];
8
11
  rightButtons?: (ButtonProps & {
9
12
  'data-id': string;
10
13
  })[];
@@ -3,12 +3,19 @@ export declare const FlexRow: import("styled-components/dist/types").IStyledComp
3
3
  $gap?: number;
4
4
  $alignItems?: CSSProperties["alignItems"];
5
5
  $justifyContent?: CSSProperties["justifyContent"];
6
+ $wrap?: CSSProperties["flexWrap"];
6
7
  }>> & string;
7
8
  export declare const FlexColumn: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
8
9
  $gap?: number;
10
+ $alignItems?: CSSProperties["alignItems"];
11
+ $justifyContent?: CSSProperties["justifyContent"];
12
+ $wrap?: CSSProperties["flexWrap"];
9
13
  }>> & string;
10
- export declare const CenterThis: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$gap"> & {
14
+ export declare const CenterThis: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$gap" | "$alignItems" | "$justifyContent" | "$wrap"> & {
11
15
  $gap?: number;
16
+ $alignItems?: CSSProperties["alignItems"];
17
+ $justifyContent?: CSSProperties["justifyContent"];
18
+ $wrap?: CSSProperties["flexWrap"];
12
19
  }, never>> & string;
13
20
  export declare const VerticalScroll: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
14
21
  export declare const Overlay: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
@@ -16,15 +23,19 @@ export declare const ModalBody: import("styled-components/dist/types").IStyledCo
16
23
  $isNotModal?: boolean;
17
24
  $minHeight?: CSSProperties["minHeight"];
18
25
  }>> & string;
19
- export declare const TableContainer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$gap"> & {
26
+ export declare const TableContainer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$gap" | "$alignItems" | "$justifyContent" | "$wrap"> & {
20
27
  $gap?: number;
28
+ $alignItems?: CSSProperties["alignItems"];
29
+ $justifyContent?: CSSProperties["justifyContent"];
30
+ $wrap?: CSSProperties["flexWrap"];
21
31
  }, {
22
32
  $maxWidth: CSSProperties["maxWidth"];
23
33
  }>> & string;
24
- export declare const TableTitleWrap: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$gap" | "$alignItems" | "$justifyContent"> & {
34
+ export declare const TableTitleWrap: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$gap" | "$alignItems" | "$justifyContent" | "$wrap"> & {
25
35
  $gap?: number;
26
36
  $alignItems?: CSSProperties["alignItems"];
27
37
  $justifyContent?: CSSProperties["justifyContent"];
38
+ $wrap?: CSSProperties["flexWrap"];
28
39
  }, never>> & string;
29
40
  export declare const TableWrap: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
30
41
  $maxHeight: CSSProperties["maxHeight"];
@@ -1,8 +1,9 @@
1
1
  import { type FC } from 'react';
2
- import { StatusType } from '@/types';
3
2
  import { TextProps } from '../text';
3
+ import { type SVG, StatusType } from '@/types';
4
4
  interface TagProps extends TextProps {
5
- type: StatusType;
5
+ type?: StatusType;
6
+ icon?: SVG;
6
7
  }
7
8
  declare const Tag: FC<TagProps>;
8
9
  export { Tag, type TagProps };
package/lib/components.js CHANGED
@@ -1,16 +1,16 @@
1
- import { B as Button } from './index-9d7ee546.js';
2
- export { A as AutocompleteInput, a as Badge, a5 as CenterThis, C as Checkbox, b as Code, c as ConditionDetails, D as DataCard, e as DataCardFieldTypes, d as DataCardFields, f as DataFinger, g as DataTab, h as DescribeRow, i as Divider, j as DocsButton, k as Drawer, m as DrawerFooter, l as DrawerHeader, n as Dropdown, E as ExtendArrow, F as FadeLoader, o as FieldError, p as FieldLabel, a4 as FlexColumn, a3 as FlexRow, H as Header, I as IconButton, q as IconGroup, r as IconTitleBadge, s as IconWrapped, t as IconsNav, u as ImageControlled, v as Input, w as InputList, x as InputTable, y as InteractiveTable, K as KeyValueInputsList, M as Modal, a8 as ModalBody, z as MonitorsCheckboxes, G as MonitorsIcons, N as NavigationButtons, J as NoDataFound, L as NotificationNote, a7 as Overlay, P as Popup, O as PopupForm, S as ScrollX, Q as SectionTitle, R as Segment, U as SelectionButton, V as SkeletonLoader, W as Status, X as Stepper, a9 as TableContainer, aa as TableTitleWrap, ab as TableWrap, Y as Tag, Z as Text, _ as TextArea, $ as Toggle, T as ToggleCodeComponent, a0 as Tooltip, a1 as TraceLoader, a6 as VerticalScroll, a2 as WarningModal } from './index-9d7ee546.js';
3
- export { C as CancelWarning, D as DeleteWarning } from './index-2ca06346.js';
1
+ import { B as Button } from './index-e6385bb5.js';
2
+ export { A as AutocompleteInput, a as Badge, a5 as CenterThis, C as Checkbox, b as Code, c as ConditionDetails, D as DataCard, e as DataCardFieldTypes, d as DataCardFields, f as DataFinger, g as DataTab, h as DescribeRow, i as Divider, j as DocsButton, k as Drawer, m as DrawerFooter, l as DrawerHeader, n as Dropdown, E as ExtendArrow, F as FadeLoader, o as FieldError, p as FieldLabel, a4 as FlexColumn, a3 as FlexRow, H as Header, I as IconButton, q as IconGroup, r as IconTitleBadge, s as IconWrapped, t as IconsNav, u as ImageControlled, v as Input, w as InputList, x as InputTable, y as InteractiveTable, K as KeyValueInputsList, M as Modal, a8 as ModalBody, z as MonitorsCheckboxes, G as MonitorsIcons, N as NavigationButtons, J as NoDataFound, L as NotificationNote, a7 as Overlay, P as Popup, O as PopupForm, S as ScrollX, Q as SectionTitle, R as Segment, U as SelectionButton, V as SkeletonLoader, W as Status, X as Stepper, a9 as TableContainer, aa as TableTitleWrap, ab as TableWrap, Y as Tag, Z as Text, _ as TextArea, $ as Toggle, T as ToggleCodeComponent, a0 as Tooltip, a1 as TraceLoader, a6 as VerticalScroll, a2 as WarningModal } from './index-e6385bb5.js';
3
+ export { C as CancelWarning, D as DeleteWarning } from './index-bb79aa09.js';
4
4
  import React, { createContext, Component, createElement } from 'react';
5
- import { T as Theme } from './index-a4a96604.js';
5
+ import { T as Theme } from './index-e9b26c29.js';
6
6
  import './types.js';
7
- import './index-3f1cbe2e.js';
8
- import './index-ebd8218b.js';
7
+ import './index-0001f711.js';
8
+ import './index-355d023b.js';
9
9
  import 'styled-components';
10
- import './index-15342ca8.js';
10
+ import './index-630dec93.js';
11
11
  import './index-ec555530.js';
12
12
  import 'react-dom';
13
- import './useTransition-7826f3d7.js';
13
+ import './useTransition-242df96b.js';
14
14
 
15
15
  const ErrorBoundaryContext = createContext(null);
16
16
 
@@ -88,7 +88,8 @@ export declare const DISPLAY_TITLES: {
88
88
  FILTERED_COUNT_TOOLTIP: string;
89
89
  SEARCH_NAMESPACES: string;
90
90
  SEARCH_SOURCES: string;
91
- SHOW_SELECTED_ONLY: string;
91
+ ONLY_SELECTED: string;
92
+ ONLY_RUNNING_INSTANCES: string;
92
93
  TO_COLLECT_OTEL_DATA: string;
93
94
  TO_MONITOR_OTEL_DATA: string;
94
95
  TO_MODIFY_OTEL_DATA: string;
package/lib/constants.js CHANGED
@@ -1,4 +1,4 @@
1
- export { A as ACTION_OPTIONS, B as BUTTON_TEXTS, a as DEFAULT_DATA_STREAM_NAME, D as DISPLAY_LANGUAGES, b as DISPLAY_TITLES, F as FORM_ALERTS, I as INSTRUMENTATION_RULE_OPTIONS, L as LANGUAGE_OPTIONS, M as MONITORS_OPTIONS, S as STORAGE_KEYS } from './index-a4a96604.js';
1
+ export { A as ACTION_OPTIONS, B as BUTTON_TEXTS, a as DEFAULT_DATA_STREAM_NAME, D as DISPLAY_LANGUAGES, b as DISPLAY_TITLES, F as FORM_ALERTS, I as INSTRUMENTATION_RULE_OPTIONS, L as LANGUAGE_OPTIONS, M as MONITORS_OPTIONS, S as STORAGE_KEYS } from './index-e9b26c29.js';
2
2
  export { D as DESTINATION_CATEGORIES } from './index-1cb4f9e2.js';
3
3
  import 'react';
4
4
  import './types.js';
@@ -1,5 +1,5 @@
1
1
  import { type FC } from 'react';
2
- import type { InstrumentationRuleFormData, InstrumentationRuleOption } from '@/types';
2
+ import { type InstrumentationRuleFormData, type InstrumentationRuleOption } from '@/types';
3
3
  interface InstrumentationRuleFormProps {
4
4
  isUpdate?: boolean;
5
5
  rule: InstrumentationRuleOption;
package/lib/containers.js CHANGED
@@ -1,21 +1,21 @@
1
1
  import React, { useState, useEffect, forwardRef, useRef, useImperativeHandle, useMemo, Fragment, useCallback, Children } from 'react';
2
2
  import styled, { css } from 'styled-components';
3
- import { b as DISPLAY_TITLES, T as Theme, U as usePendingStore, V as useNotificationStore, O as useDrawerStore, B as BUTTON_TEXTS, W as useEntityStore, A as ACTION_OPTIONS, g as getActionIcon, z as useModalStore, F as FORM_ALERTS, X as useFilterStore, D as DISPLAY_LANGUAGES, M as MONITORS_OPTIONS, d as getInstrumentationRuleIcon, Y as useDataStreamStore, Z as useInstrumentStore, c as getEntityId, S as STORAGE_KEYS, a as DEFAULT_DATA_STREAM_NAME, _ as useSetupStore, I as INSTRUMENTATION_RULE_OPTIONS, $ as useSelectedStore, j as ImageErrorIcon, a0 as useDarkMode } from './index-a4a96604.js';
3
+ import { b as DISPLAY_TITLES, T as Theme, U as usePendingStore, V as useNotificationStore, O as useDrawerStore, B as BUTTON_TEXTS, W as useEntityStore, A as ACTION_OPTIONS, g as getActionIcon, z as useModalStore, F as FORM_ALERTS, X as useFilterStore, D as DISPLAY_LANGUAGES, M as MONITORS_OPTIONS, d as getInstrumentationRuleIcon, Y as useDataStreamStore, Z as useInstrumentStore, c as getEntityId, S as STORAGE_KEYS, a as DEFAULT_DATA_STREAM_NAME, _ as useSetupStore, e as getProgrammingLanguageIcon, I as INSTRUMENTATION_RULE_OPTIONS, $ as useSelectedStore, j as ImageErrorIcon, a0 as useDarkMode } from './index-e9b26c29.js';
4
4
  import { ActionType, ActionKeyTypes, InputTypes, FieldTypes, EntityTypes, StatusType, Crud, OtherStatus, NodeTypes, EdgeTypes, AddNodeTypes, SignalType, HeadersCollectionKeyTypes, CustomInstrumentationsKeyTypes, CodeAttributesKeyTypes, PayloadCollectionKeyTypes, InstrumentationRuleType, K8sResourceKind } from './types.js';
5
- import { e as DataCardFieldTypes, p as FieldLabel, C as Checkbox, o as FieldError, v as Input, x as InputTable, K as KeyValueInputsList, w as InputList, Z as Text, R as Segment, Q as SectionTitle, j as DocsButton, z as MonitorsCheckboxes, _ as TextArea, k as Drawer, c as ConditionDetails, D as DataCard, a4 as FlexColumn, M as Modal, N as NavigationButtons, a8 as ModalBody, L as NotificationNote, A as AutocompleteInput, i as Divider, W as Status, a3 as FlexRow, a0 as Tooltip, s as IconWrapped, G as MonitorsIcons, a9 as TableContainer, aa as TableTitleWrap, r as IconTitleBadge, ab as TableWrap, y as InteractiveTable, a5 as CenterThis, J as NoDataFound, a1 as TraceLoader, a as Badge, E as ExtendArrow, a6 as VerticalScroll, U as SelectionButton, B as Button, n as Dropdown, ac as nodeConfig, ad as useNodesState, ae as useEdgesState, af as Flow, ag as applyNodeChanges, P as Popup, $ as Toggle, I as IconButton, ah as AddButton, F as FadeLoader, g as DataTab, X as Stepper, d as DataCardFields, ai as MarkerType, t as IconsNav, aj as CopyText, h as DescribeRow, ak as PodContainer, al as SourceContainer, q as IconGroup, O as PopupForm } from './index-9d7ee546.js';
5
+ import { e as DataCardFieldTypes, p as FieldLabel, C as Checkbox, o as FieldError, v as Input, x as InputTable, K as KeyValueInputsList, w as InputList, Z as Text, R as Segment, Q as SectionTitle, j as DocsButton, z as MonitorsCheckboxes, _ as TextArea, k as Drawer, c as ConditionDetails, D as DataCard, a4 as FlexColumn, M as Modal, N as NavigationButtons, a8 as ModalBody, L as NotificationNote, A as AutocompleteInput, i as Divider, W as Status, a3 as FlexRow, a0 as Tooltip, s as IconWrapped, G as MonitorsIcons, a9 as TableContainer, aa as TableTitleWrap, r as IconTitleBadge, ab as TableWrap, y as InteractiveTable, a5 as CenterThis, J as NoDataFound, a1 as TraceLoader, a as Badge, E as ExtendArrow, a6 as VerticalScroll, U as SelectionButton, B as Button, n as Dropdown, ac as nodeConfig, ad as useNodesState, ae as useEdgesState, af as Flow, ag as applyNodeChanges, P as Popup, $ as Toggle, I as IconButton, ah as AddButton, F as FadeLoader, g as DataTab, X as Stepper, d as DataCardFields, Y as Tag, ai as MarkerType, t as IconsNav, aj as CopyText, h as DescribeRow, ak as PodContainer, al as SourceContainer, q as IconGroup, O as PopupForm } from './index-e6385bb5.js';
6
6
  import { i as isEmpty, s as safeJsonParse } from './index-ec555530.js';
7
- import { C as CheckCircledIcon, O as OdigosLogo } from './index-15342ca8.js';
8
- import { C as CrossCircledIcon, O as OdigosLogoText, a as OverviewIcon, F as FilterIcon, D as DataStreamsIcon, R as RetryIcon, N as NotificationIcon, U as UserIcon, S as SlackLogo, K as KeyIcon, T as TerminalIcon } from './index-1f42dc81.js';
7
+ import { C as CheckCircledIcon, O as OdigosLogo } from './index-630dec93.js';
8
+ import { C as CrossCircledIcon, O as OdigosLogoText, a as OverviewIcon, F as FilterIcon, D as DataStreamsIcon, R as RetryIcon, N as NotificationIcon, U as UserIcon, S as SlackLogo, K as KeyIcon, T as TerminalIcon } from './index-3de83c73.js';
9
9
  import { useActionFormData, useSessionStorage, useDataStreamFormData, useDestinationFormData, useClickNotification, useSourceFormData, useSourceSelectionFormData } from './hooks.js';
10
- import { u as useKeyDown, a as useOnClickOutside, b as useContainerSize, c as useClickNode, d as usePopup, e as useInstrumentationRuleFormData, f as useTransition, g as useTimeAgo, h as useCopy, i as useGenericForm } from './useTransition-7826f3d7.js';
11
- import { E as EditIcon, T as TrashIcon, S as SearchIcon, h as CheckIcon, A as ArrowIcon, P as PlusIcon, a as CopyIcon } from './index-3f1cbe2e.js';
12
- import { D as DeleteWarning, C as CancelWarning } from './index-2ca06346.js';
13
- import { g as getConditionsBooleans, m as mapConditions, b as getStatusIcon, h as splitCamelString, c as capitalizeFirstLetter, i as isStringABoolean, p as parseBooleanFromString } from './index-ebd8218b.js';
14
- import { f as filterActions, m as getEntityLabel, l as getEntityIcon, w as sleep, o as getPlatformIcon, p as getPlatformLabel, h as formatBytes, j as getContainersIcons, q as getValueForRange, k as getDestinationIcon, g as filterSourcesByStream, e as filterSources, b as filterDestinationsByStream, a as filterDestinations, v as mapDestinationFieldsForDisplay, c as compareCondition, s as getYamlFieldsForDestination, d as deepClone, n as getMetricForEntity, r as getWorkloadId, t as hasUnhealthyInstances, i as getContainersInstrumentedCount, u as isOverTime } from './index-746078ec.js';
10
+ import { u as useKeyDown, a as useOnClickOutside, b as useContainerSize, c as useClickNode, d as usePopup, e as useInstrumentationRuleFormData, f as useTransition, g as useTimeAgo, h as useCopy, i as useGenericForm } from './useTransition-242df96b.js';
11
+ import { E as EditIcon, T as TrashIcon, S as SearchIcon, h as CheckIcon, A as ArrowIcon, P as PlusIcon, a as CopyIcon } from './index-0001f711.js';
12
+ import { D as DeleteWarning, C as CancelWarning } from './index-bb79aa09.js';
13
+ import { g as getConditionsBooleans, m as mapConditions, b as getStatusIcon, h as splitCamelString, c as capitalizeFirstLetter, i as isStringABoolean, p as parseBooleanFromString } from './index-355d023b.js';
14
+ import { f as filterActions, m as getEntityLabel, l as getEntityIcon, w as sleep, o as getPlatformIcon, p as getPlatformLabel, h as formatBytes, j as getContainersIcons, q as getValueForRange, k as getDestinationIcon, g as filterSourcesByStream, e as filterSources, b as filterDestinationsByStream, a as filterDestinations, v as mapDestinationFieldsForDisplay, c as compareCondition, s as getYamlFieldsForDestination, d as deepClone, n as getMetricForEntity, r as getWorkloadId, t as hasUnhealthyInstances, i as getContainersInstrumentedCount, u as isOverTime } from './index-f2c2de35.js';
15
15
  import { m as mapExportedSignals } from './index-6a6bea6e.js';
16
16
  import { NoteBackToSummary, EditButton } from './snippets.js';
17
17
  import { D as DESTINATION_CATEGORIES } from './index-1cb4f9e2.js';
18
- import { a6 as RulesIcon, a7 as SourcesIcon, a3 as ActionsIcon, a4 as DestinationsIcon } from './index-7d331ab3.js';
18
+ import { a6 as RulesIcon, a7 as SourcesIcon, a3 as ActionsIcon, a4 as DestinationsIcon } from './index-27fc9053.js';
19
19
  import 'react-dom';
20
20
 
21
21
  const buildCard$3 = (action) => {
@@ -2322,7 +2322,7 @@ const DynamicFields = ({ fields, onChange, formErrors }) => {
2322
2322
  case FieldTypes.Input:
2323
2323
  return React.createElement(Input, { key: field.name, ...rest, onChange: (e) => onChange(field.name, e.target.value), errorMessage: formErrors[field.name] });
2324
2324
  case FieldTypes.Dropdown:
2325
- return (React.createElement(Dropdown, { key: field.name, ...rest, showSearch: true, value: { id: rest.value || '', value: rest.value || '' }, options: rest.options || [], onSelect: (option) => onChange(field.name, option.value), errorMessage: formErrors[field.name] }));
2325
+ return (React.createElement(Dropdown, { key: field.name, ...rest, showSearch: true, value: { id: rest.value || '', value: rest.value || '' }, options: rest.options || [], onSelect: (option) => onChange(field.name, option.id), errorMessage: formErrors[field.name] }));
2326
2326
  case FieldTypes.MultiInput:
2327
2327
  return (React.createElement(InputList, { key: field.name, ...rest, value: typeof rest.value === 'string' ? safeJsonParse(rest.value, []) : rest.value, onChange: (value) => onChange(field.name, JSON.stringify(value)), errorMessage: formErrors[field.name] }));
2328
2328
  case FieldTypes.KeyValuePair:
@@ -2740,9 +2740,7 @@ const DestinationModal = ({ isOnboarding, categories, potentialDestinations, cre
2740
2740
  const getDestPayload = (alreadyConfigDest) => {
2741
2741
  const fields = {};
2742
2742
  if (!alreadyConfigDest) {
2743
- dynamicFields.forEach((f) => {
2744
- fields[f.name] = (f.componentType === FieldTypes.Dropdown ? f.value?.value || '' : f.value);
2745
- });
2743
+ dynamicFields.forEach((f) => (fields[f.name] = f.value));
2746
2744
  }
2747
2745
  return {
2748
2746
  id: alreadyConfigDest?.id || '',
@@ -3296,14 +3294,15 @@ const FieldTitle = styled(Text) `
3296
3294
  const InstrumentationRuleForm = ({ isUpdate, rule, formData, formErrors, handleFormChange }) => {
3297
3295
  const theme = Theme.useTheme();
3298
3296
  return (React.createElement(Container$7, null,
3299
- isUpdate && (React.createElement("div", null,
3297
+ React.createElement(FlexRow, null, rule.supportedLanguages.map((lang) => (React.createElement(Tag, { key: lang, icon: getProgrammingLanguageIcon(lang), type: StatusType.Info }, lang)))),
3298
+ isUpdate ? (React.createElement("div", null,
3300
3299
  React.createElement(FieldTitle, null, "Status"),
3301
3300
  React.createElement(Segment, { options: [
3302
3301
  { icon: CheckCircledIcon, label: 'active', value: false, selectedBgColor: theme.text.success + Theme.opacity.hex['050'] },
3303
3302
  { icon: CrossCircledIcon, label: 'inactive', value: true, selectedBgColor: theme.text.error + Theme.opacity.hex['050'] },
3304
- ], selected: formData.disabled, setSelected: (bool) => handleFormChange('disabled', bool) }))),
3305
- !isUpdate && React.createElement(SectionTitle, { title: '', description: rule.docsDescription, actionButton: React.createElement(DocsButton, { endpoint: rule.docsEndpoint }) }),
3306
- !isUpdate && (React.createElement(Input, { title: 'Rule name', placeholder: 'Use a name that describes the rule', value: formData['ruleName'], onChange: ({ target: { value } }) => handleFormChange('ruleName', value), errorMessage: formErrors['ruleName'] })),
3303
+ ], selected: formData.disabled, setSelected: (bool) => handleFormChange('disabled', bool) }))) : (React.createElement(React.Fragment, null,
3304
+ React.createElement(SectionTitle, { title: '', description: rule.docsDescription, actionButton: React.createElement(DocsButton, { endpoint: rule.docsEndpoint }) }),
3305
+ React.createElement(Input, { title: 'Rule name', placeholder: 'Use a name that describes the rule', value: formData['ruleName'], onChange: ({ target: { value } }) => handleFormChange('ruleName', value), errorMessage: formErrors['ruleName'] }))),
3307
3306
  React.createElement(CustomFields, { ruleType: rule.type, value: formData, setValue: (key, val) => handleFormChange(key, val), formErrors: formErrors }),
3308
3307
  React.createElement(TextArea, { title: 'Notes', value: formData['notes'], onChange: ({ target: { value } }) => handleFormChange('notes', value), errorMessage: formErrors['notes'] })));
3309
3308
  };
@@ -4380,16 +4379,14 @@ const SourceDrawer = ({ persistSources, updateSource, fetchDescribeSource, resta
4380
4379
  React.createElement(DataCard, { title: DISPLAY_TITLES.DETECTED_CONTAINERS, titleBadge: containersData.isLoading ? OtherStatus.Loading : containersData.containers.length, description: containersData.description || DISPLAY_TITLES.DETECTED_CONTAINERS_DESCRIPTION }, containersData.containers.map((container) => (React.createElement(SourceContainer, { key: `source-container-${container.containerName}`, ...container, callbackRuntimeOverride: async (payload) => await updateSource(drawerEntityId, payload) }))))))) : (React.createElement(Describe$1, { source: thisItem, fetchDescribeSource: fetchDescribeSource }))));
4381
4380
  };
4382
4381
 
4383
- const ActionsRow = styled(FlexRow) `
4384
- justify-content: space-between;
4385
- `;
4386
4382
  const SearchWrapper = styled.div `
4387
- max-width: 350px;
4383
+ max-width: 420px;
4384
+ width: 100%;
4388
4385
  `;
4389
4386
  const SourceSelectionForm = forwardRef(({ isModal, fetchSingleNamespace, onClickSummary }, ref) => {
4390
4387
  const theme = Theme.useTheme();
4391
4388
  const formState = useSourceSelectionFormData({ fetchSingleNamespace });
4392
- const { availableSources, selectedSources, getApiSourcesPayload, getApiFutureAppsPayload, searchText, setSearchText, searchBy, setSearchBy, showSelectedOnly, setShowSelectedOnly } = formState;
4389
+ const { availableSources, selectedSources, getApiSourcesPayload, getApiFutureAppsPayload, searchText, setSearchText, searchBy, setSearchBy, showSelectedOnly, setShowSelectedOnly, showRunningOnly, setShowRunningOnly, } = formState;
4393
4390
  useImperativeHandle(ref, () => ({
4394
4391
  getFormValues: () => ({
4395
4392
  initial: availableSources,
@@ -4403,14 +4400,16 @@ const SourceSelectionForm = forwardRef(({ isModal, fetchSingleNamespace, onClick
4403
4400
  React.createElement(FlexColumn, { "$gap": 24 },
4404
4401
  onClickSummary && React.createElement(NoteBackToSummary, { onClick: onClickSummary }),
4405
4402
  React.createElement(SectionTitle, { title: DISPLAY_TITLES.SELECT_SOURCES, badgeLabel: selectedCount, description: DISPLAY_TITLES.SELECT_SOURCES_DESCRIPTION }),
4406
- React.createElement(ActionsRow, null,
4403
+ React.createElement(FlexRow, { "$justifyContent": 'space-between' },
4407
4404
  React.createElement(SearchWrapper, null,
4408
4405
  React.createElement(Input, { placeholder: searchBy === EntityTypes.Source ? DISPLAY_TITLES.SEARCH_SOURCES : DISPLAY_TITLES.SEARCH_NAMESPACES, icon: SearchIcon, value: searchText, onChange: (e) => setSearchText(e.target.value.toLowerCase()) })),
4409
4406
  React.createElement(Segment, { options: [
4410
4407
  { label: DISPLAY_TITLES.SOURCE, value: EntityTypes.Source, selectedBgColor: theme.text.secondary, selectedTextColor: theme.text.primary },
4411
4408
  { label: DISPLAY_TITLES.NAMESPACE, value: EntityTypes.Namespace, selectedBgColor: theme.text.secondary, selectedTextColor: theme.text.primary },
4412
- ], selected: searchBy, setSelected: setSearchBy }),
4413
- React.createElement(Toggle, { title: DISPLAY_TITLES.SHOW_SELECTED_ONLY, initialValue: showSelectedOnly, onChange: setShowSelectedOnly }))),
4409
+ ], selected: searchBy, setSelected: setSearchBy })),
4410
+ React.createElement(FlexRow, { "$gap": 36 },
4411
+ React.createElement(Toggle, { title: DISPLAY_TITLES.ONLY_SELECTED, initialValue: showSelectedOnly, onChange: setShowSelectedOnly }),
4412
+ React.createElement(Toggle, { title: DISPLAY_TITLES.ONLY_RUNNING_INSTANCES, initialValue: showRunningOnly, onChange: setShowRunningOnly }))),
4414
4413
  React.createElement(Divider, null),
4415
4414
  React.createElement(SourceList, { isModal: isModal, ...formState }))));
4416
4415
  });
package/lib/functions.js CHANGED
@@ -1,13 +1,13 @@
1
- export { c as capitalizeFirstLetter, f as flattenObjectKeys, g as getConditionsBooleans, a as getMonitorIcon, b as getStatusIcon, i as isStringABoolean, d as isValidVersion, m as mapConditions, n as numbersOnly, p as parseBooleanFromString, e as parseJsonStringToPrettyString, r as removeEmptyValuesFromObject, s as safeJsonStringify, h as splitCamelString } from './index-ebd8218b.js';
2
- export { c as compareCondition, d as deepClone, f as filterActions, a as filterDestinations, b as filterDestinationsByStream, e as filterSources, g as filterSourcesByStream, h as formatBytes, j as getContainersIcons, i as getContainersInstrumentedCount, k as getDestinationIcon, l as getEntityIcon, m as getEntityLabel, n as getMetricForEntity, o as getPlatformIcon, p as getPlatformLabel, q as getValueForRange, r as getWorkloadId, s as getYamlFieldsForDestination, t as hasUnhealthyInstances, u as isOverTime, v as mapDestinationFieldsForDisplay, w as sleep } from './index-746078ec.js';
3
- export { g as getActionIcon, c as getEntityId, d as getInstrumentationRuleIcon, e as getProgrammingLanguageIcon } from './index-a4a96604.js';
1
+ export { c as capitalizeFirstLetter, f as flattenObjectKeys, g as getConditionsBooleans, a as getMonitorIcon, b as getStatusIcon, i as isStringABoolean, d as isValidVersion, m as mapConditions, n as numbersOnly, p as parseBooleanFromString, e as parseJsonStringToPrettyString, r as removeEmptyValuesFromObject, s as safeJsonStringify, h as splitCamelString } from './index-355d023b.js';
2
+ export { c as compareCondition, d as deepClone, f as filterActions, a as filterDestinations, b as filterDestinationsByStream, e as filterSources, g as filterSourcesByStream, h as formatBytes, j as getContainersIcons, i as getContainersInstrumentedCount, k as getDestinationIcon, l as getEntityIcon, m as getEntityLabel, n as getMetricForEntity, o as getPlatformIcon, p as getPlatformLabel, q as getValueForRange, r as getWorkloadId, s as getYamlFieldsForDestination, t as hasUnhealthyInstances, u as isOverTime, v as mapDestinationFieldsForDisplay, w as sleep } from './index-f2c2de35.js';
3
+ export { g as getActionIcon, c as getEntityId, d as getInstrumentationRuleIcon, e as getProgrammingLanguageIcon } from './index-e9b26c29.js';
4
4
  export { g as getIdFromSseTarget, i as isLegalK8sLabel, m as mapExportedSignals } from './index-6a6bea6e.js';
5
5
  import { ProgrammingLanguages, EntityTypes } from './types.js';
6
6
  export { i as isEmpty, s as safeJsonParse } from './index-ec555530.js';
7
7
  import 'react';
8
8
  import 'styled-components';
9
- import './index-15342ca8.js';
10
- import './index-7d331ab3.js';
9
+ import './index-630dec93.js';
10
+ import './index-27fc9053.js';
11
11
 
12
12
  const cleanObjectEmptyStringsValues = (obj) => {
13
13
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -2,6 +2,7 @@ import type { AnyObj } from '@/types';
2
2
  export declare const useGenericForm: <Form extends AnyObj>(initialFormData: Form) => {
3
3
  formData: Form;
4
4
  formErrors: Partial<Record<keyof Form, string>>;
5
+ isFormDirty: boolean;
5
6
  handleFormChange: (key?: keyof Form | string, val?: any, obj?: Form) => void;
6
7
  handleErrorChange: (key?: keyof Form | string, val?: string, obj?: Partial<Record<keyof Form, string>>) => void;
7
8
  resetFormData: () => void;
@@ -22,6 +22,8 @@ export interface UseSourceSelectionFormData {
22
22
  setSearchBy: Dispatch<SetStateAction<EntityTypes>>;
23
23
  showSelectedOnly: boolean;
24
24
  setShowSelectedOnly: Dispatch<SetStateAction<boolean>>;
25
+ showRunningOnly: boolean;
26
+ setShowRunningOnly: Dispatch<SetStateAction<boolean>>;
25
27
  }
26
28
  export declare const useSourceSelectionFormData: (params?: UseSourceFormDataParams) => UseSourceSelectionFormData;
27
29
  export {};
package/lib/hooks.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import { ActionKeyTypes, ActionType, StatusType, EntityTypes, FieldTypes } from './types.js';
2
- import { V as useNotificationStore, F as FORM_ALERTS, O as useDrawerStore, W as useEntityStore, Y as useDataStreamStore, _ as useSetupStore } from './index-a4a96604.js';
2
+ import { V as useNotificationStore, F as FORM_ALERTS, O as useDrawerStore, W as useEntityStore, Y as useDataStreamStore, _ as useSetupStore } from './index-e9b26c29.js';
3
3
  import { useState, useEffect, useMemo } from 'react';
4
4
  import 'styled-components';
5
5
  import { i as isEmpty, s as safeJsonParse } from './index-ec555530.js';
6
- import { i as useGenericForm } from './useTransition-7826f3d7.js';
7
- export { c as useClickNode, b as useContainerSize, h as useCopy, e as useInstrumentationRuleFormData, u as useKeyDown, a as useOnClickOutside, d as usePopup, g as useTimeAgo, f as useTransition } from './useTransition-7826f3d7.js';
6
+ import { i as useGenericForm } from './useTransition-242df96b.js';
7
+ export { c as useClickNode, b as useContainerSize, h as useCopy, e as useInstrumentationRuleFormData, u as useKeyDown, a as useOnClickOutside, d as usePopup, g as useTimeAgo, f as useTransition } from './useTransition-242df96b.js';
8
8
  import { g as getIdFromSseTarget, i as isLegalK8sLabel, m as mapExportedSignals } from './index-6a6bea6e.js';
9
9
 
10
10
  const INITIAL$2 = {
@@ -253,14 +253,8 @@ const buildFormDynamicFields = (fields) => {
253
253
  case FieldTypes.Dropdown: {
254
254
  const componentPropertiesJson = safeJsonParse(componentProperties, {});
255
255
  const options = Array.isArray(componentPropertiesJson.values)
256
- ? componentPropertiesJson.values.map((value) => ({
257
- id: value,
258
- value,
259
- }))
260
- : Object.entries(componentPropertiesJson.values).map(([key, value]) => ({
261
- id: key,
262
- value,
263
- }));
256
+ ? componentPropertiesJson.values.map((value) => ({ id: value, value }))
257
+ : Object.entries(componentPropertiesJson.values).map(([key, value]) => ({ id: key, value }));
264
258
  return {
265
259
  name,
266
260
  componentType: componentType,
@@ -523,6 +517,7 @@ const useSourceSelectionFormData = (params) => {
523
517
  const [searchText, setSearchText] = useState('');
524
518
  const [searchBy, setSearchBy] = useState(EntityTypes.Source);
525
519
  const [showSelectedOnly, setShowSelectedOnly] = useState(false);
520
+ const [showRunningOnly, setShowRunningOnly] = useState(false);
526
521
  const onSelectNamespace = (nsName, selectAll) => {
527
522
  const ns = namespaces.find((namespace) => namespace.name === nsName);
528
523
  if (ns) {
@@ -557,15 +552,16 @@ const useSourceSelectionFormData = (params) => {
557
552
  const filteredNamespacesAndSources = useMemo(() => {
558
553
  const isSearchOk = (targetText, entityType) => !searchText || searchBy !== entityType || (searchBy === entityType && targetText.toLowerCase().includes(searchText));
559
554
  const isOnlySelectedOk = (source) => !showSelectedOnly || source.selected;
555
+ const isRunningOnlyOk = (source) => !showRunningOnly || (source.numberOfInstances || 0) > 0;
560
556
  const payload = {};
561
- const filteredNamespacesMatrix = Object.entries(selectedSources).filter(([ns]) => {
562
- return isSearchOk(ns, EntityTypes.Namespace);
563
- });
557
+ const filteredNamespacesMatrix = Object.entries(selectedSources).filter(([ns]) => isSearchOk(ns, EntityTypes.Namespace));
564
558
  filteredNamespacesMatrix.forEach(([ns, srcs]) => {
565
- payload[ns] = srcs.filter((src) => isSearchOk(src.name, EntityTypes.Source) && isOnlySelectedOk(src));
559
+ const filteredSources = srcs.filter((src) => isSearchOk(src.name, EntityTypes.Source) && isOnlySelectedOk(src) && isRunningOnlyOk(src));
560
+ if (filteredSources.length)
561
+ payload[ns] = filteredSources;
566
562
  });
567
563
  return payload;
568
- }, [selectedSources, searchText, searchBy, showSelectedOnly]);
564
+ }, [selectedSources, searchText, searchBy, showSelectedOnly, showRunningOnly]);
569
565
  // This is to filter the user-specific-selections, therebey minimizing the amount of data sent to the API on "persist sources".
570
566
  const getApiSourcesPayload = () => {
571
567
  const payload = {};
@@ -609,6 +605,8 @@ const useSourceSelectionFormData = (params) => {
609
605
  setSearchBy,
610
606
  showSelectedOnly,
611
607
  setShowSelectedOnly,
608
+ showRunningOnly,
609
+ setShowRunningOnly,
612
610
  };
613
611
  };
614
612
 
package/lib/icons.js CHANGED
@@ -1,10 +1,10 @@
1
- import { T as Theme } from './index-a4a96604.js';
2
- export { f as AddClusterInfoIcon, n as CPlusPlusLogo, o as CSharpLogo, C as CodeAttributesIcon, l as CustomInstrumentationIcon, h as DeleteAttributeIcon, p as DotnetLogo, E as ElixirLogo, G as GoLogo, H as HeadersCollectionIcon, j as ImageErrorIcon, J as JavaLogo, K as K8sLogo, k as KafkaLogo, q as MysqlLogo, N as NginxLogo, r as NodejsLogo, m as PayloadCollectionIcon, s as PhpLogo, P as PiiMaskingIcon, t as PostgresLogo, u as PythonLogo, v as RedisLogo, R as RenameAttributeIcon, w as RubyLogo, x as RustLogo, i as SamplerIcon, y as SwiftLogo } from './index-a4a96604.js';
3
- export { C as CheckCircledIcon, E as ErrorTriangleIcon, I as InfoIcon, L as LogsIcon, M as MetricsIcon, O as OdigosLogo, T as TracesIcon, W as WarningTriangleIcon } from './index-15342ca8.js';
4
- export { C as CrossCircledIcon, D as DataStreamsIcon, F as FilterIcon, K as KeyIcon, N as NotificationIcon, O as OdigosLogoText, a as OverviewIcon, R as RetryIcon, S as SlackLogo, T as TerminalIcon, U as UserIcon } from './index-1f42dc81.js';
5
- export { A as ArrowIcon, h as CheckIcon, C as CodeIcon, a as CopyIcon, i as CrossIcon, E as EditIcon, b as EditedIcon, c as ExtendArrowIcon, f as EyeClosedIcon, g as EyeOpenIcon, L as ListIcon, M as MinusIcon, N as NoDataIcon, d as NotebookIcon, P as PlusIcon, S as SearchIcon, e as SortArrowsIcon, T as TrashIcon, X as XIcon } from './index-3f1cbe2e.js';
1
+ import { T as Theme } from './index-e9b26c29.js';
2
+ export { f as AddClusterInfoIcon, n as CPlusPlusLogo, o as CSharpLogo, C as CodeAttributesIcon, l as CustomInstrumentationIcon, h as DeleteAttributeIcon, p as DotnetLogo, E as ElixirLogo, G as GoLogo, H as HeadersCollectionIcon, j as ImageErrorIcon, J as JavaLogo, K as K8sLogo, k as KafkaLogo, q as MysqlLogo, N as NginxLogo, r as NodejsLogo, m as PayloadCollectionIcon, s as PhpLogo, P as PiiMaskingIcon, t as PostgresLogo, u as PythonLogo, v as RedisLogo, R as RenameAttributeIcon, w as RubyLogo, x as RustLogo, i as SamplerIcon, y as SwiftLogo } from './index-e9b26c29.js';
3
+ export { C as CheckCircledIcon, E as ErrorTriangleIcon, I as InfoIcon, L as LogsIcon, M as MetricsIcon, O as OdigosLogo, T as TracesIcon, W as WarningTriangleIcon } from './index-630dec93.js';
4
+ export { C as CrossCircledIcon, D as DataStreamsIcon, F as FilterIcon, K as KeyIcon, N as NotificationIcon, O as OdigosLogoText, a as OverviewIcon, R as RetryIcon, S as SlackLogo, T as TerminalIcon, U as UserIcon } from './index-3de83c73.js';
5
+ export { A as ArrowIcon, h as CheckIcon, C as CodeIcon, a as CopyIcon, i as CrossIcon, E as EditIcon, b as EditedIcon, c as ExtendArrowIcon, f as EyeClosedIcon, g as EyeOpenIcon, L as ListIcon, M as MinusIcon, N as NoDataIcon, d as NotebookIcon, P as PlusIcon, S as SearchIcon, e as SortArrowsIcon, T as TrashIcon, X as XIcon } from './index-0001f711.js';
6
6
  import React from 'react';
7
- export { a3 as ActionsIcon, A as AlaudaLogo, a as AlibabaCloudLogo, b as AppDynamicsLogo, c as AwsCloudwatchLogo, d as AwsS3Logo, e as AwsXrayLogo, f as AxiomLogo, B as BetterStackLogo, g as BlobStorageLogo, h as BonreeLogo, C as CauselyLogo, i as ChecklyLogo, j as ChronosphereLogo, k as ClickhouseLogo, l as CoralogixLogo, D as Dash0Logo, m as DatadogLogo, a4 as DestinationsIcon, n as DynatraceLogo, E as ElasticApmLogo, o as ElasticSearchLogo, G as GigapipeLogo, p as GoogleCloudPlatformLogo, q as GrafanaLogo, r as GreptimeLogo, s as GroundcoverLogo, H as HoneycombLogo, t as HyperDxLogo, I as InstanaLogo, J as JaegerLogo, K as KloudmateLogo, L as Last9Logo, u as LightstepLogo, v as LogzioLogo, w as LokiLogo, x as LumigoLogo, M as MiddlewareLogo, a5 as NamespacesIcon, N as NewRelicLogo, O as ObserveLogo, y as OneUptimeLogo, z as OpenObserveLogo, F as OpenTelemetryLogo, P as OpsVerseLogo, Q as OracleLogo, R as PrometheusLogo, S as QrynLogo, T as QuickwitLogo, a6 as RulesIcon, U as SeqLogo, W as SignozLogo, a7 as SourcesIcon, X as SplunkLogo, Y as SumoLogicLogo, Z as TelemetryHubLogo, _ as TempoLogo, $ as TingyunLogo, a0 as TraceloopLogo, a1 as UptraceLogo, a2 as VictoriaMetricsLogo, V as VmLogo } from './index-7d331ab3.js';
7
+ export { a3 as ActionsIcon, A as AlaudaLogo, a as AlibabaCloudLogo, b as AppDynamicsLogo, c as AwsCloudwatchLogo, d as AwsS3Logo, e as AwsXrayLogo, f as AxiomLogo, B as BetterStackLogo, g as BlobStorageLogo, h as BonreeLogo, C as CauselyLogo, i as ChecklyLogo, j as ChronosphereLogo, k as ClickhouseLogo, l as CoralogixLogo, D as Dash0Logo, m as DatadogLogo, a4 as DestinationsIcon, n as DynatraceLogo, E as ElasticApmLogo, o as ElasticSearchLogo, G as GigapipeLogo, p as GoogleCloudPlatformLogo, q as GrafanaLogo, r as GreptimeLogo, s as GroundcoverLogo, H as HoneycombLogo, t as HyperDxLogo, I as InstanaLogo, J as JaegerLogo, K as KloudmateLogo, L as Last9Logo, u as LightstepLogo, v as LogzioLogo, w as LokiLogo, x as LumigoLogo, M as MiddlewareLogo, a5 as NamespacesIcon, N as NewRelicLogo, O as ObserveLogo, y as OneUptimeLogo, z as OpenObserveLogo, F as OpenTelemetryLogo, P as OpsVerseLogo, Q as OracleLogo, R as PrometheusLogo, S as QrynLogo, T as QuickwitLogo, a6 as RulesIcon, U as SeqLogo, W as SignozLogo, a7 as SourcesIcon, X as SplunkLogo, Y as SumoLogicLogo, Z as TelemetryHubLogo, _ as TempoLogo, $ as TingyunLogo, a0 as TraceloopLogo, a1 as UptraceLogo, a2 as VictoriaMetricsLogo, V as VmLogo } from './index-27fc9053.js';
8
8
  import './types.js';
9
9
  import 'styled-components';
10
10
 
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { T as Theme } from './index-a4a96604.js';
2
+ import { T as Theme } from './index-e9b26c29.js';
3
3
 
4
4
  const ArrowIcon = ({ size = 16, fill: f, rotate = 0, onClick }) => {
5
5
  const theme = Theme.useTheme();
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { T as Theme } from './index-a4a96604.js';
2
+ import { T as Theme } from './index-e9b26c29.js';
3
3
 
4
4
  const VmLogo = ({ size = 16, fill: f, rotate = 0, onClick, strokeWidth = 1 }) => {
5
5
  const theme = Theme.useTheme();
@@ -1,8 +1,8 @@
1
1
  import { StatusType, OtherStatus, SignalType } from './types.js';
2
2
  import 'react';
3
- import './index-a4a96604.js';
3
+ import './index-e9b26c29.js';
4
4
  import 'styled-components';
5
- import { L as LogsIcon, M as MetricsIcon, T as TracesIcon, C as CheckCircledIcon, E as ErrorTriangleIcon, W as WarningTriangleIcon, I as InfoIcon, O as OdigosLogo } from './index-15342ca8.js';
5
+ import { L as LogsIcon, M as MetricsIcon, T as TracesIcon, C as CheckCircledIcon, E as ErrorTriangleIcon, W as WarningTriangleIcon, I as InfoIcon, O as OdigosLogo } from './index-630dec93.js';
6
6
 
7
7
  const capitalizeFirstLetter = (string) => {
8
8
  return string.charAt(0).toUpperCase() + string.slice(1);
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { T as Theme } from './index-a4a96604.js';
2
+ import { T as Theme } from './index-e9b26c29.js';
3
3
 
4
4
  const OdigosLogoText = ({ size = 16, fill: f, rotate = 0, onClick }) => {
5
5
  const theme = Theme.useTheme();
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { T as Theme } from './index-a4a96604.js';
2
+ import { T as Theme } from './index-e9b26c29.js';
3
3
 
4
4
  const OdigosLogo = ({ size = 16, fill: f, rotate = 0, onClick }) => {
5
5
  const theme = Theme.useTheme();
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
- import { a2 as WarningModal } from './index-9d7ee546.js';
2
+ import { a2 as WarningModal } from './index-e6385bb5.js';
3
3
  import { StatusType, EntityTypes } from './types.js';
4
- import './index-a4a96604.js';
4
+ import './index-e9b26c29.js';
5
5
  import 'styled-components';
6
6
 
7
7
  const CancelWarning = ({ isOpen, noOverlay, name, onApprove, onDeny }) => {
@@ -1,13 +1,13 @@
1
1
  import React, { useState, useEffect, useRef, forwardRef, useMemo, createElement, useCallback, Fragment, createContext, memo, useContext, useLayoutEffect } from 'react';
2
- import { T as Theme, B as BUTTON_TEXTS, j as ImageErrorIcon, M as MONITORS_OPTIONS, a1 as styleInject, U as usePendingStore, $ as useSelectedStore, Z as useInstrumentStore, Q as useActiveNodeStore, V as useNotificationStore, b as DISPLAY_TITLES, L as LANGUAGE_OPTIONS, F as FORM_ALERTS, D as DISPLAY_LANGUAGES, e as getProgrammingLanguageIcon } from './index-a4a96604.js';
2
+ import { T as Theme, B as BUTTON_TEXTS, j as ImageErrorIcon, M as MONITORS_OPTIONS, a1 as styleInject, U as usePendingStore, $ as useSelectedStore, Z as useInstrumentStore, Q as useActiveNodeStore, V as useNotificationStore, b as DISPLAY_TITLES, L as LANGUAGE_OPTIONS, F as FORM_ALERTS, D as DISPLAY_LANGUAGES, e as getProgrammingLanguageIcon } from './index-e9b26c29.js';
3
3
  import { StatusType, OtherStatus, EntityTypes, NodeTypes, AddNodeTypes, EdgeTypes, ProgrammingLanguages, IntrumentationStatus, SortDirection, InputTypes, FieldTypes } from './types.js';
4
- import { M as MinusIcon$1, h as CheckIcon, L as ListIcon, C as CodeIcon, c as ExtendArrowIcon, P as PlusIcon$1, a as CopyIcon, E as EditIcon, b as EditedIcon, e as SortArrowsIcon, d as NotebookIcon, X as XIcon, f as EyeClosedIcon, g as EyeOpenIcon, N as NoDataIcon, i as CrossIcon, S as SearchIcon, T as TrashIcon, A as ArrowIcon } from './index-3f1cbe2e.js';
5
- import { b as getStatusIcon, r as removeEmptyValuesFromObject, s as safeJsonStringify, f as flattenObjectKeys, m as mapConditions, g as getConditionsBooleans, c as capitalizeFirstLetter, a as getMonitorIcon, i as isStringABoolean, p as parseBooleanFromString, d as isValidVersion, h as splitCamelString, e as parseJsonStringToPrettyString, n as numbersOnly } from './index-ebd8218b.js';
4
+ import { M as MinusIcon$1, h as CheckIcon, L as ListIcon, C as CodeIcon, c as ExtendArrowIcon, P as PlusIcon$1, a as CopyIcon, E as EditIcon, b as EditedIcon, e as SortArrowsIcon, d as NotebookIcon, X as XIcon, f as EyeClosedIcon, g as EyeOpenIcon, N as NoDataIcon, i as CrossIcon, S as SearchIcon, T as TrashIcon, A as ArrowIcon } from './index-0001f711.js';
5
+ import { b as getStatusIcon, r as removeEmptyValuesFromObject, s as safeJsonStringify, f as flattenObjectKeys, m as mapConditions, g as getConditionsBooleans, c as capitalizeFirstLetter, a as getMonitorIcon, i as isStringABoolean, p as parseBooleanFromString, d as isValidVersion, h as splitCamelString, e as parseJsonStringToPrettyString, n as numbersOnly } from './index-355d023b.js';
6
6
  import styled, { css } from 'styled-components';
7
7
  import { s as safeJsonParse, i as isEmpty } from './index-ec555530.js';
8
8
  import ReactDOM, { createPortal } from 'react-dom';
9
- import { d as usePopup, h as useCopy, c as useClickNode, i as useGenericForm, b as useContainerSize, f as useTransition, u as useKeyDown, a as useOnClickOutside } from './useTransition-7826f3d7.js';
10
- import { I as InfoIcon } from './index-15342ca8.js';
9
+ import { d as usePopup, h as useCopy, c as useClickNode, i as useGenericForm, b as useContainerSize, f as useTransition, u as useKeyDown, a as useOnClickOutside } from './useTransition-242df96b.js';
10
+ import { I as InfoIcon } from './index-630dec93.js';
11
11
 
12
12
  const TextWrapper$2 = styled.div `
13
13
  color: ${({ $color, theme }) => $color || theme.text.secondary};
@@ -394,6 +394,7 @@ Popup.displayName = Popup.name;
394
394
  const FlexRow = styled.div `
395
395
  display: flex;
396
396
  flex-direction: row;
397
+ flex-wrap: ${({ $wrap = 'unset' }) => $wrap};
397
398
  align-items: ${({ $alignItems = 'center' }) => $alignItems};
398
399
  justify-content: ${({ $justifyContent = 'unset' }) => $justifyContent};
399
400
  gap: ${({ $gap = 2 }) => $gap}px;
@@ -401,6 +402,9 @@ const FlexRow = styled.div `
401
402
  const FlexColumn = styled.div `
402
403
  display: flex;
403
404
  flex-direction: column;
405
+ flex-wrap: ${({ $wrap = 'unset' }) => $wrap};
406
+ align-items: ${({ $alignItems = 'unset' }) => $alignItems};
407
+ justify-content: ${({ $justifyContent = 'unset' }) => $justifyContent};
404
408
  gap: ${({ $gap = 2 }) => $gap}px;
405
409
  `;
406
410
  const CenterThis = styled(FlexColumn) `
@@ -16963,7 +16967,7 @@ const OverrideRuntime = ({ defaultLanguage = ProgrammingLanguages.Unknown, defau
16963
16967
  React.createElement(Input, { title: DISPLAY_TITLES.RUNTIME_VERSION, placeholder: DISPLAY_TITLES.VERSION_PLACEHOLDER, value: formData.version, onChange: (e) => handleFormChange('version', e.target.value), required: false }))));
16964
16968
  };
16965
16969
 
16966
- const AlignCenter = styled(FlexRow) `
16970
+ const AlignCenter$1 = styled(FlexRow) `
16967
16971
  width: 100%;
16968
16972
  justify-content: center;
16969
16973
  `;
@@ -16973,7 +16977,7 @@ const SourceContainer = ({ containerName, language, runtimeVersion, overriden, i
16973
16977
  const instruStatusTitle = instrumented ? IntrumentationStatus.INSTRUMENTED : !instrumentationMessage ? IntrumentationStatus.INSTRUMENTING : IntrumentationStatus.NOT_INSTRUMENTED;
16974
16978
  return (React.createElement(DataTab, { title: containerName, subTitle: `${language ? DISPLAY_LANGUAGES[language] : 'no runtime info'}` + (runtimeVersion ? ` • Runtime Version: ${runtimeVersion}` : ''), iconProps: { icon: getProgrammingLanguageIcon(language) }, extendableProps: {
16975
16979
  isExtended: !!instrumentationMessage,
16976
- renderExtended: () => (React.createElement(AlignCenter, null,
16980
+ renderExtended: () => (React.createElement(AlignCenter$1, null,
16977
16981
  React.createElement(Text, { size: 12, family: 'secondary', color: theme.text.info }, splitCamelString(instrumentationMessage)))),
16978
16982
  }, renderActions: () => (React.createElement(React.Fragment, null,
16979
16983
  React.createElement(Status, { status: instruStatusType, title: instruStatusTitle, subtitle: otelDistroName || undefined, withIcon: true, withBorder: true }),
@@ -17408,6 +17412,9 @@ const Container$i = styled.div `
17408
17412
  const AlignLeft$1 = styled(FlexRow) `
17409
17413
  margin-right: auto;
17410
17414
  `;
17415
+ const AlignCenter = styled(FlexRow) `
17416
+ margin: 0 auto;
17417
+ `;
17411
17418
  const AlignRight$1 = styled(FlexRow) `
17412
17419
  margin-left: auto;
17413
17420
  `;
@@ -17415,7 +17422,7 @@ const FooterButton$1 = styled(Button$4) `
17415
17422
  min-width: 140px;
17416
17423
  font-size: 14px;
17417
17424
  `;
17418
- const DrawerFooter = ({ isOpen, leftButtons = [], rightButtons = [] }) => {
17425
+ const DrawerFooter = ({ isOpen, leftButtons = [], centerButtons = [], rightButtons = [] }) => {
17419
17426
  const Transition = useTransition({
17420
17427
  container: Container$i,
17421
17428
  animateIn: Theme.animations.slide.in['bottom'],
@@ -17423,6 +17430,7 @@ const DrawerFooter = ({ isOpen, leftButtons = [], rightButtons = [] }) => {
17423
17430
  });
17424
17431
  return (React.createElement(Transition, { enter: isOpen },
17425
17432
  React.createElement(AlignLeft$1, null, leftButtons.map((btn, i) => (React.createElement(FooterButton$1, { key: `footer-left-button-${i}`, ...btn })))),
17433
+ React.createElement(AlignCenter, null, centerButtons.map((btn, i) => (React.createElement(FooterButton$1, { key: `footer-center-button-${i}`, ...btn })))),
17426
17434
  React.createElement(AlignRight$1, null, rightButtons.map((btn, i) => (React.createElement(FooterButton$1, { key: `footer-right-button-${i}`, ...btn }))))));
17427
17435
  };
17428
17436
 
@@ -18672,15 +18680,20 @@ const Stepper = ({ data, currentStep = 0 }) => {
18672
18680
  step.subtitle && (React.createElement(Subtitle, { size: 10, weight: 300 }, step.subtitle))))))));
18673
18681
  };
18674
18682
 
18675
- const Container$4 = styled(Text) `
18683
+ const Container$4 = styled(FlexRow) `
18676
18684
  width: fit-content;
18685
+ gap: 6px;
18677
18686
  padding: 6px 12px;
18678
18687
  border-radius: 360px;
18679
18688
  background-color: ${({ $type, theme }) => theme.colors[$type]};
18689
+ `;
18690
+ const Typography = styled(Text) `
18680
18691
  color: ${({ $type, theme }) => theme.text[$type]};
18681
18692
  `;
18682
- const Tag = ({ type, children, title, size, family, ...props }) => {
18683
- return (React.createElement(Container$4, { "$type": type, size: size || 12, family: family || 'secondary', ...props }, children || title));
18693
+ const Tag = ({ type = StatusType.Info, icon: Icon, title, size, family, children, ...props }) => {
18694
+ return (React.createElement(Container$4, { "$type": type },
18695
+ Icon && React.createElement(Icon, null),
18696
+ React.createElement(Typography, { "$type": type, size: size || 12, family: family || 'secondary', ...props }, children || title)));
18684
18697
  };
18685
18698
 
18686
18699
  const Container$3 = styled.div `
@@ -726,6 +726,7 @@ const INSTRUMENTATION_RULE_OPTIONS = [
726
726
  description: 'Collect code attributes containing payload data to traces.',
727
727
  docsEndpoint: '/pipeline/rules/codeattributes',
728
728
  docsDescription: 'The "Code Attributes" Rule can be used to add code attributes containing payload data to traces.',
729
+ supportedLanguages: [ProgrammingLanguages.Go, ProgrammingLanguages.Python],
729
730
  },
730
731
  {
731
732
  type: InstrumentationRuleType.CustomInstrumentation,
@@ -734,6 +735,7 @@ const INSTRUMENTATION_RULE_OPTIONS = [
734
735
  description: 'Define custom instrumentation for specific class and method combinations.',
735
736
  docsEndpoint: '/pipeline/rules/custominstrumentation',
736
737
  docsDescription: 'The "Custom Instrumentation" Rule can be used to instrument specific class and method combinations for detailed tracing.',
738
+ supportedLanguages: [ProgrammingLanguages.Java],
737
739
  },
738
740
  {
739
741
  type: InstrumentationRuleType.HeadersCollection,
@@ -742,6 +744,7 @@ const INSTRUMENTATION_RULE_OPTIONS = [
742
744
  description: 'Collect span attributes containing HTTP Headers data to traces.',
743
745
  docsEndpoint: '/pipeline/rules/headerscollection',
744
746
  docsDescription: 'The "Headers Collection" Rule can be used to add span attributes containing HTTP Headers data to traces.',
747
+ supportedLanguages: [ProgrammingLanguages.Go, ProgrammingLanguages.Java],
745
748
  },
746
749
  {
747
750
  type: InstrumentationRuleType.PayloadCollection,
@@ -750,6 +753,7 @@ const INSTRUMENTATION_RULE_OPTIONS = [
750
753
  description: 'Collect span attributes containing payload data to traces.',
751
754
  docsEndpoint: '/pipeline/rules/payloadcollection',
752
755
  docsDescription: 'The "Payload Collection" Rule can be used to add span attributes containing payload data to traces.',
756
+ supportedLanguages: [ProgrammingLanguages.Go],
753
757
  },
754
758
  ];
755
759
 
@@ -998,7 +1002,8 @@ const DISPLAY_TITLES = {
998
1002
  FILTERED_COUNT_TOOLTIP: 'Represents filtered amount, out of total amount',
999
1003
  SEARCH_NAMESPACES: 'Search Namespaces',
1000
1004
  SEARCH_SOURCES: 'Search Sources',
1001
- SHOW_SELECTED_ONLY: 'Show selected only',
1005
+ ONLY_SELECTED: 'Only selected',
1006
+ ONLY_RUNNING_INSTANCES: 'Only running instances',
1002
1007
  TO_COLLECT_OTEL_DATA: 'To collect OpenTelemetry data',
1003
1008
  TO_MONITOR_OTEL_DATA: 'To monitor OpenTelemetry data',
1004
1009
  TO_MODIFY_OTEL_DATA: 'To modify OpenTelemetry data',
@@ -1,9 +1,9 @@
1
1
  import { StatusType, DestinationTypes, EntityTypes, PlatformType } from './types.js';
2
- import { a as DEFAULT_DATA_STREAM_NAME, e as getProgrammingLanguageIcon, k as KafkaLogo, K as K8sLogo } from './index-a4a96604.js';
2
+ import { a as DEFAULT_DATA_STREAM_NAME, e as getProgrammingLanguageIcon, k as KafkaLogo, K as K8sLogo } from './index-e9b26c29.js';
3
3
  import 'react';
4
4
  import 'styled-components';
5
- import { A as AlaudaLogo, a as AlibabaCloudLogo, b as AppDynamicsLogo, f as AxiomLogo, g as BlobStorageLogo, B as BetterStackLogo, h as BonreeLogo, C as CauselyLogo, i as ChecklyLogo, j as ChronosphereLogo, k as ClickhouseLogo, c as AwsCloudwatchLogo, l as CoralogixLogo, D as Dash0Logo, m as DatadogLogo, F as OpenTelemetryLogo, n as DynatraceLogo, E as ElasticApmLogo, o as ElasticSearchLogo, p as GoogleCloudPlatformLogo, q as GrafanaLogo, r as GreptimeLogo, s as GroundcoverLogo, H as HoneycombLogo, t as HyperDxLogo, I as InstanaLogo, J as JaegerLogo, K as KloudmateLogo, L as Last9Logo, u as LightstepLogo, v as LogzioLogo, w as LokiLogo, x as LumigoLogo, M as MiddlewareLogo, N as NewRelicLogo, O as ObserveLogo, y as OneUptimeLogo, z as OpenObserveLogo, P as OpsVerseLogo, Q as OracleLogo, R as PrometheusLogo, S as QrynLogo, G as GigapipeLogo, T as QuickwitLogo, d as AwsS3Logo, U as SeqLogo, W as SignozLogo, X as SplunkLogo, Y as SumoLogicLogo, Z as TelemetryHubLogo, _ as TempoLogo, $ as TingyunLogo, a0 as TraceloopLogo, a1 as UptraceLogo, a2 as VictoriaMetricsLogo, e as AwsXrayLogo, a5 as NamespacesIcon, a7 as SourcesIcon, a4 as DestinationsIcon, a3 as ActionsIcon, a6 as RulesIcon, V as VmLogo } from './index-7d331ab3.js';
6
- import { O as OdigosLogo } from './index-15342ca8.js';
5
+ import { A as AlaudaLogo, a as AlibabaCloudLogo, b as AppDynamicsLogo, f as AxiomLogo, g as BlobStorageLogo, B as BetterStackLogo, h as BonreeLogo, C as CauselyLogo, i as ChecklyLogo, j as ChronosphereLogo, k as ClickhouseLogo, c as AwsCloudwatchLogo, l as CoralogixLogo, D as Dash0Logo, m as DatadogLogo, F as OpenTelemetryLogo, n as DynatraceLogo, E as ElasticApmLogo, o as ElasticSearchLogo, p as GoogleCloudPlatformLogo, q as GrafanaLogo, r as GreptimeLogo, s as GroundcoverLogo, H as HoneycombLogo, t as HyperDxLogo, I as InstanaLogo, J as JaegerLogo, K as KloudmateLogo, L as Last9Logo, u as LightstepLogo, v as LogzioLogo, w as LokiLogo, x as LumigoLogo, M as MiddlewareLogo, N as NewRelicLogo, O as ObserveLogo, y as OneUptimeLogo, z as OpenObserveLogo, P as OpsVerseLogo, Q as OracleLogo, R as PrometheusLogo, S as QrynLogo, G as GigapipeLogo, T as QuickwitLogo, d as AwsS3Logo, U as SeqLogo, W as SignozLogo, X as SplunkLogo, Y as SumoLogicLogo, Z as TelemetryHubLogo, _ as TempoLogo, $ as TingyunLogo, a0 as TraceloopLogo, a1 as UptraceLogo, a2 as VictoriaMetricsLogo, e as AwsXrayLogo, a5 as NamespacesIcon, a7 as SourcesIcon, a4 as DestinationsIcon, a3 as ActionsIcon, a6 as RulesIcon, V as VmLogo } from './index-27fc9053.js';
6
+ import { O as OdigosLogo } from './index-630dec93.js';
7
7
  import { s as safeJsonParse } from './index-ec555530.js';
8
8
 
9
9
  const compareCondition = (renderCondition, fields) => {
@@ -2,7 +2,6 @@ import { K8sResourceKind, ProgrammingLanguages, type Source } from '@/types';
2
2
  export declare const MOCK_SOURCES_OTHER: Source[];
3
3
  export declare const MOCK_SOURCES_SIMPLE_DEMO: Source[];
4
4
  export declare const MOCK_SOURCES_GOOGLE: Source[];
5
- export declare const MOCK_SOURCES: Source[];
6
5
  export declare const MOCK_SOURCE_JAEGER: {
7
6
  namespace: string;
8
7
  name: string;
@@ -21,3 +20,4 @@ export declare const MOCK_SOURCE_JAEGER: {
21
20
  }[];
22
21
  conditions: never[];
23
22
  };
23
+ export declare const MOCK_SOURCES: Source[];
package/lib/snippets.js CHANGED
@@ -1,15 +1,15 @@
1
- import { B as Button, Z as Text, L as NotificationNote } from './index-9d7ee546.js';
2
- export { ah as AddButton, am as AddNode, an as BaseNode, aj as CopyText, ao as EdgedNode, af as Flow, ap as FrameNode, aq as HeaderNode, av as LabeledEdge, ar as MapItemNode, as as NoDataNode, ak as PodContainer, at as ScrollNode, au as SkeletonNode, al as SourceContainer, ac as nodeConfig } from './index-9d7ee546.js';
1
+ import { B as Button, Z as Text, L as NotificationNote } from './index-e6385bb5.js';
2
+ export { ah as AddButton, am as AddNode, an as BaseNode, aj as CopyText, ao as EdgedNode, af as Flow, ap as FrameNode, aq as HeaderNode, av as LabeledEdge, ar as MapItemNode, as as NoDataNode, ak as PodContainer, at as ScrollNode, au as SkeletonNode, al as SourceContainer, ac as nodeConfig } from './index-e6385bb5.js';
3
3
  import React from 'react';
4
- import { T as Theme, B as BUTTON_TEXTS, b as DISPLAY_TITLES } from './index-a4a96604.js';
5
- import { E as EditIcon } from './index-3f1cbe2e.js';
4
+ import { T as Theme, B as BUTTON_TEXTS, b as DISPLAY_TITLES } from './index-e9b26c29.js';
5
+ import { E as EditIcon } from './index-0001f711.js';
6
6
  import { StatusType } from './types.js';
7
7
  import 'styled-components';
8
- import { I as InfoIcon } from './index-15342ca8.js';
9
- import './index-ebd8218b.js';
8
+ import { I as InfoIcon } from './index-630dec93.js';
9
+ import './index-355d023b.js';
10
10
  import './index-ec555530.js';
11
11
  import 'react-dom';
12
- import './useTransition-7826f3d7.js';
12
+ import './useTransition-242df96b.js';
13
13
 
14
14
  const EditButton = ({ label, onClick, variant = 'tertiary', ...props }) => {
15
15
  const theme = Theme.useTheme();
package/lib/store.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Q as useActiveNodeStore, a0 as useDarkMode, Y as useDataStreamStore, O as useDrawerStore, W as useEntityStore, X as useFilterStore, Z as useInstrumentStore, z as useModalStore, V as useNotificationStore, U as usePendingStore, $ as useSelectedStore, _ as useSetupStore } from './index-a4a96604.js';
1
+ export { Q as useActiveNodeStore, a0 as useDarkMode, Y as useDataStreamStore, O as useDrawerStore, W as useEntityStore, X as useFilterStore, Z as useInstrumentStore, z as useModalStore, V as useNotificationStore, U as usePendingStore, $ as useSelectedStore, _ as useSetupStore } from './index-e9b26c29.js';
2
2
  import 'react';
3
3
  import './types.js';
4
4
  import 'styled-components';
package/lib/theme.js CHANGED
@@ -1,4 +1,4 @@
1
- export { T as default } from './index-a4a96604.js';
1
+ export { T as default } from './index-e9b26c29.js';
2
2
  import 'styled-components';
3
3
  import 'react';
4
4
  import './types.js';
@@ -1,5 +1,5 @@
1
- import type { SVG } from '../common';
2
1
  import type { WorkloadId } from '../sources';
2
+ import type { ProgrammingLanguages, SVG } from '../common';
3
3
  export declare enum InstrumentationRuleType {
4
4
  CodeAttributes = "CodeAttributes",
5
5
  HeadersCollection = "HeadersCollection",
@@ -86,9 +86,10 @@ export interface InstrumentationRuleOption {
86
86
  type: InstrumentationRuleType;
87
87
  icon: SVG;
88
88
  label: string;
89
- description?: string;
90
- docsEndpoint?: string;
91
- docsDescription?: string;
89
+ description: string;
90
+ docsEndpoint: string;
91
+ docsDescription: string;
92
+ supportedLanguages: ProgrammingLanguages[];
92
93
  }
93
94
  export type InstrumentationRuleFormData = Omit<InstrumentationRule, 'ruleId' | 'type' | 'mutable' | 'profileName'>;
94
95
  export {};
@@ -1,6 +1,6 @@
1
- import { z as useModalStore, O as useDrawerStore, Q as useActiveNodeStore } from './index-a4a96604.js';
1
+ import { z as useModalStore, O as useDrawerStore, Q as useActiveNodeStore } from './index-e9b26c29.js';
2
2
  import { AddNodeTypes, EntityTypes, PayloadCollectionKeyTypes, CodeAttributesKeyTypes, CustomInstrumentationsKeyTypes } from './types.js';
3
- import React, { useState, useRef, useEffect, useCallback } from 'react';
3
+ import React, { useState, useMemo, useRef, useEffect, useCallback } from 'react';
4
4
  import styled from 'styled-components';
5
5
 
6
6
  const useGenericForm = (initialFormData) => {
@@ -16,25 +16,17 @@ const useGenericForm = (initialFormData) => {
16
16
  const handleFormChange = (key, val, obj) => {
17
17
  if (key) {
18
18
  // this is for cases where the form contains objects such as "exportedSignals",
19
- // the object's child is targeted with a ".dot" for example: "exportedSignals.logs"
19
+ // the object's child is targeted with a "." for example: "exportedSignals.logs"
20
20
  const [parentKey, childKey] = key.toString().split('.');
21
- setFormData((prev) => {
22
- if (childKey) {
23
- return {
24
- ...prev,
25
- [parentKey]: {
26
- ...prev[parentKey],
27
- [childKey]: val,
28
- },
29
- };
30
- }
31
- else {
32
- return {
33
- ...prev,
34
- [parentKey]: val,
35
- };
36
- }
37
- });
21
+ setFormData((prev) => ({
22
+ ...prev,
23
+ [parentKey]: childKey
24
+ ? {
25
+ ...prev[parentKey],
26
+ [childKey]: val,
27
+ }
28
+ : val,
29
+ }));
38
30
  }
39
31
  else if (obj) {
40
32
  setFormData({ ...obj });
@@ -52,9 +44,13 @@ const useGenericForm = (initialFormData) => {
52
44
  setFormData(copyInitial());
53
45
  setFormErrors({});
54
46
  };
47
+ const isFormDirty = useMemo(() => {
48
+ return JSON.stringify(formData) !== JSON.stringify(initialFormData);
49
+ }, [formData, initialFormData]);
55
50
  return {
56
51
  formData,
57
52
  formErrors,
53
+ isFormDirty,
58
54
  handleFormChange,
59
55
  handleErrorChange,
60
56
  resetFormData,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odigos/ui-kit",
3
- "version": "0.0.57",
3
+ "version": "0.0.59",
4
4
  "author": "Odigos",
5
5
  "repository": {
6
6
  "type": "git",