@odigos/ui-kit 0.0.7 → 0.0.9

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 (87) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/lib/components/data-card/index.d.ts +1 -0
  3. package/lib/components/dropdown/dropdown.stories.d.ts +3 -2
  4. package/lib/components/error-boundary/error-boundary.stories.d.ts +9 -0
  5. package/lib/components/error-boundary/index.d.ts +5 -0
  6. package/lib/components/icon-title-badge/index.d.ts +1 -0
  7. package/lib/components/index.d.ts +1 -0
  8. package/lib/components.js +161 -10
  9. package/lib/constants.js +3 -3
  10. package/lib/containers/compute-platform-select/index.d.ts +4 -4
  11. package/lib/containers/compute-platforms/index.d.ts +3 -3
  12. package/lib/containers/compute-platforms-actions-menu/index.d.ts +2 -2
  13. package/lib/containers/data-flow/nodes/header-node.d.ts +2 -1
  14. package/lib/containers/dropdowns/connection-status-dropdown/index.d.ts +2 -2
  15. package/lib/containers/dropdowns/connection-type-dropdown/connection-type-dropdown.stories.d.ts +9 -0
  16. package/lib/containers/dropdowns/{platform-types-dropdown → connection-type-dropdown}/index.d.ts +5 -5
  17. package/lib/containers/dropdowns/index.d.ts +1 -1
  18. package/lib/containers.js +74 -67
  19. package/lib/data/sources/index.d.ts +1 -0
  20. package/lib/functions/get-containers-icons/index.d.ts +2 -2
  21. package/lib/functions/get-platform-icon/index.d.ts +1 -1
  22. package/lib/functions/get-platform-label/index.d.ts +1 -1
  23. package/lib/functions/get-programming-language-icon/index.d.ts +2 -2
  24. package/lib/functions.js +6 -6
  25. package/lib/hooks/useCopy.d.ts +1 -1
  26. package/lib/hooks.js +5 -5
  27. package/lib/icons/common/image-error-icon/image-error-icon.stories.d.ts +8 -0
  28. package/lib/icons/common/image-error-icon/index.d.ts +2 -0
  29. package/lib/icons/common/index.d.ts +1 -0
  30. package/lib/icons/index.d.ts +1 -0
  31. package/lib/icons/overview/connections-icon/connections-icon.stories.d.ts +8 -0
  32. package/lib/icons/overview/connections-icon/index.d.ts +2 -0
  33. package/lib/icons/overview/index.d.ts +1 -0
  34. package/lib/icons/programming-languages/c-plus-plus-logo/c-plus-plus-logo.stories.d.ts +8 -0
  35. package/lib/icons/programming-languages/c-plus-plus-logo/index.d.ts +2 -0
  36. package/lib/icons/programming-languages/c-sharp-logo/c-sharp-logo.stories.d.ts +8 -0
  37. package/lib/icons/programming-languages/c-sharp-logo/index.d.ts +2 -0
  38. package/lib/icons/programming-languages/dotnet-logo/dotnet-logo.stories.d.ts +8 -0
  39. package/lib/icons/programming-languages/dotnet-logo/index.d.ts +2 -0
  40. package/lib/icons/programming-languages/elixir-logo/elixir-logo.stories.d.ts +8 -0
  41. package/lib/icons/programming-languages/elixir-logo/index.d.ts +2 -0
  42. package/lib/icons/programming-languages/go-logo/go-logo.stories.d.ts +8 -0
  43. package/lib/icons/programming-languages/go-logo/index.d.ts +2 -0
  44. package/lib/icons/programming-languages/index.d.ts +17 -0
  45. package/lib/icons/programming-languages/java-logo/index.d.ts +2 -0
  46. package/lib/icons/programming-languages/java-logo/java-logo.stories.d.ts +8 -0
  47. package/lib/icons/programming-languages/kafka-logo/index.d.ts +2 -0
  48. package/lib/icons/programming-languages/kafka-logo/kafka-logo.stories.d.ts +8 -0
  49. package/lib/icons/programming-languages/mysql-logo/index.d.ts +2 -0
  50. package/lib/icons/programming-languages/mysql-logo/mysql-logo.stories.d.ts +8 -0
  51. package/lib/icons/programming-languages/nginx-logo/index.d.ts +2 -0
  52. package/lib/icons/programming-languages/nginx-logo/nginx-logo.stories.d.ts +8 -0
  53. package/lib/icons/programming-languages/nodejs-logo/index.d.ts +2 -0
  54. package/lib/icons/programming-languages/nodejs-logo/nodejs-logo.stories.d.ts +8 -0
  55. package/lib/icons/programming-languages/php-logo/index.d.ts +2 -0
  56. package/lib/icons/programming-languages/php-logo/php-logo.stories.d.ts +8 -0
  57. package/lib/icons/programming-languages/postgres-logo/index.d.ts +2 -0
  58. package/lib/icons/programming-languages/postgres-logo/postgres-logo.stories.d.ts +8 -0
  59. package/lib/icons/programming-languages/python-logo/index.d.ts +2 -0
  60. package/lib/icons/programming-languages/python-logo/python-logo.stories.d.ts +8 -0
  61. package/lib/icons/programming-languages/redis-logo/index.d.ts +2 -0
  62. package/lib/icons/programming-languages/redis-logo/redis-logo.stories.d.ts +8 -0
  63. package/lib/icons/programming-languages/ruby-logo/index.d.ts +2 -0
  64. package/lib/icons/programming-languages/ruby-logo/ruby-logo.stories.d.ts +8 -0
  65. package/lib/icons/programming-languages/rust-logo/index.d.ts +2 -0
  66. package/lib/icons/programming-languages/rust-logo/rust-logo.stories.d.ts +8 -0
  67. package/lib/icons/programming-languages/swift-logo/index.d.ts +2 -0
  68. package/lib/icons/programming-languages/swift-logo/swift-logo.stories.d.ts +8 -0
  69. package/lib/icons.js +11 -4
  70. package/lib/{index-4tCBQ2pl.js → index-Bc8gi9FH.js} +24 -26
  71. package/lib/{index-BhCi-TxF.js → index-BumPE6cF.js} +1 -1
  72. package/lib/{index-Byh3BO6S.js → index-CZe2VX28.js} +2 -2
  73. package/lib/{index-DRT_7tQl.js → index-DIcomki-.js} +12 -0
  74. package/lib/{index-BJxaoI0G.js → index-D_Qn2U89.js} +8 -1
  75. package/lib/{index-DUW6bkzG.js → index-g6Twdelv.js} +7 -3
  76. package/lib/index-ixs381n-.js +466 -0
  77. package/lib/{index-COMxdOJo.js → index-m62aT4IR.js} +28 -28
  78. package/lib/store/useEntityStore.d.ts +1 -0
  79. package/lib/store.js +1 -1
  80. package/lib/theme.js +1 -1
  81. package/lib/types/{compute-platform → connection}/index.d.ts +3 -3
  82. package/lib/types/index.d.ts +1 -1
  83. package/lib/{useSourceSelectionFormData-ClorQ_WP.js → useSourceSelectionFormData-BY6B70Kf.js} +5 -4
  84. package/lib/{useTransition-5w3VnEhL.js → useTransition-Dfxjcy-C.js} +25 -4
  85. package/package.json +4 -1
  86. package/lib/containers/dropdowns/platform-types-dropdown/platform-types-dropdown.stories.d.ts +0 -9
  87. package/lib/index-DLKEpJJm.js +0 -53
package/lib/containers.js CHANGED
@@ -1,20 +1,20 @@
1
1
  import React, { useState, useEffect, forwardRef, useImperativeHandle, useRef, useMemo, useId, memo, useContext, createContext, useCallback, useLayoutEffect, Fragment } from 'react';
2
2
  import styled, { css } from 'styled-components';
3
- import { A as ACTION_OPTIONS, M as MONITORS_OPTIONS, I as INSTRUMENTATION_RULE_OPTIONS } from './index-Byh3BO6S.js';
3
+ import { A as ACTION_OPTIONS, M as MONITORS_OPTIONS, I as INSTRUMENTATION_RULE_OPTIONS } from './index-CZe2VX28.js';
4
4
  import { D as DISPLAY_TITLES, F as FORM_ALERTS } from './index-Cu2uHOuh.js';
5
5
  import { ACTION_TYPE, ENTITY_TYPES, NOTIFICATION_TYPE, CRUD, OTHER_STATUS, NODE_TYPES, ADD_NODE_TYPES, EDGE_TYPES, FIELD_TYPES, SIGNAL_TYPE, CODE_ATTRIBUTES_KEY_TYPES, PAYLOAD_COLLECTION_KEY_TYPES, INSTRUMENTATION_RULE_TYPE } from './types.js';
