@marimo-team/frontend 0.25.3-dev40 → 0.25.3-dev42

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 (96) hide show
  1. package/dist/assets/{CellStatus-BGIWF94J.js → CellStatus-BpOBz-8m.js} +1 -1
  2. package/dist/assets/{ErrorBoundary-hliG40Pk.js → ErrorBoundary-DmXl4Nre.js} +2 -2
  3. package/dist/assets/{JsonOutput-9tmC-p6h.js → JsonOutput-BJraU9kp.js} +1 -1
  4. package/dist/assets/{MarimoErrorOutput-BaHdbtck.js → MarimoErrorOutput-DVjK8RgY.js} +1 -1
  5. package/dist/assets/{RenderHTML-B1FzB5NY.js → RenderHTML-BFaztTR0.js} +1 -1
  6. package/dist/assets/{RunButton-DpGokdF1.js → RunButton-B44xE_d5.js} +1 -1
  7. package/dist/assets/{add-cell-with-ai-BYWG0iKO.js → add-cell-with-ai-CkjslziO.js} +1 -1
  8. package/dist/assets/{add-connection-dialog-BWbUVPJk.js → add-connection-dialog-CWLLVKju.js} +1 -1
  9. package/dist/assets/{agent-panel-DKNiQrAl.js → agent-panel-DYdQ_2pp.js} +1 -1
  10. package/dist/assets/{ai-model-dropdown-CIg9eu47.js → ai-model-dropdown-F3mm17Wa.js} +1 -1
  11. package/dist/assets/{app-config-button-BvkL2eSY.js → app-config-button-D0uDs5nC.js} +1 -1
  12. package/dist/assets/{blob-BQfLiwKr.js → blob-BSfsdCNF.js} +1 -1
  13. package/dist/assets/{cell-editor-BKKUv4d5.js → cell-editor-DzvvHs9g.js} +1 -1
  14. package/dist/assets/{cell-link-B_QkRkm-.js → cell-link-DFPHORAO.js} +1 -1
  15. package/dist/assets/{cells-CdH98VSn.js → cells-BdgzY0of.js} +1 -1
  16. package/dist/assets/{chat-display-CNbRSebo.js → chat-display-BrcwdhKJ.js} +1 -1
  17. package/dist/assets/{chat-panel-HbEKDf0c.js → chat-panel-C__3iSyI.js} +1 -1
  18. package/dist/assets/{chat-ui-BwMev8Bf.js → chat-ui-NlBK3kK6.js} +1 -1
  19. package/dist/assets/{code-visibility-sQ37CBNo.js → code-visibility-Cs-Vv3jV.js} +1 -1
  20. package/dist/assets/{column-preview-CsEBzIUE.js → column-preview-ivm1b-GY.js} +1 -1
  21. package/dist/assets/{command-palette-BzZ86pUz.js → command-palette-TgwswwvD.js} +1 -1
  22. package/dist/assets/{common-S2v8dsEy.js → common-BcEY1yDS.js} +1 -1
  23. package/dist/assets/{components-D-TnFWjo.js → components-lkCfd2vy.js} +1 -1
  24. package/dist/assets/{config-CYsbZpwa.js → config-BwHT0yGp.js} +2 -2
  25. package/dist/assets/{config-BoBwH7CU.js → config-DXjnAwtL.js} +1 -1
  26. package/dist/assets/{datasource-BA7YF4eo.js → datasource-dKk3JHSQ.js} +1 -1
  27. package/dist/assets/{dependency-graph-panel-DsjI61Qa.js → dependency-graph-panel-BaisS9Zt.js} +1 -1
  28. package/dist/assets/{documentation-panel-hk3IdeXy.js → documentation-panel-CpSUoM8r.js} +1 -1
  29. package/dist/assets/{download-CCZkq0y4.js → download-RV4i1fWI.js} +1 -1
  30. package/dist/assets/{edit-page-BgS6tjth.js → edit-page-C8RUVAaO.js} +4 -4
  31. package/dist/assets/{error-entries-BVXrGOTZ.js → error-entries-CJS0gOId.js} +1 -1
  32. package/dist/assets/{error-panel-DYethUUR.js → error-panel-BxCKpZtN.js} +1 -1
  33. package/dist/assets/feedback-button-BLvwvndE.js +1 -0
  34. package/dist/assets/{feedback-button-DaNc3uJa.js → feedback-button-DYjae3_b.js} +1 -1
  35. package/dist/assets/{file-explorer-panel-CqnzSSYc.js → file-explorer-panel-BmjAJusg.js} +1 -1
  36. package/dist/assets/{file-name-input-D4AvwZV9.js → file-name-input-BpfSzvEB.js} +1 -1
  37. package/dist/assets/{floating-outline-CTy-Iakk.js → floating-outline-CrWdiNQ2.js} +1 -1
  38. package/dist/assets/{gallery-page-ByjlvM6k.js → gallery-page-W_b-XWq6.js} +1 -1
  39. package/dist/assets/{glide-data-editor-CABBj2b0.js → glide-data-editor-C_bIL30J.js} +1 -1
  40. package/dist/assets/{home-page-DejRSjeJ.js → home-page-D1teQDdF.js} +1 -1
  41. package/dist/assets/{hooks-BJgCcVXZ.js → hooks-CZF85I2f.js} +1 -1
  42. package/dist/assets/{index-PDJQd7X6.js → index-4Nwpioic.js} +5 -5
  43. package/dist/assets/{layout-Ct0rjb-5.js → layout-ByZveRPN.js} +3 -3
  44. package/dist/assets/{logs-panel-TyeqEvOY.js → logs-panel-DVSgfMgv.js} +1 -1
  45. package/dist/assets/{markdown-renderer-BFyD6Jhs.js → markdown-renderer-DX2O5YiE.js} +1 -1
  46. package/dist/assets/{name-cell-input-D-0VF3qd.js → name-cell-input-DL1i8Mj0.js} +1 -1
  47. package/dist/assets/{outline-panel-DMTjk2WC.js → outline-panel-DPKPT2eg.js} +1 -1
  48. package/dist/assets/{packages-panel-DrT69k9L.js → packages-panel-CZZwD9YV.js} +1 -1
  49. package/dist/assets/{panel-accordion-state-Ban6j---.js → panel-accordion-state-C7vvsYz1.js} +1 -1
  50. package/dist/assets/panels-BT2oosq8.js +4 -0
  51. package/dist/assets/{process-output-DzpQYlpY.js → process-output-BKhybJBb.js} +1 -1
  52. package/dist/assets/{readonly-code-display-Cyn3k5TX.js → readonly-code-display-9QrSm_7D.js} +1 -1
  53. package/dist/assets/{readonly-python-code-DrXDDAnA.js → readonly-python-code-BLotL3XP.js} +1 -1
  54. package/dist/assets/{reveal-component-_lKImPWP.js → reveal-component-2QaMbLNx.js} +1 -1
  55. package/dist/assets/{run-page-7UNg--Rj.js → run-page-DyZ8JFKU.js} +1 -1
  56. package/dist/assets/{runtime-details-state-CKOKhMhv.js → runtime-details-state-B25uM-Ps.js} +1 -1
  57. package/dist/assets/{scratchpad-panel-C7h4MgqN.js → scratchpad-panel-Dt83MaaA.js} +1 -1
  58. package/dist/assets/{session-panel-CLiWXc5y.js → session-panel-xVWVwa1U.js} +1 -1
  59. package/dist/assets/{snippets-panel-Wrqaorxa.js → snippets-panel-IxIxfxNc.js} +1 -1
  60. package/dist/assets/{state-TVREh4u4.js → state-BHuYDaxs.js} +1 -1
  61. package/dist/assets/{state-_uXVmwuN.js → state-CVgqwwCU.js} +1 -1
  62. package/dist/assets/{terminal-Dp5gyJ7l.js → terminal-CjvCrRrA.js} +1 -1
  63. package/dist/assets/{tracing-fUNLyKuj.js → tracing-V5zejPsw.js} +1 -1
  64. package/dist/assets/{tracing-panel-Cx4OqOoP.js → tracing-panel-DLS3iwK6.js} +2 -2
  65. package/dist/assets/{tree-actions-B1vsdenY.js → tree-actions-Be_mzC1C.js} +1 -1
  66. package/dist/assets/{useAddCell-DZ-50qEG.js → useAddCell-DK79W1vA.js} +1 -1
  67. package/dist/assets/{useBoolean-5g-bBaYF.js → useBoolean-j0qHaJxu.js} +1 -1
  68. package/dist/assets/{useCellActionButton-DINnRstv.js → useCellActionButton-Cw9Ob12j.js} +1 -1
  69. package/dist/assets/{useDeleteCell-CREJXVNp.js → useDeleteCell-BNqX6PPu.js} +1 -1
  70. package/dist/assets/{useDependencyPanelTab-Cw5VT16Q.js → useDependencyPanelTab-GnTnqKJo.js} +1 -1
  71. package/dist/assets/{useInstallPackage-Cw0dVELh.js → useInstallPackage-CVItDn1e.js} +1 -1
  72. package/dist/assets/{useNotebookActions-B4av4mLc.js → useNotebookActions-_qJ1Sjtj.js} +1 -1
  73. package/dist/assets/{useRunCells-BHBMk9zW.js → useRunCells-DP09DHT6.js} +1 -1
  74. package/dist/assets/{useSplitCell-DAgwZV0q.js → useSplitCell-IfumZ4sm.js} +1 -1
  75. package/dist/assets/{vega-component-pQE2mKc1.js → vega-component-CMn031HF.js} +1 -1
  76. package/dist/index.html +24 -24
  77. package/package.json +2 -4
  78. package/src/__tests__/host-imports.test.ts +1 -0
  79. package/src/core/attachments/state.ts +2 -2
  80. package/src/core/host/AGENTS.md +6 -2
  81. package/src/core/host/__tests__/attachments.test.ts +9 -10
  82. package/src/core/host/__tests__/document.test.ts +18 -16
  83. package/src/core/host/__tests__/events.test.ts +5 -2
  84. package/src/core/host/__tests__/fixtures.ts +6 -4
  85. package/src/core/host/events.ts +18 -2
  86. package/src/core/host/notebook-client.ts +46 -13
  87. package/src/core/host/resources/attachments.ts +3 -3
  88. package/src/core/host/resources/document.ts +3 -3
  89. package/src/core/websocket/__tests__/useNotebookSession.hook.test.tsx +1 -1
  90. package/dist/assets/feedback-button-DDzObtF2.js +0 -1
  91. package/dist/assets/panels-BLYQRkEc.js +0 -4
  92. package/src/core/host/__tests__/protocol.test.ts +0 -229
  93. package/src/core/host/__tests__/stream.test.ts +0 -209
  94. package/src/core/host/protocol.ts +0 -1948
  95. package/src/core/host/resources/resource.ts +0 -47
  96. package/src/core/host/stream.ts +0 -211
