@marimo-team/islands 0.25.3-dev301 → 0.25.3-dev303

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 (100) hide show
  1. package/dist/{ConnectedDataExplorerComponent-X-_Gsw0B.js → ConnectedDataExplorerComponent-DJnSxHJB.js} +9 -9
  2. package/dist/{ErrorBoundary-D2XuUNty.js → ErrorBoundary-CkXYBt02.js} +6 -6
  3. package/dist/{abnfDiagram-VCTEODGH-B8nNWmL7.js → abnfDiagram-VCTEODGH-CR0U5hup.js} +2 -2
  4. package/dist/{any-language-editor-DhAtCzlx.js → any-language-editor-C5dsTpeB.js} +2 -2
  5. package/dist/{architectureDiagram-5GKGNRK7-DcfTzRDz.js → architectureDiagram-5GKGNRK7-Bc_fbI1Q.js} +1 -1
  6. package/dist/{assertNever-De6m1Aro.js → assertNever-efcK_v3t.js} +2 -2
  7. package/dist/assets/__vite-browser-external-DzTYIHH_.js +1 -0
  8. package/dist/assets/worker-BH08I2Il.js +171 -0
  9. package/dist/{chat-ui-CtbON6Zl.js → chat-ui-C4iLRzY0.js} +12 -12
  10. package/dist/{check-C7fmwkwt.js → check-DCQEEsUn.js} +1 -1
  11. package/dist/{chunk-IMKFNOWR-BHJ3ZxAy.js → chunk-IMKFNOWR-y9z5oeAY.js} +1 -1
  12. package/dist/{chunk-SHT3W25Y-CkOPJgVC.js → chunk-SHT3W25Y-Tu-V-e_v.js} +1 -1
  13. package/dist/{chunk-SVP7TREG-rDd35EZ7.js → chunk-SVP7TREG-CJFxs5R_.js} +1 -1
  14. package/dist/{chunk-TICWLB2K-uKdr5PNy.js → chunk-TICWLB2K-zkTP7ya7.js} +1 -1
  15. package/dist/{classDiagram-ZZMXUADV-DctWoMRF.js → classDiagram-ZZMXUADV-DxJAZI0N.js} +2 -2
  16. package/dist/{classDiagram-v2-VYDZK3BY-DyanDjSq.js → classDiagram-v2-VYDZK3BY-TmHo2BpS.js} +2 -2
  17. package/dist/{code-visibility-Y0zfGGT1.js → code-visibility-BWqxH-SS.js} +5 -5
  18. package/dist/{common-B_rBSwAA.js → common-BzSr-5bH.js} +19 -19
  19. package/dist/{config-C4oddKcw.js → config-BG2qKzDg.js} +3 -3
  20. package/dist/{copy-icon-CVrC6aa6.js → copy-icon-oHFcxX_y.js} +2 -2
  21. package/dist/{createReducer-DzlYBqjn.js → createReducer-DHfURLCk.js} +1 -1
  22. package/dist/{cynefinDiagram-5FMLGOSQ-uEhVcLHR.js → cynefinDiagram-5FMLGOSQ-Eb40hmhD.js} +1 -1
  23. package/dist/{dagre-GXQ25YYZ-B_NBKhOr.js → dagre-GXQ25YYZ-_paaVwit.js} +1 -1
  24. package/dist/{data-grid-overlay-editor-04SWN9ol.js → data-grid-overlay-editor-D-JJeDak.js} +1 -1
  25. package/dist/{diagram-S7CK7UJ4-BQr1iw91.js → diagram-S7CK7UJ4-BtKJm1_4.js} +1 -1
  26. package/dist/{diagram-UQ7AKVKN-DsAjdQ2j.js → diagram-UQ7AKVKN-DQbxhEMd.js} +1 -1
  27. package/dist/{diagram-VX7I27RA-0VAUrHmz.js → diagram-VX7I27RA-DITDIfGC.js} +1 -1
  28. package/dist/{diagram-Z3DM3KII-C1aEuADo.js → diagram-Z3DM3KII-Ct9_zo6F.js} +1 -1
  29. package/dist/{dialog-U3stKkkL.js → dialog-BIUdMLIS.js} +2 -2
  30. package/dist/{dropdown-menu-BMtxnyHc.js → dropdown-menu-CAejOChE.js} +5 -5
  31. package/dist/{ebnfDiagram-PWID7BFC-oBie_-vi.js → ebnfDiagram-PWID7BFC-6cOntwfv.js} +2 -2
  32. package/dist/{erDiagram-RLTQ6QDP-DtWDCiaw.js → erDiagram-RLTQ6QDP-CJiOER41.js} +1 -1
  33. package/dist/{error-banner-CfIck83X.js → error-banner-DGOrmBk5.js} +1 -1
  34. package/dist/{error-entries-CjsQY6ym.js → error-entries-BWmleiL0.js} +8 -8
  35. package/dist/{feedback-button-DoriP8b7.js → feedback-button-3g6wZGH4.js} +7 -7
  36. package/dist/{flowDiagram-HODETNUW-EXK7bg_t.js → flowDiagram-HODETNUW-1lPBEUuW.js} +2 -2
  37. package/dist/{formats-G0-mQsFy.js → formats-qhBmYb0l.js} +1 -1
  38. package/dist/{glide-data-editor-BU_jOTDv.js → glide-data-editor-WryZQ9w2.js} +11 -11
  39. package/dist/{glide-utils-BkcGyXLQ.js → glide-utils-C4TKZeBA.js} +2 -2
  40. package/dist/{globals-DziKJCFY.js → globals-CMJjdKbd.js} +3 -3
  41. package/dist/{html-to-image-CIm3PqDi.js → html-to-image-B8hE6HIH.js} +12 -12
  42. package/dist/{infoDiagram-27XIBGKW-N4ajFTXv.js → infoDiagram-27XIBGKW-C6K4tri5.js} +1 -1
  43. package/dist/{ishikawaDiagram-5VMMS53U-Bb2itmv5.js → ishikawaDiagram-5VMMS53U-DwcwgRNH.js} +1 -1
  44. package/dist/{kanban-definition-UXKFOSKX-DWfkIEDX.js → kanban-definition-UXKFOSKX-E489OMdc.js} +1 -1
  45. package/dist/main.js +31 -31
  46. package/dist/{mermaid-BEBd0PHi.js → mermaid-DMPMkVqY.js} +34 -34
  47. package/dist/{mindmap-definition-YA3MSWOX-CmGSiRxU.js → mindmap-definition-YA3MSWOX-DWHjasOp.js} +1 -1
  48. package/dist/{number-overlay-editor-BaZBWVbO.js → number-overlay-editor-D96g34vO.js} +1 -1
  49. package/dist/{pegDiagram-XKGWAZYB-dXflGNi0.js → pegDiagram-XKGWAZYB-COjcPOZT.js} +2 -2
  50. package/dist/{pencil-BGy5pfXo.js → pencil-BUfnNZAE.js} +1 -1
  51. package/dist/{pieDiagram-E7YTZNPT-Bl9G_NNa.js → pieDiagram-E7YTZNPT-BHAVZ38h.js} +1 -1
  52. package/dist/{process-output-DAVapIAQ.js → process-output-DZDL_j1a.js} +4 -4
  53. package/dist/{railroadDiagram-O6MQD6OU-Dg7GUHj4.js → railroadDiagram-O6MQD6OU-94ThFyKX.js} +2 -2
  54. package/dist/{requirementDiagram-BXWQKSXE-JNZB3XKK.js → requirementDiagram-BXWQKSXE-CpF-Fxbb.js} +1 -1
  55. package/dist/{reveal-component-vRQ0ZbEq.js → reveal-component-CIP7WMa0.js} +8 -8
  56. package/dist/{select-Ba_tMQWZ.js → select-XmXyen3r.js} +4 -4
  57. package/dist/{sequenceDiagram-WJ2MYXX4-DekbwWOI.js → sequenceDiagram-WJ2MYXX4-CvANK2x7.js} +1 -1
  58. package/dist/{spec-CN3OxHz7.js → spec-CSS9g9Su.js} +4 -4
  59. package/dist/{stateDiagram-D77RDMKH-COzvSaN-.js → stateDiagram-D77RDMKH-WHuJ4mJL.js} +2 -2
  60. package/dist/{stateDiagram-v2-MP3YSRHH-rCvxZ0L8.js → stateDiagram-v2-MP3YSRHH-DbO7lwYq.js} +2 -2
  61. package/dist/{static-state-BJdfR8Bn.js → static-state-Dtocd9UO.js} +1 -1
  62. package/dist/{swimlanes-42K2YHIH-DX2mMlXc.js → swimlanes-42K2YHIH-CS2s29Vo.js} +1 -1
  63. package/dist/{swimlanesDiagram-VR7AAH4N-DswSPZ5e.js → swimlanesDiagram-VR7AAH4N-CXaA1vQg.js} +2 -2
  64. package/dist/{timeline-definition-24CTP7MA-DAT9AlwV.js → timeline-definition-24CTP7MA-B-SQMg5h.js} +1 -1
  65. package/dist/{toast-BRd_eTIj.js → toast-xEFvuGpt.js} +3 -3
  66. package/dist/{tooltip-CHvXUQVs.js → tooltip-BekOCQ3v.js} +1 -1
  67. package/dist/{use-restore-focus-Ckq0jQzc.js → use-restore-focus-DyrKLdSB.js} +1379 -1311
  68. package/dist/{useDateFormatter-CIPe17AG.js → useDateFormatter-Brx-S2sN.js} +2 -2
  69. package/dist/{useDeepCompareMemoize-Kg-7A4b-.js → useDeepCompareMemoize-CxywEb3a.js} +1 -1
  70. package/dist/{useLifecycle-BKVRcyGu.js → useLifecycle-BMlFy2yY.js} +1 -1
  71. package/dist/{vega-component-C23pVuni.js → vega-component-DwqGfN3_.js} +6 -6
  72. package/dist/{vennDiagram-4TSXK5OY-E7CMtY2M.js → vennDiagram-4TSXK5OY-etEFgvaG.js} +1 -1
  73. package/dist/{wardleyDiagram-VM6X3IG4-BjtOazpV.js → wardleyDiagram-VM6X3IG4-BEQN7g62.js} +1 -1
  74. package/dist/{xychartDiagram-S5SC5T6Z-DC09jtph.js → xychartDiagram-S5SC5T6Z-D8-e5Z0R.js} +1 -1
  75. package/package.json +1 -1
  76. package/src/components/ai/__tests__/ai-utils.test.ts +8 -0
  77. package/src/components/app-config/ai-config.tsx +4 -6
  78. package/src/components/app-config/data-form.tsx +1 -3
  79. package/src/components/app-config/get-dirty-values.ts +4 -4
  80. package/src/components/editor/__tests__/data-attributes.test.tsx +10 -3
  81. package/src/components/editor/actions/__tests__/useSetOutputsExpanded.test.ts +2 -1
  82. package/src/components/editor/actions/useSetOutputsExpanded.ts +1 -4
  83. package/src/components/editor/navigation/__tests__/navigation.test.ts +1 -0
  84. package/src/components/static-html/__tests__/static-banner.test.tsx +1 -1
  85. package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +7 -3
  86. package/src/core/cells/__tests__/cells.test.ts +4 -1
  87. package/src/core/cells/__tests__/harness.ts +4 -1
  88. package/src/core/codemirror/__tests__/format.test.ts +4 -1
  89. package/src/core/codemirror/__tests__/setup.test.ts +6 -4
  90. package/src/core/codemirror/copilot/__tests__/completion-integration.test.ts +4 -0
  91. package/src/core/codemirror/copilot/__tests__/getCodes.test.ts +7 -3
  92. package/src/core/codemirror/language/__tests__/extension.test.ts +7 -3
  93. package/src/core/codemirror/language/__tests__/utils.test.ts +7 -2
  94. package/src/core/config/__tests__/config-schema.test.ts +121 -11
  95. package/src/core/config/config-schema.ts +100 -15
  96. package/src/core/notebook/document/__tests__/codemirror.test.ts +8 -2
  97. package/src/stories/editor.stories.tsx +4 -0
  98. package/src/stories/theme.stories.tsx +4 -1
  99. package/dist/assets/__vite-browser-external-BzfoKXxV.js +0 -1
  100. package/dist/assets/worker-DVG30pr3.js +0 -171
