@datalayer/jupyter-react 1.0.7 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/lib/app/JupyterReact.js +2 -2
  2. package/lib/app/JupyterReact.js.map +1 -1
  3. package/lib/app/tabs/ComponentsTab.js.map +1 -1
  4. package/lib/app/tabs/components/FileBrowserComponent.js +1 -3
  5. package/lib/app/tabs/components/FileBrowserComponent.js.map +1 -1
  6. package/lib/app/tabs/components/IPyWidgetsComponent.js +1 -1
  7. package/lib/app/tabs/components/IPyWidgetsComponent.js.map +1 -1
  8. package/lib/components/cell/Cell.js +2 -2
  9. package/lib/components/cell/Cell.js.map +1 -1
  10. package/lib/components/cell/CellAdapter.js +14 -11
  11. package/lib/components/cell/CellAdapter.js.map +1 -1
  12. package/lib/components/cell/CellState.js +2 -2
  13. package/lib/components/cell/CellState.js.map +1 -1
  14. package/lib/components/codemirror/{CodeMirrorDatalayerEditor.d.ts → CodeMirrorEditor.d.ts} +12 -1
  15. package/lib/components/codemirror/{CodeMirrorDatalayerEditor.js → CodeMirrorEditor.js} +15 -12
  16. package/lib/components/codemirror/CodeMirrorEditor.js.map +1 -0
  17. package/lib/components/codemirror/index.d.ts +2 -1
  18. package/lib/components/codemirror/index.js +2 -1
  19. package/lib/components/codemirror/index.js.map +1 -1
  20. package/lib/components/console/ConsoleAdapter.js.map +1 -1
  21. package/lib/components/console/ConsoleState.js.map +1 -1
  22. package/lib/components/filebrowser/FileBrowser.js +1 -1
  23. package/lib/components/filebrowser/FileBrowser.js.map +1 -1
  24. package/lib/components/index.d.ts +1 -0
  25. package/lib/components/index.js +1 -1
  26. package/lib/components/index.js.map +1 -1
  27. package/lib/components/jupyterlab/JupyterLabApp.js +5 -4
  28. package/lib/components/jupyterlab/JupyterLabApp.js.map +1 -1
  29. package/lib/components/jupyterlab/JupyterLabAppAdapter.js +6 -4
  30. package/lib/components/jupyterlab/JupyterLabAppAdapter.js.map +1 -1
  31. package/lib/components/jupyterlab/JupyterLabAppCss.js +2 -2
  32. package/lib/components/jupyterlab/JupyterLabAppCss.js.map +1 -1
  33. package/lib/components/jupyterlab/JupyterLabAppPlugins.js.map +1 -1
  34. package/lib/components/kernel/KernelDetective.d.ts +1 -1
  35. package/lib/components/kernel/KernelDetective.js +5 -6
  36. package/lib/components/kernel/KernelDetective.js.map +1 -1
  37. package/lib/components/kernel/KernelSelector.js +6 -6
  38. package/lib/components/kernel/KernelSelector.js.map +1 -1
  39. package/lib/components/kernel/Kernelndicator.js +5 -3
  40. package/lib/components/kernel/Kernelndicator.js.map +1 -1
  41. package/lib/components/kernel/Kernels.js +1 -1
  42. package/lib/components/kernel/Kernels.js.map +1 -1
  43. package/lib/components/kernel/inspector/widget.js.map +1 -1
  44. package/lib/components/lumino/Lumino.js +32 -6
  45. package/lib/components/lumino/Lumino.js.map +1 -1
  46. package/lib/components/notebook/Notebook.d.ts +3 -3
  47. package/lib/components/notebook/Notebook.js +86 -111
  48. package/lib/components/notebook/Notebook.js.map +1 -1
  49. package/lib/components/notebook/Notebook2.d.ts +5 -5
  50. package/lib/components/notebook/Notebook2.js +8 -6
  51. package/lib/components/notebook/Notebook2.js.map +1 -1
  52. package/lib/components/notebook/Notebook2Base.d.ts +18 -6
  53. package/lib/components/notebook/Notebook2Base.js +47 -103
  54. package/lib/components/notebook/Notebook2Base.js.map +1 -1
  55. package/lib/components/notebook/NotebookAdapter.js +61 -49
  56. package/lib/components/notebook/NotebookAdapter.js.map +1 -1
  57. package/lib/components/notebook/NotebookCommands.js +1 -1
  58. package/lib/components/notebook/NotebookCommands.js.map +1 -1
  59. package/lib/components/notebook/NotebookExtensions.d.ts +5 -5
  60. package/lib/components/notebook/NotebookState.js +34 -10
  61. package/lib/components/notebook/NotebookState.js.map +1 -1
  62. package/lib/components/notebook/cell/prompt/Countdown.js.map +1 -1
  63. package/lib/components/notebook/cell/sidebar/CellSidebarButton.js +4 -4
  64. package/lib/components/notebook/cell/sidebar/CellSidebarButton.js.map +1 -1
  65. package/lib/components/notebook/cell/sidebar/CellSidebarExtension.d.ts +6 -3
  66. package/lib/components/notebook/cell/sidebar/CellSidebarExtension.js +10 -3
  67. package/lib/components/notebook/cell/sidebar/CellSidebarExtension.js.map +1 -1
  68. package/lib/components/notebook/model/JupyterReactNotebookModelFactory.js +1 -1
  69. package/lib/components/notebook/model/JupyterReactNotebookModelFactory.js.map +1 -1
  70. package/lib/components/output/Output.js +9 -9
  71. package/lib/components/output/Output.js.map +1 -1
  72. package/lib/components/output/OutputAdapter.js +3 -1
  73. package/lib/components/output/OutputAdapter.js.map +1 -1
  74. package/lib/components/output/OutputState.js.map +1 -1
  75. package/lib/components/terminal/TerminalAdapter.js +24 -3
  76. package/lib/components/terminal/TerminalAdapter.js.map +1 -1
  77. package/lib/components/terminal/TerminalState.js.map +1 -1
  78. package/lib/components/utils/SpinnerCentered.js +2 -2
  79. package/lib/components/utils/SpinnerCentered.js.map +1 -1
  80. package/lib/examples/Cell.js +1 -1
  81. package/lib/examples/Cell.js.map +1 -1
  82. package/lib/examples/Cells.js.map +1 -1
  83. package/lib/examples/CellsExecute.js +2 -2
  84. package/lib/examples/CellsExecute.js.map +1 -1
  85. package/lib/examples/FileBrowser.js +1 -4
  86. package/lib/examples/FileBrowser.js.map +1 -1
  87. package/lib/examples/JupyterLabApp.js +1 -7
  88. package/lib/examples/JupyterLabApp.js.map +1 -1
  89. package/lib/examples/JupyterLabAppHeadless.js +3 -8
  90. package/lib/examples/JupyterLabAppHeadless.js.map +1 -1
  91. package/lib/examples/JupyterLabAppHeadlessServerless.js +3 -8
  92. package/lib/examples/JupyterLabAppHeadlessServerless.js.map +1 -1
  93. package/lib/examples/JupyterLabAppServerless.js +1 -3
  94. package/lib/examples/JupyterLabAppServerless.js.map +1 -1
  95. package/lib/examples/JupyterLabAppServiceManager.js +1 -3
  96. package/lib/examples/JupyterLabAppServiceManager.js.map +1 -1
  97. package/lib/examples/JupyterLabTheme.js +16 -14
  98. package/lib/examples/JupyterLabTheme.js.map +1 -1
  99. package/lib/examples/KernelExecute.js +3 -2
  100. package/lib/examples/KernelExecute.js.map +1 -1
  101. package/lib/examples/KernelExecutor.js.map +1 -1
  102. package/lib/examples/Kernels.js +2 -2
  103. package/lib/examples/Kernels.js.map +1 -1
  104. package/lib/examples/Notebook2.js +4 -7
  105. package/lib/examples/Notebook2.js.map +1 -1
  106. package/lib/examples/Notebook2Collaborative.js +23 -0
  107. package/lib/examples/Notebook2Collaborative.js.map +1 -0
  108. package/lib/examples/NotebookCollaborative.js +4 -1
  109. package/lib/examples/NotebookCollaborative.js.map +1 -1
  110. package/lib/examples/NotebookColormode.js.map +1 -1
  111. package/lib/examples/NotebookExtension.js +1 -1
  112. package/lib/examples/NotebookExtension.js.map +1 -1
  113. package/lib/examples/NotebookKernel.js +1 -1
  114. package/lib/examples/NotebookKernel.js.map +1 -1
  115. package/lib/examples/NotebookKernelChange.js +2 -3
  116. package/lib/examples/NotebookKernelChange.js.map +1 -1
  117. package/lib/examples/NotebookLite.js.map +1 -1
  118. package/lib/examples/NotebookNbformat.js +3 -6
  119. package/lib/examples/NotebookNbformat.js.map +1 -1
  120. package/lib/examples/NotebookNbformatChange.js +6 -1
  121. package/lib/examples/NotebookNbformatChange.js.map +1 -1
  122. package/lib/examples/NotebookPathChange.js +6 -1
  123. package/lib/examples/NotebookPathChange.js.map +1 -1
  124. package/lib/examples/NotebookThemeColormode.js +9 -9
  125. package/lib/examples/NotebookThemeColormode.js.map +1 -1
  126. package/lib/examples/Output.js +11 -7
  127. package/lib/examples/Output.js.map +1 -1
  128. package/lib/examples/OutputIPyWidgets.js +3 -2
  129. package/lib/examples/OutputIPyWidgets.js.map +1 -1
  130. package/lib/examples/{Outputs.js → OutputsIpynb.js} +4 -4
  131. package/lib/examples/OutputsIpynb.js.map +1 -0
  132. package/lib/examples/RunningSessions.js +2 -6
  133. package/lib/examples/RunningSessions.js.map +1 -1
  134. package/lib/examples/Viewer.js.map +1 -1
  135. package/lib/examples/extensions/cellsidebars/CellSidebarSource.js +2 -2
  136. package/lib/examples/extensions/cellsidebars/CellSidebarSource.js.map +1 -1
  137. package/lib/examples/extensions/celltoolbar/CellToolbar.d.ts +2 -2
  138. package/lib/examples/extensions/celltoolbar/CellToolbar.js.map +1 -1
  139. package/lib/examples/extensions/celltoolbar/CellToolbarComponent.d.ts +2 -2
  140. package/lib/examples/extensions/celltoolbar/CellToolbarComponent.js.map +1 -1
  141. package/lib/examples/extensions/celltoolbar/CellToolbarExtension.d.ts +3 -3
  142. package/lib/examples/extensions/celltoolbar/CellToolbarExtension.js.map +1 -1
  143. package/lib/examples/extensions/celltoolbar/CellToolbarWidget.d.ts +2 -2
  144. package/lib/examples/extensions/celltoolbar/CellToolbarWidget.js +1 -2
  145. package/lib/examples/extensions/celltoolbar/CellToolbarWidget.js.map +1 -1
  146. package/lib/examples/extensions/exectime/ExecTimeExtension.d.ts +3 -3
  147. package/lib/examples/extensions/exectime/ExecTimeExtension.js +1 -2
  148. package/lib/examples/extensions/exectime/ExecTimeExtension.js.map +1 -1
  149. package/lib/examples/extensions/exectime/ExecTimeWidget.js +1 -1
  150. package/lib/examples/extensions/exectime/ExecTimeWidget.js.map +1 -1
  151. package/lib/examples/extensions/exectime/utils.js +6 -1
  152. package/lib/examples/extensions/exectime/utils.js.map +1 -1
  153. package/lib/examples/extensions/toc/TocExtension.d.ts +3 -3
  154. package/lib/examples/extensions/toc/TocExtension.js +2 -2
  155. package/lib/examples/extensions/toc/TocExtension.js.map +1 -1
  156. package/lib/examples/notebooks/Lite.ipynb.json +10 -28
  157. package/lib/examples/notebooks/NotebookExample1.ipynb.json +3 -11
  158. package/lib/examples/notebooks/NotebookOutputs.ipynb.json +3 -9
  159. package/lib/examples/notebooks/NotebookToCExample.ipynb.json +7 -22
  160. package/lib/examples/toolbars/NotebookToolbarAutoSave.js.map +1 -1
  161. package/lib/index.d.ts +0 -1
  162. package/lib/index.js +0 -1
  163. package/lib/index.js.map +1 -1
  164. package/lib/jupyter/Jupyter.js +3 -2
  165. package/lib/jupyter/Jupyter.js.map +1 -1
  166. package/lib/jupyter/JupyterConfig.js +16 -63
  167. package/lib/jupyter/JupyterConfig.js.map +1 -1
  168. package/lib/jupyter/JupyterContext.js +4 -3
  169. package/lib/jupyter/JupyterContext.js.map +1 -1
  170. package/lib/jupyter/JupyterDefaults.js.map +1 -1
  171. package/lib/jupyter/collaboration/CollaborationContext.d.ts +70 -0
  172. package/lib/jupyter/collaboration/CollaborationContext.js +110 -0
  173. package/lib/jupyter/collaboration/CollaborationContext.js.map +1 -0
  174. package/lib/jupyter/collaboration/ICollaborationProvider.d.ts +120 -0
  175. package/lib/jupyter/collaboration/ICollaborationProvider.js +93 -0
  176. package/lib/jupyter/collaboration/ICollaborationProvider.js.map +1 -0
  177. package/lib/jupyter/collaboration/JupyterCollaboration.d.ts +1 -1
  178. package/lib/jupyter/collaboration/JupyterCollaboration.js +1 -1
  179. package/lib/jupyter/collaboration/JupyterCollaboration.js.map +1 -1
  180. package/lib/jupyter/collaboration/index.d.ts +3 -2
  181. package/lib/jupyter/collaboration/index.js +3 -2
  182. package/lib/jupyter/collaboration/index.js.map +1 -1
  183. package/lib/jupyter/collaboration/providers/JupyterCollaborationProvider.d.ts +38 -0
  184. package/lib/jupyter/collaboration/providers/JupyterCollaborationProvider.js +98 -0
  185. package/lib/jupyter/collaboration/providers/JupyterCollaborationProvider.js.map +1 -0
  186. package/lib/jupyter/collaboration/providers/NoOpCollaborationProvider.d.ts +23 -0
  187. package/lib/jupyter/collaboration/providers/NoOpCollaborationProvider.js +39 -0
  188. package/lib/jupyter/collaboration/providers/NoOpCollaborationProvider.js.map +1 -0
  189. package/lib/jupyter/collaboration/providers/index.d.ts +2 -0
  190. package/lib/jupyter/collaboration/providers/index.js +8 -0
  191. package/lib/jupyter/collaboration/providers/index.js.map +1 -0
  192. package/lib/jupyter/ipywidgets/classic/htmlmanager.d.ts +1 -1
  193. package/lib/jupyter/ipywidgets/classic/htmlmanager.js +4 -4
  194. package/lib/jupyter/ipywidgets/classic/htmlmanager.js.map +1 -1
  195. package/lib/jupyter/ipywidgets/classic/manager.js +2 -1
  196. package/lib/jupyter/ipywidgets/classic/manager.js.map +1 -1
  197. package/lib/jupyter/ipywidgets/lab/manager.js +1 -1
  198. package/lib/jupyter/ipywidgets/lab/manager.js.map +1 -1
  199. package/lib/jupyter/ipywidgets/lab/renderer.js +2 -1
  200. package/lib/jupyter/ipywidgets/lab/renderer.js.map +1 -1
  201. package/lib/jupyter/ipywidgets/libembed-amd.js +4 -3
  202. package/lib/jupyter/ipywidgets/libembed-amd.js.map +1 -1
  203. package/lib/jupyter/ipywidgets/libembed.js +3 -2
  204. package/lib/jupyter/ipywidgets/libembed.js.map +1 -1
  205. package/lib/jupyter/ipywidgets/mimetypes.js.map +1 -1
  206. package/lib/jupyter/ipywidgets/semvercache.js.map +1 -1
  207. package/lib/jupyter/kernel/Kernel.js.map +1 -1
  208. package/lib/jupyter/kernel/KernelExecutor.js +6 -3
  209. package/lib/jupyter/kernel/KernelExecutor.js.map +1 -1
  210. package/lib/jupyter/kernel/KernelState.js +1 -1
  211. package/lib/jupyter/kernel/KernelState.js.map +1 -1
  212. package/lib/jupyter/lite/LiteServer.js +1 -1
  213. package/lib/jupyter/lite/LiteServer.js.map +1 -1
  214. package/lib/jupyter/services/ServiceManagerLess.js +15 -14
  215. package/lib/jupyter/services/ServiceManagerLess.js.map +1 -1
  216. package/lib/jupyter/services/ServiceManagerLite.js +2 -2
  217. package/lib/jupyter/services/ServiceManagerLite.js.map +1 -1
  218. package/lib/state/JupyterReactState.d.ts +0 -3
  219. package/lib/state/JupyterReactState.js +7 -20
  220. package/lib/state/JupyterReactState.js.map +1 -1
  221. package/lib/state/index.d.ts +1 -2
  222. package/lib/state/index.js +1 -2
  223. package/lib/state/index.js.map +1 -1
  224. package/lib/theme/JupyterLabCss.d.ts +0 -9
  225. package/lib/theme/JupyterLabCss.js +7 -16
  226. package/lib/theme/JupyterLabCss.js.map +1 -1
  227. package/lib/theme/JupyterLabCssImports.d.ts +0 -2
  228. package/lib/theme/JupyterLabCssImports.js +2 -2
  229. package/lib/theme/JupyterLabCssImports.js.map +1 -1
  230. package/lib/theme/JupyterReactTheme.d.ts +10 -0
  231. package/lib/theme/JupyterReactTheme.js +10 -0
  232. package/lib/theme/JupyterReactTheme.js.map +1 -1
  233. package/lib/theme/themes/JupyterLabTheme.js.map +1 -1
  234. package/lib/utils/cursorExtension.js +2 -2
  235. package/lib/utils/cursorExtension.js.map +1 -1
  236. package/package.json +4 -3
  237. package/lib/components/codemirror/CodeMirrorDatalayerEditor.js.map +0 -1
  238. package/lib/examples/NotebookMutationsKernel.js +0 -119
  239. package/lib/examples/NotebookMutationsKernel.js.map +0 -1
  240. package/lib/examples/NotebookMutationsServiceManager.js +0 -124
  241. package/lib/examples/NotebookMutationsServiceManager.js.map +0 -1
  242. package/lib/examples/Outputs.d.ts +0 -1
  243. package/lib/examples/Outputs.js.map +0 -1
  244. package/lib/jupyter/collaboration/DatalayerCollaboration.d.ts +0 -9
  245. package/lib/jupyter/collaboration/DatalayerCollaboration.js +0 -30
  246. package/lib/jupyter/collaboration/DatalayerCollaboration.js.map +0 -1
  247. package/lib/jupyter/collaboration/ICollaborative.d.ts +0 -36
  248. package/lib/jupyter/collaboration/ICollaborative.js +0 -7
  249. package/lib/jupyter/collaboration/ICollaborative.js.map +0 -1
  250. package/lib/providers/index.d.ts +0 -1
  251. package/lib/providers/index.js +0 -7
  252. package/lib/providers/index.js.map +0 -1
  253. package/lib/providers/kernels/DatalayerKernels.d.ts +0 -25
  254. package/lib/providers/kernels/DatalayerKernels.js +0 -58
  255. package/lib/providers/kernels/DatalayerKernels.js.map +0 -1
  256. package/lib/providers/kernels/index.d.ts +0 -1
  257. package/lib/providers/kernels/index.js +0 -7
  258. package/lib/providers/kernels/index.js.map +0 -1
  259. package/lib/state/IDatalayerConfig.d.ts +0 -22
  260. package/lib/state/IDatalayerConfig.js +0 -7
  261. package/lib/state/IDatalayerConfig.js.map +0 -1
  262. /package/lib/examples/{NotebookMutationsKernel.d.ts → Notebook2Collaborative.d.ts} +0 -0
  263. /package/lib/examples/{NotebookMutationsServiceManager.d.ts → OutputsIpynb.d.ts} +0 -0
