/* Copyright 2026 Marimo. All rights reserved. */ import type { ChangeEvent } from "react"; import type { FieldPath, UseFormReturn } from "react-hook-form"; import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { NativeSelect } from "@/components/ui/native-select"; import { NumberField } from "@/components/ui/number-field"; import type { UserConfig } from "@/core/config/config-schema"; import { Checkbox } from "../ui/checkbox"; import { formItemClasses, SettingGroup, SQL_OUTPUT_SELECT_OPTIONS, } from "./common"; import { IsOverridden } from "./is-overridden"; const DISCOVERY_OPTIONS = ["auto", "true", "false"]; export const DataForm = ({ form, config, onSubmit, }: { form: UseFormReturn; config: UserConfig; onSubmit: (values: UserConfig) => void; }) => { const renderDiscoveryForm = (name: FieldPath, label: string) => { return ( { const onChange = (e: ChangeEvent) => { const value = e.target.value; field.onChange( value === "true" ? true : value === "false" ? false : value, ); }; return ( {label} {DISCOVERY_OPTIONS.map((option) => ( ))} ); }} /> ); }; return ( <> (
Dataframe viewer field.onChange(e.target.value)} value={field.value} disabled={field.disabled} className="inline-flex mr-2" > {["rich", "plain"].map((option) => ( ))} Whether to use marimo's rich dataframe viewer or a plain HTML table. This requires restarting your notebook to take effect.
)} /> (
Default table page size { field.onChange(value); if (!Number.isNaN(value)) { onSubmit(form.getValues()); } }} /> The default number of rows displayed in dataframes and SQL results.
)} /> (
Default table max columns { field.onChange(value); if (!Number.isNaN(value)) { onSubmit(form.getValues()); } }} /> The default maximum number of columns displayed in dataframes and SQL results.
)} />
Database Schema Discovery
Whether database schemas, tables, and columns are automatically discovered.
Can be expensive for large databases. {" "} Use 'auto' to determine introspection based on the{" "} database .
{renderDiscoveryForm("datasources.auto_discover_schemas", "Schemas")} {renderDiscoveryForm("datasources.auto_discover_tables", "Tables")} {renderDiscoveryForm("datasources.auto_discover_columns", "Columns")}
(
SQL Linter Better linting and autocompletions for SQL cells.
)} /> (
Default SQL output field.onChange(e.target.value)} value={field.value} disabled={field.disabled} className="inline-flex mr-2" > {SQL_OUTPUT_SELECT_OPTIONS.map((option) => ( ))} The default SQL output type for new notebooks; overridden by "sql_output" in the application config.
)} />
); };