@@ -56,20 +56,32 @@ test("default UserConfig - empty", () => {
56
56
  "custom_providers": {},
57
57
  "enabled": true,
58
58
  "inline_tooltip": false,
59
+ "max_tokens": null,
59
60
  "mode": "ask",
60
61
  "models": {
62
+ "autocomplete_model": null,
63
+ "chat_model": null,
61
64
  "custom_models": [],
62
65
  "displayed_models": [],
66
+ "edit_model": null,
63
67
  },
64
68
  "rules": "",
65
69
  },
70
+ "cache": {
71
+ "loader": "lazy",
72
+ "store": null,
73
+ "verification": "off",
74
+ },
66
75
  "completion": {
67
76
  "activate_on_typing": true,
68
77
  "auto_close_pairs": true,
69
78
  "copilot": false,
70
79
  "signature_hint_on_typing": false,
71
80
  },
72
- "diagnostics": {},
81
+ "datasources": {},
82
+ "diagnostics": {
83
+ "sql_linter": true,
84
+ },
73
85
  "display": {
74
86
  "cell_output": "below",
75
87
  "code_editor_font_size": 14,
@@ -81,8 +93,13 @@ test("default UserConfig - empty", () => {
81
93
  "reference_highlighting": true,
82
94
  "theme": "light",
83
95
  },
84
- "experimental": {},
85
- "file_browser": {},
96
+ "experimental": {
97
+ "debugger": false,
98
+ "execution_type": "relaxed",
99
+ "isolate_apps": false,
100
+ "line_timing": false,
101
+ },
102
+ "file_browser": null,
86
103
  "formatting": {
87
104
  "infer_types": "off",
88
105
  "line_length": 79,
@@ -92,17 +109,39 @@ test("default UserConfig - empty", () => {
92
109
  "overrides": {},
93
110
  "preset": "default",
94
111
  },
95
- "mcp": {},
112
+ "language_servers": {
113
+ "pylsp": {
114
+ "enable_flake8": false,
115
+ "enable_mypy": true,
116
+ "enable_pydocstyle": false,
117
+ "enable_pyflakes": false,
118
+ "enable_pylint": false,
119
+ "enable_ruff": true,
120
+ "enabled": false,
121
+ },
122
+ },
123
+ "lint": {
124
+ "ignore": [],
125
+ "select": [],
126
+ },
127
+ "mcp": {
128
+ "mcpServers": {},
129
+ "presets": [],
130
+ },
96
131
  "package_management": {
97
132
  "manager": "pip",
98
133
  },
99
134
  "runtime": {
100
135
  "auto_instantiate": true,
101
136
  "auto_reload": "off",
137
+ "cache_cells": false,
102
138
  "default_auto_download": [],
103
139
  "default_sql_output": "auto",
104
140
  "on_cell_change": "autorun",
141
+ "pin_modules": true,
142
+ "pythonpath": [],
105
143
  "reactive_tests": true,
144
+ "serve_cached_sessions_in_apps": false,
106
145
  "show_tracebacks": false,
107
146
  "watcher_on_save": "lazy",
108
147
  },
@@ -111,7 +150,23 @@ test("default UserConfig - empty", () => {
111
150
  "autosave_delay": 1000,
112
151
  "format_on_save": false,
113
152
  },
114
- "server": {},
153
+ "server": {
154
+ "disable_file_downloads": false,
155
+ "session_secret": null,
156
+ },
157
+ "sharing": null,
158
+ "signing": {
159
+ "private_key_path": null,
160
+ "trusted_signers": {},
161
+ },
162
+ "snippets": {
163
+ "custom_paths": [],
164
+ "include_default_snippets": true,
165
+ },
166
+ "venv": {
167
+ "path": null,
168
+ "writable": false,
169
+ },
115
170
  }
116
171
  `);
117
172
  });
@@ -133,20 +188,32 @@ test("default UserConfig - one level", () => {
133
188
  "custom_providers": {},
134
189
  "enabled": true,
135
190
  "inline_tooltip": false,
191
+ "max_tokens": null,
136
192
  "mode": "ask",
137
193
  "models": {
194
+ "autocomplete_model": null,
195
+ "chat_model": null,
138
196
  "custom_models": [],
139
197
  "displayed_models": [],
198
+ "edit_model": null,
140
199
  },
141
200
  "rules": "",
142
201
  },
202
+ "cache": {
203
+ "loader": "lazy",
204
+ "store": null,
205
+ "verification": "off",
206
+ },
143
207
  "completion": {
144
208
  "activate_on_typing": true,
145
209
  "auto_close_pairs": true,
146
210
  "copilot": false,
147
211
  "signature_hint_on_typing": false,
148
212
  },
149
- "diagnostics": {},
213
+ "datasources": {},
214
+ "diagnostics": {
215
+ "sql_linter": true,
216
+ },
150
217
  "display": {
151
218
  "cell_output": "below",
152
219
  "code_editor_font_size": 14,
@@ -158,8 +225,13 @@ test("default UserConfig - one level", () => {
158
225
  "reference_highlighting": true,
159
226
  "theme": "light",
160
227
  },
161
- "experimental": {},
162
- "file_browser": {},
228
+ "experimental": {
229
+ "debugger": false,
230
+ "execution_type": "relaxed",
231
+ "isolate_apps": false,
232
+ "line_timing": false,
233
+ },
234
+ "file_browser": null,
163
235
  "formatting": {
164
236
  "infer_types": "off",
165
237
  "line_length": 79,
@@ -169,17 +241,39 @@ test("default UserConfig - one level", () => {
169
241
  "overrides": {},
170
242
  "preset": "default",
171
243
  },
172
- "mcp": {},
244
+ "language_servers": {
245
+ "pylsp": {
246
+ "enable_flake8": false,
247
+ "enable_mypy": true,
248
+ "enable_pydocstyle": false,
249
+ "enable_pyflakes": false,
250
+ "enable_pylint": false,
251
+ "enable_ruff": true,
252
+ "enabled": false,
253
+ },
254
+ },
255
+ "lint": {
256
+ "ignore": [],
257
+ "select": [],
258
+ },
259
+ "mcp": {
260
+ "mcpServers": {},
261
+ "presets": [],
262
+ },
173
263
  "package_management": {
174
264
  "manager": "pip",
175
265
  },
176
266
  "runtime": {
177
267
  "auto_instantiate": true,
178
268
  "auto_reload": "off",
269
+ "cache_cells": false,
179
270
  "default_auto_download": [],
180
271
  "default_sql_output": "auto",
181
272
  "on_cell_change": "autorun",
273
+ "pin_modules": true,
274
+ "pythonpath": [],
182
275
  "reactive_tests": true,
276
+ "serve_cached_sessions_in_apps": false,
183
277
  "show_tracebacks": false,
184
278
  "watcher_on_save": "lazy",
185
279
  },
@@ -188,7 +282,23 @@ test("default UserConfig - one level", () => {
188
282
  "autosave_delay": 1000,
189
283
  "format_on_save": false,
190
284
  },
191
- "server": {},
285
+ "server": {
286
+ "disable_file_downloads": false,
287
+ "session_secret": null,
288
+ },
289
+ "sharing": null,
290
+ "signing": {
291
+ "private_key_path": null,
292
+ "trusted_signers": {},
293
+ },
294
+ "snippets": {
295
+ "custom_paths": [],
296
+ "include_default_snippets": true,
297
+ },
298
+ "venv": {
299
+ "path": null,
300
+ "writable": false,
301
+ },
192
302
  }
193
303
  `);
194
304
 
@@ -230,7 +340,7 @@ test("UserConfig with file browser folders", () => {
230
340
 
231
341
  expect(config.file_browser?.folders).toEqual([
232
342
  { path: "/data", name: "Data" },
233
- { path: "/shared" },
343
+ { path: "/shared", name: null },
234
344
  ]);
235
345
  });
236
346
 
@@ -63,9 +63,9 @@ const AiConfigSchema = z
63
63
  .loose();
64
64
 
65
65
  const AiModelsSchema = z.object({
66
- chat_model: z.string().nullish(),
67
- edit_model: z.string().nullish(),
68
- autocomplete_model: z.string().nullish(),
66
+ chat_model: z.string().nullish().prefault(null),
67
+ edit_model: z.string().nullish().prefault(null),
68
+ autocomplete_model: z.string().nullish().prefault(null),
69
69
  displayed_models: z.array(z.string()).default([]),
70
70
  custom_models: z.array(z.string()).default([]),
71
71
  });
@@ -137,6 +137,10 @@ export const UserConfigSchema = z
137
137
  .array(z.enum(AUTO_DOWNLOAD_FORMATS))
138
138
  .prefault([]),
139
139
  show_tracebacks: z.boolean().prefault(false),
140
+ pythonpath: z.array(z.string()).prefault([]),
141
+ cache_cells: z.boolean().prefault(false),
142
+ pin_modules: z.boolean().prefault(true),
143
+ serve_cached_sessions_in_apps: z.boolean().prefault(false),
140
144
  })
141
145
  .prefault({}),
142
146
  display: z
@@ -170,7 +174,7 @@ export const UserConfigSchema = z
170
174
  .looseObject({
171
175
  enabled: z.boolean().prefault(true),
172
176
  rules: z.string().prefault(""),
173
- max_tokens: z.number().int().positive().nullable().optional(),
177
+ max_tokens: z.number().int().positive().nullable().prefault(null),
174
178
  mode: z
175
179
  .enum(COPILOT_MODES)
176
180
  .transform((mode) => (mode === "manual" ? "ask" : mode))
@@ -205,6 +209,10 @@ export const UserConfigSchema = z
205
209
  experimental: z
206
210
  .looseObject({
207
211
  markdown: z.boolean().optional(),
212
+ isolate_apps: z.boolean().prefault(false),
213
+ debugger: z.boolean().prefault(false),
214
+ line_timing: z.boolean().prefault(false),
215
+ execution_type: z.enum(["relaxed", "strict"]).prefault("relaxed"),
208
216
  // Add new experimental features here
209
217
  })
210
218
  // Pass through so that we don't remove any extra keys that the user has added.
@@ -213,15 +221,36 @@ export const UserConfigSchema = z
213
221
  .looseObject({
214
222
  skip_update_check: z.boolean().optional(),
215
223
  session_cookie_secure: z.boolean().optional(),
216
- session_secret: z.string().optional(),
217
- disable_file_downloads: z.boolean().optional(),
224
+ session_secret: z.string().nullish().prefault(null),
225
+ disable_file_downloads: z.boolean().prefault(false),
218
226
  transport: z.enum(["websocket", "sse"]).optional(),
219
227
  })
220
228
  .prefault(() => ({})),
229
+ language_servers: z
230
+ .looseObject({
231
+ pylsp: z
232
+ .looseObject({
233
+ enabled: z.boolean().prefault(false),
234
+ enable_mypy: z.boolean().prefault(true),
235
+ enable_ruff: z.boolean().prefault(true),
236
+ enable_flake8: z.boolean().prefault(false),
237
+ enable_pydocstyle: z.boolean().prefault(false),
238
+ enable_pylint: z.boolean().prefault(false),
239
+ enable_pyflakes: z.boolean().prefault(false),
240
+ })
241
+ .prefault({}),
242
+ })
243
+ .prefault({}),
244
+ snippets: z
245
+ .looseObject({
246
+ custom_paths: z.array(z.string()).prefault([]),
247
+ include_default_snippets: z.boolean().prefault(true),
248
+ })
249
+ .prefault({}),
221
250
  diagnostics: z
222
251
  .looseObject({
223
252
  enabled: z.boolean().optional(),
224
- sql_linter: z.boolean().optional(),
253
+ sql_linter: z.boolean().prefault(true),
225
254
  })
226
255
  .prefault(() => ({})),
227
256
  file_browser: z
@@ -230,23 +259,63 @@ export const UserConfigSchema = z
230
259
  .array(
231
260
  z.object({
232
261
  path: z.string(),
233
- name: z.string().optional(),
262
+ name: z.string().nullish().prefault(null),
234
263
  }),
235
264
  )
236
- .optional(),
265
+ .prefault([]),
237
266
  })
238
- .optional()
239
- .prefault({}),
267
+ .nullish()
268
+ .prefault(null),
240
269
  sharing: z
241
270
  .looseObject({
242
271
  html: z.boolean().optional(),
243
272
  wasm: z.boolean().optional(),
244
273
  molab: z.boolean().optional(),
245
274
  })
246
- .optional(),
275
+ .nullish()
276
+ .prefault(null),
277
+ lint: z
278
+ .looseObject({
279
+ select: z.array(z.string()).prefault([]),
280
+ ignore: z.array(z.string()).prefault([]),
281
+ })
282
+ .prefault({}),
283
+ datasources: z
284
+ .looseObject({
285
+ auto_discover_schemas: z
286
+ .union([z.boolean(), z.literal("auto")])
287
+ .optional(),
288
+ auto_discover_tables: z
289
+ .union([z.boolean(), z.literal("auto")])
290
+ .optional(),
291
+ auto_discover_columns: z
292
+ .union([z.boolean(), z.literal("auto")])
293
+ .optional(),
294
+ })
295
+ .prefault({}),
296
+ venv: z
297
+ .looseObject({
298
+ path: z.string().nullable().prefault(null),
299
+ writable: z.boolean().prefault(false),
300
+ })
301
+ .prefault({}),
302
+ cache: z
303
+ .looseObject({
304
+ verification: z.enum(["off", "on", "strict"]).prefault("off"),
305
+ store: z.unknown().prefault(null),
306
+ loader: z.string().prefault("lazy"),
307
+ })
308
+ .prefault({}),
309
+ signing: z
310
+ .looseObject({
311
+ trusted_signers: z.record(z.string(), z.string()).prefault({}),
312
+ private_key_path: z.string().nullable().prefault(null),
313
+ })
314
+ .prefault({}),
247
315
  mcp: z
248
316
  .looseObject({
249
- presets: z.array(z.enum(["marimo", "context7"])).optional(),
317
+ presets: z.array(z.enum(["marimo", "context7"])).prefault([]),
318
+ mcpServers: z.record(z.string(), z.unknown()).prefault({}),
250
319
  })
251
320
  .optional()
252
321
  .prefault({}),
@@ -260,12 +329,20 @@ export const UserConfigSchema = z
260
329
  runtime: {},
261
330
  display: {},
262
331
  diagnostics: {},
263
- file_browser: {},
332
+ language_servers: {},
333
+ snippets: {},
334
+ file_browser: null,
335
+ sharing: null,
264
336
  experimental: {},
265
337
  server: {},
266
338
  ai: {},
267
339
  package_management: {},
268
340
  mcp: {},
341
+ cache: {},
342
+ venv: {},
343
+ signing: {},
344
+ lint: {},
345
+ datasources: {},
269
346
  }));
