Skip to main content

Layout Primitives

The five components that FormBuilder composes for its layout. Use these directly to build a custom builder with a different arrangement.

FormContainer

The drag-and-drop canvas where form items are placed. Uses useDroppable for the root canvas target and SortableContext for item reordering.

<FormContainer
formItems={formItems}
onDeleteFormItem={({ id }) => {}}
onEditFormItem={({ id }) => {}}
/>
PropTypeDescription
formItemsFormItem[]Items to render on the canvas
onDeleteFormItem(payload: { id: string }) => voidCalled when delete action clicked
onEditFormItem(payload: { id: string }) => voidCalled when edit action clicked
activeToolboxDragKeystring | nullCurrently dragged toolbox key — enables drop indicator
dropInsertIndexnumber | nullTarget insertion index for the drop indicator

Must be rendered inside a DndContext. Each form item uses useSortable for reordering.


ToolBox

The component palette — shows available field types that can be dragged onto the canvas. Each item uses useDraggable.

<ToolBox
formComponents={config.components}
previewForm={isPreview}
setPreviewForm={setPreview}
activeDragKey={activeId}
/>
PropTypeDescription
formComponentsFormComponentRegistration[]Components to display in the palette
previewFormbooleanWhether preview mode is active
setPreviewForm(preview: boolean) => voidToggle preview mode
activeDragKeystring | nullCurrently dragged component key for dimming

Must be rendered inside a DndContext.


EditorToolBox

The editor sidebar panel. Shows when a form item is selected for editing.

<EditorToolBox
currentEditor={currentEditor}
onChangeFormItemSettings={({ id, settings }) => {}}
onChangeFormItemOptions={({ id, options }) => {}}
onClose={() => setCurrentEditor(null)}
/>
PropTypeDescription
currentEditorFormItemThe form item being edited
onChangeFormItemSettings(payload) => voidCalled when a setting changes
onChangeFormItemOptions(payload) => voidCalled when options change
onClose() => voidCalled when the editor is dismissed

EditorContainer

Renders the actual editor fields for a form item. Delegates to either a custom editor component or EditorCompiler for declarative editor objects.

<EditorContainer
formItemId={id}
editor={editor}
settings={settings}
options={options}
onChangeFormItemSettings={({ id, settings }) => {}}
onChangeFormItemOptions={({ id, options }) => {}}
/>
PropTypeDescription
formItemIdstringID of the item being edited
editorEditorDefinitionComponent or declarative object
settingsFormComponentSettingsCurrent settings
optionsFormComponentOption[]Current options
onChangeFormItemSettings(payload) => voidSettings change callback
onChangeFormItemOptions(payload) => voidOptions change callback

FormComponentWrapper

Wraps a single form item on the canvas with edit/delete action buttons. Used internally by FormContainer.

<FormComponentWrapper id={item.id} onEdit={handleEdit} onDelete={handleDelete}>
<MyComponent {...props} />
</FormComponentWrapper>
PropTypeDescription
idstringForm item ID
onEdit(payload: { id: string }) => voidEdit callback
onDelete(payload: { id: string }) => voidDelete callback
childrenReactNodeThe display component