-
+
{formatZoomPercentage(zoom)}
diff --git a/src/frontend/src/components/ui/sidebar.tsx b/src/frontend/src/components/ui/sidebar.tsx
index 637814551989..8533ca74760f 100644
--- a/src/frontend/src/components/ui/sidebar.tsx
+++ b/src/frontend/src/components/ui/sidebar.tsx
@@ -23,7 +23,12 @@ const SIDEBAR_WIDTH = "19rem";
const SIDEBAR_WIDTH_ICON = "4rem";
const SEGMENTED_SIDEBAR_ICON_WIDTH = "40px";
-export type SidebarSection = "search" | "components" | "bundles" | "mcp";
+export type SidebarSection =
+ | "search"
+ | "components"
+ | "bundles"
+ | "mcp"
+ | "add_note";
// Helper function to get cookie value
function getCookie(name: string): string | null {
@@ -466,7 +471,7 @@ const SidebarHeader = React.forwardRef<
);
@@ -551,8 +556,8 @@ const SidebarGroupLabel = React.memo(
ref={ref}
data-sidebar="group-label"
className={cn(
- "flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-semibold text-foreground/70 outline-none ring-ring transition-[margin,opa] duration-200 ease-linear focus-visible:ring-1 [&>svg]:size-4 [&>svg]:shrink-0",
- "group-data-[collapsible=icon]:pointer-events-none group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",
+ "flex shrink-0 items-center rounded-md text-xs font-semibold text-foreground/70 outline-none ring-ring transition-[margin,opa] duration-200 ease-linear focus-visible:ring-1 [&>svg]:size-4 [&>svg]:shrink-0",
+ "group-data-[collapsible=icon]:pointer-events-none group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 px-2 pb-3",
className,
)}
{...props}
diff --git a/src/frontend/src/pages/FlowPage/components/PageComponent/MemoizedComponents.tsx b/src/frontend/src/pages/FlowPage/components/PageComponent/MemoizedComponents.tsx
index 60843cc62bd5..f2b120ec3120 100644
--- a/src/frontend/src/pages/FlowPage/components/PageComponent/MemoizedComponents.tsx
+++ b/src/frontend/src/pages/FlowPage/components/PageComponent/MemoizedComponents.tsx
@@ -1,5 +1,6 @@
import { Background, Panel } from "@xyflow/react";
import { memo } from "react";
+import { useShallow } from "zustand/react/shallow";
import ForwardedIconComponent from "@/components/common/genericIconComponent";
import CanvasControlButton from "@/components/core/canvasControlsComponent/CanvasControlButton";
import CanvasControls from "@/components/core/canvasControlsComponent/CanvasControls";
@@ -7,6 +8,7 @@ import LogCanvasControls from "@/components/core/logCanvasControlsComponent";
import { Button } from "@/components/ui/button";
import { SidebarTrigger, useSidebar } from "@/components/ui/sidebar";
import { ENABLE_NEW_SIDEBAR } from "@/customization/feature-flags";
+import useFlowStore from "@/stores/flowStore";
import { cn } from "@/utils/utils";
import { useSearchContext } from "../flowSidebarComponent";
import { NAV_ITEMS } from "../flowSidebarComponent/components/sidebarSegmentedNav";
@@ -28,32 +30,35 @@ export const MemoizedCanvasControls = memo(
setIsAddingNote,
shadowBoxWidth,
shadowBoxHeight,
- }: MemoizedCanvasControlsProps) => (
-
-
-
- ),
+ }: MemoizedCanvasControlsProps) => {
+ const isLocked = useFlowStore(
+ useShallow((state) => state.currentFlow?.locked),
+ );
+
+ return (
+
+
+
+ );
+ },
);
export const MemoizedSidebarTrigger = memo(() => {
diff --git a/src/frontend/src/pages/FlowPage/components/PageComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/PageComponent/index.tsx
index aae515f6faec..aac7334f9780 100644
--- a/src/frontend/src/pages/FlowPage/components/PageComponent/index.tsx
+++ b/src/frontend/src/pages/FlowPage/components/PageComponent/index.tsx
@@ -615,6 +615,8 @@ export default function Page({
};
setNodes((nds) => nds.concat(newNode));
setIsAddingNote(false);
+ // Signal sidebar to revert add_note active state
+ window.dispatchEvent(new Event("lf:end-add-note"));
}
},
[
@@ -666,6 +668,24 @@ export default function Page({
};
}, [isAddingNote, shadowBoxWidth, shadowBoxHeight]);
+ // Listen for a global event to start the add-note flow from outside components
+ useEffect(() => {
+ const handleStartAddNote = () => {
+ setIsAddingNote(true);
+ const shadowBox = document.getElementById("shadow-box");
+ if (shadowBox) {
+ shadowBox.style.display = "block";
+ shadowBox.style.left = `${position.current.x - shadowBoxWidth / 2}px`;
+ shadowBox.style.top = `${position.current.y - shadowBoxHeight / 2}px`;
+ }
+ };
+
+ window.addEventListener("lf:start-add-note", handleStartAddNote);
+ return () => {
+ window.removeEventListener("lf:start-add-note", handleStartAddNote);
+ };
+ }, [shadowBoxWidth, shadowBoxHeight]);
+
const MIN_ZOOM = 0.25;
const MAX_ZOOM = 2;
const fitViewOptions = {
diff --git a/src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/categoryDisclouse.tsx b/src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/categoryDisclouse.tsx
index a46f22404cb9..a7158f99ff10 100644
--- a/src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/categoryDisclouse.tsx
+++ b/src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/categoryDisclouse.tsx
@@ -73,7 +73,7 @@ export const CategoryDisclosure = memo(function CategoryDisclosure({
diff --git a/src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/categoryGroup.tsx b/src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/categoryGroup.tsx
index 76d9a08f8daa..a631a19e0cb4 100644
--- a/src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/categoryGroup.tsx
+++ b/src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/categoryGroup.tsx
@@ -27,7 +27,7 @@ export const CategoryGroup = memo(function CategoryGroup({
return (