@odigos/ui-kit 0.0.83 → 0.0.85
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 +14 -0
- package/lib/components.js +3 -3
- package/lib/containers.js +51 -35
- package/lib/hooks.js +2 -0
- package/lib/{index-b980f6ea.js → index-8e9ad0b4.js} +1 -1
- package/lib/{index-dcb15a56.js → index-90161559.js} +73 -46
- package/lib/snippets.js +2 -2
- package/lib/store/useFilterStore.d.ts +1 -1
- package/lib/types/actions/index.d.ts +3 -0
- package/lib/types.js +1 -0
- package/package.json +13 -13
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.85](https://github.com/odigos-io/ui-kit/compare/ui-kit-v0.0.84...ui-kit-v0.0.85) (2025-08-18)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* override existing toggle for addclusterinfo action ([#326](https://github.com/odigos-io/ui-kit/issues/326)) ([4080e83](https://github.com/odigos-io/ui-kit/commit/4080e83910fa50790d6bd55b0153dc6897f8c32d))
|
|
9
|
+
|
|
10
|
+
## [0.0.84](https://github.com/odigos-io/ui-kit/compare/ui-kit-v0.0.83...ui-kit-v0.0.84) (2025-08-18)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* add toggle for overwriting existing cluster attributes in AddClusterInfo component ([#324](https://github.com/odigos-io/ui-kit/issues/324)) ([ef2ef11](https://github.com/odigos-io/ui-kit/commit/ef2ef11a3392fda77f2f302c0e55ae6c2f24a99e))
|
|
16
|
+
|
|
3
17
|
## [0.0.83](https://github.com/odigos-io/ui-kit/compare/ui-kit-v0.0.82...ui-kit-v0.0.83) (2025-08-13)
|
|
4
18
|
|
|
5
19
|
|
package/lib/components.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { B as Button } from './index-
|
|
2
|
-
export { A as AutocompleteInput, a as Badge, a9 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, a8 as FlexColumn, a7 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, ac as ModalBody, z as MonitorsCheckboxes, G as MonitorsIcons, N as NavigationButtons, J as NoDataFound, L as NotificationNote, ab 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, Y as TabList, ad as TableContainer, ae as TableTitleWrap, af as TableWrap, Z as Tag, _ as Text, a2 as TextArea, a3 as Toggle, T as ToggleCodeComponent, a4 as Tooltip, a5 as TraceLoader, aa as VerticalScroll, a6 as WarningModal, $ as getLinksFromText, a0 as getStrongsFromText, a1 as renderText } from './index-
|
|
3
|
-
export { C as CancelWarning, D as DeleteWarning } from './index-
|
|
1
|
+
import { B as Button } from './index-90161559.js';
|
|
2
|
+
export { A as AutocompleteInput, a as Badge, a9 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, a8 as FlexColumn, a7 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, ac as ModalBody, z as MonitorsCheckboxes, G as MonitorsIcons, N as NavigationButtons, J as NoDataFound, L as NotificationNote, ab 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, Y as TabList, ad as TableContainer, ae as TableTitleWrap, af as TableWrap, Z as Tag, _ as Text, a2 as TextArea, a3 as Toggle, T as ToggleCodeComponent, a4 as Tooltip, a5 as TraceLoader, aa as VerticalScroll, a6 as WarningModal, $ as getLinksFromText, a0 as getStrongsFromText, a1 as renderText } from './index-90161559.js';
|
|
3
|
+
export { C as CancelWarning, D as DeleteWarning } from './index-8e9ad0b4.js';
|
|
4
4
|
import React, { createContext, Component, createElement } from 'react';
|
|
5
5
|
import { T as Theme } from './index-86030474.js';
|
|
6
6
|
import 'styled-components';
|
package/lib/containers.js
CHANGED
|
@@ -2,14 +2,14 @@ import React, { useState, useEffect, forwardRef, useRef, useImperativeHandle, us
|
|
|
2
2
|
import styled, { css } from 'styled-components';
|
|
3
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 getInstrumentationRuleIcon, Y as useDataStreamStore, Z as useInstrumentStore, c as getEntityId, D as DISPLAY_LANGUAGES, M as MONITORS_OPTIONS, S as STORAGE_KEYS, a as DEFAULT_DATA_STREAM_NAME, _ as useSetupStore, e as getProgrammingLanguageIcon, I as INSTRUMENTATION_RULE_OPTIONS, $ as useSelectedStore, k as ImageErrorIcon, a0 as useDarkMode } from './index-86030474.js';
|
|
4
4
|
import { ActionType, ActionKeyTypes, InputTypes, FieldTypes, EntityTypes, StatusType, Crud, OtherStatus, NodeTypes, EdgeTypes, AddNodeTypes, SignalType, HeadersCollectionKeyTypes, CustomInstrumentationsKeyTypes, CodeAttributesKeyTypes, PayloadCollectionKeyTypes, InstrumentationRuleType, K8sResourceKind, ProgrammingLanguages, MountMethod, AgentEnvVarsInjectionMethod, Profile, InstallationMethod } 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, _ as Text, R as Segment, Q as SectionTitle, j as DocsButton, z as MonitorsCheckboxes, a2 as TextArea, k as Drawer, c as ConditionDetails, D as DataCard, a8 as FlexColumn, M as Modal, N as NavigationButtons, ac as ModalBody, L as NotificationNote, A as AutocompleteInput, i as Divider, W as Status, a7 as FlexRow, a4 as Tooltip, s as IconWrapped, G as MonitorsIcons, ad as TableContainer, ae as TableTitleWrap, r as IconTitleBadge, af as TableWrap, y as InteractiveTable, a9 as CenterThis, J as NoDataFound, a5 as TraceLoader, a as Badge, ag as nodeConfig, ah as useNodesState, ai as useEdgesState, aj as Flow, ak as applyNodeChanges, P as Popup, U as SelectionButton, aa as VerticalScroll, n as Dropdown, B as Button,
|
|
5
|
+
import { e as DataCardFieldTypes, p as FieldLabel, C as Checkbox, o as FieldError, v as Input, x as InputTable, a3 as Toggle, K as KeyValueInputsList, w as InputList, _ as Text, R as Segment, Q as SectionTitle, j as DocsButton, z as MonitorsCheckboxes, a2 as TextArea, k as Drawer, c as ConditionDetails, D as DataCard, a8 as FlexColumn, M as Modal, N as NavigationButtons, ac as ModalBody, L as NotificationNote, A as AutocompleteInput, i as Divider, W as Status, a7 as FlexRow, a4 as Tooltip, s as IconWrapped, G as MonitorsIcons, ad as TableContainer, ae as TableTitleWrap, r as IconTitleBadge, af as TableWrap, y as InteractiveTable, a9 as CenterThis, J as NoDataFound, a5 as TraceLoader, a as Badge, ag as nodeConfig, ah as useNodesState, ai as useEdgesState, aj as Flow, ak as applyNodeChanges, P as Popup, U as SelectionButton, aa as VerticalScroll, n as Dropdown, B as Button, I as IconButton, E as ExtendArrow, al as AddButton, F as FadeLoader, g as DataTab, X as Stepper, d as DataCardFields, Z as Tag, am as MarkerType, t as IconsNav, an as CopyText, h as DescribeRow, ao as PodContainer, ap as SourceContainer, q as IconGroup, O as PopupForm } from './index-90161559.js';
|
|
6
6
|
import { i as isEmpty, s as safeJsonParse, d as deepClone } from './index-5e5f7bda.js';
|
|
7
7
|
import { C as CheckCircledIcon, O as OdigosLogo } from './index-4dfaeaab.js';
|
|
8
8
|
import { C as CrossCircledIcon, O as OdigosLogoText, F as FilterIcon, D as DataStreamsIcon, A as ArrowIcon, R as RefreshLeftArrowIcon, N as NotificationIcon, U as UserIcon, a as OverviewIcon, S as SlackLogo, K as KeyIcon, T as TerminalIcon, G as GearIcon } from './index-c1a8e92c.js';
|
|
9
9
|
import { useActionFormData, useSessionStorage, useDataStreamFormData, useDestinationFormData, useClickNotification, useSourceFormData, useSourceSelectionFormData } from './hooks.js';
|
|
10
10
|
import { u as useKeyDown, a as useContainerSize, b as useClickNode, c as usePopup, d as useOnClickOutside, e as useInstrumentationRuleFormData, f as useTransition, g as useTimeAgo, h as useCopy, i as useGenericForm } from './useTransition-cac1649d.js';
|
|
11
11
|
import { E as EditIcon, T as TrashIcon, S as SearchIcon, h as CheckIcon, P as PlusIcon, a as CopyIcon } from './index-72089d6e.js';
|
|
12
|
-
import { D as DeleteWarning, C as CancelWarning } from './index-
|
|
12
|
+
import { D as DeleteWarning, C as CancelWarning } from './index-8e9ad0b4.js';
|
|
13
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-f22371cb.js';
|
|
14
14
|
import { f as filterActions, l as getEntityLabel, k as getEntityIcon, t as sleep, g as formatBytes, i as getContainersIcons, n as getValueForRange, j as getDestinationIcon, e as filterSourcesByStream, d as filterSources, b as filterDestinationsByStream, a as filterDestinations, s as mapDestinationFieldsForDisplay, c as compareCondition, p as getYamlFieldsForDestination, m as getMetricForEntity, o as getWorkloadId, q as hasUnhealthyInstances, h as getContainersInstrumentedCount, r as isOverTime } from './index-8b736e84.js';
|
|
15
15
|
import { m as mapExportedSignals } from './index-6a6bea6e.js';
|
|
@@ -19,7 +19,7 @@ import { a6 as RulesIcon, a3 as SourcesIcon, a5 as ActionsIcon, a4 as Destinatio
|
|
|
19
19
|
import 'react-dom';
|
|
20
20
|
|
|
21
21
|
const buildCard$3 = (action) => {
|
|
22
|
-
const { type, spec: { actionName, notes, signals, disabled, collectContainerAttributes, collectReplicaSetAttributes, collectWorkloadId, collectClusterId, labelsAttributes, annotationsAttributes, clusterAttributes, attributeNamesToDelete, renames, piiCategories, fallbackSamplingRatio, samplingPercentage, endpointsFilters, servicesNameFilters, attributeFilters, }, } = action;
|
|
22
|
+
const { type, spec: { actionName, notes, signals, disabled, collectContainerAttributes, collectReplicaSetAttributes, collectWorkloadId, collectClusterId, labelsAttributes, annotationsAttributes, clusterAttributes, overwriteExistingValues, attributeNamesToDelete, renames, piiCategories, fallbackSamplingRatio, samplingPercentage, endpointsFilters, servicesNameFilters, attributeFilters, }, } = action;
|
|
23
23
|
const arr = [
|
|
24
24
|
{ title: DISPLAY_TITLES.TYPE, value: type },
|
|
25
25
|
{ type: DataCardFieldTypes.ActiveStatus, title: DISPLAY_TITLES.STATUS, value: String(!disabled) },
|
|
@@ -51,6 +51,7 @@ const buildCard$3 = (action) => {
|
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
if (type === ActionType.AddClusterInfo) {
|
|
54
|
+
arr.push({ title: 'Overwrite Existing Values', value: String(overwriteExistingValues || false) });
|
|
54
55
|
let str = '';
|
|
55
56
|
clusterAttributes?.forEach(({ attributeName, attributeStringValue }, idx) => {
|
|
56
57
|
str += `${attributeName}: ${attributeStringValue}`;
|
|
@@ -131,7 +132,7 @@ const buildCard$3 = (action) => {
|
|
|
131
132
|
return arr;
|
|
132
133
|
};
|
|
133
134
|
|
|
134
|
-
const KEY$
|
|
135
|
+
const KEY$7 = ActionKeyTypes.PiiCategories;
|
|
135
136
|
const ListContainer$2 = styled.div `
|
|
136
137
|
display: flex;
|
|
137
138
|
flex-direction: row;
|
|
@@ -150,18 +151,18 @@ const PII_OPTIONS = [
|
|
|
150
151
|
},
|
|
151
152
|
];
|
|
152
153
|
const PiiMasking = ({ value, setValue, formErrors }) => {
|
|
153
|
-
const errorMessage = formErrors[KEY$
|
|
154
|
-
const mappedValue = value[KEY$
|
|
154
|
+
const errorMessage = formErrors[KEY$7];
|
|
155
|
+
const mappedValue = value[KEY$7] || [];
|
|
155
156
|
const [isLastSelection, setIsLastSelection] = useState(mappedValue.length === 1);
|
|
156
157
|
const handleChange = (id, isAdd) => {
|
|
157
158
|
const arr = isAdd ? [...mappedValue, id] : mappedValue.filter((str) => str !== id);
|
|
158
|
-
setValue(KEY$
|
|
159
|
+
setValue(KEY$7, arr);
|
|
159
160
|
setIsLastSelection(arr.length === 1);
|
|
160
161
|
};
|
|
161
162
|
useEffect(() => {
|
|
162
163
|
if (!mappedValue.length) {
|
|
163
164
|
const arr = PII_OPTIONS.map(({ id }) => id);
|
|
164
|
-
setValue(KEY$
|
|
165
|
+
setValue(KEY$7, arr);
|
|
165
166
|
setIsLastSelection(PII_OPTIONS.length === 1);
|
|
166
167
|
}
|
|
167
168
|
// eslint-disable-next-line
|
|
@@ -172,11 +173,11 @@ const PiiMasking = ({ value, setValue, formErrors }) => {
|
|
|
172
173
|
!!errorMessage && React.createElement(FieldError, null, errorMessage)));
|
|
173
174
|
};
|
|
174
175
|
|
|
175
|
-
const KEY$
|
|
176
|
+
const KEY$6 = ActionKeyTypes.FallbackSamplingRatio, MIN$1 = 0, MAX$1 = 100;
|
|
176
177
|
const ErrorSampler = ({ value, setValue, formErrors }) => {
|
|
177
|
-
const errorMessage = formErrors[KEY$
|
|
178
|
-
const mappedValue = value[KEY$
|
|
179
|
-
const handleChange = (val) => setValue(KEY$
|
|
178
|
+
const errorMessage = formErrors[KEY$6];
|
|
179
|
+
const mappedValue = value[KEY$6];
|
|
180
|
+
const handleChange = (val) => setValue(KEY$6, Math.max(MIN$1, Math.min(Number(val), MAX$1)) || MIN$1);
|
|
180
181
|
return (React.createElement(Input, { title: 'Fallback sampling ratio', required: true, type: InputTypes.Number, min: MIN$1, max: MAX$1, value: !isEmpty(mappedValue) ? String(mappedValue) : '', onChange: ({ target: { value: v } }) => handleChange(v), errorMessage: errorMessage }));
|
|
181
182
|
};
|
|
182
183
|
|
|
@@ -234,7 +235,7 @@ const K8sAttributes = ({ value, setValue, formErrors }) => {
|
|
|
234
235
|
React.createElement(InputTable, { columns: ANNOTATION_COLUMNS, value: value[ActionKeyTypes.AnnotationsAttributes] || [], onChange: (arr) => setValue(ActionKeyTypes.AnnotationsAttributes, arr), errorMessage: formErrors[ActionKeyTypes.AnnotationsAttributes] })));
|
|
235
236
|
};
|
|
236
237
|
|
|
237
|
-
const KEY$
|
|
238
|
+
const KEY$5 = ActionKeyTypes.EndpointsFilters;
|
|
238
239
|
const COLUMNS$2 = [
|
|
239
240
|
{
|
|
240
241
|
title: 'Service',
|
|
@@ -268,8 +269,8 @@ const COLUMNS$2 = [
|
|
|
268
269
|
},
|
|
269
270
|
];
|
|
270
271
|
const LatencySampler = ({ value, setValue, formErrors }) => {
|
|
271
|
-
const errorMessage = formErrors[KEY$
|
|
272
|
-
const mappedValue = value[KEY$
|
|
272
|
+
const errorMessage = formErrors[KEY$5];
|
|
273
|
+
const mappedValue = value[KEY$5] || [];
|
|
273
274
|
const handleChange = (arr) => {
|
|
274
275
|
const mapped = arr.map(({ serviceName, httpRoute, minimumLatencyThreshold, fallbackSamplingRatio }) => {
|
|
275
276
|
const row = {
|
|
@@ -280,23 +281,21 @@ const LatencySampler = ({ value, setValue, formErrors }) => {
|
|
|
280
281
|
};
|
|
281
282
|
return row;
|
|
282
283
|
});
|
|
283
|
-
setValue(KEY$
|
|
284
|
+
setValue(KEY$5, mapped);
|
|
284
285
|
};
|
|
285
286
|
return React.createElement(InputTable, { columns: COLUMNS$2, value: mappedValue, onChange: handleChange, errorMessage: errorMessage });
|
|
286
287
|
};
|
|
287
288
|
|
|
288
|
-
const KEY$5 = ActionKeyTypes.ClusterAttributes;
|
|
289
289
|
const AddClusterInfo = ({ value, setValue, formErrors }) => {
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
return React.createElement(KeyValueInputsList, { title: 'Resource Attributes', value: mappedValue, onChange: handleChange, required: true, errorMessage: errorMessage });
|
|
290
|
+
return (React.createElement(React.Fragment, null,
|
|
291
|
+
React.createElement(Toggle, { title: 'Overwrite Existing Values', tooltip: 'If enabled, the resource attributes will overwrite any existing attributes with the same name.', initialValue: value[ActionKeyTypes.OverwriteExistingValues] || false, onChange: (bool) => setValue(ActionKeyTypes.OverwriteExistingValues, bool) }),
|
|
292
|
+
React.createElement(KeyValueInputsList, { title: 'Resource Attributes', value: value[ActionKeyTypes.ClusterAttributes]?.map((obj) => ({
|
|
293
|
+
key: obj.attributeName,
|
|
294
|
+
value: obj.attributeStringValue,
|
|
295
|
+
})) || [], onChange: (arr) => setValue(ActionKeyTypes.ClusterAttributes, arr.map((obj) => ({
|
|
296
|
+
attributeName: obj.key,
|
|
297
|
+
attributeStringValue: obj.value,
|
|
298
|
+
}))), required: true, errorMessage: formErrors[ActionKeyTypes.ClusterAttributes] })));
|
|
300
299
|
};
|
|
301
300
|
|
|
302
301
|
const KEY$4 = ActionKeyTypes.AttributeNamesToDelete;
|
|
@@ -783,7 +782,7 @@ const ActionModal = ({ createAction }) => {
|
|
|
783
782
|
};
|
|
784
783
|
|
|
785
784
|
const buildSpecCell$1 = (action) => {
|
|
786
|
-
const { type, spec: { collectContainerAttributes, collectReplicaSetAttributes, collectWorkloadId, collectClusterId, labelsAttributes, annotationsAttributes, clusterAttributes, attributeNamesToDelete, renames, piiCategories, fallbackSamplingRatio, samplingPercentage, endpointsFilters, }, } = action;
|
|
785
|
+
const { type, spec: { collectContainerAttributes, collectReplicaSetAttributes, collectWorkloadId, collectClusterId, labelsAttributes, annotationsAttributes, clusterAttributes, overwriteExistingValues, attributeNamesToDelete, renames, piiCategories, fallbackSamplingRatio, samplingPercentage, endpointsFilters, attributeFilters, servicesNameFilters, }, } = action;
|
|
787
786
|
let str = '';
|
|
788
787
|
if (type === ActionType.K8sAttributes) {
|
|
789
788
|
if (collectContainerAttributes)
|
|
@@ -806,6 +805,7 @@ const buildSpecCell$1 = (action) => {
|
|
|
806
805
|
});
|
|
807
806
|
}
|
|
808
807
|
if (type === ActionType.AddClusterInfo) {
|
|
808
|
+
str += `Overwrite Existing: ${overwriteExistingValues}\n`;
|
|
809
809
|
clusterAttributes?.forEach(({ attributeName, attributeStringValue }, idx) => {
|
|
810
810
|
str += `${attributeName}: ${attributeStringValue}`;
|
|
811
811
|
if (idx < clusterAttributes.length - 1)
|
|
@@ -843,13 +843,27 @@ const buildSpecCell$1 = (action) => {
|
|
|
843
843
|
}
|
|
844
844
|
if (type === ActionType.LatencySampler) {
|
|
845
845
|
endpointsFilters?.forEach(({ serviceName, httpRoute, minimumLatencyThreshold, fallbackSamplingRatio }, idx) => {
|
|
846
|
-
str += `Endpoint${endpointsFilters.length > 1 ? ` #${idx + 1}` : ''}=${serviceName}${httpRoute}`;
|
|
846
|
+
str += `Endpoint${endpointsFilters.length > 1 ? ` #${idx + 1}` : ''}=${serviceName}${httpRoute}\n`;
|
|
847
847
|
str += ` Latency=${minimumLatencyThreshold}`;
|
|
848
848
|
str += ` Sampling=${fallbackSamplingRatio}`;
|
|
849
849
|
if (idx < endpointsFilters.length - 1)
|
|
850
850
|
str += ', ';
|
|
851
851
|
});
|
|
852
852
|
}
|
|
853
|
+
if (type === ActionType.ServiceNameSampler) {
|
|
854
|
+
servicesNameFilters?.forEach(({ serviceName, samplingRatio, fallbackSamplingRatio }) => {
|
|
855
|
+
str += `Service Name: ${serviceName}, `;
|
|
856
|
+
str += `Sampling Ratio: ${samplingRatio}, `;
|
|
857
|
+
str += `Fallback Sampling Ratio: ${fallbackSamplingRatio}\n`;
|
|
858
|
+
});
|
|
859
|
+
}
|
|
860
|
+
if (type === ActionType.SpanAttributeSampler) {
|
|
861
|
+
attributeFilters?.forEach(({ serviceName, attributeKey, fallbackSamplingRatio }) => {
|
|
862
|
+
str += `Service Name: ${serviceName}, `;
|
|
863
|
+
str += `Attribute Key: ${attributeKey}, `;
|
|
864
|
+
str += `Fallback Sampling Ratio: ${fallbackSamplingRatio}\n`;
|
|
865
|
+
});
|
|
866
|
+
}
|
|
853
867
|
return str;
|
|
854
868
|
};
|
|
855
869
|
|
|
@@ -1871,12 +1885,14 @@ const PushRight = styled.div `
|
|
|
1871
1885
|
`;
|
|
1872
1886
|
const getFilterCount = (params) => {
|
|
1873
1887
|
let count = 0;
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
if (
|
|
1888
|
+
Object.values(params).forEach((value) => {
|
|
1889
|
+
if (value && Array.isArray(value) && value.length > 0) {
|
|
1890
|
+
count += value.length;
|
|
1891
|
+
}
|
|
1892
|
+
});
|
|
1893
|
+
if (params.onlyErrors)
|
|
1894
|
+
count++;
|
|
1895
|
+
if (params.searchText)
|
|
1880
1896
|
count++;
|
|
1881
1897
|
return count;
|
|
1882
1898
|
};
|
package/lib/hooks.js
CHANGED
|
@@ -15,6 +15,7 @@ const INITIAL$2 = {
|
|
|
15
15
|
signals: [],
|
|
16
16
|
disabled: false,
|
|
17
17
|
clusterAttributes: null,
|
|
18
|
+
overwriteExistingValues: false,
|
|
18
19
|
renames: null,
|
|
19
20
|
attributeNamesToDelete: null,
|
|
20
21
|
piiCategories: null,
|
|
@@ -122,6 +123,7 @@ const useActionFormData = () => {
|
|
|
122
123
|
case ActionKeyTypes.LabelsAttributes:
|
|
123
124
|
case ActionKeyTypes.AnnotationsAttributes:
|
|
124
125
|
case ActionKeyTypes.ClusterAttributes:
|
|
126
|
+
case ActionKeyTypes.OverwriteExistingValues:
|
|
125
127
|
case ActionKeyTypes.AttributeNamesToDelete:
|
|
126
128
|
case ActionKeyTypes.Renames:
|
|
127
129
|
case ActionKeyTypes.PiiCategories:
|
|
@@ -4549,7 +4549,7 @@ const nodeConfig = {
|
|
|
4549
4549
|
framePadding: 12,
|
|
4550
4550
|
};
|
|
4551
4551
|
|
|
4552
|
-
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: rgba(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: rgba(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-props, var(--xy-background-color, 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__pane.selection .react-flow__panel {\n pointer-events: none;\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.top.center, .react-flow__panel.bottom.center {\n left: 50%;\n transform: translateX(-15px) translateX(-50%);\n }\n.react-flow__panel.left {\n left: 0;\n }\n.react-flow__panel.right {\n right: 0;\n }\n.react-flow__panel.left.center, .react-flow__panel.right.center {\n top: 50%;\n transform: translateY(-15px) translateY(-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__controls.horizontal .react-flow__controls-button {\n border-bottom: none;\n border-right: 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 }\n.react-flow__controls.horizontal .react-flow__controls-button:last-child {\n border-right: 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: 5px;\n height: 5px;\n border: 1px solid #fff;\n border-radius: 1px;\n background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n 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";
|
|
4552
|
+
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: rgba(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: rgba(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-props, var(--xy-background-color, 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/* Arrowhead marker styles - use CSS custom properties as default */\n.react-flow__arrowhead polyline {\n fill: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\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__pane.selection .react-flow__panel {\n pointer-events: none;\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.top.center, .react-flow__panel.bottom.center {\n left: 50%;\n transform: translateX(-15px) translateX(-50%);\n }\n.react-flow__panel.left {\n left: 0;\n }\n.react-flow__panel.right {\n right: 0;\n }\n.react-flow__panel.left.center, .react-flow__panel.right.center {\n top: 50%;\n transform: translateY(-15px) translateY(-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__controls.horizontal .react-flow__controls-button {\n border-bottom: none;\n border-right: 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 }\n.react-flow__controls.horizontal .react-flow__controls-button:last-child {\n border-right: 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: 5px;\n height: 5px;\n border: 1px solid #fff;\n border-radius: 1px;\n background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n 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";
|
|
4553
4553
|
styleInject(css_248z);
|
|
4554
4554
|
|
|
4555
4555
|
function getDefaultExportFromCjs (x) {
|
|
@@ -10325,6 +10325,25 @@ function getEventHandlerParams({ nodeId, dragItems, nodeLookup, dragging = true,
|
|
|
10325
10325
|
nodesFromDragItems,
|
|
10326
10326
|
];
|
|
10327
10327
|
}
|
|
10328
|
+
/**
|
|
10329
|
+
* If a selection is being dragged we want to apply the same snap offset to all nodes in the selection.
|
|
10330
|
+
* This function calculates the snap offset based on the first node in the selection.
|
|
10331
|
+
*/
|
|
10332
|
+
function calculateSnapOffset({ dragItems, snapGrid, x, y, }) {
|
|
10333
|
+
const refDragItem = dragItems.values().next().value;
|
|
10334
|
+
if (!refDragItem) {
|
|
10335
|
+
return null;
|
|
10336
|
+
}
|
|
10337
|
+
const refPos = {
|
|
10338
|
+
x: x - refDragItem.distance.x,
|
|
10339
|
+
y: y - refDragItem.distance.y,
|
|
10340
|
+
};
|
|
10341
|
+
const refPosSnapped = snapPosition(refPos, snapGrid);
|
|
10342
|
+
return {
|
|
10343
|
+
x: refPosSnapped.x - refPos.x,
|
|
10344
|
+
y: refPosSnapped.y - refPos.y,
|
|
10345
|
+
};
|
|
10346
|
+
}
|
|
10328
10347
|
|
|
10329
10348
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10330
10349
|
function XYDrag({ onNodeMouseDown, getStoreItems, onDragStart, onDrag, onDragStop, }) {
|
|
@@ -10338,39 +10357,43 @@ function XYDrag({ onNodeMouseDown, getStoreItems, onDragStart, onDrag, onDragSto
|
|
|
10338
10357
|
let d3Selection = null;
|
|
10339
10358
|
let abortDrag = false; // prevents unintentional dragging on multitouch
|
|
10340
10359
|
let nodePositionsChanged = false;
|
|
10360
|
+
// we store the last drag event to be able to use it in the update function
|
|
10361
|
+
let dragEvent = null;
|
|
10341
10362
|
// public functions
|
|
10342
10363
|
function update({ noDragClassName, handleSelector, domNode, isSelectable, nodeId, nodeClickDistance = 0, }) {
|
|
10343
10364
|
d3Selection = select(domNode);
|
|
10344
|
-
function updateNodes({ x, y }
|
|
10365
|
+
function updateNodes({ x, y }) {
|
|
10345
10366
|
const { nodeLookup, nodeExtent, snapGrid, snapToGrid, nodeOrigin, onNodeDrag, onSelectionDrag, onError, updateNodePositions, } = getStoreItems();
|
|
10346
10367
|
lastPos = { x, y };
|
|
10347
10368
|
let hasChange = false;
|
|
10348
|
-
|
|
10349
|
-
|
|
10350
|
-
|
|
10351
|
-
|
|
10352
|
-
|
|
10369
|
+
const isMultiDrag = dragItems.size > 1;
|
|
10370
|
+
const nodesBox = isMultiDrag && nodeExtent ? rectToBox(getInternalNodesBounds(dragItems)) : null;
|
|
10371
|
+
const multiDragSnapOffset = isMultiDrag && snapToGrid
|
|
10372
|
+
? calculateSnapOffset({
|
|
10373
|
+
dragItems,
|
|
10374
|
+
snapGrid,
|
|
10375
|
+
x,
|
|
10376
|
+
y,
|
|
10377
|
+
})
|
|
10378
|
+
: null;
|
|
10353
10379
|
for (const [id, dragItem] of dragItems) {
|
|
10380
|
+
/*
|
|
10381
|
+
* if the node is not in the nodeLookup anymore, it was probably deleted while dragging
|
|
10382
|
+
*/
|
|
10354
10383
|
if (!nodeLookup.has(id)) {
|
|
10355
|
-
/*
|
|
10356
|
-
* if the node is not in the nodeLookup anymore, it was probably deleted while dragging
|
|
10357
|
-
* and we don't need to update it anymore
|
|
10358
|
-
*/
|
|
10359
10384
|
continue;
|
|
10360
10385
|
}
|
|
10361
10386
|
let nextPosition = { x: x - dragItem.distance.x, y: y - dragItem.distance.y };
|
|
10362
10387
|
if (snapToGrid) {
|
|
10363
|
-
nextPosition =
|
|
10388
|
+
nextPosition = multiDragSnapOffset
|
|
10389
|
+
? {
|
|
10390
|
+
x: nextPosition.x + multiDragSnapOffset.x,
|
|
10391
|
+
y: nextPosition.y + multiDragSnapOffset.y,
|
|
10392
|
+
}
|
|
10393
|
+
: snapPosition(nextPosition, snapGrid);
|
|
10364
10394
|
}
|
|
10365
|
-
|
|
10366
|
-
|
|
10367
|
-
* based on its position so that the node stays at it's position relative to the selection.
|
|
10368
|
-
*/
|
|
10369
|
-
let adjustedNodeExtent = [
|
|
10370
|
-
[nodeExtent[0][0], nodeExtent[0][1]],
|
|
10371
|
-
[nodeExtent[1][0], nodeExtent[1][1]],
|
|
10372
|
-
];
|
|
10373
|
-
if (dragItems.size > 1 && nodeExtent && !dragItem.extent) {
|
|
10395
|
+
let adjustedNodeExtent = null;
|
|
10396
|
+
if (isMultiDrag && nodeExtent && !dragItem.extent && nodesBox) {
|
|
10374
10397
|
const { positionAbsolute } = dragItem.internals;
|
|
10375
10398
|
const x1 = positionAbsolute.x - nodesBox.x + nodeExtent[0][0];
|
|
10376
10399
|
const x2 = positionAbsolute.x + dragItem.measured.width - nodesBox.x2 + nodeExtent[1][0];
|
|
@@ -10385,7 +10408,7 @@ function XYDrag({ onNodeMouseDown, getStoreItems, onDragStart, onDrag, onDragSto
|
|
|
10385
10408
|
nodeId: id,
|
|
10386
10409
|
nextPosition,
|
|
10387
10410
|
nodeLookup,
|
|
10388
|
-
nodeExtent: adjustedNodeExtent,
|
|
10411
|
+
nodeExtent: adjustedNodeExtent ? adjustedNodeExtent : nodeExtent,
|
|
10389
10412
|
nodeOrigin,
|
|
10390
10413
|
onError,
|
|
10391
10414
|
});
|
|
@@ -10427,7 +10450,7 @@ function XYDrag({ onNodeMouseDown, getStoreItems, onDragStart, onDrag, onDragSto
|
|
|
10427
10450
|
lastPos.x = (lastPos.x ?? 0) - xMovement / transform[2];
|
|
10428
10451
|
lastPos.y = (lastPos.y ?? 0) - yMovement / transform[2];
|
|
10429
10452
|
if (await panBy({ x: xMovement, y: yMovement })) {
|
|
10430
|
-
updateNodes(lastPos
|
|
10453
|
+
updateNodes(lastPos);
|
|
10431
10454
|
}
|
|
10432
10455
|
}
|
|
10433
10456
|
autoPanId = requestAnimationFrame(autoPan);
|
|
@@ -10467,6 +10490,7 @@ function XYDrag({ onNodeMouseDown, getStoreItems, onDragStart, onDrag, onDragSto
|
|
|
10467
10490
|
containerBounds = domNode?.getBoundingClientRect() || null;
|
|
10468
10491
|
abortDrag = false;
|
|
10469
10492
|
nodePositionsChanged = false;
|
|
10493
|
+
dragEvent = event.sourceEvent;
|
|
10470
10494
|
if (nodeDragThreshold === 0) {
|
|
10471
10495
|
startDrag(event);
|
|
10472
10496
|
}
|
|
@@ -10477,6 +10501,7 @@ function XYDrag({ onNodeMouseDown, getStoreItems, onDragStart, onDrag, onDragSto
|
|
|
10477
10501
|
.on('drag', (event) => {
|
|
10478
10502
|
const { autoPanOnNodeDrag, transform, snapGrid, snapToGrid, nodeDragThreshold, nodeLookup } = getStoreItems();
|
|
10479
10503
|
const pointerPos = getPointerPosition(event.sourceEvent, { transform, snapGrid, snapToGrid, containerBounds });
|
|
10504
|
+
dragEvent = event.sourceEvent;
|
|
10480
10505
|
if ((event.sourceEvent.type === 'touchmove' && event.sourceEvent.touches.length > 1) ||
|
|
10481
10506
|
// if user deletes a node while dragging, we need to abort the drag to prevent errors
|
|
10482
10507
|
(nodeId && !nodeLookup.has(nodeId))) {
|
|
@@ -10499,9 +10524,8 @@ function XYDrag({ onNodeMouseDown, getStoreItems, onDragStart, onDrag, onDragSto
|
|
|
10499
10524
|
}
|
|
10500
10525
|
// skip events without movement
|
|
10501
10526
|
if ((lastPos.x !== pointerPos.xSnapped || lastPos.y !== pointerPos.ySnapped) && dragItems && dragStarted) {
|
|
10502
|
-
// dragEvent = event.sourceEvent as MouseEvent;
|
|
10503
10527
|
mousePosition = getEventPosition(event.sourceEvent, containerBounds);
|
|
10504
|
-
updateNodes(pointerPos
|
|
10528
|
+
updateNodes(pointerPos);
|
|
10505
10529
|
}
|
|
10506
10530
|
})
|
|
10507
10531
|
.on('end', (event) => {
|
|
@@ -10644,14 +10668,13 @@ function isConnectionValid(isInsideConnectionRadius, isHandleValid) {
|
|
|
10644
10668
|
}
|
|
10645
10669
|
|
|
10646
10670
|
const alwaysValid = () => true;
|
|
10647
|
-
function onPointerDown(event, { connectionMode, connectionRadius, handleId, nodeId, edgeUpdaterType, isTarget, domNode, nodeLookup, lib, autoPanOnConnect, flowId, panBy, cancelConnection, onConnectStart, onConnect, onConnectEnd, isValidConnection = alwaysValid, onReconnectEnd, updateConnection, getTransform, getFromHandle, autoPanSpeed, dragThreshold = 1, }) {
|
|
10671
|
+
function onPointerDown(event, { connectionMode, connectionRadius, handleId, nodeId, edgeUpdaterType, isTarget, domNode, nodeLookup, lib, autoPanOnConnect, flowId, panBy, cancelConnection, onConnectStart, onConnect, onConnectEnd, isValidConnection = alwaysValid, onReconnectEnd, updateConnection, getTransform, getFromHandle, autoPanSpeed, dragThreshold = 1, handleDomNode, }) {
|
|
10648
10672
|
// when xyflow is used inside a shadow root we can't use document
|
|
10649
10673
|
const doc = getHostForElement(event.target);
|
|
10650
10674
|
let autoPanId = 0;
|
|
10651
10675
|
let closestHandle;
|
|
10652
10676
|
const { x, y } = getEventPosition(event);
|
|
10653
|
-
const
|
|
10654
|
-
const handleType = getHandleType(edgeUpdaterType, clickedHandle);
|
|
10677
|
+
const handleType = getHandleType(edgeUpdaterType, handleDomNode);
|
|
10655
10678
|
const containerBounds = domNode?.getBoundingClientRect();
|
|
10656
10679
|
let connectionStarted = false;
|
|
10657
10680
|
if (!containerBounds || !handleType) {
|
|
@@ -10665,7 +10688,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
|
|
|
10665
10688
|
let autoPanStarted = false;
|
|
10666
10689
|
let connection = null;
|
|
10667
10690
|
let isValid = false;
|
|
10668
|
-
let
|
|
10691
|
+
let resultHandleDomNode = null;
|
|
10669
10692
|
// when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas
|
|
10670
10693
|
function autoPan() {
|
|
10671
10694
|
if (!autoPanOnConnect || !containerBounds) {
|
|
@@ -10738,7 +10761,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
|
|
|
10738
10761
|
flowId,
|
|
10739
10762
|
nodeLookup,
|
|
10740
10763
|
});
|
|
10741
|
-
|
|
10764
|
+
resultHandleDomNode = result.handleDomNode;
|
|
10742
10765
|
connection = result.connection;
|
|
10743
10766
|
isValid = isConnectionValid(!!closestHandle, result.isValid);
|
|
10744
10767
|
const newConnection = {
|
|
@@ -10772,7 +10795,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
|
|
|
10772
10795
|
}
|
|
10773
10796
|
function onPointerUp(event) {
|
|
10774
10797
|
if (connectionStarted) {
|
|
10775
|
-
if ((closestHandle ||
|
|
10798
|
+
if ((closestHandle || resultHandleDomNode) && connection && isValid) {
|
|
10776
10799
|
onConnect?.(connection);
|
|
10777
10800
|
}
|
|
10778
10801
|
/*
|
|
@@ -10795,7 +10818,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
|
|
|
10795
10818
|
autoPanStarted = false;
|
|
10796
10819
|
isValid = false;
|
|
10797
10820
|
connection = null;
|
|
10798
|
-
|
|
10821
|
+
resultHandleDomNode = null;
|
|
10799
10822
|
doc.removeEventListener('mousemove', onPointerMove);
|
|
10800
10823
|
doc.removeEventListener('mouseup', onPointerUp);
|
|
10801
10824
|
doc.removeEventListener('touchmove', onPointerMove);
|
|
@@ -10859,17 +10882,18 @@ const XYHandle = {
|
|
|
10859
10882
|
|
|
10860
10883
|
function XYMinimap({ domNode, panZoom, getTransform, getViewScale }) {
|
|
10861
10884
|
const selection = select(domNode);
|
|
10862
|
-
function update({ translateExtent, width, height, zoomStep =
|
|
10885
|
+
function update({ translateExtent, width, height, zoomStep = 1, pannable = true, zoomable = true, inversePan = false, }) {
|
|
10863
10886
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10864
10887
|
const zoomHandler = (event) => {
|
|
10865
|
-
const transform = getTransform();
|
|
10866
10888
|
if (event.sourceEvent.type !== 'wheel' || !panZoom) {
|
|
10867
10889
|
return;
|
|
10868
10890
|
}
|
|
10891
|
+
const transform = getTransform();
|
|
10892
|
+
const factor = event.sourceEvent.ctrlKey && isMacOs() ? 10 : 1;
|
|
10869
10893
|
const pinchDelta = -event.sourceEvent.deltaY *
|
|
10870
10894
|
(event.sourceEvent.deltaMode === 1 ? 0.05 : event.sourceEvent.deltaMode ? 1 : 0.002) *
|
|
10871
10895
|
zoomStep;
|
|
10872
|
-
const nextZoom = transform[2] * Math.pow(2, pinchDelta);
|
|
10896
|
+
const nextZoom = transform[2] * Math.pow(2, pinchDelta * factor);
|
|
10873
10897
|
panZoom.scaleTo(nextZoom);
|
|
10874
10898
|
};
|
|
10875
10899
|
let panStart = [0, 0];
|
|
@@ -13974,6 +13998,7 @@ function HandleComponent({ type = 'source', position = Position.Top, isValidConn
|
|
|
13974
13998
|
((isMouseTriggered && event.button === 0) || !isMouseTriggered)) {
|
|
13975
13999
|
const currentStore = store.getState();
|
|
13976
14000
|
XYHandle.onPointerDown(event.nativeEvent, {
|
|
14001
|
+
handleDomNode: event.currentTarget,
|
|
13977
14002
|
autoPanOnConnect: currentStore.autoPanOnConnect,
|
|
13978
14003
|
connectionMode: currentStore.connectionMode,
|
|
13979
14004
|
connectionRadius: currentStore.connectionRadius,
|
|
@@ -14525,17 +14550,18 @@ function useVisibleEdgeIds(onlyRenderVisible) {
|
|
|
14525
14550
|
}
|
|
14526
14551
|
|
|
14527
14552
|
const ArrowSymbol = ({ color = 'none', strokeWidth = 1 }) => {
|
|
14528
|
-
|
|
14529
|
-
|
|
14530
|
-
|
|
14531
|
-
|
|
14553
|
+
const style = {
|
|
14554
|
+
strokeWidth,
|
|
14555
|
+
...(color && { stroke: color }),
|
|
14556
|
+
};
|
|
14557
|
+
return jsxRuntimeExports.jsx("polyline", { style: style, strokeLinecap: "round", strokeLinejoin: "round", fill: "none", points: "-5,-4 0,0 -5,4" });
|
|
14532
14558
|
};
|
|
14533
14559
|
const ArrowClosedSymbol = ({ color = 'none', strokeWidth = 1 }) => {
|
|
14534
|
-
|
|
14535
|
-
|
|
14536
|
-
|
|
14537
|
-
|
|
14538
|
-
|
|
14560
|
+
const style = {
|
|
14561
|
+
strokeWidth,
|
|
14562
|
+
...(color && { stroke: color, fill: color }),
|
|
14563
|
+
};
|
|
14564
|
+
return jsxRuntimeExports.jsx("polyline", { style: style, strokeLinecap: "round", strokeLinejoin: "round", points: "-5,-4 0,0 -5,4 -5,-4" });
|
|
14539
14565
|
};
|
|
14540
14566
|
const MarkerSymbols = {
|
|
14541
14567
|
[MarkerType.Arrow]: ArrowSymbol,
|
|
@@ -14663,7 +14689,7 @@ const EdgeText = memo(EdgeTextComponent);
|
|
|
14663
14689
|
* You can see all the props passed to a custom edge by looking at the [`EdgeProps`](/api-reference/types/edge-props) type.
|
|
14664
14690
|
*/
|
|
14665
14691
|
function BaseEdge({ path, labelX, labelY, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, interactionWidth = 20, ...props }) {
|
|
14666
|
-
return (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("path", { ...props, d: path, fill: "none", className: cc(['react-flow__edge-path', props.className]) }), interactionWidth
|
|
14692
|
+
return (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("path", { ...props, d: path, fill: "none", className: cc(['react-flow__edge-path', props.className]) }), interactionWidth ? (jsxRuntimeExports.jsx("path", { d: path, fill: "none", strokeOpacity: 0, strokeWidth: interactionWidth, className: "react-flow__edge-interaction" })) : null, label && isNumeric(labelX) && isNumeric(labelY) ? (jsxRuntimeExports.jsx(EdgeText, { x: labelX, y: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius })) : null] }));
|
|
14667
14693
|
}
|
|
14668
14694
|
|
|
14669
14695
|
function getControl({ pos, x1, y1, x2, y2 }) {
|
|
@@ -14989,6 +15015,7 @@ function EdgeUpdateAnchors({ isReconnectable, reconnectRadius, edge, sourceX, so
|
|
|
14989
15015
|
getTransform: () => store.getState().transform,
|
|
14990
15016
|
getFromHandle: () => store.getState().connection.fromHandle,
|
|
14991
15017
|
dragThreshold: store.getState().connectionDragThreshold,
|
|
15018
|
+
handleDomNode: event.currentTarget,
|
|
14992
15019
|
});
|
|
14993
15020
|
};
|
|
14994
15021
|
const onReconnectSourceMouseDown = (event) => handleEdgeUpdater(event, { nodeId: edge.target, id: edge.targetHandle ?? null, type: 'target' });
|
|
@@ -16250,7 +16277,7 @@ function MiniMapComponent({ style, className, nodeStrokeColor, nodeColor, nodeCl
|
|
|
16250
16277
|
* We need to rename the prop to be `CapitalCase` so that JSX will render it as
|
|
16251
16278
|
* a component properly.
|
|
16252
16279
|
*/
|
|
16253
|
-
nodeComponent, bgColor, maskColor, maskStrokeColor, maskStrokeWidth, position = 'bottom-right', onClick, onNodeClick, pannable = false, zoomable = false, ariaLabel, inversePan, zoomStep =
|
|
16280
|
+
nodeComponent, bgColor, maskColor, maskStrokeColor, maskStrokeWidth, position = 'bottom-right', onClick, onNodeClick, pannable = false, zoomable = false, ariaLabel, inversePan, zoomStep = 1, offsetScale = 5, }) {
|
|
16254
16281
|
const store = useStoreApi();
|
|
16255
16282
|
const svg = useRef(null);
|
|
16256
16283
|
const { boundingRect, viewBB, rfId, panZoom, translateExtent, flowWidth, flowHeight, ariaLabelConfig } = useStore(selector$1, shallow$1);
|
package/lib/snippets.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { B as Button, _ as Text, L as NotificationNote } from './index-
|
|
2
|
-
export { al as AddButton, aq as AddNode, ar as BaseNode, an as CopyText, as as EdgedNode, aj as Flow, at as FrameNode, au as HeaderNode, az as LabeledEdge, av as MapItemNode, aw as NoDataNode, ao as PodContainer, ax as ScrollNode, ay as SkeletonNode, ap as SourceContainer, ag as nodeConfig } from './index-
|
|
1
|
+
import { B as Button, _ as Text, L as NotificationNote } from './index-90161559.js';
|
|
2
|
+
export { al as AddButton, aq as AddNode, ar as BaseNode, an as CopyText, as as EdgedNode, aj as Flow, at as FrameNode, au as HeaderNode, az as LabeledEdge, av as MapItemNode, aw as NoDataNode, ao as PodContainer, ax as ScrollNode, ay as SkeletonNode, ap as SourceContainer, ag as nodeConfig } from './index-90161559.js';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { T as Theme, B as BUTTON_TEXTS, b as DISPLAY_TITLES } from './index-86030474.js';
|
|
5
5
|
import { E as EditIcon } from './index-72089d6e.js';
|
|
@@ -32,7 +32,7 @@ interface StoreState {
|
|
|
32
32
|
setErrors: (metrics: FiltersState['errors']) => void;
|
|
33
33
|
onlyErrors: FiltersState['onlyErrors'];
|
|
34
34
|
setOnlyErrors: (onlyErrors: FiltersState['onlyErrors']) => void;
|
|
35
|
-
setAll: (params: FiltersState) => void;
|
|
35
|
+
setAll: (params: Partial<FiltersState>) => void;
|
|
36
36
|
clearAll: () => void;
|
|
37
37
|
getEmptyState: () => FiltersState;
|
|
38
38
|
}
|
|
@@ -24,6 +24,7 @@ export declare enum ActionKeyTypes {
|
|
|
24
24
|
LabelsAttributes = "labelsAttributes",
|
|
25
25
|
AnnotationsAttributes = "annotationsAttributes",
|
|
26
26
|
ClusterAttributes = "clusterAttributes",
|
|
27
|
+
OverwriteExistingValues = "overwriteExistingValues",
|
|
27
28
|
AttributeNamesToDelete = "attributeNamesToDelete",
|
|
28
29
|
Renames = "renames",
|
|
29
30
|
PiiCategories = "piiCategories",
|
|
@@ -49,6 +50,7 @@ export interface Action {
|
|
|
49
50
|
[ActionKeyTypes.LabelsAttributes]?: LabelsAttributes[] | null;
|
|
50
51
|
[ActionKeyTypes.AnnotationsAttributes]?: AnnotationsAttributes[] | null;
|
|
51
52
|
[ActionKeyTypes.ClusterAttributes]?: ClusterAttributes[] | null;
|
|
53
|
+
[ActionKeyTypes.OverwriteExistingValues]?: boolean | null;
|
|
52
54
|
[ActionKeyTypes.AttributeNamesToDelete]?: string[] | null;
|
|
53
55
|
[ActionKeyTypes.Renames]?: {
|
|
54
56
|
[oldKey: string]: string;
|
|
@@ -84,6 +86,7 @@ export interface ActionFormData {
|
|
|
84
86
|
[ActionKeyTypes.LabelsAttributes]: Action['spec'][ActionKeyTypes.LabelsAttributes];
|
|
85
87
|
[ActionKeyTypes.AnnotationsAttributes]: Action['spec'][ActionKeyTypes.AnnotationsAttributes];
|
|
86
88
|
[ActionKeyTypes.ClusterAttributes]: Action['spec'][ActionKeyTypes.ClusterAttributes];
|
|
89
|
+
[ActionKeyTypes.OverwriteExistingValues]: Action['spec'][ActionKeyTypes.OverwriteExistingValues];
|
|
87
90
|
[ActionKeyTypes.AttributeNamesToDelete]: Action['spec'][ActionKeyTypes.AttributeNamesToDelete];
|
|
88
91
|
[ActionKeyTypes.Renames]: Action['spec'][ActionKeyTypes.Renames];
|
|
89
92
|
[ActionKeyTypes.PiiCategories]: Action['spec'][ActionKeyTypes.PiiCategories];
|
package/lib/types.js
CHANGED
|
@@ -27,6 +27,7 @@ var ActionKeyTypes;
|
|
|
27
27
|
ActionKeyTypes["AnnotationsAttributes"] = "annotationsAttributes";
|
|
28
28
|
// AddClusterInfo
|
|
29
29
|
ActionKeyTypes["ClusterAttributes"] = "clusterAttributes";
|
|
30
|
+
ActionKeyTypes["OverwriteExistingValues"] = "overwriteExistingValues";
|
|
30
31
|
// DeleteAttributes
|
|
31
32
|
ActionKeyTypes["AttributeNamesToDelete"] = "attributeNamesToDelete";
|
|
32
33
|
// RenameAttributes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@odigos/ui-kit",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.85",
|
|
4
4
|
"author": "Odigos",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
"zustand": "^5.0.6"
|
|
86
86
|
},
|
|
87
87
|
"dependencies": {
|
|
88
|
-
"@xyflow/react": "^12.8.
|
|
88
|
+
"@xyflow/react": "^12.8.3",
|
|
89
89
|
"javascript-time-ago": "^2.5.11",
|
|
90
90
|
"lottie-react": "^2.4.1",
|
|
91
91
|
"prism-react-renderer": "^2.4.1",
|
|
@@ -96,8 +96,8 @@
|
|
|
96
96
|
"zustand": "^5.0.7"
|
|
97
97
|
},
|
|
98
98
|
"devDependencies": {
|
|
99
|
-
"@babel/core": "^7.28.
|
|
100
|
-
"@babel/preset-env": "^7.28.
|
|
99
|
+
"@babel/core": "^7.28.3",
|
|
100
|
+
"@babel/preset-env": "^7.28.3",
|
|
101
101
|
"@babel/preset-react": "^7.27.1",
|
|
102
102
|
"@babel/preset-typescript": "^7.27.1",
|
|
103
103
|
"@eslint/eslintrc": "^3.3.1",
|
|
@@ -105,22 +105,22 @@
|
|
|
105
105
|
"@rollup/plugin-json": "^6.1.0",
|
|
106
106
|
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
107
107
|
"@rollup/plugin-typescript": "^12.1.4",
|
|
108
|
-
"@storybook/addon-docs": "^9.1.
|
|
108
|
+
"@storybook/addon-docs": "^9.1.2",
|
|
109
109
|
"@storybook/addon-webpack5-compiler-babel": "^3.0.6",
|
|
110
|
-
"@storybook/react-webpack5": "9.1.
|
|
111
|
-
"@types/node": "^24.
|
|
112
|
-
"@types/react": "^19.1.
|
|
110
|
+
"@storybook/react-webpack5": "9.1.2",
|
|
111
|
+
"@types/node": "^24.3.0",
|
|
112
|
+
"@types/react": "^19.1.10",
|
|
113
113
|
"@types/react-dom": "^19.1.7",
|
|
114
114
|
"babel-loader": "^10.0.0",
|
|
115
115
|
"babel-plugin-styled-components": "^2.1.4",
|
|
116
|
-
"eslint": "^9.
|
|
117
|
-
"eslint-config-next": "^15.4.
|
|
118
|
-
"eslint-plugin-storybook": "9.1.
|
|
119
|
-
"next": "^15.4.
|
|
116
|
+
"eslint": "^9.33.0",
|
|
117
|
+
"eslint-config-next": "^15.4.6",
|
|
118
|
+
"eslint-plugin-storybook": "9.1.2",
|
|
119
|
+
"next": "^15.4.6",
|
|
120
120
|
"postcss": "^8.5.6",
|
|
121
121
|
"rollup": "^3.29.4",
|
|
122
122
|
"rollup-plugin-postcss": "^4.0.2",
|
|
123
|
-
"storybook": "9.1.
|
|
123
|
+
"storybook": "9.1.2",
|
|
124
124
|
"typescript": "^5.9.2"
|
|
125
125
|
}
|
|
126
126
|
}
|