@@ -0,0 +1,110 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /*
3
+ * Copyright (c) 2021-2023 Datalayer, Inc.
4
+ *
5
+ * MIT License
6
+ */
7
+ import { createContext, useContext, useEffect, useMemo, useState, } from 'react';
8
+ import { CollaborationStatus, } from './ICollaborationProvider';
9
+ const CollaborationContext = createContext(undefined);
10
+ /**
11
+ * Collaboration provider component
12
+ *
13
+ * This component provides collaboration context to its children.
14
+ */
15
+ export function CollaborationProvider({ provider: providerProp, children, }) {
16
+ const [status, setStatus] = useState(CollaborationStatus.Disconnected);
17
+ const [isSynced, setIsSynced] = useState(false);
18
+ const [error, setError] = useState(null);
19
+ // Use the provider instance
20
+ const provider = useMemo(() => {
21
+ return providerProp || null;
22
+ }, [providerProp]);
23
+ // Subscribe to provider events
24
+ useEffect(() => {
25
+ if (!provider) {
26
+ return;
27
+ }
28
+ const statusHandler = (sender, newStatus) => {
29
+ setStatus(newStatus);
30
+ };
31
+ const errorHandler = (sender, error) => {
32
+ setError(error);
33
+ };
34
+ const syncHandler = (sender, synced) => {
35
+ setIsSynced(synced);
36
+ };
37
+ provider.events.statusChanged.connect(statusHandler);
38
+ provider.events.errorOccurred.connect(errorHandler);
39
+ provider.events.syncStateChanged.connect(syncHandler);
40
+ // Set initial status
41
+ setStatus(provider.status);
42
+ return () => {
43
+ provider.events.statusChanged.disconnect(statusHandler);
44
+ provider.events.errorOccurred.disconnect(errorHandler);
45
+ provider.events.syncStateChanged.disconnect(syncHandler);
46
+ };
47
+ }, [provider]);
48
+ // Cleanup on unmount
49
+ useEffect(() => {
50
+ return () => {
51
+ provider?.dispose();
52
+ };
53
+ }, [provider]);
54
+ const connect = async (sharedModel, documentId, options) => {
55
+ if (!provider) {
56
+ throw new Error('No collaboration provider configured');
57
+ }
58
+ setError(null);
59
+ try {
60
+ await provider.connect(sharedModel, documentId, options);
61
+ }
62
+ catch (err) {
63
+ setError(err);
64
+ throw err;
65
+ }
66
+ };
67
+ const disconnect = () => {
68
+ provider?.disconnect();
69
+ setIsSynced(false);
70
+ setError(null);
71
+ };
72
+ const value = {
73
+ provider,
74
+ status,
75
+ isConnected: status === CollaborationStatus.Connected,
76
+ isSynced,
77
+ error,
78
+ connect,
79
+ disconnect,
80
+ };
81
+ return (_jsx(CollaborationContext.Provider, { value: value, children: children }));
82
+ }
83
+ /**
84
+ * Hook to use collaboration context
85
+ *
86
+ * @returns The collaboration context value
87
+ * @throws Error if used outside of CollaborationProvider
88
+ */
89
+ export function useCollaboration() {
90
+ const context = useContext(CollaborationContext);
91
+ if (!context) {
92
+ throw new Error('useCollaboration must be used within a CollaborationProvider');
93
+ }
94
+ return context;
95
+ }
96
+ /**
97
+ * Hook to get collaboration status
98
+ */
99
+ export function useCollaborationStatus() {
100
+ const { status } = useCollaboration();
101
+ return status;
102
+ }
103
+ /**
104
+ * Hook to check if collaboration is connected
105
+ */
106
+ export function useIsCollaborationConnected() {
107
+ const { isConnected } = useCollaboration();
108
+ return isConnected;
109
+ }
110
+ //# sourceMappingURL=CollaborationContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollaborationContext.js","sourceRoot":"","sources":["../../../src/jupyter/collaboration/CollaborationContext.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ import { YNotebook } from '@jupyter/ydoc';
2
+ import { WebsocketProvider } from 'y-websocket';
3
+ import { IDisposable } from '@lumino/disposable';
4
+ import { ISignal, Signal } from '@lumino/signaling';
5
+ /**
6
+ * Collaboration provider connection status
7
+ */
8
+ export declare enum CollaborationStatus {
9
+ Disconnected = "disconnected",
10
+ Connecting = "connecting",
11
+ Connected = "connected",
12
+ Error = "error"
13
+ }
14
+ /**
15
+ * Events emitted by collaboration providers
16
+ */
17
+ export interface ICollaborationProviderEvents {
18
+ /**
19
+ * Signal emitted when connection status changes
20
+ */
21
+ statusChanged: ISignal<ICollaborationProvider, CollaborationStatus>;
22
+ /**
23
+ * Signal emitted when an error occurs
24
+ */
25
+ errorOccurred: ISignal<ICollaborationProvider, Error>;
26
+ /**
27
+ * Signal emitted when synchronization state changes
28
+ */
29
+ syncStateChanged: ISignal<ICollaborationProvider, boolean>;
30
+ }
31
+ /**
32
+ * Interface for collaboration providers
33
+ *
34
+ * This interface defines the contract that all collaboration providers must implement.
35
+ * It provides a uniform way to connect to different collaboration backends while
36
+ * maintaining the same API for the notebook components.
37
+ */
38
+ export interface ICollaborationProvider extends IDisposable {
39
+ /**
40
+ * Provider type identifier
41
+ */
42
+ readonly type: string;
43
+ /**
44
+ * Current connection status
45
+ */
46
+ readonly status: CollaborationStatus;
47
+ /**
48
+ * Whether the provider is currently connected
49
+ */
50
+ readonly isConnected: boolean;
51
+ /**
52
+ * Provider events
53
+ */
54
+ readonly events: ICollaborationProviderEvents;
55
+ /**
56
+ * Connect to the collaboration service
57
+ *
58
+ * @param sharedModel - The shared notebook model
59
+ * @param documentId - Document identifier
60
+ * @param options - Additional connection options
61
+ * @returns Promise that resolves when connected
62
+ */
63
+ connect(sharedModel: YNotebook, documentId: string, options?: Record<string, any>): Promise<void>;
64
+ /**
65
+ * Disconnect from the collaboration service
66
+ */
67
+ disconnect(): void;
68
+ /**
69
+ * Get the underlying WebSocket provider
70
+ *
71
+ * @returns The WebSocket provider or null if not connected
72
+ */
73
+ getProvider(): WebsocketProvider | null;
74
+ /**
75
+ * Get the shared model
76
+ *
77
+ * @returns The shared model or null if not connected
78
+ */
79
+ getSharedModel(): YNotebook | null;
80
+ /**
81
+ * Handle connection close event
82
+ *
83
+ * @param event - Close event
84
+ */
85
+ handleConnectionClose(event: CloseEvent): void;
86
+ /**
87
+ * Handle synchronization event
88
+ *
89
+ * @param isSynced - Whether the document is synchronized
90
+ */
91
+ handleSync(isSynced: boolean): void;
92
+ }
93
+ /**
94
+ * Abstract base class for collaboration providers
95
+ *
96
+ * This class provides common functionality for all collaboration providers.
97
+ */
98
+ export declare abstract class CollaborationProviderBase implements ICollaborationProvider {
99
+ readonly type: string;
100
+ protected _status: CollaborationStatus;
101
+ protected _provider: WebsocketProvider | null;
102
+ protected _sharedModel: YNotebook | null;
103
+ protected _statusChanged: Signal<this, CollaborationStatus>;
104
+ protected _errorOccurred: Signal<this, Error>;
105
+ protected _syncStateChanged: Signal<this, boolean>;
106
+ protected _isDisposed: boolean;
107
+ constructor(type: string);
108
+ get status(): CollaborationStatus;
109
+ get isConnected(): boolean;
110
+ get isDisposed(): boolean;
111
+ get events(): ICollaborationProviderEvents;
112
+ abstract connect(sharedModel: YNotebook, documentId: string, options?: Record<string, any>): Promise<void>;
113
+ disconnect(): void;
114
+ getProvider(): WebsocketProvider | null;
115
+ getSharedModel(): YNotebook | null;
116
+ handleConnectionClose(event: CloseEvent): void;
117
+ handleSync(isSynced: boolean): void;
118
+ dispose(): void;
119
+ protected setStatus(status: CollaborationStatus): void;
120
+ }
@@ -0,0 +1,93 @@
1
+ /*
2
+ * Copyright (c) 2021-2023 Datalayer, Inc.
3
+ *
4
+ * MIT License
5
+ */
6
+ import { Signal } from '@lumino/signaling';
7
+ /**
8
+ * Collaboration provider connection status
9
+ */
10
+ export var CollaborationStatus;
11
+ (function (CollaborationStatus) {
12
+ CollaborationStatus["Disconnected"] = "disconnected";
13
+ CollaborationStatus["Connecting"] = "connecting";
14
+ CollaborationStatus["Connected"] = "connected";
15
+ CollaborationStatus["Error"] = "error";
16
+ })(CollaborationStatus || (CollaborationStatus = {}));
17
+ /**
18
+ * Abstract base class for collaboration providers
19
+ *
20
+ * This class provides common functionality for all collaboration providers.
21
+ */
22
+ export class CollaborationProviderBase {
23
+ type;
24
+ _status = CollaborationStatus.Disconnected;
25
+ _provider = null;
26
+ _sharedModel = null;
27
+ _statusChanged = new Signal(this);
28
+ _errorOccurred = new Signal(this);
29
+ _syncStateChanged = new Signal(this);
30
+ _isDisposed = false;
31
+ constructor(type) {
32
+ this.type = type;
33
+ }
34
+ get status() {
35
+ return this._status;
36
+ }
37
+ get isConnected() {
38
+ return this._status === CollaborationStatus.Connected;
39
+ }
40
+ get isDisposed() {
41
+ return this._isDisposed;
42
+ }
43
+ get events() {
44
+ return {
45
+ statusChanged: this._statusChanged,
46
+ errorOccurred: this._errorOccurred,
47
+ syncStateChanged: this._syncStateChanged,
48
+ };
49
+ }
50
+ disconnect() {
51
+ if (this._provider) {
52
+ this._provider.disconnect();
53
+ this._provider.destroy();
54
+ this._provider = null;
55
+ }
56
+ this._sharedModel = null;
57
+ this.setStatus(CollaborationStatus.Disconnected);
58
+ }
59
+ getProvider() {
60
+ return this._provider;
61
+ }
62
+ getSharedModel() {
63
+ return this._sharedModel;
64
+ }
65
+ handleConnectionClose(event) {
66
+ if (event.code > 1000) {
67
+ console.error('Connection closed unexpectedly:', event);
68
+ this.setStatus(CollaborationStatus.Error);
69
+ this._errorOccurred.emit(new Error(`Connection closed: ${event.reason}`));
70
+ }
71
+ }
72
+ handleSync(isSynced) {
73
+ this._syncStateChanged.emit(isSynced);
74
+ if (isSynced) {
75
+ this.setStatus(CollaborationStatus.Connected);
76
+ }
77
+ }
78
+ dispose() {
79
+ if (this._isDisposed) {
80
+ return;
81
+ }
82
+ this.disconnect();
83
+ Signal.clearData(this);
84
+ this._isDisposed = true;
85
+ }
86
+ setStatus(status) {
87
+ if (this._status !== status) {
88
+ this._status = status;
89
+ this._statusChanged.emit(status);
90
+ }
91
+ }
92
+ }
93
+ //# sourceMappingURL=ICollaborationProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ICollaborationProvider.js","sourceRoot":"","sources":["../../../src/jupyter/collaboration/ICollaborationProvider.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Contents, ServerConnection } from '@jupyterlab/services';
2
- export declare const COLLABORATION_ROOM_URL_PATH = "api/collaboration/document";
2
+ export declare const COLLABORATION_ROOM_URL_PATH = "api/collaboration/room";
3
3
  export declare const COLLABORATION_SESSION_URL_PATH = "api/collaboration/session";
