@marimo-team/frontend 0.18.5-dev169 → 0.18.5-dev171

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 (126) hide show
  1. package/dist/assets/{CellStatus-DlwC0A_k.js → CellStatus-ClrYbUob.js} +1 -1
  2. package/dist/assets/{ConnectedDataExplorerComponent-C3aK452q.js → ConnectedDataExplorerComponent-KlUs_Sz3.js} +1 -1
  3. package/dist/assets/{ErrorBoundary-BYCO3_zw.js → ErrorBoundary-Drf1manw.js} +1 -1
  4. package/dist/assets/{ImperativeModal-7Thr73Oo.js → ImperativeModal-q6QlC2aZ.js} +1 -1
  5. package/dist/assets/{JsonOutput-C7Jn2Hoy.js → JsonOutput-CkeISXrs.js} +1 -1
  6. package/dist/assets/{LazyAnyLanguageCodeMirror-DIbHWNF6.js → LazyAnyLanguageCodeMirror-jpEDlD0M.js} +2 -2
  7. package/dist/assets/{MarimoErrorOutput-Dtk0CQJu.js → MarimoErrorOutput-CO8cm8-0.js} +1 -1
  8. package/dist/assets/{RenderHTML-DfrA7ZTv.js → RenderHTML-D6fh5YLC.js} +1 -1
  9. package/dist/assets/{VisuallyHidden-BLp5kXtE.js → VisuallyHidden-BodIky8L.js} +1 -1
  10. package/dist/assets/{add-cell-with-ai-BYCrNUOQ.js → add-cell-with-ai-B3V6Mgb9.js} +1 -1
  11. package/dist/assets/{add-database-form-D-BVTDCT.js → add-database-form-C-K88iSC.js} +1 -1
  12. package/dist/assets/{agent-panel-CNIKszsQ.js → agent-panel-BvLqBe3U.js} +1 -1
  13. package/dist/assets/{ai-model-dropdown-CAhqhkRJ.js → ai-model-dropdown-D1nEKS8b.js} +1 -1
  14. package/dist/assets/{alert-dialog-B3T1GCoD.js → alert-dialog-k5KxevGr.js} +1 -1
  15. package/dist/assets/any-language-editor-DQu1Tt2N.js +3 -0
  16. package/dist/assets/{app-config-button-BhKhGiaG.js → app-config-button-BD5l-v4I.js} +1 -1
  17. package/dist/assets/{button-C9TEIJJh.js → button-DuYGqRtX.js} +1 -1
  18. package/dist/assets/{cache-panel-C-YLXsti.js → cache-panel-C1So4Zu3.js} +1 -1
  19. package/dist/assets/{capabilities-h9_pyvFv.js → capabilities-BmAOeMOK.js} +1 -1
  20. package/dist/assets/{capitalize-D4JsDDXI.js → capitalize-DQeWKRGx.js} +1 -1
  21. package/dist/assets/{cell-actions-C8VD1BFf.js → cell-actions-CJiaF9Tu.js} +1 -1
  22. package/dist/assets/{cell-link-NwzNlJhp.js → cell-link-Hwo1QbqQ.js} +1 -1
  23. package/dist/assets/{cells-xPjoZY0S.js → cells-rr1jjvJk.js} +40 -40
  24. package/dist/assets/{chat-components-CQFXyizy.js → chat-components-DXJsXOD8.js} +1 -1
  25. package/dist/assets/{chat-display-DqUXDG-o.js → chat-display-C08N0rx5.js} +1 -1
  26. package/dist/assets/{chat-panel-8iT2Wjh6.js → chat-panel-CNL6ANh8.js} +1 -1
  27. package/dist/assets/{client-Cbyg6uhC.js → client-SMzMTiO_.js} +1 -1
  28. package/dist/assets/{column-preview-BuNifqxS.js → column-preview-BzvHnhPG.js} +1 -1
  29. package/dist/assets/{command-palette-D_boTGwg.js → command-palette-B_md1fzh.js} +1 -1
  30. package/dist/assets/{command-DIcQwElH.js → command-xU8ykulh.js} +1 -1
  31. package/dist/assets/{common-C6NCeVE8.js → common-_RAkDTpe.js} +1 -1
  32. package/dist/assets/{config-DWMmQmTt.js → config-cCkBQ_ER.js} +1 -1
  33. package/dist/assets/{copy-Bmkr29w4.js → copy-DRhpWiOq.js} +1 -1
  34. package/dist/assets/{copy-icon-qVgCqhII.js → copy-icon-B69c-352.js} +1 -1
  35. package/dist/assets/{createReducer-CaezzNVH.js → createReducer-DDa-hVe3.js} +1 -1
  36. package/dist/assets/{datasource-CyWtxjKq.js → datasource-DHbNHnua.js} +1 -1
  37. package/dist/assets/{dates-B2_O0-if.js → dates-CdsE1R40.js} +1 -1
  38. package/dist/assets/{dependency-graph-panel-C01bMyQK.js → dependency-graph-panel-BGp5UzmZ.js} +1 -1
  39. package/dist/assets/{dialog-DIUTtzeB.js → dialog-DUEuLcT2.js} +1 -1
  40. package/dist/assets/{dist-vrNOUnFF.js → dist-DOFFh6Ii.js} +1 -1
  41. package/dist/assets/{documentation-panel-BPUF-dp2.js → documentation-panel-CuPlvIjJ.js} +1 -1
  42. package/dist/assets/{download-B9UlWvRO.js → download-DKRxBkYD.js} +1 -1
  43. package/dist/assets/{edit-page-DFkV0LWx.js → edit-page-DAFshpgY.js} +7 -7
  44. package/dist/assets/{error-banner-D2-5vgE4.js → error-banner-DU5Qb8a8.js} +1 -1
  45. package/dist/assets/{error-panel-ClGt4y8j.js → error-panel-CoYFpNUd.js} +1 -1
  46. package/dist/assets/{es-1yDP0Xdp.js → es-YVwBDiDw.js} +1 -1
  47. package/dist/assets/{field-D2_0r7wT.js → field-DDKGFzpC.js} +1 -1
  48. package/dist/assets/{file-explorer-panel-3SHWDl17.js → file-explorer-panel-BcpntT7Q.js} +1 -1
  49. package/dist/assets/{floating-outline-C5wKHGsD.js → floating-outline-CHprSkP6.js} +1 -1
  50. package/dist/assets/{focus-DPgrnlZ1.js → focus-D3ygI6Sy.js} +1 -1
  51. package/dist/assets/{form-B2Db87Zc.js → form-B_zRT4QS.js} +1 -1
  52. package/dist/assets/{formats-nh-sPUUZ.js → formats-B9CrBoaO.js} +1 -1
  53. package/dist/assets/{glide-data-editor-CwVQm3Mn.js → glide-data-editor-Brckuic5.js} +1 -1
  54. package/dist/assets/{globals-CC2GcyGk.js → globals-D46Vbo5D.js} +1 -1
  55. package/dist/assets/{home-page-BdK-6xZH.js → home-page-DuPzZzUf.js} +1 -1
  56. package/dist/assets/hotkeys-uKX61F1_.js +1 -0
  57. package/dist/assets/{index-CEHA_rtG.js → index-CQBtzy-J.js} +6 -6
  58. package/dist/assets/{input-DP44ewsS.js → input-CaEtLL8p.js} +1 -1
  59. package/dist/assets/{kiosk-mode-CsuyIDk3.js → kiosk-mode-CTjr_Jn4.js} +1 -1
  60. package/dist/assets/{label-DJo0Eeb3.js → label-qwandMoh.js} +1 -1
  61. package/dist/assets/{layout-DlHn_emH.js → layout-CprHgyfx.js} +3 -3
  62. package/dist/assets/links-Cw9RjHIY.js +1 -0
  63. package/dist/assets/{logs-panel-BIW4BIAP.js → logs-panel-CFM-1lMP.js} +1 -1
  64. package/dist/assets/{maps-DELIOfTw.js → maps-s2pQkyf5.js} +1 -1
  65. package/dist/assets/{markdown-renderer-B0tsGAgw.js → markdown-renderer-DecoaRsV.js} +1 -1
  66. package/dist/assets/{mermaid-BcA-uOhi.js → mermaid-BPkO79lo.js} +1 -1
  67. package/dist/assets/{mode-Ii-fBazZ.js → mode-BYulXE3t.js} +1 -1
  68. package/dist/assets/{multi-map-TecGBFLS.js → multi-map-fjX9ImVF.js} +1 -1
  69. package/dist/assets/{name-cell-input-03mNaWsC.js → name-cell-input-BGJDnv5Z.js} +1 -1
  70. package/dist/assets/{numbers-Ckcn6C-H.js → numbers-C9_R_vlY.js} +1 -1
  71. package/dist/assets/{outline-panel-D2OKWKZx.js → outline-panel-C-__7mIh.js} +1 -1
  72. package/dist/assets/{packages-panel-CzdZ8dRE.js → packages-panel-B4bQCG8Y.js} +1 -1
  73. package/dist/assets/{cell-editor-bDu_ShRz.js → panel-context-Bee798AZ.js} +13 -13
  74. package/dist/assets/{panels-DTuGqWrW.js → panels-CuLZ4Xjj.js} +1 -1
  75. package/dist/assets/{process-output-Dsqg6AQn.js → process-output-2gz8Uri2.js} +1 -1
  76. package/dist/assets/{readonly-python-code-CEN7uCAn.js → readonly-python-code-ihKi3Mrq.js} +1 -1
  77. package/dist/assets/{renderShortcut-DolwKyOI.js → renderShortcut-D0Pei-OA.js} +1 -1
  78. package/dist/assets/{run-page-Bv4-nptx.js → run-page-Q1ifcEUY.js} +1 -1
  79. package/dist/assets/{runs-BbV5uZz6.js → runs-yuOchwkU.js} +1 -1
  80. package/dist/assets/scratchpad-panel-B75Qsjwz.js +1 -0
  81. package/dist/assets/{secrets-panel-K7EccfRa.js → secrets-panel-CDWmmmBS.js} +1 -1
  82. package/dist/assets/{select-BJ18Dxpd.js → select-D0g5GnIs.js} +1 -1
  83. package/dist/assets/{session-panel-C35Uxsn7.js → session-panel-Bn5_JmbT.js} +1 -1
  84. package/dist/assets/{share-0dWXMs9M.js → share-CXQVxivL.js} +1 -1
  85. package/dist/assets/{slides-component-CZ76zal6.js → slides-component-DUIqQih1.js} +1 -1
  86. package/dist/assets/{snippets-panel-VLyEWSgW.js → snippets-panel-CVBBnX9H.js} +1 -1
  87. package/dist/assets/{spec-D9TFI5I_.js → spec-qp_XZeSS.js} +1 -1
  88. package/dist/assets/{state-DfW1MJsR.js → state-BHFBtWym.js} +1 -1
  89. package/dist/assets/{state-CGq6kn1k.js → state-CIznbe1J.js} +1 -1
  90. package/dist/assets/{state-CLVMeQ5K.js → state-DNwec0Uj.js} +1 -1
  91. package/dist/assets/{switch-DXLifdeN.js → switch-iJj-D3dz.js} +1 -1
  92. package/dist/assets/{terminal-O_0qSqHX.js → terminal-CRIGvHBN.js} +1 -1
  93. package/dist/assets/{textarea-BibopRh1.js → textarea-DmNrZcLR.js} +1 -1
  94. package/dist/assets/{tooltip-BNPhCMFo.js → tooltip-CrRUCOBw.js} +1 -1
  95. package/dist/assets/{tracing-kd2E6r4-.js → tracing-D9h130fg.js} +1 -1
  96. package/dist/assets/{tracing-panel-CingJf_V.js → tracing-panel-DaDvGMEN.js} +2 -2
  97. package/dist/assets/{type-drzC-SxF.js → type-BdyvjzTI.js} +1 -1
  98. package/dist/assets/{types-B_DyfI3j.js → types-4-l_7Ws2.js} +1 -1
  99. package/dist/assets/{useAddCell-CuNdAB3f.js → useAddCell-BpMe5DB-.js} +1 -1
  100. package/dist/assets/{useBoolean-DWRpatKF.js → useBoolean-BDG41CyP.js} +1 -1
  101. package/dist/assets/{useCellActionButton-CLGSFvWy.js → useCellActionButton-Dh4wbVPA.js} +1 -1
  102. package/dist/assets/{useDeleteCell-DAgP4oYp.js → useDeleteCell-DBzN8QcP.js} +1 -1
  103. package/dist/assets/{useIframeCapabilities-ZISlVepl.js → useIframeCapabilities-CU-WWxnz.js} +1 -1
  104. package/dist/assets/{useInstallPackage-CBvG269f.js → useInstallPackage-RldLPyJs.js} +1 -1
  105. package/dist/assets/{useLifecycle-BX7GmOQ5.js → useLifecycle-CmDXEyIC.js} +1 -1
  106. package/dist/assets/{useNotebookActions-CLAi2J0h.js → useNotebookActions-DKyQBNlS.js} +1 -1
  107. package/dist/assets/{useRunCells-BHhExio0.js → useRunCells-BGzo-QMk.js} +1 -1
  108. package/dist/assets/{useSplitCell-CF_E2d8x.js → useSplitCell-CvKAuKQ_.js} +1 -1
  109. package/dist/assets/{useTheme-CrojuouA.js → useTheme-DfP1CWaW.js} +1 -1
  110. package/dist/assets/{utilities.esm-lV-KjYEM.js → utilities.esm-CT3NbLA9.js} +1 -1
  111. package/dist/assets/{utils-B_xHF0y2.js → utils-CJJIceVn.js} +1 -1
  112. package/dist/assets/{vega-component-DTFVCfi1.js → vega-component-CLrcy81y.js} +1 -1
  113. package/dist/assets/{write-secret-modal-CIbhcoWF.js → write-secret-modal-CLm48gMe.js} +1 -1
  114. package/dist/index.html +67 -67
  115. package/package.json +1 -1
  116. package/src/components/editor/chrome/panels/panel-context.tsx +34 -0
  117. package/src/components/editor/chrome/wrapper/app-chrome.tsx +108 -95
  118. package/src/components/scratchpad/scratchpad.tsx +17 -4
  119. package/src/core/codemirror/cells/extensions.ts +7 -4
  120. package/src/core/hotkeys/__tests__/shortcuts.test.ts +61 -4
  121. package/src/core/hotkeys/shortcuts.ts +34 -2
  122. package/dist/assets/any-language-editor-CTAS1EXW.js +0 -3
  123. package/dist/assets/hotkeys-D3ICc8RW.js +0 -1
  124. package/dist/assets/links-DR-r1Edb.js +0 -1
  125. package/dist/assets/scratchpad-panel-CwWN2smX.js +0 -1
  126. /package/dist/assets/{cell-editor-Iey559K_.css → panel-context-Iey559K_.css} +0 -0
