-
-
-
-
-
- {t("diagram.back")}
-
- {kindLabel}
- {
- const nextTitle = event.target.value;
- titleRef.current = nextTitle;
- setTitle(nextTitle);
- setDirtyVersion((current) => current + 1);
- const graph = graphRef.current;
- if (graph) {
- setDirty(savedSnapshotRef.current !== diagramEditorSnapshot(
- nextTitle,
- graphToDocument(graph, document.kind, themeRef.current),
- ));
- }
- }}
- />
- {saveError ?? (dirty || saving ? t("diagram.saving") : t("diagram.saved"))}
-
- {!readOnly && saveFailed && (
-
- )}
+
@@ -1406,6 +1611,24 @@ export const DiagramEditorPane = ({ memo, repository, readOnly, onBackToList, on
onConfirm={onBackToList}
/>
) : null}
+ {historyOpen ? (
+ setHistoryOpen(false)}
+ onRestored={async (restoredMemo) => {
+ setHistoryOpen(false);
+ await onSaved(restoredMemo);
+ }}
+ />
+ ) : null}
+
+ {memoIdCopyNotice ? (
+
+ {t(memoIdCopyNotice === "copied" ? "editor.noteIdCopied" : "editor.noteIdCopyFailed", { id: memo.id })}
+
+ ) : null}
);
diff --git a/apps/web/src/components/EditorPane.tsx b/apps/web/src/components/EditorPane.tsx
index 4748c68f..a21ba95d 100644
--- a/apps/web/src/components/EditorPane.tsx
+++ b/apps/web/src/components/EditorPane.tsx
@@ -3881,7 +3881,7 @@ const RichEditorPane = ({
- {t("editor.updatedAt", { time: updatedLabel })}
+ {updatedLabel}
diff --git a/apps/web/src/components/MemoCard.tsx b/apps/web/src/components/MemoCard.tsx
index c402bb7a..29ce868c 100644
--- a/apps/web/src/components/MemoCard.tsx
+++ b/apps/web/src/components/MemoCard.tsx
@@ -398,7 +398,9 @@ export const MemoCard = ({
{memo.tags.slice(0, 3).map((tag) => (
{
clearPendingCreatedMemo();
setActivePane("memos");
}}
+ onDeleted={async (memoId) => {
+ deleteMemoMutation.mutate({ memoId, permanent: false });
+ }}
+ onOpenNextMemo={() => {
+ if (nextMemoId) {
+ clearPendingCreatedMemo();
+ setCreatedMemoEditId(null);
+ setSelectedMemoId(nextMemoId);
+ }
+ }}
+ onOpenPreviousMemo={() => {
+ if (previousMemoId) {
+ clearPendingCreatedMemo();
+ setCreatedMemoEditId(null);
+ setSelectedMemoId(previousMemoId);
+ }
+ }}
+ onPermanentDeleted={async (memoId) => {
+ setMemoDeleteConfirmation({ kind: "single", memoIds: [memoId], permanent: true });
+ }}
+ onRestored={async (memoId) => {
+ await restoreMemoMutation.mutateAsync(memoId);
+ }}
onSaved={async (memo) => {
await putLocalMemo(localDataScope, memo);
cacheMemoDetail(queryClient, memo, memoView);
@@ -3433,6 +3459,8 @@ export const WorkspaceApp = ({
queryClient.invalidateQueries({ queryKey: ["notebooks"], refetchType: "inactive" }),
]);
}}
+ onSaveAsTemplate={handleSaveAsTemplate}
+ onToggleDesktopFocusMode={toggleDesktopFocusMode}
/>
) : (