jupyter-docprovider 2.1.0rc0__tar.gz → 2.1.2__tar.gz

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 (55) hide show
  1. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/PKG-INFO +4 -1
  2. jupyter_docprovider-2.1.2/jupyter_docprovider/_version.py +1 -0
  3. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/jupyter_docprovider/labextension/package.json +4 -4
  4. jupyter_docprovider-2.1.2/jupyter_docprovider/labextension/static/240.1810b1e246bd604b51b2.js +1 -0
  5. jupyter_docprovider-2.1.2/jupyter_docprovider/labextension/static/422.3ab44960b241aac9f303.js +1 -0
  6. jupyter_docprovider-2.1.2/jupyter_docprovider/labextension/static/703.a9b23bb2dcc109b62003.js +1 -0
  7. jupyter_docprovider-2.1.2/jupyter_docprovider/labextension/static/994.bc087314bdabeecb0923.js +1 -0
  8. jupyter_docprovider-2.1.2/jupyter_docprovider/labextension/static/remoteEntry.00d6cee65f8f8434f757.js +1 -0
  9. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/jupyter_docprovider/labextension/static/third-party-licenses.json +3 -3
  10. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/package.json +2 -2
  11. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/src/ydrive.ts +165 -15
  12. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider-extension/package.json +3 -3
  13. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider-extension/src/filebrowser.ts +2 -1
  14. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/pyproject.toml +3 -0
  15. jupyter_docprovider-2.1.0rc0/jupyter_docprovider/_version.py +0 -1
  16. jupyter_docprovider-2.1.0rc0/jupyter_docprovider/labextension/static/214.2160426d16ac167727f7.js +0 -1
  17. jupyter_docprovider-2.1.0rc0/jupyter_docprovider/labextension/static/240.5e91adb83233ee07fcd1.js +0 -1
  18. jupyter_docprovider-2.1.0rc0/jupyter_docprovider/labextension/static/703.186bb4136d33d6e39c11.js +0 -1
  19. jupyter_docprovider-2.1.0rc0/jupyter_docprovider/labextension/static/753.3e2a3c497c97d57fb828.js +0 -1
  20. jupyter_docprovider-2.1.0rc0/jupyter_docprovider/labextension/static/remoteEntry.3dd2067ca897a52b681d.js +0 -1
  21. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/.gitignore +0 -0
  22. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/LICENSE +0 -0
  23. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/README.md +0 -0
  24. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/install.json +0 -0
  25. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/jupyter_docprovider/__init__.py +0 -0
  26. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/jupyter_docprovider/labextension/static/444.13de0fd44849e3f7d780.js +0 -0
  27. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/jupyter_docprovider/labextension/static/944.eaec77f5cee3f07c3b7f.js +0 -0
  28. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/jupyter_docprovider/labextension/static/style.js +0 -0
  29. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/babel.config.js +0 -0
  30. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/jest.config.js +0 -0
  31. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/src/TimelineSlider.tsx +0 -0
  32. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/src/__tests__/forkManager.spec.ts +0 -0
  33. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/src/__tests__/yprovider.spec.ts +0 -0
  34. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/src/awareness.ts +0 -0
  35. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/src/component.tsx +0 -0
  36. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/src/forkManager.ts +0 -0
  37. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/src/index.ts +0 -0
  38. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/src/notebookCellExecutor.ts +0 -0
  39. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/src/requests.ts +0 -0
  40. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/src/tokens.ts +0 -0
  41. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/src/yprovider.ts +0 -0
  42. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/style/base.css +0 -0
  43. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/style/index.css +0 -0
  44. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/style/index.js +0 -0
  45. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/style/slider.css +0 -0
  46. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/tsconfig.json +0 -0
  47. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider/tsconfig.test.json +0 -0
  48. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider-extension/README.md +0 -0
  49. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider-extension/src/executor.ts +0 -0
  50. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider-extension/src/forkManager.ts +0 -0
  51. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider-extension/src/index.ts +0 -0
  52. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider-extension/style/index.css +0 -0
  53. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider-extension/style/index.js +0 -0
  54. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/packages/docprovider-extension/tsconfig.json +0 -0
  55. {jupyter_docprovider-2.1.0rc0 → jupyter_docprovider-2.1.2}/setup.py +0 -0
@@ -1,9 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jupyter-docprovider
3
- Version: 2.1.0rc0
3
+ Version: 2.1.2
4
4
  Summary: JupyterLab/Jupyter Notebook 7+ extension integrating collaborative shared models.
5
5
  Project-URL: Documentation, https://jupyterlab-realtime-collaboration.readthedocs.io/
6
6
  Project-URL: Repository, https://github.com/jupyterlab/jupyter-collaboration
7
+ Project-URL: Changelog, https://jupyterlab-realtime-collaboration.readthedocs.io/en/latest/changelog.html
8
+ Project-URL: Source, https://github.com/jupyterlab/jupyter-collaboration/tree/main/packages/docprovider-extension
9
+ Project-URL: Issues, https://github.com/jupyterlab/jupyter-collaboration/issues/new/choose
7
10
  Author-email: Jupyter Development Team <jupyter@googlegroups.com>
8
11
  License: # Licensing terms
9
12
 
@@ -0,0 +1 @@
1
+ __version__ = "2.1.2"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jupyter/docprovider-extension",
3
- "version": "4.1.0-rc.0",
3
+ "version": "4.1.2",
4
4
  "description": "JupyterLab - Collaborative Shared Models",
5
5
  "keywords": [
6
6
  "jupyter",
@@ -53,8 +53,8 @@
53
53
  "watch:labextension": "jupyter labextension watch ."
54
54
  },
55
55
  "dependencies": {
56
- "@jupyter/collaborative-drive": "^4.1.0-rc.0",
57
- "@jupyter/docprovider": "^4.1.0-rc.0",
56
+ "@jupyter/collaborative-drive": "^4.1.2",
57
+ "@jupyter/docprovider": "^4.1.2",
58
58
  "@jupyter/ydoc": "^2.1.3 || ^3.0.0",
59
59
  "@jupyterlab/application": "^4.4.0",
60
60
  "@jupyterlab/apputils": "^4.4.0",
@@ -128,7 +128,7 @@
128
128
  }
129
129
  },
