@odigos/ui-kit 0.0.82 → 0.0.84
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 +24 -26
- package/lib/{index-6cc9ec6b.js → index-8e9ad0b4.js} +1 -1
- package/lib/{index-8b8d8883.js → index-90161559.js} +79 -51
- package/lib/snippets.js +2 -2
- 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.84](https://github.com/odigos-io/ui-kit/compare/ui-kit-v0.0.83...ui-kit-v0.0.84) (2025-08-18)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* 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))
|
|
9
|
+
|
|
10
|
+
## [0.0.83](https://github.com/odigos-io/ui-kit/compare/ui-kit-v0.0.82...ui-kit-v0.0.83) (2025-08-13)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* action prop for text ([#320](https://github.com/odigos-io/ui-kit/issues/320)) ([39ae91c](https://github.com/odigos-io/ui-kit/commit/39ae91c9bfeee6f66be61b2b196e3b0ebdb5e8d8))
|
|
16
|
+
|
|
3
17
|
## [0.0.82](https://github.com/odigos-io/ui-kit/compare/ui-kit-v0.0.81...ui-kit-v0.0.82) (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';
|
|
@@ -131,7 +131,7 @@ const buildCard$3 = (action) => {
|
|
|
131
131
|
return arr;
|
|
132
132
|
};
|
|
133
133
|
|
|
134
|
-
const KEY$
|
|
134
|
+
const KEY$7 = ActionKeyTypes.PiiCategories;
|
|
135
135
|
const ListContainer$2 = styled.div `
|
|
136
136
|
display: flex;
|
|
137
137
|
flex-direction: row;
|
|
@@ -150,18 +150,18 @@ const PII_OPTIONS = [
|
|
|
150
150
|
},
|
|
151
151
|
];
|
|
152
152
|
const PiiMasking = ({ value, setValue, formErrors }) => {
|
|
153
|
-
const errorMessage = formErrors[KEY$
|
|
154
|
-
const mappedValue = value[KEY$
|
|
153
|
+
const errorMessage = formErrors[KEY$7];
|
|
154
|
+
const mappedValue = value[KEY$7] || [];
|
|
155
155
|
const [isLastSelection, setIsLastSelection] = useState(mappedValue.length === 1);
|
|
156
156
|
const handleChange = (id, isAdd) => {
|
|
157
157
|
const arr = isAdd ? [...mappedValue, id] : mappedValue.filter((str) => str !== id);
|
|
158
|
-
setValue(KEY$
|
|
158
|
+
setValue(KEY$7, arr);
|
|
159
159
|
setIsLastSelection(arr.length === 1);
|
|
160
160
|
};
|
|
161
161
|
useEffect(() => {
|
|
162
162
|
if (!mappedValue.length) {
|
|
163
163
|
const arr = PII_OPTIONS.map(({ id }) => id);
|
|
164
|
-
setValue(KEY$
|
|
164
|
+
setValue(KEY$7, arr);
|
|
165
165
|
setIsLastSelection(PII_OPTIONS.length === 1);
|
|
166
166
|
}
|
|
167
167
|
// eslint-disable-next-line
|
|
@@ -172,11 +172,11 @@ const PiiMasking = ({ value, setValue, formErrors }) => {
|
|
|
172
172
|
!!errorMessage && React.createElement(FieldError, null, errorMessage)));
|
|
173
173
|
};
|
|
174
174
|
|
|
175
|
-
const KEY$
|
|
175
|
+
const KEY$6 = ActionKeyTypes.FallbackSamplingRatio, MIN$1 = 0, MAX$1 = 100;
|
|
176
176
|
const ErrorSampler = ({ value, setValue, formErrors }) => {
|
|
177
|
-
const errorMessage = formErrors[KEY$
|
|
178
|
-
const mappedValue = value[KEY$
|
|
179
|
-
const handleChange = (val) => setValue(KEY$
|
|
177
|
+
const errorMessage = formErrors[KEY$6];
|
|
178
|
+
const mappedValue = value[KEY$6];
|
|
179
|
+
const handleChange = (val) => setValue(KEY$6, Math.max(MIN$1, Math.min(Number(val), MAX$1)) || MIN$1);
|
|
180
180
|
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
181
|
};
|
|
182
182
|
|
|
@@ -234,7 +234,7 @@ const K8sAttributes = ({ value, setValue, formErrors }) => {
|
|
|
234
234
|
React.createElement(InputTable, { columns: ANNOTATION_COLUMNS, value: value[ActionKeyTypes.AnnotationsAttributes] || [], onChange: (arr) => setValue(ActionKeyTypes.AnnotationsAttributes, arr), errorMessage: formErrors[ActionKeyTypes.AnnotationsAttributes] })));
|
|
235
235
|
};
|
|
236
236
|
|
|
237
|
-
const KEY$
|
|
237
|
+
const KEY$5 = ActionKeyTypes.EndpointsFilters;
|
|
238
238
|
const COLUMNS$2 = [
|
|
239
239
|
{
|
|
240
240
|
title: 'Service',
|
|
@@ -268,8 +268,8 @@ const COLUMNS$2 = [
|
|
|
268
268
|
},
|
|
269
269
|
];
|
|
270
270
|
const LatencySampler = ({ value, setValue, formErrors }) => {
|
|
271
|
-
const errorMessage = formErrors[KEY$
|
|
272
|
-
const mappedValue = value[KEY$
|
|
271
|
+
const errorMessage = formErrors[KEY$5];
|
|
272
|
+
const mappedValue = value[KEY$5] || [];
|
|
273
273
|
const handleChange = (arr) => {
|
|
274
274
|
const mapped = arr.map(({ serviceName, httpRoute, minimumLatencyThreshold, fallbackSamplingRatio }) => {
|
|
275
275
|
const row = {
|
|
@@ -280,23 +280,21 @@ const LatencySampler = ({ value, setValue, formErrors }) => {
|
|
|
280
280
|
};
|
|
281
281
|
return row;
|
|
282
282
|
});
|
|
283
|
-
setValue(KEY$
|
|
283
|
+
setValue(KEY$5, mapped);
|
|
284
284
|
};
|
|
285
285
|
return React.createElement(InputTable, { columns: COLUMNS$2, value: mappedValue, onChange: handleChange, errorMessage: errorMessage });
|
|
286
286
|
};
|
|
287
287
|
|
|
288
|
-
const KEY$5 = ActionKeyTypes.ClusterAttributes;
|
|
289
288
|
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 });
|
|
289
|
+
return (React.createElement(React.Fragment, null,
|
|
290
|
+
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) }),
|
|
291
|
+
React.createElement(KeyValueInputsList, { title: 'Resource Attributes', value: value[ActionKeyTypes.ClusterAttributes]?.map((obj) => ({
|
|
292
|
+
key: obj.attributeName,
|
|
293
|
+
value: obj.attributeStringValue,
|
|
294
|
+
})) || [], onChange: (arr) => setValue(ActionKeyTypes.ClusterAttributes, arr.map((obj) => ({
|
|
295
|
+
attributeName: obj.key,
|
|
296
|
+
attributeStringValue: obj.value,
|
|
297
|
+
}))), required: true, errorMessage: formErrors[ActionKeyTypes.ClusterAttributes] })));
|
|
300
298
|
};
|
|
301
299
|
|
|
302
300
|
const KEY$4 = ActionKeyTypes.AttributeNamesToDelete;
|
|
@@ -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);
|
|
@@ -17335,12 +17362,13 @@ const DataCard = ({ title = 'Details', titleBadge, description, action: Action,
|
|
|
17335
17362
|
const [hovered, setHovered] = useState(false);
|
|
17336
17363
|
return (React.createElement(CardContainer, { "$hovered": hovered },
|
|
17337
17364
|
!!title || !!description || !!Action ? (React.createElement(Header$1, { "$clickable": withExtend || false, onClick: () => withExtend && setExtend((prev) => !prev), onMouseEnter: () => withExtend && setHovered(true), onMouseLeave: () => withExtend && setHovered(false) },
|
|
17338
|
-
|
|
17339
|
-
title,
|
|
17340
|
-
|
|
17341
|
-
|
|
17365
|
+
React.createElement(FlexRow, null,
|
|
17366
|
+
!!title && (React.createElement(Title$7, null,
|
|
17367
|
+
title,
|
|
17368
|
+
titleBadge === OtherStatus.Loading ? React.createElement(FadeLoader, null) : titleBadge !== undefined && React.createElement(Badge, { label: titleBadge }))),
|
|
17369
|
+
(!!Action || withExtend) && (React.createElement(ActionWrapper, null,
|
|
17342
17370
|
typeof Action === 'function' ? React.createElement(Action, null) : Action,
|
|
17343
|
-
withExtend && React.createElement(ExtendArrow, { extend:
|
|
17371
|
+
withExtend && React.createElement(ExtendArrow, { extend: extend })))),
|
|
17344
17372
|
!!description && React.createElement(Description$2, null, description))) : null,
|
|
17345
17373
|
(!withExtend || (withExtend && extend)) && (children || React.createElement(DataCardFields, { data: data }))));
|
|
17346
17374
|
};
|
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';
|
|
@@ -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.84",
|
|
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
|
}
|