@@ -1,4 +0,0 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{c as t,d as n,f as r,l as i,r as a,t as o,u as s}from"./useEvent-Dfcbgjhg.js";import{t as c}from"./react-DVplv7_D.js";import{$ as l,B as u,D as d,Dt as f,Et as p,Gn as m,Hr as h,I as g,Ii as _,Jn as v,Kn as ee,Mr as y,Oo as b,Ot as x,R as S,So as C,St as te,T as w,Vi as ne,Wn as re,b as T,ei as ie,g as ae,h as oe,l as se,mr as ce,pr as le,qn as ue,r as E}from"./cells-CdH98VSn.js";import{D,E as O,P as de,S as fe,T as k,i as pe,l as me,o as he,u as ge,v as _e}from"./config-CYsbZpwa.js";import{t as ve}from"./compiler-runtime-BrajqUja.js";import{D as ye,d as be,w as xe}from"./config-DGX7JYor.js";import{_ as Se,c as Ce,g as we,i as Te,m as Ee,n as De,o as Oe,p as ke,r as Ae,s as je,t as A}from"./state-TVREh4u4.js";import{g as j,t as M}from"./useEventListener-CjDeLqFC.js";import{t as Me}from"./objects-rLPlQ3X_.js";import{i as N}from"./utils-B4K466FK.js";import{a as P,f as Ne,m as Pe,r as Fe,v as Ie}from"./session-B8Y-GJnS.js";import{r as F}from"./state-C0irhlOZ.js";import{i as Le,o as Re,r as ze}from"./state-DaWgt-rn.js";import{r as Be}from"./ErrorBoundary-hliG40Pk.js";import{n as Ve,t as I}from"./cn-ldLVeaqm.js";import{t as He}from"./jsx-runtime-B74pBk57.js";import{i as L,s as Ue}from"./fullscreen-BWTs8pYZ.js";import{a as R,c as z,i as B,l as We,n as Ge,o as V,r as Ke,s as qe}from"./use-restore-focus-DdS7Tl0F.js";import{Dt as Je,Ot as H,St as U}from"./JsonOutput-9tmC-p6h.js";import{p as W}from"./download-CCZkq0y4.js";import{t as G}from"./tooltip-CkGm8X7m.js";import{t as K}from"./button-D8gVKwe-.js";import{t as q}from"./createLucideIcon-DfJ2oMlA.js";import{P as J,a as Ye,c as Y,i as Xe,n as Ze}from"./layout-Ct0rjb-5.js";import{d as Qe,n as $e}from"./markdown-renderer-BFyD6Jhs.js";import{v as et}from"./write-secret-modal-usRSi1bb.js";import{n as tt}from"./spinner-DyNE-o8o.js";import{c as nt,l as rt,s as it}from"./readonly-python-code-DrXDDAnA.js";import{s as at}from"./MarimoErrorOutput-BaHdbtck.js";import{t as ot}from"./use-toast-Wu434mLr.js";import{i as st}from"./strings-C25fhMR_.js";import{t as ct}from"./requests-lt0JK8Jt.js";import{n as lt}from"./useAsyncData-DhhdOGGd.js";import{t as ut}from"./RenderHTML-B1FzB5NY.js";import{t as dt}from"./package-data-dv4FBHxR.js";import{f as ft}from"./useInstallPackage-Cw0dVELh.js";import{a as pt}from"./errors-CNsgAw6m.js";import{s as mt}from"./react-icons.esm-D6tfmvq8.js";import{r as ht}from"./events-CbeVJ6OD.js";import{i as gt}from"./cell-link-B_QkRkm-.js";import{t as _t}from"./requests-CgSY1X4a.js";import{r as vt,s as yt,t as bt}from"./state-Ck7FMD5A.js";import{t as xt}from"./ws-BXWY541V.js";import{n as St}from"./runs-6lJxKV1w.js";var Ct=q(`hourglass`,[[`path`,{d:`M5 22h14`,key:`ehvnwv`}],[`path`,{d:`M5 2h14`,key:`pdyrp9`}],[`path`,{d:`M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22`,key:`1d314k`}],[`path`,{d:`M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2`,key:`1vvvr6`}]]),wt=q(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),Tt=q(`unlink`,[[`path`,{d:`m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71`,key:`yqzxt4`}],[`path`,{d:`m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71`,key:`4qinb0`}],[`line`,{x1:`8`,x2:`8`,y1:`2`,y2:`5`,key:`1041cp`}],[`line`,{x1:`2`,x2:`5`,y1:`8`,y2:`8`,key:`14m1p5`}],[`line`,{x1:`16`,x2:`16`,y1:`19`,y2:`22`,key:`rzdirn`}],[`line`,{x1:`19`,x2:`22`,y1:`16`,y2:`16`,key:`ox905f`}]]),X=He(),Z=ve(),Q=e(c(),1);function Et(e){let t=(0,Z.c)(3),[n,r]=(0,Q.useState)(e<=0),i,a;return t[0]===e?(i=t[1],a=t[2]):(i=()=>{if(e<=0){r(!0);return}r(!1);let t=setTimeout(()=>r(!0),e);return()=>clearTimeout(t)},a=[e],t[0]=e,t[1]=i,t[2]=a),(0,Q.useLayoutEffect)(i,a),n}var Dt=e=>{let{requires:t,fallback:n,delay:r,children:a}=e,o=n===void 0?null:n,s=r===void 0?0:r,c=i(t),l=Et(c?0:s);return c?a:l?o:null},Ot=e=>{let t=(0,Z.c)(10),{title:n}=e,[r,i]=(0,Q.useState)(n),[a,o]=(0,Q.useState)(!0),s,c;t[0]!==r||t[1]!==n?(s=()=>{if(n!==r){o(!1);let e=setTimeout(()=>{i(n),o(!0)},300);return()=>clearTimeout(e)}},c=[n,r],t[0]=r,t[1]=n,t[2]=s,t[3]=c):(s=t[2],c=t[3]),(0,Q.useEffect)(s,c);let l;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,X.jsx)(tt,{className:`size-20 animate-spin text-primary`,"data-testid":`large-spinner`,strokeWidth:1}),t[4]=l):l=t[4];let u=a?`opacity-100`:`opacity-0`,d;t[5]===u?d=t[6]:(d=I(`mt-2 text-muted-foreground font-semibold text-lg transition-opacity duration-300`,u),t[5]=u,t[6]=d);let f;return t[7]!==r||t[8]!==d?(f=(0,X.jsxs)(`div`,{className:`flex flex-col h-full flex-1 items-center justify-center p-4`,children:[l,(0,X.jsx)(`div`,{className:d,children:r})]}),t[7]=r,t[8]=d,t[9]=f):f=t[9],f};function kt(e,t){return e===`edit`||e===`home`||e===`gallery`?!0:e===`present`||P(N.includeCode,`false`)||P(N.showCode,`false`)?!1:P(N.showCode,`true`)?!0:t}function At(e){let t=kt(e.mode,e.showAppCode),n=e.hasCells&&e.hasCachedOutputs;return{showCode:t,showCachedOutputs:n,canPaint:e.hasCells&&(t||n||e.allCellsIdle)}}var jt=r(e=>{let t=!1,n=!0;for(let r of Object.values(e(T).cellRuntime))$e(r.output)||(t=!0),r.status!==`idle`&&(n=!1);return{hasCachedOutputs:t,allCellsIdle:n}}),Mt=r(e=>e(jt).hasCachedOutputs),Nt=r(e=>e(jt).allCellsIdle),Pt=r(e=>At({mode:e(Ne),showAppCode:e(F),hasCells:e(ae),hasCachedOutputs:e(Mt),allCellsIdle:e(Nt)})),Ft=r(e=>e(Pt).canPaint),It=e=>{let t=(0,Z.c)(2),{children:n}=e;if(!de())return n;let r;return t[0]===n?r=t[1]:(r=(0,X.jsx)(Lt,{children:n}),t[0]=n,t[1]=r),r},Lt=e=>{let t=(0,Z.c)(8),{children:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=[],t[0]=r):r=t[0];let{error:a}=lt(zt,r),o=i(Ft),s=(0,Q.useRef)(!1),c,l;if(t[1]!==o||t[2]!==a?(c=()=>{a&&o&&!s.current&&(s.current=!0,j.error(`Pyodide failed to initialize`,a),ot({title:`Failed to start the notebook runtime`,description:pt(a),variant:`danger`}))},l=[a,o],t[1]=o,t[2]=a,t[3]=c,t[4]=l):(c=t[3],l=t[4]),(0,Q.useEffect)(c,l),a&&!o)throw a;let u;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,X.jsx)(Rt,{}),t[5]=u):u=t[5];let d;return t[6]===n?d=t[7]:(d=(0,X.jsx)(Dt,{requires:Ft,fallback:u,children:n}),t[6]=n,t[7]=d),d},Rt=()=>{let e=(0,Z.c)(2),t=i(Re),n=t.kind===`loading`?t.message:`Loading…`,r;return e[0]===n?r=e[1]:(r=(0,X.jsx)(Ot,{title:n}),e[0]=n,e[1]=r),r};async function zt(){return await ke.INSTANCE.initialized.promise,!0}var $={idle:`./favicon.ico`,success:`data:image/x-icon;base64,AAABAAEAMDAAAAEACACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAXXQAAFd3AwBWeAQAVngEAFd4AwBXeAQAVnkEAFh3AwBXdwQAVXcGAFd4BQBXeAQAWHgEAFd6AwBXeAMAVnkEAFZ5AwBXdwQAV3cFAFd4BABYeAQAV3gEAFh4BABXeAQA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYYGAYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcYGBgYGBgYGBgYGBgYGAcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGBgYGBgYGBgYGBgYGBgYGBgYCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAsYGBgYGBgYDA0OChkZGRkKDg0MGBgYGBgYGAsAAAAAAAAAAAAAAAAAAAAAAAAAAxgYGBgYGA8QGRkZGRkZGRkZGRkZEA8YGBgYGBgDAAAAAAAAAAAAAAAAAAAAAAARGBgYGBgSChkZGRkZGRkZGRkZGRkZGRkKEhgYGBgYEQAAAAAAAAAAAAAAAAAAAAMYGBgYGBMZGRkZGRkZGRkZGRkZGRkZGRkZGRMYGBgYGAMAAAAAAAAAAAAAAAAACxgYGBgUEBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQFBgYGBgLAAAAAAAAAAAAAAAKGBgYGBQKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChQYGBgYCgAAAAAAAAAAAAAEGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYBAAAAAAAAAAAAAgYGBgYExkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkTGBgYGAgAAAAAAAAAAAkYGBgSGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZEhgYGAkAAAAAAAAAAhgYGBgKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChgYGBgCAAAAAAAABxgYGA8ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ8YGBgHAAAAAAABGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYAQAAAAACGBgYDBkZGRkZGRkZGRkZGRkXFhYVGRkZGRkZGRkZGRkZGRkZGRkMGBgYAgAAAAADGBgYDRkZGRkZGRkZGRkZGRcYGBgYFxkZGRkZGRkZGRkZGRkZGRkNGBgYAwAAAAAEGBgYDhkZGRkZGRkZGRkZFxgYGBgYGBcZGRkZGRkZGRkZGRkZGRkOGBgYBAAAAAAFGBgYChkZGRkZGRkZGRkXGBgYGBgYGBgXGRkZGRkZGRkZGRkZGRkKGBgYBQAAAAAGGBgYGRkZGRkZGRkZGRUYGBgYGBgYGBgYFxkZGRkZGRkZGRkZGRkZGBgYBgAAAAAYGBgYGRkZGRkZGRkZGRYYGBgYFxcYGBgYGBcZGRkZGRkZGRkZGRkZGBgYGAAAAAAYGBgYGRkZGRkZGRkZGRYYGBgXGRkXGBgYGBgXGRkZGRkZGRkZGRkZGBgYGAAAAAAGGBgYGRkZGRkZGRkZGRUWFhcZGRkZFxgYGBgYFxkZGRkZGRkZGRkZGBgYBgAAAAAFGBgYChkZGRkZGRkZGRkZGRkZGRkZGRcYGBgYGBcZGRkZGRkZGRkKGBgYBQAAAAAEGBgYDhkZGRkZGRkZGRkZGRkZGRkZGRkXGBgYGBYZGRkZGRkZGRkOGBgYBAAAAAADGBgYDRkZGRkZGRkZGRkZGRkZGRkZGRkZFxgYGBYZGRkZGRkZGRkNGBgYAwAAAAACGBgYDBkZGRkZGRkZGRkZGRkZGRkZGRkZGRUWFhUZGRkZGRkZGRkMGBgYAgAAAAABGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYAQAAAAAABxgYGA8ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ8YGBgHAAAAAAAAAhgYGBgKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChgYGBgCAAAAAAAAAAkYGBgSGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZEhgYGAkAAAAAAAAAAAgYGBgYExkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkTGBgYGAgAAAAAAAAAAAAEGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYBAAAAAAAAAAAAAAKGBgYGBQKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChQYGBgYCgAAAAAAAAAAAAAACxgYGBgUEBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQFBgYGBgLAAAAAAAAAAAAAAAAAAMYGBgYGBMZGRkZGRkZGRkZGRkZGRkZGRkZGRMYGBgYGAMAAAAAAAAAAAAAAAAAAAARGBgYGBgSChkZGRkZGRkZGRkZGRkZGRkKEhgYGBgYEQAAAAAAAAAAAAAAAAAAAAAAAxgYGBgYGA8QGRkZGRkZGRkZGRkZEA8YGBgYGBgDAAAAAAAAAAAAAAAAAAAAAAAAAAsYGBgYGBgYDA0OChkZGRkKDg0MGBgYGBgYGAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGBgYGBgYGBgYGBgYGBgYGBgYCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcYGBgYGBgYGBgYGBgYGAcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYYGAYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//gAH//wAA//4AAH//AAD/+AAAH/8AAP/gAAAH/wAA/8AAAAP/AAD/gAAAAf8AAP8AAAAA/wAA/gAAAAB/AAD8AAAAAD8AAPgAAAAAHwAA+AAAAAAfAADwAAAAAA8AAPAAAAAADwAA4AAAAAAHAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAAAAAABwAA8AAAAAAPAADwAAAAAA8AAPgAAAAAHwAA+AAAAAAfAAD8AAAAAD8AAP4AAAAAfwAA/wAAAAD/AAD/gAAAAf8AAP/AAAAD/wAA/+AAAAf/AAD/+AAAH/8AAP/+AAB//wAA//+AAf//AAD///////8AAP///////wAA`,running:`data:image/x-icon;base64,AAABAAEAMDAAAAEACACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAA0YsAAMWEAwDHgwIAx4QBAMeEAgDGhAIAyIUBAMaFAwDGhAIAxoIAAMaFAgDHhAIAx4QCAMiFAwDHhAIAx4YAAMaFAgDHhQEAxoMCAMeEAgDHgwQAx4QDAMeDAgDHhAIA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYYGAYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcYGBgYGBgYGBgYGBgYGAcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGBgYGBgYGBgYGBgYGBgYGBgYCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAsYGBgYGBgYDA0OChkZGRkKDg0MGBgYGBgYGAsAAAAAAAAAAAAAAAAAAAAAAAAAAxgYGBgYGA8QGRkZGRkZGRkZGRkZEA8YGBgYGBgDAAAAAAAAAAAAAAAAAAAAAAARGBgYGBgSChkZGRkZGRkZGRkZGRkZGRkKEhgYGBgYEQAAAAAAAAAAAAAAAAAAAAMYGBgYGBMZGRkZGRkZGRkZGRkZGRkZGRkZGRMYGBgYGAMAAAAAAAAAAAAAAAAACxgYGBgUEBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQFBgYGBgLAAAAAAAAAAAAAAAKGBgYGBQKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChQYGBgYCgAAAAAAAAAAAAAEGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYBAAAAAAAAAAAAAgYGBgYExkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkTGBgYGAgAAAAAAAAAAAkYGBgSGRkZGRkZGRkZFRgWFxkZGRkZGRkZGRkZGRkZGRkZEhgYGAkAAAAAAAAAAhgYGBgKGRkZGRkZGRkZFhgYGBYVGRkZGRkZGRkZGRkZGRkZChgYGBgCAAAAAAAABxgYGA8ZGRkZGRkZGRkZGBgYGBgYFxkZGRkZGRkZGRkZGRkZGQ8YGBgHAAAAAAABGBgYGBAZGRkZGRkZGRkZGBgYGBgYGBYVGRkZGRkZGRkZGRkZGRAYGBgYAQAAAAACGBgYDBkZGRkZGRkZGRkZGBgYGBgYGBgYFxkZGRkZGRkZGRkZGRkMGBgYAgAAAAADGBgYDRkZGRkZGRkZGRkZGBgYGBgYGBgYGBYVGRkZGRkZGRkZGRkNGBgYAwAAAAAEGBgYDhkZGRkZGRkZGRkZGBgYGBUWGBgYGBgYFxkZGRkZGRkZGRkOGBgYBAAAAAAFGBgYChkZGRkZGRkZGRkZGBgYGBkZFxgYGBgYGBYVGRkZGRkZGRkKGBgYBQAAAAAGGBgYGRkZGRkZGRkZGRkZGBgYGBkZGRUWGBgYGBgYFxkZGRkZGRkZGBgYBgAAAAAYGBgYGRkZGRkZGRkZGRkZGBgYGBkZGRkZFxgYGBgYFxkZGRkZGRkZGBgYGAAAAAAYGBgYGRkZGRkZGRkZGRkZGBgYGBkZGRkZFxgYGBgYFhkZGRkZGRkZGBgYGAAAAAAGGBgYGRkZGRkZGRkZGRkZGBgYGBkZGRkXGBgYGBgYFRkZGRkZGRkZGBgYBgAAAAAFGBgYChkZGRkZGRkZGRkZGBgYGBkZFxgYGBgYGBcZGRkZGRkZGRkKGBgYBQAAAAAEGBgYDhkZGRkZGRkZGRkZGBgYGBkXGBgYGBgYFxkZGRkZGRkZGRkOGBgYBAAAAAADGBgYDRkZGRkZGRkZGRkZGBgYGBgYGBgYGBcZGRkZGRkZGRkZGRkNGBgYAwAAAAACGBgYDBkZGRkZGRkZGRkZGBgYGBgYGBgYFxkZGRkZGRkZGRkZGRkMGBgYAgAAAAABGBgYGBAZGRkZGRkZGRkZGBgYGBgYGBcZGRkZGRkZGRkZGRkZGRAYGBgYAQAAAAAABxgYGA8ZGRkZGRkZGRkZGBgYGBgYFxkZGRkZGRkZGRkZGRkZGQ8YGBgHAAAAAAAAAhgYGBgKGRkZGRkZGRkZFhgYGBcZGRkZGRkZGRkZGRkZGRkZChgYGBgCAAAAAAAAAAkYGBgSGRkZGRkZGRkZFRYWFxkZGRkZGRkZGRkZGRkZGRkZEhgYGAkAAAAAAAAAAAgYGBgYExkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkTGBgYGAgAAAAAAAAAAAAEGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYBAAAAAAAAAAAAAAKGBgYGBQKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChQYGBgYCgAAAAAAAAAAAAAACxgYGBgUEBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQFBgYGBgLAAAAAAAAAAAAAAAAAAMYGBgYGBMZGRkZGRkZGRkZGRkZGRkZGRkZGRMYGBgYGAMAAAAAAAAAAAAAAAAAAAARGBgYGBgSChkZGRkZGRkZGRkZGRkZGRkKEhgYGBgYEQAAAAAAAAAAAAAAAAAAAAAAAxgYGBgYGA8QGRkZGRkZGRkZGRkZEA8YGBgYGBgDAAAAAAAAAAAAAAAAAAAAAAAAAAsYGBgYGBgYDA0OChkZGRkKDg0MGBgYGBgYGAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGBgYGBgYGBgYGBgYGBgYGBgYCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcYGBgYGBgYGBgYGBgYGAcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYYGAYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//gAH//wAA//4AAH//AAD/+AAAH/8AAP/gAAAH/wAA/8AAAAP/AAD/gAAAAf8AAP8AAAAA/wAA/gAAAAB/AAD8AAAAAD8AAPgAAAAAHwAA+AAAAAAfAADwAAAAAA8AAPAAAAAADwAA4AAAAAAHAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAAAAAABwAA8AAAAAAPAADwAAAAAA8AAPgAAAAAHwAA+AAAAAAfAAD8AAAAAD8AAP4AAAAAfwAA/wAAAAD/AAD/gAAAAf8AAP/AAAAD/wAA/+AAAAf/AAD/+AAAH/8AAP/+AAB//wAA//+AAf//AAD///////8AAP///////wAA`,error:`data:image/x-icon;base64,AAABAAEAMDAAAAEACACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAALi7oACcn2wAlJdsAJibcACYm3AAmJtsAJyfdACUl3QAmJtsAKCjdACUl3AAmJtwAJyfcACYm3AAoKNcAJibcACcn3AAmJt0AJibcACUl3AAmJtwAKCjbACcn3AAmJtsAJibcAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYZGQYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcZGRkZGRkZGRkZGRkZGQcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGRkZGRkZGRkZGRkZGRkZGRkZCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAsZGRkZGRkZDA0ODxoaGhoPDg0MGRkZGRkZGQsAAAAAAAAAAAAAAAAAAAAAAAAAAxkZGRkZGRARGhoaGhoaGhoaGhoaERAZGRkZGRkDAAAAAAAAAAAAAAAAAAAAAAASGRkZGRkTDxoaGhoaGhoaGhoaGhoaGhoPExkZGRkZEgAAAAAAAAAAAAAAAAAAAAMZGRkZGRQaGhoaGhoaGhoaGhoaGhoaGhoaGhQZGRkZGQMAAAAAAAAAAAAAAAAACxkZGRkVERoaGhoaGhoaGhoaGhoaGhoaGhoaGhoRFRkZGRkLAAAAAAAAAAAAAAAKGRkZGRUPGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaDxUZGRkZCgAAAAAAAAAAAAAEGRkZGREaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhEZGRkZBAAAAAAAAAAAAAgZGRkZFBoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoUGRkZGQgAAAAAAAAAAAkZGRkTGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaExkZGQkAAAAAAAAAAhkZGRkPGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaDxkZGRkCAAAAAAAABxkZGRAaGhoaGhoaGhYXFxYaGhoaGhoaGhgXFxYaGhoaGhoaGhAZGRkHAAAAAAABGRkZGREaGhoaGhoaGhcZGRkYGhoaGhoaGBkZGRcaGhoaGhoaGhEZGRkZAQAAAAACGRkZDBoaGhoaGhoaGhcZGRkZGBoaGhoYGRkZGRcaGhoaGhoaGhoMGRkZAgAAAAADGRkZDRoaGhoaGhoaGhgZGRkZGRgaGhgZGRkZGRYaGhoaGhoaGhoNGRkZAwAAAAAEGRkZDhoaGhoaGhoaGhoYGRkZGRkYGBkZGRkZGBoaGhoaGhoaGhoOGRkZBAAAAAAFGRkZDxoaGhoaGhoaGhoaGBkZGRkZGRkZGRkYGhoaGhoaGhoaGhoPGRkZBQAAAAAGGRkZGhoaGhoaGhoaGhoaGhgZGRkZGRkZGRgaGhoaGhoaGhoaGhoaGRkZBgAAAAAZGRkZGhoaGhoaGhoaGhoaGhoYGRkZGRkZGBoaGhoaGhoaGhoaGhoaGRkZGQAAAAAZGRkZGhoaGhoaGhoaGhoaGhoYGRkZGRkZGBoaGhoaGhoaGhoaGhoaGRkZGQAAAAAGGRkZGhoaGhoaGhoaGhoaGhgZGRkZGRkZGRgaGhoaGhoaGhoaGhoaGRkZBgAAAAAFGRkZDxoaGhoaGhoaGhoaGBkZGRkZGRkZGRkYGhoaGhoaGhoaGhoPGRkZBQAAAAAEGRkZDhoaGhoaGhoaGhoYGRkZGRkYGBkZGRkZGBoaGhoaGhoaGhoOGRkZBAAAAAADGRkZDRoaGhoaGhoaGhYZGRkZGRgaGhgZGRkZGRgaGhoaGhoaGhoNGRkZAwAAAAACGRkZDBoaGhoaGhoaGhcZGRkZGBoaGhoYGRkZGRcaGhoaGhoaGhoMGRkZAgAAAAABGRkZGREaGhoaGhoaGhcZGRkYGhoaGhoaGBkZGRcaGhoaGhoaGhEZGRkZAQAAAAAABxkZGRAaGhoaGhoaGhYXFxgaGhoaGhoaGhYXFxYaGhoaGhoaGhAZGRkHAAAAAAAAAhkZGRkPGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaDxkZGRkCAAAAAAAAAAkZGRkTGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaExkZGQkAAAAAAAAAAAgZGRkZFBoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoUGRkZGQgAAAAAAAAAAAAEGRkZGREaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhEZGRkZBAAAAAAAAAAAAAAKGRkZGRUPGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaDxUZGRkZCgAAAAAAAAAAAAAACxkZGRkVERoaGhoaGhoaGhoaGhoaGhoaGhoaGhoRFRkZGRkLAAAAAAAAAAAAAAAAAAMZGRkZGRQaGhoaGhoaGhoaGhoaGhoaGhoaGhQZGRkZGQMAAAAAAAAAAAAAAAAAAAASGRkZGRkTDxoaGhoaGhoaGhoaGhoaGhoPExkZGRkZEgAAAAAAAAAAAAAAAAAAAAAAAxkZGRkZGRARGhoaGhoaGhoaGhoaERAZGRkZGRkDAAAAAAAAAAAAAAAAAAAAAAAAAAsZGRkZGRkZDA0ODxoaGhoPDg0MGRkZGRkZGQsAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGRkZGRkZGRkZGRkZGRkZGRkZCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcZGRkZGRkZGRkZGRkZGQcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYZGQYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//gAH//wAA//4AAH//AAD/+AAAH/8AAP/gAAAH/wAA/8AAAAP/AAD/gAAAAf8AAP8AAAAA/wAA/gAAAAB/AAD8AAAAAD8AAPgAAAAAHwAA+AAAAAAfAADwAAAAAA8AAPAAAAAADwAA4AAAAAAHAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAAAAAABwAA8AAAAAAPAADwAAAAAA8AAPgAAAAAHwAA+AAAAAAfAAD8AAAAAD8AAP4AAAAAfwAA/wAAAAD/AAD/gAAAAf8AAP/AAAAD/wAA/+AAAAf/AAD/+AAAH/8AAP/+AAB//wAA//+AAf//AAD///////8AAP///////wAA`};function Bt(){let e=document.querySelector(`link[rel~='icon']`);if(e)return e;let t=document.createElement(`link`);return t.rel=`icon`,document.head.append(t),t}function Vt(e){if(document.visibilityState===`visible`)return;let t=()=>{e===0?new Notification(`Execution completed`,{body:`Your notebook run completed successfully.`,icon:$.success}):new Notification(`Execution failed`,{body:`Your notebook run encountered ${e} error(s).`,icon:$.error})};!(`Notification`in window)||Notification.permission===`denied`||(Notification.permission===`granted`?t():Notification.permission==="default"&&Notification.requestPermission().then(e=>{e===`granted`&&t()}))}var Ht=e=>{let t=(0,Z.c)(11),{isRunning:n}=e,r=i(E),a,o;t[0]!==n||t[1]!==r?(a=()=>{let e=Bt();if(!n&&e.href.includes(`favicon`)||(e.href=$[n?`running`:r===0?`success`:`error`],!document.hasFocus()))return;let t=setTimeout(()=>{e.href=$.idle},3e3);return()=>clearTimeout(t)},o=[n,r],t[0]=n,t[1]=r,t[2]=a,t[3]=o):(a=t[2],o=t[3]),(0,Q.useEffect)(a,o);let s=J(n)??n,c,l;t[4]!==n||t[5]!==r||t[6]!==s?(c=()=>{s&&!n&&Vt(r)},l=[r,s,n],t[4]=n,t[5]=r,t[6]=s,t[7]=c,t[8]=l):(c=t[7],l=t[8]),(0,Q.useEffect)(c,l);let u;return t[9]===n?u=t[10]:(u=()=>{if(!n){let e=Bt();e.href=$.idle}},t[9]=n,t[10]=u),M(window,`focus`,u),null};function Ut(){let{cellIds:e,cellRuntime:t}=a.get(T),n=e.inOrderIds.find(e=>t[e]?.status===`running`);n&&gt(n,`focus`)}var Wt=e=>{let t=(0,Z.c)(18),{connection:n,isRunning:r,onReconnect:a}=e,{mode:o}=i(Ie),s=n.state===O.CLOSED&&(o===`read`||n.code!==k.KERNEL_STARTUP_ERROR),c=n.state===O.OPEN,l=s&&n.code===k.KERNEL_DISCONNECTED,u;t[0]===s?u=t[1]:(u=s&&(0,X.jsx)(Jt,{}),t[0]=s,t[1]=u);let d=o===`read`?`fixed`:`absolute`,f;t[2]===d?f=t[3]:(f=I(`z-50 top-4 left-4`,d),t[2]=d,t[3]=f);let p;t[4]!==c||t[5]!==r?(p=c&&r&&(0,X.jsx)(qt,{}),t[4]=c,t[5]=r,t[6]=p):p=t[6];let m;t[7]!==l||t[8]!==s||t[9]!==a?(m=s&&(0,X.jsx)(Kt,{onReconnect:l?a:void 0}),t[7]=l,t[8]=s,t[9]=a,t[10]=m):m=t[10];let h;t[11]!==f||t[12]!==p||t[13]!==m?(h=(0,X.jsxs)(`div`,{className:f,children:[p,m]}),t[11]=f,t[12]=p,t[13]=m,t[14]=h):h=t[14];let g;return t[15]!==u||t[16]!==h?(g=(0,X.jsxs)(X.Fragment,{children:[u,h]}),t[15]=u,t[16]=h,t[17]=g):g=t[17],g},Gt=`print:hidden pointer-events-auto hover:cursor-pointer`,Kt=e=>{let t=(0,Z.c)(12),{onReconnect:n}=e,r=!n,i=r?`App disconnected`:`App disconnected — click to reconnect`,a=r?0:-1,o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=I(Gt,`bg-transparent border-0 p-0`),t[0]=o):o=t[0];let s=r?`App disconnected`:`Reconnect to app`,c;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,X.jsx)(Tt,{className:`w-[25px] h-[25px] text-(--red-11)`}),t[1]=c):c=t[1];let l;t[2]!==r||t[3]!==n||t[4]!==s?(l=(0,X.jsx)(`button`,{type:`button`,className:o,"aria-label":s,"data-testid":`disconnected-indicator`,onClick:n,disabled:r,children:c}),t[2]=r,t[3]=n,t[4]=s,t[5]=l):l=t[5];let u;t[6]!==a||t[7]!==l?(u=(0,X.jsx)(`span`,{tabIndex:a,children:l}),t[6]=a,t[7]=l,t[8]=u):u=t[8];let d;return t[9]!==i||t[10]!==u?(d=(0,X.jsx)(G,{content:i,children:u}),t[9]=i,t[10]=u,t[11]=d):d=t[11],d},qt=()=>{let e=(0,Z.c)(6),t=i(w),n=t?`Scratchpad is running`:`Jump to running cell`,r=t?void 0:Ut,a;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,X.jsx)(Ct,{className:`running-app-icon`,size:30,strokeWidth:1}),e[0]=a):a=e[0];let o;e[1]===r?o=e[2]:(o=(0,X.jsx)(`div`,{className:Gt,"data-testid":`loading-indicator`,onClick:r,children:a}),e[1]=r,e[2]=o);let s;return e[3]!==o||e[4]!==n?(s=(0,X.jsx)(G,{content:n,side:`right`,children:o}),e[3]=o,e[4]=n,e[5]=s):s=e[5],s},Jt=()=>{let e=(0,Z.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`noise`}),(0,X.jsx)(`div`,{className:`disconnected-gradient`})]}),e[0]=t):t=e[0],t},Yt=Ge,Xt=We,Zt=L(qe),Qt=Q.forwardRef((e,t)=>{let n=(0,Z.c)(9),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a;n[3]===r?a=n[4]:(a=I(`fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,r),n[3]=r,n[4]=a);let o;return n[5]!==i||n[6]!==t||n[7]!==a?(o=(0,X.jsx)(V,{className:a,...i,ref:t}),n[5]=i,n[6]=t,n[7]=a,n[8]=o):o=n[8],o});Qt.displayName=V.displayName;var $t=Ve(`fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500`,{variants:{side:{top:`inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top`,bottom:`inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom`,left:`inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm`,right:`inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm`}},defaultVariants:{side:`right`}}),en=Q.forwardRef((e,t)=>{let n=(0,Z.c)(15),r,i,a,o;n[0]===e?(r=n[1],i=n[2],a=n[3],o=n[4]):({side:o,className:i,children:r,...a}=e,n[0]=e,n[1]=r,n[2]=i,n[3]=a,n[4]=o);let s=o===void 0?`right`:o,c;n[5]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,X.jsx)(Qt,{}),n[5]=c):c=n[5];let l;n[6]!==i||n[7]!==s?(l=I($t({side:s}),i),n[6]=i,n[7]=s,n[8]=l):l=n[8];let u;n[9]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,X.jsxs)(Ke,{className:`absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary`,children:[(0,X.jsx)(mt,{className:`h-4 w-4`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Close`})]}),n[9]=u):u=n[9];let d;return n[10]!==r||n[11]!==a||n[12]!==t||n[13]!==l?(d=(0,X.jsx)(Zt,{children:(0,X.jsxs)(Ue,{children:[c,(0,X.jsxs)(B,{ref:t,className:l,...a,children:[r,u]})]})}),n[10]=r,n[11]=a,n[12]=t,n[13]=l,n[14]=d):d=n[14],d});en.displayName=B.displayName;var tn=Q.forwardRef((e,t)=>{let n=(0,Z.c)(9),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a;n[3]===r?a=n[4]:(a=I(`text-lg font-semibold text-foreground`,r),n[3]=r,n[4]=a);let o;return n[5]!==i||n[6]!==t||n[7]!==a?(o=(0,X.jsx)(z,{ref:t,className:a,...i}),n[5]=i,n[6]=t,n[7]=a,n[8]=o):o=n[8],o});tn.displayName=z.displayName;var nn=Q.forwardRef((e,t)=>{let n=(0,Z.c)(9),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a;n[3]===r?a=n[4]:(a=I(`text-sm text-muted-foreground`,r),n[3]=r,n[4]=a);let o;return n[5]!==i||n[6]!==t||n[7]!==a?(o=(0,X.jsx)(R,{ref:t,className:a,...i}),n[5]=i,n[6]=t,n[7]=a,n[8]=o):o=n[8],o});nn.displayName=R.displayName;var rn=(0,Q.memo)(()=>{let e=(0,Z.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,X.jsx)(Je,{name:U.SIDEBAR}),e[0]=t):t=e[0],t});rn.displayName=`SidebarSlot`;var an=e=>{let t=(0,Z.c)(6),{openWidth:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,X.jsx)(Xt,{className:`lg:hidden`,asChild:!0,children:(0,X.jsx)(K,{variant:`ghost`,className:`bg-background`,children:(0,X.jsx)(wt,{className:`w-5 h-5`})})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i={maxWidth:n},t[1]=n,t[2]=i);let a;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,X.jsx)(rn,{}),t[3]=a):a=t[3];let o;return t[4]===i?o=t[5]:(o=(0,X.jsxs)(Yt,{children:[r,(0,X.jsx)(en,{className:`w-full px-3 h-full flex flex-col overflow-y-auto`,style:i,side:`left`,children:a})]}),t[4]=i,t[5]=o),o},on=e=>{let t=(0,Z.c)(7),{isOpen:n,toggle:r}=e,i=n?`rotate-0`:`rotate-180`,a;t[0]===i?a=t[1]:(a=I(`h-5 w-5 transition-transform ease-in-out duration-700`,i),t[0]=i,t[1]=a);let o;t[2]===a?o=t[3]:(o=(0,X.jsx)(W,{className:a}),t[2]=a,t[3]=o);let s;return t[4]!==o||t[5]!==r?(s=(0,X.jsx)(`div`,{className:`invisible lg:visible absolute top-[12px] right-[16px] z-20`,children:(0,X.jsx)(K,{onClick:r,className:`w-10 h-8`,variant:`ghost`,size:`icon`,children:o})}),t[4]=o,t[5]=r,t[6]=s):s=t[6],s},sn=e=>{let t=(0,Z.c)(11),{isOpen:n,toggle:r,width:i}=e,a=n?i:A,o;t[0]===a?o=t[1]:(o={width:a},t[0]=a,t[1]=o);let s;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(s=I(`app-sidebar auto-collapse-nav`,`top-0 left-0 z-20 h-full hidden lg:block relative transition-[width] ease-in-out duration-300`),t[2]=s):s=t[2];let c;t[3]!==n||t[4]!==r?(c=(0,X.jsx)(on,{isOpen:n,toggle:r}),t[3]=n,t[4]=r,t[5]=c):c=t[5];let l;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,X.jsx)(`div`,{className:`relative h-full flex flex-col px-3 pb-16 pt-14 overflow-y-auto shadow-sm border-l`,children:(0,X.jsx)(rn,{})}),t[6]=l):l=t[6];let u;return t[7]!==n||t[8]!==o||t[9]!==c?(u=(0,X.jsxs)(`aside`,{"data-expanded":n,style:o,className:s,children:[c,l]}),t[7]=n,t[8]=o,t[9]=c,t[10]=u):u=t[10],u},cn=e=>{let n=(0,Z.c)(15),{children:r}=e,[i,a]=t(Ae),{isOpen:o,width:s}=i;if(H(U.SIDEBAR).length===0)return r;let c;n[0]===s?c=n[1]:(c=De(s),n[0]=s,n[1]=c);let l=c,u;n[2]!==a||n[3]!==o?(u=()=>a({type:`toggle`,isOpen:!o}),n[2]=a,n[3]=o,n[4]=u):u=n[4];let d;n[5]!==o||n[6]!==l||n[7]!==u?(d=(0,X.jsx)(sn,{isOpen:o,width:l,toggle:u}),n[5]=o,n[6]=l,n[7]=u,n[8]=d):d=n[8];let f;n[9]===l?f=n[10]:(f=(0,X.jsx)(`div`,{className:`absolute top-3 left-4 flex items-center z-50`,children:(0,X.jsx)(an,{openWidth:l})}),n[9]=l,n[10]=f);let p;return n[11]!==r||n[12]!==d||n[13]!==f?(p=(0,X.jsxs)(`div`,{className:`inset-0 absolute flex`,children:[d,f,r]}),n[11]=r,n[12]=d,n[13]=f,n[14]=p):p=n[14],p},ln=e=>{let t=(0,Z.c)(19),{width:n,connection:r,isRunning:i,children:a,onReconnect:o}=e,s=r.state,c;t[0]===i?c=t[1]:(c=(0,X.jsx)(Ht,{isRunning:i}),t[0]=i,t[1]=c);let l;t[2]!==r||t[3]!==i||t[4]!==o?(l=(0,X.jsx)(Wt,{connection:r,isRunning:i,onReconnect:o}),t[2]=r,t[3]=i,t[4]=o,t[5]=l):l=t[5];let u=r.state===O.CLOSED&&r.code!==k.KERNEL_STARTUP_ERROR&&`disconnected`,d=n===`full`&&`config-width-full`,f=n===`columns`?`overflow-x-auto`:`overflow-x-auto sm:overflow-x-hidden`,p;t[6]!==u||t[7]!==d||t[8]!==f?(p=I(`mathjax_ignore`,u,`bg-background w-full h-full text-textColor`,`flex flex-col overflow-y-auto`,d,f,`print:height-fit`),t[6]=u,t[7]=d,t[8]=f,t[9]=p):p=t[9];let m;t[10]!==a||t[11]!==s||t[12]!==p||t[13]!==n?(m=(0,X.jsx)(It,{children:(0,X.jsx)(cn,{children:(0,X.jsx)(`div`,{id:`App`,"data-config-width":n,"data-connection-state":s,className:p,children:a})})}),t[10]=a,t[11]=s,t[12]=p,t[13]=n,t[14]=m):m=t[14];let h;return t[15]!==c||t[16]!==l||t[17]!==m?(h=(0,X.jsxs)(X.Fragment,{children:[c,l,m]}),t[15]=c,t[16]=l,t[17]=m,t[18]=h):h=t[18],h},un=(0,Q.memo)(e=>{let t=(0,Z.c)(9),{appConfig:n,mode:r,children:a}=e,{selectedLayout:o}=rt();if(!i(Pe)&&(r===`edit`||r===`present`&&o===`vertical`))return a;let s=r===`read`,c;t[0]!==o||t[1]!==s?(c=it({selectedLayout:o,isReading:s,searchParams:new URLSearchParams(window.location.search)}),t[0]=o,t[1]=s,t[2]=c):c=t[2];let l=c,u;t[3]===l?u=t[4]:(u=Ye.find(e=>e.type===l),t[3]=l,t[4]=u);let d=u;if(!d)return a;let f;return t[5]!==n||t[6]!==r||t[7]!==d?(f=(0,X.jsx)(dn,{appConfig:n,mode:r,plugin:d}),t[5]=n,t[6]=r,t[7]=d,t[8]=f):f=t[8],f});un.displayName=`CellsRenderer`;var dn=e=>{let t=(0,Z.c)(12),{appConfig:n,mode:r,plugin:i}=e,a=rt(),o=g(),{setCurrentLayoutData:s}=nt(),c,l;t[0]!==a||t[1]!==o||t[2]!==i?(c=se(o),l=Xe({state:a,plugin:i,cells:c}),t[0]=a,t[1]=o,t[2]=i,t[3]=c,t[4]=l):(c=t[3],l=t[4]);let u=l,d=i.Component,f;return t[5]!==d||t[6]!==n||t[7]!==c||t[8]!==u||t[9]!==r||t[10]!==s?(f=(0,X.jsx)(d,{appConfig:n,mode:r,cells:c,layout:u,setLayout:s}),t[5]=d,t[6]=n,t[7]=c,t[8]=u,t[9]=r,t[10]=s,t[11]=f):f=t[11],f},fn=class e{hasStarted=!1;static get INSTANCE(){let t=`_marimo_private_RuntimeState`;return window[t]||(window[t]=new e(Oe)),window[t]}_sendComponentValues;uiElementRegistry;constructor(e){this.uiElementRegistry=e}get sendComponentValues(){if(!this._sendComponentValues)throw Error(`sendComponentValues is not set`);return this._sendComponentValues}start(e){if(this.hasStarted){j.warn(`RuntimeState already started`);return}this._sendComponentValues=e,document.addEventListener(ht.TYPE,this.handleReadyEvent),this.hasStarted=!0}stop(){if(!this.hasStarted){j.warn(`RuntimeState already stopped`);return}document.removeEventListener(ht.TYPE,this.handleReadyEvent),this.hasStarted=!1}handleReadyEvent=e=>{let t=e.detail.objectId;if(!this.uiElementRegistry.has(t))return;let n=this.uiElementRegistry.lookupValue(t);n!==void 0&&this.sendComponentValues({objectIds:[t],values:[n]}).catch(e=>{j.warn(e)})}},pn={initial:[],on:{attachment:(e,{data:{attachment:t}})=>e.some(e=>e.id===t.id)?e.map(e=>e.id===t.id?t:e):[...e,t],"attachment.removed":(e,{data:t})=>e.some(e=>e.id===t.id)?e.filter(e=>e.id!==t.id):e}};function mn(e){return e.pending??{revision:e.current?.revision??null,cells:e.current?.cells??new Map}}function hn(e,t){let n=new Set(e.order);if(n.size!==e.order.length||n.size!==t.size||[...n].some(e=>!t.has(e))||[...t.values()].some(t=>t.version>e.version))throw Error(`Document records do not match its revision and order`);return{current:{revision:e,cells:t},pending:null}}var gn={initial:{current:null,pending:null},on:{cell:(e,{data:t})=>{let n=mn(e);return{...e,pending:{revision:n.revision,cells:new Map(n.cells).set(t.cell.id,t.cell)}}},"cell.removed":(e,{data:t})=>{let n=mn(e);if(!n.cells.has(t.id))return e;let r=new Map(n.cells);return r.delete(t.id),{...e,pending:{...n,cells:r}}},document:(e,{data:t},{phase:n})=>{let{cells:r}=mn(e);return n===`snapshot`?{...e,pending:{revision:t.document,cells:r}}:hn(t.document,r)},ready:(e,t,{phase:n})=>{if(e.pending===null)return e;if(n===`live`)throw Error(`Stream ended with an incomplete document update`);return e.pending.revision===null?{current:null,pending:null}:hn(e.pending.revision,e.pending.cells)}}},_n=new Set([`reset`,`marimo`,`unknown`]);function vn(e){switch(e.event){case`document`:return e.data.document.notebook_id;case`cell`:return e.data.cell.notebook_id;case`analysis`:return e.data.analysis.notebook_id;case`runtime`:return e.data.runtime.notebook_id;case`attachment`:return e.data.attachment.notebook_id;case`run`:return e.data.run.notebook_id;default:return}}function yn(e){let t=Object.keys(e),n=Object.fromEntries(t.map(t=>[t,e[t].initial])),r={phase:`snapshot`,notebookId:null,cursor:null,resources:n};function i(e,t){if(e.notebookId===t)return e;if(e.notebookId!==null)throw Error(`Notebook stream changed identity`);return{...e,notebookId:t}}function a(e){return e.resources===n?e:{...e,resources:n}}function o(n,r){let i={phase:n.phase},a=n.resources;for(let n of t){let t=e[n].on[r.event];if(t===void 0)continue;let o=a[n],s=t(o,r,i);s!==o&&(a={...a,[n]:s})}return a===n.resources?n:{...n,resources:a}}function s(e,t){return e.phase===`live`&&t!==void 0&&t!==e.cursor?{...e,cursor:t}:e}return{initial:r,reduce(e,t){if(e.phase===`live`&&t.id===void 0&&!_n.has(t.event))throw Error(`Live notebook event is missing its cursor`);switch(t.event){case`marimo`:case`unknown`:return s(e,t.id);case`reset`:return{...r,notebookId:e.notebookId};case`ready`:return{...o(e,t),phase:`live`,cursor:t.id};case`notebook`:return s(i(e,t.data.notebook.id),t.id);case`notebook.removed`:return s(e.notebookId!==null&&t.data.id!==e.notebookId?e:a(e),t.id);default:{let n=vn(t);return s(o(n===void 0?e:i(e,n),t),t.id)}}},resume(e){return e.phase===`snapshot`?{...r,notebookId:e.notebookId}:e}}}function bn(e){let t=r({state:O.NOT_STARTED}),n=yn({document:gn,attachments:pn}),i=r(n.initial),a=r(!1),o=r(e=>e(i).resources.document.current),s=r(e=>e(a)&&e(t).state===O.OPEN?e(i).resources.attachments:pn.initial),c,l={connectionAtom:t,documentAtom:o,attachmentsAtom:s,reconnect:async()=>c?.()};function u({createTransport:r,url:o,messageFormat:s,signal:l,waitUntilReady:u,checkHealth:d,onNotification:f,onMessageError:p,decodeJson:m,classifyClose:h}){if(l.aborted)return;let g=!0,_=!1,v=!1,ee,y=r(()=>{if(s===`session`)return o();let t=new URL(o());if(t.searchParams.delete(`cursor`),l.aborted)return t.toString();let r=new URL(t);r.searchParams.delete(`access_token`),r.searchParams.sort();let c=r.toString(),u=c===ee?n.resume(e.get(i)):n.initial;return ee=c,e.set(a,!1),e.set(i,u),u.cursor!==null&&t.searchParams.set(`cursor`,u.cursor),t.toString()}),b=n=>{e.set(a,!1),e.set(t,n)},x={state:O.CLOSED,code:k.KERNEL_DISCONNECTED,reason:`kernel not found`};function S(e,t){!l.aborted&&!_&&g&&(g=!1,y.reconnect(e,t))}function C(){l.aborted||_||(g=!0,b({state:O.OPEN}))}function te(e){if(l.aborted||_)return;j.warn(`Notebook connection closed`,e.code,e.reason);let t=h(e);b(t.status),t.kind===`terminal`?(_=!0,y.close()):t.kind===`retry`?S(e.code,e.reason):_=!0}function w(e){l.aborted||_||(j.warn(`Notebook connection error`,e),b(x),S())}function ne(t){if(l.aborted||_)return;let r;try{r=ge(m(t.data)),e.set(i,n.reduce(e.get(i),r)),(r.event===`ready`||r.event===`reset`)&&e.set(a,r.event===`ready`)}catch(t){if(j.error(`Failed to decode notebook message`,t),s===`session`){p(t);return}e.set(i,n.initial),_=!0,b({...x,reason:`Failed to decode notebook message`}),y.close();return}r.event===`marimo`&&f(r.data.marimo)}c=async()=>{if(!(l.aborted||v||y.readyState===D.OPEN||y.readyState===D.CONNECTING)){v=!0,b({state:O.CONNECTING});try{let e=await d();if(l.aborted)return;if(!e){g=!1,b(x);return}_=!1,g=!0,y.reconnect()}catch(e){l.aborted||(j.error(`Notebook health check failed`,e),g=!1,b(x))}finally{v=!1}}},l.addEventListener(`abort`,()=>{y.removeEventListener(`open`,C),y.removeEventListener(`close`,te),y.removeEventListener(`error`,w),y.removeEventListener(`message`,ne),y.close(),c=void 0,e.set(i,n.initial),b({state:O.NOT_STARTED})},{once:!0}),y.addEventListener(`open`,C),y.addEventListener(`close`,te),y.addEventListener(`error`,w),y.addEventListener(`message`,ne),y.readyState===D.CLOSED&&(b({state:O.CONNECTING}),u().then(()=>{l.aborted||y.reconnect()}).catch(e=>{l.aborted||(j.error(`Healthy connection never made`,e),_=!0,b(x),y.close())}))}return{client:l,connect:u}}var xn=`MARIMO_TRANSPORT_EXHAUSTED`,Sn=class{inner;closeWrappers=new WeakMap;constructor(e){this.inner=new xt(e,void 0,{maxRetries:10,debug:!1,startClosed:!0,connectionTimeout:1e4})}get readyState(){return this.inner.readyState}reconnect(e,t){this.inner.reconnect(e,t)}close(){this.inner.close()}send(e){this.inner.send(e)}addEventListener(e,t){if(e===`close`){let e=t;if(this.closeWrappers.has(e))return;let n=t=>{this.inner.retryCount>=10?e(new CloseEvent(`close`,{code:t.code,reason:xn,wasClean:t.wasClean})):e(t)};this.closeWrappers.set(e,n),this.inner.addEventListener(`close`,n);return}this.inner.addEventListener(e,t)}removeEventListener(e,t){if(e===`close`){let e=t,n=this.closeWrappers.get(e);n&&(this.closeWrappers.delete(e),this.inner.removeEventListener(`close`,n));return}this.inner.removeEventListener(e,t)}};function Cn(e){switch(e.reason){case xn:return{kind:`gave-up`,status:{state:O.CLOSED,code:k.KERNEL_DISCONNECTED,reason:`kernel not found`}};case`MARIMO_NO_FILE_KEY`:case`MARIMO_NO_SESSION_ID`:case`MARIMO_NO_SESSION`:case`MARIMO_SHUTDOWN`:return{kind:`terminal`,status:{state:O.CLOSED,code:k.KERNEL_DISCONNECTED,reason:`kernel not found`}};case`MARIMO_UNAUTHORIZED`:return{kind:`terminal`,status:{state:O.CLOSED,code:k.KERNEL_DISCONNECTED,reason:`not authorized`}};case`MARIMO_KIOSK_NOT_ALLOWED`:return{kind:`terminal`,status:{state:O.CLOSED,code:k.KERNEL_DISCONNECTED,reason:`kiosk mode is not available for this session`}};case`MARIMO_KERNEL_STARTUP_ERROR`:return{kind:`terminal`,status:{state:O.CLOSED,code:k.KERNEL_STARTUP_ERROR,reason:`Failed to start kernel sandbox`}};default:e.reason&&j.warn(`Unrecognized connection close reason`,e.reason)}return{kind:`retry`,status:{state:O.CONNECTING}}}var wn=1e4,Tn=1e3,En=1e4,Dn=1.3,On=1006,kn=class{subscriptions=new Se;urlProvider;headersProvider;abortController=null;retryTimer=null;retryCount=0;userClosed=!1;state=WebSocket.CLOSED;constructor(e,t=()=>({})){this.urlProvider=e,this.headersProvider=t}get readyState(){return this.state}reconnect(e,t){this.userClosed=!1,this.retryCount=0,this.clearRetryTimer(),this.abortController?.abort(),this.connect()}close(){this.userClosed=!0,this.clearRetryTimer(),this.state=WebSocket.CLOSED,this.abortController?.abort(),this.abortController=null}send(e){j.warn(`SseTransport does not support send(); dropping message`)}addEventListener(e,t){this.subscriptions.addSubscription(e,t)}removeEventListener(e,t){this.subscriptions.removeSubscription(e,t)}connect(){this.state=WebSocket.CONNECTING,this.run()}async run(){let e=new AbortController;this.abortController=e;let t=setTimeout(()=>e.abort(),wn),n=null;try{let r=await fetch(this.urlProvider(),{headers:{...this.headersProvider(),Accept:`text/event-stream`},signal:e.signal});if(clearTimeout(t),!r.ok||r.body===null)throw Error(`Unexpected SSE response: ${r.status}`);this.state=WebSocket.OPEN,this.subscriptions.notify(`open`,new Event(`open`)),n=await this.readEvents(r.body)}catch(n){if(clearTimeout(t),this.isSuperseded(e))return;j.warn(`SSE connection failed`,n),this.subscriptions.notify(`error`,new Event(`error`))}if(this.isSuperseded(e))return;e.abort(),this.state=WebSocket.CLOSED,this.retryCount+=1;let r=this.retryCount>=10;this.subscriptions.notify(`close`,new CloseEvent(`close`,{code:n?.code??On,reason:r?xn:n?.reason??``,wasClean:n!==null})),!(r||this.isSuperseded(e))&&this.scheduleRetry()}isSuperseded(e){return this.userClosed||this.abortController!==e}scheduleRetry(){this.clearRetryTimer(),this.state=WebSocket.CONNECTING;let e=Math.min(Tn*Dn**this.retryCount,En);this.retryTimer=setTimeout(()=>{this.retryTimer=null,this.connect()},e)}clearRetryTimer(){this.retryTimer!==null&&(clearTimeout(this.retryTimer),this.retryTimer=null)}async readEvents(e){let t=e.getReader(),n=new TextDecoder,r=``,i=null,a=[],o=()=>{if(a.length===0)return i=null,null;let e=a.join(`
2
- `),t=i;return i=null,a=[],t===`close`?An(e):(this.retryCount=0,this.subscriptions.notify(`message`,new MessageEvent(`message`,{data:e})),null)};for(;;){let{done:e,value:s}=await t.read();if(e)return null;r+=n.decode(s,{stream:!0});let c=0,l=r.indexOf(`
3
- `,c);for(;l!==-1;){let e=r.slice(c,l);if(c=l+1,l=r.indexOf(`
4
- `,c),e.endsWith(`\r`)&&(e=e.slice(0,-1)),e===``){let e=o();if(e!==null)return e;continue}if(e.startsWith(`:`))continue;let t=e.indexOf(`:`),n=t===-1?e:e.slice(0,t),s=t===-1?``:e.slice(t+1);s.startsWith(` `)&&(s=s.slice(1)),n===`data`?a.push(s):n===`event`&&(i=s)}c>0&&(r=r.slice(c))}}};function An(e){try{let t=JSON.parse(e);return{code:typeof t.code==`number`?t.code:1e3,reason:typeof t.reason==`string`?t.reason:``}}catch{return j.warn(`Failed to parse SSE close event`,e),{code:1e3,reason:``}}}function jn(e){return e.static?we.empty():de()?Ee():e.transportType===`sse`?new kn(e.url,e.headers):new Sn(e.url)}function Mn(e){let t=(0,Z.c)(27),r=n(),{sessionId:i,static:a,transportType:s,messageFormat:c}=e,l;t[0]===r?l=t[1]:(l=bn(r),t[0]=r,t[1]=l);let u=l,d=o(e.url),f=o(e.headers),p=o(e.waitUntilReady),m=o(e.checkHealth),h=o(e.onNotification),g=o(e.onMessageError),_;t[2]!==m||t[3]!==u||t[4]!==f||t[5]!==a||t[6]!==c||t[7]!==g||t[8]!==h||t[9]!==r||t[10]!==s||t[11]!==d||t[12]!==p?(_=()=>{let e=new AbortController;return r.set(at,u.client),u.connect({createTransport:e=>jn({url:e,headers:f,static:a,transportType:s}),url:d,messageFormat:c,signal:e.signal,waitUntilReady:p,checkHealth:m,onMessageError:g,onNotification:e=>h({data:e}),decodeJson:b,classifyClose:Cn}),()=>{e.abort(),r.get(at)===u.client&&r.set(at,null)}},t[2]=m,t[3]=u,t[4]=f,t[5]=a,t[6]=c,t[7]=g,t[8]=h,t[9]=r,t[10]=s,t[11]=d,t[12]=p,t[13]=_):_=t[13];let v;return t[14]!==m||t[15]!==u||t[16]!==f||t[17]!==a||t[18]!==c||t[19]!==g||t[20]!==h||t[21]!==i||t[22]!==r||t[23]!==s||t[24]!==d||t[25]!==p?(v=[u,r,i,a,s,c,d,f,p,m,h,g],t[14]=m,t[15]=u,t[16]=f,t[17]=a,t[18]=c,t[19]=g,t[20]=h,t[21]=i,t[22]=r,t[23]=s,t[24]=d,t[25]=p,t[26]=v):v=t[26],(0,Q.useEffect)(_,v),u.client}function Nn(e){let{codes:t,names:n,configs:r,cell_ids:i,last_executed_code:a,last_execution_time:o}=e,s=a||{},c=o||{};return t.map((e,t)=>{let a=i[t],o=s[a];return S({id:a,code:e,edited:o?o!==e:!1,name:n[t],lastCodeRun:s[a]??null,lastExecutionTime:c[a]??null,config:r[t]})})}function Pn(e,t,n){let{layout:r}=e,i=Ze(r,t);return r&&r.type===i.selectedLayout&&n({layoutView:i.selectedLayout,data:i.layoutData[i.selectedLayout]}),i}function Fn(){let e=[],t=[];return Oe.entries.forEach((n,r)=>{e.push(r),t.push(n.value)}),{objectIds:e,values:t}}function In(e,t){let{existingCells:n,autoInstantiate:r,setCells:i,setLayoutData:a,setAppConfig:o,setCapabilities:s,setKernelState:c,onError:l}=t,{resumed:u,ui_values:d,app_config:f,capabilities:p,auto_instantiated:m}=e,h=n&&n.length>0,g=h&&!u?n:Nn(e);i(g,Pn(e,g,a));let _=ye.safeParse(f);if(_.success?o(_.data):j.error(`Failed to parse app config`,_.error),s(p),m)return;if(u){for(let[e,t]of Me.entries(d||{})){let n=e;Oe.set(n,t)}return}let{objectIds:v,values:ee}=Fn(),y=h?Object.fromEntries(n.map(e=>[e.id,e.code])):void 0;ct().sendInstantiate({objectIds:v,values:ee,autoRun:r,codes:y}).then(()=>{c({isInstantiated:!0,error:null})}).catch(e=>{c({isInstantiated:!1,error:e}),l(Error(`Failed to instantiate`,{cause:e}))})}function Ln(e){let t=e.cell_id;Oe.removeElementsByCell(t),Y.INSTANCE.removeForCellId(t)}function Rn(e,t){t(e),Y.INSTANCE.track(e)}var zn={append:e=>{let t=new URL(window.location.href);t.searchParams.append(e.key,e.value),window.history.pushState({},``,`${t.pathname}${t.search}`)},set:e=>{let t=new URL(window.location.href);Array.isArray(e.value)?(t.searchParams.delete(e.key),e.value.forEach(n=>t.searchParams.append(e.key,n))):t.searchParams.set(e.key,e.value),window.history.pushState({},``,`${t.pathname}${t.search}`)},delete:e=>{let t=new URL(window.location.href);e.value==null?t.searchParams.delete(e.key):t.searchParams.delete(e.key,e.value),window.history.pushState({},``,`${t.pathname}${t.search}`)},clear:()=>{let e=new URL(window.location.href);e.search=``,window.history.pushState({},``,`${e.pathname}${e.search}`)}};function Bn(){return Object.values(oe().cellData).filter(e=>e.id!==C)}function Vn(e){let r=(0,Z.c)(70),{autoInstantiate:a,sessionId:o,setCells:c}=e,{showBoundary:g}=Be(),{handleCellMessage:b}=d(),S;r[0]===Symbol.for(`react.memo_cache_sentinel`)?(S={skipMiddleware:!0},r[0]=S):S=r[0];let C=d(S),w;r[1]===C?w=r[2]:(w=e=>{l(e.changes,C,qn)},r[1]=C,r[2]=w);let T=w,{addCellNotification:ae}=St(),se=s(Le),E=s(ze),D=xe(),{setVariables:ge,setMetadata:ve}=ie(),{addColumnPreview:ye}=ne(),{addDatasets:Se,filterDatasetsFromVariables:we}=ne(),{addDataSourceConnection:Ee,filterDataSourcesFromVariables:De}=_(),{setLayoutData:ke}=nt(),[Ae,A]=t(_e),M=s(fe),{addBanner:Me}=vt(),{addMissingPackageAlert:N,updateEnvironment:P,setEnvironment:Ne,addStartupLog:Ie}=yt(),F=s(Pe),Re=s(Fe),Ve=s(h),I=he(),{notebookId:He}=i(pe),L=i(be),Ue=s(_t),R=s(bt),{setNamespaces:z,filterFromVariables:B}=te(),We;r[3]!==Me||r[4]!==ae||r[5]!==ye||r[6]!==Ee||r[7]!==Se||r[8]!==N||r[9]!==Ie||r[10]!==a||r[11]!==De||r[12]!==we||r[13]!==B||r[14]!==b||r[15]!==T||r[16]!==D||r[17]!==Ue||r[18]!==Ve||r[19]!==c||r[20]!==A||r[21]!==Ne||r[22]!==E||r[23]!==R||r[24]!==se||r[25]!==F||r[26]!==ke||r[27]!==ve||r[28]!==Re||r[29]!==z||r[30]!==ge||r[31]!==g||r[32]!==P||r[33]!==M?(We=e=>{switch(e.data.op){case`reload`:ft();return;case`startup-progress`:{let{phase:t}=e.data;M(e.data),A(e=>e.state===O.OPEN||e.state===O.CONNECTING&&e.phase===t?e:{state:O.CONNECTING,phase:t});return}case`kernel-ready`:{R(null),A({state:O.OPEN}),E(!!(e.data.resumed||e.data.auto_instantiated));let t=Bn();In(e.data,{autoInstantiate:a,setCells:c,setLayoutData:ke,setAppConfig:D,setCapabilities:Ve,setKernelState:se,onError:g,existingCells:t}),e.data.resumed||x(),F(e.data.kiosk),Re(e.data.stable_session_id??null),ce(null),le();return}case`completed-run`:E(!0);return;case`execution`:return;case`interrupted`:return;case`kernel-startup-error`:R(e.data.error);return;case`send-ui-element-message`:{let t=e.data.ui_element;if(t){let n=Qe(e.data);Oe.broadcastMessage(t,e.data.message,n)}return}case`model-lifecycle`:Ce(je,e.data);return;case`remove-ui-elements`:Ln(e.data);return;case`completion-result`:y.resolve(e.data.completion_id,e.data);return;case`function-call-result`:Te.resolve(e.data.function_call_id,e.data);return;case`cell-op`:{Rn(e.data,b);let t=oe().cellData[e.data.cell_id];if(!t)return;ae({cellNotification:e.data,code:t.code});return}case`variables`:{let t=e.data.variables.map(Kn);ge(e.data.variables.map(Gn)),we(t),De(t),B(t);return}case`variable-values`:ve(e.data.variables.map(Wn));return;case`alert`:ot({title:e.data.title,description:ut({html:e.data.description}),variant:e.data.variant});return;case`banner`:Me(e.data);return;case`missing-package-alert`:N({...e.data,kind:`missing`});return;case`environment-operation`:e.data.source===`kernel`&&e.data.status.kind!==`running`&&dt(),P(e.data);return;case`environment-state`:Ne(e.data),e.data.source===`kernel`&&dt();return;case`startup-logs`:Ie({content:e.data.content,status:e.data.status});return;case`query-params-append`:zn.append(e.data);return;case`query-params-set`:zn.set(e.data);return;case`query-params-delete`:zn.delete(e.data);return;case`query-params-clear`:zn.clear();return;case`datasets`:Se(e.data);return;case`data-column-preview`:ye(e.data);return;case`sql-table-preview`:ee.resolve(e.data.request_id,e.data);return;case`sql-table-list-preview`:ue.resolve(e.data.request_id,e.data);return;case`sql-schema-list-preview`:m.resolve(e.data.request_id,e.data);return;case`validate-sql-result`:v.resolve(e.data.request_id,e.data);return;case`data-source-discovery-result`:re.resolve(e.data.request_id,e.data);return;case`secret-keys-result`:et.resolve(e.data.request_id,e.data);return;case`cache-info`:Ue(e.data);return;case`cache-cleared`:return;case`data-source-connections`:Ee({connections:e.data.connections.map(Un)});return;case`storage-namespaces`:z(e.data);return;case`storage-entries`:f.resolve(e.data.request_id,e.data);return;case`storage-download-ready`:p.resolve(e.data.request_id,e.data);return;case`reconnected`:R(null),A({state:O.OPEN});return;case`focus-cell`:u(e.data.cell_id);return;case`active-line`:ce(e.data.line==null?null:{cellId:e.data.cell_id,line:e.data.line});return;case`notebook-document-transaction`:T(e.data.transaction);return;case`consumer-capabilities`:F(!e.data.consumer_capabilities.edit);return;default:st(e.data)}},r[3]=Me,r[4]=ae,r[5]=ye,r[6]=Ee,r[7]=Se,r[8]=N,r[9]=Ie,r[10]=a,r[11]=De,r[12]=we,r[13]=B,r[14]=b,r[15]=T,r[16]=D,r[17]=Ue,r[18]=Ve,r[19]=c,r[20]=A,r[21]=Ne,r[22]=E,r[23]=R,r[24]=se,r[25]=F,r[26]=ke,r[27]=ve,r[28]=Re,r[29]=z,r[30]=ge,r[31]=g,r[32]=P,r[33]=M,r[34]=We):We=r[34];let Ge=We,V=n(),Ke=Hn,qe;r[35]===Symbol.for(`react.memo_cache_sentinel`)?(qe=me(),r[35]=qe):qe=r[35];let Je=He&&L===`websocket`?`host`:`session`,H;r[36]!==I||r[37]!==o||r[38]!==L?(H=()=>L===`sse`?I.getSseURL(o).toString():I.getWsURL(o).toString(),r[36]=I,r[37]=o,r[38]=L,r[39]=H):H=r[39];let U,W,G;r[40]===I?(U=r[41],W=r[42],G=r[43]):(U=()=>I.headers(),W=async()=>{!me()&&!de()&&!I.isSameOrigin&&await I.waitForHealthy()},G=()=>I.reconcileFromHealth(),r[40]=I,r[41]=U,r[42]=W,r[43]=G);let K;r[44]===Ge?K=r[45]:(K=e=>{try{Ge(e)}catch(t){let n=t;j.error(`Failed to handle notification`,e,n),Ke(n)}},r[44]=Ge,r[45]=K);let q;r[46]!==o||r[47]!==Je||r[48]!==H||r[49]!==U||r[50]!==W||r[51]!==G||r[52]!==K||r[53]!==L?(q={sessionId:o,static:qe,transportType:L,messageFormat:Je,url:H,headers:U,waitUntilReady:W,checkHealth:G,onMessageError:Ke,onNotification:K},r[46]=o,r[47]=Je,r[48]=H,r[49]=U,r[50]=W,r[51]=G,r[52]=K,r[53]=L,r[54]=q):q=r[54];let J=Mn(q),Ye;r[55]!==J.connectionAtom||r[56]!==A||r[57]!==R||r[58]!==V||r[59]!==M?(Ye=()=>{let e=()=>{let e=V.get(J.connectionAtom);if(e.state!==O.NOT_STARTED){if(e.state===O.OPEN){M(null);return}e.state===O.CONNECTING&&R(null),A(t=>e.state===O.CLOSED&&e.code===k.KERNEL_STARTUP_ERROR&&(t.state===O.CONNECTING||t.state===O.CLOSED)?{...e,phase:t.phase}:e.state===O.CONNECTING&&(t.state===O.OPEN||t.state===O.CONNECTING&&t.phase===`reconnecting`)?{...e,phase:`reconnecting`}:e)}},t=V.sub(J.connectionAtom,e);return e(),t},r[55]=J.connectionAtom,r[56]=A,r[57]=R,r[58]=V,r[59]=M,r[60]=Ye):Ye=r[60];let Y;r[61]!==J||r[62]!==A||r[63]!==R||r[64]!==V||r[65]!==M?(Y=[J,V,A,R,M],r[61]=J,r[62]=A,r[63]=R,r[64]=V,r[65]=M,r[66]=Y):Y=r[66],(0,Q.useLayoutEffect)(Ye,Y);let Xe;return r[67]!==Ae||r[68]!==J?(Xe={notebook:J,connection:Ae,reconnect:J.reconnect},r[67]=Ae,r[68]=J,r[69]=Xe):Xe=r[69],Xe}function Hn(e){ot({title:`Failed to handle message`,description:pt(e),variant:`danger`})}function Un(e){return{...e,name:e.name}}function Wn(e){return{name:e.name,dataType:e.datatype,value:e.value}}function Gn(e){return{name:e.name,declaredBy:e.declared_by,usedBy:e.used_by}}function Kn(e){return e.name}function qn(){return oe().cellIds.inOrderIds}var Jn=e=>{let t=(0,Z.c)(2),{children:n}=e,r;return t[0]===n?r=t[1]:(r=(0,X.jsx)(`div`,{"data-testid":`chrome-wrapper`,className:`flex flex-col flex-1 overflow-hidden absolute inset-0 print:relative`,children:n}),t[0]=n,t[1]=r),r};export{ln as a,wt as c,un as i,Vn as n,Dt as o,fn as r,Et as s,Jn as t};
@@ -1,229 +0,0 @@
1
- /* Copyright 2026 Marimo. All rights reserved. */
2
-
3
- import NodeFs from "node:fs";
4
- import NodeUrl from "node:url";
5
- import { describe, expect, expectTypeOf, it } from "vitest";
6
- import * as Protocol from "../protocol";
7
-
8
- const fixtures = new NodeUrl.URL(
9
- "../../../../../protocols/host/fixtures/",
10
- import.meta.url,
11
- );
12
-
13
- function readFixture(name: string): unknown {
14
- return JSON.parse(
15
- NodeFs.readFileSync(new NodeUrl.URL(name, fixtures), "utf8"),
16
- );
17
- }
18
-
19
- const records = {
20
- "record.json": Protocol.HostRecord,
21
- "cell.json": Protocol.Cell,
22
- "cell-withheld.json": Protocol.Cell,
23
- "analysis.json": Protocol.Analysis,
24
- "diagnostic.json": Protocol.Error,
25
- "edit.json": Protocol.EditRequest,
26
- "edit-conflict-request.json": Protocol.EditRequest,
27
- "edit-response.json": Protocol.EditResponse,
28
- "execution-restored.json": Protocol.Execution,
29
- "run-cells-request.json": Protocol.RunRequest,
30
- };
31
-
32
- describe("host protocol fixtures", () => {
33
- it.each(Object.entries(records))("parses %s unchanged", (name, schema) => {
34
- const input = readFixture(name);
35
- const original = structuredClone(input);
36
- expect(schema.parse(input)).toEqual(original);
37
- expect(input).toEqual(original);
38
- });
39
-
40
- it.each(NodeFs.readdirSync(new NodeUrl.URL("problems/", fixtures)))(
41
- "parses problem %s",
42
- (name) => {
43
- const input = readFixture(`problems/${name}`);
44
- expect(Protocol.Problem.parse(input)).toEqual(input);
45
- },
46
- );
47
-
48
- it.each(NodeFs.readdirSync(fixtures).filter((name) => name.endsWith(".sse")))(
49
- "parses events in %s unchanged",
50
- (name) => {
51
- const stream = NodeFs.readFileSync(
52
- new NodeUrl.URL(name, fixtures),
53
- "utf8",
54
- );
55
- let count = 0;
56
- for (const frame of stream.split(/\r?\n\r?\n/)) {
57
- const event = /^event: (.+)$/m.exec(frame)?.[1];
58
- if (!event && !/^data:/m.test(frame)) {
59
- continue;
60
- }
61
- const data = frame
62
- .split(/\r?\n/)
63
- .filter((line) => line.startsWith("data:"))
64
- .map((line) => line.slice(5).trimStart())
65
- .join("\n");
66
- const id = /^id: (.+)$/m.exec(frame)?.[1];
67
- const payload: unknown = JSON.parse(data);
68
- const input = { event, data: payload, ...(id ? { id } : {}) };
69
- const original = structuredClone(input);
70
- expect(Protocol.Event.parse(input)).toEqual(original);
71
- expect(input).toEqual(original);
72
- count += 1;
73
- }
74
- expect(count).toBeGreaterThan(0);
75
- },
76
- );
77
- });
78
-
79
- describe("host protocol bindings", () => {
80
- it("preserves native marimo payloads without interpreting them", () => {
81
- expectTypeOf<Protocol.MarimoEvent["data"]["marimo"]>().toBeUnknown();
82
- const input = {
83
- event: "marimo",
84
- id: "42",
85
- data: {
86
- marimo: {
87
- future_payload: { value: Number.NaN },
88
- },
89
- },
90
- };
91
- expect(Protocol.Event.parse(input)).toEqual(input);
92
- });
93
-
94
- it("accepts additive fields and preserves arbitrary notebook settings", () => {
95
- const cell = Protocol.Cell.parse(readFixture("cell.json"));
96
- const input = {
97
- ...cell,
98
- future: { enabled: true },
99
- config: { ...cell.config, future: 42 },
100
- };
101
- const original = structuredClone(input);
102
- expect(Protocol.Cell.parse(input)).toEqual(cell);
103
- expect(input).toEqual(original);
104
-
105
- const { document } = Protocol.EditResponse.parse(
106
- readFixture("edit-response.json"),
107
- );
108
- const configured = {
109
- ...document,
110
- app_config: { extension: { values: [1, null, false] } },
111
- };
112
- expect(Protocol.Document.parse(configured)).toEqual(configured);
113
- });
114
-
115
- it("requires source in edits while allowing withheld source in records", () => {
116
- expectTypeOf<Protocol.Cell["code"]>().toEqualTypeOf<string | null>();
117
- expectTypeOf<Protocol.CellInput["code"]>().toEqualTypeOf<string>();
118
- const cell = Protocol.Cell.parse(readFixture("cell.json"));
119
- const { code, ...missing } = cell;
120
- expect(Protocol.Cell.safeParse(missing).success).toBe(false);
121
- expect(Protocol.Cell.parse({ ...cell, code: "" }).code).toBe("");
122
- for (const input of [{ id: cell.id }, { id: cell.id, code: null }]) {
123
- expect(Protocol.CellInput.safeParse(input).success).toBe(false);
124
- }
125
- expect(Protocol.CellInput.parse({ id: cell.id, code }).code).toBe(code);
126
- expect(Protocol.CellInput.parse({ id: cell.id, code: "" }).code).toBe("");
127
- });
128
-
129
- it("applies the defaults declared for cell inputs", () => {
130
- expect(
131
- Protocol.CellInput.parse({ id: "c3", code: "x = 1", config: {} }),
132
- ).toEqual({
133
- id: "c3",
134
- code: "x = 1",
135
- name: "_",
136
- config: {
137
- column: null,
138
- disabled: false,
139
- hide_code: false,
140
- expand_output: false,
141
- },
142
- });
143
- });
144
-
145
- it.each(["run_id", "runtime_id", "caused_by"] as const)(
146
- "requires the nullable execution field %s",
147
- (field) => {
148
- const execution = Protocol.Execution.parse(
149
- readFixture("execution-restored.json"),
150
- );
151
- const missing = Object.fromEntries(
152
- Object.entries(execution).filter(([key]) => key !== field),
153
- );
154
- expect(Protocol.Execution.safeParse(missing).success).toBe(false);
155
- expect(
156
- Protocol.Execution.safeParse({ ...execution, [field]: null }).success,
157
- ).toBe(true);
158
- },
159
- );
160
-
161
- it("preserves snapshot metadata omissions and validates live timestamps", () => {
162
- const cell = Protocol.Cell.parse(readFixture("cell.json"));
163
- expect(Protocol.CellMessage.parse({ cell })).toEqual({ cell });
164
- const message = { cell, time: "2026-01-01T12:00:00+05:30" };
165
- expect(Protocol.CellMessage.parse(message)).toEqual(message);
166
- for (const time of [
167
- null,
168
- "yesterday",
169
- "2026-02-30T12:00:00Z",
170
- "2026-01-01T12:00:00",
171
- ]) {
172
- expect(Protocol.CellMessage.safeParse({ cell, time }).success).toBe(
173
- false,
174
- );
175
- }
176
- });
177
-
178
- it("rejects invalid cell fields without coercing their values", () => {
179
- const cell = Protocol.Cell.parse(readFixture("cell.json"));
180
- for (const patch of [
181
- { id: "" },
182
- { code: 42 },
183
- { etag: 42 },
184
- { version: "2" },
185
- { version: 0 },
186
- { version: 1.5 },
187
- { config: { ...cell.config, disabled: "false" } },
188
- ]) {
189
- expect(Protocol.Cell.safeParse({ ...cell, ...patch }).success).toBe(
190
- false,
191
- );
192
- }
193
- const result = Protocol.Cell.safeParse({ ...cell, code: 42 });
194
- expect(result.success).toBe(false);
195
- if (result.success) {
196
- throw new Error("Expected an invalid cell");
197
- }
198
- expect(result.error.issues).toEqual([
199
- expect.objectContaining({ path: ["code"], code: "invalid_type" }),
200
- ]);
201
- });
202
-
203
- it("requires the fields of the selected change kind", () => {
204
- const change = { kind: "delete_cell", id: "c3", base_etag: "*" };
205
- expect(Protocol.Change.parse(change)).toEqual(change);
206
- expect(
207
- Protocol.Change.safeParse({ kind: "delete_cell", id: "c3" }).success,
208
- ).toBe(false);
209
- expect(
210
- Protocol.Change.safeParse({ ...change, kind: "unknown" }).success,
211
- ).toBe(false);
212
- });
213
-
214
- it("requires custom payloads while allowing any JSON value", () => {
215
- for (const data of [
216
- null,
217
- false,
218
- 42,
219
- "text",
220
- { nested: [1, null, false] },
221
- ]) {
222
- const custom = { type: "example.event", data };
223
- expect(Protocol.Custom.parse(custom)).toEqual(custom);
224
- }
225
- expect(Protocol.Custom.safeParse({ type: "example.event" }).success).toBe(
226
- false,
227
- );
228
- });
229
- });
@@ -1,209 +0,0 @@
1
- /* Copyright 2026 Marimo. All rights reserved. */
2
-
3
- import { describe, expect, it } from "vitest";
4
- import type { NotebookEvent } from "../events";
5
- import type { Resource } from "../resources/resource";
6
- import { createStream } from "../stream";
7
- import { fixtureEvents } from "./fixtures";
8
-
9
- interface CellIds {
10
- readonly ids: readonly string[];
11
- }
12
-
13
- /** A resource whose events are complete on their own. */
14
- const cells: Resource<CellIds> = {
15
- initial: { ids: [] },
16
- on: {
17
- cell: (state, event) =>
18
- state.ids.includes(event.data.cell.id)
19
- ? state
20
- : { ids: [...state.ids, event.data.cell.id] },
21
- "cell.removed": (state, event) =>
22
- state.ids.includes(event.data.id)
23
- ? { ids: state.ids.filter((id) => id !== event.data.id) }
24
- : state,
25
- },
26
- };
27
-
28
- interface Revisions {
29
- /** Cells changed since the last revision. */
30
- readonly pending: readonly string[];
31
- readonly published: readonly (readonly string[])[];
32
- }
33
-
34
- function publish(state: Revisions): Revisions {
35
- return { pending: [], published: [...state.published, state.pending] };
36
- }
37
-
38
- /** A resource assembled from groups of events, like a document from its cells. */
39
- const revisions: Resource<Revisions> = {
40
- initial: { pending: [], published: [] },
41
- on: {
42
- cell: (state, event) => ({
43
- ...state,
44
- pending: [...state.pending, event.data.cell.id],
45
- }),
46
- "cell.removed": (state, event) => ({
47
- ...state,
48
- pending: [...state.pending, event.data.id],
49
- }),
50
- // A live revision completes a group. A snapshot's revision waits for ready.
51
- document: (state, _event, { phase }) =>
52
- phase === "live" ? publish(state) : state,
53
- ready: publish,
54
- },
55
- };
56
-
57
- function createTestStream() {
58
- return createStream({ cells, revisions });
59
- }
60
-
61
- function replay(
62
- stream: ReturnType<typeof createTestStream>,
63
- events: readonly NotebookEvent[],
64
- from = stream.initial,
65
- ) {
66
- return events.reduce((state, event) => stream.reduce(state, event), from);
67
- }
68
-
69
- const snapshot = fixtureEvents("notebook-events.sse");
70
- const ready = snapshot.findIndex((event) => event.event === "ready");
71
- const cellEvent = snapshot.find((event) => event.event === "cell");
72
- if (cellEvent?.event !== "cell") {
73
- throw new Error("Fixture is missing a cell event");
74
- }
75
-
76
- describe("notebook stream", () => {
77
- it("reads the snapshot, goes live at ready, and rebuilds after reset", () => {
78
- const stream = createTestStream();
79
- const partial = replay(stream, snapshot.slice(0, ready));
80
- expect(partial).toMatchObject({
81
- phase: "snapshot",
82
- notebookId: "n1",
83
- cursor: null,
84
- });
85
- expect(partial.resources.cells.ids).toEqual(["c1", "c3", "k7f2"]);
86
- expect(partial.resources.revisions).toEqual({
87
- pending: ["c1", "c3", "k7f2"],
88
- published: [],
89
- });
90
-
91
- const live = replay(stream, snapshot.slice(ready), partial);
92
- expect(live).toMatchObject({ phase: "live", cursor: "97" });
93
- expect(live.resources.cells).toBe(partial.resources.cells);
94
- expect(live.resources.revisions).toEqual({
95
- pending: [],
96
- published: [["c1", "c3", "k7f2"]],
97
- });
98
-
99
- const resetEvents = fixtureEvents("events-reset.sse");
100
- const afterReset = stream.reduce(live, resetEvents[0]);
101
- expect(afterReset).toEqual({ ...stream.initial, notebookId: "n1" });
102
- expect(replay(stream, resetEvents, live).phase).toBe("live");
103
- });
104
-
105
- it("keeps resource state by reference when an event does not apply", () => {
106
- const stream = createTestStream();
107
- const state = replay(stream, snapshot);
108
- const runtime = snapshot.find((event) => event.event === "runtime");
109
- const unhandled = stream.reduce(state, { ...runtime!, id: "100" });
110
- expect(unhandled.resources).toBe(state.resources);
111
- expect(unhandled.cursor).toBe("100");
112
- expect(
113
- stream.reduce(state, { event: "unknown", name: "x", id: "101" })
114
- .resources,
115
- ).toBe(state.resources);
116
- expect(
117
- stream.reduce(state, { event: "marimo", data: { marimo: {} } }),
118
- ).toBe(state);
119
- });
120
-
121
- it("clears resources when its notebook is removed and ignores other notebooks", () => {
122
- const stream = createTestStream();
123
- const state = replay(stream, snapshot);
124
- const time = "2026-10-01T09:30:00Z";
125
- expect(
126
- stream.reduce(state, {
127
- event: "notebook.removed",
128
- id: "100",
129
- data: { id: "n2", time },
130
- }).resources,
131
- ).toBe(state.resources);
132
- const removed = stream.reduce(state, {
133
- event: "notebook.removed",
134
- id: "100",
135
- data: { id: "n1", time },
136
- });
137
- expect(removed).toMatchObject({ phase: "live", notebookId: "n1" });
138
- expect(removed.resources).toBe(stream.initial.resources);
139
- });
140
-
141
- it("rejects objects from another notebook", () => {
142
- const stream = createTestStream();
143
- const state = replay(stream, snapshot.slice(0, ready));
144
- const notebook = snapshot[0];
145
- if (notebook.event !== "notebook") {
146
- throw new Error("Fixture does not start with its notebook");
147
- }
148
- expect(() =>
149
- stream.reduce(state, {
150
- ...notebook,
151
- data: { notebook: { ...notebook.data.notebook, id: "n2" } },
152
- }),
153
- ).toThrow("changed identity");
154
- expect(() =>
155
- stream.reduce(state, {
156
- ...cellEvent,
157
- data: { cell: { ...cellEvent.data.cell, notebook_id: "n2" } },
158
- }),
159
- ).toThrow("changed identity");
160
- });
161
-
162
- it("records each live event's cursor and resumes in place", () => {
163
- const stream = createTestStream();
164
- const partial = replay(stream, snapshot.slice(0, ready));
165
- expect(stream.resume(partial)).toEqual({
166
- ...stream.initial,
167
- notebookId: "n1",
168
- });
169
-
170
- const live = replay(stream, snapshot.slice(ready), partial);
171
- const [cell, , removed, published, saved] = fixtureEvents("edits.sse");
172
- const editing = replay(stream, [cell], live);
173
- expect(editing.cursor).toBe("110");
174
- expect(editing.resources.revisions.pending).toEqual(["c2"]);
175
- expect(stream.resume(editing)).toBe(editing);
176
-
177
- const edited = replay(stream, [removed, published], editing);
178
- expect(edited.cursor).toBe("113");
179
- expect(edited.resources.revisions).toEqual({
180
- pending: [],
181
- published: [
182
- ["c1", "c3", "k7f2"],
183
- ["c2", "k7f2"],
184
- ],
185
- });
186
- expect(stream.reduce(edited, saved).cursor).toBe("114");
187
- expect(
188
- stream.reduce(edited, { event: "ready", id: "116", data: {} }).cursor,
189
- ).toBe("116");
190
- expect(stream.reduce(edited, { event: "reset", data: {} }).cursor).toBe(
191
- null,
192
- );
193
- });
194
-
195
- it("requires a cursor on live events other than reset and notifications", () => {
196
- const stream = createTestStream();
197
- const state = replay(stream, snapshot);
198
- expect(() => stream.reduce(state, cellEvent)).toThrow("cursor");
199
- expect(
200
- stream.reduce(state, { ...cellEvent, id: "100" }).resources.cells,
201
- ).toBe(state.resources.cells);
202
- expect(stream.reduce(state, { event: "reset", data: {} }).phase).toBe(
203
- "snapshot",
204
- );
205
- expect(
206
- stream.reduce(state, { event: "marimo", data: { marimo: null } }),
207
- ).toBe(state);
208
- });
209
- });