@uipath/apollo-react 4.47.1 → 4.48.1
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/dist/canvas/components/ButtonHandle/HandleButton.cjs +2 -0
- package/dist/canvas/components/ButtonHandle/HandleButton.d.ts +1 -1
- package/dist/canvas/components/ButtonHandle/HandleButton.d.ts.map +1 -1
- package/dist/canvas/components/ButtonHandle/HandleButton.js +2 -0
- package/dist/canvas/components/Edges/shared/hooks/useExecutionEdge.cjs +7 -2
- package/dist/canvas/components/Edges/shared/hooks/useExecutionEdge.d.ts.map +1 -1
- package/dist/canvas/components/Edges/shared/hooks/useExecutionEdge.js +7 -2
- package/dist/canvas/components/LoopNode/LoopNode.cjs +10 -10
- package/dist/canvas/components/LoopNode/LoopNode.js +10 -10
- package/dist/canvas/components/NodeViewportOverlay.cjs +21 -9
- package/dist/canvas/components/NodeViewportOverlay.d.ts.map +1 -1
- package/dist/canvas/components/NodeViewportOverlay.js +22 -10
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.cjs +11 -5
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.d.ts.map +1 -1
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.js +11 -5
- package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.cjs +1 -0
- package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.d.ts.map +1 -1
- package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.js +1 -0
- package/dist/canvas/storybook-utils/components/StoryInfoPanel.d.ts +1 -1
- package/dist/canvas/storybook-utils/components/StoryInfoPanel.d.ts.map +1 -1
- package/dist/canvas/storybook-utils/manifests/node-definitions.d.ts.map +1 -1
- package/dist/canvas/styles/tailwind.canvas.css +1 -1
- package/dist/canvas/utils/index.cjs +17 -10
- package/dist/canvas/utils/index.d.ts +1 -0
- package/dist/canvas/utils/index.d.ts.map +1 -1
- package/dist/canvas/utils/index.js +1 -0
- package/package.json +2 -2
|
@@ -109,7 +109,9 @@ const HandleButton = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(({ v
|
|
|
109
109
|
})
|
|
110
110
|
]
|
|
111
111
|
});
|
|
112
|
+
const shouldRenderPortal = Boolean(visible || label && labelVisible);
|
|
112
113
|
if (portal) {
|
|
114
|
+
if (!shouldRenderPortal) return null;
|
|
113
115
|
const { nodeId, ...anchor } = portal;
|
|
114
116
|
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_NodeViewportOverlay_cjs_namespaceObject.NodeViewportOverlay, {
|
|
115
117
|
nodeId: nodeId,
|
|
@@ -19,7 +19,7 @@ export declare const HandleButton: import("react").MemoExoticComponent<({ visibl
|
|
|
19
19
|
labelIcon?: React.ReactNode;
|
|
20
20
|
labelBackgroundColor?: string;
|
|
21
21
|
portal?: HandleButtonPortal;
|
|
22
|
-
}) => import("react/jsx-runtime").JSX.Element>;
|
|
22
|
+
}) => import("react/jsx-runtime").JSX.Element | null>;
|
|
23
23
|
export declare const HandleHoverBridge: import("react").MemoExoticComponent<({ position, visible }: {
|
|
24
24
|
position: Position;
|
|
25
25
|
visible?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleButton.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/ButtonHandle/HandleButton.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AAepE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAUF,eAAO,MAAM,YAAY,8KAapB;IACD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B,
|
|
1
|
+
{"version":3,"file":"HandleButton.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/ButtonHandle/HandleButton.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AAepE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAUF,eAAO,MAAM,YAAY,8KAapB;IACD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B,oDAqHF,CAAC;AA0CF,eAAO,MAAM,iBAAiB,8DACJ;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,oDAOlE,CAAC"}
|
|
@@ -80,7 +80,9 @@ const HandleButton = /*#__PURE__*/ memo(({ visible, labelVisible, position, onAc
|
|
|
80
80
|
})
|
|
81
81
|
]
|
|
82
82
|
});
|
|
83
|
+
const shouldRenderPortal = Boolean(visible || label && labelVisible);
|
|
83
84
|
if (portal) {
|
|
85
|
+
if (!shouldRenderPortal) return null;
|
|
84
86
|
const { nodeId, ...anchor } = portal;
|
|
85
87
|
return /*#__PURE__*/ jsx(NodeViewportOverlay, {
|
|
86
88
|
nodeId: nodeId,
|
|
@@ -28,6 +28,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
28
28
|
});
|
|
29
29
|
const external_react_namespaceObject = require("react");
|
|
30
30
|
const index_cjs_namespaceObject = require("../../../../hooks/index.cjs");
|
|
31
|
+
const execution_cjs_namespaceObject = require("../../../../types/execution.cjs");
|
|
31
32
|
const external_EdgeUtils_cjs_namespaceObject = require("../../EdgeUtils.cjs");
|
|
32
33
|
function resolveStatus(executionState, validation) {
|
|
33
34
|
if (executionState) return executionState?.status ?? executionState;
|
|
@@ -39,9 +40,13 @@ function useExecutionEdge(args) {
|
|
|
39
40
|
const validation = (0, index_cjs_namespaceObject.useElementValidationStatus)(edgeId);
|
|
40
41
|
const status = enabled ? resolveStatus(executionState, validation) : void 0;
|
|
41
42
|
const statusColor = status ? external_EdgeUtils_cjs_namespaceObject.edgeTargetStatusToEdgeColor[status] : void 0;
|
|
42
|
-
const
|
|
43
|
+
const animationPath = status === execution_cjs_namespaceObject.ElementStatusValues.InProgress ? edgePath : void 0;
|
|
44
|
+
const animation = (0, external_react_namespaceObject.useMemo)(()=>{
|
|
45
|
+
if (null == animationPath) return null;
|
|
46
|
+
return (0, external_EdgeUtils_cjs_namespaceObject.getStatusAnimation)(status, animationPath);
|
|
47
|
+
}, [
|
|
43
48
|
status,
|
|
44
|
-
|
|
49
|
+
animationPath
|
|
45
50
|
]);
|
|
46
51
|
return {
|
|
47
52
|
statusColor,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useExecutionEdge.d.ts","sourceRoot":"","sources":["../../../../../../src/canvas/components/Edges/shared/hooks/useExecutionEdge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useExecutionEdge.d.ts","sourceRoot":"","sources":["../../../../../../src/canvas/components/Edges/shared/hooks/useExecutionEdge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAUhD,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IAEf,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAeF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,aAAa,CAmB1E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useMemo } from "react";
|
|
2
2
|
import { useEdgeExecutionState, useElementValidationStatus } from "../../../../hooks/index.js";
|
|
3
|
+
import { ElementStatusValues } from "../../../../types/execution.js";
|
|
3
4
|
import { edgeTargetStatusToEdgeColor, getStatusAnimation } from "../../EdgeUtils.js";
|
|
4
5
|
function resolveStatus(executionState, validation) {
|
|
5
6
|
if (executionState) return executionState?.status ?? executionState;
|
|
@@ -11,9 +12,13 @@ function useExecutionEdge(args) {
|
|
|
11
12
|
const validation = useElementValidationStatus(edgeId);
|
|
12
13
|
const status = enabled ? resolveStatus(executionState, validation) : void 0;
|
|
13
14
|
const statusColor = status ? edgeTargetStatusToEdgeColor[status] : void 0;
|
|
14
|
-
const
|
|
15
|
+
const animationPath = status === ElementStatusValues.InProgress ? edgePath : void 0;
|
|
16
|
+
const animation = useMemo(()=>{
|
|
17
|
+
if (null == animationPath) return null;
|
|
18
|
+
return getStatusAnimation(status, animationPath);
|
|
19
|
+
}, [
|
|
15
20
|
status,
|
|
16
|
-
|
|
21
|
+
animationPath
|
|
17
22
|
]);
|
|
18
23
|
return {
|
|
19
24
|
statusColor,
|
|
@@ -117,7 +117,7 @@ function resolveInteractionState(dragging, selected, isHovered) {
|
|
|
117
117
|
return 'default';
|
|
118
118
|
}
|
|
119
119
|
function useHasChildNodes(id, enabled) {
|
|
120
|
-
return (0, react_cjs_namespaceObject.useStore)((0, external_react_namespaceObject.useCallback)((state)=>!enabled || state.
|
|
120
|
+
return (0, react_cjs_namespaceObject.useStore)((0, external_react_namespaceObject.useCallback)((state)=>!enabled || (state.parentLookup.get(id)?.size ?? 0) > 0, [
|
|
121
121
|
id,
|
|
122
122
|
enabled
|
|
123
123
|
]));
|
|
@@ -352,7 +352,7 @@ function LoopNodeComponent(props) {
|
|
|
352
352
|
hasTopLeftAdornment: hasTopLeftAdornment,
|
|
353
353
|
hasTopRightAdornment: hasTopRightAdornment
|
|
354
354
|
}),
|
|
355
|
-
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(
|
|
355
|
+
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(LoopNode_BodyFrame, {
|
|
356
356
|
isEmpty: showEmptyStateButton,
|
|
357
357
|
isLoading: isLoading
|
|
358
358
|
})
|
|
@@ -363,10 +363,10 @@ function LoopNodeComponent(props) {
|
|
|
363
363
|
shape: "rectangle",
|
|
364
364
|
children: adornments[slot]
|
|
365
365
|
}, slot) : null),
|
|
366
|
-
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(
|
|
366
|
+
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(LoopNode_ResizeCornerIndicators, {
|
|
367
367
|
visible: resizeControlsVisible
|
|
368
368
|
}),
|
|
369
|
-
resizeControlsMounted ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(
|
|
369
|
+
resizeControlsMounted ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(LoopNode_ResizeControls, {
|
|
370
370
|
minimums: resizeMinimums,
|
|
371
371
|
onResize: handleResize,
|
|
372
372
|
onResizeStart: handleResizeStart,
|
|
@@ -478,7 +478,7 @@ function EmptyState({ label, onAddFirstChild }) {
|
|
|
478
478
|
})
|
|
479
479
|
});
|
|
480
480
|
}
|
|
481
|
-
|
|
481
|
+
const LoopNode_BodyFrame = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(function({ isEmpty, isLoading }) {
|
|
482
482
|
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
|
|
483
483
|
"data-testid": "loop-body-frame",
|
|
484
484
|
"data-empty": isEmpty ? 'true' : 'false',
|
|
@@ -487,8 +487,8 @@ function BodyFrame({ isEmpty, isLoading }) {
|
|
|
487
487
|
className: "m-6 h-14 w-full animate-pulse rounded-[18px] bg-(--canvas-background-overlay)"
|
|
488
488
|
}) : null
|
|
489
489
|
});
|
|
490
|
-
}
|
|
491
|
-
|
|
490
|
+
});
|
|
491
|
+
const LoopNode_ResizeControls = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(function({ minimums = DEFAULT_RESIZE_MINIMUMS, onResize, onResizeStart, onResizeEnd }) {
|
|
492
492
|
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(jsx_runtime_namespaceObject.Fragment, {
|
|
493
493
|
children: RESIZE_CONTROLS.map(({ position, widthSide, heightSide, cursor })=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(react_cjs_namespaceObject.NodeResizeControl, {
|
|
494
494
|
style: RESIZE_CONTROL_STYLE,
|
|
@@ -506,8 +506,8 @@ function ResizeControls({ minimums = DEFAULT_RESIZE_MINIMUMS, onResize, onResize
|
|
|
506
506
|
})
|
|
507
507
|
}, position))
|
|
508
508
|
});
|
|
509
|
-
}
|
|
510
|
-
|
|
509
|
+
});
|
|
510
|
+
const LoopNode_ResizeCornerIndicators = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(function({ visible }) {
|
|
511
511
|
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(jsx_runtime_namespaceObject.Fragment, {
|
|
512
512
|
children: RESIZE_CONTROLS.map(({ position, indicatorClassName })=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
|
|
513
513
|
"aria-hidden": true,
|
|
@@ -515,7 +515,7 @@ function ResizeCornerIndicators({ visible }) {
|
|
|
515
515
|
className: (0, apollo_wind_namespaceObject.cn)('pointer-events-none absolute h-2 w-2 rounded-full bg-brand transition-opacity', indicatorClassName, visible ? 'opacity-100' : 'opacity-0')
|
|
516
516
|
}, position))
|
|
517
517
|
});
|
|
518
|
-
}
|
|
518
|
+
});
|
|
519
519
|
function HandleGroups({ groups, ...handleGroupProps }) {
|
|
520
520
|
if (0 === groups.length) return null;
|
|
521
521
|
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(jsx_runtime_namespaceObject.Fragment, {
|
|
@@ -89,7 +89,7 @@ function resolveInteractionState(dragging, selected, isHovered) {
|
|
|
89
89
|
return 'default';
|
|
90
90
|
}
|
|
91
91
|
function useHasChildNodes(id, enabled) {
|
|
92
|
-
return useStore(useCallback((state)=>!enabled || state.
|
|
92
|
+
return useStore(useCallback((state)=>!enabled || (state.parentLookup.get(id)?.size ?? 0) > 0, [
|
|
93
93
|
id,
|
|
94
94
|
enabled
|
|
95
95
|
]));
|
|
@@ -324,7 +324,7 @@ function LoopNodeComponent(props) {
|
|
|
324
324
|
hasTopLeftAdornment: hasTopLeftAdornment,
|
|
325
325
|
hasTopRightAdornment: hasTopRightAdornment
|
|
326
326
|
}),
|
|
327
|
-
/*#__PURE__*/ jsx(
|
|
327
|
+
/*#__PURE__*/ jsx(LoopNode_BodyFrame, {
|
|
328
328
|
isEmpty: showEmptyStateButton,
|
|
329
329
|
isLoading: isLoading
|
|
330
330
|
})
|
|
@@ -335,10 +335,10 @@ function LoopNodeComponent(props) {
|
|
|
335
335
|
shape: "rectangle",
|
|
336
336
|
children: adornments[slot]
|
|
337
337
|
}, slot) : null),
|
|
338
|
-
/*#__PURE__*/ jsx(
|
|
338
|
+
/*#__PURE__*/ jsx(LoopNode_ResizeCornerIndicators, {
|
|
339
339
|
visible: resizeControlsVisible
|
|
340
340
|
}),
|
|
341
|
-
resizeControlsMounted ? /*#__PURE__*/ jsx(
|
|
341
|
+
resizeControlsMounted ? /*#__PURE__*/ jsx(LoopNode_ResizeControls, {
|
|
342
342
|
minimums: resizeMinimums,
|
|
343
343
|
onResize: handleResize,
|
|
344
344
|
onResizeStart: handleResizeStart,
|
|
@@ -450,7 +450,7 @@ function EmptyState({ label, onAddFirstChild }) {
|
|
|
450
450
|
})
|
|
451
451
|
});
|
|
452
452
|
}
|
|
453
|
-
|
|
453
|
+
const LoopNode_BodyFrame = /*#__PURE__*/ memo(function({ isEmpty, isLoading }) {
|
|
454
454
|
return /*#__PURE__*/ jsx("div", {
|
|
455
455
|
"data-testid": "loop-body-frame",
|
|
456
456
|
"data-empty": isEmpty ? 'true' : 'false',
|
|
@@ -459,8 +459,8 @@ function BodyFrame({ isEmpty, isLoading }) {
|
|
|
459
459
|
className: "m-6 h-14 w-full animate-pulse rounded-[18px] bg-(--canvas-background-overlay)"
|
|
460
460
|
}) : null
|
|
461
461
|
});
|
|
462
|
-
}
|
|
463
|
-
|
|
462
|
+
});
|
|
463
|
+
const LoopNode_ResizeControls = /*#__PURE__*/ memo(function({ minimums = DEFAULT_RESIZE_MINIMUMS, onResize, onResizeStart, onResizeEnd }) {
|
|
464
464
|
return /*#__PURE__*/ jsx(Fragment, {
|
|
465
465
|
children: RESIZE_CONTROLS.map(({ position, widthSide, heightSide, cursor })=>/*#__PURE__*/ jsx(NodeResizeControl, {
|
|
466
466
|
style: RESIZE_CONTROL_STYLE,
|
|
@@ -478,8 +478,8 @@ function ResizeControls({ minimums = DEFAULT_RESIZE_MINIMUMS, onResize, onResize
|
|
|
478
478
|
})
|
|
479
479
|
}, position))
|
|
480
480
|
});
|
|
481
|
-
}
|
|
482
|
-
|
|
481
|
+
});
|
|
482
|
+
const LoopNode_ResizeCornerIndicators = /*#__PURE__*/ memo(function({ visible }) {
|
|
483
483
|
return /*#__PURE__*/ jsx(Fragment, {
|
|
484
484
|
children: RESIZE_CONTROLS.map(({ position, indicatorClassName })=>/*#__PURE__*/ jsx("div", {
|
|
485
485
|
"aria-hidden": true,
|
|
@@ -487,7 +487,7 @@ function ResizeCornerIndicators({ visible }) {
|
|
|
487
487
|
className: cn('pointer-events-none absolute h-2 w-2 rounded-full bg-brand transition-opacity', indicatorClassName, visible ? 'opacity-100' : 'opacity-0')
|
|
488
488
|
}, position))
|
|
489
489
|
});
|
|
490
|
-
}
|
|
490
|
+
});
|
|
491
491
|
function HandleGroups({ groups, ...handleGroupProps }) {
|
|
492
492
|
if (0 === groups.length) return null;
|
|
493
493
|
return /*#__PURE__*/ jsx(Fragment, {
|
|
@@ -28,25 +28,37 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
28
28
|
});
|
|
29
29
|
const jsx_runtime_namespaceObject = require("react/jsx-runtime");
|
|
30
30
|
const react_cjs_namespaceObject = require("../xyflow/react.cjs");
|
|
31
|
+
const external_react_namespaceObject = require("react");
|
|
32
|
+
const shallow_namespaceObject = require("zustand/shallow");
|
|
31
33
|
const NODE_VIEWPORT_OVERLAY_Z_INDEX = {
|
|
32
34
|
nodeHandleAffordance: 1002,
|
|
33
35
|
nodeToolbar: 1003
|
|
34
36
|
};
|
|
35
37
|
function NodeViewportOverlay({ nodeId, anchor, layer, children }) {
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
const geometry = (0, react_cjs_namespaceObject.useStore)((0, external_react_namespaceObject.useCallback)((state)=>{
|
|
39
|
+
const internalNode = state.nodeLookup.get(nodeId);
|
|
40
|
+
const positionAbsolute = internalNode?.internals.positionAbsolute;
|
|
41
|
+
return {
|
|
42
|
+
x: positionAbsolute?.x,
|
|
43
|
+
y: positionAbsolute?.y,
|
|
44
|
+
width: anchor?.width ?? internalNode?.measured?.width ?? internalNode?.width,
|
|
45
|
+
height: anchor?.height ?? internalNode?.measured?.height ?? internalNode?.height
|
|
46
|
+
};
|
|
47
|
+
}, [
|
|
48
|
+
anchor?.height,
|
|
49
|
+
anchor?.width,
|
|
50
|
+
nodeId
|
|
51
|
+
]), shallow_namespaceObject.shallow);
|
|
52
|
+
if (null == geometry.x || null == geometry.y || null == geometry.width || null == geometry.height) return children;
|
|
41
53
|
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(react_cjs_namespaceObject.ViewportPortal, {
|
|
42
54
|
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
|
|
43
55
|
className: "absolute pointer-events-none",
|
|
44
56
|
style: {
|
|
45
57
|
position: 'absolute',
|
|
46
|
-
left:
|
|
47
|
-
top:
|
|
48
|
-
width,
|
|
49
|
-
height,
|
|
58
|
+
left: geometry.x + (anchor?.left ?? 0),
|
|
59
|
+
top: geometry.y + (anchor?.top ?? 0),
|
|
60
|
+
width: geometry.width,
|
|
61
|
+
height: geometry.height,
|
|
50
62
|
transform: anchor?.transform,
|
|
51
63
|
zIndex: layer ? NODE_VIEWPORT_OVERLAY_Z_INDEX[layer] : void 0
|
|
52
64
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeViewportOverlay.d.ts","sourceRoot":"","sources":["../../../src/canvas/components/NodeViewportOverlay.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NodeViewportOverlay.d.ts","sourceRoot":"","sources":["../../../src/canvas/components/NodeViewportOverlay.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMtD,QAAA,MAAM,6BAA6B;;;CAGzB,CAAC;AAEX,KAAK,wBAAwB,GAAG,MAAM,OAAO,6BAA6B,CAAC;AAE3E,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,KAAK,CAAC,EAAE,wBAAwB,CAAC;IACjC,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AASF,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,wBAAwB,2UA8ChG"}
|
|
@@ -1,24 +1,36 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { ViewportPortal,
|
|
2
|
+
import { ViewportPortal, useStore } from "../xyflow/react.js";
|
|
3
|
+
import { useCallback } from "react";
|
|
4
|
+
import { shallow } from "zustand/shallow";
|
|
3
5
|
const NODE_VIEWPORT_OVERLAY_Z_INDEX = {
|
|
4
6
|
nodeHandleAffordance: 1002,
|
|
5
7
|
nodeToolbar: 1003
|
|
6
8
|
};
|
|
7
9
|
function NodeViewportOverlay({ nodeId, anchor, layer, children }) {
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const geometry = useStore(useCallback((state)=>{
|
|
11
|
+
const internalNode = state.nodeLookup.get(nodeId);
|
|
12
|
+
const positionAbsolute = internalNode?.internals.positionAbsolute;
|
|
13
|
+
return {
|
|
14
|
+
x: positionAbsolute?.x,
|
|
15
|
+
y: positionAbsolute?.y,
|
|
16
|
+
width: anchor?.width ?? internalNode?.measured?.width ?? internalNode?.width,
|
|
17
|
+
height: anchor?.height ?? internalNode?.measured?.height ?? internalNode?.height
|
|
18
|
+
};
|
|
19
|
+
}, [
|
|
20
|
+
anchor?.height,
|
|
21
|
+
anchor?.width,
|
|
22
|
+
nodeId
|
|
23
|
+
]), shallow);
|
|
24
|
+
if (null == geometry.x || null == geometry.y || null == geometry.width || null == geometry.height) return children;
|
|
13
25
|
return /*#__PURE__*/ jsx(ViewportPortal, {
|
|
14
26
|
children: /*#__PURE__*/ jsx("div", {
|
|
15
27
|
className: "absolute pointer-events-none",
|
|
16
28
|
style: {
|
|
17
29
|
position: 'absolute',
|
|
18
|
-
left:
|
|
19
|
-
top:
|
|
20
|
-
width,
|
|
21
|
-
height,
|
|
30
|
+
left: geometry.x + (anchor?.left ?? 0),
|
|
31
|
+
top: geometry.y + (anchor?.top ?? 0),
|
|
32
|
+
width: geometry.width,
|
|
33
|
+
height: geometry.height,
|
|
22
34
|
transform: anchor?.transform,
|
|
23
35
|
zIndex: layer ? NODE_VIEWPORT_OVERLAY_Z_INDEX[layer] : void 0
|
|
24
36
|
},
|
|
@@ -50,6 +50,8 @@ const external_remark_gfm_namespaceObject = require("remark-gfm");
|
|
|
50
50
|
var external_remark_gfm_default = /*#__PURE__*/ __webpack_require__.n(external_remark_gfm_namespaceObject);
|
|
51
51
|
const index_cjs_namespaceObject = require("../../../i18n/index.cjs");
|
|
52
52
|
const external_constants_cjs_namespaceObject = require("../../constants.cjs");
|
|
53
|
+
const nodePropsEqual_cjs_namespaceObject = require("../../utils/nodePropsEqual.cjs");
|
|
54
|
+
const SelectionStateContext_cjs_namespaceObject = require("../BaseCanvas/SelectionStateContext.cjs");
|
|
53
55
|
const external_NodeViewportOverlay_cjs_namespaceObject = require("../NodeViewportOverlay.cjs");
|
|
54
56
|
const external_Toolbar_index_cjs_namespaceObject = require("../Toolbar/index.cjs");
|
|
55
57
|
const external_FormattingToolbar_cjs_namespaceObject = require("./FormattingToolbar.cjs");
|
|
@@ -64,6 +66,7 @@ const minHeight = 8 * external_constants_cjs_namespaceObject.GRID_SPACING;
|
|
|
64
66
|
const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = 'Add text', renderPlaceholderOnSelect = false, readOnly = false, onContentChange, onColorChange, onResize, onResizeStart, onResizeEnd })=>{
|
|
65
67
|
const { _ } = (0, index_cjs_namespaceObject.useSafeLingui)();
|
|
66
68
|
const { updateNodeData, deleteElements } = (0, react_cjs_namespaceObject.useReactFlow)();
|
|
69
|
+
const { multipleNodesSelected } = (0, SelectionStateContext_cjs_namespaceObject.useSelectionState)();
|
|
67
70
|
const [isEditing, setIsEditing] = (0, external_react_namespaceObject.useState)(!readOnly && (data.autoFocus ?? false));
|
|
68
71
|
const [isResizing, setIsResizing] = (0, external_react_namespaceObject.useState)(false);
|
|
69
72
|
const [isColorPickerOpen, setIsColorPickerOpen] = (0, external_react_namespaceObject.useState)(false);
|
|
@@ -103,10 +106,12 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
103
106
|
readOnly
|
|
104
107
|
]);
|
|
105
108
|
(0, external_react_namespaceObject.useEffect)(()=>{
|
|
106
|
-
if (!selected || isResizing) setIsColorPickerOpen(false);
|
|
109
|
+
if (!selected || dragging || isResizing || multipleNodesSelected) setIsColorPickerOpen(false);
|
|
107
110
|
}, [
|
|
108
111
|
selected,
|
|
109
|
-
|
|
112
|
+
dragging,
|
|
113
|
+
isResizing,
|
|
114
|
+
multipleNodesSelected
|
|
110
115
|
]);
|
|
111
116
|
(0, external_react_namespaceObject.useEffect)(()=>{
|
|
112
117
|
if (readOnly) {
|
|
@@ -355,6 +360,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
355
360
|
color,
|
|
356
361
|
handleDelete
|
|
357
362
|
]);
|
|
363
|
+
const shouldRenderToolbarOverlay = !readOnly && selected && !dragging && !isResizing && !multipleNodesSelected;
|
|
358
364
|
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment, {
|
|
359
365
|
children: [
|
|
360
366
|
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(react_namespaceObject.Global, {
|
|
@@ -487,13 +493,13 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
487
493
|
})
|
|
488
494
|
]
|
|
489
495
|
}),
|
|
490
|
-
|
|
496
|
+
shouldRenderToolbarOverlay && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_Toolbar_index_cjs_namespaceObject.NodeToolbar, {
|
|
491
497
|
nodeId: id,
|
|
492
498
|
config: toolbarConfig,
|
|
493
499
|
expanded: true,
|
|
494
500
|
portalToNodeOverlay: true
|
|
495
501
|
}),
|
|
496
|
-
|
|
502
|
+
shouldRenderToolbarOverlay && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_NodeViewportOverlay_cjs_namespaceObject.NodeViewportOverlay, {
|
|
497
503
|
nodeId: id,
|
|
498
504
|
layer: "nodeToolbar",
|
|
499
505
|
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_motion_react_namespaceObject.AnimatePresence, {
|
|
@@ -548,7 +554,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
548
554
|
]
|
|
549
555
|
});
|
|
550
556
|
};
|
|
551
|
-
const StickyNoteNode = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(StickyNoteNodeComponent);
|
|
557
|
+
const StickyNoteNode = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(StickyNoteNodeComponent, nodePropsEqual_cjs_namespaceObject.areNodePropsEqualIgnoringPosition);
|
|
552
558
|
exports.StickyNoteNode = __webpack_exports__.StickyNoteNode;
|
|
553
559
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
554
560
|
"StickyNoteNode"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StickyNoteNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StickyNoteNode/StickyNoteNode.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"StickyNoteNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StickyNoteNode/StickyNoteNode.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAoC1E,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAiB,MAAM,wBAAwB,CAAC;AAM7F,MAAM,WAAW,mBAAoB,SAAQ,SAAS;IACpD,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AA4cD,eAAO,MAAM,cAAc,kMA1bxB,mBAAmB,6CA0bwE,CAAC"}
|
|
@@ -10,6 +10,8 @@ import remark_breaks from "remark-breaks";
|
|
|
10
10
|
import remark_gfm from "remark-gfm";
|
|
11
11
|
import { useSafeLingui } from "../../../i18n/index.js";
|
|
12
12
|
import { GRID_SPACING } from "../../constants.js";
|
|
13
|
+
import { areNodePropsEqualIgnoringPosition } from "../../utils/nodePropsEqual.js";
|
|
14
|
+
import { useSelectionState } from "../BaseCanvas/SelectionStateContext.js";
|
|
13
15
|
import { NodeViewportOverlay } from "../NodeViewportOverlay.js";
|
|
14
16
|
import { NodeToolbar } from "../Toolbar/index.js";
|
|
15
17
|
import { FormattingToolbar } from "./FormattingToolbar.js";
|
|
@@ -24,6 +26,7 @@ const minHeight = 8 * GRID_SPACING;
|
|
|
24
26
|
const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = 'Add text', renderPlaceholderOnSelect = false, readOnly = false, onContentChange, onColorChange, onResize, onResizeStart, onResizeEnd })=>{
|
|
25
27
|
const { _ } = useSafeLingui();
|
|
26
28
|
const { updateNodeData, deleteElements } = useReactFlow();
|
|
29
|
+
const { multipleNodesSelected } = useSelectionState();
|
|
27
30
|
const [isEditing, setIsEditing] = useState(!readOnly && (data.autoFocus ?? false));
|
|
28
31
|
const [isResizing, setIsResizing] = useState(false);
|
|
29
32
|
const [isColorPickerOpen, setIsColorPickerOpen] = useState(false);
|
|
@@ -63,10 +66,12 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
63
66
|
readOnly
|
|
64
67
|
]);
|
|
65
68
|
useEffect(()=>{
|
|
66
|
-
if (!selected || isResizing) setIsColorPickerOpen(false);
|
|
69
|
+
if (!selected || dragging || isResizing || multipleNodesSelected) setIsColorPickerOpen(false);
|
|
67
70
|
}, [
|
|
68
71
|
selected,
|
|
69
|
-
|
|
72
|
+
dragging,
|
|
73
|
+
isResizing,
|
|
74
|
+
multipleNodesSelected
|
|
70
75
|
]);
|
|
71
76
|
useEffect(()=>{
|
|
72
77
|
if (readOnly) {
|
|
@@ -315,6 +320,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
315
320
|
color,
|
|
316
321
|
handleDelete
|
|
317
322
|
]);
|
|
323
|
+
const shouldRenderToolbarOverlay = !readOnly && selected && !dragging && !isResizing && !multipleNodesSelected;
|
|
318
324
|
return /*#__PURE__*/ jsxs(Fragment, {
|
|
319
325
|
children: [
|
|
320
326
|
/*#__PURE__*/ jsx(Global, {
|
|
@@ -447,13 +453,13 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
447
453
|
})
|
|
448
454
|
]
|
|
449
455
|
}),
|
|
450
|
-
|
|
456
|
+
shouldRenderToolbarOverlay && /*#__PURE__*/ jsx(NodeToolbar, {
|
|
451
457
|
nodeId: id,
|
|
452
458
|
config: toolbarConfig,
|
|
453
459
|
expanded: true,
|
|
454
460
|
portalToNodeOverlay: true
|
|
455
461
|
}),
|
|
456
|
-
|
|
462
|
+
shouldRenderToolbarOverlay && /*#__PURE__*/ jsx(NodeViewportOverlay, {
|
|
457
463
|
nodeId: id,
|
|
458
464
|
layer: "nodeToolbar",
|
|
459
465
|
children: /*#__PURE__*/ jsx(AnimatePresence, {
|
|
@@ -508,5 +514,5 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
508
514
|
]
|
|
509
515
|
});
|
|
510
516
|
};
|
|
511
|
-
const StickyNoteNode = /*#__PURE__*/ memo(StickyNoteNodeComponent);
|
|
517
|
+
const StickyNoteNode = /*#__PURE__*/ memo(StickyNoteNodeComponent, areNodePropsEqualIgnoringPosition);
|
|
512
518
|
export { StickyNoteNode };
|
|
@@ -128,6 +128,7 @@ const NodeToolbarComponent = ({ nodeId, config, expanded, hidden, offsetToolbar,
|
|
|
128
128
|
displayState
|
|
129
129
|
]);
|
|
130
130
|
if (0 === config.actions.length && (!config.overflowActions || 0 === config.overflowActions.length)) return null;
|
|
131
|
+
if (portalToNodeOverlay && 'hidden' === displayState) return null;
|
|
131
132
|
const toolbarContent = /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(react_namespaceObject.AnimatePresence, {
|
|
132
133
|
children: 'hidden' !== displayState && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
|
|
133
134
|
className: positionerClassName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeToolbar.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Toolbar/NodeToolbar/NodeToolbar.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"NodeToolbar.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Toolbar/NodeToolbar/NodeToolbar.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA4R5D,eAAO,MAAM,WAAW,kHA5MrB,gBAAgB,oDA4MkC,CAAC"}
|
|
@@ -100,6 +100,7 @@ const NodeToolbarComponent = ({ nodeId, config, expanded, hidden, offsetToolbar,
|
|
|
100
100
|
displayState
|
|
101
101
|
]);
|
|
102
102
|
if (0 === config.actions.length && (!config.overflowActions || 0 === config.overflowActions.length)) return null;
|
|
103
|
+
if (portalToNodeOverlay && 'hidden' === displayState) return null;
|
|
103
104
|
const toolbarContent = /*#__PURE__*/ jsx(AnimatePresence, {
|
|
104
105
|
children: 'hidden' !== displayState && /*#__PURE__*/ jsxs("div", {
|
|
105
106
|
className: positionerClassName,
|
|
@@ -6,5 +6,5 @@ export interface StoryInfoPanelProps {
|
|
|
6
6
|
defaultCollapsed?: boolean;
|
|
7
7
|
position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
|
|
8
8
|
}
|
|
9
|
-
export declare
|
|
9
|
+
export declare const StoryInfoPanel: import("react").NamedExoticComponent<StoryInfoPanelProps>;
|
|
10
10
|
//# sourceMappingURL=StoryInfoPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoryInfoPanel.d.ts","sourceRoot":"","sources":["../../../../src/canvas/storybook-utils/components/StoryInfoPanel.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,mBAAmB;IAElC,KAAK,EAAE,MAAM,CAAC;IAEd,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,CAAC;CACtE;AAED,
|
|
1
|
+
{"version":3,"file":"StoryInfoPanel.d.ts","sourceRoot":"","sources":["../../../../src/canvas/storybook-utils/components/StoryInfoPanel.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,mBAAmB;IAElC,KAAK,EAAE,MAAM,CAAC;IAEd,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,CAAC;CACtE;AAED,eAAO,MAAM,cAAc,2DA0DzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-definitions.d.ts","sourceRoot":"","sources":["../../../../src/canvas/storybook-utils/manifests/node-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,eAAO,MAAM,gBAAgB,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"node-definitions.d.ts","sourceRoot":"","sources":["../../../../src/canvas/storybook-utils/manifests/node-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,eAAO,MAAM,gBAAgB,EAAE,YAAY,EA45B1C,CAAC"}
|