270
347
  export type UserConfig = MarimoConfig;
271
348
  export type SaveConfig = UserConfig["save"];
@@ -369,12 +446,20 @@ export function defaultUserConfig(): UserConfig {
369
446
  runtime: {},
370
447
  display: {},
371
448
  diagnostics: {},
372
- file_browser: {},
449
+ language_servers: {},
450
+ snippets: {},
451
+ file_browser: null,
452
+ sharing: null,
373
453
  experimental: {},
374
454
  server: {},
375
455
  ai: {},
376
456
  package_management: {},
377
457
  mcp: {},
458
+ cache: {},
459
+ venv: {},
460
+ signing: {},
461
+ lint: {},
462
+ datasources: {},
378
463
  };
379
464
  return UserConfigSchema.parse(defaultConfig) as UserConfig;
380
465
  }
@@ -1,5 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
+ import { defaultUserConfig } from "@/core/config/config-schema";
4
+
3
5
  import { history, undo } from "@codemirror/commands";
4
6
  import { MySQL, PostgreSQL } from "@codemirror/lang-sql";
5
7
  import { language as activeLanguage } from "@codemirror/language";
@@ -44,6 +46,7 @@ afterEach(() => {
44
46
  });
45
47
 
46
48
  const completionConfig = {
49
+ ...defaultUserConfig().completion,
47
50
  activate_on_typing: true,
48
51
  signature_hint_on_typing: false,
49
52
  copilot: false,
@@ -57,7 +60,7 @@ function languages(id: CellId) {
57
60
  completionConfig,
58
61
  hotkeys: new OverridingHotkeyProvider({}),
59
62
  placeholderType: "marimo-import",
60
- lspConfig: {},
63
+ lspConfig: { ...defaultUserConfig().language_servers },
61
64
  } as const;
62
65
  return [
63
66
  cellActionsState.of({
@@ -103,7 +106,10 @@ function languages(id: CellId) {
103
106
  saveNotebook: vi.fn(),
104
107
  }),
105
108
  adaptiveLanguageConfiguration(options),
106
- cellConfigExtension({ ...options, diagnosticsConfig: {} }),
109
+ cellConfigExtension({
110
+ ...options,
111
+ diagnosticsConfig: { ...defaultUserConfig().diagnostics },
112
+ }),
107
113
  ];
108
114
  }
109
115
 
@@ -1,5 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
+ import { defaultUserConfig } from "@/core/config/config-schema";
4
+
3
5
  import { python } from "@codemirror/lang-python";
4
6
  import { EditorState, type Extension } from "@codemirror/state";
5
7
  import { EditorView } from "@codemirror/view";
@@ -62,6 +64,7 @@ const PrimaryEditor = ({ theme }: Pick<CodeMirrorSetupOpts, "theme">) => {
62
64
  () =>
63
65
  basicBundle({
64
66
  completionConfig: {
67
+ ...defaultUserConfig().completion,
65
68
  activate_on_typing: false,
66
69
  copilot: false,
67
70
  signature_hint_on_typing: false,
@@ -90,6 +93,7 @@ export const DefaultPython: Story = {
90
93
  extensions={[
91
94
  python(),
92
95
  copilotBundle({
96
+ ...defaultUserConfig().completion,
93
97
  activate_on_typing: true,
94
98
  signature_hint_on_typing: false,
95
99
  copilot: false,
@@ -1,5 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
+ import { defaultUserConfig } from "@/core/config/config-schema";
4
+
3
5
  import { python } from "@codemirror/lang-python";
4
6
  import { EditorState, type Extension } from "@codemirror/state";
5
7
  import { EditorView } from "@codemirror/view";
@@ -16,6 +18,7 @@ import { store } from "../core/state/jotai";
16
18
  // Partial config for storybook demo
17
19
  const demoConfig: Partial<CodeMirrorSetupOpts> = {
18
20
  completionConfig: {
21
+ ...defaultUserConfig().completion,
19
22
  activate_on_typing: false,
20
23
  signature_hint_on_typing: false,
21
24
  copilot: false,
@@ -24,7 +27,7 @@ const demoConfig: Partial<CodeMirrorSetupOpts> = {
24
27
  hotkeys: new OverridingHotkeyProvider({}),
25
28
  showPlaceholder: false,
26
29
  enableAI: false,
27
- keymapConfig: { preset: "default" },
30
+ keymapConfig: { ...defaultUserConfig().keymap, preset: "default" },
28
31
  };
29
32
 
30
33
  const meta: Meta = {
@@ -1 +0,0 @@
1
- import{t as e}from"./worker-DVG30pr3.js";var t=/* @__PURE__ */ e(((e,t)=>{t.exports={}}));export default t();