4
4
  /**
5
5
  * Document session model
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { URLExt } from '@jupyterlab/coreutils';
7
7
  import { ServerConnection } from '@jupyterlab/services';
8
- export const COLLABORATION_ROOM_URL_PATH = 'api/collaboration/document';
8
+ export const COLLABORATION_ROOM_URL_PATH = 'api/collaboration/room';
9
9
  export const COLLABORATION_SESSION_URL_PATH = 'api/collaboration/session';
10
10
  export async function requestJupyterCollaborationSession(format, type, path, serverSettings) {
11
11
  const settings = serverSettings ?? ServerConnection.makeSettings();
@@ -1 +1 @@
1
- {"version":3,"file":"JupyterCollaboration.js","sourceRoot":"","sources":["../../../src/jupyter/collaboration/JupyterCollaboration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAY,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAElE,MAAM,CAAC,MAAM,2BAA2B,GAAG,4BAA4B,CAAC;AAExE,MAAM,CAAC,MAAM,8BAA8B,GAAG,2BAA2B,CAAC;AAwB1E,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,MAAc,EACd,IAAY,EACZ,IAAY,EACZ,cAA2C;IAE3C,MAAM,QAAQ,GAAG,cAAc,IAAI,gBAAgB,CAAC,YAAY,EAAE,CAAC;IACnE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,8BAA8B,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IACpG,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KACvC,CAAC;IACF,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,gBAAgB,CAAC,YAAY,CAAC,KAAc,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,gBAAgB,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"JupyterCollaboration.js","sourceRoot":"","sources":["../../../src/jupyter/collaboration/JupyterCollaboration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAY,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAElE,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AAEpE,MAAM,CAAC,MAAM,8BAA8B,GAAG,2BAA2B,CAAC;AAwB1E,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,MAAc,EACd,IAAY,EACZ,IAAY,EACZ,cAA2C;IAE3C,MAAM,QAAQ,GAAG,cAAc,IAAI,gBAAgB,CAAC,YAAY,EAAE,CAAC;IACnE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CACrB,QAAQ,CAAC,OAAO,EAChB,8BAA8B,EAC9B,kBAAkB,CAAC,IAAI,CAAC,CACzB,CAAC;IACF,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KACvC,CAAC;IACF,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,gBAAgB,CAAC,YAAY,CAAC,KAAc,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,gBAAgB,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,eAAe,EAAE,CAAC"}
@@ -1,3 +1,4 @@
1
- export * from './DatalayerCollaboration';
2
- export * from './ICollaborative';
3
1
  export * from './JupyterCollaboration';
2
+ export * from './ICollaborationProvider';
3
+ export * from './CollaborationContext';
4
+ export * from './providers';
@@ -3,7 +3,8 @@
3
3
  *
4
4
  * MIT License
5
5
  */