package/dist/index.html CHANGED
@@ -66,15 +66,15 @@
66
66
  <marimo-server-token data-token="{{ server_token }}" hidden></marimo-server-token>
67
67
  <!-- /TODO -->
68
68
  <title>{{ title }}</title>
69
- <script type="module" crossorigin src="./assets/index-CEHA_rtG.js"></script>
69
+ <script type="module" crossorigin src="./assets/index-CQBtzy-J.js"></script>
70
70
  <link rel="modulepreload" crossorigin href="./assets/preload-helper-BW0IMuFq.js">
71
- <link rel="modulepreload" crossorigin href="./assets/hotkeys-D3ICc8RW.js">
71
+ <link rel="modulepreload" crossorigin href="./assets/hotkeys-uKX61F1_.js">
72
72
  <link rel="modulepreload" crossorigin href="./assets/defaultLocale-BLUna9fQ.js">
73
73
  <link rel="modulepreload" crossorigin href="./assets/precisionRound-Cl9k9ZmS.js">
74
74
  <link rel="modulepreload" crossorigin href="./assets/defaultLocale-DzliDDTm.js">
75
75
  <link rel="modulepreload" crossorigin href="./assets/vega-loader.browser-C8wT63Va.js">
76
76
  <link rel="modulepreload" crossorigin href="./assets/_Uint8Array-BGESiCQL.js">
