onResizeStart(e, isLeft)}
+ className={`${toolbarOpen ? 'pointer-events-auto' : 'pointer-events-none'} absolute z-[2] ${
+ isLeft ? 'left-0' : 'right-0'
+ } top-0 flex h-[100%] w-[15px] cursor-col-resize items-center justify-center`}
+ >
+
+
+ );
+ },
+ [onResizeStart, toolbarOpen]
+ );
+
+ return (
+ setToolbarOpen(true)}
+ onMouseLeave={() => setToolbarOpen(false)}
+ style={{
+ width: width + 'px',
+ height: height + 'px',
+ alignSelf,
+ }}
+ className={`relative cursor-default`}
+ >
+ {src && (
+

+ )}
+ {renderResizer(true)}
+ {renderResizer(false)}
+
+
+ );
+}
+
+export default ImageRender;
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/document/ImageBlock/ImageToolbar.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/document/ImageBlock/ImageToolbar.tsx
new file mode 100644
index 0000000000..d8a5c0edbe
--- /dev/null
+++ b/frontend/appflowy_tauri/src/appflowy_app/components/document/ImageBlock/ImageToolbar.tsx
@@ -0,0 +1,39 @@
+import React, { useState } from 'react';
+import { Align } from '$app/interfaces/document';
+import ImageAlign from '$app/components/document/ImageBlock/ImageAlign';
+import MenuTooltip from '$app/components/document/TextActionMenu/menu/MenuTooltip';
+import { DeleteOutline } from '@mui/icons-material';
+import { useAppDispatch } from '$app/stores/store';
+import { useSubscribeDocument } from '$app/components/document/_shared/SubscribeDoc.hooks';
+import { deleteNodeThunk } from '$app_reducers/document/async-actions';
+
+function ImageToolbar({ id, open, align }: { id: string; open: boolean; align: Align }) {
+ const [popoverOpen, setPopoverOpen] = useState(false);
+ const visible = open || popoverOpen;
+ const dispatch = useAppDispatch();
+ const { controller } = useSubscribeDocument();
+
+ return (
+ <>
+