6
- import { f as DATA_CARD_FIELD_TYPES, p as FieldLabel, b as Checkbox, o as FieldError, v as Input, x as InputTable, K as KeyValueInputsList, w as InputList, U as Text, O as Segment, S as SectionTitle, j as DocsButton, z as MonitorsCheckboxes, V as TextArea, k as Drawer, h as DeleteWarning, C as CancelWarning, d as ConditionDetails, D as DataCard, M as Modal, N as NavigationButtons, a2 as ModalBody, A as AutocompleteInput, i as Divider, Q as Status, _ as FlexRow, X as Tooltip, s as IconWrapped, G as MonitorsIcons, $ as FlexColumn, r as IconTitleBadge, y as InteractiveTable, a0 as CenterThis, J as NoDataFound, Y as TraceLoader, B as Badge, a as Button, E as ExtendArrow, n as Dropdown, a3 as getDefaultExportFromCjs, F as FadeLoader, g as DataTab, P as SkeletonLoader, W as Toggle, L as NotificationNote, R as Stepper, I as IconButton, e as DataCardFields, t as IconsNav, q as IconGroup } from './index-COMxdOJo.js';
7
- import { g as usePendingStore, f as useNotificationStore, a as useDrawerStore, b as useEntityStore, e as useModalStore, c as useFilterStore, s as styleInject, h as useSelectedStore, d as useInstrumentStore, k as getEntityId, i as useSetupStore, u as useDarkMode } from './index-DRT_7tQl.js';
6
+ import { f as DATA_CARD_FIELD_TYPES, p as FieldLabel, b as Checkbox, o as FieldError, v as Input, x as InputTable, K as KeyValueInputsList, w as InputList, U as Text, O as Segment, S as SectionTitle, j as DocsButton, z as MonitorsCheckboxes, V as TextArea, k as Drawer, h as DeleteWarning, C as CancelWarning, d as ConditionDetails, D as DataCard, M as Modal, N as NavigationButtons, a2 as ModalBody, A as AutocompleteInput, i as Divider, Q as Status, _ as FlexRow, X as Tooltip, s as IconWrapped, G as MonitorsIcons, $ as FlexColumn, r as IconTitleBadge, y as InteractiveTable, a0 as CenterThis, J as NoDataFound, Y as TraceLoader, a as Badge, B as Button, E as ExtendArrow, n as Dropdown, a3 as getDefaultExportFromCjs, F as FadeLoader, g as DataTab, P as SkeletonLoader, W as Toggle, L as NotificationNote, R as Stepper, I as IconButton, e as DataCardFields, t as IconsNav, q as IconGroup } from './index-m62aT4IR.js';
7
+ import { g as usePendingStore, f as useNotificationStore, a as useDrawerStore, b as useEntityStore, e as useModalStore, c as useFilterStore, s as styleInject, h as useSelectedStore, d as useInstrumentStore, k as getEntityId, i as useSetupStore, u as useDarkMode } from './index-DIcomki-.js';
8
8
  import Theme from './theme.js';
9
9
  import { i as isEmpty, s as safeJsonParse } from './index-BZS1ijMm.js';
10
- import { C as CheckCircledIcon, E as ErrorTriangleIcon, W as WarningTriangleIcon } from './index-DLKEpJJm.js';
10
+ import { i as CheckCircledIcon, h as ErrorTriangleIcon, W as WarningTriangleIcon } from './index-ixs381n-.js';
11
11
  import { C as CrossCircledIcon, E as EditIcon, O as OdigosLogoText, b as OverviewIcon, F as FilterIcon, N as NotificationIcon, S as SlackLogo, a as FolderIcon, K as KeyIcon, T as TerminalIcon } from './index-3KUV6Vlt.js';
12
- import { g as getActionIcon, a as getInstrumentationRuleIcon } from './index-BhCi-TxF.js';
13
- import { u as useActionFormData, a as useClickNode, c as useDestinationFormData, b as useClickNotification, d as useSourceFormData, e as useSourceSelectionFormData } from './useSourceSelectionFormData-ClorQ_WP.js';
14
- import { d as useKeyDown, e as useOnClickOutside, u as useContainerSize, c as useInstrumentationRuleFormData, g as useTransition, f as useTimeAgo, a as useCopy } from './useTransition-5w3VnEhL.js';
15
- import { T as TrashIcon, S as SearchIcon, P as PlusIcon$1, A as ArrowIcon, a as CopyIcon, f as CheckIcon, g as CrossIcon } from './index-BJxaoI0G.js';
16
- import { m as mapConditions, b as getStatusIcon, c as capitalizeFirstLetter } from './index-4tCBQ2pl.js';
17
- import { f as filterActions, g as getConditionsBooleans, j as getEntityLabel, i as getEntityIcon, s as sleep$1, l as getPlatformIcon, m as getPlatformLabel, d as formatBytes, h as getContainersIcons, n as getValueForRange, b as filterSources, a as filterDestinations, c as compareCondition, k as getMetricForEntity, e as getContainersInstrumentedCount, o as isOverTime } from './index-DUW6bkzG.js';
12
+ import { g as getActionIcon, a as getInstrumentationRuleIcon } from './index-BumPE6cF.js';
13
+ import { u as useActionFormData, a as useClickNode, c as useDestinationFormData, b as useClickNotification, d as useSourceFormData, e as useSourceSelectionFormData } from './useSourceSelectionFormData-BY6B70Kf.js';
14
+ import { d as useKeyDown, e as useOnClickOutside, u as useContainerSize, c as useInstrumentationRuleFormData, g as useTransition, f as useTimeAgo, a as useCopy } from './useTransition-Dfxjcy-C.js';
15
+ import { T as TrashIcon, S as SearchIcon, P as PlusIcon$1, A as ArrowIcon, a as CopyIcon, f as CheckIcon, g as CrossIcon } from './index-D_Qn2U89.js';
16
+ import { m as mapConditions, b as getStatusIcon, c as capitalizeFirstLetter } from './index-Bc8gi9FH.js';
17
+ import { f as filterActions, g as getConditionsBooleans, j as getEntityLabel, i as getEntityIcon, s as sleep$1, l as getPlatformIcon, m as getPlatformLabel, d as formatBytes, h as getContainersIcons, n as getValueForRange, b as filterSources, a as filterDestinations, c as compareCondition, k as getMetricForEntity, e as getContainersInstrumentedCount, o as isOverTime } from './index-g6Twdelv.js';
18
18
  import require$$1 from 'use-sync-external-store/shim';
19
19
  import { createPortal } from 'react-dom';
20
20
  import { O as OdigosLogo } from './index-BGlk5VhF.js';
@@ -800,11 +800,19 @@ const StyledButton = styled(Button) `
800
800
  background-color: ${({ theme }) => theme.colors.majestic_blue + Theme.opacity.hex['048']};
801
801
  }
802
802
  `;
803
+ const TextLimited = styled(Text) `
804
+ white-space: nowrap;
805
+ overflow: hidden;
806
+ text-overflow: ellipsis;
807
+ font-size: 14px;
808
+ `;
803
809
  const SelectionButton = ({ label, onClick, icon: Icon, iconSrc, badgeLabel, badgeFilled, isSelected, withBorder, color, hoverColor, style }) => {
804
810
  return (React.createElement(StyledButton, { onClick: onClick, className: isSelected ? 'selected' : 'not-selected', "$withBorder": withBorder, "$color": color, "$hoverColor": hoverColor, style: style },
805
- Icon && React.createElement(Icon, null),
806
- iconSrc && React.createElement("img", { src: iconSrc, alt: '', width: 16, height: 16 }),
807
- React.createElement(Text, { size: 14, style: { whiteSpace: 'nowrap' } }, label),
811
+ Icon && (React.createElement("div", null,
812
+ React.createElement(Icon, null))),
813
+ iconSrc && (React.createElement("div", null,
814
+ React.createElement("img", { src: iconSrc, alt: '', width: 16, height: 16 }))),
815
+ React.createElement(TextLimited, null, label),
808
816
  badgeLabel !== undefined && React.createElement(Badge, { label: badgeLabel, filled: badgeFilled || isSelected })));
809
817
  };
810
818
 
@@ -867,7 +875,7 @@ const FootWrap = styled.div `
867
875
  border-top: ${({ theme }) => `1px solid ${theme.colors.border}`};
868
876
  padding: 12px;
869
877
  `;