77
- <link rel="modulepreload" crossorigin href="./assets/tooltip-BNPhCMFo.js">
77
+ <link rel="modulepreload" crossorigin href="./assets/tooltip-CrRUCOBw.js">
78
78
  <link rel="modulepreload" crossorigin href="./assets/clsx-D0MtrJOx.js">
79
79
  <link rel="modulepreload" crossorigin href="./assets/cn-C1rgT0yh.js">
80
80
  <link rel="modulepreload" crossorigin href="./assets/chunk-LvLJmgfZ.js">
@@ -83,14 +83,14 @@
83
83
  <link rel="modulepreload" crossorigin href="./assets/jsx-runtime-DN_bIXfG.js">
84
84
  <link rel="modulepreload" crossorigin href="./assets/badge-DAnNhy3O.js">
85
85
  <link rel="modulepreload" crossorigin href="./assets/useEventListener-COkmyg1v.js">
86
- <link rel="modulepreload" crossorigin href="./assets/button-C9TEIJJh.js">
86
+ <link rel="modulepreload" crossorigin href="./assets/button-DuYGqRtX.js">
87
87
  <link rel="modulepreload" crossorigin href="./assets/react-dom-C9fstfnp.js">
88
88
  <link rel="modulepreload" crossorigin href="./assets/Combination-D1TsGrBC.js">
89
89
  <link rel="modulepreload" crossorigin href="./assets/menu-items-9PZrU2e0.js">
90
90
  <link rel="modulepreload" crossorigin href="./assets/dist-CBrDuocE.js">
91
91
  <link rel="modulepreload" crossorigin href="./assets/createLucideIcon-CW2xpJ57.js">
92
92
  <link rel="modulepreload" crossorigin href="./assets/check-CrAQug3q.js">
93
- <link rel="modulepreload" crossorigin href="./assets/select-BJ18Dxpd.js">
93
+ <link rel="modulepreload" crossorigin href="./assets/select-D0g5GnIs.js">
94
94
  <link rel="modulepreload" crossorigin href="./assets/tooltip-CvjcEpZC.js">
95
95
  <link rel="modulepreload" crossorigin href="./assets/use-toast-Bzf3rpev.js">
96
96
  <link rel="modulepreload" crossorigin href="./assets/_getTag-BWqNuuwU.js">
@@ -100,22 +100,22 @@
100
100
  <link rel="modulepreload" crossorigin href="./assets/_baseFor-Duhs3RiJ.js">
101
101
  <link rel="modulepreload" crossorigin href="./assets/merge-BBX6ug-N.js">
102
102
  <link rel="modulepreload" crossorigin href="./assets/zod-Cg4WLWh2.js">
103
- <link rel="modulepreload" crossorigin href="./assets/utils-B_xHF0y2.js">
103
+ <link rel="modulepreload" crossorigin href="./assets/utils-CJJIceVn.js">
104
104
  <link rel="modulepreload" crossorigin href="./assets/constants-Bkp4R3bQ.js">
105
105
  <link rel="modulepreload" crossorigin href="./assets/Deferred-DzyBMRsy.js">
106
- <link rel="modulepreload" crossorigin href="./assets/config-DWMmQmTt.js">
106
+ <link rel="modulepreload" crossorigin href="./assets/config-cCkBQ_ER.js">
107
107
  <link rel="modulepreload" crossorigin href="./assets/uuid-ClFZlR7U.js">
108
108
  <link rel="modulepreload" crossorigin href="./assets/DeferredRequestRegistry-B3BENoUa.js">
109
109
  <link rel="modulepreload" crossorigin href="./assets/requests-C0HaHO6a.js">
110
110
  <link rel="modulepreload" crossorigin href="./assets/isSymbol-BGkTcW3U.js">
111
111
  <link rel="modulepreload" crossorigin href="./assets/toString-DlRqgfqz.js">
112
112
  <link rel="modulepreload" crossorigin href="./assets/_hasUnicode-zBEpxwYe.js">
113
- <link rel="modulepreload" crossorigin href="./assets/useLifecycle-BX7GmOQ5.js">
113
+ <link rel="modulepreload" crossorigin href="./assets/useLifecycle-CmDXEyIC.js">
114
114
  <link rel="modulepreload" crossorigin href="./assets/useNonce-EAuSVK-5.js">
115
- <link rel="modulepreload" crossorigin href="./assets/useTheme-CrojuouA.js">
115
+ <link rel="modulepreload" crossorigin href="./assets/useTheme-DfP1CWaW.js">
116
116
  <link rel="modulepreload" crossorigin href="./assets/once-CTiSlR1m.js">
