@marimo-team/islands 0.25.3-dev205 → 0.25.3-dev207
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.
- package/dist/{ConnectedDataExplorerComponent-DFynurqb.js → ConnectedDataExplorerComponent-ApTYh0V3.js} +4 -4
- package/dist/{ErrorBoundary-OPdycBFt.js → ErrorBoundary-DV6q3WpD.js} +2 -2
- package/dist/{abnfDiagram-VCTEODGH-DGkUyNdz.js → abnfDiagram-VCTEODGH-uo9xhZY0.js} +2 -2
- package/dist/{architectureDiagram-5GKGNRK7-Bav9J7uF.js → architectureDiagram-5GKGNRK7-Hz6eyeOD.js} +1 -1
- package/dist/assets/__vite-browser-external-CBRgnYY0.js +1 -0
- package/dist/assets/{worker-DodjWT_Z.js → worker-DiPNP__U.js} +2 -2
- package/dist/{chat-ui-Dorq26Pp.js → chat-ui-BTA1I5i1.js} +7 -7
- package/dist/{chunk-IMKFNOWR-1UCTsTqh.js → chunk-IMKFNOWR-DBM2i23k.js} +1 -1
- package/dist/{chunk-SHT3W25Y-Bige_rTb.js → chunk-SHT3W25Y-L8KQLLBy.js} +1 -1
- package/dist/{chunk-SVP7TREG-Cmr0Anfb.js → chunk-SVP7TREG-BOUJKJEP.js} +1 -1
- package/dist/{chunk-TICWLB2K-IWykFldb.js → chunk-TICWLB2K-DY3CzFjX.js} +1 -1
- package/dist/{classDiagram-ZZMXUADV-BH73ECRQ.js → classDiagram-ZZMXUADV-s9iwW-q4.js} +2 -2
- package/dist/{classDiagram-v2-VYDZK3BY-CCuCgq0H.js → classDiagram-v2-VYDZK3BY-2GI5CjGB.js} +2 -2
- package/dist/{code-visibility-DBpgJeRK.js → code-visibility-DLj8SFEM.js} +4 -4
- package/dist/{common-DZdZhBUN.js → common-BEiP9-YB.js} +9 -9
- package/dist/{cynefinDiagram-5FMLGOSQ-CWtL7MIJ.js → cynefinDiagram-5FMLGOSQ-DOxnhBK2.js} +1 -1
- package/dist/{dagre-GXQ25YYZ-DsVO2pVC.js → dagre-GXQ25YYZ-D1AhEfpM.js} +1 -1
- package/dist/{data-grid-overlay-editor-aBSCgI7f.js → data-grid-overlay-editor-Bt6VgNDi.js} +1 -1
- package/dist/{diagram-S7CK7UJ4-BuAktgZv.js → diagram-S7CK7UJ4-DV_GebF_.js} +1 -1
- package/dist/{diagram-UQ7AKVKN-DlkAXHu5.js → diagram-UQ7AKVKN-6dNzGFfD.js} +1 -1
- package/dist/{diagram-VX7I27RA-B9U9H0E8.js → diagram-VX7I27RA-DUh9jsfi.js} +1 -1
- package/dist/{diagram-Z3DM3KII-BqmfxzUL.js → diagram-Z3DM3KII-Cug-qcQ8.js} +1 -1
- package/dist/{dropdown-menu-BFQYzWmC.js → dropdown-menu-dlEm41Bt.js} +1 -1
- package/dist/{ebnfDiagram-PWID7BFC-CH5t8ATi.js → ebnfDiagram-PWID7BFC-d5LKx7Vb.js} +2 -2
- package/dist/{erDiagram-RLTQ6QDP-DdIo2BIb.js → erDiagram-RLTQ6QDP-BwvlkcID.js} +1 -1
- package/dist/{error-entries-B0bcEwXm.js → error-entries-CVUHA5r_.js} +3875 -3884
- package/dist/{feedback-button-DOT-sr6d.js → feedback-button-Dd87gzc6.js} +5 -5
- package/dist/{flowDiagram-HODETNUW-BmYk_-Na.js → flowDiagram-HODETNUW-CJcSoFer.js} +2 -2
- package/dist/{formats-DyYnckF5.js → formats-Ry7c-aIV.js} +1 -1
- package/dist/{glide-data-editor-wPaUwYJ-.js → glide-data-editor-CW4LOU-D.js} +5 -5
- package/dist/{globals-iMXhFlx_.js → globals-D3AhIN1i.js} +2 -2
- package/dist/{html-to-image-BOd7ryZJ.js → html-to-image--E3uFbJ9.js} +5 -5
- package/dist/{infoDiagram-27XIBGKW-DvYh-Sbk.js → infoDiagram-27XIBGKW-Cezgppw3.js} +1 -1
- package/dist/{ishikawaDiagram-5VMMS53U-BdHnYq8s.js → ishikawaDiagram-5VMMS53U-BahZQwJz.js} +1 -1
- package/dist/{kanban-definition-UXKFOSKX-Bf8CT_tU.js → kanban-definition-UXKFOSKX-Cvfn_Obm.js} +1 -1
- package/dist/main.js +22 -22
- package/dist/{mermaid-DBpOnw8c.js → mermaid-BrdwbArF.js} +34 -34
- package/dist/{mindmap-definition-YA3MSWOX-DkYG8ltR.js → mindmap-definition-YA3MSWOX-uB4B2d-J.js} +1 -1
- package/dist/{number-overlay-editor-CmrlqczC.js → number-overlay-editor-klVnf90Q.js} +1 -1
- package/dist/{pegDiagram-XKGWAZYB-DM7BQ0ip.js → pegDiagram-XKGWAZYB-CYaIwAmH.js} +2 -2
- package/dist/{pieDiagram-E7YTZNPT-CPFGg4YS.js → pieDiagram-E7YTZNPT-BJ1oUxVv.js} +1 -1
- package/dist/{process-output-8BbxxGrz.js → process-output-SjJxB1wh.js} +2 -2
- package/dist/{railroadDiagram-O6MQD6OU-4rUJlIpQ.js → railroadDiagram-O6MQD6OU-BqKSaBux.js} +2 -2
- package/dist/{requirementDiagram-BXWQKSXE-F6ffUUQC.js → requirementDiagram-BXWQKSXE-DwFhgDhH.js} +1 -1
- package/dist/{reveal-component-W-rBMqdU.js → reveal-component-CS16WNwA.js} +6 -6
- package/dist/{sequenceDiagram-WJ2MYXX4-tNU95HVS.js → sequenceDiagram-WJ2MYXX4-L7ENjfKF.js} +1 -1
- package/dist/{spec-Alkla7dB.js → spec-BcJ9ncAY.js} +1 -1
- package/dist/{stateDiagram-D77RDMKH-BA8Modqv.js → stateDiagram-D77RDMKH-CVf88u-p.js} +2 -2
- package/dist/{stateDiagram-v2-MP3YSRHH-CFmickht.js → stateDiagram-v2-MP3YSRHH-DvpkQ1V6.js} +2 -2
- package/dist/style.css +1 -1
- package/dist/{swimlanes-42K2YHIH-DBiYZZZc.js → swimlanes-42K2YHIH-DIuFHbVE.js} +1 -1
- package/dist/{swimlanesDiagram-VR7AAH4N-CsgR851k.js → swimlanesDiagram-VR7AAH4N-CAqHAziW.js} +2 -2
- package/dist/{timeline-definition-24CTP7MA-Dfj0CMXY.js → timeline-definition-24CTP7MA-xO4EQqBm.js} +1 -1
- package/dist/{toDate-B0-Y0SEW.js → toDate-BZZ64K_m.js} +1 -5
- package/dist/{useAsyncData-Phxf6GCd.js → useAsyncData-Dqw22wZQ.js} +1 -1
- package/dist/{useDeepCompareMemoize-BXv7DUcU.js → useDeepCompareMemoize-D3gozcjJ.js} +1 -1
- package/dist/{useLifecycle-DDDsO4O2.js → useLifecycle-CaZi4wTw.js} +1 -1
- package/dist/{useTheme-DbBkeP6Z.js → useTheme-TzPgWXwB.js} +1 -4
- package/dist/{vega-component-C_dhEynE.js → vega-component-Blvspl7v.js} +5 -5
- package/dist/{vennDiagram-4TSXK5OY-fJ83Z7FE.js → vennDiagram-4TSXK5OY-DzCi-lRh.js} +1 -1
- package/dist/{wardleyDiagram-VM6X3IG4-DbO9cD15.js → wardleyDiagram-VM6X3IG4-CW48xa0n.js} +1 -1
- package/dist/{xychartDiagram-S5SC5T6Z-DmsdQJG7.js → xychartDiagram-S5SC5T6Z-UPxGGI2B.js} +1 -1
- package/package.json +2 -6
- package/src/components/app-config/user-config-form.tsx +0 -26
- package/src/components/editor/cell/code/cell-editor.tsx +11 -100
- package/src/components/editor/chrome/wrapper/footer.tsx +0 -2
- package/src/core/cells/__tests__/document.test.ts +0 -18
- package/src/core/cells/document.ts +6 -9
- package/src/core/codemirror/cells/__tests__/extensions.test.ts +1 -46
- package/src/core/codemirror/cells/extensions.ts +1 -19
- package/src/core/config/config-schema.ts +0 -1
- package/src/core/config/feature-flag.tsx +0 -2
- package/src/core/runtime/__tests__/runtime.test.ts +0 -16
- package/src/core/runtime/runtime.ts +0 -8
- package/src/css/app/codemirror.css +1 -1
- package/dist/assets/__vite-browser-external-BCJsx8QS.js +0 -1
- package/src/components/editor/cell/code/__tests__/rtc-editor-config.test.ts +0 -50
- package/src/components/editor/chrome/wrapper/footer-items/rtc-status.tsx +0 -65
- package/src/core/codemirror/rtc/extension.ts +0 -464
- package/src/core/codemirror/rtc/loro/__tests__/sync.test.ts +0 -52
- package/src/core/codemirror/rtc/loro/awareness.ts +0 -546
- package/src/core/codemirror/rtc/loro/colors.ts +0 -38
- package/src/core/codemirror/rtc/loro/sync.ts +0 -169
- package/src/core/rtc/state.ts +0 -34
|
@@ -9,7 +9,7 @@ import "./chunk-4HAMMTFA-D4eFPyFh.js";
|
|
|
9
9
|
import "./chunk-GVQU2GXP-Cwbt-lF0.js";
|
|
10
10
|
import "./chunk-L3NEJ4N5-n-zgIVSy.js";
|
|
11
11
|
import { o as n } from "./chunk-OSK3NFVY-DXa-Cxbn.js";
|
|
12
|
-
import { c as r } from "./mermaid-
|
|
12
|
+
import { c as r } from "./mermaid-BrdwbArF.js";
|
|
13
13
|
//#region ../node_modules/.pnpm/mermaid@11.17.2/node_modules/mermaid/dist/chunks/mermaid.core/swimlanes-42K2YHIH.mjs
|
|
14
14
|
var i = 5, a = 1e-5, o = 1e-6;
|
|
15
15
|
function s(e) {
|
package/dist/{swimlanesDiagram-VR7AAH4N-CsgR851k.js → swimlanesDiagram-VR7AAH4N-CAqHAziW.js}
RENAMED
|
@@ -9,11 +9,11 @@ import "./chunk-4HAMMTFA-D4eFPyFh.js";
|
|
|
9
9
|
import "./chunk-GVQU2GXP-Cwbt-lF0.js";
|
|
10
10
|
import "./chunk-L3NEJ4N5-n-zgIVSy.js";
|
|
11
11
|
import "./chunk-OSK3NFVY-DXa-Cxbn.js";
|
|
12
|
-
import "./mermaid-
|
|
12
|
+
import "./mermaid-BrdwbArF.js";
|
|
13
13
|
import "./chunk-F27PBJKO-ufseIn5y.js";
|
|
14
14
|
import "./chunk-XXDRQBXY-Dnl5VBqG.js";
|
|
15
15
|
import "./chunk-POPQ4Y6H-hYOXbYH_.js";
|
|
16
|
-
import { r as t, t as n } from "./chunk-SHT3W25Y-
|
|
16
|
+
import { r as t, t as n } from "./chunk-SHT3W25Y-L8KQLLBy.js";
|
|
17
17
|
//#region ../node_modules/.pnpm/mermaid@11.17.2/node_modules/mermaid/dist/chunks/mermaid.core/swimlanesDiagram-VR7AAH4N.mjs
|
|
18
18
|
var r = n({
|
|
19
19
|
defaultLayout: "swimlane",
|
package/dist/{timeline-definition-24CTP7MA-Dfj0CMXY.js → timeline-definition-24CTP7MA-xO4EQqBm.js}
RENAMED
|
@@ -3,7 +3,7 @@ import { p as t } from "./chunk-75Z2AOVW-D7gxIs2Q.js";
|
|
|
3
3
|
import { n, t as r } from "./src-CA_m4ONl.js";
|
|
4
4
|
import { n as i, t as a } from "./chunk-Y2CYZVJY-DKKS1VyV.js";
|
|
5
5
|
import { $ as o, J as s, a as c, b as l, et as u, nt as d, o as f, x as p } from "./chunk-DU6HZSFF-BwiyaNpg.js";
|
|
6
|
-
import { p as m } from "./mermaid-
|
|
6
|
+
import { p as m } from "./mermaid-BrdwbArF.js";
|
|
7
7
|
//#region ../node_modules/.pnpm/mermaid@11.17.2/node_modules/mermaid/dist/chunks/mermaid.core/timeline-definition-24CTP7MA.mjs
|
|
8
8
|
var h = (function() {
|
|
9
9
|
var e = /* @__PURE__ */ i(function(e, t, n, r) {
|
|
@@ -2,7 +2,7 @@ import { t as e } from "./rolldown-runtime-Cb76FRpK.js";
|
|
|
2
2
|
import { g as t } from "./button-BQRdqQi1.js";
|
|
3
3
|
import { t as n } from "./compiler-runtime-CldRdSsv.js";
|
|
4
4
|
import { m as r } from "./tooltip-s4zZxwKe.js";
|
|
5
|
-
import { F as i, M as a, a as o, b as s, o as c } from "./useTheme-
|
|
5
|
+
import { F as i, M as a, a as o, b as s, o as c } from "./useTheme-TzPgWXwB.js";
|
|
6
6
|
import { t as l } from "./invariant-DLmrl-hA.js";
|
|
7
7
|
var u = r("circle-question-mark", [
|
|
8
8
|
["circle", {
|
|
@@ -580,10 +580,6 @@ var G = new Set(Object.values(o)), K = class {
|
|
|
580
580
|
let t = this.formatHttpURL({ path: `/api/marimo/v1/notebooks/${encodeURIComponent(e)}` });
|
|
581
581
|
return t.searchParams.delete(o.accessToken), t;
|
|
582
582
|
}
|
|
583
|
-
getWsSyncURL(e) {
|
|
584
|
-
let t = this.getSessionURL("/ws_sync", e);
|
|
585
|
-
return q(this.appendCrossOriginAuth(t).toString());
|
|
586
|
-
}
|
|
587
583
|
getTerminalWsURL(e) {
|
|
588
584
|
let t = this.formatWsURL("/terminal/ws");
|
|
589
585
|
return e && (t.searchParams.set("rows", String(e.rows)), t.searchParams.set("cols", String(e.cols))), t;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
|
|
2
2
|
import { t } from "./react-sHtZdjeP.js";
|
|
3
3
|
import { t as n } from "./compiler-runtime-CldRdSsv.js";
|
|
4
|
-
import { R as r } from "./useTheme-
|
|
4
|
+
import { R as r } from "./useTheme-TzPgWXwB.js";
|
|
5
5
|
import { t as i } from "./invariant-DLmrl-hA.js";
|
|
6
6
|
//#region src/hooks/useAsyncData.ts
|
|
7
7
|
var a = n(), o = /* @__PURE__ */ e(t(), 1), s = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
|
|
2
2
|
import { t } from "./react-sHtZdjeP.js";
|
|
3
|
-
import { C as n } from "./useTheme-
|
|
3
|
+
import { C as n } from "./useTheme-TzPgWXwB.js";
|
|
4
4
|
//#region src/hooks/useDeepCompareMemoize.ts
|
|
5
5
|
var r = /* @__PURE__ */ e(t(), 1);
|
|
6
6
|
function i(e) {
|
|
@@ -4,7 +4,7 @@ import { t as i } from "./react-sHtZdjeP.js";
|
|
|
4
4
|
import { t as a } from "./compiler-runtime-CldRdSsv.js";
|
|
5
5
|
import { m as o } from "./tooltip-s4zZxwKe.js";
|
|
6
6
|
import { t as s } from "./jsx-runtime-3BD1kT0s.js";
|
|
7
|
-
import { F as c, N as l } from "./useTheme-
|
|
7
|
+
import { F as c, N as l } from "./useTheme-TzPgWXwB.js";
|
|
8
8
|
var u = o("calendar", [
|
|
9
9
|
["path", {
|
|
10
10
|
d: "M8 2v4",
|
|
@@ -910,10 +910,7 @@ var rt = F((e) => {
|
|
|
910
910
|
custom_models: []
|
|
911
911
|
})
|
|
912
912
|
}).prefault({}),
|
|
913
|
-
experimental: s({
|
|
914
|
-
markdown: p().optional(),
|
|
915
|
-
rtc: p().optional()
|
|
916
|
-
}).prefault(() => ({})),
|
|
913
|
+
experimental: s({ markdown: p().optional() }).prefault(() => ({})),
|
|
917
914
|
server: s({
|
|
918
915
|
disable_file_downloads: p().optional(),
|
|
919
916
|
transport: m(["websocket", "sse"]).optional()
|
|
@@ -3,20 +3,20 @@ import { g as t, h as n, m as r, o as i } from "./button-BQRdqQi1.js";
|
|
|
3
3
|
import { t as a } from "./react-sHtZdjeP.js";
|
|
4
4
|
import { t as o } from "./compiler-runtime-CldRdSsv.js";
|
|
5
5
|
import { t as s } from "./tooltip-s4zZxwKe.js";
|
|
6
|
-
import { C as c, a as l } from "./toDate-
|
|
6
|
+
import { C as c, a as l } from "./toDate-BZZ64K_m.js";
|
|
7
7
|
import { t as u } from "./jsx-runtime-3BD1kT0s.js";
|
|
8
8
|
import { n as d } from "./error-banner-DxJ3s8YO.js";
|
|
9
9
|
import { t as f } from "./debounce-C3jyATpc.js";
|
|
10
|
-
import { R as p, n as ee } from "./useTheme-
|
|
10
|
+
import { R as p, n as ee } from "./useTheme-TzPgWXwB.js";
|
|
11
11
|
import { t as te } from "./objects-DCmMvZtn.js";
|
|
12
12
|
import { a as m, t as h } from "./arrays-DoQ-AILx.js";
|
|
13
|
-
import { t as ne } from "./useAsyncData-
|
|
14
|
-
import { a as g, i as re, n as ie, t as ae } from "./formats-
|
|
13
|
+
import { t as ne } from "./useAsyncData-Dqw22wZQ.js";
|
|
14
|
+
import { a as g, i as re, n as ie, t as ae } from "./formats-Ry7c-aIV.js";
|
|
15
15
|
import { t as _ } from "./semaphore-89jsoHtS.js";
|
|
16
16
|
import { D as oe, n as se } from "./vega-loader.browser-B9Pz0EGP.js";
|
|
17
17
|
import { t as ce } from "./react-vega-C4T9Rb_w.js";
|
|
18
18
|
import { a as le, n as v } from "./loader-DOVB0Syl.js";
|
|
19
|
-
import { t as ue } from "./useDeepCompareMemoize-
|
|
19
|
+
import { t as ue } from "./useDeepCompareMemoize-D3gozcjJ.js";
|
|
20
20
|
import { t as de } from "./use-vega-container-remeasure-Bz4PZMtt.js";
|
|
21
21
|
//#region src/plugins/impl/vega/fix-relative-url.ts
|
|
22
22
|
var fe = /* @__PURE__ */ e(a(), 1), pe = o();
|
|
@@ -3,7 +3,7 @@ import { t } from "./src-CA_m4ONl.js";
|
|
|
3
3
|
import { n } from "./chunk-Y2CYZVJY-DKKS1VyV.js";
|
|
4
4
|
import { $ as r, H as i, K as a, U as o, a as s, b as c, c as l, et as u, f as d, nt as f, tt as p, v as m, w as h, y as g } from "./chunk-DU6HZSFF-BwiyaNpg.js";
|
|
5
5
|
import { t as _ } from "./rough.esm-CtV9AnV1.js";
|
|
6
|
-
import { p as v } from "./mermaid-
|
|
6
|
+
import { p as v } from "./mermaid-BrdwbArF.js";
|
|
7
7
|
//#region ../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/transparentize.js
|
|
8
8
|
var y = (e, t) => p(e, "a", -t), b = 1e-10;
|
|
9
9
|
function x(e, t) {
|
|
@@ -2,7 +2,7 @@ import { i as e } from "./chunk-75Z2AOVW-D7gxIs2Q.js";
|
|
|
2
2
|
import { n as t } from "./src-CA_m4ONl.js";
|
|
3
3
|
import { n } from "./chunk-Y2CYZVJY-DKKS1VyV.js";
|
|
4
4
|
import { D as r, H as i, K as a, U as o, a as s, b as c, c as l, v as u, w as d, x as f, y as p } from "./chunk-DU6HZSFF-BwiyaNpg.js";
|
|
5
|
-
import { p as m } from "./mermaid-
|
|
5
|
+
import { p as m } from "./mermaid-BrdwbArF.js";
|
|
6
6
|
import { n as h } from "./mermaid-parser.core-DxuSfYwJ.js";
|
|
7
7
|
import { t as g } from "./chunk-JWPE2WC7-DJvv1t8U.js";
|
|
8
8
|
//#region ../node_modules/.pnpm/mermaid@11.17.2/node_modules/mermaid/dist/chunks/mermaid.core/wardleyDiagram-VM6X3IG4.mjs
|
|
@@ -9,7 +9,7 @@ import { n as s } from "./chunk-Y2CYZVJY-DKKS1VyV.js";
|
|
|
9
9
|
import { D as c, H as l, K as u, U as d, a as f, b as p, c as m, f as h, v as g, w as _, y as v, z as y } from "./chunk-DU6HZSFF-BwiyaNpg.js";
|
|
10
10
|
import "./chunk-PWAF6VOD-CQw5qATZ.js";
|
|
11
11
|
import { t as b } from "./chunk-GMAD6QVW-BhaJx0X3.js";
|
|
12
|
-
import { p as x } from "./mermaid-
|
|
12
|
+
import { p as x } from "./mermaid-BrdwbArF.js";
|
|
13
13
|
//#region ../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/band.js
|
|
14
14
|
function S() {
|
|
15
15
|
var e = t().unknown(void 0), r = e.domain, i = e.range, o = 0, s = 1, c, l, u = !1, d = 0, f = 0, p = .5;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@marimo-team/islands",
|
|
3
|
-
"version": "0.25.3-
|
|
3
|
+
"version": "0.25.3-dev207",
|
|
4
4
|
"main": "dist/main.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -52,12 +52,12 @@
|
|
|
52
52
|
"@lezer/lr": "^1.4.10",
|
|
53
53
|
"@lezer/markdown": "^1.7.2",
|
|
54
54
|
"@lezer/python": "^1.1.19",
|
|
55
|
+
"@marimo-team/client": "workspace:*",
|
|
55
56
|
"@marimo-team/codemirror-ai": "^0.3.10",
|
|
56
57
|
"@marimo-team/codemirror-languageserver": "^2.0.1",
|
|
57
58
|
"@marimo-team/codemirror-mcp": "^0.1.7",
|
|
58
59
|
"@marimo-team/codemirror-sql": "^0.3.0",
|
|
59
60
|
"@marimo-team/llm-info": "workspace:*",
|
|
60
|
-
"@marimo-team/client": "workspace:*",
|
|
61
61
|
"@marimo-team/marimo-api": "workspace:*",
|
|
62
62
|
"@marimo-team/react-slotz": "^0.2.0",
|
|
63
63
|
"@marimo-team/smart-cells": "workspace:*",
|
|
@@ -111,13 +111,10 @@
|
|
|
111
111
|
"js-cookie": "^3.0.8",
|
|
112
112
|
"katex": "^0.18.7",
|
|
113
113
|
"lodash-es": "^4.18.1",
|
|
114
|
-
"loro-codemirror": "^0.3.3",
|
|
115
|
-
"loro-crdt": "^1.16.1",
|
|
116
114
|
"lucide-react": "^0.577.0",
|
|
117
115
|
"lz-string": "^1.5.0",
|
|
118
116
|
"marked": "^15.0.12",
|
|
119
117
|
"mermaid": "^11.17.2",
|
|
120
|
-
"partysocket": "1.3.0",
|
|
121
118
|
"path-to-regexp": "^8.4.2",
|
|
122
119
|
"plotly.js": "^3.7.0",
|
|
123
120
|
"pyodide": "314.0.0",
|
|
@@ -228,7 +225,6 @@
|
|
|
228
225
|
"tailwindcss": "^4.3.3",
|
|
229
226
|
"vega-typings": "^2.3.0",
|
|
230
227
|
"vite": "^8.3.4",
|
|
231
|
-
"vite-plugin-wasm": "^3.6.0",
|
|
232
228
|
"vitest": "^4.1.11",
|
|
233
229
|
"yaml": "^2.9.1"
|
|
234
230
|
}
|
|
@@ -23,7 +23,6 @@ import {
|
|
|
23
23
|
Form,
|
|
24
24
|
FormControl,
|
|
25
25
|
FormDescription,
|
|
26
|
-
FormField,
|
|
27
26
|
FormItem,
|
|
28
27
|
FormLabel,
|
|
29
28
|
FormMessage,
|
|
@@ -1293,31 +1292,6 @@ export const UserConfigForm: React.FC = () => {
|
|
|
1293
1292
|
notebook to take effect.
|
|
1294
1293
|
</p>
|
|
1295
1294
|
|
|
1296
|
-
<FormField
|
|
1297
|
-
control={form.control}
|
|
1298
|
-
name="experimental.rtc_v2"
|
|
1299
|
-
render={({ field }) => (
|
|
1300
|
-
<div className="flex flex-col gap-y-1">
|
|
1301
|
-
<FormItem className={formItemClasses}>
|
|
1302
|
-
<FormLabel className="font-normal">
|
|
1303
|
-
Real-Time Collaboration
|
|
1304
|
-
</FormLabel>
|
|
1305
|
-
<FormControl>
|
|
1306
|
-
<Checkbox
|
|
1307
|
-
data-testid="rtc-checkbox"
|
|
1308
|
-
checked={field.value === true}
|
|
1309
|
-
onCheckedChange={field.onChange}
|
|
1310
|
-
/>
|
|
1311
|
-
</FormControl>
|
|
1312
|
-
</FormItem>
|
|
1313
|
-
|
|
1314
|
-
<FormDescription>
|
|
1315
|
-
Enable experimental real-time collaboration. This change
|
|
1316
|
-
requires a page refresh to take effect.
|
|
1317
|
-
</FormDescription>
|
|
1318
|
-
</div>
|
|
1319
|
-
)}
|
|
1320
|
-
/>
|
|
1321
1295
|
<OverriddenFormField
|
|
1322
1296
|
control={form.control}
|
|
1323
1297
|
name="experimental.external_agents"
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
import { historyField } from "@codemirror/commands";
|
|
3
|
-
import { EditorState,
|
|
3
|
+
import { EditorState, StateEffect } from "@codemirror/state";
|
|
4
4
|
import { EditorView, ViewPlugin } from "@codemirror/view";
|
|
5
5
|
import { useIntersectionObserver } from "@uidotdev/usehooks";
|
|
6
6
|
import { useAtom, useAtomValue, useSetAtom } from "jotai";
|
|
7
7
|
import React, { memo, useEffect, useMemo, useRef, useState } from "react";
|
|
8
8
|
import useEvent from "react-use-event-hook";
|
|
9
|
-
import { Button } from "@/components/ui/button";
|
|
10
|
-
import { DelayMount } from "@/components/utils/delay-mount";
|
|
11
9
|
import { aiCompletionCellAtom } from "@/core/ai/state";
|
|
12
10
|
import { maybeAddMarimoImport } from "@/core/cells/add-missing-import";
|
|
13
11
|
import { getNotebook } from "@/core/cells/cells";
|
|
@@ -35,17 +33,10 @@ import { prepareCellCodeUpdate } from "@/core/codemirror/language/cell-code";
|
|
|
35
33
|
import { getEditorCodeAsPython } from "@/core/codemirror/language/utils";
|
|
36
34
|
import { MARKDOWN_INITIAL_HIDE_CODE } from "@/core/codemirror/language/languages/markdown";
|
|
37
35
|
import type { LanguageAdapterType } from "@/core/codemirror/language/types";
|
|
38
|
-
import {
|
|
39
|
-
connectedDocAtom,
|
|
40
|
-
realTimeCollaboration,
|
|
41
|
-
} from "@/core/codemirror/rtc/extension";
|
|
42
36
|
import { autoInstantiateAtom, isAiFeatureEnabled } from "@/core/config/config";
|
|
43
37
|
import type { UserConfig } from "@/core/config/config-schema";
|
|
44
38
|
import { OverridingHotkeyProvider } from "@/core/hotkeys/hotkeys";
|
|
45
|
-
import { connectionAtom } from "@/core/network/connection";
|
|
46
|
-
import { canUseRtc, isRtcEnabled } from "@/core/rtc/state";
|
|
47
39
|
import { useSaveNotebook } from "@/core/saving/save-component";
|
|
48
|
-
import { isAppConnecting } from "@/core/session/connection-utils";
|
|
49
40
|
import type { Theme } from "@/theme/useTheme";
|
|
50
41
|
import { cn } from "@/utils/cn";
|
|
51
42
|
import { invariant } from "@/utils/invariant";
|
|
@@ -99,21 +90,6 @@ export interface CellEditorProps
|
|
|
99
90
|
tooltipParentSelector?: string;
|
|
100
91
|
}
|
|
101
92
|
|
|
102
|
-
export function composeRtcEditorConfig(
|
|
103
|
-
code: string,
|
|
104
|
-
extensions: Extension[],
|
|
105
|
-
rtc: ReturnType<typeof realTimeCollaboration> | undefined,
|
|
106
|
-
): { code: string; extensions: Extension[] } {
|
|
107
|
-
if (!rtc) {
|
|
108
|
-
return { code, extensions };
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
return {
|
|
112
|
-
code: rtc.code,
|
|
113
|
-
extensions: [...extensions, rtc.extension],
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
|
|
117
93
|
const CellEditorInternal = ({
|
|
118
94
|
theme,
|
|
119
95
|
showPlaceholder,
|
|
@@ -358,42 +334,24 @@ const CellEditorInternal = ({
|
|
|
358
334
|
saveOrNameNotebook,
|
|
359
335
|
]);
|
|
360
336
|
|
|
361
|
-
const rtcEnabled = isRtcEnabled() && canUseRtc(cellId);
|
|
362
|
-
const createEditorConfig = (initialCode?: string) => {
|
|
363
|
-
if (!rtcEnabled) {
|
|
364
|
-
return composeRtcEditorConfig(code, extensions, undefined);
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
const rtc = realTimeCollaboration(cellId, initialCode);
|
|
368
|
-
return composeRtcEditorConfig(code, extensions, rtc);
|
|
369
|
-
};
|
|
370
|
-
|
|
371
337
|
const handleInitializeEditor = useEvent(() => {
|
|
372
|
-
const editorConfig = createEditorConfig(code);
|
|
373
|
-
|
|
374
338
|
// Create a new editor
|
|
375
339
|
const ev = new EditorView({
|
|
376
|
-
state: EditorState.create({
|
|
377
|
-
doc: editorConfig.code,
|
|
378
|
-
extensions: editorConfig.extensions,
|
|
379
|
-
}),
|
|
340
|
+
state: EditorState.create({ doc: code, extensions }),
|
|
380
341
|
});
|
|
381
342
|
setEditorView(ev);
|
|
382
343
|
// Initialize the language adapter
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
});
|
|
387
|
-
}
|
|
344
|
+
switchLanguage(ev, {
|
|
345
|
+
language: getInitialLanguageAdapter(ev.state).type,
|
|
346
|
+
});
|
|
388
347
|
});
|
|
389
348
|
|
|
390
349
|
const handleReconfigureEditor = useEvent(() => {
|
|
391
350
|
invariant(editorViewRef.current !== null, "Editor view is not initialized");
|
|
392
|
-
const editorConfig = createEditorConfig();
|
|
393
351
|
|
|
394
352
|
editorViewRef.current.dispatch({
|
|
395
353
|
effects: [
|
|
396
|
-
StateEffect.reconfigure.of([
|
|
354
|
+
StateEffect.reconfigure.of([extensions]),
|
|
397
355
|
reconfigureLanguageEffect(editorViewRef.current, {
|
|
398
356
|
completionConfig: userConfig.completion,
|
|
399
357
|
hotkeysProvider: new OverridingHotkeyProvider(
|
|
@@ -410,24 +368,18 @@ const CellEditorInternal = ({
|
|
|
410
368
|
|
|
411
369
|
const handleDeserializeEditor = useEvent(() => {
|
|
412
370
|
invariant(serializedEditorState, "Editor view is not initialized");
|
|
413
|
-
const editorConfig = createEditorConfig(code);
|
|
414
371
|
|
|
415
372
|
const ev = new EditorView({
|
|
416
373
|
state: EditorState.fromJSON(
|
|
417
374
|
serializedEditorState,
|
|
418
|
-
{
|
|
419
|
-
doc: editorConfig.code,
|
|
420
|
-
extensions: editorConfig.extensions,
|
|
421
|
-
},
|
|
375
|
+
{ doc: code, extensions },
|
|
422
376
|
{ history: historyField },
|
|
423
377
|
),
|
|
424
378
|
});
|
|
425
379
|
// Initialize the language adapter
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
});
|
|
430
|
-
}
|
|
380
|
+
switchLanguage(ev, {
|
|
381
|
+
language: getInitialLanguageAdapter(ev.state).type,
|
|
382
|
+
});
|
|
431
383
|
setEditorView(ev);
|
|
432
384
|
// The restored state is used once; the next mount builds a fresh editor.
|
|
433
385
|
takeRestoredEditorState({ cellId });
|
|
@@ -626,45 +578,4 @@ const CellCodeMirrorEditor = React.forwardRef(
|
|
|
626
578
|
);
|
|
627
579
|
CellCodeMirrorEditor.displayName = "CellCodeMirrorEditor";
|
|
628
580
|
|
|
629
|
-
|
|
630
|
-
// This is used for real-time collaboration since the backend needs the connection started
|
|
631
|
-
// before connecting the rtc websockets
|
|
632
|
-
function WithWaitUntilConnected<T extends Pick<CellEditorProps, "id">>(
|
|
633
|
-
Component: React.ComponentType<T>,
|
|
634
|
-
) {
|
|
635
|
-
const WaitUntilConnectedComponent = (props: T) => {
|
|
636
|
-
const connection = useAtomValue(connectionAtom);
|
|
637
|
-
const [rtcDoc, setRtcDoc] = useAtom(connectedDocAtom);
|
|
638
|
-
|
|
639
|
-
if (
|
|
640
|
-
isRtcEnabled() &&
|
|
641
|
-
canUseRtc(props.id) &&
|
|
642
|
-
(isAppConnecting(connection.state) || rtcDoc === undefined)
|
|
643
|
-
) {
|
|
644
|
-
return (
|
|
645
|
-
<div className="flex h-full w-full items-baseline p-4">
|
|
646
|
-
<DelayMount milliseconds={1000} fallback={null}>
|
|
647
|
-
<span>Waiting for real-time collaboration connection...</span>
|
|
648
|
-
<Button
|
|
649
|
-
variant="link"
|
|
650
|
-
onClick={() => {
|
|
651
|
-
setRtcDoc("disabled");
|
|
652
|
-
}}
|
|
653
|
-
>
|
|
654
|
-
Turn off real-time collaboration
|
|
655
|
-
</Button>
|
|
656
|
-
</DelayMount>
|
|
657
|
-
</div>
|
|
658
|
-
);
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
return <Component {...props} />;
|
|
662
|
-
};
|
|
663
|
-
|
|
664
|
-
WaitUntilConnectedComponent.displayName = `WithWaitUntilConnected(${Component.displayName})`;
|
|
665
|
-
return WaitUntilConnectedComponent;
|
|
666
|
-
}
|
|
667
|
-
|
|
668
|
-
export const CellEditor = isRtcEnabled()
|
|
669
|
-
? WithWaitUntilConnected(memo(CellEditorInternal))
|
|
670
|
-
: memo(CellEditorInternal);
|
|
581
|
+
export const CellEditor = memo(CellEditorInternal);
|
|
@@ -21,7 +21,6 @@ import { CopilotStatusIcon } from "./footer-items/copilot-status";
|
|
|
21
21
|
import { DocumentSyncStatus } from "./footer-items/document-sync-status";
|
|
22
22
|
import { MachineStats } from "./footer-items/machine-stats";
|
|
23
23
|
import { PyodideStatus } from "./footer-items/pyodide-status";
|
|
24
|
-
import { RTCStatus } from "./footer-items/rtc-status";
|
|
25
24
|
import { RuntimeSettings } from "./footer-items/runtime-settings";
|
|
26
25
|
import { useSetDependencyPanelTab } from "./useDependencyPanelTab";
|
|
27
26
|
|
|
@@ -113,7 +112,6 @@ export const Footer: React.FC = () => {
|
|
|
113
112
|
<AttachmentStatus />
|
|
114
113
|
<AIStatusIcon />
|
|
115
114
|
<CopilotStatusIcon />
|
|
116
|
-
<RTCStatus />
|
|
117
115
|
</div>
|
|
118
116
|
</footer>
|
|
119
117
|
);
|
|
@@ -21,7 +21,6 @@ import {
|
|
|
21
21
|
import { OverridingHotkeyProvider } from "@/core/hotkeys/hotkeys";
|
|
22
22
|
import { store } from "@/core/state/jotai";
|
|
23
23
|
import { activeDocumentModelAtom } from "@/core/session/active-notebook";
|
|
24
|
-
import { isRtcEnabled } from "../../rtc/state";
|
|
25
24
|
import {
|
|
26
25
|
createNotebookActions,
|
|
27
26
|
exportedForTesting,
|
|
@@ -31,11 +30,6 @@ import {
|
|
|
31
30
|
import { applyDocument, flushDocument, followDocument } from "../document";
|
|
32
31
|
import { type CellId, SCRATCH_CELL_ID } from "../ids";
|
|
33
32
|
|
|
34
|
-
vi.mock("../../rtc/state", async (importOriginal) => ({
|
|
35
|
-
...(await importOriginal<typeof import("../../rtc/state")>()),
|
|
36
|
-
isRtcEnabled: vi.fn(() => false),
|
|
37
|
-
}));
|
|
38
|
-
|
|
39
33
|
const { initialNotebookState } = exportedForTesting;
|
|
40
34
|
|
|
41
35
|
const a = cellId("a");
|
|
@@ -148,18 +142,6 @@ describe("applyDocument", () => {
|
|
|
148
142
|
expect(view.state.field(languageAdapterState).type).toBe("python");
|
|
149
143
|
});
|
|
150
144
|
|
|
151
|
-
it("leaves an RTC editor to Loro", () => {
|
|
152
|
-
vi.mocked(isRtcEnabled).mockReturnValueOnce(true);
|
|
153
|
-
const state = notebookOf([cell(a)]);
|
|
154
|
-
const view = createEditor("a = 1");
|
|
155
|
-
state.cellHandles[a].current = { editorView: view, editorViewOrNull: view };
|
|
156
|
-
|
|
157
|
-
const next = applyDocument(state, documentOf([cell(a, { code: "a = 2" })]));
|
|
158
|
-
|
|
159
|
-
expect(next.cellData[a].code).toBe("a = 2");
|
|
160
|
-
expect(view.state.doc.toString()).toBe("a = 1");
|
|
161
|
-
});
|
|
162
|
-
|
|
163
145
|
it("keeps the code this client has when the host withholds source", () => {
|
|
164
146
|
const state = notebookOf([cell(a)]);
|
|
165
147
|
|
|
@@ -21,7 +21,6 @@ import type {
|
|
|
21
21
|
} from "@/core/notebook/document";
|
|
22
22
|
import type { DispatchedActionOf } from "@/utils/createReducer";
|
|
23
23
|
import { prepareCellCodeUpdate } from "../codemirror/language/cell-code";
|
|
24
|
-
import { canUseRtc, isRtcEnabled } from "../rtc/state";
|
|
25
24
|
import { store } from "../state/jotai";
|
|
26
25
|
import { activeDocumentModelAtom } from "../session/active-notebook";
|
|
27
26
|
import type { NotebookState, ReducerCellActions } from "./cells";
|
|
@@ -60,14 +59,12 @@ function followCell(
|
|
|
60
59
|
if (code === current.code) {
|
|
61
60
|
return { ...current, name: cell.name, config };
|
|
62
61
|
}
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
view.dispatch(update);
|
|
70
|
-
}
|
|
62
|
+
// The editor takes the host's code; one that shows it already, as the
|
|
63
|
+
// editor this client types in does, is left alone.
|
|
64
|
+
const view = handle?.current?.editorViewOrNull;
|
|
65
|
+
const update = view && prepareCellCodeUpdate(view.state, code);
|
|
66
|
+
if (update) {
|
|
67
|
+
view.dispatch(update);
|
|
71
68
|
}
|
|
72
69
|
return {
|
|
73
70
|
...current,
|
|
@@ -8,11 +8,9 @@ import {
|
|
|
8
8
|
} from "@codemirror/state";
|
|
9
9
|
import { describe, expect, it } from "vitest";
|
|
10
10
|
import { formattingChangeEffect } from "../../format";
|
|
11
|
-
import { loroSyncAnnotation } from "../../rtc/loro/sync";
|
|
12
11
|
import { exportedForTesting } from "../extensions";
|
|
13
12
|
|
|
14
|
-
const {
|
|
15
|
-
exportedForTesting;
|
|
13
|
+
const { shouldAutorunMarkdownUpdate } = exportedForTesting;
|
|
16
14
|
|
|
17
15
|
function createTransaction(spec: TransactionSpec) {
|
|
18
16
|
return EditorState.create({ doc: "" }).update(spec);
|
|
@@ -51,24 +49,6 @@ describe("shouldAutorunMarkdownUpdate", () => {
|
|
|
51
49
|
).toBe(false);
|
|
52
50
|
});
|
|
53
51
|
|
|
54
|
-
it("ignores RTC sync transactions", () => {
|
|
55
|
-
const transaction = createTransaction({
|
|
56
|
-
changes: { from: 0, insert: "#" },
|
|
57
|
-
annotations: [
|
|
58
|
-
Transaction.userEvent.of("input.type"),
|
|
59
|
-
loroSyncAnnotation.of(true),
|
|
60
|
-
],
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
expect(
|
|
64
|
-
shouldAutorunMarkdownUpdate({
|
|
65
|
-
docChanged: transaction.docChanged,
|
|
66
|
-
transactions: [transaction],
|
|
67
|
-
hasFocus: true,
|
|
68
|
-
}),
|
|
69
|
-
).toBe(false);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
52
|
it("ignores remote transactions while focused", () => {
|
|
73
53
|
const transaction = createTransaction({
|
|
74
54
|
changes: { from: 0, insert: "#" },
|
|
@@ -126,28 +106,3 @@ describe("shouldAutorunMarkdownUpdate", () => {
|
|
|
126
106
|
).toBe(false);
|
|
127
107
|
});
|
|
128
108
|
});
|
|
129
|
-
|
|
130
|
-
describe("isCollaboratorUpdate", () => {
|
|
131
|
-
it("recognizes an update made only of Loro sync transactions", () => {
|
|
132
|
-
const transaction = createTransaction({
|
|
133
|
-
changes: { from: 0, insert: "#" },
|
|
134
|
-
annotations: [loroSyncAnnotation.of(true)],
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
expect(isCollaboratorUpdate([transaction])).toBe(true);
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
it("treats typing beside a Loro sync transaction as local", () => {
|
|
141
|
-
const remote = createTransaction({
|
|
142
|
-
changes: { from: 0, insert: "#" },
|
|
143
|
-
annotations: [loroSyncAnnotation.of(true)],
|
|
144
|
-
});
|
|
145
|
-
const local = createTransaction({
|
|
146
|
-
changes: { from: 0, insert: "x" },
|
|
147
|
-
annotations: [Transaction.userEvent.of("input.type")],
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
expect(isCollaboratorUpdate([remote, local])).toBe(false);
|
|
151
|
-
expect(isCollaboratorUpdate([])).toBe(false);
|
|
152
|
-
});
|
|
153
|
-
});
|
|
@@ -14,7 +14,6 @@ import {
|
|
|
14
14
|
clearPendingCutAtom,
|
|
15
15
|
pendingCutCellIdsAtom,
|
|
16
16
|
} from "@/core/cells/pending-cut-service";
|
|
17
|
-
import { loroSyncAnnotation } from "@/core/codemirror/rtc/loro/sync";
|
|
18
17
|
import type { KeymapConfig } from "@/core/config/config-schema";
|
|
19
18
|
import type { HotkeyProvider } from "@/core/hotkeys/hotkeys";
|
|
20
19
|
import { getFeatureFlag } from "@/core/config/feature-flag";
|
|
@@ -325,11 +324,6 @@ function cellKeymaps({
|
|
|
325
324
|
function cellCodeEditing(hotkeys: HotkeyProvider): Extension[] {
|
|
326
325
|
const onChangePlugin = EditorView.updateListener.of((update) => {
|
|
327
326
|
if (update.docChanged) {
|
|
328
|
-
// Loro already applied a collaborator's change here. The client that
|
|
329
|
-
// typed it syncs it to the document.
|
|
330
|
-
if (isCollaboratorUpdate(update.transactions)) {
|
|
331
|
-
return;
|
|
332
|
-
}
|
|
333
327
|
// Check if the doc update was a formatting change
|
|
334
328
|
// e.g. changing from python to markdown
|
|
335
329
|
const isFormattingChange = update.transactions.some((tr) =>
|
|
@@ -355,14 +349,6 @@ function cellCodeEditing(hotkeys: HotkeyProvider): Extension[] {
|
|
|
355
349
|
return [onChangePlugin, formatKeymapExtension(hotkeys)];
|
|
356
350
|
}
|
|
357
351
|
|
|
358
|
-
/** Whether every transaction in an update arrived from a collaborator through Loro. */
|
|
359
|
-
function isCollaboratorUpdate(transactions: readonly Transaction[]): boolean {
|
|
360
|
-
return (
|
|
361
|
-
transactions.length > 0 &&
|
|
362
|
-
transactions.every((tr) => tr.annotation(loroSyncAnnotation) !== undefined)
|
|
363
|
-
);
|
|
364
|
-
}
|
|
365
|
-
|
|
366
352
|
const MARKDOWN_AUTORUN_USER_EVENTS = ["input", "delete", "undo", "redo"];
|
|
367
353
|
|
|
368
354
|
function shouldAutorunMarkdownUpdate({
|
|
@@ -397,10 +383,7 @@ function shouldAutorunMarkdownUpdate({
|
|
|
397
383
|
return transactions.some((tr) => {
|
|
398
384
|
// Ignore remote changes to avoid duplicate runs. The client that made the
|
|
399
385
|
// edit runs it.
|
|
400
|
-
if (
|
|
401
|
-
tr.annotation(Transaction.remote) ||
|
|
402
|
-
tr.annotation(loroSyncAnnotation) !== undefined
|
|
403
|
-
) {
|
|
386
|
+
if (tr.annotation(Transaction.remote)) {
|
|
404
387
|
return false;
|
|
405
388
|
}
|
|
406
389
|
|
|
@@ -480,6 +463,5 @@ export function cellBundle({
|
|
|
480
463
|
}
|
|
481
464
|
|
|
482
465
|
export const exportedForTesting = {
|
|
483
|
-
isCollaboratorUpdate,
|
|
484
466
|
shouldAutorunMarkdownUpdate,
|
|
485
467
|
};
|
|
@@ -204,7 +204,6 @@ export const UserConfigSchema = z
|
|
|
204
204
|
experimental: z
|
|
205
205
|
.looseObject({
|
|
206
206
|
markdown: z.boolean().optional(),
|
|
207
|
-
rtc: z.boolean().optional(),
|
|
208
207
|
// Add new experimental features here
|
|
209
208
|
})
|
|
210
209
|
// Pass through so that we don't remove any extra keys that the user has added.
|
|
@@ -8,7 +8,6 @@ import { getResolvedMarimoConfig } from "./config";
|
|
|
8
8
|
export interface ExperimentalFeatures {
|
|
9
9
|
markdown: boolean; // Used in playground (community cloud)
|
|
10
10
|
wasm_layouts: boolean; // Used in playground (community cloud)
|
|
11
|
-
rtc_v2: boolean;
|
|
12
11
|
cache_panel: boolean;
|
|
13
12
|
external_agents: boolean;
|
|
14
13
|
debugger: boolean; // Live frame-watching debugger (gutter breakpoints + pdb)
|
|
@@ -19,7 +18,6 @@ export interface ExperimentalFeatures {
|
|
|
19
18
|
const defaultValues: ExperimentalFeatures = {
|
|
20
19
|
markdown: true,
|
|
21
20
|
wasm_layouts: false,
|
|
22
|
-
rtc_v2: false,
|
|
23
21
|
cache_panel: import.meta.env.DEV,
|
|
24
22
|
external_agents: import.meta.env.DEV,
|
|
25
23
|
debugger: false,
|