130
130
  "_build": {
131
- "load": "static/remoteEntry.3dd2067ca897a52b681d.js",
131
+ "load": "static/remoteEntry.00d6cee65f8f8434f757.js",
132
132
  "extension": "./extension",
133
133
  "style": "./style"
134
134
  }
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[]).push([[240],{68:(e,t,n)=>{n.d(t,{A:()=>a});var o=n(758),r=n.n(o),s=n(935),i=n.n(s)()(r());i.push([e.id,"/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|---------------------------------------------------------------------------- */\n\n.jp-timelineSliderWrapper .jp-sliderContainer{\n display: flex;\n align-items: center;\n}\n\n.jp-Slider {\n height: 4.5px\n}\n\n#jp-slider-status-bar {\n display: flex;\n}\n\n.jp-timestampDisplay {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 6px;\n}\n\n.jp-restoreBtnContainer {\n width: 192px;\n}\n\n.jp-ToolbarButtonComponent.jp-restoreBtn {\n cursor: pointer;\n color: var(--jp-layout-color2);\n width: 100%;\n background: var(--jp-accept-color-normal)\n}\n",""]);const a=i},935:e=>{e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",o=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),o&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),o&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,o,r,s){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(o)for(var a=0;a<this.length;a++){var c=this[a][0];null!=c&&(i[c]=!0)}for(var l=0;l<e.length;l++){var d=[].concat(e[l]);o&&i[d[0]]||(void 0!==s&&(void 0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=s),n&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=n):d[2]=n),r&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=r):d[4]="".concat(r)),t.push(d))}},t}},758:e=>{e.exports=function(e){return e[1]}},591:e=>{var t=[];function n(e){for(var n=-1,o=0;o<t.length;o++)if(t[o].identifier===e){n=o;break}return n}function o(e,o){for(var s={},i=[],a=0;a<e.length;a++){var c=e[a],l=o.base?c[0]+o.base:c[0],d=s[l]||0,u="".concat(l," ").concat(d);s[l]=d+1;var h=n(u),p={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==h)t[h].references++,t[h].updater(p);else{var v=r(p,o);o.byIndex=a,t.splice(a,0,{identifier:u,updater:v,references:1})}i.push(u)}return i}function r(e,t){var n=t.domAPI(t);return n.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;n.update(e=t)}else n.remove()}}e.exports=function(e,r){var s=o(e=e||[],r=r||{});return function(e){e=e||[];for(var i=0;i<s.length;i++){var a=n(s[i]);t[a].references--}for(var c=o(e,r),l=0;l<s.length;l++){var d=n(s[l]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}s=c}}},128:e=>{var t={};e.exports=function(e,n){var o=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(n)}},51:e=>{e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},855:(e,t,n)=>{e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},740:e=>{e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var o="";n.supports&&(o+="@supports (".concat(n.supports,") {")),n.media&&(o+="@media ".concat(n.media," {"));var r=void 0!==n.layer;r&&(o+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),o+=n.css,r&&(o+="}"),n.media&&(o+="}"),n.supports&&(o+="}");var s=n.sourceMap;s&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s))))," */")),t.styleTagTransform(o,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},656:e=>{e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},240:(e,t,n)=>{n.r(t),n.d(t,{ForkManager:()=>z,IForkManagerToken:()=>q,JUPYTER_COLLABORATION_FORK_EVENTS_URI:()=>K,NotebookCellServerExecutor:()=>l,ROOM_FORK_URL:()=>p,RtcContentProvider:()=>C,TimelineWidget:()=>V,WebSocketAwarenessProvider:()=>r,WebSocketProvider:()=>w,requestAPI:()=>v,requestDocSession:()=>m,requestDocumentTimeline:()=>f,requestUndoRedo:()=>g});var o=n(179);class r extends o.WebsocketProvider{constructor(e){super(e.url,e.roomID,e.awareness.doc,{awareness:e.awareness}),this._isDisposed=!1,this._awareness=e.awareness,this._user=e.user,this._user.ready.then((()=>this._onUserChanged(this._user))).catch((e=>console.error(e))),this._user.userChanged.connect(this._onUserChanged,this)}get isDisposed(){return this._isDisposed}dispose(){this._isDisposed||(this._user.userChanged.disconnect(this._onUserChanged,this),this._isDisposed=!0,this.destroy())}_onUserChanged(e){this._awareness.setLocalStateField("user",e.identity)}}var s=n(986),i=n(297),a=n(860),c=n(424);class l{constructor(e){var t;this._serverSettings=null!==(t=e.serverSettings)&&void 0!==t?t:a.ServerConnection.makeSettings()}async runCell({cell:e,notebook:t,notebookConfig:n,onCellExecuted:o,onCellExecutionScheduled:r,sessionContext:l,sessionDialogs:d,translator:u}){var h,p,v;const m=(u=null!=u?u:c.nullTranslator).load("jupyterlab");switch(e.model.type){case"markdown":e.rendered=!0,e.inputHidden=!1,o({cell:e,success:!0});break;case"code":if(l){if(l.isTerminating){await(0,s.showDialog)({title:m.__("Kernel Terminating"),body:m.__("The kernel for %1 appears to be terminating. You can not run any cell for now.",null===(h=l.session)||void 0===h?void 0:h.path),buttons:[s.Dialog.okButton()]});break}if(l.pendingInput)return await(0,s.showDialog)({title:m.__("Cell not executed due to pending input"),body:m.__("The cell has not been executed to avoid kernel deadlock as there is another pending input! Submit your pending input and try again."),buttons:[s.Dialog.okButton()]}),!1;if(l.hasNoKernel&&await l.startKernel()&&d&&await d.selectKernel(l),l.hasNoKernel)return e.model.sharedModel.transact((()=>{e.model.clearExecution()})),!0;const n=null===(v=null===(p=null==l?void 0:l.session)||void 0===p?void 0:p.kernel)||void 0===v?void 0:v.id,c=i.URLExt.join(this._serverSettings.baseUrl,`api/kernels/${n}/execute`),u=e.model.sharedModel.getId(),f=t.sharedModel.getState("document_id"),g={method:"POST",body:JSON.stringify({cell_id:u,document_id:f})};r({cell:e});let y=!1;try{y=(await a.ServerConnection.makeRequest(c,g,this._serverSettings)).ok}catch(t){if(o({cell:e,success:!1}),e.isDisposed)return!1;throw t}return o({cell:e,success:y}),!0}e.model.sharedModel.transact((()=>{e.model.clearExecution()}),!1)}return Promise.resolve(!0)}}const d="api/collaboration/session",u="api/collaboration/undo_redo",h="api/collaboration/timeline",p="api/collaboration/fork";async function v(e="",t={}){const n=a.ServerConnection.makeSettings(),o=i.URLExt.join(n.baseUrl,e);let r;try{r=await a.ServerConnection.makeRequest(o,t,n)}catch(e){throw new a.ServerConnection.NetworkError(e)}let s=await r.text();if(s.length>0)try{s=JSON.parse(s)}catch(e){console.error("Not a JSON response body.",r)}if(!r.ok)throw new a.ServerConnection.ResponseError(r,s.message||s);return s}async function m(e,t,n){const o=a.ServerConnection.makeSettings(),r=i.URLExt.join(o.baseUrl,d,encodeURIComponent(n)),s={method:"PUT",body:JSON.stringify({format:e,type:t})};let c;try{c=await a.ServerConnection.makeRequest(r,s,o)}catch(e){throw new a.ServerConnection.NetworkError(e)}let l=await c.text();if(l.length>0)try{l=JSON.parse(l)}catch(e){console.log("Not a JSON response body.",c)}if(!c.ok)throw new a.ServerConnection.ResponseError(c,l.message||l);return l}async function f(e,t,n){const o=a.ServerConnection.makeSettings();let r=i.URLExt.join(o.baseUrl,h,n);r=r.concat(`?format=${e}&&type=${t}`);const s={method:"GET"};let c;try{c=await a.ServerConnection.makeRequest(r,s,o)}catch(e){throw new a.ServerConnection.NetworkError(e)}return c}async function g(e,t,n,o){const r=a.ServerConnection.makeSettings();let s=i.URLExt.join(r.baseUrl,u,encodeURIComponent(e));s=s.concat(`?action=${t}&&steps=${n}&&forkRoom=${o}`);const c={method:"PUT"};let l;try{l=await a.ServerConnection.makeRequest(s,c,r)}catch(e){throw new a.ServerConnection.NetworkError(e)}let d=await l.text();if(d.length>0)try{d=JSON.parse(d)}catch(e){console.log("Not a JSON response body.",l)}if(!l.ok)throw new a.ServerConnection.ResponseError(l,d.message||d);return d}var y=n(262),_=n(602);class w{constructor(e){this._onConnectionClosed=e=>{1003===e.code&&(console.error("Document provider closed:",e.reason),(0,s.showErrorMessage)(this._trans.__("Document session error"),e.reason,[s.Dialog.okButton()]),this._sharedModel.dispose())},this._onSync=e=>{e&&(this._yWebsocketProvider&&(this._yWebsocketProvider.off("sync",this._onSync),this._sharedModel.ydoc.getMap("state").set("document_id",this._yWebsocketProvider.roomname)),this._ready.resolve())},this._ready=new y.PromiseDelegate,this._isDisposed=!1,this._path=e.path,this._contentType=e.contentType,this._format=e.format,this._serverUrl=e.url,this._sharedModel=e.model,this._awareness=e.model.awareness,this._yWebsocketProvider=null,this._trans=e.translator;const t=e.user;t.ready.then((()=>{this._onUserChanged(t)})).catch((e=>console.error(e))),t.userChanged.connect(this._onUserChanged,this),this._connect().catch((e=>console.warn(e)))}get isDisposed(){return this._isDisposed}get ready(){return this._ready.promise}get contentType(){return this._contentType}get format(){return this._format}dispose(){var e,t,n;this.isDisposed||(this._isDisposed=!0,null===(e=this._yWebsocketProvider)||void 0===e||e.off("connection-close",this._onConnectionClosed),null===(t=this._yWebsocketProvider)||void 0===t||t.off("sync",this._onSync),null===(n=this._yWebsocketProvider)||void 0===n||n.destroy(),this._disconnect(),_.Signal.clearData(this))}async reconnect(){this._disconnect(),this._connect()}async _connect(){const e=await m(this._format,this._contentType,this._path);this._yWebsocketProvider=new o.WebsocketProvider(this._serverUrl,`${e.format}:${e.type}:${e.fileId}`,this._sharedModel.ydoc,{disableBc:!0,params:{sessionId:e.sessionId},awareness:this._awareness}),this._yWebsocketProvider.on("sync",this._onSync),this._yWebsocketProvider.on("connection-close",this._onConnectionClosed)}async connectToForkDoc(e,t){this._disconnect(),this._yWebsocketProvider=new o.WebsocketProvider(this._serverUrl,e,this._sharedModel.ydoc,{disableBc:!0,params:{sessionId:t},awareness:this._awareness})}get wsProvider(){return this._yWebsocketProvider}_disconnect(){var e,t,n;null===(e=this._yWebsocketProvider)||void 0===e||e.off("connection-close",this._onConnectionClosed),null===(t=this._yWebsocketProvider)||void 0===t||t.off("sync",this._onSync),null===(n=this._yWebsocketProvider)||void 0===n||n.destroy(),this._yWebsocketProvider=null}_onUserChanged(e){this._awareness.setLocalStateField("user",e.identity)}}var S=n(721),k=n(214);const b="true"===i.PageConfig.getOption("disableRTC");class C extends a.RestContentProvider{constructor(e){super(e),this._onCreate=(e,t)=>{var n,o,r,s,a,c,l;if("string"!=typeof e.format)return;const d=null===(r=null===(o=null===(n=this._docmanagerSettings)||void 0===n?void 0:n.composite)||void 0===o?void 0:o.autosave)||void 0===r||r;t.awareness.setLocalStateField("autosave",d),null===(s=this._docmanagerSettings)||void 0===s||s.changed.connect((()=>{var e,n,o;const r=null===(o=null===(n=null===(e=this._docmanagerSettings)||void 0===e?void 0:e.composite)||void 0===n?void 0:n.autosave)||void 0===o||o;t.awareness.setLocalStateField("autosave",r)}));try{const n=new w({url:i.URLExt.join(this._serverSettings.wsUrl,"api/collaboration/room"),path:e.path,format:e.format,contentType:e.contentType,model:t,user:this._user,translator:this._trans}),o=((null===(a=this._globalAwareness)||void 0===a?void 0:a.getLocalState())||{}).documents||[];o.includes(e.path)||(o.push(e.path),null===(c=this._globalAwareness)||void 0===c||c.setLocalStateField("documents",o));let r=e.path,s=`${e.format}:${e.contentType}:${r}`;this._providers.set(s,n);const d=t=>{var n,o;const i=t.oldValue,a=t.newValue;if(!i||!a)return void console.debug("New or old path not given",t);const c=`${e.format}:${e.contentType}:${i}`;if(c!==s)return void console.error("The computed old provider key is different from the current key");const l=`${e.format}:${e.contentType}:${a}`,d=this._providers.get(c);if(!d)return void console.warn(`Could not find a provider to update after rename ${c}, ${l}`);this._providers.set(l,d),this._providers.delete(c),s=l,r=a;const u=((null===(n=this._globalAwareness)||void 0===n?void 0:n.getLocalState())||{}).documents||[],h=u.indexOf(i);u.includes(i)&&!u.includes(a)&&(u.splice(h,1),u.push(a),null===(o=this._globalAwareness)||void 0===o||o.setLocalStateField("documents",u))},u=(e,t)=>{var n,o;if("rename"!==t.type)return;const s=null===(n=t.oldValue)||void 0===n?void 0:n.path,i=null===(o=t.newValue)||void 0===o?void 0:o.path;s===r&&d({oldValue:s,newValue:i,name:"path"})};null===(l=this._driveFileChanged)||void 0===l||l.connect(u),t.changed.connect((async(n,o)=>{var r;if(!o.stateChange)return;const s=o.stateChange.filter((e=>"path"===e.name));for(const e of s)d(e);const i=o.stateChange.filter((e=>"hash"===e.name));if(0===i.length)return;i.length>1&&console.error("Unexpected multiple changes to hash value in a single transaction");const a=i[0],c=null!==(r=t.state.path)&&void 0!==r?r:e.path,l=await this.get(c,{content:!1});this._providerFileChanged.emit({type:"save",newValue:{...l,hash:a.newValue},oldValue:{hash:a.oldValue}})})),t.disposed.connect((()=>{var e,t,n;const o=this._providers.get(s);o&&(o.dispose(),this._providers.delete(s));const i=((null===(e=this._globalAwareness)||void 0===e?void 0:e.getLocalState())||{}).documents||[],a=i.indexOf(r);a>-1&&i.splice(a,1),null===(t=this._globalAwareness)||void 0===t||t.setLocalStateField("documents",i),null===(n=this._driveFileChanged)||void 0===n||n.disconnect(u)}))}catch(t){console.error(`Failed to open websocket connection for ${e.path}.\n:${t}`)}},this._saveCounter=0,this._providerFileChanged=new _.Signal(this),this._user=e.user,this._trans=e.trans,this._globalAwareness=e.globalAwareness,this._serverSettings=e.serverSettings,this.sharedModelFactory=new T(this._onCreate),this._providers=new Map,this._docmanagerSettings=e.docmanagerSettings,this._driveFileChanged=e.fileChanged}get providers(){return this._providers}async get(e,t){if(t&&t.format&&t.type){const n=`${t.format}:${t.type}:${e}`,o=this._providers.get(n);if(o){const[n]=await Promise.all([super.get(e,{...t,content:!1}),o.ready]);return{...n,format:t.format}}}return super.get(e,t)}async save(e,t={}){var n;if(t.format&&t.type){const o=`${t.format}:${t.type}:${e}`,r=this._providers.get(o),s=++this._saveCounter;if(r){const o=null===(n=r.wsProvider)||void 0===n?void 0:n.ws;if(o){const e=new y.PromiseDelegate,t=t=>{const n=new Uint8Array(t.data),o=S.$C(n);try{if(2!==S.cw(o))return}catch(e){return}const r=S.t3(o);let i=null;try{i=JSON.parse(r)}catch(e){console.debug("The raw reply received was not a JSON reply")}i&&"save"===i.type&&i.responseTo===s&&("success"===i.status?e.resolve():"failed"===i.status?e.reject("Saving failed"):"skipped"===i.status?e.reject("Saving already in progress"):e.reject("Unrecognised save reply status"))};o.addEventListener("message",t);const n=k.xv();k.zd(n,2),k.Qj(n,"save"),k.zd(n,s);const r=k.Fo(n);o.send(r),await e.promise,o.removeEventListener("message",t)}const i={type:t.type,format:t.format,content:!1};return this.get(e,i)}console.warn(`Could not find a provider for ${e}, falling back to REST API save`)}return super.save(e,t)}get fileChanged(){return this._providerFileChanged}}class T{constructor(e){this._onCreate=e,this.collaborative=!b,this.documentFactories=new Map}registerDocumentFactory(e,t){if(this.documentFactories.has(e))throw new Error(`The content type ${e} already exists`);this.documentFactories.set(e,t)}createNew(e){if("string"==typeof e.format){if(this.collaborative&&e.collaborative&&this.documentFactories.has(e.contentType)){const t=this.documentFactories.get(e.contentType)(e);return this._onCreate(e,t),t}}else console.warn(`Only defined format are supported; got ${e.format}.`)}}var E=n(345),x=n.n(E),R=n(591),U=n.n(R),$=n(740),P=n.n($),D=n(128),j=n.n(D),N=n(855),L=n.n(N),F=n(51),I=n.n(F),M=n(656),A=n.n(M),O=n(68),W={};W.styleTagTransform=A(),W.setAttributes=L(),W.insert=j().bind(null,"head"),W.domAPI=P(),W.insertStyleElement=I(),U()(O.A,W),O.A&&O.A.locals&&O.A.locals;var J=n(694);const B=({apiURL:e,provider:t,contentType:n,format:o,documentTimelineUrl:r})=>{const[i,a]=(0,E.useState)({roomId:"",timestamps:[],forkRoom:"",sessionId:""}),[c,l]=(0,E.useState)(i.timestamps.length-1),[d,u]=(0,E.useState)(!1),[h,p]=(0,E.useState)(!1),v=(0,E.useRef)(!0),y=(0,E.useRef)(!0),_=(0,E.useRef)(null);function w(e){try{const t=new URL(e).pathname,n=t.lastIndexOf(r);if(-1===n)throw new Error(`API segment "${r}" not found in URL.`);return t.slice(n+r.length)}catch(e){return console.error("Invalid URL or unable to extract filename:",e),""}}return x().createElement("div",{className:"jp-sliderContainer"},x().createElement("div",{onClick:()=>{!async function(r){try{if(v.current){const i=await f(o,n,r);if(!i.ok)throw 404===i.status?new Error("Not found"):503===i.status?new Error("WebSocket closed"):new Error(`Failed to fetch data: ${i.statusText}`);const c=await i.text();let d={roomId:"",timestamps:[],forkRoom:"",sessionId:""};return c&&(s.Notification.warning("Document is now in read-only mode. Changes will not be saved.",{autoClose:2500}),d=JSON.parse(c),a(d),l(d.timestamps.length-1),t.connectToForkDoc(d.forkRoom,d.sessionId),_.current=await m(o,n,w(e))),u(!0),v.current=!1,d}}catch(e){console.error("Error fetching data:",e)}}(w(e))},className:"jp-mod-highlighted",title:"Document Timeline"},x().createElement(J.historyIcon.react,{marginRight:"4px"})),d&&x().createElement("div",{className:"jp-timestampDisplay"},x().createElement("input",{type:"range",min:0,max:i.timestamps.length-1,value:c,onChange:async e=>{const t=parseInt(e.target.value),n=Math.abs(t-c);try{const e=function(e){return e<c?"undo":"redo"}(t);if(l(t),y.current&&(p(!0),y.current=!1),!_.current)return void console.error("Session is not initialized");await g(`${_.current.format}:${_.current.type}:${_.current.fileId}`,e,n,i.forkRoom)}catch(e){console.error("Error fetching or applying updates:",e)}},className:"jp-Slider"}),x().createElement("div",null,x().createElement("strong",null,w(e).split("/").pop()," ")," "),h&&x().createElement("div",{className:"jp-restoreBtnContainer"},x().createElement("button",{onClick:async()=>{if(!_.current)return void console.error("Session is not initialized");const e=await g(`${_.current.format}:${_.current.type}:${_.current.fileId}`,"restore",0,i.forkRoom);200===e.code?(s.Notification.success(e.status,{autoClose:4e3}),t.reconnect(),u(!1),v.current=!0):s.Notification.error(e.status,{autoClose:4e3})},className:"jp-ToolbarButtonComponent jp-restoreBtn"},"Restore version"," ",(e=>{const t=new Date(1e3*e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}:${String(t.getSeconds()).padStart(2,"0")}`})(i.timestamps[c])))))};class V extends s.ReactWidget{constructor(e,t,n,o,r){super(),this.apiURL=e,this.provider=t,this.contentType=n,this.format=o,this.documentTimelineUrl=r,this.addClass("jp-timelineSliderWrapper")}render(){return E.createElement(B,{key:this.apiURL,apiURL:this.apiURL,provider:this.provider,contentType:this.contentType,format:this.format,documentTimelineUrl:this.documentTimelineUrl})}updateContent(e,t){this.apiURL=e,this.provider=t,this.contentType=this.provider.contentType,this.format=this.provider.format,this.update()}}const q=new y.Token("@jupyter/docprovider:IForkManagerToken"),K="https://schema.jupyter.org/jupyter_collaboration/fork/v1";class z{constructor(e){this._disposed=!1,this._forkAddedSignal=new _.Signal(this),this._forkDeletedSignal=new _.Signal(this);const{contentProvider:t,eventManager:n}=e;this._contentProvider=t,this._eventManager=n,this._eventManager.stream.connect(this._handleEvent,this)}get isDisposed(){return this._disposed}get forkAdded(){return this._forkAddedSignal}get forkDeleted(){return this._forkDeletedSignal}dispose(){var e;this._disposed||(null===(e=this._eventManager)||void 0===e||e.stream.disconnect(this._handleEvent),this._disposed=!0)}async createFork(e){const{rootId:t,title:n,description:o,synchronize:r}=e,s={method:"PUT",body:JSON.stringify({title:n,description:o,synchronize:r})},a=i.URLExt.join(p,t);return await v(a,s)}async getAllForks(e){const t=i.URLExt.join(p,e);return await v(t,{method:"GET"})}async deleteFork(e){const{forkId:t,merge:n}=e,o=i.URLExt.join(p,t),r=i.URLExt.objectToQueryString({merge:n});await v(`${o}${r}`,{method:"DELETE"})}getProvider(e){const{documentPath:t,format:n,type:o}=e,r=this._contentProvider;if(r){const e=t;return r.providers.get(`${n}:${o}:${e}`)}}_handleEvent(e,t){if(t.schema_id===K)switch(t.action){case"create":this._forkAddedSignal.emit(t);break;case"delete":this._forkDeletedSignal.emit(t)}}}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[]).push([[422],{734:(e,t,n)=>{n.d(t,{CW:()=>u,D7:()=>r,P1:()=>s,WD:()=>c,vZ:()=>a,wt:()=>o});const r=64,o=128,s=63,c=127,a=2147483647,u=4294967295},721:(e,t,n)=>{n.d(t,{$C:()=>l,t3:()=>b,cw:()=>p,bo:()=>i});var r=n(734);n(801);const o=Number.MAX_SAFE_INTEGER;Number.MIN_SAFE_INTEGER,r.vZ,r.CW,Number.isInteger,Number.isNaN,Number.parseInt;var s=n(554);const c=e=>new Error(e),a=c("Unexpected end of array"),u=c("Integer out of Range");class f{constructor(e){this.arr=e,this.pos=0}}const l=e=>new f(e),i=e=>((e,t)=>{const n=new Uint8Array(e.arr.buffer,e.pos+e.arr.byteOffset,t);return e.pos+=t,n})(e,p(e)),d=e=>e.arr[e.pos++],p=e=>{let t=0,n=1;const s=e.arr.length;for(;e.pos<s;){const s=e.arr[e.pos++];if(t+=(s&r.WD)*n,n*=128,s<r.wt)return t;if(t>o)throw u}throw a},b=s.tv?e=>s.tv.decode(i(e)):e=>{let t=p(e);if(0===t)return"";{let n=String.fromCodePoint(d(e));if(--t<100)for(;t--;)n+=String.fromCodePoint(d(e));else for(;t>0;){const r=t<1e4?t:1e4,o=e.arr.subarray(e.pos,e.pos+r);e.pos+=r,n+=String.fromCodePoint.apply(null,o),t-=r}return decodeURIComponent(escape(n))}}},214:(e,t,n)=>{n.d(t,{Bw:()=>u,Fo:()=>f,Gu:()=>h,Qj:()=>b,xv:()=>a,zd:()=>i});var r=n(801),o=n(734),s=n(554);class c{constructor(){this.cpos=0,this.cbuf=new Uint8Array(100),this.bufs=[]}}const a=()=>new c,u=e=>{let t=e.cpos;for(let n=0;n<e.bufs.length;n++)t+=e.bufs[n].length;return t},f=e=>{const t=new Uint8Array(u(e));let n=0;for(let r=0;r<e.bufs.length;r++){const o=e.bufs[r];t.set(o,n),n+=o.length}return t.set(new Uint8Array(e.cbuf.buffer,0,e.cpos),n),t},l=(e,t)=>{const n=e.cbuf.length;e.cpos===n&&(e.bufs.push(e.cbuf),e.cbuf=new Uint8Array(2*n),e.cpos=0),e.cbuf[e.cpos++]=t},i=(e,t)=>{for(;t>o.WD;)l(e,o.wt|o.WD&t),t=r.RI(t/128);l(e,o.WD&t)},d=new Uint8Array(3e4),p=d.length/3,b=s.db&&s.db.encodeInto?(e,t)=>{if(t.length<p){const n=s.db.encodeInto(t,d).written||0;i(e,n);for(let t=0;t<n;t++)l(e,d[t])}else h(e,s.Af(t))}:(e,t)=>{const n=unescape(encodeURIComponent(t)),r=n.length;i(e,r);for(let t=0;t<r;t++)l(e,n.codePointAt(t))},h=(e,t)=>{i(e,t.byteLength),((e,t)=>{const n=e.cbuf.length,o=e.cpos,s=r.jk(n-o,t.length),c=t.length-s;e.cbuf.set(t.subarray(0,s),o),e.cpos+=s,c>0&&(e.bufs.push(e.cbuf),e.cbuf=new Uint8Array(r.T9(2*n,c)),e.cbuf.set(t.subarray(s)),e.cpos=c)})(e,t)};new DataView(new ArrayBuffer(4))},801:(e,t,n)=>{n.d(t,{RI:()=>r,T9:()=>s,jk:()=>o,n7:()=>c,sj:()=>a});const r=Math.floor,o=(Math.ceil,Math.abs,Math.imul,Math.round,Math.log10,Math.log2,Math.log,Math.sqrt,(e,t)=>e<t?e:t),s=(e,t)=>e>t?e:t,c=(Number.isNaN,Math.pow),a=(Math.sign,e=>0!==e?e<0:1/e<0)},554:(e,t,n)=>{n.d(t,{Af:()=>u,QV:()=>r,db:()=>a,jN:()=>c,tv:()=>f});const r=String.fromCharCode,o=(String.fromCodePoint,r(65535),/^\s*/g),s=/([A-Z])/g,c=(e,t)=>(e=>e.replace(o,""))(e.replace(s,(e=>`${t}${(e=>e.toLowerCase())(e)}`))),a="undefined"!=typeof TextEncoder?new TextEncoder:null,u=a?e=>a.encode(e):e=>{const t=unescape(encodeURIComponent(e)),n=t.length,r=new Uint8Array(n);for(let e=0;e<n;e++)r[e]=t.codePointAt(e);return r};let f="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});f&&1===f.decode(new Uint8Array).length&&(f=null)}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[]).push([[703],{703:(e,t,o)=>{o.r(t),o.d(t,{default:()=>C});var r=o(986),n=o(256),i=o(748),a=o(544),s=o(852),l=o(762),d=o(560),c=o(424),u=o(0),v=o(247),g=o(344),p=o(297);const h="api/collaboration/timeline",y="The file %1 has been opened with two different views. This is not supported. Please close this view; otherwise, some of your edits may not be saved properly.",b={id:"@jupyter/docprovider-extension:content-provider",description:"The RTC content provider",provides:v.ICollaborativeContentProvider,requires:[c.ITranslator],optional:[v.IGlobalAwareness,d.ISettingRegistry],activate:async(e,t,o,r)=>{const n=t.load("jupyter_collaboration"),i=e.serviceManager.contents.defaultDrive;if(!i)throw Error("Cannot initialize content provider: default drive property not accessible on contents manager instance.");const a=i.contentProviderRegistry;if(!a)throw Error("Cannot initialize content provider: no content provider registry.");const s=r?await r.load("@jupyterlab/docmanager-extension:plugin"):null,l=new g.RtcContentProvider({apiEndpoint:"/api/contents",serverSettings:i.serverSettings,user:e.serviceManager.user,trans:n,globalAwareness:o,docmanagerSettings:s,fileChanged:i.fileChanged});return a.register("rtc",l),l}},m={id:"@jupyter/docprovider-extension:yfile",description:"Plugin to register the shared model factory for the content type 'file'",autoStart:!0,requires:[v.ICollaborativeContentProvider,a.IEditorWidgetFactory],activate:(e,t,o)=>{t.sharedModelFactory.registerDocumentFactory("file",(()=>new u.YFile)),o.contentProviderId="rtc"}},f={id:"@jupyter/docprovider-extension:ynotebook",description:"Plugin to register the shared model factory for the content type 'notebook'",autoStart:!0,requires:[v.ICollaborativeContentProvider,l.INotebookWidgetFactory],optional:[d.ISettingRegistry],activate:(e,t,o,r)=>{let n=!0;r&&r.load("@jupyterlab/notebook-extension:tracker").then((e=>{const t=e=>{var t;const o=null==e?void 0:e.get("experimentalEnableDocumentWideUndoRedo").composite;n=null===(t=!o)||void 0===t||t};t(e),e.changed.connect((e=>t(e)))})),t.sharedModelFactory.registerDocumentFactory("notebook",(()=>new u.YNotebook({disableDocumentWideUndoRedo:n}))),o.contentProviderId="rtc"}},w={id:"@jupyter/docprovider-extension:statusBarTimeline",description:"Plugin to add a timeline slider to the status bar",autoStart:!0,requires:[i.IStatusBar,v.ICollaborativeContentProvider],activate:async(e,t,o)=>{try{let r=null,i=null;const a=async(t,r)=>{if(!r)return;i&&(i.dispose(),i=null);const[a,s]=r.split(":"),l=o.providers.get(`${a}:${s}:${t}`);if(!l)return;const d=l,c=p.URLExt.join(e.serviceManager.serverSettings.baseUrl,h,t);i=new g.TimelineWidget(c,d,d.contentType,d.format,h);const u=document.getElementById("jp-slider-status-bar");u&&!i.isAttached&&n.Widget.attach(i,u)};e.shell.currentChanged&&e.shell.currentChanged.connect((async(e,t)=>{const o=t.newValue;i&&(i.dispose(),i=null),o&&"context"in o&&(await o.context.ready,await a(o.context.path,o.context.model.sharedModel.getState("document_id")))})),t&&(r||(r=new n.Widget,r.addClass("jp-StatusBar-GroupItem"),r.addClass("jp-mod-highlighted"),r.id="jp-slider-status-bar",t.registerStatusItem("jp-slider-status-bar",{item:r,align:"left",rank:4,isActive:()=>{var t,o;const r=e.shell.currentWidget;return(null===(o=null===(t=null==r?void 0:r.context)||void 0===t?void 0:t.model)||void 0===o?void 0:o.collaborative)||!1}})))}catch(e){console.error("Failed to activate statusBarTimeline plugin:",e)}}},C=[b,m,f,{id:"@jupyter/docprovider-extension:logger",description:"A logging plugin for debugging purposes.",autoStart:!0,optional:[s.ILoggerRegistry,a.IEditorTracker,l.INotebookTracker,c.ITranslator],activate:(e,t,o,n,i)=>{const a=(null!=i?i:c.nullTranslator).load("jupyter_collaboration"),s="https://schema.jupyter.org/jupyter_collaboration/session/v1";if(!t)return void e.serviceManager.events.stream.connect(((e,t)=>{var o,n;t.schema_id===s&&(console.debug(`[${t.room}(${t.path})] ${null!==(o=t.action)&&void 0!==o?o:""}: ${null!==(n=t.msg)&&void 0!==n?n:""}`),"WARNING"===t.level&&(0,r.showDialog)({title:a.__("Warning"),body:a.__(y,t.path),buttons:[r.Dialog.okButton()]}))}));const l=new Map,d=(e,o)=>{const r=t.getLogger(o.context.path);l.set(o.context.localPath,r),o.disposed.connect((e=>{l.delete(e.context.localPath)}))};o&&o.widgetAdded.connect(d),n&&n.widgetAdded.connect(d),(async()=>{var t,o;const{events:n}=e.serviceManager;for await(const e of n.stream)if(e.schema_id===s){const n=l.get(e.path);null==n||n.log({type:"text",level:e.level.toLowerCase(),data:`[${e.room}] ${null!==(t=e.action)&&void 0!==t?t:""}: ${null!==(o=e.msg)&&void 0!==o?o:""}`}),"WARNING"===e.level&&(0,r.showDialog)({title:a.__("Warning"),body:a.__(y,e.path),buttons:[r.Dialog.warnButton({label:a.__("Ok")})]})}})()}},{id:"@jupyter/docprovider-extension:notebook-cell-executor",description:"Add notebook cell executor that uses REST API instead of kernel protocol over WebSocket.",autoStart:!0,provides:l.INotebookCellExecutor,activate:e=>"true"===p.PageConfig.getOption("serverSideExecution")?new g.NotebookCellServerExecutor({serverSettings:e.serviceManager.serverSettings}):Object.freeze({runCell:l.runCell})},w,{id:"@jupyter/docprovider-extension:forkManager",autoStart:!0,requires:[v.ICollaborativeContentProvider],provides:g.IForkManagerToken,activate:(e,t)=>{const o=e.serviceManager.events;return new g.ForkManager({contentProvider:t,eventManager:o})}}]}}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[]).push([[994],{907:e=>{var t,s,n=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function c(e){if(t===setTimeout)return setTimeout(e,0);if((t===o||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(s){try{return t.call(null,e,0)}catch(s){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:o}catch(e){t=o}try{s="function"==typeof clearTimeout?clearTimeout:r}catch(e){s=r}}();var a,i=[],l=!1,h=-1;function d(){l&&a&&(l=!1,a.length?i=a.concat(i):h=-1,i.length&&u())}function u(){if(!l){var e=c(d);l=!0;for(var t=i.length;t;){for(a=i,i=[];++h<t;)a&&a[h].run();h=-1,t=i.length}a=null,l=!1,function(e){if(s===clearTimeout)return clearTimeout(e);if((s===r||!s)&&clearTimeout)return s=clearTimeout,clearTimeout(e);try{return s(e)}catch(t){try{return s.call(null,e)}catch(t){return s.call(this,e)}}}(e)}}function f(e,t){this.fun=e,this.array=t}function g(){}n.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var s=1;s<arguments.length;s++)t[s-1]=arguments[s];i.push(new f(e,t)),1!==i.length||l||c(u)},f.prototype.run=function(){this.fun.apply(null,this.array)},n.title="browser",n.browser=!0,n.env={},n.argv=[],n.version="",n.versions={},n.on=g,n.addListener=g,n.once=g,n.off=g,n.removeListener=g,n.removeAllListeners=g,n.emit=g,n.prependListener=g,n.prependOnceListener=g,n.listeners=function(e){return[]},n.binding=function(e){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(e){throw new Error("process.chdir is not supported")},n.umask=function(){return 0}},994:(e,t,s)=>{"use strict";s.r(t),s.d(t,{WebsocketProvider:()=>Z,messageAuth:()=>V,messageAwareness:()=>Q,messageQueryAwareness:()=>W,messageSync:()=>P});var n=s(206);const o=()=>new Map,r=(e,t,s)=>{let n=e.get(t);return void 0===n&&e.set(t,n=s()),n},c=()=>new Set;var a=s(554);let i=new class{constructor(){this.map=new Map}setItem(e,t){this.map.set(e,t)}getItem(e){return this.map.get(e)}},l=!0;try{"undefined"!=typeof localStorage&&localStorage&&(i=localStorage,l=!1)}catch(e){}const h=i,d=Array.from,u=(Array.isArray,Object.assign,Object.keys),f=e=>u(e).length,g=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),p=(Object.freeze,(e,t)=>{if(null==e||null==t)return((e,t)=>e===t)(e,t);if(e.constructor!==t.constructor)return!1;if(e===t)return!0;switch(e.constructor){case ArrayBuffer:e=new Uint8Array(e),t=new Uint8Array(t);case Uint8Array:if(e.byteLength!==t.byteLength)return!1;for(let s=0;s<e.length;s++)if(e[s]!==t[s])return!1;break;case Set:if(e.size!==t.size)return!1;for(const s of e)if(!t.has(s))return!1;break;case Map:if(e.size!==t.size)return!1;for(const s of e.keys())if(!t.has(s)||!p(e.get(s),t.get(s)))return!1;break;case Object:if(f(e)!==f(t))return!1;for(const s in e)if(!g(e,s)||!p(e[s],t[s]))return!1;break;case Array:if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++)if(!p(e[s],t[s]))return!1;break;default:return!1}return!0});var w=s(907);const m=void 0!==w&&w.release&&/node|io\.js/.test(w.release.name)&&"[object process]"===Object.prototype.toString.call(void 0!==w?w:0),v="undefined"!=typeof window&&"undefined"!=typeof document&&!m;let b;"undefined"!=typeof navigator&&/Mac/.test(navigator.platform);const y=[],_=e=>(()=>{if(void 0===b)if(m){b=o();const e=w.argv;let t=null;for(let s=0;s<e.length;s++){const n=e[s];"-"===n[0]?(null!==t&&b.set(t,""),t=n):null!==t?(b.set(t,n),t=null):y.push(n)}null!==t&&b.set(t,"")}else"object"==typeof location?(b=o(),(location.search||"?").slice(1).split("&").forEach((e=>{if(0!==e.length){const[t,s]=e.split("=");b.set(`--${a.jN(t,"-")}`,s),b.set(`-${a.jN(t,"-")}`,s)}}))):b=o();return b})().has(e),k=e=>{return void 0===(t=m?w.env[e.toUpperCase().replaceAll("-","_")]:h.getItem(e))?null:t;var t},S=e=>_("--"+e)||null!==k(e);var I;S("production"),m&&(I=w.env.FORCE_COLOR,["true","1","2"].includes(I))||!_("--no-colors")&&!S("no-color")&&(!m||w.stdout.isTTY)&&(!m||_("--color")||null!==k("COLORTERM")||(k("TERM")||"").includes("color"));const C=v?e=>{let t="";for(let s=0;s<e.byteLength;s++)t+=a.QV(e[s]);return btoa(t)}:e=>Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("base64"),L=v?e=>{const t=atob(e),s=(n=t.length,new Uint8Array(n));var n;for(let e=0;e<t.length;e++)s[e]=t.charCodeAt(e);return s}:e=>{const t=Buffer.from(e,"base64");return s=t.buffer,n=t.byteOffset,o=t.byteLength,new Uint8Array(s,n,o);var s,n,o},U=new Map,x="undefined"==typeof BroadcastChannel?class{constructor(e){var t;this.room=e,this.onmessage=null,this._onChange=t=>t.key===e&&null!==this.onmessage&&this.onmessage({data:L(t.newValue||"")}),t=this._onChange,l||addEventListener("storage",t)}postMessage(e){h.setItem(this.room,C(new Uint8Array(e)))}close(){var e;e=this._onChange,l||removeEventListener("storage",e)}}:BroadcastChannel,T=e=>r(U,e,(()=>{const t=c(),s=new x(e);return s.onmessage=e=>t.forEach((t=>t(e.data,"broadcastchannel"))),{bc:s,subs:t}})),z=(e,t,s=null)=>{const n=T(e);n.bc.postMessage(t),n.subs.forEach((e=>e(t,s)))},A=Date.now;var O=s(214),j=s(721);const B=(e,t)=>{O.zd(e,0);const s=n.encodeStateVector(t);O.Gu(e,s)},E=(e,t,s)=>{O.zd(e,1),O.Gu(e,n.encodeStateAsUpdate(t,s))},M=(e,t,s)=>{try{n.applyUpdate(t,j.bo(e),s)}catch(e){console.error("Caught error while handling a Yjs update",e)}},R=M;var F=s(801);class D{constructor(){this._observers=o()}on(e,t){r(this._observers,e,c).add(t)}once(e,t){const s=(...n)=>{this.off(e,s),t(...n)};this.on(e,s)}off(e,t){const s=this._observers.get(e);void 0!==s&&(s.delete(t),0===s.size&&this._observers.delete(e))}emit(e,t){return d((this._observers.get(e)||o()).values()).forEach((e=>e(...t)))}destroy(){this._observers=o()}}class H extends D{constructor(e){super(),this.doc=e,this.clientID=e.clientID,this.states=new Map,this.meta=new Map,this._checkInterval=setInterval((()=>{const e=A();null!==this.getLocalState()&&15e3<=e-this.meta.get(this.clientID).lastUpdated&&this.setLocalState(this.getLocalState());const t=[];this.meta.forEach(((s,n)=>{n!==this.clientID&&3e4<=e-s.lastUpdated&&this.states.has(n)&&t.push(n)})),t.length>0&&G(this,t,"timeout")}),F.RI(3e3)),e.on("destroy",(()=>{this.destroy()})),this.setLocalState({})}destroy(){this.emit("destroy",[this]),this.setLocalState(null),super.destroy(),clearInterval(this._checkInterval)}getLocalState(){return this.states.get(this.clientID)||null}setLocalState(e){const t=this.clientID,s=this.meta.get(t),n=void 0===s?0:s.clock+1,o=this.states.get(t);null===e?this.states.delete(t):this.states.set(t,e),this.meta.set(t,{clock:n,lastUpdated:A()});const r=[],c=[],a=[],i=[];null===e?i.push(t):null==o?null!=e&&r.push(t):(c.push(t),p(o,e)||a.push(t)),(r.length>0||a.length>0||i.length>0)&&this.emit("change",[{added:r,updated:a,removed:i},"local"]),this.emit("update",[{added:r,updated:c,removed:i},"local"])}setLocalStateField(e,t){const s=this.getLocalState();null!==s&&this.setLocalState({...s,[e]:t})}getStates(){return this.states}}const G=(e,t,s)=>{const n=[];for(let s=0;s<t.length;s++){const o=t[s];if(e.states.has(o)){if(e.states.delete(o),o===e.clientID){const t=e.meta.get(o);e.meta.set(o,{clock:t.clock+1,lastUpdated:A()})}n.push(o)}}n.length>0&&(e.emit("change",[{added:[],updated:[],removed:n},s]),e.emit("update",[{added:[],updated:[],removed:n},s]))},$=(e,t,s=e.states)=>{const n=t.length,o=O.xv();O.zd(o,n);for(let r=0;r<n;r++){const n=t[r],c=s.get(n)||null,a=e.meta.get(n).clock;O.zd(o,n),O.zd(o,a),O.Qj(o,JSON.stringify(c))}return O.Fo(o)};var N=s(907);const P=0,W=3,Q=1,V=2,J=[];J[P]=(e,t,s,n,o)=>{O.zd(e,P);const r=((e,t,s,n)=>{const o=j.cw(e);switch(o){case 0:((e,t,s)=>{E(t,s,j.bo(e))})(e,t,s);break;case 1:M(e,s,n);break;case 2:R(e,s,n);break;default:throw new Error("Unknown message type")}return o})(t,e,s.doc,s);n&&1===r&&!s.synced&&(s.synced=!0)},J[W]=(e,t,s,n,o)=>{O.zd(e,Q),O.Gu(e,$(s.awareness,Array.from(s.awareness.getStates().keys())))},J[Q]=(e,t,s,n,o)=>{((e,t,s)=>{const n=j.$C(t),o=A(),r=[],c=[],a=[],i=[],l=j.cw(n);for(let t=0;t<l;t++){const t=j.cw(n);let s=j.cw(n);const l=JSON.parse(j.t3(n)),h=e.meta.get(t),d=e.states.get(t),u=void 0===h?0:h.clock;(u<s||u===s&&null===l&&e.states.has(t))&&(null===l?t===e.clientID&&null!=e.getLocalState()?s++:e.states.delete(t):e.states.set(t,l),e.meta.set(t,{clock:s,lastUpdated:o}),void 0===h&&null!==l?r.push(t):void 0!==h&&null===l?i.push(t):null!==l&&(p(l,d)||a.push(t),c.push(t)))}(r.length>0||a.length>0||i.length>0)&&e.emit("change",[{added:r,updated:a,removed:i},s]),(r.length>0||c.length>0||i.length>0)&&e.emit("update",[{added:r,updated:c,removed:i},s])})(s.awareness,j.bo(t),s)},J[V]=(e,t,s,n,o)=>{((e,t,s)=>{0===j.cw(e)&&s(0,j.t3(e))})(t,s.doc,((e,t)=>Y(s,t)))};const Y=(e,t)=>console.warn(`Permission denied to access ${e.url}.\n${t}`),q=(e,t,s)=>{const n=j.$C(t),o=O.xv(),r=j.cw(n),c=e.messageHandlers[r];return c?c(o,n,e,s,r):console.error("Unable to compute message"),o},K=e=>{if(e.shouldConnect&&null===e.ws){const t=new e._WS(e.url);t.binaryType="arraybuffer",e.ws=t,e.wsconnecting=!0,e.wsconnected=!1,e.synced=!1,t.onmessage=s=>{e.wsLastMessageReceived=A();const n=q(e,new Uint8Array(s.data),!0);O.Bw(n)>1&&t.send(O.Fo(n))},t.onerror=t=>{e.emit("connection-error",[t,e])},t.onclose=t=>{e.emit("connection-close",[t,e]),e.ws=null,e.wsconnecting=!1,e.wsconnected?(e.wsconnected=!1,e.synced=!1,G(e.awareness,Array.from(e.awareness.getStates().keys()).filter((t=>t!==e.doc.clientID)),e),e.emit("status",[{status:"disconnected"}])):e.wsUnsuccessfulReconnects++,setTimeout(K,F.jk(100*F.n7(2,e.wsUnsuccessfulReconnects),e.maxBackoffTime),e)},t.onopen=()=>{e.wsLastMessageReceived=A(),e.wsconnecting=!1,e.wsconnected=!0,e.wsUnsuccessfulReconnects=0,e.emit("status",[{status:"connected"}]);const s=O.xv();if(O.zd(s,P),B(s,e.doc),t.send(O.Fo(s)),null!==e.awareness.getLocalState()){const s=O.xv();O.zd(s,Q),O.Gu(s,$(e.awareness,[e.doc.clientID])),t.send(O.Fo(s))}},e.emit("status",[{status:"connecting"}])}},X=(e,t)=>{const s=e.ws;e.wsconnected&&s&&s.readyState===s.OPEN&&s.send(t),e.bcconnected&&z(e.bcChannel,t,e)};class Z extends D{constructor(e,t,s,{connect:n=!0,awareness:o=new H(s),params:r={},WebSocketPolyfill:c=WebSocket,resyncInterval:a=-1,maxBackoffTime:i=2500,disableBc:l=!1}={}){for(super();"/"===e[e.length-1];)e=e.slice(0,e.length-1);const h=(e=>((e,t)=>{const s=[];for(const n in e)s.push(t(e[n],n));return s})(e,((e,t)=>`${encodeURIComponent(t)}=${encodeURIComponent(e)}`)).join("&"))(r);this.maxBackoffTime=i,this.bcChannel=e+"/"+t,this.url=e+"/"+t+(0===h.length?"":"?"+h),this.roomname=t,this.doc=s,this._WS=c,this.awareness=o,this.wsconnected=!1,this.wsconnecting=!1,this.bcconnected=!1,this.disableBc=l,this.wsUnsuccessfulReconnects=0,this.messageHandlers=J.slice(),this._synced=!1,this.ws=null,this.wsLastMessageReceived=0,this.shouldConnect=n,this._resyncInterval=0,a>0&&(this._resyncInterval=setInterval((()=>{if(this.ws&&this.ws.readyState===WebSocket.OPEN){const e=O.xv();O.zd(e,P),B(e,s),this.ws.send(O.Fo(e))}}),a)),this._bcSubscriber=(e,t)=>{if(t!==this){const t=q(this,new Uint8Array(e),!1);O.Bw(t)>1&&z(this.bcChannel,O.Fo(t),this)}},this._updateHandler=(e,t)=>{if(t!==this){const t=O.xv();O.zd(t,P),((e,t)=>{O.zd(e,2),O.Gu(e,t)})(t,e),X(this,O.Fo(t))}},this.doc.on("update",this._updateHandler),this._awarenessUpdateHandler=({added:e,updated:t,removed:s},n)=>{const r=e.concat(t).concat(s),c=O.xv();O.zd(c,Q),O.Gu(c,$(o,r)),X(this,O.Fo(c))},this._exitHandler=()=>{G(this.awareness,[s.clientID],"app closed")},m&&void 0!==N&&N.on("exit",this._exitHandler),o.on("update",this._awarenessUpdateHandler),this._checkInterval=setInterval((()=>{this.wsconnected&&3e4<A()-this.wsLastMessageReceived&&this.ws.close()}),3e3),n&&this.connect()}get synced(){return this._synced}set synced(e){this._synced!==e&&(this._synced=e,this.emit("synced",[e]),this.emit("sync",[e]))}destroy(){0!==this._resyncInterval&&clearInterval(this._resyncInterval),clearInterval(this._checkInterval),this.disconnect(),m&&void 0!==N&&N.off("exit",this._exitHandler),this.awareness.off("update",this._awarenessUpdateHandler),this.doc.off("update",this._updateHandler),super.destroy()}connectBc(){if(this.disableBc)return;var e,t;this.bcconnected||(e=this.bcChannel,t=this._bcSubscriber,T(e).subs.add(t),this.bcconnected=!0);const s=O.xv();O.zd(s,P),B(s,this.doc),z(this.bcChannel,O.Fo(s),this);const n=O.xv();O.zd(n,P),E(n,this.doc),z(this.bcChannel,O.Fo(n),this);const o=O.xv();O.zd(o,W),z(this.bcChannel,O.Fo(o),this);const r=O.xv();O.zd(r,Q),O.Gu(r,$(this.awareness,[this.doc.clientID])),z(this.bcChannel,O.Fo(r),this)}disconnectBc(){const e=O.xv();O.zd(e,Q),O.Gu(e,$(this.awareness,[this.doc.clientID],new Map)),X(this,O.Fo(e)),this.bcconnected&&(((e,t)=>{const s=T(e);s.subs.delete(t)&&0===s.subs.size&&(s.bc.close(),U.delete(e))})(this.bcChannel,this._bcSubscriber),this.bcconnected=!1)}disconnect(){this.shouldConnect=!1,this.disconnectBc(),null!==this.ws&&this.ws.close()}connect(){this.shouldConnect=!0,this.wsconnected||null!==this.ws||(K(this),this.connectBc())}}}}]);
@@ -0,0 +1 @@
1
+ var _JUPYTERLAB;(()=>{"use strict";var e,r,t,o,a,n,i,l,u,d,s,f,c,p,v,h,b,y,m,g,j,w,P,S={496:(e,r,t)=>{var o={"./index":()=>Promise.all([t.e(927),t.e(892),t.e(703)]).then((()=>()=>t(703))),"./extension":()=>Promise.all([t.e(927),t.e(892),t.e(703)]).then((()=>()=>t(703))),"./style":()=>t.e(944).then((()=>()=>t(944)))},a=(e,r)=>(t.R=r,r=t.o(o,e)?o[e]():Promise.resolve().then((()=>{throw new Error('Module "'+e+'" does not exist in container.')})),t.R=void 0,r),n=(e,r)=>{if(t.S){var o="default",a=t.S[o];if(a&&a!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[o]=e,t.I(o,r)}};t.d(r,{get:()=>a,init:()=>n})}},k={};function x(e){var r=k[e];if(void 0!==r)return r.exports;var t=k[e]={id:e,exports:{}};return S[e](t,t.exports,x),t.exports}x.m=S,x.c=k,x.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return x.d(r,{a:r}),r},x.d=(e,r)=>{for(var t in r)x.o(r,t)&&!x.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},x.f={},x.e=e=>Promise.all(Object.keys(x.f).reduce(((r,t)=>(x.f[t](e,r),r)),[])),x.u=e=>e+"."+{240:"1810b1e246bd604b51b2",422:"3ab44960b241aac9f303",444:"13de0fd44849e3f7d780",703:"a9b23bb2dcc109b62003",944:"eaec77f5cee3f07c3b7f",994:"bc087314bdabeecb0923"}[e]+".js?v="+{240:"1810b1e246bd604b51b2",422:"3ab44960b241aac9f303",444:"13de0fd44849e3f7d780",703:"a9b23bb2dcc109b62003",944:"eaec77f5cee3f07c3b7f",994:"bc087314bdabeecb0923"}[e],x.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),x.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="@jupyter/docprovider-extension:",x.l=(t,o,a,n)=>{if(e[t])e[t].push(o);else{var i,l;if(void 0!==a)for(var u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var s=u[d];if(s.getAttribute("src")==t||s.getAttribute("data-webpack")==r+a){i=s;break}}i||(l=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,x.nc&&i.setAttribute("nonce",x.nc),i.setAttribute("data-webpack",r+a),i.src=t),e[t]=[o];var f=(r,o)=>{i.onerror=i.onload=null,clearTimeout(c);var a=e[t];if(delete e[t],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach((e=>e(o))),r)return r(o)},c=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),l&&document.head.appendChild(i)}},x.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{x.S={};var e={},r={};x.I=(t,o)=>{o||(o=[]);var a=r[t];if(a||(a=r[t]={}),!(o.indexOf(a)>=0)){if(o.push(a),e[t])return e[t];x.o(x.S,t)||(x.S[t]={});var n=x.S[t],i="@jupyter/docprovider-extension",l=(e,r,t,o)=>{var a=n[e]=n[e]||{},l=a[r];(!l||!l.loaded&&(!o!=!l.eager?o:i>l.from))&&(a[r]={get:t,from:i,eager:!!o})},u=[];return"default"===t&&(l("@jupyter/collaborative-drive","4.1.2",(()=>Promise.all([x.e(262),x.e(444)]).then((()=>()=>x(444))))),l("@jupyter/docprovider-extension","4.1.2",(()=>Promise.all([x.e(927),x.e(892),x.e(703)]).then((()=>()=>x(703))))),l("@jupyter/docprovider","4.1.2",(()=>Promise.all([x.e(422),x.e(927),x.e(262),x.e(240)]).then((()=>()=>x(240))))),l("y-websocket","1.5.4",(()=>Promise.all([x.e(422),x.e(994),x.e(206)]).then((()=>()=>x(994)))))),e[t]=u.length?Promise.all(u).then((()=>e[t]=1)):1}}})(),(()=>{var e;x.g.importScripts&&(e=x.g.location+"");var r=x.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var o=t.length-1;o>-1&&(!e||!/^http(s?):/.test(e));)e=t[o--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),x.p=e})(),t=e=>{var r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),o=t[1]?r(t[1]):[];return t[2]&&(o.length++,o.push.apply(o,r(t[2]))),t[3]&&(o.push([]),o.push.apply(o,r(t[3]))),o},o=(e,r)=>{e=t(e),r=t(r);for(var o=0;;){if(o>=e.length)return o<r.length&&"u"!=(typeof r[o])[0];var a=e[o],n=(typeof a)[0];if(o>=r.length)return"u"==n;var i=r[o],l=(typeof i)[0];if(n!=l)return"o"==n&&"n"==l||"s"==l||"u"==n;if("o"!=n&&"u"!=n&&a!=i)return a<i;o++}},a=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var o=1,n=1;n<e.length;n++)o--,t+="u"==(typeof(l=e[n]))[0]?"-":(o>0?".":"")+(o=2,l);return t}var i=[];for(n=1;n<e.length;n++){var l=e[n];i.push(0===l?"not("+u()+")":1===l?"("+u()+" || "+u()+")":2===l?i.pop()+" "+i.pop():a(l))}return u();function u(){return i.pop().replace(/^\((.+)\)$/,"$1")}},n=(e,r)=>{if(0 in e){r=t(r);var o=e[0],a=o<0;a&&(o=-o-1);for(var i=0,l=1,u=!0;;l++,i++){var d,s,f=l<e.length?(typeof e[l])[0]:"";if(i>=r.length||"o"==(s=(typeof(d=r[i]))[0]))return!u||("u"==f?l>o&&!a:""==f!=a);if("u"==s){if(!u||"u"!=f)return!1}else if(u)if(f==s)if(l<=o){if(d!=e[l])return!1}else{if(a?d>e[l]:d<e[l])return!1;d!=e[l]&&(u=!1)}else if("s"!=f&&"n"!=f){if(a||l<=o)return!1;u=!1,l--}else{if(l<=o||s<f!=a)return!1;u=!1}else"s"!=f&&"n"!=f&&(u=!1,l--)}}var c=[],p=c.pop.bind(c);for(i=1;i<e.length;i++){var v=e[i];c.push(1==v?p()|p():2==v?p()&p():v?n(v,r):!p())}return!!p()},i=(e,r)=>e&&x.o(e,r),l=e=>(e.loaded=1,e.get()),u=e=>Object.keys(e).reduce(((r,t)=>(e[t].eager&&(r[t]=e[t]),r)),{}),d=(e,r,t,a)=>{var i=a?u(e[r]):e[r];return(r=Object.keys(i).reduce(((e,r)=>!n(t,r)||e&&!o(e,r)?e:r),0))&&i[r]},s=(e,r,t)=>{var a=t?u(e[r]):e[r];return Object.keys(a).reduce(((e,r)=>!e||!a[e].loaded&&o(e,r)?r:e),0)},f=(e,r,t,o)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+a(o)+")",c=(e,r,t,o,n)=>{var i=e[t];return"No satisfying version ("+a(o)+")"+(n?" for eager consumption":"")+" of shared module "+t+" found in shared scope "+r+".\nAvailable versions: "+Object.keys(i).map((e=>e+" from "+i[e].from)).join(", ")},p=e=>{throw new Error(e)},v=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},b=(e,r,t)=>t?t():((e,r)=>p("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),y=(h=e=>function(r,t,o,a,n){var i=x.I(r);return i&&i.then&&!o?i.then(e.bind(e,r,x.S[r],t,!1,a,n)):e(r,x.S[r],t,o,a,n)})(((e,r,t,o,a,n)=>{if(!i(r,t))return b(e,t,n);var u=d(r,t,a,o);return u?l(u):n?n():void p(c(r,e,t,a,o))})),m=h(((e,r,t,o,a,u)=>{if(!i(r,t))return b(e,t,u);var d=s(r,t,o);return n(a,d)||v(f(r,t,d,a)),l(r[t][d])})),g={},j={297:()=>m("default","@jupyterlab/coreutils",!1,[1,6,4,10]),424:()=>m("default","@jupyterlab/translation",!1,[1,4,4,10]),986:()=>m("default","@jupyterlab/apputils",!1,[1,4,5,10]),0:()=>m("default","@jupyter/ydoc",!1,[1,3,0,0,,"a3"]),247:()=>m("default","@jupyter/collaborative-drive",!1,[1,4,1,2],(()=>Promise.all([x.e(262),x.e(444)]).then((()=>()=>x(444))))),256:()=>m("default","@lumino/widgets",!1,[1,2,3,1,,"alpha",0]),344:()=>m("default","@jupyter/docprovider",!1,[1,4,1,2],(()=>Promise.all([x.e(422),x.e(262),x.e(240)]).then((()=>()=>x(240))))),544:()=>m("default","@jupyterlab/fileeditor",!1,[1,4,4,10]),560:()=>m("default","@jupyterlab/settingregistry",!1,[1,4,4,10]),748:()=>m("default","@jupyterlab/statusbar",!1,[1,4,4,10]),762:()=>m("default","@jupyterlab/notebook",!1,[1,4,4,10]),852:()=>m("default","@jupyterlab/logconsole",!1,[1,4,4,10]),262:()=>m("default","@lumino/coreutils",!1,[1,2,0,0]),179:()=>y("default","y-websocket",!1,[1,1,3,15],(()=>Promise.all([x.e(994),x.e(206)]).then((()=>()=>x(994))))),345:()=>m("default","react",!1,[1,18,2,0]),602:()=>m("default","@lumino/signaling",!1,[1,2,0,0]),694:()=>m("default","@jupyterlab/ui-components",!1,[1,4,4,10]),860:()=>m("default","@jupyterlab/services",!1,[1,7,4,10]),206:()=>m("default","yjs",!1,[1,13,5,40])},w={206:[206],240:[179,345,602,694,860],262:[262],892:[0,247,256,344,544,560,748,762,852],927:[297,424,986]},P={},x.f.consumes=(e,r)=>{x.o(w,e)&&w[e].forEach((e=>{if(x.o(g,e))return r.push(g[e]);if(!P[e]){var t=r=>{g[e]=0,x.m[e]=t=>{delete x.c[e],t.exports=r()}};P[e]=!0;var o=r=>{delete g[e],x.m[e]=t=>{throw delete x.c[e],r}};try{var a=j[e]();a.then?r.push(g[e]=a.then(t).catch(o)):t(a)}catch(e){o(e)}}}))},(()=>{var e={552:0};x.f.j=(r,t)=>{var o=x.o(e,r)?e[r]:void 0;if(0!==o)if(o)t.push(o[2]);else if(/^(206|262|892|927)$/.test(r))e[r]=0;else{var a=new Promise(((t,a)=>o=e[r]=[t,a]));t.push(o[2]=a);var n=x.p+x.u(r),i=new Error;x.l(n,(t=>{if(x.o(e,r)&&(0!==(o=e[r])&&(e[r]=void 0),o)){var a=t&&("load"===t.type?"missing":t.type),n=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+a+": "+n+")",i.name="ChunkLoadError",i.type=a,i.request=n,o[1](i)}}),"chunk-"+r,r)}};var r=(r,t)=>{var o,a,[n,i,l]=t,u=0;if(n.some((r=>0!==e[r]))){for(o in i)x.o(i,o)&&(x.m[o]=i[o]);l&&l(x)}for(r&&r(t);u<n.length;u++)a=n[u],x.o(e,a)&&e[a]&&e[a][0](),e[a]=0},t=self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),x.nc=void 0;var E=x(496);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["@jupyter/docprovider-extension"]=E})();
@@ -2,19 +2,19 @@
2
2
  "packages": [
3
3
  {
4
4
  "name": "@jupyter/collaboration",
5
- "versionInfo": "4.1.0-rc.0",
5
+ "versionInfo": "4.1.2",
6
6
  "licenseId": "BSD-3-Clause",
7
7
  "extractedText": ""
8
8
  },
9
9
  {
10
10
  "name": "@jupyter/collaborative-drive",
11
- "versionInfo": "4.1.0-rc.0",
11
+ "versionInfo": "4.1.2",
12
12
  "licenseId": "BSD-3-Clause",
13
13
  "extractedText": ""
14
14
  },
15
15
  {
16
16
  "name": "@jupyter/docprovider",
17
- "versionInfo": "4.1.0-rc.0",
17
+ "versionInfo": "4.1.2",
18
18
  "licenseId": "BSD-3-Clause",
19
19
  "extractedText": ""
20
20
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jupyter/docprovider",
3
- "version": "4.1.0-rc.0",
3
+ "version": "4.1.2",
4
4
  "description": "JupyterLab - Document Provider",
5
5
  "homepage": "https://github.com/jupyterlab/jupyter-collaboration",
6
6
  "bugs": {
@@ -41,7 +41,7 @@
41
41
  "watch": "tsc -b --watch"
42
42
  },
43
43
  "dependencies": {
44
- "@jupyter/collaborative-drive": "^4.1.0-rc.0",
44
+ "@jupyter/collaborative-drive": "^4.1.2",
45
45
  "@jupyter/ydoc": "^2.1.3 || ^3.0.0",
46
46
  "@jupyterlab/apputils": "^4.4.0",
47
47
  "@jupyterlab/cells": "^4.4.0",
@@ -11,9 +11,15 @@ import {
11
11
  ServerConnection,
12
12
  User
13
13
  } from '@jupyterlab/services';
14
+ import { PromiseDelegate } from '@lumino/coreutils';
14
15
  import { ISignal, Signal } from '@lumino/signaling';
15
16
 
16
- import { DocumentChange, ISharedDocument, YDocument } from '@jupyter/ydoc';
17
+ import {
18
+ DocumentChange,
19
+ ISharedDocument,
20
+ StateChange,
21
+ YDocument
22
+ } from '@jupyter/ydoc';
17
23
 
18
24
  import { WebSocketProvider } from './yprovider';
19
25
  import {
@@ -22,6 +28,7 @@ import {
22
28
  } from '@jupyter/collaborative-drive';
23
29
  import { Awareness } from 'y-protocols/awareness';
24
30
  import { ISettingRegistry } from '@jupyterlab/settingregistry';
31
+ import * as decoding from 'lib0/decoding';
25
32
  import * as encoding from 'lib0/encoding';
26
33
 
27
34
  const DISABLE_RTC =
@@ -29,13 +36,6 @@ const DISABLE_RTC =
29
36
 
30
37
  const RAW_MESSAGE_TYPE = 2;
31
38
 
32
- const SAVE_MESSAGE = (() => {
33
- const encoder = encoding.createEncoder();
34
- encoding.writeVarUint(encoder, RAW_MESSAGE_TYPE);
35
- encoding.writeVarString(encoder, 'save');
36
- return encoding.toUint8Array(encoder);
37
- })();
38
-
39
39
  /**
40
40
  * The url for the default drive service.
41
41
  */
@@ -54,6 +54,7 @@ namespace RtcContentProvider {
54
54
  trans: TranslationBundle;
55
55
  globalAwareness: Awareness | null;
56
56
  docmanagerSettings: ISettingRegistry.ISettings | null;
57
+ fileChanged?: ISignal<Contents.IDrive, Contents.IChangedArgs>;
57
58
  }
58
59
  }
59
60
 
@@ -70,6 +71,7 @@ export class RtcContentProvider
70
71
  this.sharedModelFactory = new SharedModelFactory(this._onCreate);
71
72
  this._providers = new Map<string, WebSocketProvider>();
72
73
  this._docmanagerSettings = options.docmanagerSettings;
74
+ this._driveFileChanged = options.fileChanged;
73
75
  }
74
76
 
75
77
  /**
@@ -134,15 +136,70 @@ export class RtcContentProvider
134
136
  if (options.format && options.type) {
135
137
  const key = `${options.format}:${options.type}:${localPath}`;
136
138
  const provider = this._providers.get(key);
139
+ const saveId = ++this._saveCounter;
137
140
 
138
141
  if (provider) {
139
- provider.wsProvider?.ws?.send(SAVE_MESSAGE);
142
+ const ws = provider.wsProvider?.ws;
143
+ if (ws) {
144
+ const delegate = new PromiseDelegate<void>();
145
+ const handler = (event: MessageEvent) => {
146
+ const data = new Uint8Array(event.data);
147
+ const decoder = decoding.createDecoder(data);
148
+ try {
149
+ const messageType = decoding.readVarUint(decoder);
150
+ if (messageType !== RAW_MESSAGE_TYPE) {
151
+ return;
152
+ }
153
+ } catch {
154
+ return;
155
+ }
156
+ const rawReply = decoding.readVarString(decoder);
157
+ let reply: {
158
+ type: 'save';
159
+ responseTo: number;
160
+ status: 'success' | 'skipped' | 'failed';
161
+ } | null = null;
162
+ try {
163
+ reply = JSON.parse(rawReply);
164
+ } catch (e) {
165
+ console.debug('The raw reply received was not a JSON reply');
166
+ }
167
+ if (
168
+ reply &&
169
+ reply['type'] === 'save' &&
170
+ reply['responseTo'] === saveId
171
+ ) {
172
+ if (reply.status === 'success') {
173
+ delegate.resolve();
174
+ } else if (reply.status === 'failed') {
175
+ delegate.reject('Saving failed');
176
+ } else if (reply.status === 'skipped') {
177
+ delegate.reject('Saving already in progress');
178
+ } else {
179
+ delegate.reject('Unrecognised save reply status');
180
+ }
181
+ }
182
+ };
183
+ ws.addEventListener('message', handler);
184
+ const encoder = encoding.createEncoder();
185
+ encoding.writeVarUint(encoder, RAW_MESSAGE_TYPE);
186
+ encoding.writeVarString(encoder, 'save');
187
+ encoding.writeVarUint(encoder, saveId);
188
+ const saveMessage = encoding.toUint8Array(encoder);
189
+ ws.send(saveMessage);
190
+ await delegate.promise;
191
+ ws.removeEventListener('message', handler);
192
+ }
140
193
  const fetchOptions: Contents.IFetchOptions = {
141
194
  type: options.type,
142
195
  format: options.format,
143
196
  content: false
144
197
  };
145
198
  return this.get(localPath, fetchOptions);
199
+ } else {
200
+ console.warn(
201
+ `Could not find a provider for ${localPath}, falling back to REST API save`
202
+ );
146
203
  }
147
204
  }
148
205
 
@@ -153,7 +210,7 @@ export class RtcContentProvider
153
210
  * A signal emitted when a file operation takes place.
154
211
  */
155
212
  get fileChanged(): ISignal<this, Contents.IChangedArgs> {
156
- return this._ydriveFileChanged;
213
+ return this._providerFileChanged;
157
214
  }
158
215
 
159
216
  private _onCreate = (
@@ -195,13 +252,99 @@ export class RtcContentProvider
195
252
  this._globalAwareness?.setLocalStateField('documents', documents);
196
253
  }
197
254
 
198
- const key = `${options.format}:${options.contentType}:${options.path}`;
255
+ let path = options.path;
256
+ let key = `${options.format}:${options.contentType}:${path}`;
199
257
  this._providers.set(key, provider);
200
258
 
259
+ const handlePathChange = (
260
+ pathChange: StateChange<string | undefined>
261
+ ) => {
262
+ const oldPath = pathChange.oldValue;
263
+ const newPath = pathChange.newValue;
264
+ if (!oldPath || !newPath) {
265
+ // This is expected when shared model initializes and the path is first populated
266
+ console.debug('New or old path not given', pathChange);
267
+ return;
268
+ }
269
+
270
+ const oldKey = `${options.format}:${options.contentType}:${oldPath}`;
271
+ if (oldKey !== key) {
272
+ console.error(
273
+ 'The computed old provider key is different from the current key'
274
+ );
275
+ return;
276
+ }
277
+ const newKey = `${options.format}:${options.contentType}:${newPath}`;
278
+
279
+ // Check if the provider is still registered (it may have been disposed if document was closed)
280
+ const provider = this._providers.get(oldKey);
281
+ if (!provider) {
282
+ console.warn(
283
+ `Could not find a provider to update after rename ${oldKey}, ${newKey}`
284
+ );
285
+ return;
286
+ }
287
+
288
+ // Re-register the provider under the new key
289
+ this._providers.set(newKey, provider);
290
+ this._providers.delete(oldKey);
291
+
292
+ // Update the provider key so that it can be disposed correctly when shared document closes
293
+ key = newKey;
294
+ path = newPath;
295
+
296
+ // Update the documents field
297
+ const state = this._globalAwareness?.getLocalState() || {};
298
+ const documents: string[] = state.documents || [];
299
+ const oldPathIndex = documents.indexOf(oldPath);
300
+ if (documents.includes(oldPath) && !documents.includes(newPath)) {
301
+ documents.splice(oldPathIndex, 1);
302
+ documents.push(newPath);
303
+ this._globalAwareness?.setLocalStateField('documents', documents);
304
+ }
305
+ };
306
+
307
+ // The information about file being renamed can come from two places:
308
+ // - from the sharedModel via changed signal with documentChange
309
+ // - from the fileChanged signal of the drive
310
+ // Neither method is foolproof:
311
+ // - the shared model approach can be delayed as the change needs to be
312
+ // reflected by the server and come back, in which case we get a race condition
313
+ // - the fileChanged signal is emitted with a larger delay for renames of collaborators
314
+ // Thus we need both.
315
+ const handleFileChangedSignal = (
316
+ _: Contents.IDrive,
317
+ change: Contents.IChangedArgs
318
+ ) => {
319
+ if (change.type !== 'rename') {
320
+ return;
321
+ }
322
+ const oldPath = change.oldValue?.path;
323
+ const newPath = change.newValue?.path;
324
+ if (oldPath !== path) {
325
+ return;
326
+ }
327
+ handlePathChange({
328
+ oldValue: oldPath,
329
+ newValue: newPath,
330
+ name: 'path'
331
+ });
332
+ };
333
+
334
+ this._driveFileChanged?.connect(handleFileChangedSignal);
335
+
201
336
  sharedModel.changed.connect(async (_, change) => {
202
337
  if (!change.stateChange) {
203
338
  return;
204
339
  }
340
+
341
+ const pathChanges = change.stateChange.filter(
342
+ change => change.name === 'path'
343
+ );
344
+ for (const pathChange of pathChanges) {
345
+ handlePathChange(pathChange);
346
+ }
347
+
205
348
  const hashChanges = change.stateChange.filter(
206
349
  change => change.name === 'hash'
207
350
  );
@@ -221,7 +364,7 @@ export class RtcContentProvider
221
364
  const newPath = sharedModel.state.path ?? options.path;
222
365
  const model = await this.get(newPath as string, { content: false });
223
366
 
224
- this._ydriveFileChanged.emit({
367
+ this._providerFileChanged.emit({
225
368
  type: 'save',
226
369
  newValue: { ...model, hash: hashChange.newValue },
227
370
  // we do not have the old model because it was discarded when server made the change,
@@ -239,12 +382,15 @@ export class RtcContentProvider
239
382
 
240
383
  // Remove the document path from the list of opened ones for this user.
241
384
  const state = this._globalAwareness?.getLocalState() || {};
242
- const documents: any[] = state.documents || [];
243
- const index = documents.indexOf(options.path);
385
+ const documents: string[] = state.documents || [];
386
+ const index = documents.indexOf(path);
244
387
  if (index > -1) {
245
388
  documents.splice(index, 1);
246
389
  }
247
390
  this._globalAwareness?.setLocalStateField('documents', documents);
391
+
392
+ // Disconnect signal
393
+ this._driveFileChanged?.disconnect(handleFileChangedSignal);
248
394
  });
249
395
  } catch (error) {
250
396
  // Falling back to the contents API if opening the websocket failed
@@ -256,10 +402,14 @@ export class RtcContentProvider
256
402
  };
257
403
 
258
404
  private _user: User.IManager;
405
+ private _saveCounter = 0;
259
406
  private _trans: TranslationBundle;
260
407
  private _globalAwareness: Awareness | null;
261
408
  private _providers: Map<string, WebSocketProvider>;
262
- private _ydriveFileChanged = new Signal<this, Contents.IChangedArgs>(this);
409
+ // This is for emitting signals to be proxied to `Drive.fileChanged`
410
+ private _providerFileChanged = new Signal<this, Contents.IChangedArgs>(this);
411
+ // This is for listening to `Drive.fileChanged` signal
412
+ private _driveFileChanged?: ISignal<Contents.IDrive, Contents.IChangedArgs>;
263
413
  private _serverSettings: ServerConnection.ISettings;
264
414
  private _docmanagerSettings: ISettingRegistry.ISettings | null;
265
415
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jupyter/docprovider-extension",
3
- "version": "4.1.0-rc.0",
3
+ "version": "4.1.2",
4
4
  "description": "JupyterLab - Collaborative Shared Models",
5
5
  "keywords": [
6
6
  "jupyter",
@@ -53,8 +53,8 @@
53
53
  "watch:labextension": "jupyter labextension watch ."
54
54
  },
55
55
  "dependencies": {
56
- "@jupyter/collaborative-drive": "^4.1.0-rc.0",
57
- "@jupyter/docprovider": "^4.1.0-rc.0",
56
+ "@jupyter/collaborative-drive": "^4.1.2",
57
+ "@jupyter/docprovider": "^4.1.2",
58
58
  "@jupyter/ydoc": "^2.1.3 || ^3.0.0",
59
59
  "@jupyterlab/application": "^4.4.0",
60
60
  "@jupyterlab/apputils": "^4.4.0",
@@ -86,7 +86,8 @@ export const rtcContentProvider: JupyterFrontEndPlugin<ICollaborativeContentProv
86
86
  user: app.serviceManager.user,
87
87
  trans,
88
88
  globalAwareness,
89
- docmanagerSettings
89
+ docmanagerSettings,
90
+ fileChanged: defaultDrive.fileChanged
90
91
  });
91
92
  registry.register('rtc', rtcContentProvider);
92
93
  return rtcContentProvider;
@@ -36,6 +36,9 @@ dynamic = ["version"]
36
36
  [project.urls]
37
37
  Documentation = "https://jupyterlab-realtime-collaboration.readthedocs.io/"
38
38
  Repository = "https://github.com/jupyterlab/jupyter-collaboration"
39
+ Changelog = "https://jupyterlab-realtime-collaboration.readthedocs.io/en/latest/changelog.html"
40
+ Source = "https://github.com/jupyterlab/jupyter-collaboration/tree/main/packages/docprovider-extension"
41
+ Issues = "https://github.com/jupyterlab/jupyter-collaboration/issues/new/choose"
39
42
 
40
43
  [tool.hatch.version]
41
44
  path = "jupyter_docprovider/_version.py"
@@ -1 +0,0 @@
1
- __version__ = "2.1.0rc0"
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[]).push([[214],{734:(e,t,n)=>{n.d(t,{CW:()=>f,D7:()=>o,P1:()=>s,WD:()=>c,vZ:()=>u,wt:()=>r});const o=64,r=128,s=63,c=127,u=2147483647,f=4294967295},214:(e,t,n)=>{n.d(t,{Bw:()=>f,Fo:()=>a,Gu:()=>p,Qj:()=>b,xv:()=>u,zd:()=>h});var o=n(801),r=n(734),s=n(554);class c{constructor(){this.cpos=0,this.cbuf=new Uint8Array(100),this.bufs=[]}}const u=()=>new c,f=e=>{let t=e.cpos;for(let n=0;n<e.bufs.length;n++)t+=e.bufs[n].length;return t},a=e=>{const t=new Uint8Array(f(e));let n=0;for(let o=0;o<e.bufs.length;o++){const r=e.bufs[o];t.set(r,n),n+=r.length}return t.set(new Uint8Array(e.cbuf.buffer,0,e.cpos),n),t},l=(e,t)=>{const n=e.cbuf.length;e.cpos===n&&(e.bufs.push(e.cbuf),e.cbuf=new Uint8Array(2*n),e.cpos=0),e.cbuf[e.cpos++]=t},h=(e,t)=>{for(;t>r.WD;)l(e,r.wt|r.WD&t),t=o.RI(t/128);l(e,r.WD&t)},d=new Uint8Array(3e4),i=d.length/3,b=s.db&&s.db.encodeInto?(e,t)=>{if(t.length<i){const n=s.db.encodeInto(t,d).written||0;h(e,n);for(let t=0;t<n;t++)l(e,d[t])}else p(e,s.Af(t))}:(e,t)=>{const n=unescape(encodeURIComponent(t)),o=n.length;h(e,o);for(let t=0;t<o;t++)l(e,n.codePointAt(t))},p=(e,t)=>{h(e,t.byteLength),((e,t)=>{const n=e.cbuf.length,r=e.cpos,s=o.jk(n-r,t.length),c=t.length-s;e.cbuf.set(t.subarray(0,s),r),e.cpos+=s,c>0&&(e.bufs.push(e.cbuf),e.cbuf=new Uint8Array(o.T9(2*n,c)),e.cbuf.set(t.subarray(s)),e.cpos=c)})(e,t)};new DataView(new ArrayBuffer(4))},801:(e,t,n)=>{n.d(t,{RI:()=>o,T9:()=>s,jk:()=>r,n7:()=>c,sj:()=>u});const o=Math.floor,r=(Math.ceil,Math.abs,Math.imul,Math.round,Math.log10,Math.log2,Math.log,Math.sqrt,(e,t)=>e<t?e:t),s=(e,t)=>e>t?e:t,c=(Number.isNaN,Math.pow),u=(Math.sign,e=>0!==e?e<0:1/e<0)},554:(e,t,n)=>{n.d(t,{Af:()=>f,QV:()=>o,db:()=>u,jN:()=>c,tv:()=>a});const o=String.fromCharCode,r=(String.fromCodePoint,o(65535),/^\s*/g),s=/([A-Z])/g,c=(e,t)=>(e=>e.replace(r,""))(e.replace(s,(e=>`${t}${(e=>e.toLowerCase())(e)}`))),u="undefined"!=typeof TextEncoder?new TextEncoder:null,f=u?e=>u.encode(e):e=>{const t=unescape(encodeURIComponent(e)),n=t.length,o=new Uint8Array(n);for(let e=0;e<n;e++)o[e]=t.codePointAt(e);return o};let a="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});a&&1===a.decode(new Uint8Array).length&&(a=null)}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[]).push([[240],{68:(e,t,n)=>{n.d(t,{A:()=>a});var o=n(758),r=n.n(o),s=n(935),i=n.n(s)()(r());i.push([e.id,"/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|---------------------------------------------------------------------------- */\n\n.jp-timelineSliderWrapper .jp-sliderContainer{\n display: flex;\n align-items: center;\n}\n\n.jp-Slider {\n height: 4.5px\n}\n\n#jp-slider-status-bar {\n display: flex;\n}\n\n.jp-timestampDisplay {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 6px;\n}\n\n.jp-restoreBtnContainer {\n width: 192px;\n}\n\n.jp-ToolbarButtonComponent.jp-restoreBtn {\n cursor: pointer;\n color: var(--jp-layout-color2);\n width: 100%;\n background: var(--jp-accept-color-normal)\n}\n",""]);const a=i},935:e=>{e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",o=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),o&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),o&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,o,r,s){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(o)for(var a=0;a<this.length;a++){var c=this[a][0];null!=c&&(i[c]=!0)}for(var l=0;l<e.length;l++){var d=[].concat(e[l]);o&&i[d[0]]||(void 0!==s&&(void 0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=s),n&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=n):d[2]=n),r&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=r):d[4]="".concat(r)),t.push(d))}},t}},758:e=>{e.exports=function(e){return e[1]}},591:e=>{var t=[];function n(e){for(var n=-1,o=0;o<t.length;o++)if(t[o].identifier===e){n=o;break}return n}function o(e,o){for(var s={},i=[],a=0;a<e.length;a++){var c=e[a],l=o.base?c[0]+o.base:c[0],d=s[l]||0,h="".concat(l," ").concat(d);s[l]=d+1;var u=n(h),p={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==u)t[u].references++,t[u].updater(p);else{var m=r(p,o);o.byIndex=a,t.splice(a,0,{identifier:h,updater:m,references:1})}i.push(h)}return i}function r(e,t){var n=t.domAPI(t);return n.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;n.update(e=t)}else n.remove()}}e.exports=function(e,r){var s=o(e=e||[],r=r||{});return function(e){e=e||[];for(var i=0;i<s.length;i++){var a=n(s[i]);t[a].references--}for(var c=o(e,r),l=0;l<s.length;l++){var d=n(s[l]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}s=c}}},128:e=>{var t={};e.exports=function(e,n){var o=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(n)}},51:e=>{e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},855:(e,t,n)=>{e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},740:e=>{e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var o="";n.supports&&(o+="@supports (".concat(n.supports,") {")),n.media&&(o+="@media ".concat(n.media," {"));var r=void 0!==n.layer;r&&(o+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),o+=n.css,r&&(o+="}"),n.media&&(o+="}"),n.supports&&(o+="}");var s=n.sourceMap;s&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s))))," */")),t.styleTagTransform(o,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},656:e=>{e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},240:(e,t,n)=>{n.r(t),n.d(t,{ForkManager:()=>V,IForkManagerToken:()=>K,JUPYTER_COLLABORATION_FORK_EVENTS_URI:()=>z,NotebookCellServerExecutor:()=>l,ROOM_FORK_URL:()=>p,RtcContentProvider:()=>C,TimelineWidget:()=>q,WebSocketAwarenessProvider:()=>r,WebSocketProvider:()=>w,requestAPI:()=>m,requestDocSession:()=>v,requestDocumentTimeline:()=>f,requestUndoRedo:()=>g});var o=n(179);class r extends o.WebsocketProvider{constructor(e){super(e.url,e.roomID,e.awareness.doc,{awareness:e.awareness}),this._isDisposed=!1,this._awareness=e.awareness,this._user=e.user,this._user.ready.then((()=>this._onUserChanged(this._user))).catch((e=>console.error(e))),this._user.userChanged.connect(this._onUserChanged,this)}get isDisposed(){return this._isDisposed}dispose(){this._isDisposed||(this._user.userChanged.disconnect(this._onUserChanged,this),this._isDisposed=!0,this.destroy())}_onUserChanged(e){this._awareness.setLocalStateField("user",e.identity)}}var s=n(560),i=n(689),a=n(186),c=n(918);class l{constructor(e){var t;this._serverSettings=null!==(t=e.serverSettings)&&void 0!==t?t:a.ServerConnection.makeSettings()}async runCell({cell:e,notebook:t,notebookConfig:n,onCellExecuted:o,onCellExecutionScheduled:r,sessionContext:l,sessionDialogs:d,translator:h}){var u,p,m;const v=(h=null!=h?h:c.nullTranslator).load("jupyterlab");switch(e.model.type){case"markdown":e.rendered=!0,e.inputHidden=!1,o({cell:e,success:!0});break;case"code":if(l){if(l.isTerminating){await(0,s.showDialog)({title:v.__("Kernel Terminating"),body:v.__("The kernel for %1 appears to be terminating. You can not run any cell for now.",null===(u=l.session)||void 0===u?void 0:u.path),buttons:[s.Dialog.okButton()]});break}if(l.pendingInput)return await(0,s.showDialog)({title:v.__("Cell not executed due to pending input"),body:v.__("The cell has not been executed to avoid kernel deadlock as there is another pending input! Submit your pending input and try again."),buttons:[s.Dialog.okButton()]}),!1;if(l.hasNoKernel&&await l.startKernel()&&d&&await d.selectKernel(l),l.hasNoKernel)return e.model.sharedModel.transact((()=>{e.model.clearExecution()})),!0;const n=null===(m=null===(p=null==l?void 0:l.session)||void 0===p?void 0:p.kernel)||void 0===m?void 0:m.id,c=i.URLExt.join(this._serverSettings.baseUrl,`api/kernels/${n}/execute`),h=e.model.sharedModel.getId(),f=t.sharedModel.getState("document_id"),g={method:"POST",body:JSON.stringify({cell_id:h,document_id:f})};r({cell:e});let y=!1;try{y=(await a.ServerConnection.makeRequest(c,g,this._serverSettings)).ok}catch(t){if(o({cell:e,success:!1}),e.isDisposed)return!1;throw t}return o({cell:e,success:y}),!0}e.model.sharedModel.transact((()=>{e.model.clearExecution()}),!1)}return Promise.resolve(!0)}}const d="api/collaboration/session",h="api/collaboration/undo_redo",u="api/collaboration/timeline",p="api/collaboration/fork";async function m(e="",t={}){const n=a.ServerConnection.makeSettings(),o=i.URLExt.join(n.baseUrl,e);let r;try{r=await a.ServerConnection.makeRequest(o,t,n)}catch(e){throw new a.ServerConnection.NetworkError(e)}let s=await r.text();if(s.length>0)try{s=JSON.parse(s)}catch(e){console.error("Not a JSON response body.",r)}if(!r.ok)throw new a.ServerConnection.ResponseError(r,s.message||s);return s}async function v(e,t,n){const o=a.ServerConnection.makeSettings(),r=i.URLExt.join(o.baseUrl,d,encodeURIComponent(n)),s={method:"PUT",body:JSON.stringify({format:e,type:t})};let c;try{c=await a.ServerConnection.makeRequest(r,s,o)}catch(e){throw new a.ServerConnection.NetworkError(e)}let l=await c.text();if(l.length>0)try{l=JSON.parse(l)}catch(e){console.log("Not a JSON response body.",c)}if(!c.ok)throw new a.ServerConnection.ResponseError(c,l.message||l);return l}async function f(e,t,n){const o=a.ServerConnection.makeSettings();let r=i.URLExt.join(o.baseUrl,u,n);r=r.concat(`?format=${e}&&type=${t}`);const s={method:"GET"};let c;try{c=await a.ServerConnection.makeRequest(r,s,o)}catch(e){throw new a.ServerConnection.NetworkError(e)}return c}async function g(e,t,n,o){const r=a.ServerConnection.makeSettings();let s=i.URLExt.join(r.baseUrl,h,encodeURIComponent(e));s=s.concat(`?action=${t}&&steps=${n}&&forkRoom=${o}`);const c={method:"PUT"};let l;try{l=await a.ServerConnection.makeRequest(s,c,r)}catch(e){throw new a.ServerConnection.NetworkError(e)}let d=await l.text();if(d.length>0)try{d=JSON.parse(d)}catch(e){console.log("Not a JSON response body.",l)}if(!l.ok)throw new a.ServerConnection.ResponseError(l,d.message||d);return d}var y=n(602),_=n(262);class w{constructor(e){this._onConnectionClosed=e=>{1003===e.code&&(console.error("Document provider closed:",e.reason),(0,s.showErrorMessage)(this._trans.__("Document session error"),e.reason,[s.Dialog.okButton()]),this._sharedModel.dispose())},this._onSync=e=>{e&&(this._yWebsocketProvider&&(this._yWebsocketProvider.off("sync",this._onSync),this._sharedModel.ydoc.getMap("state").set("document_id",this._yWebsocketProvider.roomname)),this._ready.resolve())},this._ready=new _.PromiseDelegate,this._isDisposed=!1,this._path=e.path,this._contentType=e.contentType,this._format=e.format,this._serverUrl=e.url,this._sharedModel=e.model,this._awareness=e.model.awareness,this._yWebsocketProvider=null,this._trans=e.translator;const t=e.user;t.ready.then((()=>{this._onUserChanged(t)})).catch((e=>console.error(e))),t.userChanged.connect(this._onUserChanged,this),this._connect().catch((e=>console.warn(e)))}get isDisposed(){return this._isDisposed}get ready(){return this._ready.promise}get contentType(){return this._contentType}get format(){return this._format}dispose(){var e,t,n;this.isDisposed||(this._isDisposed=!0,null===(e=this._yWebsocketProvider)||void 0===e||e.off("connection-close",this._onConnectionClosed),null===(t=this._yWebsocketProvider)||void 0===t||t.off("sync",this._onSync),null===(n=this._yWebsocketProvider)||void 0===n||n.destroy(),this._disconnect(),y.Signal.clearData(this))}async reconnect(){this._disconnect(),this._connect()}async _connect(){const e=await v(this._format,this._contentType,this._path);this._yWebsocketProvider=new o.WebsocketProvider(this._serverUrl,`${e.format}:${e.type}:${e.fileId}`,this._sharedModel.ydoc,{disableBc:!0,params:{sessionId:e.sessionId},awareness:this._awareness}),this._yWebsocketProvider.on("sync",this._onSync),this._yWebsocketProvider.on("connection-close",this._onConnectionClosed)}async connectToForkDoc(e,t){this._disconnect(),this._yWebsocketProvider=new o.WebsocketProvider(this._serverUrl,e,this._sharedModel.ydoc,{disableBc:!0,params:{sessionId:t},awareness:this._awareness})}get wsProvider(){return this._yWebsocketProvider}_disconnect(){var e,t,n;null===(e=this._yWebsocketProvider)||void 0===e||e.off("connection-close",this._onConnectionClosed),null===(t=this._yWebsocketProvider)||void 0===t||t.off("sync",this._onSync),null===(n=this._yWebsocketProvider)||void 0===n||n.destroy(),this._yWebsocketProvider=null}_onUserChanged(e){this._awareness.setLocalStateField("user",e.identity)}}var S=n(214);const k="true"===i.PageConfig.getOption("disableRTC"),b=(()=>{const e=S.xv();return S.zd(e,2),S.Qj(e,"save"),S.Fo(e)})();class C extends a.RestContentProvider{constructor(e){super(e),this._onCreate=(e,t)=>{var n,o,r,s,a,c;if("string"!=typeof e.format)return;const l=null===(r=null===(o=null===(n=this._docmanagerSettings)||void 0===n?void 0:n.composite)||void 0===o?void 0:o.autosave)||void 0===r||r;t.awareness.setLocalStateField("autosave",l),null===(s=this._docmanagerSettings)||void 0===s||s.changed.connect((()=>{var e,n,o;const r=null===(o=null===(n=null===(e=this._docmanagerSettings)||void 0===e?void 0:e.composite)||void 0===n?void 0:n.autosave)||void 0===o||o;t.awareness.setLocalStateField("autosave",r)}));try{const n=new w({url:i.URLExt.join(this._serverSettings.wsUrl,"api/collaboration/room"),path:e.path,format:e.format,contentType:e.contentType,model:t,user:this._user,translator:this._trans}),o=((null===(a=this._globalAwareness)||void 0===a?void 0:a.getLocalState())||{}).documents||[];o.includes(e.path)||(o.push(e.path),null===(c=this._globalAwareness)||void 0===c||c.setLocalStateField("documents",o));const r=`${e.format}:${e.contentType}:${e.path}`;this._providers.set(r,n),t.changed.connect((async(n,o)=>{var r;if(!o.stateChange)return;const s=o.stateChange.filter((e=>"hash"===e.name));if(0===s.length)return;s.length>1&&console.error("Unexpected multiple changes to hash value in a single transaction");const i=s[0],a=null!==(r=t.state.path)&&void 0!==r?r:e.path,c=await this.get(a,{content:!1});this._ydriveFileChanged.emit({type:"save",newValue:{...c,hash:i.newValue},oldValue:{hash:i.oldValue}})})),t.disposed.connect((()=>{var t,n;const o=this._providers.get(r);o&&(o.dispose(),this._providers.delete(r));const s=((null===(t=this._globalAwareness)||void 0===t?void 0:t.getLocalState())||{}).documents||[],i=s.indexOf(e.path);i>-1&&s.splice(i,1),null===(n=this._globalAwareness)||void 0===n||n.setLocalStateField("documents",s)}))}catch(t){console.error(`Failed to open websocket connection for ${e.path}.\n:${t}`)}},this._ydriveFileChanged=new y.Signal(this),this._user=e.user,this._trans=e.trans,this._globalAwareness=e.globalAwareness,this._serverSettings=e.serverSettings,this.sharedModelFactory=new T(this._onCreate),this._providers=new Map,this._docmanagerSettings=e.docmanagerSettings}get providers(){return this._providers}async get(e,t){if(t&&t.format&&t.type){const n=`${t.format}:${t.type}:${e}`,o=this._providers.get(n);if(o){const[n]=await Promise.all([super.get(e,{...t,content:!1}),o.ready]);return{...n,format:t.format}}}return super.get(e,t)}async save(e,t={}){var n,o;if(t.format&&t.type){const r=`${t.format}:${t.type}:${e}`,s=this._providers.get(r);if(s){null===(o=null===(n=s.wsProvider)||void 0===n?void 0:n.ws)||void 0===o||o.send(b);const r={type:t.type,format:t.format,content:!1};return this.get(e,r)}}return super.save(e,t)}get fileChanged(){return this._ydriveFileChanged}}class T{constructor(e){this._onCreate=e,this.collaborative=!k,this.documentFactories=new Map}registerDocumentFactory(e,t){if(this.documentFactories.has(e))throw new Error(`The content type ${e} already exists`);this.documentFactories.set(e,t)}createNew(e){if("string"==typeof e.format){if(this.collaborative&&e.collaborative&&this.documentFactories.has(e.contentType)){const t=this.documentFactories.get(e.contentType)(e);return this._onCreate(e,t),t}}else console.warn(`Only defined format are supported; got ${e.format}.`)}}var E=n(345),x=n.n(E),R=n(591),U=n.n(R),D=n(740),P=n.n(D),$=n(128),j=n.n($),N=n(855),L=n.n(N),I=n(51),M=n.n(I),F=n(656),A=n.n(F),W=n(68),O={};O.styleTagTransform=A(),O.setAttributes=L(),O.insert=j().bind(null,"head"),O.domAPI=P(),O.insertStyleElement=M(),U()(W.A,O),W.A&&W.A.locals&&W.A.locals;var B=n(484);const J=({apiURL:e,provider:t,contentType:n,format:o,documentTimelineUrl:r})=>{const[i,a]=(0,E.useState)({roomId:"",timestamps:[],forkRoom:"",sessionId:""}),[c,l]=(0,E.useState)(i.timestamps.length-1),[d,h]=(0,E.useState)(!1),[u,p]=(0,E.useState)(!1),m=(0,E.useRef)(!0),y=(0,E.useRef)(!0),_=(0,E.useRef)(null);function w(e){try{const t=new URL(e).pathname,n=t.lastIndexOf(r);if(-1===n)throw new Error(`API segment "${r}" not found in URL.`);return t.slice(n+r.length)}catch(e){return console.error("Invalid URL or unable to extract filename:",e),""}}return x().createElement("div",{className:"jp-sliderContainer"},x().createElement("div",{onClick:()=>{!async function(r){try{if(m.current){const i=await f(o,n,r);if(!i.ok)throw 404===i.status?new Error("Not found"):503===i.status?new Error("WebSocket closed"):new Error(`Failed to fetch data: ${i.statusText}`);const c=await i.text();let d={roomId:"",timestamps:[],forkRoom:"",sessionId:""};return c&&(s.Notification.warning("Document is now in read-only mode. Changes will not be saved.",{autoClose:2500}),d=JSON.parse(c),a(d),l(d.timestamps.length-1),t.connectToForkDoc(d.forkRoom,d.sessionId),_.current=await v(o,n,w(e))),h(!0),m.current=!1,d}}catch(e){console.error("Error fetching data:",e)}}(w(e))},className:"jp-mod-highlighted",title:"Document Timeline"},x().createElement(B.historyIcon.react,{marginRight:"4px"})),d&&x().createElement("div",{className:"jp-timestampDisplay"},x().createElement("input",{type:"range",min:0,max:i.timestamps.length-1,value:c,onChange:async e=>{const t=parseInt(e.target.value),n=Math.abs(t-c);try{const e=function(e){return e<c?"undo":"redo"}(t);if(l(t),y.current&&(p(!0),y.current=!1),!_.current)return void console.error("Session is not initialized");await g(`${_.current.format}:${_.current.type}:${_.current.fileId}`,e,n,i.forkRoom)}catch(e){console.error("Error fetching or applying updates:",e)}},className:"jp-Slider"}),x().createElement("div",null,x().createElement("strong",null,w(e).split("/").pop()," ")," "),u&&x().createElement("div",{className:"jp-restoreBtnContainer"},x().createElement("button",{onClick:async()=>{if(!_.current)return void console.error("Session is not initialized");const e=await g(`${_.current.format}:${_.current.type}:${_.current.fileId}`,"restore",0,i.forkRoom);200===e.code?(s.Notification.success(e.status,{autoClose:4e3}),t.reconnect(),h(!1),m.current=!0):s.Notification.error(e.status,{autoClose:4e3})},className:"jp-ToolbarButtonComponent jp-restoreBtn"},"Restore version"," ",(e=>{const t=new Date(1e3*e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}:${String(t.getSeconds()).padStart(2,"0")}`})(i.timestamps[c])))))};class q extends s.ReactWidget{constructor(e,t,n,o,r){super(),this.apiURL=e,this.provider=t,this.contentType=n,this.format=o,this.documentTimelineUrl=r,this.addClass("jp-timelineSliderWrapper")}render(){return E.createElement(J,{key:this.apiURL,apiURL:this.apiURL,provider:this.provider,contentType:this.contentType,format:this.format,documentTimelineUrl:this.documentTimelineUrl})}updateContent(e,t){this.apiURL=e,this.provider=t,this.contentType=this.provider.contentType,this.format=this.provider.format,this.update()}}const K=new _.Token("@jupyter/docprovider:IForkManagerToken"),z="https://schema.jupyter.org/jupyter_collaboration/fork/v1";class V{constructor(e){this._disposed=!1,this._forkAddedSignal=new y.Signal(this),this._forkDeletedSignal=new y.Signal(this);const{contentProvider:t,eventManager:n}=e;this._contentProvider=t,this._eventManager=n,this._eventManager.stream.connect(this._handleEvent,this)}get isDisposed(){return this._disposed}get forkAdded(){return this._forkAddedSignal}get forkDeleted(){return this._forkDeletedSignal}dispose(){var e;this._disposed||(null===(e=this._eventManager)||void 0===e||e.stream.disconnect(this._handleEvent),this._disposed=!0)}async createFork(e){const{rootId:t,title:n,description:o,synchronize:r}=e,s={method:"PUT",body:JSON.stringify({title:n,description:o,synchronize:r})},a=i.URLExt.join(p,t);return await m(a,s)}async getAllForks(e){const t=i.URLExt.join(p,e);return await m(t,{method:"GET"})}async deleteFork(e){const{forkId:t,merge:n}=e,o=i.URLExt.join(p,t),r=i.URLExt.objectToQueryString({merge:n});await m(`${o}${r}`,{method:"DELETE"})}getProvider(e){const{documentPath:t,format:n,type:o}=e,r=this._contentProvider;if(r){const e=t;return r.providers.get(`${n}:${o}:${e}`)}}_handleEvent(e,t){if(t.schema_id===z)switch(t.action){case"create":this._forkAddedSignal.emit(t);break;case"delete":this._forkDeletedSignal.emit(t)}}}}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[]).push([[703],{703:(e,t,o)=>{o.r(t),o.d(t,{default:()=>k});var r=o(560),n=o(256),i=o(506),a=o(534),s=o(458),l=o(88),d=o(542),c=o(918),u=o(0),v=o(199),p=o(925),g=o(689);const h="api/collaboration/timeline",y="The file %1 has been opened with two different views. This is not supported. Please close this view; otherwise, some of your edits may not be saved properly.",b={id:"@jupyter/docprovider-extension:content-provider",description:"The RTC content provider",provides:v.ICollaborativeContentProvider,requires:[c.ITranslator],optional:[v.IGlobalAwareness,d.ISettingRegistry],activate:async(e,t,o,r)=>{const n=t.load("jupyter_collaboration"),i=e.serviceManager.contents.defaultDrive;if(!i)throw Error("Cannot initialize content provider: default drive property not accessible on contents manager instance.");const a=i.contentProviderRegistry;if(!a)throw Error("Cannot initialize content provider: no content provider registry.");const s=r?await r.load("@jupyterlab/docmanager-extension:plugin"):null,l=new p.RtcContentProvider({apiEndpoint:"/api/contents",serverSettings:i.serverSettings,user:e.serviceManager.user,trans:n,globalAwareness:o,docmanagerSettings:s});return a.register("rtc",l),l}},m={id:"@jupyter/docprovider-extension:yfile",description:"Plugin to register the shared model factory for the content type 'file'",autoStart:!0,requires:[v.ICollaborativeContentProvider,a.IEditorWidgetFactory],activate:(e,t,o)=>{t.sharedModelFactory.registerDocumentFactory("file",(()=>new u.YFile)),o.contentProviderId="rtc"}},f={id:"@jupyter/docprovider-extension:ynotebook",description:"Plugin to register the shared model factory for the content type 'notebook'",autoStart:!0,requires:[v.ICollaborativeContentProvider,l.INotebookWidgetFactory],optional:[d.ISettingRegistry],activate:(e,t,o,r)=>{let n=!0;r&&r.load("@jupyterlab/notebook-extension:tracker").then((e=>{const t=e=>{var t;const o=null==e?void 0:e.get("experimentalEnableDocumentWideUndoRedo").composite;n=null===(t=!o)||void 0===t||t};t(e),e.changed.connect((e=>t(e)))})),t.sharedModelFactory.registerDocumentFactory("notebook",(()=>new u.YNotebook({disableDocumentWideUndoRedo:n}))),o.contentProviderId="rtc"}},w={id:"@jupyter/docprovider-extension:statusBarTimeline",description:"Plugin to add a timeline slider to the status bar",autoStart:!0,requires:[i.IStatusBar,v.ICollaborativeContentProvider],activate:async(e,t,o)=>{try{let r=null,i=null;const a=async(t,r)=>{if(!r)return;i&&(i.dispose(),i=null);const[a,s]=r.split(":"),l=o.providers.get(`${a}:${s}:${t}`);if(!l)return;const d=l,c=g.URLExt.join(e.serviceManager.serverSettings.baseUrl,h,t);i=new p.TimelineWidget(c,d,d.contentType,d.format,h);const u=document.getElementById("jp-slider-status-bar");u&&!i.isAttached&&n.Widget.attach(i,u)};e.shell.currentChanged&&e.shell.currentChanged.connect((async(e,t)=>{const o=t.newValue;i&&(i.dispose(),i=null),o&&"context"in o&&(await o.context.ready,await a(o.context.path,o.context.model.sharedModel.getState("document_id")))})),t&&(r||(r=new n.Widget,r.addClass("jp-StatusBar-GroupItem"),r.addClass("jp-mod-highlighted"),r.id="jp-slider-status-bar",t.registerStatusItem("jp-slider-status-bar",{item:r,align:"left",rank:4,isActive:()=>{var t,o;const r=e.shell.currentWidget;return(null===(o=null===(t=null==r?void 0:r.context)||void 0===t?void 0:t.model)||void 0===o?void 0:o.collaborative)||!1}})))}catch(e){console.error("Failed to activate statusBarTimeline plugin:",e)}}},k=[b,m,f,{id:"@jupyter/docprovider-extension:logger",description:"A logging plugin for debugging purposes.",autoStart:!0,optional:[s.ILoggerRegistry,a.IEditorTracker,l.INotebookTracker,c.ITranslator],activate:(e,t,o,n,i)=>{const a=(null!=i?i:c.nullTranslator).load("jupyter_collaboration"),s="https://schema.jupyter.org/jupyter_collaboration/session/v1";if(!t)return void e.serviceManager.events.stream.connect(((e,t)=>{var o,n;t.schema_id===s&&(console.debug(`[${t.room}(${t.path})] ${null!==(o=t.action)&&void 0!==o?o:""}: ${null!==(n=t.msg)&&void 0!==n?n:""}`),"WARNING"===t.level&&(0,r.showDialog)({title:a.__("Warning"),body:a.__(y,t.path),buttons:[r.Dialog.okButton()]}))}));const l=new Map,d=(e,o)=>{const r=t.getLogger(o.context.path);l.set(o.context.localPath,r),o.disposed.connect((e=>{l.delete(e.context.localPath)}))};o&&o.widgetAdded.connect(d),n&&n.widgetAdded.connect(d),(async()=>{var t,o;const{events:n}=e.serviceManager;for await(const e of n.stream)if(e.schema_id===s){const n=l.get(e.path);null==n||n.log({type:"text",level:e.level.toLowerCase(),data:`[${e.room}] ${null!==(t=e.action)&&void 0!==t?t:""}: ${null!==(o=e.msg)&&void 0!==o?o:""}`}),"WARNING"===e.level&&(0,r.showDialog)({title:a.__("Warning"),body:a.__(y,e.path),buttons:[r.Dialog.warnButton({label:a.__("Ok")})]})}})()}},{id:"@jupyter/docprovider-extension:notebook-cell-executor",description:"Add notebook cell executor that uses REST API instead of kernel protocol over WebSocket.",autoStart:!0,provides:l.INotebookCellExecutor,activate:e=>"true"===g.PageConfig.getOption("serverSideExecution")?new p.NotebookCellServerExecutor({serverSettings:e.serviceManager.serverSettings}):Object.freeze({runCell:l.runCell})},w,{id:"@jupyter/docprovider-extension:forkManager",autoStart:!0,requires:[v.ICollaborativeContentProvider],provides:p.IForkManagerToken,activate:(e,t)=>{const o=e.serviceManager.events;return new p.ForkManager({contentProvider:t,eventManager:o})}}]}}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[]).push([[753],{907:e=>{var t,s,n=e.exports={};function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function c(e){if(t===setTimeout)return setTimeout(e,0);if((t===r||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(s){try{return t.call(null,e,0)}catch(s){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:r}catch(e){t=r}try{s="function"==typeof clearTimeout?clearTimeout:o}catch(e){s=o}}();var a,i=[],l=!1,h=-1;function d(){l&&a&&(l=!1,a.length?i=a.concat(i):h=-1,i.length&&u())}function u(){if(!l){var e=c(d);l=!0;for(var t=i.length;t;){for(a=i,i=[];++h<t;)a&&a[h].run();h=-1,t=i.length}a=null,l=!1,function(e){if(s===clearTimeout)return clearTimeout(e);if((s===o||!s)&&clearTimeout)return s=clearTimeout,clearTimeout(e);try{return s(e)}catch(t){try{return s.call(null,e)}catch(t){return s.call(this,e)}}}(e)}}function f(e,t){this.fun=e,this.array=t}function p(){}n.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var s=1;s<arguments.length;s++)t[s-1]=arguments[s];i.push(new f(e,t)),1!==i.length||l||c(u)},f.prototype.run=function(){this.fun.apply(null,this.array)},n.title="browser",n.browser=!0,n.env={},n.argv=[],n.version="",n.versions={},n.on=p,n.addListener=p,n.once=p,n.off=p,n.removeListener=p,n.removeAllListeners=p,n.emit=p,n.prependListener=p,n.prependOnceListener=p,n.listeners=function(e){return[]},n.binding=function(e){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(e){throw new Error("process.chdir is not supported")},n.umask=function(){return 0}},753:(e,t,s)=>{"use strict";s.r(t),s.d(t,{WebsocketProvider:()=>le,messageAuth:()=>ne,messageAwareness:()=>se,messageQueryAwareness:()=>te,messageSync:()=>ee});var n=s(206);const r=()=>new Map,o=(e,t,s)=>{let n=e.get(t);return void 0===n&&e.set(t,n=s()),n},c=()=>new Set;var a=s(554);let i=new class{constructor(){this.map=new Map}setItem(e,t){this.map.set(e,t)}getItem(e){return this.map.get(e)}},l=!0;try{"undefined"!=typeof localStorage&&localStorage&&(i=localStorage,l=!1)}catch(e){}const h=i,d=Array.from,u=(Array.isArray,Object.assign,Object.keys),f=e=>u(e).length,p=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),g=(Object.freeze,(e,t)=>{if(null==e||null==t)return((e,t)=>e===t)(e,t);if(e.constructor!==t.constructor)return!1;if(e===t)return!0;switch(e.constructor){case ArrayBuffer:e=new Uint8Array(e),t=new Uint8Array(t);case Uint8Array:if(e.byteLength!==t.byteLength)return!1;for(let s=0;s<e.length;s++)if(e[s]!==t[s])return!1;break;case Set:if(e.size!==t.size)return!1;for(const s of e)if(!t.has(s))return!1;break;case Map:if(e.size!==t.size)return!1;for(const s of e.keys())if(!t.has(s)||!g(e.get(s),t.get(s)))return!1;break;case Object:if(f(e)!==f(t))return!1;for(const s in e)if(!p(e,s)||!g(e[s],t[s]))return!1;break;case Array:if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++)if(!g(e[s],t[s]))return!1;break;default:return!1}return!0});var m=s(907);const w=void 0!==m&&m.release&&/node|io\.js/.test(m.release.name)&&"[object process]"===Object.prototype.toString.call(void 0!==m?m:0),v="undefined"!=typeof window&&"undefined"!=typeof document&&!w;let b;"undefined"!=typeof navigator&&/Mac/.test(navigator.platform);const y=[],_=e=>(()=>{if(void 0===b)if(w){b=r();const e=m.argv;let t=null;for(let s=0;s<e.length;s++){const n=e[s];"-"===n[0]?(null!==t&&b.set(t,""),t=n):null!==t?(b.set(t,n),t=null):y.push(n)}null!==t&&b.set(t,"")}else"object"==typeof location?(b=r(),(location.search||"?").slice(1).split("&").forEach((e=>{if(0!==e.length){const[t,s]=e.split("=");b.set(`--${a.jN(t,"-")}`,s),b.set(`-${a.jN(t,"-")}`,s)}}))):b=r();return b})().has(e),I=e=>{return void 0===(t=w?m.env[e.toUpperCase().replaceAll("-","_")]:h.getItem(e))?null:t;var t},S=e=>_("--"+e)||null!==I(e);var k;S("production"),w&&(k=m.env.FORCE_COLOR,["true","1","2"].includes(k))||!_("--no-colors")&&!S("no-color")&&(!w||m.stdout.isTTY)&&(!w||_("--color")||null!==I("COLORTERM")||(I("TERM")||"").includes("color"));const C=v?e=>{let t="";for(let s=0;s<e.byteLength;s++)t+=a.QV(e[s]);return btoa(t)}:e=>Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("base64"),L=v?e=>{const t=atob(e),s=(n=t.length,new Uint8Array(n));var n;for(let e=0;e<t.length;e++)s[e]=t.charCodeAt(e);return s}:e=>{const t=Buffer.from(e,"base64");return s=t.buffer,n=t.byteOffset,r=t.byteLength,new Uint8Array(s,n,r);var s,n,r},U=new Map,T="undefined"==typeof BroadcastChannel?class{constructor(e){var t;this.room=e,this.onmessage=null,this._onChange=t=>t.key===e&&null!==this.onmessage&&this.onmessage({data:L(t.newValue||"")}),t=this._onChange,l||addEventListener("storage",t)}postMessage(e){h.setItem(this.room,C(new Uint8Array(e)))}close(){var e;e=this._onChange,l||removeEventListener("storage",e)}}:BroadcastChannel,x=e=>o(U,e,(()=>{const t=c(),s=new T(e);return s.onmessage=e=>t.forEach((t=>t(e.data,"broadcastchannel"))),{bc:s,subs:t}})),A=(e,t,s=null)=>{const n=x(e);n.bc.postMessage(t),n.subs.forEach((e=>e(t,s)))},z=Date.now;var E=s(214),O=s(734),R=s(801);const M=Number.MAX_SAFE_INTEGER,j=(Number.MIN_SAFE_INTEGER,O.vZ,O.CW,Number.isInteger,Number.isNaN,Number.parseInt,e=>new Error(e)),B=j("Unexpected end of array"),F=j("Integer out of Range");class N{constructor(e){this.arr=e,this.pos=0}}const D=e=>new N(e),H=e=>((e,t)=>{const s=new Uint8Array(e.arr.buffer,e.pos+e.arr.byteOffset,t);return e.pos+=t,s})(e,P(e)),G=e=>e.arr[e.pos++],P=e=>{let t=0,s=1;const n=e.arr.length;for(;e.pos<n;){const n=e.arr[e.pos++];if(t+=(n&O.WD)*s,s*=128,n<O.wt)return t;if(t>M)throw F}throw B},W=a.tv?e=>a.tv.decode(H(e)):e=>{let t=P(e);if(0===t)return"";{let s=String.fromCodePoint(G(e));if(--t<100)for(;t--;)s+=String.fromCodePoint(G(e));else for(;t>0;){const n=t<1e4?t:1e4,r=e.arr.subarray(e.pos,e.pos+n);e.pos+=n,s+=String.fromCodePoint.apply(null,r),t-=n}return decodeURIComponent(escape(s))}},$=(e,t)=>{E.zd(e,0);const s=n.encodeStateVector(t);E.Gu(e,s)},Q=(e,t,s)=>{E.zd(e,1),E.Gu(e,n.encodeStateAsUpdate(t,s))},V=(e,t,s)=>{try{n.applyUpdate(t,H(e),s)}catch(e){console.error("Caught error while handling a Yjs update",e)}},J=V;class Y{constructor(){this._observers=r()}on(e,t){o(this._observers,e,c).add(t)}once(e,t){const s=(...n)=>{this.off(e,s),t(...n)};this.on(e,s)}off(e,t){const s=this._observers.get(e);void 0!==s&&(s.delete(t),0===s.size&&this._observers.delete(e))}emit(e,t){return d((this._observers.get(e)||r()).values()).forEach((e=>e(...t)))}destroy(){this._observers=r()}}class X extends Y{constructor(e){super(),this.doc=e,this.clientID=e.clientID,this.states=new Map,this.meta=new Map,this._checkInterval=setInterval((()=>{const e=z();null!==this.getLocalState()&&15e3<=e-this.meta.get(this.clientID).lastUpdated&&this.setLocalState(this.getLocalState());const t=[];this.meta.forEach(((s,n)=>{n!==this.clientID&&3e4<=e-s.lastUpdated&&this.states.has(n)&&t.push(n)})),t.length>0&&Z(this,t,"timeout")}),R.RI(3e3)),e.on("destroy",(()=>{this.destroy()})),this.setLocalState({})}destroy(){this.emit("destroy",[this]),this.setLocalState(null),super.destroy(),clearInterval(this._checkInterval)}getLocalState(){return this.states.get(this.clientID)||null}setLocalState(e){const t=this.clientID,s=this.meta.get(t),n=void 0===s?0:s.clock+1,r=this.states.get(t);null===e?this.states.delete(t):this.states.set(t,e),this.meta.set(t,{clock:n,lastUpdated:z()});const o=[],c=[],a=[],i=[];null===e?i.push(t):null==r?null!=e&&o.push(t):(c.push(t),g(r,e)||a.push(t)),(o.length>0||a.length>0||i.length>0)&&this.emit("change",[{added:o,updated:a,removed:i},"local"]),this.emit("update",[{added:o,updated:c,removed:i},"local"])}setLocalStateField(e,t){const s=this.getLocalState();null!==s&&this.setLocalState({...s,[e]:t})}getStates(){return this.states}}const Z=(e,t,s)=>{const n=[];for(let s=0;s<t.length;s++){const r=t[s];if(e.states.has(r)){if(e.states.delete(r),r===e.clientID){const t=e.meta.get(r);e.meta.set(r,{clock:t.clock+1,lastUpdated:z()})}n.push(r)}}n.length>0&&(e.emit("change",[{added:[],updated:[],removed:n},s]),e.emit("update",[{added:[],updated:[],removed:n},s]))},q=(e,t,s=e.states)=>{const n=t.length,r=E.xv();E.zd(r,n);for(let o=0;o<n;o++){const n=t[o],c=s.get(n)||null,a=e.meta.get(n).clock;E.zd(r,n),E.zd(r,a),E.Qj(r,JSON.stringify(c))}return E.Fo(r)};var K=s(907);const ee=0,te=3,se=1,ne=2,re=[];re[ee]=(e,t,s,n,r)=>{E.zd(e,ee);const o=((e,t,s,n)=>{const r=P(e);switch(r){case 0:((e,t,s)=>{Q(t,s,H(e))})(e,t,s);break;case 1:V(e,s,n);break;case 2:J(e,s,n);break;default:throw new Error("Unknown message type")}return r})(t,e,s.doc,s);n&&1===o&&!s.synced&&(s.synced=!0)},re[te]=(e,t,s,n,r)=>{E.zd(e,se),E.Gu(e,q(s.awareness,Array.from(s.awareness.getStates().keys())))},re[se]=(e,t,s,n,r)=>{((e,t,s)=>{const n=D(t),r=z(),o=[],c=[],a=[],i=[],l=P(n);for(let t=0;t<l;t++){const t=P(n);let s=P(n);const l=JSON.parse(W(n)),h=e.meta.get(t),d=e.states.get(t),u=void 0===h?0:h.clock;(u<s||u===s&&null===l&&e.states.has(t))&&(null===l?t===e.clientID&&null!=e.getLocalState()?s++:e.states.delete(t):e.states.set(t,l),e.meta.set(t,{clock:s,lastUpdated:r}),void 0===h&&null!==l?o.push(t):void 0!==h&&null===l?i.push(t):null!==l&&(g(l,d)||a.push(t),c.push(t)))}(o.length>0||a.length>0||i.length>0)&&e.emit("change",[{added:o,updated:a,removed:i},s]),(o.length>0||c.length>0||i.length>0)&&e.emit("update",[{added:o,updated:c,removed:i},s])})(s.awareness,H(t),s)},re[ne]=(e,t,s,n,r)=>{((e,t,s)=>{0===P(e)&&s(0,W(e))})(t,s.doc,((e,t)=>oe(s,t)))};const oe=(e,t)=>console.warn(`Permission denied to access ${e.url}.\n${t}`),ce=(e,t,s)=>{const n=D(t),r=E.xv(),o=P(n),c=e.messageHandlers[o];return c?c(r,n,e,s,o):console.error("Unable to compute message"),r},ae=e=>{if(e.shouldConnect&&null===e.ws){const t=new e._WS(e.url);t.binaryType="arraybuffer",e.ws=t,e.wsconnecting=!0,e.wsconnected=!1,e.synced=!1,t.onmessage=s=>{e.wsLastMessageReceived=z();const n=ce(e,new Uint8Array(s.data),!0);E.Bw(n)>1&&t.send(E.Fo(n))},t.onerror=t=>{e.emit("connection-error",[t,e])},t.onclose=t=>{e.emit("connection-close",[t,e]),e.ws=null,e.wsconnecting=!1,e.wsconnected?(e.wsconnected=!1,e.synced=!1,Z(e.awareness,Array.from(e.awareness.getStates().keys()).filter((t=>t!==e.doc.clientID)),e),e.emit("status",[{status:"disconnected"}])):e.wsUnsuccessfulReconnects++,setTimeout(ae,R.jk(100*R.n7(2,e.wsUnsuccessfulReconnects),e.maxBackoffTime),e)},t.onopen=()=>{e.wsLastMessageReceived=z(),e.wsconnecting=!1,e.wsconnected=!0,e.wsUnsuccessfulReconnects=0,e.emit("status",[{status:"connected"}]);const s=E.xv();if(E.zd(s,ee),$(s,e.doc),t.send(E.Fo(s)),null!==e.awareness.getLocalState()){const s=E.xv();E.zd(s,se),E.Gu(s,q(e.awareness,[e.doc.clientID])),t.send(E.Fo(s))}},e.emit("status",[{status:"connecting"}])}},ie=(e,t)=>{const s=e.ws;e.wsconnected&&s&&s.readyState===s.OPEN&&s.send(t),e.bcconnected&&A(e.bcChannel,t,e)};class le extends Y{constructor(e,t,s,{connect:n=!0,awareness:r=new X(s),params:o={},WebSocketPolyfill:c=WebSocket,resyncInterval:a=-1,maxBackoffTime:i=2500,disableBc:l=!1}={}){for(super();"/"===e[e.length-1];)e=e.slice(0,e.length-1);const h=(e=>((e,t)=>{const s=[];for(const n in e)s.push(t(e[n],n));return s})(e,((e,t)=>`${encodeURIComponent(t)}=${encodeURIComponent(e)}`)).join("&"))(o);this.maxBackoffTime=i,this.bcChannel=e+"/"+t,this.url=e+"/"+t+(0===h.length?"":"?"+h),this.roomname=t,this.doc=s,this._WS=c,this.awareness=r,this.wsconnected=!1,this.wsconnecting=!1,this.bcconnected=!1,this.disableBc=l,this.wsUnsuccessfulReconnects=0,this.messageHandlers=re.slice(),this._synced=!1,this.ws=null,this.wsLastMessageReceived=0,this.shouldConnect=n,this._resyncInterval=0,a>0&&(this._resyncInterval=setInterval((()=>{if(this.ws&&this.ws.readyState===WebSocket.OPEN){const e=E.xv();E.zd(e,ee),$(e,s),this.ws.send(E.Fo(e))}}),a)),this._bcSubscriber=(e,t)=>{if(t!==this){const t=ce(this,new Uint8Array(e),!1);E.Bw(t)>1&&A(this.bcChannel,E.Fo(t),this)}},this._updateHandler=(e,t)=>{if(t!==this){const t=E.xv();E.zd(t,ee),((e,t)=>{E.zd(e,2),E.Gu(e,t)})(t,e),ie(this,E.Fo(t))}},this.doc.on("update",this._updateHandler),this._awarenessUpdateHandler=({added:e,updated:t,removed:s},n)=>{const o=e.concat(t).concat(s),c=E.xv();E.zd(c,se),E.Gu(c,q(r,o)),ie(this,E.Fo(c))},this._exitHandler=()=>{Z(this.awareness,[s.clientID],"app closed")},w&&void 0!==K&&K.on("exit",this._exitHandler),r.on("update",this._awarenessUpdateHandler),this._checkInterval=setInterval((()=>{this.wsconnected&&3e4<z()-this.wsLastMessageReceived&&this.ws.close()}),3e3),n&&this.connect()}get synced(){return this._synced}set synced(e){this._synced!==e&&(this._synced=e,this.emit("synced",[e]),this.emit("sync",[e]))}destroy(){0!==this._resyncInterval&&clearInterval(this._resyncInterval),clearInterval(this._checkInterval),this.disconnect(),w&&void 0!==K&&K.off("exit",this._exitHandler),this.awareness.off("update",this._awarenessUpdateHandler),this.doc.off("update",this._updateHandler),super.destroy()}connectBc(){if(this.disableBc)return;var e,t;this.bcconnected||(e=this.bcChannel,t=this._bcSubscriber,x(e).subs.add(t),this.bcconnected=!0);const s=E.xv();E.zd(s,ee),$(s,this.doc),A(this.bcChannel,E.Fo(s),this);const n=E.xv();E.zd(n,ee),Q(n,this.doc),A(this.bcChannel,E.Fo(n),this);const r=E.xv();E.zd(r,te),A(this.bcChannel,E.Fo(r),this);const o=E.xv();E.zd(o,se),E.Gu(o,q(this.awareness,[this.doc.clientID])),A(this.bcChannel,E.Fo(o),this)}disconnectBc(){const e=E.xv();E.zd(e,se),E.Gu(e,q(this.awareness,[this.doc.clientID],new Map)),ie(this,E.Fo(e)),this.bcconnected&&(((e,t)=>{const s=x(e);s.subs.delete(t)&&0===s.subs.size&&(s.bc.close(),U.delete(e))})(this.bcChannel,this._bcSubscriber),this.bcconnected=!1)}disconnect(){this.shouldConnect=!1,this.disconnectBc(),null!==this.ws&&this.ws.close()}connect(){this.shouldConnect=!0,this.wsconnected||null!==this.ws||(ae(this),this.connectBc())}}}}]);
@@ -1 +0,0 @@
1
- var _JUPYTERLAB;(()=>{"use strict";var e,r,t,o,a,n,i,l,u,s,d,f,c,p,v,h,b,y,m,g,j,w,P,S={496:(e,r,t)=>{var o={"./index":()=>Promise.all([t.e(655),t.e(634),t.e(703)]).then((()=>()=>t(703))),"./extension":()=>Promise.all([t.e(655),t.e(634),t.e(703)]).then((()=>()=>t(703))),"./style":()=>t.e(944).then((()=>()=>t(944)))},a=(e,r)=>(t.R=r,r=t.o(o,e)?o[e]():Promise.resolve().then((()=>{throw new Error('Module "'+e+'" does not exist in container.')})),t.R=void 0,r),n=(e,r)=>{if(t.S){var o="default",a=t.S[o];if(a&&a!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[o]=e,t.I(o,r)}};t.d(r,{get:()=>a,init:()=>n})}},k={};function x(e){var r=k[e];if(void 0!==r)return r.exports;var t=k[e]={id:e,exports:{}};return S[e](t,t.exports,x),t.exports}x.m=S,x.c=k,x.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return x.d(r,{a:r}),r},x.d=(e,r)=>{for(var t in r)x.o(r,t)&&!x.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},x.f={},x.e=e=>Promise.all(Object.keys(x.f).reduce(((r,t)=>(x.f[t](e,r),r)),[])),x.u=e=>e+"."+{214:"2160426d16ac167727f7",240:"5e91adb83233ee07fcd1",444:"13de0fd44849e3f7d780",703:"186bb4136d33d6e39c11",753:"3e2a3c497c97d57fb828",944:"eaec77f5cee3f07c3b7f"}[e]+".js?v="+{214:"2160426d16ac167727f7",240:"5e91adb83233ee07fcd1",444:"13de0fd44849e3f7d780",703:"186bb4136d33d6e39c11",753:"3e2a3c497c97d57fb828",944:"eaec77f5cee3f07c3b7f"}[e],x.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),x.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="@jupyter/docprovider-extension:",x.l=(t,o,a,n)=>{if(e[t])e[t].push(o);else{var i,l;if(void 0!==a)for(var u=document.getElementsByTagName("script"),s=0;s<u.length;s++){var d=u[s];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==r+a){i=d;break}}i||(l=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,x.nc&&i.setAttribute("nonce",x.nc),i.setAttribute("data-webpack",r+a),i.src=t),e[t]=[o];var f=(r,o)=>{i.onerror=i.onload=null,clearTimeout(c);var a=e[t];if(delete e[t],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach((e=>e(o))),r)return r(o)},c=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),l&&document.head.appendChild(i)}},x.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{x.S={};var e={},r={};x.I=(t,o)=>{o||(o=[]);var a=r[t];if(a||(a=r[t]={}),!(o.indexOf(a)>=0)){if(o.push(a),e[t])return e[t];x.o(x.S,t)||(x.S[t]={});var n=x.S[t],i="@jupyter/docprovider-extension",l=(e,r,t,o)=>{var a=n[e]=n[e]||{},l=a[r];(!l||!l.loaded&&(!o!=!l.eager?o:i>l.from))&&(a[r]={get:t,from:i,eager:!!o})},u=[];return"default"===t&&(l("@jupyter/collaborative-drive","4.1.0-rc.0",(()=>Promise.all([x.e(262),x.e(444)]).then((()=>()=>x(444))))),l("@jupyter/docprovider-extension","4.1.0-rc.0",(()=>Promise.all([x.e(655),x.e(634),x.e(703)]).then((()=>()=>x(703))))),l("@jupyter/docprovider","4.1.0-rc.0",(()=>Promise.all([x.e(214),x.e(655),x.e(262),x.e(240)]).then((()=>()=>x(240))))),l("y-websocket","1.5.4",(()=>Promise.all([x.e(214),x.e(753),x.e(206)]).then((()=>()=>x(753)))))),e[t]=u.length?Promise.all(u).then((()=>e[t]=1)):1}}})(),(()=>{var e;x.g.importScripts&&(e=x.g.location+"");var r=x.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var o=t.length-1;o>-1&&(!e||!/^http(s?):/.test(e));)e=t[o--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),x.p=e})(),t=e=>{var r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),o=t[1]?r(t[1]):[];return t[2]&&(o.length++,o.push.apply(o,r(t[2]))),t[3]&&(o.push([]),o.push.apply(o,r(t[3]))),o},o=(e,r)=>{e=t(e),r=t(r);for(var o=0;;){if(o>=e.length)return o<r.length&&"u"!=(typeof r[o])[0];var a=e[o],n=(typeof a)[0];if(o>=r.length)return"u"==n;var i=r[o],l=(typeof i)[0];if(n!=l)return"o"==n&&"n"==l||"s"==l||"u"==n;if("o"!=n&&"u"!=n&&a!=i)return a<i;o++}},a=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var o=1,n=1;n<e.length;n++)o--,t+="u"==(typeof(l=e[n]))[0]?"-":(o>0?".":"")+(o=2,l);return t}var i=[];for(n=1;n<e.length;n++){var l=e[n];i.push(0===l?"not("+u()+")":1===l?"("+u()+" || "+u()+")":2===l?i.pop()+" "+i.pop():a(l))}return u();function u(){return i.pop().replace(/^\((.+)\)$/,"$1")}},n=(e,r)=>{if(0 in e){r=t(r);var o=e[0],a=o<0;a&&(o=-o-1);for(var i=0,l=1,u=!0;;l++,i++){var s,d,f=l<e.length?(typeof e[l])[0]:"";if(i>=r.length||"o"==(d=(typeof(s=r[i]))[0]))return!u||("u"==f?l>o&&!a:""==f!=a);if("u"==d){if(!u||"u"!=f)return!1}else if(u)if(f==d)if(l<=o){if(s!=e[l])return!1}else{if(a?s>e[l]:s<e[l])return!1;s!=e[l]&&(u=!1)}else if("s"!=f&&"n"!=f){if(a||l<=o)return!1;u=!1,l--}else{if(l<=o||d<f!=a)return!1;u=!1}else"s"!=f&&"n"!=f&&(u=!1,l--)}}var c=[],p=c.pop.bind(c);for(i=1;i<e.length;i++){var v=e[i];c.push(1==v?p()|p():2==v?p()&p():v?n(v,r):!p())}return!!p()},i=(e,r)=>e&&x.o(e,r),l=e=>(e.loaded=1,e.get()),u=e=>Object.keys(e).reduce(((r,t)=>(e[t].eager&&(r[t]=e[t]),r)),{}),s=(e,r,t,a)=>{var i=a?u(e[r]):e[r];return(r=Object.keys(i).reduce(((e,r)=>!n(t,r)||e&&!o(e,r)?e:r),0))&&i[r]},d=(e,r,t)=>{var a=t?u(e[r]):e[r];return Object.keys(a).reduce(((e,r)=>!e||!a[e].loaded&&o(e,r)?r:e),0)},f=(e,r,t,o)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+a(o)+")",c=(e,r,t,o,n)=>{var i=e[t];return"No satisfying version ("+a(o)+")"+(n?" for eager consumption":"")+" of shared module "+t+" found in shared scope "+r+".\nAvailable versions: "+Object.keys(i).map((e=>e+" from "+i[e].from)).join(", ")},p=e=>{throw new Error(e)},v=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},b=(e,r,t)=>t?t():((e,r)=>p("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),y=(h=e=>function(r,t,o,a,n){var i=x.I(r);return i&&i.then&&!o?i.then(e.bind(e,r,x.S[r],t,!1,a,n)):e(r,x.S[r],t,o,a,n)})(((e,r,t,o,a,n)=>{if(!i(r,t))return b(e,t,n);var u=s(r,t,a,o);return u?l(u):n?n():void p(c(r,e,t,a,o))})),m=h(((e,r,t,o,a,u)=>{if(!i(r,t))return b(e,t,u);var s=d(r,t,o);return n(a,s)||v(f(r,t,s,a)),l(r[t][s])})),g={},j={560:()=>m("default","@jupyterlab/apputils",!1,[1,4,5,3]),689:()=>m("default","@jupyterlab/coreutils",!1,[1,6,4,3]),918:()=>m("default","@jupyterlab/translation",!1,[1,4,4,3]),0:()=>m("default","@jupyter/ydoc",!1,[1,3,0,0,,"a3"]),88:()=>m("default","@jupyterlab/notebook",!1,[1,4,4,3]),199:()=>m("default","@jupyter/collaborative-drive",!1,[1,4,1,0,,"rc",0],(()=>Promise.all([x.e(262),x.e(444)]).then((()=>()=>x(444))))),256:()=>m("default","@lumino/widgets",!1,[1,2,3,1,,"alpha",0]),458:()=>m("default","@jupyterlab/logconsole",!1,[1,4,4,3]),506:()=>m("default","@jupyterlab/statusbar",!1,[1,4,4,3]),534:()=>m("default","@jupyterlab/fileeditor",!1,[1,4,4,3]),542:()=>m("default","@jupyterlab/settingregistry",!1,[1,4,4,3]),925:()=>m("default","@jupyter/docprovider",!1,[1,4,1,0,,"rc",0],(()=>Promise.all([x.e(214),x.e(262),x.e(240)]).then((()=>()=>x(240))))),262:()=>m("default","@lumino/coreutils",!1,[1,2,0,0]),179:()=>y("default","y-websocket",!1,[1,1,3,15],(()=>Promise.all([x.e(753),x.e(206)]).then((()=>()=>x(753))))),186:()=>m("default","@jupyterlab/services",!1,[1,7,4,3]),345:()=>m("default","react",!1,[1,18,2,0]),484:()=>m("default","@jupyterlab/ui-components",!1,[1,4,4,3]),602:()=>m("default","@lumino/signaling",!1,[1,2,0,0]),206:()=>m("default","yjs",!1,[1,13,5,40])},w={206:[206],240:[179,186,345,484,602],262:[262],634:[0,88,199,256,458,506,534,542,925],655:[560,689,918]},P={},x.f.consumes=(e,r)=>{x.o(w,e)&&w[e].forEach((e=>{if(x.o(g,e))return r.push(g[e]);if(!P[e]){var t=r=>{g[e]=0,x.m[e]=t=>{delete x.c[e],t.exports=r()}};P[e]=!0;var o=r=>{delete g[e],x.m[e]=t=>{throw delete x.c[e],r}};try{var a=j[e]();a.then?r.push(g[e]=a.then(t).catch(o)):t(a)}catch(e){o(e)}}}))},(()=>{var e={552:0};x.f.j=(r,t)=>{var o=x.o(e,r)?e[r]:void 0;if(0!==o)if(o)t.push(o[2]);else if(/^(206|262|634|655)$/.test(r))e[r]=0;else{var a=new Promise(((t,a)=>o=e[r]=[t,a]));t.push(o[2]=a);var n=x.p+x.u(r),i=new Error;x.l(n,(t=>{if(x.o(e,r)&&(0!==(o=e[r])&&(e[r]=void 0),o)){var a=t&&("load"===t.type?"missing":t.type),n=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+a+": "+n+")",i.name="ChunkLoadError",i.type=a,i.request=n,o[1](i)}}),"chunk-"+r,r)}};var r=(r,t)=>{var o,a,[n,i,l]=t,u=0;if(n.some((r=>0!==e[r]))){for(o in i)x.o(i,o)&&(x.m[o]=i[o]);l&&l(x)}for(r&&r(t);u<n.length;u++)a=n[u],x.o(e,a)&&e[a]&&e[a][0](),e[a]=0},t=self.webpackChunk_jupyter_docprovider_extension=self.webpackChunk_jupyter_docprovider_extension||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),x.nc=void 0;var E=x(496);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["@jupyter/docprovider-extension"]=E})();