117
- <link rel="modulepreload" crossorigin href="./assets/capabilities-h9_pyvFv.js">
118
- <link rel="modulepreload" crossorigin href="./assets/createReducer-CaezzNVH.js">
117
+ <link rel="modulepreload" crossorigin href="./assets/capabilities-BmAOeMOK.js">
118
+ <link rel="modulepreload" crossorigin href="./assets/createReducer-DDa-hVe3.js">
119
119
  <link rel="modulepreload" crossorigin href="./assets/dist-CAcX026F.js">
120
120
  <link rel="modulepreload" crossorigin href="./assets/dist-DKNOF5xd.js">
121
121
  <link rel="modulepreload" crossorigin href="./assets/dist-CI6_zMIl.js">
@@ -129,119 +129,119 @@
129
129
  <link rel="modulepreload" crossorigin href="./assets/toDate-5JckKRQn.js">
130
130
  <link rel="modulepreload" crossorigin href="./assets/cjs-Bj40p_Np.js">
131
131
  <link rel="modulepreload" crossorigin href="./assets/_arrayReduce-bZBYsK-u.js">
132
- <link rel="modulepreload" crossorigin href="./assets/type-drzC-SxF.js">
132
+ <link rel="modulepreload" crossorigin href="./assets/type-BdyvjzTI.js">
133
133
  <link rel="modulepreload" crossorigin href="./assets/_baseProperty-DuoFhI7N.js">
134
134
  <link rel="modulepreload" crossorigin href="./assets/now-6sUe0ZdD.js">
135
135
  <link rel="modulepreload" crossorigin href="./assets/debounce-BbFlGgjv.js">
136
136
  <link rel="modulepreload" crossorigin href="./assets/toInteger-CDcO32Gx.js">
137
137
  <link rel="modulepreload" crossorigin href="./assets/database-zap-CaVvnK_o.js">
138
138
  <link rel="modulepreload" crossorigin href="./assets/main-CwSdzVhm.js">
139
- <link rel="modulepreload" crossorigin href="./assets/cells-xPjoZY0S.js">
140
- <link rel="modulepreload" crossorigin href="./assets/ErrorBoundary-BYCO3_zw.js">
139
+ <link rel="modulepreload" crossorigin href="./assets/cells-rr1jjvJk.js">
140
+ <link rel="modulepreload" crossorigin href="./assets/ErrorBoundary-Drf1manw.js">
141
141
  <link rel="modulepreload" crossorigin href="./assets/kbd-Czc5z_04.js">
142
- <link rel="modulepreload" crossorigin href="./assets/useInstallPackage-CBvG269f.js">
143
- <link rel="modulepreload" crossorigin href="./assets/alert-dialog-B3T1GCoD.js">
144
- <link rel="modulepreload" crossorigin href="./assets/dialog-DIUTtzeB.js">
142
+ <link rel="modulepreload" crossorigin href="./assets/useInstallPackage-RldLPyJs.js">
143
+ <link rel="modulepreload" crossorigin href="./assets/alert-dialog-k5KxevGr.js">
144
+ <link rel="modulepreload" crossorigin href="./assets/dialog-DUEuLcT2.js">
145
145
  <link rel="modulepreload" crossorigin href="./assets/useDebounce-em3gna-v.js">
146
- <link rel="modulepreload" crossorigin href="./assets/numbers-Ckcn6C-H.js">
146
+ <link rel="modulepreload" crossorigin href="./assets/numbers-C9_R_vlY.js">
147
147
  <link rel="modulepreload" crossorigin href="./assets/SSRProvider-DD7JA3RM.js">
148
148
  <link rel="modulepreload" crossorigin href="./assets/context-BAYdLMF_.js">
149
149
  <link rel="modulepreload" crossorigin href="./assets/useNumberFormatter-D8ks3oPN.js">
150
150
  <link rel="modulepreload" crossorigin href="./assets/usePress-C2LPFxyv.js">
151
- <link rel="modulepreload" crossorigin href="./assets/input-DP44ewsS.js">
152
- <link rel="modulepreload" crossorigin href="./assets/ImperativeModal-7Thr73Oo.js">
153
- <link rel="modulepreload" crossorigin href="./assets/cell-link-NwzNlJhp.js">
154
- <link rel="modulepreload" crossorigin href="./assets/multi-map-TecGBFLS.js">
151
+ <link rel="modulepreload" crossorigin href="./assets/input-CaEtLL8p.js">
152
+ <link rel="modulepreload" crossorigin href="./assets/ImperativeModal-q6QlC2aZ.js">
153
+ <link rel="modulepreload" crossorigin href="./assets/cell-link-Hwo1QbqQ.js">
154
+ <link rel="modulepreload" crossorigin href="./assets/multi-map-fjX9ImVF.js">
155
155
  <link rel="modulepreload" crossorigin href="./assets/alert-BEdExd6A.js">
156
156
  <link rel="modulepreload" crossorigin href="./assets/chevron-right-CqEd11Di.js">
157
157
  <link rel="modulepreload" crossorigin href="./assets/dropdown-menu-BP4_BZLr.js">
158
158
  <link rel="modulepreload" crossorigin href="./assets/links-DNmjkr65.js">
159
- <link rel="modulepreload" crossorigin href="./assets/datasource-CyWtxjKq.js">
160
- <link rel="modulepreload" crossorigin href="./assets/state-DfW1MJsR.js">
161
- <link rel="modulepreload" crossorigin href="./assets/MarimoErrorOutput-Dtk0CQJu.js">
162
- <link rel="modulepreload" crossorigin href="./assets/copy-Bmkr29w4.js">
159
+ <link rel="modulepreload" crossorigin href="./assets/datasource-DHbNHnua.js">
160
+ <link rel="modulepreload" crossorigin href="./assets/state-BHFBtWym.js">
161
+ <link rel="modulepreload" crossorigin href="./assets/MarimoErrorOutput-CO8cm8-0.js">
162
+ <link rel="modulepreload" crossorigin href="./assets/copy-DRhpWiOq.js">
163
163
  <link rel="modulepreload" crossorigin href="./assets/copy-gBVL4NN-.js">
164
- <link rel="modulepreload" crossorigin href="./assets/copy-icon-qVgCqhII.js">
164
+ <link rel="modulepreload" crossorigin href="./assets/copy-icon-B69c-352.js">
165
165
  <link rel="modulepreload" crossorigin href="./assets/spinner-C1czjtp7.js">
166
- <link rel="modulepreload" crossorigin href="./assets/es-1yDP0Xdp.js">
167
- <link rel="modulepreload" crossorigin href="./assets/focus-DPgrnlZ1.js">
168
- <link rel="modulepreload" crossorigin href="./assets/LazyAnyLanguageCodeMirror-DIbHWNF6.js">
166
+ <link rel="modulepreload" crossorigin href="./assets/es-YVwBDiDw.js">
167
+ <link rel="modulepreload" crossorigin href="./assets/focus-D3ygI6Sy.js">
168
+ <link rel="modulepreload" crossorigin href="./assets/LazyAnyLanguageCodeMirror-jpEDlD0M.js">
169
169
  <link rel="modulepreload" crossorigin href="./assets/katex-AwOI3EvM.js">