6
- export * from './DatalayerCollaboration';
7
- export * from './ICollaborative';
8
6
  export * from './JupyterCollaboration';
7
+ export * from './ICollaborationProvider';
8
+ export * from './CollaborationContext';
9
+ export * from './providers';
9
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jupyter/collaboration/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jupyter/collaboration/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { YNotebook } from '@jupyter/ydoc';
2
+ import { ServerConnection } from '@jupyterlab/services';
3
+ import { CollaborationProviderBase } from '../ICollaborationProvider';
4
+ /**
5
+ * Configuration for Jupyter collaboration provider
6
+ */
7
+ export interface IJupyterCollaborationConfig {
8
+ /**
9
+ * Notebook file path (optional - can be provided via connect options)
10
+ */
11
+ path?: string;
12
+ /**
13
+ * Server settings
14
+ */
15
+ serverSettings?: ServerConnection.ISettings;
16
+ /**
17
+ * Format of the document
18
+ */
19
+ format?: string;
20
+ /**
21
+ * Type of the document
22
+ */
23
+ documentType?: string;
24
+ }
25
+ /**
26
+ * Jupyter collaboration provider
27
+ *
28
+ * This provider connects to Jupyter's collaboration service using WebSockets.
29
+ */
30
+ export declare class JupyterCollaborationProvider extends CollaborationProviderBase {
31
+ private _config;
32
+ private _onSync;
33
+ private _onConnectionClose;
34
+ constructor(config?: IJupyterCollaborationConfig);
35
+ connect(sharedModel: YNotebook, documentId: string, options?: Record<string, any>): Promise<void>;
36
+ disconnect(): void;
37
+ handleConnectionClose(event: CloseEvent): void;
38
+ }
@@ -0,0 +1,98 @@
1
+ /*
2
+ * Copyright (c) 2021-2023 Datalayer, Inc.
3
+ *
4
+ * MIT License
5
+ */
6
+ import { WebsocketProvider } from 'y-websocket';
7
+ import { URLExt } from '@jupyterlab/coreutils';
8
+ import { ServerConnection } from '@jupyterlab/services';
9
+ import { CollaborationProviderBase, CollaborationStatus, } from '../ICollaborationProvider';
10
+ import { COLLABORATION_ROOM_URL_PATH, requestJupyterCollaborationSession, } from '../JupyterCollaboration';
11
+ /**
12
+ * Jupyter collaboration provider
13
+ *
14
+ * This provider connects to Jupyter's collaboration service using WebSockets.
15
+ */
16
+ export class JupyterCollaborationProvider extends CollaborationProviderBase {
17
+ _config;
18
+ _onSync = null;
19
+ _onConnectionClose = null;
20
+ constructor(config = {}) {
21
+ super('jupyter');
22
+ this._config = config;
23
+ }
24
+ async connect(sharedModel, documentId, options) {
25
+ if (this.isConnected) {
26
+ console.warn('Already connected to Jupyter collaboration service');
27
+ return;
28
+ }
29
+ this.setStatus(CollaborationStatus.Connecting);
30
+ try {
31
+ const serverSettings = this._config.serverSettings ?? ServerConnection.makeSettings();
32
+ const { ydoc, awareness } = sharedModel;
33
+ // Use path from options if provided, otherwise fall back to config
34
+ const path = options?.path || this._config.path;
35
+ if (!path) {
36
+ throw new Error('Path is required for Jupyter collaboration. Provide it in the config or via connect options.');
37
+ }
38
+ // Request collaboration session from Jupyter
39
+ const session = await requestJupyterCollaborationSession(this._config.format || 'json', this._config.documentType || 'notebook', path, serverSettings);
40
+ // Build WebSocket URL
41
+ const wsUrl = serverSettings.wsUrl;
42
+ if (!wsUrl) {
43
+ throw new Error('WebSocket URL is not available');
44
+ }
45
+ const documentURL = URLExt.join(wsUrl, COLLABORATION_ROOM_URL_PATH);
46
+ const documentName = `${session.format}:${session.type}:${session.fileId}`;
47
+ // Create WebSocket provider
48
+ const params = {
49
+ sessionId: session.sessionId,
50
+ };
51
+ if (serverSettings.token) {
52
+ params.token = serverSettings.token;
53
+ }
54
+ this._provider = new WebsocketProvider(documentURL, documentName, ydoc, {
55
+ disableBc: true,
56
+ params,
57
+ awareness,
58
+ ...options,
59
+ });
60
+ this._sharedModel = sharedModel;
61
+ // Set up event handlers
62
+ this._onSync = (isSynced) => {
63
+ this.handleSync(isSynced);
64
+ };
65
+ this._onConnectionClose = (event) => {
66
+ this.handleConnectionClose(event);
67
+ };
68
+ this._provider.on('sync', this._onSync);
69
+ this._provider.on('connection-close', this._onConnectionClose);
70
+ console.log('Connected to Jupyter collaboration service');
71
+ }
72
+ catch (error) {
73
+ this.setStatus(CollaborationStatus.Error);
74
+ this._errorOccurred.emit(error);
75
+ throw error;
76
+ }
77
+ }
78
+ disconnect() {
79
+ if (this._provider) {
80
+ if (this._onSync) {
81
+ this._provider.off('sync', this._onSync);
82
+ }
83
+ if (this._onConnectionClose) {
84
+ this._provider.off('connection-close', this._onConnectionClose);
85
+ }
86
+ }
87
+ super.disconnect();
88
+ }
89
+ handleConnectionClose(event) {
90
+ super.handleConnectionClose(event);
91
+ // Handle session expiration (code 4002)
92
+ if (event.code === 4002) {
93
+ console.warn('Jupyter collaboration session expired');
94
+ // Attempt to reconnect could be implemented here?
95
+ }
96
+ }
97
+ }
98
+ //# sourceMappingURL=JupyterCollaborationProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JupyterCollaborationProvider.js","sourceRoot":"","sources":["../../../../src/jupyter/collaboration/providers/JupyterCollaborationProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { YNotebook } from '@jupyter/ydoc';
2
+ import { WebsocketProvider } from 'y-websocket';
3
+ import { CollaborationProviderBase } from '../ICollaborationProvider';
4
+ /**
5
+ * Configuration for no-op collaboration provider
6
+ */
7
+ export interface INoOpCollaborationConfig {
8
+ type?: 'none' | 'noop';
9
+ }
10
+ /**
11
+ * No-operation collaboration provider
12
+ *
13
+ * This provider is used when collaboration is disabled.
14
+ * It provides a null implementation of the collaboration interface.
15
+ */
16
+ export declare class NoOpCollaborationProvider extends CollaborationProviderBase {
17
+ constructor(config?: INoOpCollaborationConfig);
18
+ connect(sharedModel: YNotebook, documentId: string, options?: Record<string, any>): Promise<void>;
19
+ disconnect(): void;
20
+ getProvider(): WebsocketProvider | null;
21
+ handleConnectionClose(event: CloseEvent): void;
22
+ handleSync(isSynced: boolean): void;
23
+ }
@@ -0,0 +1,39 @@
1
+ /*
2
+ * Copyright (c) 2021-2023 Datalayer, Inc.
3
+ *
4
+ * MIT License
5
+ */
6
+ import { CollaborationProviderBase, CollaborationStatus, } from '../ICollaborationProvider';
7
+ /**
8
+ * No-operation collaboration provider
9
+ *
10
+ * This provider is used when collaboration is disabled.
11
+ * It provides a null implementation of the collaboration interface.
12
+ */
13
+ export class NoOpCollaborationProvider extends CollaborationProviderBase {
14
+ constructor(config) {
15
+ super('none');
16
+ }
17
+ async connect(sharedModel, documentId, options) {
18
+ // No-op: Just store the shared model without creating any connection
19
+ this._sharedModel = sharedModel;
20
+ this.setStatus(CollaborationStatus.Connected);
21
+ this._syncStateChanged.emit(true);
22
+ }
23
+ disconnect() {
24
+ this._sharedModel = null;
25
+ this.setStatus(CollaborationStatus.Disconnected);
26
+ }
27
+ getProvider() {
28
+ // No WebSocket provider in no-op mode
29
+ return null;
30
+ }
31
+ handleConnectionClose(event) {
32
+ // No-op: No connection to close
33
+ }
34
+ handleSync(isSynced) {
35
+ // No-op: Always considered synced
36
+ this._syncStateChanged.emit(true);
37
+ }
38
+ }
39
+ //# sourceMappingURL=NoOpCollaborationProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NoOpCollaborationProvider.js","sourceRoot":"","sources":["../../../../src/jupyter/collaboration/providers/NoOpCollaborationProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AASnC;;;;;GAKG;AACH,MAAM,OAAO,yBAA0B,SAAQ,yBAAyB;IACtE,YAAY,MAAiC;QAC3C,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAO,CACX,WAAsB,EACtB,UAAkB,EAClB,OAA6B;QAE7B,qEAAqE;QACrE,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,UAAU;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAED,WAAW;QACT,sCAAsC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qBAAqB,CAAC,KAAiB;QACrC,gCAAgC;IAClC,CAAC;IAED,UAAU,CAAC,QAAiB;QAC1B,kCAAkC;QAClC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export * from './JupyterCollaborationProvider';
2
+ export * from './NoOpCollaborationProvider';
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Copyright (c) 2021-2023 Datalayer, Inc.
3
+ *
4
+ * MIT License
5
+ */
6
+ export * from './JupyterCollaborationProvider';
7
+ export * from './NoOpCollaborationProvider';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/jupyter/collaboration/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC"}
@@ -14,7 +14,7 @@ export declare class HTMLManager extends ManagerBase {
14
14
  /**
15
15
  * Placeholder implementation for _get_comm_info.
16
16
  */
17
- _get_comm_info(): Promise<{}>;
17
+ _get_comm_info(): Promise<Record<string, unknown>>;
18
18
  /**
19
19
  * Placeholder implementation for _create_comm.
20
20
  */
@@ -8,7 +8,7 @@
8
8
  import { Widget } from '@lumino/widgets';
9
9
  import { MessageLoop } from '@lumino/messaging';
10
10
  import { ManagerBase } from '@jupyter-widgets/base-manager';
11
- import { RenderMimeRegistry, standardRendererFactories } from '@jupyterlab/rendermime';
11
+ import { RenderMimeRegistry, standardRendererFactories, } from '@jupyterlab/rendermime';
12
12
  import { WidgetRenderer, WIDGET_MIMETYPE } from './output_renderers';
13
13
  import * as widgets from '@jupyter-widgets/controls';
14
14
  import * as base from '@jupyter-widgets/base';
@@ -24,11 +24,11 @@ export class HTMLManager extends ManagerBase {
24
24
  this.renderMime.addFactory({
25
25
  safe: false,
26
26
  mimeTypes: [WIDGET_MIMETYPE],
27
- createRenderer: (options) => new WidgetRenderer(options, this),
27
+ createRenderer: options => new WidgetRenderer(options, this),
28
28
  }, 0);
29
29
  this._viewList = new Set();
30
30
  window.addEventListener('resize', () => {
31
- this._viewList.forEach((view) => {
31
+ this._viewList.forEach(view => {
32
32
  MessageLoop.postMessage(view.luminoWidget, Widget.ResizeMessage.UnknownSize);
33
33
  });
34
34
  });
@@ -100,7 +100,7 @@ export class HTMLManager extends ManagerBase {
100
100
  else {
101
101
  reject(`Could not load module ${moduleName}@${moduleVersion}`);
102
102
  }
103
- }).then((module) => {
103
+ }).then(module => {
104
104
  if (module[className]) {
105
105
  return module[className];
106
106
  }