870
- const ComputePlatformSelect = ({ computePlatforms, selected, onSelect, onViewAll }) => {
878
+ const ComputePlatformSelect = ({ connections, selected, onSelect, onViewAll }) => {
871
879
  const theme = Theme.useTheme();
872
880
  const { addNotification } = useNotificationStore();
873
881
  const [isOpen, setIsOpen] = useState(false);
@@ -878,8 +886,8 @@ const ComputePlatformSelect = ({ computePlatforms, selected, onSelect, onViewAll
878
886
  const containerRef = useRef(null);
879
887
  useOnClickOutside(containerRef, onClose);
880
888
  useKeyDown({ key: 'Escape', active: isOpen }, onClose);
881
- const withSelect = !!computePlatforms.length;
882
- const filtered = computePlatforms.filter(({ id }) => id.toLowerCase().includes(searchText));
889
+ const withSelect = !!connections.length;
890
+ const filtered = connections.filter(({ id }) => id.toLowerCase().includes(searchText));
883
891
  const Icon = !!selected?.type ? getPlatformIcon(selected.type) : null;
884
892
  return (React.createElement(RelativeContainer$2, { ref: containerRef },
885
893
  React.createElement(Tab, { "$withSelect": withSelect, onClick: () => setIsOpen((prev) => !prev) },
@@ -890,8 +898,8 @@ const ComputePlatformSelect = ({ computePlatforms, selected, onSelect, onViewAll
890
898
  isOpen && withSelect && (React.createElement(AbsoluteContainer$2, null,
891
899
  React.createElement(HeadWrap, null,
892
900
  React.createElement(Input, { placeholder: 'Search...', icon: SearchIcon, value: searchText, onChange: (e) => setSearchText(e.target.value.toLowerCase()) })),
893
- React.createElement(VerticalScroll$1, { style: { maxHeight: '240px' } }, filtered.map(({ id, type, name, connectionStatus }, idx) => (React.createElement(SelectionButton, { key: `platform-${id}`, icon: () => getPlatformIcon(type)({ fill: connectionStatus === NOTIFICATION_TYPE.SUCCESS ? theme.text.success : theme.text.error }), label: `${!!name ? name : getPlatformLabel(type)} (${id})`, isSelected: selected?.id === id, onClick: () => {
894
- if (connectionStatus === NOTIFICATION_TYPE.SUCCESS) {
901
+ React.createElement(VerticalScroll$1, { style: { maxHeight: '240px' } }, filtered.map(({ id, type, name, status }, idx) => (React.createElement(SelectionButton, { key: `platform-${id}`, icon: () => getPlatformIcon(type)({ fill: status === NOTIFICATION_TYPE.SUCCESS ? theme.text.success : theme.text.error }), label: `${!!name ? name : getPlatformLabel(type)} (${id})`, isSelected: selected?.id === id, onClick: () => {
902
+ if (status === NOTIFICATION_TYPE.SUCCESS) {
895
903
  onSelect(filtered[idx]);
896
904
  }
897
905
  else {
@@ -908,11 +916,11 @@ const ComputePlatformSelect = ({ computePlatforms, selected, onSelect, onViewAll
908
916
  React.createElement(Button, { variant: 'secondary', style: { width: '100%' }, onClick: onViewAll }, "VIEW ALL"))))));
909
917
  };
910
918
 
911
- const ComputePlatforms = ({ computePlatforms, onSelect }) => {
919
+ const ComputePlatforms = ({ connections, onSelect }) => {
912
920
  const { searchText, platformTypes, statuses } = useFilterStore();
913
- const filtered = computePlatforms.filter(({ id, type, connectionStatus }) => (!searchText || id.toLowerCase().includes(searchText)) &&
921
+ const filtered = connections.filter(({ id, type, status }) => (!searchText || id.toLowerCase().includes(searchText)) &&
914
922
  (!platformTypes?.length || platformTypes.find((opt) => opt.id === type)) &&
915
- (!statuses?.length || statuses.find((opt) => opt.id === connectionStatus)));
923
+ (!statuses?.length || statuses.find((opt) => opt.id === status)));
916
924
  return (React.createElement(React.Fragment, null,
917
925
  React.createElement(InteractiveTable, { columns: [
918
926
  { key: 'icon', title: '' },
@@ -920,7 +928,7 @@ const ComputePlatforms = ({ computePlatforms, onSelect }) => {
920
928
  { key: 'type', title: 'Type' },
921
929
  { key: 'status', title: 'Status' },
922
930
  { key: 'id', title: 'Unique ID' },
923
- ], rows: filtered.map(({ id, name, type, connectionStatus }) => ({
931
+ ], rows: filtered.map(({ id, name, type, status }) => ({
924
932
  cells: [
925
933
  { columnKey: 'id', value: id },
926
934
  { columnKey: 'type', value: type },
@@ -929,7 +937,7 @@ const ComputePlatforms = ({ computePlatforms, onSelect }) => {
929
937
  {
930
938
  columnKey: 'status',
931
939
  component: () => (React.createElement("div", { style: { lineHeight: 1 } },
932
- React.createElement(Status, { title: connectionStatus === NOTIFICATION_TYPE.SUCCESS ? 'connection alive' : 'connection lost', status: connectionStatus, withIcon: true, withBorder: true }))),
940
+ React.createElement(Status, { title: status === NOTIFICATION_TYPE.SUCCESS ? 'connection alive' : 'connection lost', status: status, withIcon: true, withBorder: true }))),
933
941
  },
934
942
  ],
935
943
  })), onRowClick: (idx) => onSelect(filtered[idx]) }),
@@ -937,19 +945,32 @@ const ComputePlatforms = ({ computePlatforms, onSelect }) => {
937
945
  React.createElement(NoDataFound, null)))));
938
946
  };
939
947
 
940
- const ConnectionStatusDropdown = ({ computePlatforms, title = '', value, onSelect, onDeselect, ...props }) => {
948
+ const ConnectionStatusDropdown = ({ connections, title = '', value, onSelect, onDeselect, ...props }) => {
941
949
  const options = useMemo(() => {
942
950
  const payload = [];
943
- computePlatforms?.forEach(({ connectionStatus }) => {
944
- if (!payload.find((opt) => opt.id === connectionStatus)) {
945
- payload.push({ id: connectionStatus, value: connectionStatus });
951
+ connections?.forEach(({ status }) => {
952
+ if (!payload.find((opt) => opt.id === status)) {
953
+ payload.push({ id: status, value: status });
946
954
  }
947
955
  });
948
956
  return payload;
949
- }, [computePlatforms]);
957
+ }, [connections]);
950
958
  return React.createElement(Dropdown, { disabled: !options?.length, title: title, placeholder: 'All Statuses', options: options, value: value, onSelect: onSelect, onDeselect: onDeselect, ...props });
951
959
  };
952
960
 
961
+ const ConnectionTypeDropdown = ({ connections, title = '', value, onSelect, onDeselect, ...props }) => {
962
+ const options = useMemo(() => {
963
+ const payload = [];
964
+ connections?.forEach(({ type }) => {
965
+ if (!payload.find((opt) => opt.id === type)) {
966
+ payload.push({ id: type, value: type });
967
+ }
968
+ });
969
+ return payload;
970
+ }, [connections]);
971
+ return React.createElement(Dropdown, { disabled: !options?.length, title: title, placeholder: 'All Types', options: options, value: value, onSelect: onSelect, onDeselect: onDeselect, ...props });
972
+ };
973
+
953
974
  const ErrorDropdown = ({ title = 'Error Message', value, onSelect, onDeselect, disabled, ...props }) => {
954
975
  const { sources } = useEntityStore();
955
976
  const options = useMemo(() => {
@@ -1017,19 +1038,6 @@ const NamespaceDropdown = ({ namespaces, title = 'Namespace', value, onSelect, o
1017
1038
  return React.createElement(Dropdown, { disabled: !options?.length, title: title, placeholder: 'Select namespace', options: options, value: value, onSelect: onSelect, onDeselect: onDeselect, ...props });
1018
1039
  };
1019
1040
 
1020
- const PlatformTypesDropdown = ({ computePlatforms, title = '', value, onSelect, onDeselect, ...props }) => {
1021
- const options = useMemo(() => {
1022
- const payload = [];
1023
- computePlatforms?.forEach(({ type }) => {
1024
- if (!payload.find((opt) => opt.id === type)) {
1025
- payload.push({ id: type, value: type });
1026
- }
1027
- });
1028
- return payload;
1029
- }, [computePlatforms]);
1030
- return React.createElement(Dropdown, { disabled: !options?.length, title: title, placeholder: 'All Types', options: options, value: value, onSelect: onSelect, onDeselect: onDeselect, ...props });
1031
- };
1032
-
1033
1041
  const KindDropdown = ({ title = 'Kind', value, onSelect, onDeselect, ...props }) => {
1034
1042
  const { sources } = useEntityStore();
1035
1043
  const options = useMemo(() => {
@@ -1058,7 +1066,7 @@ const Title$1 = styled(Text) `
1058
1066
  const SearchAndFilterWrapper = styled.div `
1059
1067
  width: 200px;
1060
1068
  `;
1061
- const ComputePlatformsActionsMenu = ({ computePlatforms }) => {
1069
+ const ComputePlatformsActionsMenu = ({ connections }) => {
1062
1070
  const { searchText, setSearchText, statuses, setStatuses, clearAll } = useFilterStore();
1063
1071
  // cleanup filters on unmount
1064
1072
  useEffect(() => {
@@ -1068,12 +1076,12 @@ const ComputePlatformsActionsMenu = ({ computePlatforms }) => {
1068
1076
  React.createElement(FlexRow, { "$gap": 16 },
1069
1077
  React.createElement(FlexRow, { "$gap": 12 },
1070
1078
  React.createElement(Title$1, null, "Compute platforms"),
1071
- React.createElement(Badge, { label: computePlatforms.length, filled: !!computePlatforms.length })),
1079
+ React.createElement(Badge, { label: connections.length, filled: !!connections.length })),
1072
1080
  React.createElement(Divider, { orientation: 'vertical', length: '20px', margin: '0' }),
1073
1081
  React.createElement(SearchAndFilterWrapper, null,
1074
1082
  React.createElement(Input, { placeholder: 'Search...', icon: SearchIcon, value: searchText, onChange: (e) => setSearchText(e.target.value.toLowerCase()) })),
1075
1083
  React.createElement(SearchAndFilterWrapper, null,
1076
- React.createElement(ConnectionStatusDropdown, { computePlatforms: computePlatforms, value: statuses, onSelect: (val) => setStatuses([...(statuses || []), val]), onDeselect: (val) => setStatuses((statuses || []).filter((opt) => opt.id !== val.id)), showSearch: true, required: true, isMulti: true })))));
1084
+ React.createElement(ConnectionStatusDropdown, { connections: connections, value: statuses, onSelect: (val) => setStatuses([...(statuses || []), val]), onDeselect: (val) => setStatuses((statuses || []).filter((opt) => opt.id !== val.id)), showSearch: true, required: true, isMulti: true })))));
1077
1085
  };
1078
1086
 
1079
1087
  var css_248z = "/* this gets exported as style.css and can be used for the default theming */\n/* these are the necessary styles for React/Svelte Flow, they get used by base.css and style.css */\n.react-flow {\n direction: ltr;\n\n --xy-edge-stroke-default: #b1b1b7;\n --xy-edge-stroke-width-default: 1;\n --xy-edge-stroke-selected-default: #555;\n\n --xy-connectionline-stroke-default: #b1b1b7;\n --xy-connectionline-stroke-width-default: 1;\n\n --xy-attribution-background-color-default: rgba(255, 255, 255, 0.5);\n\n --xy-minimap-background-color-default: #fff;\n --xy-minimap-mask-background-color-default: rgb(240, 240, 240, 0.6);\n --xy-minimap-mask-stroke-color-default: transparent;\n --xy-minimap-mask-stroke-width-default: 1;\n --xy-minimap-node-background-color-default: #e2e2e2;\n --xy-minimap-node-stroke-color-default: transparent;\n --xy-minimap-node-stroke-width-default: 2;\n\n --xy-background-color-default: transparent;\n --xy-background-pattern-dots-color-default: #91919a;\n --xy-background-pattern-lines-color-default: #eee;\n --xy-background-pattern-cross-color-default: #e2e2e2;\n background-color: var(--xy-background-color, var(--xy-background-color-default));\n --xy-node-color-default: inherit;\n --xy-node-border-default: 1px solid #1a192b;\n --xy-node-background-color-default: #fff;\n --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);\n --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, 0.08);\n --xy-node-boxshadow-selected-default: 0 0 0 0.5px #1a192b;\n --xy-node-border-radius-default: 3px;\n\n --xy-handle-background-color-default: #1a192b;\n --xy-handle-border-color-default: #fff;\n\n --xy-selection-background-color-default: rgba(0, 89, 220, 0.08);\n --xy-selection-border-default: 1px dotted rgba(0, 89, 220, 0.8);\n\n --xy-controls-button-background-color-default: #fefefe;\n --xy-controls-button-background-color-hover-default: #f4f4f4;\n --xy-controls-button-color-default: inherit;\n --xy-controls-button-color-hover-default: inherit;\n --xy-controls-button-border-color-default: #eee;\n --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n\n --xy-edge-label-background-color-default: #ffffff;\n --xy-edge-label-color-default: inherit;\n --xy-resize-background-color-default: #3367d9;\n}\n.react-flow.dark {\n --xy-edge-stroke-default: #3e3e3e;\n --xy-edge-stroke-width-default: 1;\n --xy-edge-stroke-selected-default: #727272;\n\n --xy-connectionline-stroke-default: #b1b1b7;\n --xy-connectionline-stroke-width-default: 1;\n\n --xy-attribution-background-color-default: rgba(150, 150, 150, 0.25);\n\n --xy-minimap-background-color-default: #141414;\n --xy-minimap-mask-background-color-default: rgb(60, 60, 60, 0.6);\n --xy-minimap-mask-stroke-color-default: transparent;\n --xy-minimap-mask-stroke-width-default: 1;\n --xy-minimap-node-background-color-default: #2b2b2b;\n --xy-minimap-node-stroke-color-default: transparent;\n --xy-minimap-node-stroke-width-default: 2;\n\n --xy-background-color-default: #141414;\n --xy-background-pattern-dots-color-default: #777;\n --xy-background-pattern-lines-color-default: #777;\n --xy-background-pattern-cross-color-default: #777;\n --xy-node-color-default: #f8f8f8;\n --xy-node-border-default: 1px solid #3c3c3c;\n --xy-node-background-color-default: #1e1e1e;\n --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);\n --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, 0.08);\n --xy-node-boxshadow-selected-default: 0 0 0 0.5px #999;\n\n --xy-handle-background-color-default: #bebebe;\n --xy-handle-border-color-default: #1e1e1e;\n\n --xy-selection-background-color-default: rgba(200, 200, 220, 0.08);\n --xy-selection-border-default: 1px dotted rgba(200, 200, 220, 0.8);\n\n --xy-controls-button-background-color-default: #2b2b2b;\n --xy-controls-button-background-color-hover-default: #3e3e3e;\n --xy-controls-button-color-default: #f8f8f8;\n --xy-controls-button-color-hover-default: #fff;\n --xy-controls-button-border-color-default: #5b5b5b;\n --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n\n --xy-edge-label-background-color-default: #141414;\n --xy-edge-label-color-default: #f8f8f8;\n}\n.react-flow__background {\n background-color: var(--xy-background-color, var(--xy-background-color-props, var(--xy-background-color-default)));\n pointer-events: none;\n z-index: -1;\n}\n.react-flow__container {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n}\n.react-flow__pane {\n z-index: 1;\n}\n.react-flow__pane.draggable {\n cursor: grab;\n }\n.react-flow__pane.dragging {\n cursor: grabbing;\n }\n.react-flow__pane.selection {\n cursor: pointer;\n }\n.react-flow__viewport {\n transform-origin: 0 0;\n z-index: 2;\n pointer-events: none;\n}\n.react-flow__renderer {\n z-index: 4;\n}\n.react-flow__selection {\n z-index: 6;\n}\n.react-flow__nodesselection-rect:focus,\n.react-flow__nodesselection-rect:focus-visible {\n outline: none;\n}\n.react-flow__edge-path {\n stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n stroke-width: var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));\n fill: none;\n}\n.react-flow__connection-path {\n stroke: var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));\n stroke-width: var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));\n fill: none;\n}\n.react-flow .react-flow__edges {\n position: absolute;\n}\n.react-flow .react-flow__edges svg {\n overflow: visible;\n position: absolute;\n pointer-events: none;\n }\n.react-flow__edge {\n pointer-events: visibleStroke;\n}\n.react-flow__edge.selectable {\n cursor: pointer;\n }\n.react-flow__edge.animated path {\n stroke-dasharray: 5;\n animation: dashdraw 0.5s linear infinite;\n }\n.react-flow__edge.animated path.react-flow__edge-interaction {\n stroke-dasharray: none;\n animation: none;\n }\n.react-flow__edge.inactive {\n pointer-events: none;\n }\n.react-flow__edge.selected,\n .react-flow__edge:focus,\n .react-flow__edge:focus-visible {\n outline: none;\n }\n.react-flow__edge.selected .react-flow__edge-path,\n .react-flow__edge.selectable:focus .react-flow__edge-path,\n .react-flow__edge.selectable:focus-visible .react-flow__edge-path {\n stroke: var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default));\n }\n.react-flow__edge-textwrapper {\n pointer-events: all;\n }\n.react-flow__edge .react-flow__edge-text {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n.react-flow__connection {\n pointer-events: none;\n}\n.react-flow__connection .animated {\n stroke-dasharray: 5;\n animation: dashdraw 0.5s linear infinite;\n }\nsvg.react-flow__connectionline {\n z-index: 1001;\n overflow: visible;\n position: absolute;\n}\n.react-flow__nodes {\n pointer-events: none;\n transform-origin: 0 0;\n}\n.react-flow__node {\n position: absolute;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n pointer-events: all;\n transform-origin: 0 0;\n box-sizing: border-box;\n cursor: default;\n}\n.react-flow__node.selectable {\n cursor: pointer;\n }\n.react-flow__node.draggable {\n cursor: grab;\n pointer-events: all;\n }\n.react-flow__node.draggable.dragging {\n cursor: grabbing;\n }\n.react-flow__nodesselection {\n z-index: 3;\n transform-origin: left top;\n pointer-events: none;\n}\n.react-flow__nodesselection-rect {\n position: absolute;\n pointer-events: all;\n cursor: grab;\n }\n.react-flow__handle {\n position: absolute;\n pointer-events: none;\n min-width: 5px;\n min-height: 5px;\n width: 6px;\n height: 6px;\n background-color: var(--xy-handle-background-color, var(--xy-handle-background-color-default));\n border: 1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));\n border-radius: 100%;\n}\n.react-flow__handle.connectingfrom {\n pointer-events: all;\n }\n.react-flow__handle.connectionindicator {\n pointer-events: all;\n cursor: crosshair;\n }\n.react-flow__handle-bottom {\n top: auto;\n left: 50%;\n bottom: 0;\n transform: translate(-50%, 50%);\n }\n.react-flow__handle-top {\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n.react-flow__handle-left {\n top: 50%;\n left: 0;\n transform: translate(-50%, -50%);\n }\n.react-flow__handle-right {\n top: 50%;\n right: 0;\n transform: translate(50%, -50%);\n }\n.react-flow__edgeupdater {\n cursor: move;\n pointer-events: all;\n}\n.react-flow__panel {\n position: absolute;\n z-index: 5;\n margin: 15px;\n}\n.react-flow__panel.top {\n top: 0;\n }\n.react-flow__panel.bottom {\n bottom: 0;\n }\n.react-flow__panel.left {\n left: 0;\n }\n.react-flow__panel.right {\n right: 0;\n }\n.react-flow__panel.center {\n left: 50%;\n transform: translateX(-50%);\n }\n.react-flow__attribution {\n font-size: 10px;\n background: var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));\n padding: 2px 3px;\n margin: 0;\n}\n.react-flow__attribution a {\n text-decoration: none;\n color: #999;\n }\n@keyframes dashdraw {\n from {\n stroke-dashoffset: 10;\n }\n}\n.react-flow__edgelabel-renderer {\n position: absolute;\n width: 100%;\n height: 100%;\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n left: 0;\n top: 0;\n}\n.react-flow__viewport-portal {\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.react-flow__minimap {\n background: var(\n --xy-minimap-background-color-props,\n var(--xy-minimap-background-color, var(--xy-minimap-background-color-default))\n );\n}\n.react-flow__minimap-svg {\n display: block;\n }\n.react-flow__minimap-mask {\n fill: var(\n --xy-minimap-mask-background-color-props,\n var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default))\n );\n stroke: var(\n --xy-minimap-mask-stroke-color-props,\n var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default))\n );\n stroke-width: var(\n --xy-minimap-mask-stroke-width-props,\n var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default))\n );\n }\n.react-flow__minimap-node {\n fill: var(\n --xy-minimap-node-background-color-props,\n var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default))\n );\n stroke: var(\n --xy-minimap-node-stroke-color-props,\n var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default))\n );\n stroke-width: var(\n --xy-minimap-node-stroke-width-props,\n var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default))\n );\n }\n.react-flow__background-pattern.dots {\n fill: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default))\n );\n }\n.react-flow__background-pattern.lines {\n stroke: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default))\n );\n }\n.react-flow__background-pattern.cross {\n stroke: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default))\n );\n }\n.react-flow__controls {\n display: flex;\n flex-direction: column;\n box-shadow: var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default));\n}\n.react-flow__controls.horizontal {\n flex-direction: row;\n }\n.react-flow__controls-button {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 26px;\n width: 26px;\n padding: 4px;\n border: none;\n background: var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));\n border-bottom: 1px solid\n var(\n --xy-controls-button-border-color-props,\n var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))\n );\n color: var(\n --xy-controls-button-color-props,\n var(--xy-controls-button-color, var(--xy-controls-button-color-default))\n );\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n.react-flow__controls-button svg {\n width: 100%;\n max-width: 12px;\n max-height: 12px;\n fill: currentColor;\n }\n.react-flow__edge.updating .react-flow__edge-path {\n stroke: #777;\n }\n.react-flow__edge-text {\n font-size: 10px;\n }\n.react-flow__node.selectable:focus,\n .react-flow__node.selectable:focus-visible {\n outline: none;\n }\n.react-flow__node-input,\n.react-flow__node-default,\n.react-flow__node-output,\n.react-flow__node-group {\n padding: 10px;\n border-radius: var(--xy-node-border-radius, var(--xy-node-border-radius-default));\n width: 150px;\n font-size: 12px;\n color: var(--xy-node-color, var(--xy-node-color-default));\n text-align: center;\n border: var(--xy-node-border, var(--xy-node-border-default));\n background-color: var(--xy-node-background-color, var(--xy-node-background-color-default));\n}\n.react-flow__node-input.selectable:hover, .react-flow__node-default.selectable:hover, .react-flow__node-output.selectable:hover, .react-flow__node-group.selectable:hover {\n box-shadow: var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default));\n }\n.react-flow__node-input.selectable.selected,\n .react-flow__node-input.selectable:focus,\n .react-flow__node-input.selectable:focus-visible,\n .react-flow__node-default.selectable.selected,\n .react-flow__node-default.selectable:focus,\n .react-flow__node-default.selectable:focus-visible,\n .react-flow__node-output.selectable.selected,\n .react-flow__node-output.selectable:focus,\n .react-flow__node-output.selectable:focus-visible,\n .react-flow__node-group.selectable.selected,\n .react-flow__node-group.selectable:focus,\n .react-flow__node-group.selectable:focus-visible {\n box-shadow: var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default));\n }\n.react-flow__node-group {\n background-color: var(--xy-node-group-background-color, var(--xy-node-group-background-color-default));\n}\n.react-flow__nodesselection-rect,\n.react-flow__selection {\n background: var(--xy-selection-background-color, var(--xy-selection-background-color-default));\n border: var(--xy-selection-border, var(--xy-selection-border-default));\n}\n.react-flow__nodesselection-rect:focus,\n .react-flow__nodesselection-rect:focus-visible,\n .react-flow__selection:focus,\n .react-flow__selection:focus-visible {\n outline: none;\n }\n.react-flow__controls-button:hover {\n background: var(\n --xy-controls-button-background-color-hover-props,\n var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default))\n );\n color: var(\n --xy-controls-button-color-hover-props,\n var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default))\n );\n }\n.react-flow__controls-button:disabled {\n pointer-events: none;\n }\n.react-flow__controls-button:disabled svg {\n fill-opacity: 0.4;\n }\n.react-flow__controls-button:last-child {\n border-bottom: none;\n }\n.react-flow__resize-control {\n position: absolute;\n}\n.react-flow__resize-control.left,\n.react-flow__resize-control.right {\n cursor: ew-resize;\n}\n.react-flow__resize-control.top,\n.react-flow__resize-control.bottom {\n cursor: ns-resize;\n}\n.react-flow__resize-control.top.left,\n.react-flow__resize-control.bottom.right {\n cursor: nwse-resize;\n}\n.react-flow__resize-control.bottom.left,\n.react-flow__resize-control.top.right {\n cursor: nesw-resize;\n}\n/* handle styles */\n.react-flow__resize-control.handle {\n width: 4px;\n height: 4px;\n border: 1px solid #fff;\n border-radius: 1px;\n background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n transform: translate(-50%, -50%);\n}\n.react-flow__resize-control.handle.left {\n left: 0;\n top: 50%;\n}\n.react-flow__resize-control.handle.right {\n left: 100%;\n top: 50%;\n}\n.react-flow__resize-control.handle.top {\n left: 50%;\n top: 0;\n}\n.react-flow__resize-control.handle.bottom {\n left: 50%;\n top: 100%;\n}\n.react-flow__resize-control.handle.top.left {\n left: 0;\n}\n.react-flow__resize-control.handle.bottom.left {\n left: 0;\n}\n.react-flow__resize-control.handle.top.right {\n left: 100%;\n}\n.react-flow__resize-control.handle.bottom.right {\n left: 100%;\n}\n/* line styles */\n.react-flow__resize-control.line {\n border-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n border-width: 0;\n border-style: solid;\n}\n.react-flow__resize-control.line.left,\n.react-flow__resize-control.line.right {\n width: 1px;\n transform: translate(-50%, 0);\n top: 0;\n height: 100%;\n}\n.react-flow__resize-control.line.left {\n left: 0;\n border-left-width: 1px;\n}\n.react-flow__resize-control.line.right {\n left: 100%;\n border-right-width: 1px;\n}\n.react-flow__resize-control.line.top,\n.react-flow__resize-control.line.bottom {\n height: 1px;\n transform: translate(0, -50%);\n left: 0;\n width: 100%;\n}\n.react-flow__resize-control.line.top {\n top: 0;\n border-top-width: 1px;\n}\n.react-flow__resize-control.line.bottom {\n border-bottom-width: 1px;\n top: 100%;\n}\n.react-flow__edge-textbg {\n fill: var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default));\n}\n.react-flow__edge-text {\n fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));\n}\n";
@@ -12844,7 +12852,7 @@ const Progress = styled.div `
12844
12852
  transition: width 0.3s;
12845
12853
  `;
12846
12854
  const HeaderNode = memo(({ id: nodeId, data }) => {
12847
- const { nodeWidth, title, icon: Icon, tagValue, isFetching, sources } = data;
12855
+ const { nodeWidth, title, icon: Icon, badge, badgeTooltip, isFetching, sources } = data;
12848
12856
  const entityType = nodeId.split('-')[0];
12849
12857
  const { isAwaitingInstrumentation, sourcesToCreate, sourcesCreated, sourcesToDelete, sourcesDeleted } = useInstrumentStore();
12850
12858
  const isSourceAwaitingInstrumentation = entityType === ENTITY_TYPES.SOURCE && isAwaitingInstrumentation;
@@ -12882,7 +12890,7 @@ const HeaderNode = memo(({ id: nodeId, data }) => {
12882
12890
  return (React.createElement(Container$e, { "$nodeWidth": nodeWidth, className: 'nowheel nodrag' },
12883
12891
  entityType === ENTITY_TYPES.SOURCE && (React.createElement(SelectorWrapper, null,
12884
12892
  React.createElement(Checkbox, { partiallyChecked: hasSelected && sources?.length !== totalSelectedSources, value: hasSelected && sources?.length === totalSelectedSources, onChange: onSelect, disabled: !sources?.length }))),
12885
- React.createElement(IconTitleBadge, { icon: Icon, title: title, badge: isSourceAwaitingInstrumentation ? `${instrumentingPercent}%` : tagValue, loading: isFetching && !isSourceAwaitingInstrumentation }),
12893
+ React.createElement(IconTitleBadge, { icon: Icon, title: title, badge: isSourceAwaitingInstrumentation ? `${instrumentingPercent}%` : badge, badgeTooltip: badgeTooltip, loading: isFetching && !isSourceAwaitingInstrumentation }),
12886
12894
  React.createElement(Actions$1, { entityType: entityType }),
12887
12895
  isSourceAwaitingInstrumentation && React.createElement(Progress, { percent: instrumentingPercent })));
12888
12896
  });
@@ -13079,7 +13087,7 @@ const buildRuleNodes = ({ loading, entities, positions, unfilteredCount }) => {
13079
13087
  nodeWidth: nodeWidth$4,
13080
13088
  title: 'Instrumentation Rules',
13081
13089
  icon: getEntityIcon(ENTITY_TYPES.INSTRUMENTATION_RULE),
13082
- tagValue: unfilteredCount,
13090
+ badge: unfilteredCount,
13083
13091
  isFetching: loading,
13084
13092
  },
13085
13093
  });
@@ -13159,7 +13167,7 @@ const buildActionNodes = ({ loading, entities, positions, unfilteredCount }) =>
13159
13167
  nodeWidth: nodeWidth$3,
13160
13168
  title: 'Actions',
13161
13169
  icon: getEntityIcon(ENTITY_TYPES.ACTION),
13162
- tagValue: unfilteredCount,
13170
+ badge: unfilteredCount,
13163
13171
  isFetching: loading,
13164
13172
  },
13165
13173
  });
@@ -13239,13 +13247,14 @@ const mapToNodeData$1 = (entity) => {
13239
13247
  faded: hasDisableds,
13240
13248
  title: getEntityLabel(entity, ENTITY_TYPES.SOURCE, { extended: true }),
13241
13249
  subTitle: `${entity.namespace} • ${entity.kind}`,
13242
- iconSrcs: getContainersIcons(entity.containers),
13250
+ icons: getContainersIcons(entity.containers),
13243
13251
  raw: entity,
13244
13252
  };
13245
13253
  };
13246
13254
  const buildSourceNodes = ({ loading, entities, positions, unfilteredCount, containerHeight, onScroll }) => {
13247
13255
  const nodes = [];
13248
13256
  const position = positions[ENTITY_TYPES.SOURCE];
13257
+ const hasFiltersApplied = entities.length !== unfilteredCount;
13249
13258
  nodes.push({
13250
13259
  id: `${ENTITY_TYPES.SOURCE}-${NODE_TYPES.HEADER}`,
13251
13260
  type: NODE_TYPES.HEADER,
@@ -13257,7 +13266,8 @@ const buildSourceNodes = ({ loading, entities, positions, unfilteredCount, conta
13257
13266
  nodeWidth: nodeWidth$2,
13258
13267
  title: 'Sources',
13259
13268
  icon: getEntityIcon(ENTITY_TYPES.SOURCE),
13260
- tagValue: entities.length !== unfilteredCount ? `${entities.length}/${unfilteredCount}` : unfilteredCount,
13269
+ badge: hasFiltersApplied ? `${entities.length}/${unfilteredCount}` : unfilteredCount,
13270
+ badgeTooltip: hasFiltersApplied ? 'Represents filtered amount, out of total amount' : undefined,
13261
13271
  isFetching: loading,
13262
13272
  sources: entities,
13263
13273
  },
@@ -13394,7 +13404,7 @@ const buildDestinationNodes = ({ loading, entities, positions, unfilteredCount }
13394
13404
  nodeWidth,
13395
13405
  title: 'Destinations',
13396
13406
  icon: getEntityIcon(ENTITY_TYPES.DESTINATION),
13397
- tagValue: unfilteredCount,
13407
+ badge: unfilteredCount,
13398
13408
  isFetching: loading,
13399
13409
  },
13400
13410
  });
@@ -15116,17 +15126,18 @@ const Describe$1 = ({ source, fetchDescribeSource }) => {
15116
15126
  return (React.createElement(CenterThis, null,
15117
15127
  React.createElement(FadeLoader, null)));
15118
15128
  }
15119
- return (React.createElement(FlexColumn, { "$gap": 12 }, describe.pods.map(({ podName, nodeName, phase, containers }) => {
15129
+ return (React.createElement(FlexColumn, { "$gap": 12 }, !describe.pods?.length ? (React.createElement(CenterThis, null,
15130
+ React.createElement(NoDataFound, { subTitle: 'Check if you have any running pods and try again' }))) : (describe.pods.map(({ podName, nodeName, phase, containers }) => {
15120
15131
  const podHasErrors = phase.status !== NOTIFICATION_TYPE.SUCCESS ||
15121
- !!containers.find(({ instrumentationInstances }) => !!instrumentationInstances.find(({ healthy }) => healthy.status !== NOTIFICATION_TYPE.SUCCESS));
15122
- return (React.createElement(DataCard, { key: `pod-${podName.value}`, title: `Pod: ${podName.value}`, withExtend: true, action: () => (React.createElement(Status, { status: podHasErrors ? NOTIFICATION_TYPE.ERROR : NOTIFICATION_TYPE.SUCCESS, title: podHasErrors ? NOTIFICATION_TYPE.ERROR : NOTIFICATION_TYPE.SUCCESS, withIcon: true, withBorder: true })), data: [
15132
+ containers.findIndex(({ instrumentationInstances }) => instrumentationInstances.findIndex(({ healthy }) => healthy.status !== NOTIFICATION_TYPE.SUCCESS) !== -1) !== -1;
15133
+ const podStatus = podHasErrors ? NOTIFICATION_TYPE.ERROR : NOTIFICATION_TYPE.SUCCESS;
15134
+ const divider = { type: DATA_CARD_FIELD_TYPES.DIVIDER };
15135
+ return (React.createElement(DataCard, { key: `pod-${podName.value}`, title: `Pod: ${podName.value}`, withExtend: true, action: () => React.createElement(Status, { status: podStatus, title: podStatus, withIcon: true, withBorder: true }), data: [
15123
15136
  {
15124
15137
  type: DATA_CARD_FIELD_TYPES.COPY_TEXT,
15125
15138
  value: `kubectl get pod ${podName.value} -n ${describe?.namespace?.value || source.namespace}`,
15126
15139
  },
15127
- {
15128
- type: DATA_CARD_FIELD_TYPES.DIVIDER,
15129
- },
15140
+ divider,
15130
15141
  {
15131
15142
  type: DATA_CARD_FIELD_TYPES.DESCRIBE_ROW,
15132
15143
  value: JSON.stringify({
@@ -15138,9 +15149,7 @@ const Describe$1 = ({ source, fetchDescribeSource }) => {
15138
15149
  },
15139
15150
  }),
15140
15151
  },
15141
- {
15142
- type: DATA_CARD_FIELD_TYPES.DIVIDER,
15143
- },
15152
+ divider,
15144
15153
  {
15145
15154
  type: DATA_CARD_FIELD_TYPES.DESCRIBE_ROW,
15146
15155
  value: JSON.stringify({
@@ -15152,9 +15161,7 @@ const Describe$1 = ({ source, fetchDescribeSource }) => {
15152
15161
  },
15153
15162
  }),
15154
15163
  },
15155
- {
15156
- type: DATA_CARD_FIELD_TYPES.DIVIDER,
15157
- },
15164
+ divider,
15158
15165
  ...containers.map((container) => {
15159
15166
  return {
15160
15167
  type: DATA_CARD_FIELD_TYPES.POD_CONTAINER,
@@ -15174,7 +15181,7 @@ const Describe$1 = ({ source, fetchDescribeSource }) => {
15174
15181
  };
15175
15182
  }),
15176
15183
  ] }));
15177
- })));
15184
+ }))));
15178
15185
  };
15179
15186
 
15180
15187
  const buildCard = (source) => {
@@ -15649,7 +15656,7 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
15649
15656
  columnKey: 'checkbox-and-icon',
15650
15657
  component: () => (React.createElement(FlexRow, { "$gap": 16 },
15651
15658
  React.createElement(Checkbox, { disabled: isPending, value: isChecked, onChange: () => onSelectOne(source) }),
15652
- React.createElement(IconGroup, { iconSrcs: getContainersIcons(source.containers) }))),
15659
+ React.createElement(IconGroup, { icons: getContainersIcons(source.containers) }))),
15653
15660
  },
15654
15661
  {
15655
15662
  columnKey: 'name',
@@ -15832,7 +15839,7 @@ const Describe = ({ fetchDescribeOdigos }) => {
15832
15839
  ]
15833
15840
  : [];
15834
15841
  return (React.createElement(React.Fragment, null,
15835
- React.createElement(DataCard, { title: 'General Information', withExtend: true, data: [
15842
+ React.createElement(DataCard, { title: 'General Information', withExtend: true, initialExtended: true, data: [
15836
15843
  { title: describe?.odigosVersion?.name, value: describe?.odigosVersion?.value },
15837
15844
  { title: describe?.kubernetesVersion?.name, value: describe?.kubernetesVersion?.value },
15838
15845
  { title: describe?.installationMethod?.name, value: describe?.installationMethod?.value },
@@ -15949,4 +15956,4 @@ const ToggleDarkMode = () => {
15949
15956
  React.createElement(Background, { "$darkMode": darkMode })));
15950
15957
  };
15951
15958
 
15952
- export { ActionDrawer, ActionForm, ActionModal, ActionTable, AwaitPipeline, ComputePlatformSelect, ComputePlatforms, ComputePlatformsActionsMenu, ConnectionStatusDropdown, DataFlow, DataFlowActionsMenu, DestinationDrawer, DestinationForm, DestinationModal, DestinationSelectionForm, DestinationTable, ErrorDropdown, InstrumentationRuleDrawer, InstrumentationRuleForm, InstrumentationRuleModal, InstrumentationRuleTable, KindDropdown, LanguageDropdown, MonitorDropdown, MultiSourceControl, NAV_ICON_IDS, NamespaceDropdown, NotificationManager, OverviewDrawer, PlatformTypesDropdown, SideNav, SlackInvite, SourceDrawer, SourceForm, SourceModal, SourceSelectionForm, SourceTable, SystemOverview, ToastList, ToggleDarkMode };
15959
+ export { ActionDrawer, ActionForm, ActionModal, ActionTable, AwaitPipeline, ComputePlatformSelect, ComputePlatforms, ComputePlatformsActionsMenu, ConnectionStatusDropdown, ConnectionTypeDropdown, DataFlow, DataFlowActionsMenu, DestinationDrawer, DestinationForm, DestinationModal, DestinationSelectionForm, DestinationTable, ErrorDropdown, InstrumentationRuleDrawer, InstrumentationRuleForm, InstrumentationRuleModal, InstrumentationRuleTable, KindDropdown, LanguageDropdown, MonitorDropdown, MultiSourceControl, NAV_ICON_IDS, NamespaceDropdown, NotificationManager, OverviewDrawer, SideNav, SlackInvite, SourceDrawer, SourceForm, SourceModal, SourceSelectionForm, SourceTable, SystemOverview, ToastList, ToggleDarkMode };
@@ -6,6 +6,7 @@ export declare const MOCK_SOURCE_JAEGER: {
6
6
  kind: K8S_RESOURCE_KIND;
7
7
  selected: boolean;
8
8
  otelServiceName: string;
9
+ numberOfInstances: number;
9
10
  containers: {
10
11
  containerName: string;
11
12
  language: PROGRAMMING_LANGUAGES;
@@ -1,2 +1,2 @@
1
- import type { Source } from '@/types';
2
- export declare const getContainersIcons: (containers: Source["containers"]) => string[];
1
+ import type { Source, SVG } from '@/types';
2
+ export declare const getContainersIcons: (containers: Source["containers"]) => SVG[];
@@ -1,2 +1,2 @@
1
1
  import { PLATFORM_TYPE, type SVG } from '@/types';
2
- export declare const getPlatformIcon: (type: PLATFORM_TYPE) => SVG;
2
+ export declare const getPlatformIcon: (type?: PLATFORM_TYPE) => SVG;
@@ -1,2 +1,2 @@
1
1
  import { PLATFORM_TYPE } from '@/types';
2
- export declare const getPlatformLabel: (type: PLATFORM_TYPE) => string;
2
+ export declare const getPlatformLabel: (type?: PLATFORM_TYPE) => string;
@@ -1,2 +1,2 @@
1
- import { PROGRAMMING_LANGUAGES } from '@/types';
2
- export declare const getProgrammingLanguageIcon: (language: PROGRAMMING_LANGUAGES) => string;
1
+ import { PROGRAMMING_LANGUAGES, type SVG } from '@/types';
2
+ export declare const getProgrammingLanguageIcon: (language: PROGRAMMING_LANGUAGES) => SVG;
package/lib/functions.js CHANGED
@@ -1,15 +1,15 @@
1
- export { c as capitalizeFirstLetter, f as flattenObjectKeys, g as getMonitorIcon, a as getProgrammingLanguageIcon, b as getStatusIcon, m as mapConditions, p as parseJsonStringToPrettyString, r as removeEmptyValuesFromObject, s as safeJsonStringify, d as splitCamelString } from './index-4tCBQ2pl.js';
2
- export { c as compareCondition, f as filterActions, a as filterDestinations, b as filterSources, d as formatBytes, g as getConditionsBooleans, h as getContainersIcons, e as getContainersInstrumentedCount, i as getEntityIcon, j as getEntityLabel, k as getMetricForEntity, l as getPlatformIcon, m as getPlatformLabel, n as getValueForRange, o as isOverTime, s as sleep } from './index-DUW6bkzG.js';
1
+ export { c as capitalizeFirstLetter, f as flattenObjectKeys, g as getMonitorIcon, a as getProgrammingLanguageIcon, b as getStatusIcon, m as mapConditions, p as parseJsonStringToPrettyString, r as removeEmptyValuesFromObject, s as safeJsonStringify, d as splitCamelString } from './index-Bc8gi9FH.js';
2
+ export { c as compareCondition, f as filterActions, a as filterDestinations, b as filterSources, d as formatBytes, g as getConditionsBooleans, h as getContainersIcons, e as getContainersInstrumentedCount, i as getEntityIcon, j as getEntityLabel, k as getMetricForEntity, l as getPlatformIcon, m as getPlatformLabel, n as getValueForRange, o as isOverTime, s as sleep } from './index-g6Twdelv.js';
3
3
  import { INSTRUMENTATION_RULE_TYPE, ENTITY_TYPES } from './types.js';
4
- export { g as getActionIcon, a as getInstrumentationRuleIcon } from './index-BhCi-TxF.js';
5
- export { k as getEntityId, l as isTimeElapsed } from './index-DRT_7tQl.js';
4
+ export { g as getActionIcon, a as getInstrumentationRuleIcon } from './index-BumPE6cF.js';
5
+ export { k as getEntityId, l as isTimeElapsed } from './index-DIcomki-.js';
6
6
  export { g as getIdFromSseTarget } from './index-BFct3S32.js';
7
7
  export { i as isEmpty, s as safeJsonParse } from './index-BZS1ijMm.js';
8
8
  import 'react';
9
9
  import 'styled-components';
10
- import './index-DLKEpJJm.js';
11
- import './theme.js';
12
10
  import './index-BGlk5VhF.js';
11
+ import './theme.js';
12
+ import './index-ixs381n-.js';
13
13
  import './index-BjJpYtF1.js';
14
14
 
15
15
  const cleanObjectEmptyStringsValues = (obj) => {
@@ -1,6 +1,6 @@
1
1
  declare const useCopy: () => {
2
2
  isCopied: boolean;
3
3
  copiedIndex: number;
4
- clickCopy: (str: string, idx?: number) => void;
4
+ clickCopy: (str: string, idx?: number) => Promise<void>;
5
5
  };
6
6
  export { useCopy };
package/lib/hooks.js CHANGED
@@ -1,12 +1,12 @@
1
- export { u as useActionFormData, a as useClickNode, b as useClickNotification, c as useDestinationFormData, d as useSourceFormData, e as useSourceSelectionFormData } from './useSourceSelectionFormData-ClorQ_WP.js';
2
- export { u as useContainerSize, a as useCopy, b as useGenericForm, c as useInstrumentationRuleFormData, d as useKeyDown, e as useOnClickOutside, f as useTimeAgo, g as useTransition } from './useTransition-5w3VnEhL.js';
1
+ export { u as useActionFormData, a as useClickNode, b as useClickNotification, c as useDestinationFormData, d as useSourceFormData, e as useSourceSelectionFormData } from './useSourceSelectionFormData-BY6B70Kf.js';
2
+ export { u as useContainerSize, a as useCopy, b as useGenericForm, c as useInstrumentationRuleFormData, d as useKeyDown, e as useOnClickOutside, f as useTimeAgo, g as useTransition } from './useTransition-Dfxjcy-C.js';
3
3
  import './types.js';
4
4
  import 'react';
5
- import './index-DRT_7tQl.js';
5
+ import './index-DIcomki-.js';
6
6
  import 'styled-components';
7
7
  import './index-BZS1ijMm.js';
8
- import './index-Byh3BO6S.js';
9
- import './index-BhCi-TxF.js';
8
+ import './index-CZe2VX28.js';
9
+ import './index-BumPE6cF.js';
10
10
  import './index-BGlk5VhF.js';
11
11
  import './theme.js';
12
12
  import './index-Cu2uHOuh.js';
@@ -0,0 +1,8 @@
1
+ import type { SVG } from '@/types';
2
+ import type { StoryFn } from '@storybook/react';
3
+ declare const _default: {
4
+ title: string;
5
+ component: SVG;
6
+ };
7
+ export default _default;
8
+ export declare const Default: StoryFn<SVG>;
@@ -0,0 +1,2 @@
1
+ import type { SVG } from '@/types';
2
+ export declare const ImageErrorIcon: SVG;
@@ -7,6 +7,7 @@ export * from './edit-icon/index';
7
7
  export * from './extend-arrow-icon/index';
8
8
  export * from './filter-icon/index';
9
9
  export * from './folder-icon/index';
10
+ export * from './image-error-icon/index';
10
11
  export * from './key-icon/index';
11
12
  export * from './list-icon/index';
12
13
  export * from './no-data-icon/index';
@@ -7,5 +7,6 @@ export * from './math';
7
7
  export * from './monitors';
8
8
  export * from './on-off';
9
9
  export * from './overview';
10
+ export * from './programming-languages';
10
11
  export * from './social';
11
12
  export * from './status';
@@ -0,0 +1,8 @@
1
+ import type { SVG } from '@/types';
2
+ import type { StoryFn } from '@storybook/react';
3
+ declare const _default: {
4
+ title: string;
5
+ component: SVG;
6
+ };
7
+ export default _default;
8
+ export declare const Default: StoryFn<SVG>;
@@ -0,0 +1,2 @@
1
+ import type { SVG } from '@/types';
2
+ export declare const ConnectionsIcon: SVG;
@@ -1,6 +1,7 @@
1
1
  export * from './overview-icon/index';
2
2
  export * from './service-map-icon/index';
3
3
  export * from './trace-view-icon/index';
4
+ export * from './connections-icon/index';
4
5
  export * from './actions-icon/index';
5
6
  export * from './destinations-icon/index';
6
7
  export * from './rules-icon/index';
@@ -0,0 +1,8 @@
1
+ import type { SVG } from '@/types';
2
+ import type { StoryFn } from '@storybook/react';
3
+ declare const _default: {
4
+ title: string;
5
+ component: SVG;
6
+ };
7
+ export default _default;
8
+ export declare const Default: StoryFn<SVG>;
@@ -0,0 +1,2 @@
1
+ import type { SVG } from '@/types';
2
+ export declare const CPlusPlusLogo: SVG;
@@ -0,0 +1,8 @@
1
+ import type { SVG } from '@/types';
2
+ import type { StoryFn } from '@storybook/react';
3
+ declare const _default: {
4
+ title: string;
5
+ component: SVG;
6
+ };
7
+ export default _default;
8
+ export declare const Default: StoryFn<SVG>;
@@ -0,0 +1,2 @@
1
+ import type { SVG } from '@/types';
2
+ export declare const CSharpLogo: SVG;
@@ -0,0 +1,8 @@
1
+ import type { SVG } from '@/types';
2
+ import type { StoryFn } from '@storybook/react';
3
+ declare const _default: {
4
+ title: string;
5
+ component: SVG;
6
+ };
7
+ export default _default;
8
+ export declare const Default: StoryFn<SVG>;
@@ -0,0 +1,2 @@
1
+ import type { SVG } from '@/types';
2
+ export declare const DotnetLogo: SVG;
@@ -0,0 +1,8 @@
1
+ import type { SVG } from '@/types';
2
+ import type { StoryFn } from '@storybook/react';
3
+ declare const _default: {
4
+ title: string;
5
+ component: SVG;
6
+ };
7
+ export default _default;
8
+ export declare const Default: StoryFn<SVG>;
@@ -0,0 +1,2 @@
1
+ import type { SVG } from '@/types';
2
+ export declare const ElixirLogo: SVG;
@@ -0,0 +1,8 @@
1
+ import type { SVG } from '@/types';
2
+ import type { StoryFn } from '@storybook/react';
3
+ declare const _default: {
4
+ title: string;
5
+ component: SVG;
6
+ };
7
+ export default _default;
8
+ export declare const Default: StoryFn<SVG>;
@@ -0,0 +1,2 @@
1
+ import type { SVG } from '@/types';
2
+ export declare const GoLogo: SVG;