170
170
  <link rel="modulepreload" crossorigin href="./assets/marked.esm-CHnOtnr3.js">
171
171
  <link rel="modulepreload" crossorigin href="./assets/chunk-OGVTOU66-CjNLT2C3.js">
172
- <link rel="modulepreload" crossorigin href="./assets/markdown-renderer-B0tsGAgw.js">
173
- <link rel="modulepreload" crossorigin href="./assets/dist-vrNOUnFF.js">
174
- <link rel="modulepreload" crossorigin href="./assets/command-DIcQwElH.js">
172
+ <link rel="modulepreload" crossorigin href="./assets/markdown-renderer-DecoaRsV.js">
173
+ <link rel="modulepreload" crossorigin href="./assets/dist-DOFFh6Ii.js">
174
+ <link rel="modulepreload" crossorigin href="./assets/command-xU8ykulh.js">
175
175
  <link rel="modulepreload" crossorigin href="./assets/popover-DtnzNVk-.js">
176
- <link rel="modulepreload" crossorigin href="./assets/useRunCells-BHhExio0.js">
177
- <link rel="modulepreload" crossorigin href="./assets/mode-Ii-fBazZ.js">
176
+ <link rel="modulepreload" crossorigin href="./assets/useRunCells-BGzo-QMk.js">
177
+ <link rel="modulepreload" crossorigin href="./assets/mode-BYulXE3t.js">
178
178
  <link rel="modulepreload" crossorigin href="./assets/purify.es-N-2faAGj.js">
179
- <link rel="modulepreload" crossorigin href="./assets/RenderHTML-DfrA7ZTv.js">
179
+ <link rel="modulepreload" crossorigin href="./assets/RenderHTML-D6fh5YLC.js">
180
180
  <link rel="modulepreload" crossorigin href="./assets/table--_20dwBZ.js">
181
181
  <link rel="modulepreload" crossorigin href="./assets/tabs-Ctk4D03n.js">
182
182
  <link rel="modulepreload" crossorigin href="./assets/useAsyncData-BJJJOr9W.js">
183
- <link rel="modulepreload" crossorigin href="./assets/useIframeCapabilities-ZISlVepl.js">
184
- <link rel="modulepreload" crossorigin href="./assets/error-banner-D2-5vgE4.js">
185
- <link rel="modulepreload" crossorigin href="./assets/formats-nh-sPUUZ.js">
183
+ <link rel="modulepreload" crossorigin href="./assets/useIframeCapabilities-CU-WWxnz.js">
184
+ <link rel="modulepreload" crossorigin href="./assets/error-banner-DU5Qb8a8.js">
185
+ <link rel="modulepreload" crossorigin href="./assets/formats-B9CrBoaO.js">
186
186
  <link rel="modulepreload" crossorigin href="./assets/en-US-DhMN8sxe.js">
187
187
  <link rel="modulepreload" crossorigin href="./assets/isValid-DhzaK-Y1.js">
188
- <link rel="modulepreload" crossorigin href="./assets/dates-B2_O0-if.js">
189
- <link rel="modulepreload" crossorigin href="./assets/download-B9UlWvRO.js">
190
- <link rel="modulepreload" crossorigin href="./assets/maps-DELIOfTw.js">
188
+ <link rel="modulepreload" crossorigin href="./assets/dates-CdsE1R40.js">
189
+ <link rel="modulepreload" crossorigin href="./assets/download-DKRxBkYD.js">
190
+ <link rel="modulepreload" crossorigin href="./assets/maps-s2pQkyf5.js">
191
191
  <link rel="modulepreload" crossorigin href="./assets/extends-B9D0JO9U.js">
192
192
  <link rel="modulepreload" crossorigin href="./assets/emotion-is-prop-valid.esm-lG8j6oqk.js">
193
193
  <link rel="modulepreload" crossorigin href="./assets/useDateFormatter-CV0QXb5P.js">
194
194
  <link rel="modulepreload" crossorigin href="./assets/range-sshwVRcP.js">
195
- <link rel="modulepreload" crossorigin href="./assets/capitalize-D4JsDDXI.js">
195
+ <link rel="modulepreload" crossorigin href="./assets/capitalize-DQeWKRGx.js">
196
196
  <link rel="modulepreload" crossorigin href="./assets/table-BLx7B_us.js">
197
- <link rel="modulepreload" crossorigin href="./assets/JsonOutput-C7Jn2Hoy.js">
197
+ <link rel="modulepreload" crossorigin href="./assets/JsonOutput-CkeISXrs.js">
198
198
  <link rel="modulepreload" crossorigin href="./assets/file-BnFXtaZZ.js">
199
199
  <link rel="modulepreload" crossorigin href="./assets/play-BJDBXApx.js">
200
- <link rel="modulepreload" crossorigin href="./assets/chat-components-CQFXyizy.js">
200
+ <link rel="modulepreload" crossorigin href="./assets/chat-components-DXJsXOD8.js">
201
201
  <link rel="modulepreload" crossorigin href="./assets/isEmpty-DIxUV1UR.js">
202
202
  <link rel="modulepreload" crossorigin href="./assets/circle-check-big-OIMTUpe6.js">
203
- <link rel="modulepreload" crossorigin href="./assets/chat-display-DqUXDG-o.js">
204
- <link rel="modulepreload" crossorigin href="./assets/ai-model-dropdown-CAhqhkRJ.js">
205
- <link rel="modulepreload" crossorigin href="./assets/renderShortcut-DolwKyOI.js">
206
- <link rel="modulepreload" crossorigin href="./assets/useDeleteCell-DAgP4oYp.js">
203
+ <link rel="modulepreload" crossorigin href="./assets/chat-display-C08N0rx5.js">
204
+ <link rel="modulepreload" crossorigin href="./assets/ai-model-dropdown-D1nEKS8b.js">
205
+ <link rel="modulepreload" crossorigin href="./assets/renderShortcut-D0Pei-OA.js">
206
+ <link rel="modulepreload" crossorigin href="./assets/useDeleteCell-DBzN8QcP.js">
207
207
  <link rel="modulepreload" crossorigin href="./assets/icons-D4lB4En9.js">
208
- <link rel="modulepreload" crossorigin href="./assets/process-output-Dsqg6AQn.js">
208
+ <link rel="modulepreload" crossorigin href="./assets/process-output-2gz8Uri2.js">
209
209
  <link rel="modulepreload" crossorigin href="./assets/blob-Dg_vNTSs.js">
210
210
  <link rel="modulepreload" crossorigin href="./assets/objectWithoutPropertiesLoose-CboCOq4o.js">
211
211
  <link rel="modulepreload" crossorigin href="./assets/esm-B3JckBtM.js">
