-
+
+
);
}
const clampIndex = (value: unknown, length = Number.MAX_SAFE_INTEGER) => {
- const parsed = typeof value === 'number' ? value : Number(value ?? 0);
+ const parsed = typeof value === "number" ? value : Number(value ?? 0);
if (!Number.isFinite(parsed) || length <= 0) return 0;
return Math.max(0, Math.min(Math.trunc(parsed), length - 1));
};
diff --git a/apps/client/src/features/editor/page-editor.tsx b/apps/client/src/features/editor/page-editor.tsx
index 7149e7938..1450d85c1 100644
--- a/apps/client/src/features/editor/page-editor.tsx
+++ b/apps/client/src/features/editor/page-editor.tsx
@@ -82,6 +82,7 @@ import {
getCollabSocket,
releaseCollabSocket,
} from "@/features/editor/collab-socket";
+import TabsMenu from "./components/tabs/tabs-menu";
interface PageEditorProps {
pageId: string;
@@ -453,6 +454,7 @@ function CollabPageEditor({
+
)}
{editor && !editorIsEditable && (editable || canComment) && (
diff --git a/packages/editor-ext/src/lib/tabs/tabs.ts b/packages/editor-ext/src/lib/tabs/tabs.ts
index 79c7e3c64..6c2f9e598 100644
--- a/packages/editor-ext/src/lib/tabs/tabs.ts
+++ b/packages/editor-ext/src/lib/tabs/tabs.ts
@@ -1,6 +1,6 @@
import { Node, mergeAttributes } from '@tiptap/core';
import { Fragment, type Node as PMNode } from '@tiptap/pm/model';
-import { TextSelection, type EditorState } from '@tiptap/pm/state';
+import { TextSelection, Transaction, type EditorState } from '@tiptap/pm/state';
import { ReactNodeViewRenderer, type ReactNodeViewProps } from '@tiptap/react';
import type { ComponentType } from 'react';
import { generateNodeId } from '../utils';
@@ -14,11 +14,12 @@ declare module '@tiptap/core' {
interface Commands