Custom
Implement a field with a custom UI. Extends Base.
Interactive Demo
Example
Hello, world
import { FieldLabel } from "@measured/puck";
 
const config = {
  components: {
    Example: {
      fields: {
        title: {
          type: "custom",
          render: ({ name, onChange, value }) => (
            <input
              defaultValue={value}
              name={name}
              onChange={(e) => onChange(e.currentTarget.value)}
            />
          ),
        },
      },
      render: ({ title }) => {
        return <p>{title}</p>;
      },
    },
  },
};Params
| Param | Example | Type | Status | 
|---|---|---|---|
| type | type: "custom" | ”custom” | Required | 
| render() | render: () => <input /> | Function | Required | 
Required params
type
The type of the field. Must be "custom" for Custom fields.
const config = {
  components: {
    Example: {
      fields: {
        title: {
          type: "custom",
          render: ({ name, onChange, value }) => (
            <input
              defaultValue={value}
              name={name}
              onChange={(e) => onChange(e.currentTarget.value)}
            />
          ),
        },
      },
      // ...
    },
  },
};render(params)
Render the custom field.
import { FieldLabel } from "@measured/puck";
 
const config = {
  components: {
    Example: {
      fields: {
        title: {
          type: "custom",
          render: ({ name, onChange, value }) => (
            <input
              defaultValue={value}
              name={name}
              onChange={(e) => onChange(e.currentTarget.value)}
            />
          ),
        },
      },
      // ...
    },
  },
};params
| Param | Example | Type | 
|---|---|---|
| field | { type: "custom" } | Object | 
| id | id | String | 
| name | "title" | String | 
| onChange(value, ui) | onChange("Hello, world") | Function | 
| value | "Hello, world" | Any | 
onChange(value, [ui])
Set the value of the field and optionally update the Puck UI state.
| Param | Example | Type | Status | 
|---|---|---|---|
| value | "Hello, world" | Any | Required | 
| ui | {leftSideBarVisible: false} | UiState |