212
- <link rel="modulepreload" crossorigin href="./assets/add-cell-with-ai-BYCrNUOQ.js">
212
+ <link rel="modulepreload" crossorigin href="./assets/add-cell-with-ai-B3V6Mgb9.js">
213
213
  <link rel="modulepreload" crossorigin href="./assets/chart-no-axes-column-D42sFB6d.js">
214
214
  <link rel="modulepreload" crossorigin href="./assets/square-function-DxXFdbn8.js">
215
- <link rel="modulepreload" crossorigin href="./assets/spec-D9TFI5I_.js">
216
- <link rel="modulepreload" crossorigin href="./assets/column-preview-BuNifqxS.js">
217
- <link rel="modulepreload" crossorigin href="./assets/switch-DXLifdeN.js">
215
+ <link rel="modulepreload" crossorigin href="./assets/spec-qp_XZeSS.js">
216
+ <link rel="modulepreload" crossorigin href="./assets/column-preview-BzvHnhPG.js">
217
+ <link rel="modulepreload" crossorigin href="./assets/switch-iJj-D3dz.js">
218
218
  <link rel="modulepreload" crossorigin href="./assets/toggle-G1t0cQyf.js">
219
- <link rel="modulepreload" crossorigin href="./assets/globals-CC2GcyGk.js">
220
- <link rel="modulepreload" crossorigin href="./assets/share-0dWXMs9M.js">
219
+ <link rel="modulepreload" crossorigin href="./assets/globals-D46Vbo5D.js">
220
+ <link rel="modulepreload" crossorigin href="./assets/share-CXQVxivL.js">
221
221
  <link rel="modulepreload" crossorigin href="./assets/memoize-DN0TMY36.js">
222
222
  <link rel="modulepreload" crossorigin href="./assets/get-CyLJYAfP.js">
223
223
  <link rel="modulepreload" crossorigin href="./assets/_baseSet-6FYvpjrm.js">
224
224
  <link rel="modulepreload" crossorigin href="./assets/react-resizable-panels.browser.esm-BqxQegSf.js">
225
- <link rel="modulepreload" crossorigin href="./assets/utilities.esm-lV-KjYEM.js">
226
- <link rel="modulepreload" crossorigin href="./assets/floating-outline-C5wKHGsD.js">
227
- <link rel="modulepreload" crossorigin href="./assets/useAddCell-CuNdAB3f.js">
225
+ <link rel="modulepreload" crossorigin href="./assets/utilities.esm-CT3NbLA9.js">
226
+ <link rel="modulepreload" crossorigin href="./assets/floating-outline-CHprSkP6.js">
227
+ <link rel="modulepreload" crossorigin href="./assets/useAddCell-BpMe5DB-.js">
228
228
  <link rel="modulepreload" crossorigin href="./assets/eye-off-D9zAYqG9.js">
229
229
  <link rel="modulepreload" crossorigin href="./assets/plus-CHesBJpY.js">
230
- <link rel="modulepreload" crossorigin href="./assets/readonly-python-code-CEN7uCAn.js">
230
+ <link rel="modulepreload" crossorigin href="./assets/readonly-python-code-ihKi3Mrq.js">
231
231
  <link rel="modulepreload" crossorigin href="./assets/file-video-camera-CZUg-nFA.js">
232
- <link rel="modulepreload" crossorigin href="./assets/types-B_DyfI3j.js">
233
- <link rel="modulepreload" crossorigin href="./assets/label-DJo0Eeb3.js">
234
- <link rel="modulepreload" crossorigin href="./assets/textarea-BibopRh1.js">
232
+ <link rel="modulepreload" crossorigin href="./assets/types-4-l_7Ws2.js">
233
+ <link rel="modulepreload" crossorigin href="./assets/label-qwandMoh.js">
234
+ <link rel="modulepreload" crossorigin href="./assets/textarea-DmNrZcLR.js">
235
235
  <link rel="modulepreload" crossorigin href="./assets/refresh-ccw-DbW1_PHb.js">
236
236
  <link rel="modulepreload" crossorigin href="./assets/trash-2-C-lF7BNB.js">
237
- <link rel="modulepreload" crossorigin href="./assets/form-B2Db87Zc.js">
238
- <link rel="modulepreload" crossorigin href="./assets/field-D2_0r7wT.js">
239
- <link rel="modulepreload" crossorigin href="./assets/useBoolean-DWRpatKF.js">
237
+ <link rel="modulepreload" crossorigin href="./assets/form-B_zRT4QS.js">
238
+ <link rel="modulepreload" crossorigin href="./assets/field-DDKGFzpC.js">
239
+ <link rel="modulepreload" crossorigin href="./assets/useBoolean-BDG41CyP.js">
240
240
  <link rel="modulepreload" crossorigin href="./assets/useDeepCompareMemoize-gzLRYatP.js">
241
241
  <link rel="modulepreload" crossorigin href="./assets/types-B42u_5hF.js">
242
242
  <link rel="modulepreload" crossorigin href="./assets/prop-types-C638SUfx.js">
243
243
  <link rel="modulepreload" crossorigin href="./assets/es-FiXEquL2.js">
244
- <link rel="modulepreload" crossorigin href="./assets/VisuallyHidden-BLp5kXtE.js">
244
+ <link rel="modulepreload" crossorigin href="./assets/VisuallyHidden-BodIky8L.js">
245
245
  <link rel="modulepreload" crossorigin href="./assets/hasIn-DydgU7lx.js">
246
246
  <link rel="modulepreload" crossorigin href="./assets/_baseFlatten-CLPh0yMf.js">
247
247
  <link rel="modulepreload" crossorigin href="./assets/flatten-Buk63LQO.js">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marimo-team/frontend",
3
- "version": "0.18.5-dev169",
3
+ "version": "0.18.5-dev171",
4
4
  "main": "dist/main.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -0,0 +1,34 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { createContext, useContext } from "react";
4
+ import { invariant } from "@/utils/invariant";
5
+
6
+ export type PanelSection = "sidebar" | "developer-panel";
7
+
8
+ const PanelSectionContext = createContext<PanelSection | null>(null);
9
+
10
+ export const PanelSectionProvider = PanelSectionContext.Provider;
11
+
12
+ /**
13
+ * Hook to get the current panel section context.
14
+ * Returns "sidebar" or "developer-panel" depending on where the panel is rendered.
15
+ * Throws if used outside of a panel context.
16
+ */
17
+ export function usePanelSection(): PanelSection {
18
+ const section = useContext(PanelSectionContext);
19
+ invariant(
20
+ section !== null,
21
+ "usePanelSection must be used within a PanelSectionProvider",
22
+ );
23
+ return section;
24
+ }
25
+
26
+ /**
27
+ * Hook to get the preferred orientation based on the panel section.
28
+ * - Sidebar panels should use vertical layouts (stacked)
29
+ * - Developer panel should use horizontal layouts (side-by-side)
30
+ */
31
+ export function usePanelOrientation(): "horizontal" | "vertical" {
32
+ const section = usePanelSection();
33
+ return section === "sidebar" ? "vertical" : "horizontal";
34
+ }
@@ -26,6 +26,7 @@ import { getFeatureFlag } from "@/core/config/feature-flag";
26
26
  import { cn } from "@/utils/cn";
