+
{
+ fetchTimeline(extractFilenameFromURL(apiURL));
+ }}
+ className="jp-mod-highlighted"
+ title="Document Timeline"
+ >
+
+
+ {toggle && (
+
+
+
+ {extractFilenameFromURL(apiURL).split('/').pop()} {' '}
+
+ {isBtn && (
+
+
+
+ )}
+
+ )}
+
+ );
+};
diff --git a/packages/docprovider/src/forkManager.ts b/packages/docprovider/src/forkManager.ts
new file mode 100644
index 00000000..99031c17
--- /dev/null
+++ b/packages/docprovider/src/forkManager.ts
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) Jupyter Development Team.
+ * Distributed under the terms of the Modified BSD License.
+ */
+
+import { ICollaborativeContentProvider } from '@jupyter/collaborative-drive';
+import { URLExt } from '@jupyterlab/coreutils';
+import { Event } from '@jupyterlab/services';
+import { ISignal, Signal } from '@lumino/signaling';
+
+import { requestAPI, ROOM_FORK_URL } from './requests';
+import {
+ IAllForksResponse,
+ IForkChangedEvent,
+ IForkCreationResponse,
+ IForkManager
+} from './tokens';
+import { IForkProvider } from './ydrive';
+
+export const JUPYTER_COLLABORATION_FORK_EVENTS_URI =
+ 'https://schema.jupyter.org/jupyter_collaboration/fork/v1';
+
+export class ForkManager implements IForkManager {
+ constructor(options: ForkManager.IOptions) {
+ const { contentProvider, eventManager } = options;
+ this._contentProvider = contentProvider;
+ this._eventManager = eventManager;
+ this._eventManager.stream.connect(this._handleEvent, this);
+ }
+
+ get isDisposed(): boolean {
+ return this._disposed;
+ }
+ get forkAdded(): ISignal