@marimo-team/islands 0.25.2-dev105 → 0.25.2-dev107
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-CLsD_u_F.js → ConnectedDataExplorerComponent-CNSxdKyJ.js} +11 -11
- package/dist/{ErrorBoundary-efyVj7rF.js → ErrorBoundary-KRp3Mdlb.js} +8 -8
- package/dist/{abnfDiagram-VCTEODGH-DP-j9K77.js → abnfDiagram-VCTEODGH-DQDjNXt3.js} +2 -2
- package/dist/{any-language-editor-D5auDtxd.js → any-language-editor-B9REGlD9.js} +3 -3
- package/dist/{architectureDiagram-5GKGNRK7-BeQUyxB8.js → architectureDiagram-5GKGNRK7-Nmls7Wxn.js} +1 -1
- package/dist/{button-e0G6suEi.js → button-CvjkwdSk.js} +1 -1
- package/dist/{capabilities-to826YB8.js → capabilities-CQ5IjhzL.js} +1 -1
- package/dist/{cells-Cuf0K7MO.js → cells-CnomFgoS.js} +2958 -2938
- package/dist/{chat-ui-C0-ojNzY.js → chat-ui-DIoRDU4g.js} +15 -15
- package/dist/{check-DLTnw68H.js → check-EDwSwP89.js} +1 -1
- package/dist/{chunk-IMKFNOWR-Dk2PgCm2.js → chunk-IMKFNOWR-CoIFEo-1.js} +1 -1
- package/dist/{chunk-SHT3W25Y-BGY-9vHH.js → chunk-SHT3W25Y-lHiGx3ZC.js} +1 -1
- package/dist/{chunk-SVP7TREG-teKkW9Fg.js → chunk-SVP7TREG-BvsHIrY_.js} +1 -1
- package/dist/{chunk-TICWLB2K-DtXuhbug.js → chunk-TICWLB2K-BC8YIm_n.js} +1 -1
- package/dist/{classDiagram-ZZMXUADV-DbUMcd7_.js → classDiagram-ZZMXUADV-Bt98lkkv.js} +2 -2
- package/dist/{classDiagram-v2-VYDZK3BY-C-3L4d5M.js → classDiagram-v2-VYDZK3BY-D9bfbcC3.js} +2 -2
- package/dist/{code-visibility-DE54Pz9F.js → code-visibility-Czkyfmjy.js} +6 -6
- package/dist/{common-CTtBH0wF.js → common-Dot4N_jK.js} +22 -22
- package/dist/{copy-icon-BCF4LtXi.js → copy-icon-Ft7t9bqz.js} +3 -3
- package/dist/{cynefinDiagram-5FMLGOSQ--q32vtYo.js → cynefinDiagram-5FMLGOSQ-CgWra7wt.js} +1 -1
- package/dist/{dagre-GXQ25YYZ-ClJucAkw.js → dagre-GXQ25YYZ-CFZ8-35c.js} +1 -1
- package/dist/{data-grid-overlay-editor-DFqPk6q5.js → data-grid-overlay-editor-CeWphgdz.js} +1 -1
- package/dist/{diagram-S7CK7UJ4-Cyssb9Ln.js → diagram-S7CK7UJ4-lCNQrW7d.js} +1 -1
- package/dist/{diagram-UQ7AKVKN-DZYSgUI7.js → diagram-UQ7AKVKN-CQPQ6pP_.js} +1 -1
- package/dist/{diagram-VX7I27RA-CGG722Ev.js → diagram-VX7I27RA-Cf3b0llz.js} +1 -1
- package/dist/{diagram-Z3DM3KII-BvQr3_De.js → diagram-Z3DM3KII-Bt4QLrpn.js} +1 -1
- package/dist/{dialog-CmJuVSh2.js → dialog-CEBFZNyc.js} +3 -3
- package/dist/{dropdown-menu-DLNl0uXY.js → dropdown-menu-CP_qCYHC.js} +7 -7
- package/dist/{ebnfDiagram-PWID7BFC-DR2FshJT.js → ebnfDiagram-PWID7BFC-D3NAyPFY.js} +2 -2
- package/dist/{erDiagram-RLTQ6QDP-xnBvU5f7.js → erDiagram-RLTQ6QDP-Tlu09_Nm.js} +1 -1
- package/dist/{error-banner-CSBLWQOS.js → error-banner-Da600cwz.js} +2 -2
- package/dist/{error-entries-C7yBRMAV.js → error-entries-uqmpke4z.js} +2 -2
- package/dist/{feedback-button-Bp9eebz4.js → feedback-button-4_AuZCdh.js} +10 -10
- package/dist/{flowDiagram-HODETNUW-Bfnw9tSj.js → flowDiagram-HODETNUW-CAYbpJmV.js} +2 -2
- package/dist/{formats-CJxJy0A5.js → formats-DLtvJPnj.js} +3 -3
- package/dist/{glide-data-editor-B3gyOR9J.js → glide-data-editor-DfjSoz7Q.js} +11 -11
- package/dist/{glide-utils-BNg2jWFu.js → glide-utils-DJyqh0EM.js} +3 -3
- package/dist/{globals-D-vVdFQv.js → globals-1QqNuGFw.js} +3 -3
- package/dist/{html-to-image-DJECYxR4.js → html-to-image-utL-jAuh.js} +11 -11
- package/dist/{infoDiagram-27XIBGKW-BAYcNcaV.js → infoDiagram-27XIBGKW-XrDxhr0x.js} +1 -1
- package/dist/{ishikawaDiagram-5VMMS53U-DXStWIha.js → ishikawaDiagram-5VMMS53U-CD1muzov.js} +1 -1
- package/dist/{kanban-definition-UXKFOSKX-DbdJswTE.js → kanban-definition-UXKFOSKX-Dg9W142_.js} +1 -1
- package/dist/{label-csksCK90.js → label-BDKF3Afc.js} +2 -2
- package/dist/{loader-BBZo0c48.js → loader-BQOfjTIJ.js} +1 -1
- package/dist/main.js +32 -32
- package/dist/{mermaid-C2NJdX2u.js → mermaid-CiAXjLpA.js} +36 -36
- package/dist/{mindmap-definition-YA3MSWOX-BQ8i-blD.js → mindmap-definition-YA3MSWOX-DgCidgYJ.js} +1 -1
- package/dist/{number-overlay-editor-D20HUk2N.js → number-overlay-editor-C02SrcZc.js} +1 -1
- package/dist/{pegDiagram-XKGWAZYB-DUcNNAN-.js → pegDiagram-XKGWAZYB-coOYYKB6.js} +2 -2
- package/dist/{pieDiagram-E7YTZNPT-CSFNZSft.js → pieDiagram-E7YTZNPT-BnXTc3bj.js} +1 -1
- package/dist/{process-output-Donyae-q.js → process-output-tkY7JSAu.js} +4 -4
- package/dist/{railroadDiagram-O6MQD6OU-DIKoeErt.js → railroadDiagram-O6MQD6OU-B28-u83n.js} +2 -2
- package/dist/{requirementDiagram-BXWQKSXE-DbJ4dnDA.js → requirementDiagram-BXWQKSXE-CdYCTMu0.js} +1 -1
- package/dist/{reveal-component-4KH8dyFk.js → reveal-component-BwWtao-Q.js} +10 -10
- package/dist/{select-eLd7a6qs.js → select-BButFi-d.js} +4 -4
- package/dist/{sequenceDiagram-WJ2MYXX4-DrFl3KeD.js → sequenceDiagram-WJ2MYXX4-CM3aRAe_.js} +1 -1
- package/dist/{spec-DkOU7lfi.js → spec-BwarBpUJ.js} +4 -4
- package/dist/{stateDiagram-D77RDMKH-CW5dERQ1.js → stateDiagram-D77RDMKH-DOZUMVj8.js} +2 -2
- package/dist/{stateDiagram-v2-MP3YSRHH-B1BR_34Z.js → stateDiagram-v2-MP3YSRHH-CISYxma6.js} +2 -2
- package/dist/{swimlanes-42K2YHIH-CXasdezK.js → swimlanes-42K2YHIH-BkSppxp8.js} +1 -1
- package/dist/{swimlanesDiagram-VR7AAH4N-WuS8E4Md.js → swimlanesDiagram-VR7AAH4N-c8G5pGxC.js} +2 -2
- package/dist/{swiper-component-Bzo0y0WO.js → swiper-component-DKntyn8p.js} +2 -2
- package/dist/{timeline-definition-24CTP7MA-MS0jeNYt.js → timeline-definition-24CTP7MA-CaMQayqK.js} +1 -1
- package/dist/{toDate-CaG7azFp.js → toDate-Dwcg_x_5.js} +3 -3
- package/dist/{toast-DEQUzOQE.js → toast-B9UMEi8u.js} +4 -4
- package/dist/{tooltip-Dbmm909v.js → tooltip-BO1REbqs.js} +2 -2
- package/dist/{use-restore-focus-B7_UeKnI.js → use-restore-focus-BEM7sFWl.js} +1 -1
- package/dist/{useAsyncData-B2hCigr0.js → useAsyncData-Deh5kszT.js} +1 -1
- package/dist/{useDateFormatter-DtgICMM1.js → useDateFormatter-D8XruNGG.js} +2 -2
- package/dist/{useDeepCompareMemoize-NxOUy83E.js → useDeepCompareMemoize-DXwzRINI.js} +1 -1
- package/dist/{useIframeCapabilities-DIRs8689.js → useIframeCapabilities-DBETvvPl.js} +1 -1
- package/dist/{useLifecycle-NfWtOhUr.js → useLifecycle-j7D9uD1o.js} +3 -3
- package/dist/{useTheme-DdoJP40B.js → useTheme-CRnjkku0.js} +2 -2
- package/dist/{vega-component-lajX4E5T.js → vega-component-DLBAQLSf.js} +9 -9
- package/dist/{vennDiagram-4TSXK5OY-BjY3_fWF.js → vennDiagram-4TSXK5OY-CF8pfaK3.js} +1 -1
- package/dist/{wardleyDiagram-VM6X3IG4-CmNH2_Vg.js → wardleyDiagram-VM6X3IG4-dGPu39d-.js} +1 -1
- package/dist/{xychartDiagram-S5SC5T6Z-frIXgxSb.js → xychartDiagram-S5SC5T6Z-CP6-9q56.js} +1 -1
- package/package.json +1 -1
- package/src/core/codemirror/language/embedded/__tests__/embedded-python.test.ts +138 -26
- package/src/core/codemirror/language/embedded/embedded-python.ts +47 -13
- package/src/core/codemirror/language/embedded/latex.ts +20 -13
- package/src/hooks/__tests__/useEventListener.test.tsx +45 -1
- package/src/hooks/useEventListener.ts +6 -1
|
@@ -12,11 +12,11 @@ import "./chunk-4HAMMTFA-D4eFPyFh.js";
|
|
|
12
12
|
import "./chunk-GVQU2GXP-Cwbt-lF0.js";
|
|
13
13
|
import "./chunk-L3NEJ4N5-n-zgIVSy.js";
|
|
14
14
|
import "./chunk-OSK3NFVY-DXa-Cxbn.js";
|
|
15
|
-
import "./mermaid-
|
|
15
|
+
import "./mermaid-CiAXjLpA.js";
|
|
16
16
|
import "./chunk-F27PBJKO-ufseIn5y.js";
|
|
17
17
|
import "./chunk-XXDRQBXY-Dnl5VBqG.js";
|
|
18
18
|
import "./chunk-POPQ4Y6H-hYOXbYH_.js";
|
|
19
|
-
import { i as f, n as p, t as m } from "./chunk-IMKFNOWR-
|
|
19
|
+
import { i as f, n as p, t as m } from "./chunk-IMKFNOWR-CoIFEo-1.js";
|
|
20
20
|
//#region ../node_modules/.pnpm/mermaid@11.17.2/node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-D77RDMKH.mjs
|
|
21
21
|
var h = /* @__PURE__ */ s((e) => e.append("circle").attr("class", "start-state").attr("r", d().state.sizeUnit).attr("cx", d().state.padding + d().state.sizeUnit).attr("cy", d().state.padding + d().state.sizeUnit), "drawStartState"), g = /* @__PURE__ */ s((e) => e.append("line").style("stroke", "grey").style("stroke-dasharray", "3").attr("x1", d().state.textHeight).attr("class", "divider").attr("x2", d().state.textHeight * 2).attr("y1", 0).attr("y2", 0), "drawDivider"), _ = /* @__PURE__ */ s((e, t) => {
|
|
22
22
|
let n = e.append("text").attr("x", 2 * d().state.padding).attr("y", d().state.textHeight + 2 * d().state.padding).attr("font-size", d().state.fontSize).attr("class", "state-title").text(t.id), r = n.node().getBBox();
|
|
@@ -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-CiAXjLpA.js";
|
|
13
13
|
import "./chunk-F27PBJKO-ufseIn5y.js";
|
|
14
14
|
import "./chunk-XXDRQBXY-Dnl5VBqG.js";
|
|
15
15
|
import "./chunk-POPQ4Y6H-hYOXbYH_.js";
|
|
16
|
-
import { i as t, n, r, t as i } from "./chunk-IMKFNOWR-
|
|
16
|
+
import { i as t, n, r, t as i } from "./chunk-IMKFNOWR-CoIFEo-1.js";
|
|
17
17
|
//#region ../node_modules/.pnpm/mermaid@11.17.2/node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-v2-MP3YSRHH.mjs
|
|
18
18
|
var a = {
|
|
19
19
|
parser: n,
|
|
@@ -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-CiAXjLpA.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-WuS8E4Md.js → swimlanesDiagram-VR7AAH4N-c8G5pGxC.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-CiAXjLpA.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-lHiGx3ZC.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",
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
|
|
2
|
-
import { c as t, h as n, t as r } from "./button-
|
|
2
|
+
import { c as t, h as n, t as r } from "./button-CvjkwdSk.js";
|
|
3
3
|
import { t as i } from "./react-sHtZdjeP.js";
|
|
4
4
|
import { t as a } from "./compiler-runtime-CldRdSsv.js";
|
|
5
5
|
import { t as o } from "./jsx-runtime-3BD1kT0s.js";
|
|
6
|
-
import { t as s } from "./useIframeCapabilities-
|
|
6
|
+
import { t as s } from "./useIframeCapabilities-DBETvvPl.js";
|
|
7
7
|
/* empty css */
|
|
8
8
|
//#region ../node_modules/.pnpm/swiper@12.2.0/node_modules/swiper/shared/ssr-window.esm.mjs
|
|
9
9
|
var c = /* @__PURE__ */ e(i(), 1), l = a();
|
package/dist/{timeline-definition-24CTP7MA-MS0jeNYt.js → timeline-definition-24CTP7MA-CaMQayqK.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-CiAXjLpA.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) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as e } from "./rolldown-runtime-Cb76FRpK.js";
|
|
2
|
-
import { g as t } from "./button-
|
|
2
|
+
import { g as t } from "./button-CvjkwdSk.js";
|
|
3
3
|
import { t as n } from "./compiler-runtime-CldRdSsv.js";
|
|
4
|
-
import { h as r } from "./tooltip-
|
|
5
|
-
import { C as i, E as a, _ as o, a as s, b as c } from "./useTheme-
|
|
4
|
+
import { h as r } from "./tooltip-BO1REbqs.js";
|
|
5
|
+
import { C as i, E as a, _ as o, a as s, b as c } from "./useTheme-CRnjkku0.js";
|
|
6
6
|
import { t as l } from "./invariant-DLmrl-hA.js";
|
|
7
7
|
var u = r("circle-question-mark", [
|
|
8
8
|
["circle", {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
|
|
2
|
-
import { h as t, p as n, r } from "./button-
|
|
2
|
+
import { h as t, p as n, r } from "./button-CvjkwdSk.js";
|
|
3
3
|
import { t as i } from "./react-sHtZdjeP.js";
|
|
4
4
|
import { t as a } from "./compiler-runtime-CldRdSsv.js";
|
|
5
|
-
import { m as o } from "./tooltip-
|
|
6
|
-
import { A as s, k as c } from "./select-
|
|
5
|
+
import { m as o } from "./tooltip-BO1REbqs.js";
|
|
6
|
+
import { A as s, k as c } from "./select-BButFi-d.js";
|
|
7
7
|
import { t as l } from "./react-dom-DUmH0GXv.js";
|
|
8
8
|
import { t as u } from "./jsx-runtime-3BD1kT0s.js";
|
|
9
|
-
import { Ct as d, St as f, Tt as p, _t as m, bt as h, ft as g, gt as ee, mt as te, wt as _, xt as v, yt as ne } from "./use-restore-focus-
|
|
9
|
+
import { Ct as d, St as f, Tt as p, _t as m, bt as h, ft as g, gt as ee, mt as te, wt as _, xt as v, yt as ne } from "./use-restore-focus-BEM7sFWl.js";
|
|
10
10
|
//#region ../node_modules/.pnpm/@radix-ui+react-toast@1.2.23_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react@_69693a0157877c6dbc61617dd22ea8ee/node_modules/@radix-ui/react-toast/dist/index.mjs
|
|
11
11
|
var y = /* @__PURE__ */ e(i(), 1), re = /* @__PURE__ */ e(l(), 1), b = u(), x = Object.defineProperty, S = (e, t) => x(e, "name", {
|
|
12
12
|
value: t,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
|
|
2
|
-
import { d as t, h as n, p as r } from "./button-
|
|
2
|
+
import { d as t, h as n, p as r } from "./button-CvjkwdSk.js";
|
|
3
3
|
import { t as i } from "./react-sHtZdjeP.js";
|
|
4
4
|
import { t as a } from "./compiler-runtime-CldRdSsv.js";
|
|
5
5
|
import { t as o } from "./react-dom-DUmH0GXv.js";
|
|
6
6
|
import { t as s } from "./jsx-runtime-3BD1kT0s.js";
|
|
7
|
-
import { Ct as c, Q as l, St as u, X as d, Y as f, _t as p, bt as m, ft as h, ht as g, vt as _, wt as v, xt as y, yt as b } from "./use-restore-focus-
|
|
7
|
+
import { Ct as c, Q as l, St as u, X as d, Y as f, _t as p, bt as m, ft as h, ht as g, vt as _, wt as v, xt as y, yt as b } from "./use-restore-focus-BEM7sFWl.js";
|
|
8
8
|
//#region ../node_modules/.pnpm/lucide-react@0.577.0_react@19.3.0/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
|
|
9
9
|
var x = /* @__PURE__ */ e(i()), S = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), C = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), w = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), T = (e) => {
|
|
10
10
|
let t = w(e);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
|
|
2
|
-
import { c as t, p as n, u as r } from "./button-
|
|
2
|
+
import { c as t, p as n, u as r } from "./button-CvjkwdSk.js";
|
|
3
3
|
import { t as i } from "./react-sHtZdjeP.js";
|
|
4
4
|
import { t as a } from "./compiler-runtime-CldRdSsv.js";
|
|
5
5
|
import { t as o } from "./react-dom-DUmH0GXv.js";
|
|
@@ -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 { A as r } from "./useTheme-
|
|
4
|
+
import { A as r } from "./useTheme-CRnjkku0.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,7 +1,7 @@
|
|
|
1
1
|
import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
|
|
2
2
|
import { t } from "./react-sHtZdjeP.js";
|
|
3
|
-
import { h as n } from "./tooltip-
|
|
4
|
-
import { i as r } from "./label-
|
|
3
|
+
import { h as n } from "./tooltip-BO1REbqs.js";
|
|
4
|
+
import { i as r } from "./label-BDKF3Afc.js";
|
|
5
5
|
var i = n("chart-pie", [["path", {
|
|
6
6
|
d: "M21 12c.552 0 1.005-.449.95-.998a10 10 0 0 0-8.953-8.951c-.55-.055-.998.398-.998.95v8a1 1 0 0 0 1 1z",
|
|
7
7
|
key: "pzmjnu"
|
|
@@ -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 { k as n } from "./useTheme-
|
|
3
|
+
import { k as n } from "./useTheme-CRnjkku0.js";
|
|
4
4
|
//#region src/hooks/useDeepCompareMemoize.ts
|
|
5
5
|
var r = /* @__PURE__ */ e(t(), 1);
|
|
6
6
|
function i(e) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
|
|
2
|
-
import { g as t, h as n, r } from "./button-
|
|
2
|
+
import { g as t, h as n, r } from "./button-CvjkwdSk.js";
|
|
3
3
|
import { t as i } from "./react-sHtZdjeP.js";
|
|
4
4
|
import { t as a } from "./compiler-runtime-CldRdSsv.js";
|
|
5
|
-
import { h as o } from "./tooltip-
|
|
5
|
+
import { h as o } from "./tooltip-BO1REbqs.js";
|
|
6
6
|
import { t as s } from "./jsx-runtime-3BD1kT0s.js";
|
|
7
|
-
import { E as c, w as l } from "./useTheme-
|
|
7
|
+
import { E as c, w as l } from "./useTheme-CRnjkku0.js";
|
|
8
8
|
var u = o("calendar", [
|
|
9
9
|
["path", {
|
|
10
10
|
d: "M8 2v4",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { a as e, r as t } from "./rolldown-runtime-Cb76FRpK.js";
|
|
2
|
-
import { a as n, g as r, s as i } from "./button-
|
|
2
|
+
import { a as n, g as r, s as i } from "./button-CvjkwdSk.js";
|
|
3
3
|
import { t as a } from "./react-sHtZdjeP.js";
|
|
4
4
|
import { t as o } from "./compiler-runtime-CldRdSsv.js";
|
|
5
|
-
import { C as s, F as c, L as l, M as u, O as d, P as f, S as p, j as m, v as h } from "./use-restore-focus-
|
|
5
|
+
import { C as s, F as c, L as l, M as u, O as d, P as f, S as p, j as m, v as h } from "./use-restore-focus-BEM7sFWl.js";
|
|
6
6
|
import { l as g, t as _ } from "./_baseMerge-BiGRwuqv.js";
|
|
7
7
|
//#region ../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/mergeWith.js
|
|
8
8
|
var v = g(function(e, t, n, r) {
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
|
|
2
|
-
import { g as t, h as n, m as r, o as i } from "./button-
|
|
2
|
+
import { g as t, h as n, m as r, o as i } from "./button-CvjkwdSk.js";
|
|
3
3
|
import { t as a } from "./react-sHtZdjeP.js";
|
|
4
4
|
import { t as o } from "./compiler-runtime-CldRdSsv.js";
|
|
5
|
-
import { t as s } from "./tooltip-
|
|
6
|
-
import { T as c, c as l } from "./toDate-
|
|
5
|
+
import { t as s } from "./tooltip-BO1REbqs.js";
|
|
6
|
+
import { T as c, c as l } from "./toDate-Dwcg_x_5.js";
|
|
7
7
|
import { t as u } from "./jsx-runtime-3BD1kT0s.js";
|
|
8
|
-
import { n as d } from "./error-banner-
|
|
8
|
+
import { n as d } from "./error-banner-Da600cwz.js";
|
|
9
9
|
import { t as f } from "./debounce-C3jyATpc.js";
|
|
10
|
-
import { A as p, n as ee } from "./useTheme-
|
|
10
|
+
import { A as p, n as ee } from "./useTheme-CRnjkku0.js";
|
|
11
11
|
import { c as m } from "./arrays-CN1djC4k.js";
|
|
12
12
|
import { t as te } from "./objects-CzUgoMIF.js";
|
|
13
|
-
import { t as h } from "./useAsyncData-
|
|
14
|
-
import { a as ne, i as re, n as ie, t as g } from "./formats-
|
|
13
|
+
import { t as h } from "./useAsyncData-Deh5kszT.js";
|
|
14
|
+
import { a as ne, i as re, n as ie, t as g } from "./formats-DLtvJPnj.js";
|
|
15
15
|
import { M as ae, n as oe } from "./vega-loader.browser-DNST6uVf.js";
|
|
16
16
|
import { t as se } from "./react-vega-BED0DjiB.js";
|
|
17
|
-
import { a as ce, n as _ } from "./loader-
|
|
18
|
-
import { t as le } from "./useDeepCompareMemoize-
|
|
17
|
+
import { a as ce, n as _ } from "./loader-BQOfjTIJ.js";
|
|
18
|
+
import { t as le } from "./useDeepCompareMemoize-DXwzRINI.js";
|
|
19
19
|
import { t as ue } from "./semaphore-89jsoHtS.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
|
|
@@ -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-CiAXjLpA.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-CiAXjLpA.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-CiAXjLpA.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
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
import type { CompletionContext } from "@codemirror/autocomplete";
|
|
4
4
|
import { python } from "@codemirror/lang-python";
|
|
5
|
+
import { StreamLanguage } from "@codemirror/language";
|
|
6
|
+
import { stexMath } from "@codemirror/legacy-modes/mode/stex";
|
|
5
7
|
import { EditorState } from "@codemirror/state";
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
+
import { classHighlighter, highlightTree } from "@lezer/highlight";
|
|
9
|
+
import { parser as markdownParser } from "@lezer/markdown";
|
|
10
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
8
11
|
import { cellId, variableName } from "@/__tests__/branded";
|
|
9
12
|
import { store } from "@/core/state/jotai";
|
|
10
13
|
import { variablesAtom } from "@/core/variables/state";
|
|
11
14
|
import { parsePython, variableCompletionSource } from "../embedded-python";
|
|
15
|
+
import { parseLatex } from "../latex";
|
|
12
16
|
|
|
13
17
|
const IS_ACTIVE = () => true;
|
|
14
18
|
|
|
@@ -23,25 +27,133 @@ describe("parsePython", () => {
|
|
|
23
27
|
]);
|
|
24
28
|
});
|
|
25
29
|
|
|
26
|
-
|
|
30
|
+
const cases = [
|
|
31
|
+
"{math.exp(3)}",
|
|
32
|
+
'${math.exp(3) + len("$}")} $',
|
|
33
|
+
"${math.exp(3)} + {math.sin(3)}$",
|
|
34
|
+
"${math.exp(3)}$",
|
|
35
|
+
"$$ {math.exp(3)} $$",
|
|
36
|
+
String.raw`\({math.exp(3)}\)`,
|
|
37
|
+
String.raw`\[{math.exp(3)}\]`,
|
|
38
|
+
String.raw`\\({math.exp(3)}\\)`,
|
|
39
|
+
String.raw`\\[{math.exp(3)}\\]`,
|
|
40
|
+
String.raw`$\frac{{{math.exp(3)}}}{{2}}$`,
|
|
41
|
+
String.raw`$\{math.exp(3)}$`,
|
|
42
|
+
'${ {"}": math.exp(3)} }$',
|
|
43
|
+
"${math.exp(3):{width}.{precision}f}$",
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
function highlightedProperties(doc: string, prefix: string) {
|
|
47
|
+
const parser = markdownParser.configure([
|
|
48
|
+
parseLatex(StreamLanguage.define(stexMath).parser),
|
|
49
|
+
parsePython(python().language.parser, () => prefix.includes("f")),
|
|
50
|
+
]);
|
|
51
|
+
const properties: string[] = [];
|
|
52
|
+
highlightTree(parser.parse(doc), classHighlighter, (from, to, classes) => {
|
|
53
|
+
if (classes.split(" ").includes("tok-propertyName")) {
|
|
54
|
+
properties.push(doc.slice(from, to));
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
return properties;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
it.each(["f", "rf", "fr"])(
|
|
61
|
+
"highlights interpolation with %s strings",
|
|
62
|
+
(prefix) => {
|
|
63
|
+
for (const doc of cases) {
|
|
64
|
+
expect(highlightedProperties(doc, prefix)).toEqual(
|
|
65
|
+
doc.includes("math.sin") ? ["exp", "sin"] : ["exp"],
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
it.each(["", "r"])("does not interpolate %s strings", (prefix) => {
|
|
72
|
+
for (const doc of cases) {
|
|
73
|
+
expect(highlightedProperties(doc, prefix)).toEqual([]);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it("parses replacement boundaries once for a paragraph with many interpolations", () => {
|
|
27
78
|
const pythonParser = python().language.parser;
|
|
28
|
-
const
|
|
79
|
+
const parse = vi.spyOn(pythonParser, "parse");
|
|
80
|
+
try {
|
|
81
|
+
const doc = "{math.exp(3)} ".repeat(1000);
|
|
82
|
+
const parser = markdownParser.configure([
|
|
83
|
+
parseLatex(StreamLanguage.define(stexMath).parser),
|
|
84
|
+
parsePython(pythonParser, IS_ACTIVE),
|
|
85
|
+
]);
|
|
86
|
+
const properties: string[] = [];
|
|
87
|
+
highlightTree(
|
|
88
|
+
parser.parse(doc),
|
|
89
|
+
classHighlighter,
|
|
90
|
+
(from, to, classes) => {
|
|
91
|
+
if (classes.split(" ").includes("tok-propertyName")) {
|
|
92
|
+
properties.push(doc.slice(from, to));
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
);
|
|
96
|
+
expect(properties).toEqual(Array.from({ length: 1000 }, () => "exp"));
|
|
97
|
+
expect(parse).toHaveBeenCalledTimes(1);
|
|
98
|
+
} finally {
|
|
99
|
+
parse.mockRestore();
|
|
100
|
+
}
|
|
101
|
+
});
|
|
29
102
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
103
|
+
it("preserves raw backslashes between replacements", () => {
|
|
104
|
+
expect(
|
|
105
|
+
highlightedProperties(String.raw`{math.exp(3)} \N{math.sin(3)}`, "rf"),
|
|
106
|
+
).toEqual(["exp", "sin"]);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it("finds replacements after triple quotes in markdown text", () => {
|
|
110
|
+
expect(
|
|
111
|
+
highlightedProperties('{math.exp(3)} """ {math.sin(3)}', "f"),
|
|
112
|
+
).toEqual(["exp", "sin"]);
|
|
113
|
+
});
|
|
40
114
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
115
|
+
it("keeps replacement positions local to each paragraph", () => {
|
|
116
|
+
expect(
|
|
117
|
+
highlightedProperties("${math.exp(3)}$\n\n${math.sin(3)}$", "rf"),
|
|
118
|
+
).toEqual(["exp", "sin"]);
|
|
44
119
|
});
|
|
120
|
+
|
|
121
|
+
it("preserves LaTeX highlighting around Python replacements", () => {
|
|
122
|
+
const doc = String.raw`$\frac{{{math.exp(3)}}}{{2}} + \alpha$`;
|
|
123
|
+
const parser = markdownParser.configure([
|
|
124
|
+
parseLatex(StreamLanguage.define(stexMath).parser),
|
|
125
|
+
parsePython(python().language.parser, IS_ACTIVE),
|
|
126
|
+
]);
|
|
127
|
+
const highlighted: string[] = [];
|
|
128
|
+
highlightTree(parser.parse(doc), classHighlighter, (from, to) => {
|
|
129
|
+
highlighted.push(doc.slice(from, to));
|
|
130
|
+
});
|
|
131
|
+
expect(highlighted).toEqual(
|
|
132
|
+
expect.arrayContaining(["\\frac", "exp", "\\alpha"]),
|
|
133
|
+
);
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it.each(["${math.exp(3)$", "${math.exp(3)", "${{math.exp(3)}$"])(
|
|
137
|
+
"does not treat incomplete or escaped braces as replacements: %s",
|
|
138
|
+
(doc) => {
|
|
139
|
+
expect(highlightedProperties(doc, "f")).toEqual([]);
|
|
140
|
+
},
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
it.each(["f", "rf", "fr"])(
|
|
144
|
+
"keeps doubled braces literal in %s strings",
|
|
145
|
+
(prefix) => {
|
|
146
|
+
for (const doc of [
|
|
147
|
+
"{{math.exp(3)}}",
|
|
148
|
+
"${{math.exp(3)}}$",
|
|
149
|
+
"$ {{{{math.exp(3)}}}} $",
|
|
150
|
+
String.raw`$\{{math.exp(3)}}$`,
|
|
151
|
+
String.raw`$\frac{{1}}{{2}}$`,
|
|
152
|
+
]) {
|
|
153
|
+
expect(highlightedProperties(doc, prefix)).toEqual([]);
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
);
|
|
45
157
|
});
|
|
46
158
|
|
|
47
159
|
describe("variableCompletionSource", () => {
|
|
@@ -72,10 +184,10 @@ describe("variableCompletionSource", () => {
|
|
|
72
184
|
const context: Partial<CompletionContext> = {
|
|
73
185
|
pos: 8,
|
|
74
186
|
explicit: false,
|
|
75
|
-
matchBefore: (
|
|
187
|
+
matchBefore: (_expr: RegExp) => ({ from: 7, to: 8, text: "v" }),
|
|
76
188
|
state,
|
|
77
189
|
aborted: false,
|
|
78
|
-
tokenBefore: (
|
|
190
|
+
tokenBefore: (_types: readonly string[]) => null,
|
|
79
191
|
};
|
|
80
192
|
|
|
81
193
|
const result = variableCompletionSource(context as CompletionContext);
|
|
@@ -92,10 +204,10 @@ describe("variableCompletionSource", () => {
|
|
|
92
204
|
const context: Partial<CompletionContext> = {
|
|
93
205
|
pos: 7,
|
|
94
206
|
explicit: false,
|
|
95
|
-
matchBefore: (
|
|
207
|
+
matchBefore: (_expr: RegExp) => ({ from: 6, to: 7, text: "v" }),
|
|
96
208
|
state,
|
|
97
209
|
aborted: false,
|
|
98
|
-
tokenBefore: (
|
|
210
|
+
tokenBefore: (_types: readonly string[]) => null,
|
|
99
211
|
};
|
|
100
212
|
|
|
101
213
|
const result = variableCompletionSource(context as CompletionContext);
|
|
@@ -110,10 +222,10 @@ describe("variableCompletionSource", () => {
|
|
|
110
222
|
const context: Partial<CompletionContext> = {
|
|
111
223
|
pos: 13,
|
|
112
224
|
explicit: false,
|
|
113
|
-
matchBefore: (
|
|
225
|
+
matchBefore: (_expr: RegExp) => ({ from: 12, to: 13, text: "v" }),
|
|
114
226
|
state,
|
|
115
227
|
aborted: false,
|
|
116
|
-
tokenBefore: (
|
|
228
|
+
tokenBefore: (_types: readonly string[]) => null,
|
|
117
229
|
};
|
|
118
230
|
|
|
119
231
|
const result = variableCompletionSource(context as CompletionContext);
|
|
@@ -131,7 +243,7 @@ describe("variableCompletionSource", () => {
|
|
|
131
243
|
matchBefore: () => null,
|
|
132
244
|
state,
|
|
133
245
|
aborted: false,
|
|
134
|
-
tokenBefore: (
|
|
246
|
+
tokenBefore: (_types: readonly string[]) => null,
|
|
135
247
|
};
|
|
136
248
|
|
|
137
249
|
const result = variableCompletionSource(context as CompletionContext);
|
|
@@ -146,10 +258,10 @@ describe("variableCompletionSource", () => {
|
|
|
146
258
|
const context: Partial<CompletionContext> = {
|
|
147
259
|
pos: 9,
|
|
148
260
|
explicit: false,
|
|
149
|
-
matchBefore: (
|
|
261
|
+
matchBefore: (_expr: RegExp) => ({ from: 8, to: 9, text: "v" }),
|
|
150
262
|
state,
|
|
151
263
|
aborted: false,
|
|
152
|
-
tokenBefore: (
|
|
264
|
+
tokenBefore: (_types: readonly string[]) => null,
|
|
153
265
|
};
|
|
154
266
|
|
|
155
267
|
const result = variableCompletionSource(context as CompletionContext);
|
|
@@ -16,11 +16,8 @@ import { getVariableCompletions } from "../../completion/variable-completions";
|
|
|
16
16
|
const PYTHON = "Python";
|
|
17
17
|
|
|
18
18
|
const OPEN_BRACE = 123; // {
|
|
19
|
-
const CLOSE_BRACE = 125; // }
|
|
20
19
|
const DELIMITER_LENGTH = 1;
|
|
21
20
|
|
|
22
|
-
const MARK = { mark: `${PYTHON}Mark`, resolve: PYTHON };
|
|
23
|
-
|
|
24
21
|
/**
|
|
25
22
|
* Define a Python code block parser for Markdown.
|
|
26
23
|
*
|
|
@@ -31,6 +28,11 @@ export function parsePython(
|
|
|
31
28
|
pythonParser: Parser,
|
|
32
29
|
isActivated: () => boolean,
|
|
33
30
|
): MarkdownConfig {
|
|
31
|
+
const replacements = new WeakMap<
|
|
32
|
+
InlineContext,
|
|
33
|
+
{ ends: Map<number, number>; parsedTo: number }
|
|
34
|
+
>();
|
|
35
|
+
|
|
34
36
|
const defineNodes = [
|
|
35
37
|
{ name: PYTHON, style: tags.emphasis },
|
|
36
38
|
{ name: `${PYTHON}Mark`, style: tags.processingInstruction },
|
|
@@ -41,26 +43,58 @@ export function parsePython(
|
|
|
41
43
|
parseInline: [
|
|
42
44
|
{
|
|
43
45
|
name: PYTHON,
|
|
46
|
+
before: "Escape",
|
|
44
47
|
parse(cx: InlineContext, next: number, pos: number): number {
|
|
45
48
|
if (!isActivated()) {
|
|
46
49
|
return -1;
|
|
47
50
|
}
|
|
48
51
|
|
|
49
|
-
|
|
52
|
+
// A backslash does not escape a brace in Python f-strings.
|
|
53
|
+
if (next === 92 && cx.char(pos + 1) === OPEN_BRACE) {
|
|
54
|
+
return pos + 1;
|
|
55
|
+
}
|
|
56
|
+
if (next !== OPEN_BRACE) {
|
|
50
57
|
return -1;
|
|
51
58
|
}
|
|
59
|
+
if (cx.char(pos + 1) === OPEN_BRACE) {
|
|
60
|
+
return pos + 2;
|
|
61
|
+
}
|
|
52
62
|
|
|
53
|
-
|
|
54
|
-
if (
|
|
63
|
+
let cached = replacements.get(cx);
|
|
64
|
+
if (!cached || pos >= cached.parsedTo) {
|
|
65
|
+
// Cache all replacements so each brace does not reparse the paragraph.
|
|
66
|
+
// Keep Markdown backslashes from consuming braces as Python escapes.
|
|
67
|
+
const prefix = 'rf"""';
|
|
68
|
+
const tree = pythonParser.parse(
|
|
69
|
+
`${prefix}${cx.slice(pos, cx.end)}\n"""`,
|
|
70
|
+
);
|
|
71
|
+
const formatString = tree.topNode
|
|
72
|
+
.getChild("ExpressionStatement")
|
|
73
|
+
?.getChild("FormatString");
|
|
74
|
+
const offset = pos - prefix.length;
|
|
75
|
+
const ends = new Map<number, number>();
|
|
76
|
+
for (const replacement of formatString?.getChildren(
|
|
77
|
+
"FormatReplacement",
|
|
78
|
+
) ?? []) {
|
|
79
|
+
if (replacement.lastChild?.name === "}") {
|
|
80
|
+
ends.set(offset + replacement.from, offset + replacement.to);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
cached = {
|
|
84
|
+
ends,
|
|
85
|
+
parsedTo: formatString ? offset + formatString.to : cx.end,
|
|
86
|
+
};
|
|
87
|
+
replacements.set(cx, cached);
|
|
88
|
+
}
|
|
89
|
+
const end = cached.ends.get(pos);
|
|
90
|
+
if (end === undefined) {
|
|
55
91
|
return -1;
|
|
56
92
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
next === OPEN_BRACE,
|
|
63
|
-
next === CLOSE_BRACE,
|
|
93
|
+
return cx.addElement(
|
|
94
|
+
cx.elt(PYTHON, pos, end, [
|
|
95
|
+
cx.elt(`${PYTHON}Mark`, pos, pos + 1),
|
|
96
|
+
cx.elt(`${PYTHON}Mark`, end - 1, end),
|
|
97
|
+
]),
|
|
64
98
|
);
|
|
65
99
|
},
|
|
66
100
|
},
|