27
27
  import { ErrorBoundary } from "../../boundary/ErrorBoundary";
28
28
  import { ContextAwarePanel } from "../panels/context-aware-panel/context-aware-panel";
29
+ import { PanelSectionProvider } from "../panels/panel-context";
29
30
  import { panelLayoutAtom, useChromeActions, useChromeState } from "../state";
30
31
  import { PANEL_MAP, PANELS, type PanelDescriptor } from "../types";
31
32
  import { BackendConnectionStatus } from "./footer-items/backend-status";
@@ -222,72 +223,74 @@ export const AppChrome: React.FC<PropsWithChildren> = ({ children }) => {
222
223
 
223
224
  const helpPaneBody = (
224
225
  <ErrorBoundary>
225
- <div className="flex flex-col h-full flex-1 overflow-hidden mr-[-4px]">
226
- <div className="p-3 border-b flex justify-between items-center">
227
- {selectedPanel === "ai" && agentsEnabled ? (
228
- <Tabs
229
- value={aiPanelTab}
230
- onValueChange={(value) => {
231
- if (value === "chat" || value === "agents") {
232
- setAiPanelTab(value);
233
- }
234
- }}
226
+ <PanelSectionProvider value="sidebar">
227
+ <div className="flex flex-col h-full flex-1 overflow-hidden mr-[-4px]">
228
+ <div className="p-3 border-b flex justify-between items-center">
229
+ {selectedPanel === "ai" && agentsEnabled ? (
230
+ <Tabs
231
+ value={aiPanelTab}
232
+ onValueChange={(value) => {
233
+ if (value === "chat" || value === "agents") {
234
+ setAiPanelTab(value);
235
+ }
236
+ }}
237
+ >
238
+ <TabsList>
239
+ <TabsTrigger
240
+ value="chat"
241
+ className="py-0.5 text-xs uppercase tracking-wide font-bold"
242
+ >
243
+ Chat
244
+ </TabsTrigger>
245
+ <TabsTrigger
246
+ value="agents"
247
+ className="py-0.5 text-xs uppercase tracking-wide font-bold"
248
+ >
249
+ Agents
250
+ </TabsTrigger>
251
+ </TabsList>
252
+ </Tabs>
253
+ ) : (
254
+ <span className="text-sm text-(--slate-11) uppercase tracking-wide font-semibold flex-1">
255
+ {selectedPanel}
256
+ </span>
257
+ )}
258
+ <Button
259
+ data-testid="close-helper-pane"
260
+ className="m-0"
261
+ size="xs"
262
+ variant="text"
263
+ onClick={() => setIsSidebarOpen(false)}
235
264
  >
236
- <TabsList>
237
- <TabsTrigger
238
- value="chat"
239
- className="py-0.5 text-xs uppercase tracking-wide font-bold"
240
- >
241
- Chat
242
- </TabsTrigger>
243
- <TabsTrigger
244
- value="agents"
245
- className="py-0.5 text-xs uppercase tracking-wide font-bold"
246
- >
247
- Agents
248
- </TabsTrigger>
249
- </TabsList>
250
- </Tabs>
251
- ) : (
252
- <span className="text-sm text-(--slate-11) uppercase tracking-wide font-semibold flex-1">
253
- {selectedPanel}
254
- </span>
255
- )}
256
- <Button
257
- data-testid="close-helper-pane"
258
- className="m-0"
259
- size="xs"
260
- variant="text"
261
- onClick={() => setIsSidebarOpen(false)}
262
- >
263
- <XIcon className="w-4 h-4" />
264
- </Button>
265
+ <XIcon className="w-4 h-4" />
266
+ </Button>
267
+ </div>
268
+ <Suspense>
269
+ <TooltipProvider>
270
+ {selectedPanel === "files" && <LazyFileExplorerPanel />}
271
+ {selectedPanel === "variables" && <LazySessionPanel />}
272
+ {selectedPanel === "dependencies" && <LazyDependencyGraphPanel />}
273
+ {selectedPanel === "packages" && <LazyPackagesPanel />}
274
+ {selectedPanel === "outline" && <LazyOutlinePanel />}
275
+ {selectedPanel === "documentation" && <LazyDocumentationPanel />}
276
+ {selectedPanel === "snippets" && <LazySnippetsPanel />}
277
+ {selectedPanel === "ai" && renderAiPanel()}
278
+ {selectedPanel === "errors" && <LazyErrorsPanel />}
279
+ {selectedPanel === "scratchpad" && <LazyScratchpadPanel />}
280
+ {selectedPanel === "tracing" && <LazyTracingPanel />}
281
+ {selectedPanel === "secrets" && <LazySecretsPanel />}
282
+ {selectedPanel === "logs" && <LazyLogsPanel />}
283
+ {selectedPanel === "terminal" && (
284
+ <LazyTerminal
285
+ visible={isSidebarOpen}
286
+ onClose={() => setIsSidebarOpen(false)}
287
+ />
288
+ )}
289
+ {selectedPanel === "cache" && <LazyCachePanel />}
290
+ </TooltipProvider>
291
+ </Suspense>
265
292
  </div>
266
- <Suspense>
267
- <TooltipProvider>
268
- {selectedPanel === "files" && <LazyFileExplorerPanel />}
269
- {selectedPanel === "variables" && <LazySessionPanel />}
270
- {selectedPanel === "dependencies" && <LazyDependencyGraphPanel />}
271
- {selectedPanel === "packages" && <LazyPackagesPanel />}
272
- {selectedPanel === "outline" && <LazyOutlinePanel />}
273
- {selectedPanel === "documentation" && <LazyDocumentationPanel />}
274
- {selectedPanel === "snippets" && <LazySnippetsPanel />}
275
- {selectedPanel === "ai" && renderAiPanel()}
276
- {selectedPanel === "errors" && <LazyErrorsPanel />}
277
- {selectedPanel === "scratchpad" && <LazyScratchpadPanel />}
278
- {selectedPanel === "tracing" && <LazyTracingPanel />}
279
- {selectedPanel === "secrets" && <LazySecretsPanel />}
280
- {selectedPanel === "logs" && <LazyLogsPanel />}
281
- {selectedPanel === "terminal" && (
282
- <LazyTerminal
283
- visible={isSidebarOpen}
284
- onClose={() => setIsSidebarOpen(false)}
285
- />
286
- )}
287
- {selectedPanel === "cache" && <LazyCachePanel />}
288
- </TooltipProvider>
289
- </Suspense>
290
- </div>
293
+ </PanelSectionProvider>
291
294
  </ErrorBoundary>
292
295
  );
293
296
 
@@ -409,37 +412,47 @@ export const AppChrome: React.FC<PropsWithChildren> = ({ children }) => {
409
412
  </div>
410
413
  {/* Panel content */}
411
414
  <Suspense fallback={<div />}>
412
- <div className="flex-1 overflow-hidden">
413
- {selectedDeveloperPanelTab === "files" && <LazyFileExplorerPanel />}
414
- {selectedDeveloperPanelTab === "variables" && <LazySessionPanel />}
415
- {selectedDeveloperPanelTab === "dependencies" && (
416
- <LazyDependencyGraphPanel />
417
- )}
418
- {selectedDeveloperPanelTab === "packages" && <LazyPackagesPanel />}
419
- {selectedDeveloperPanelTab === "outline" && <LazyOutlinePanel />}
420
- {selectedDeveloperPanelTab === "documentation" && (
421
- <LazyDocumentationPanel />
422
- )}
423
- {selectedDeveloperPanelTab === "snippets" && <LazySnippetsPanel />}
424
- {selectedDeveloperPanelTab === "ai" && renderAiPanel()}
425
- {selectedDeveloperPanelTab === "errors" && <LazyErrorsPanel />}
426
- {selectedDeveloperPanelTab === "scratchpad" && (
427
- <LazyScratchpadPanel />
428
- )}
429
- {selectedDeveloperPanelTab === "tracing" && <LazyTracingPanel />}
430
- {selectedDeveloperPanelTab === "secrets" && <LazySecretsPanel />}
431
- {selectedDeveloperPanelTab === "logs" && <LazyLogsPanel />}
432
- {/* LazyMount needed for Terminal to avoid spurious connection */}
433
- {selectedDeveloperPanelTab === "terminal" && (
434
- <LazyMount isOpen={isDeveloperPanelOpen}>
435
- <LazyTerminal
436
- visible={isDeveloperPanelOpen}
437
- onClose={() => setIsDeveloperPanelOpen(false)}
438
- />
439
- </LazyMount>
440
- )}
441
- {selectedDeveloperPanelTab === "cache" && <LazyCachePanel />}
442
- </div>
415
+ <PanelSectionProvider value="developer-panel">
416
+ <div className="flex-1 overflow-hidden">
417
+ {selectedDeveloperPanelTab === "files" && (
418
+ <LazyFileExplorerPanel />
419
+ )}
420
+ {selectedDeveloperPanelTab === "variables" && (
421
+ <LazySessionPanel />
422
+ )}
423
+ {selectedDeveloperPanelTab === "dependencies" && (
424
+ <LazyDependencyGraphPanel />
425
+ )}
426
+ {selectedDeveloperPanelTab === "packages" && (
427
+ <LazyPackagesPanel />
428
+ )}
429
+ {selectedDeveloperPanelTab === "outline" && <LazyOutlinePanel />}
430
+ {selectedDeveloperPanelTab === "documentation" && (
431
+ <LazyDocumentationPanel />
432
+ )}
433
+ {selectedDeveloperPanelTab === "snippets" && (
434
+ <LazySnippetsPanel />
435
+ )}
436
+ {selectedDeveloperPanelTab === "ai" && renderAiPanel()}
437
+ {selectedDeveloperPanelTab === "errors" && <LazyErrorsPanel />}
438
+ {selectedDeveloperPanelTab === "scratchpad" && (
439
+ <LazyScratchpadPanel />
440
+ )}
441
+ {selectedDeveloperPanelTab === "tracing" && <LazyTracingPanel />}
442
+ {selectedDeveloperPanelTab === "secrets" && <LazySecretsPanel />}
443
+ {selectedDeveloperPanelTab === "logs" && <LazyLogsPanel />}
444
+ {/* LazyMount needed for Terminal to avoid spurious connection */}
445
+ {selectedDeveloperPanelTab === "terminal" && (
446
+ <LazyMount isOpen={isDeveloperPanelOpen}>
447
+ <LazyTerminal
448
+ visible={isDeveloperPanelOpen}
449
+ onClose={() => setIsDeveloperPanelOpen(false)}
450
+ />
451
+ </LazyMount>
452
+ )}
453
+ {selectedDeveloperPanelTab === "cache" && <LazyCachePanel />}
454
+ </div>
455
+ </PanelSectionProvider>
443
456
  </Suspense>
444
457
  </div>
445
458
  </Panel>
@@ -27,6 +27,10 @@ import { useTheme } from "@/theme/useTheme";
27
27
  import { cn } from "@/utils/cn";
28
28
  import { Functions } from "@/utils/functions";
29
29
  import { CellEditor } from "../editor/cell/code/cell-editor";
30
+ import {
31
+ usePanelOrientation,
32
+ usePanelSection,
33
+ } from "../editor/chrome/panels/panel-context";
30
34
  import { HideInKioskMode } from "../editor/kiosk-mode";
31
35
  import { OutputArea } from "../editor/Output";
32
36
  import { ConsoleOutput } from "../editor/output/console/ConsoleOutput";
@@ -53,6 +57,8 @@ export const ScratchPad: React.FC = () => {
53
57
  const lastFocusedCellId = useLastFocusedCellId();
54
58
  const { createNewCell, updateCellCode } = useCellActions();
55
59
  const { sendRunScratchpad } = useRequestClient();
60
+ const orientation = usePanelOrientation();
61
+ const section = usePanelSection();
56
62
 
57
63
  const cellId = SCRATCH_CELL_ID;
58
64
  const cellRuntime = notebookState.cellRuntime[cellId];
@@ -223,13 +229,15 @@ export const ScratchPad: React.FC = () => {
223
229
  </div>
224
230
  );
225
231
 
232
+ const isVertical = orientation === "vertical";
233
+
226
234
  return (
227
235
  <div
228
236
  className="flex flex-col h-full overflow-hidden"
229
237
  id={HTMLCellId.create(cellId)}
230
238
  >
231
- <PanelGroup direction="horizontal" className="h-full">
232
- {/* Left side: toolbar + editor */}
239
+ <PanelGroup key={section} direction={orientation} className="h-full">
240
+ {/* Editor panel */}
233
241
  <Panel defaultSize={40} minSize={20} maxSize={70}>
234
242
  <div className="h-full flex flex-col overflow-hidden relative">
235
243
  {renderToolbar()}
@@ -257,8 +265,13 @@ export const ScratchPad: React.FC = () => {
257
265
  {renderHistory()}
258
266
  </div>
259
267
  </Panel>
260
- <PanelResizeHandle className="w-1 bg-border hover:bg-primary/50 transition-colors" />
261
- {/* Right side: outputs */}
268
+ <PanelResizeHandle
269
+ className={cn(
270
+ "bg-border hover:bg-primary/50 transition-colors",
271
+ isVertical ? "h-1" : "w-1",
272
+ )}
273
+ />
274
+ {/* Output panel */}
262
275
  <Panel defaultSize={60} minSize={20}>
263
276
  <div className="h-full flex flex-col divide-y overflow-hidden">
264
277
  <div className="flex-1 overflow-auto">