Form Components
Documentation for all form components in the Drona Workflow Engine system. Components are used in JSON schema files by specifying the appropriate type field.
Common Properties
All form components share a set of standard properties that control basic behavior, display, and validation:
Required Properties
type(string) - Determines which component to render (e.g., "text", "select", "checkbox")name(string) - Field identifier used for form submission and value storage
Standard Properties
label(string, optional) - Display label for the fieldhelp(string, optional) - Help text displayed below the fieldvalue(any, optional) - Default or initial value for the field
Layout Properties
labelOnTop(boolean, optional) - When true, positions label above the input instead of beside it
Conditional Display
isVisible(boolean, optional) - Controls whether the field is displayed (evaluated before rendering)condition(object, optional) - Conditional expression object that determines field visibility based on other field values
Example with Common Properties
{
"type": "text",
"name": "username",
"label": "User Name",
"value": "john_doe",
"help": "Enter your username",
"labelOnTop": true,
"isVisible": true
}
Component Reference
Each component below supports all common properties listed above, plus component-specific properties.
AutocompleteSelect
A dynamic search-based dropdown component that fetches options as you type. Uses a retriever script to dynamically search for and display matching options based on user input.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldretriever - Path to the script that fetches search results(string) -placeholder(string, optional) - Placeholder text shown in the input fieldvalue(object, optional) - Default/initial selected option (object with value and label)help(string, optional) - Help text displayed below the inputshowAddMore=false(boolean, optional) - Whether to show an add more button
Example
// Dynamic search dropdown
{
"type": "autocompleteSelect",
"name": "institution",
"label": "AutocompleteSelect",
"retriever": "retrievers/institution_search.sh",
"placeholder": "Search for an institution...",
"help": "Type at least 2 characters to search for institutions"
}
/
Source: src/schemaRendering/schemaElements/AutocompleteSelect.js
Checkbox
A checkbox input component that returns a specified value when checked and an empty string when unchecked. The checkbox value is customizable and defaults to "Yes" if not specified.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldvalue="Yes"(string, optional) - Value to return when the checkbox is checked (defaults to "Yes")help(string, optional) - Help text displayed below the input
Example
// Basic checkbox input
{
"type": "checkbox",
"name": "agreeToTerms",
"label": "Checkbox",
"value": "Yes",
"help": "Toggle input that returns a value when checked"
}
/
Source: src/schemaRendering/schemaElements/Checkbox.js
CheckboxGroup
A checkbox group component that allows users to select multiple options from a list of choices. Displays options horizontally with their labels.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldoptions - Array of option objects, each with value and label properties(Array) -value(Array, optional) - Default/initial selected valueshelp(string, optional) - Help text displayed below the input
Example
// Checkbox group with multiple options
{
"type": "checkboxGroup",
"name": "features",
"label": "CheckboxGroup",
"options": [
{ "value": "analytics", "label": "Analytics" },
{ "value": "reporting", "label": "Reporting" },
{ "value": "automation", "label": "Automation" }
],
"value": ["analytics", "reporting"],
"help": "Select one or more options"
}
/
Source: src/schemaRendering/schemaElements/CheckboxGroup.js
CollapsibleRowContainer
A collapsible container component that organizes form fields in a horizontal row. Features a header with a toggle button to show/hide the content, making complex forms more manageable. Each child element is rendered by the FieldRenderer component in a 100% width layout.
Properties
elements - Object of field configuration objects to be rendered in the container(Object) -title="Collapsible Row Container"(string, optional) - Title displayed in the container header
Example
// Collapsible container with multiple form elements
{
"type": "collapsibleRowContainer",
"title": "Personal Information",
"elements": {
"firstName": {
"type": "text",
"name": "firstName",
"label": "First Name",
"placeholder": "Enter first name"
},
"lastName": {
"type": "text",
"name": "lastName",
"label": "Last Name",
"placeholder": "Enter last name"
},
"email": {
"type": "text",
"name": "email",
"label": "Email Address",
"placeholder": "Enter email address"
}
}
}
/
Source: src/schemaRendering/schemaElements/CollapsibleContainer.js
DragDropContainer
A visual drag-and-drop form builder component that allows users to construct forms by dragging elements from a palette and dropping them into a workspace. Supports reordering elements, editing properties, and removing elements. Built with @dnd-kit for smooth drag-and-drop interactions.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldtitle="Drag & Drop Builder"(string, optional) - Title displayed in the builder headeravailableElements=(Array, optional) - ] - Array of element type names available in the paletteelementTemplates={}(Object, optional) - Configuration templates for each element type, with label, description, and configallowEdit=true(boolean, optional) - Whether users can edit element properties after droppingelements={}(Object|Array, optional) - Initial elements to display in the drop zonevalue(string, optional) - JSON string of initial elements (alternative to elements prop)help(string, optional) - Help text displayed below the builder
Example
// Basic drag-drop builder with text and number elements
{
"type": "dragDropContainer",
"name": "formBuilder",
"label": "Form Builder",
"title": "Drag & Drop Form Builder",
"availableElements": ["text", "number", "select", "checkbox"],
"elementTemplates": {
"text": {
"label": "Text Input",
"description": "Single line text field",
"config": { "type": "text", "placeholder": "Enter text" }
},
"number": {
"label": "Number Input",
"description": "Numeric input field",
"config": { "type": "number", "min": 0 }
}
},
"allowEdit": true,
"help": "Drag elements from the palette to build your form"
}
/
Source: src/schemaRendering/schemaElements/DragDropContainer.js
DynamicCheckboxGroup
A checkbox group that dynamically loads its options from a retriever script. Allows multiple selections and automatically refreshes options when dependent form values change. Warns when previously selected options become unavailable and removes invalid selections on user interaction.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldretriever - Path to the script that retrieves checkbox options(string) -retrieverParams(Object, optional) - Parameters passed to the retriever script, values with $ prefix are replaced with form valuesvalue(Array, optional) - Default/initial selected values (array of value strings)options(Array, optional) - Initial options array, overridden by retriever resultshelp(string, optional) - Help text displayed below the checkboxes
Examples
Example 1
// Basic dynamic checkbox group
{
"type": "dynamicCheckboxGroup",
"name": "selectedModules",
"label": "Available Modules",
"retriever": "retrievers/modules_list.sh",
"value": ["module1", "module2"],
"help": "Select one or more modules (options loaded dynamically)"
}
Example 2
// Dynamic checkbox group with parameters from form values
{
"type": "dynamicCheckboxGroup",
"name": "permissions",
"label": "User Permissions",
"retriever": "retrievers/permissions_by_role.sh",
"retrieverParams": { "role": "$userRole", "environment": "production" },
"help": "Permissions update based on selected role"
}
/
Source: src/schemaRendering/schemaElements/DynamicCheckboxGroup.js
DynamicRadioGroup
A radio button group that dynamically loads its options from a retriever script. Allows single selection and automatically refreshes options when dependent form values change. Warns when the previously selected option becomes unavailable after options refresh.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldretriever - Path to the script that retrieves radio button options(string) -retrieverParams(Object, optional) - Parameters passed to the retriever script, values with $ prefix are replaced with form valuesvalue(string, optional) - Default/initial selected valueoptions(Array, optional) - Initial options array, overridden by retriever resultshelp(string, optional) - Help text displayed below the radio buttons
Examples
Example 1
// Basic dynamic radio group
{
"type": "dynamicRadioGroup",
"name": "cluster",
"label": "Available Clusters",
"retriever": "retrievers/clusters_list.sh",
"value": "cluster1",
"help": "Select a cluster (options loaded dynamically)"
}
Example 2
// Dynamic radio group with parameters from form values
{
"type": "dynamicRadioGroup",
"name": "nodeType",
"label": "Node Type",
"retriever": "retrievers/node_types_by_cluster.sh",
"retrieverParams": { "cluster": "$cluster", "availability": "high" },
"help": "Available node types update based on selected cluster"
}
/
Source: src/schemaRendering/schemaElements/DynamicRadioGroup.js
DynamicSelect
A dropdown select component that dynamically loads its options from a retriever script. Handles loading states, unavailable options, and provides visual feedback when selected values become invalid. Supports dynamic parameters from form values.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldretriever - Path to the script that retrieves the select options(string) -retrieverParams(Object, optional) - Parameters passed to the script as environment variables, values with $ prefix will be replaced with form valuesvalue(Object, optional) - Default/initial selected option (object with value and label)options(Array, optional) - Initial options array, may be overridden by retrieverhelp(string, optional) - Help text displayed below the inputshowAddMore=false(boolean, optional) - Whether to show an add more button
Examples
Example 1
// Dynamic select with options loaded from a retriever
{
"type": "dynamicSelect",
"name": "computeNode",
"label": "DynamicSelect",
"retriever": "retrievers/compute_nodes.sh",
"help": "Select a compute node (options loaded dynamically)"
}
Example 2
// Dynamic select with parameters from form values
{
"type": "dynamicSelect",
"name": "serverList",
"label": "Available Servers",
"retriever": "retrievers/servers_by_region.sh",
"retrieverParams": { "region": "$selectedRegion", "type": "production" },
"help": "Servers will update based on selected region"
}
/
Source: src/schemaRendering/schemaElements/DynamicSelect.js
Hidden
Executes dynamic scripts without any visual output. Takes no space and displays nothing, but can execute retriever scripts in the background for side effects.
Properties
name - Component name (required but not visible)(string) -value(string, optional) - Static value (used when no retriever is specified)retriever(string, optional) - Path to the script file to execute (for dynamic execution)retrieverParams(Object, optional) - Parameters passed to the script as environment variablesrefreshInterval(number, optional) - Auto-execution interval in secondssetError(function, optional) - Function to handle errors during script execution
Examples
Example 1
// Execute a script when form values change
{
"type": "hidden",
"name": "backgroundProcess",
"retriever": "retrievers/update_location.sh",
"retrieverParams": { "jobName": "$name" },
"refreshInterval": 5
}
Example 2
// Static value execution (no dynamic script)
{
"type": "hidden",
"name": "staticAction",
"value": "some_static_value"
}
/
Source: src/schemaRendering/schemaElements/Hidden.js
JobNameLocation
A composite form component that combines job name input and location picker in a single row layout. Manages both the job name (text input) and working directory location (file picker) with synchronized state. Commonly used in HPC job submission forms.
Properties
showName=true(boolean, optional) - Whether to display the job name input fieldshowLocation=true(boolean, optional) - Whether to display the location pickerdisableJobNameChange=false(boolean, optional) - Makes the job name field read-onlydisableJobLocationChange=false(boolean, optional) - Makes the location picker read-onlycustomJobName(string, optional) - Pre-filled job name valuecustomJobLocation(string, optional) - Pre-filled location pathlabel(string, optional) - Display label for the entire componentpickerLabel="Change"(string, optional) - Label for the location picker buttonhelp(string, optional) - Help text displayed below the componentlabelOnTop=true(boolean, optional) - Whether to position label above the fields
Examples
Example 1
// Basic job name and location picker
{
"type": "jobNameLocation",
"label": "Job Configuration",
"showName": true,
"showLocation": true,
"pickerLabel": "Browse",
"help": "Enter job name and select working directory"
}
Example 2
// With custom defaults and disabled fields
{
"type": "jobNameLocation",
"label": "Job Settings",
"customJobName": "MyJob",
"customJobLocation": "$HOME/jobs",
"disableJobNameChange": true,
"showLocation": true,
"help": "Job name is fixed, but you can change the location"
}
/
Source: src/schemaRendering/schemaElements/JobNameLocation.js
Module
A module selection component that allows users to search and select software modules from different toolchains. Features autocomplete suggestions from a server, toolchain selection, and visual representation of selected modules as removable badges.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldvalue(string, optional) - Default/initial value as space-separated list of modulestoolchains - Array of toolchain options, each with value and label properties(Array) -toolchainName="toolchain"(string, optional) - Name for the toolchain select inputhelp(string, optional) - Help text displayed below the input
Example
// Module selection component with multiple toolchains
{
"type": "module",
"name": "moduleList",
"label": "Module",
"value": "gcc/9.3.0 openmpi/4.0.5",
"toolchains": [
{ "value": "modules", "label": "Modules" },
{ "value": "lmod-gcc", "label": "GCC Modules" },
{ "value": "lmod-intel", "label": "Intel Modules" }
],
"toolchainName": "toolchain",
"help": "Search and select software modules for your environment"
}
/
Source: src/schemaRendering/schemaElements/Module.js
Number
A numeric input field component for collecting numerical values. Supports minimum, maximum, and step value constraints.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldvalue(number, optional) - Default/initial value for the inputmin(number, optional) - Minimum allowed valuemax(number, optional) - Maximum allowed valuestep=1(number, optional) - Step value for incrementing/decrementingplaceholder(string, optional) - Placeholder text shown when the field is emptyhelp(string, optional) - Help text displayed below the input
Example
// Basic number input
{
"type": "number",
"name": "quantity",
"label": "Number",
"value": 5,
"min": 0,
"max": 100,
"step": 1,
"placeholder": "Enter a number",
"help": "Numeric input with min/max constraints"
}
/
Source: src/schemaRendering/schemaElements/Number.js
Picker
A file and directory picker component that allows users to browse and select files or directories from both local and remote locations. Features a modal browser interface for navigating directory structures.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldlocalLabel - Label for the local file browser button(string) -remoteLabel(string, optional) - Label for remote file upload button (if omitted, remote upload option isn't shown)showFiles="false"(string|boolean, optional) - Whether to show files in directory listings ("true" or "false")defaultLocation(string, optional) - Default path to show in the input fielddefaultPaths(Object, optional) - Custom paths to show as quick access buttons (key:label, value:path)useHPCDefaultPaths=true(boolean, optional) - Whether to use system default pathshelp(string, optional) - Help text displayed below the input
Example
// File/directory picker with both local and remote options
{
"type": "picker",
"name": "outputLocation",
"label": "Picker",
"localLabel": "Browse Directories",
"remoteLabel": "Upload File",
"showFiles": "true",
"defaultLocation": "$HOME",
"defaultPaths": {
"HomeCustom": "$HOME"
},
"useHPCDefaultPaths": true,
"help": "Select a file or directory location"
}
/
Source: src/schemaRendering/schemaElements/Picker.js
RadioGroup
A radio button group component that allows users to select a single option from a list of choices. Displays options horizontally with their labels.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldoptions - Array of option objects, each with value and label properties(Array) -value(string, optional) - Default/initial selected valuehelp(string, optional) - Help text displayed below the input
Example
// Radio button group with multiple options
{
"type": "radioGroup",
"name": "priority",
"label": "RadioGroup",
"options": [
{ "value": "low", "label": "Low" },
{ "value": "medium", "label": "Medium" },
{ "value": "high", "label": "High" }
],
"value": "medium",
"help": "Select one option from multiple choices"
}
/
Source: src/schemaRendering/schemaElements/RadioGroup.js
RowContainer
A layout component that organizes form fields in a horizontal row. It wraps multiple form elements in a responsive grid layout, with each child element rendered by the FieldRenderer component in a column format.
Properties
elements - Array of field configuration objects to be rendered in the row(Array) -
Example
// Row with multiple text fields
{
"type": "rowContainer",
"elements": {
"element1": {
"type": "text",
"name": "element1",
"label": "rowContainer1",
"placeholder": "Enter text"
},
"element2": {
"type": "text",
"name": "element1",
"label": "rowContainer1",
"placeholder": "Enter text"
},
"element3": {
"type": "text",
"name": "element1",
"label": "rowContainer1",
"placeholder": "Enter text"
}
}
}
/
Source: src/schemaRendering/schemaElements/RowContainer.js
Select
A dropdown select component based on react-select that provides a customizable selection interface with support for styled options and an optional "add more" button.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldoptions - Array of option objects, each with value and label properties(Array) -value(Object, optional) - Default/initial selected option (object with value and label)help(string, optional) - Help text displayed below the inputshowAddMore=false(boolean, optional) - Whether to show an add more button
Example
// Basic dropdown select
{
"type": "select",
"name": "category",
"label": "Select",
"options": [
{ "value": "option1", "label": "Option 1" },
{ "value": "option2", "label": "Option 2" },
{ "value": "option3", "label": "Option 3" }
],
"value": { "value": "option1", "label": "Option 1" },
"help": "Select one option from the dropdown"
}
/
Source: src/schemaRendering/schemaElements/Select.js
StaticText
Displays static or dynamically fetched text content. Can show plain text or HTML content with options for dynamic content retrieval using script files, auto-refreshing, and manual refresh controls.
Properties
name - Input field name(string) -label(string, optional) - Display label for the fieldlabelOnTop=false(boolean, optional) - Whether to display label above the contenthelp(string, optional) - Help text displayed below the contentvalue(string, optional) - Static text content (used when isDynamic is false)isDynamic=false(boolean, optional) - Whether content should be fetched from a script retrieverretriever(string, optional) - Path to the script file that will generate dynamic contentretrieverParams(Object, optional) - Parameters passed to the script as environment variables, values with $ prefix will be replaced with form valuesallowHtml=false(boolean, optional) - Whether to render content as HTML using dangerouslySetInnerHTMLshowRefreshButton=false(boolean, optional) - Whether to show a manual refresh button for dynamic contentrefreshInterval(number, optional) - Auto-refresh interval in secondsisHeading=false(boolean, optional) - Whether to style the text as a heading with larger, bold fontsetError(function, optional) - Function to handle errors during content fetching
Examples
Example 1
// Basic static text
{
"type": "staticText",
"name": "infoText",
"label": "Information",
"value": "This is some static text",
"help": "Simple static text display"
}
Example 2
// Dynamic text that fetches from a script retriever
{
"type": "staticText",
"name": "dynamicContent",
"label": "Script Output",
"isDynamic": true,
"retriever": "retrievers/text_retriever.sh",
"retrieverParams": { "id": "$userId" },
"showRefreshButton": true
}
Example 3
// Dynamic HTML content with auto-refresh
{
"type": "staticText",
"name": "liveHtmlContent",
"label": "Server Status",
"isDynamic": true,
"retriever": "retrievers/server_status.sh",
"allowHtml": true,
"refreshInterval": 30
}
/
Source: src/schemaRendering/schemaElements/StaticText.js
Text
A standard text input field component for collecting single-line text input. Provides form control with label, help text, and placeholder support.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldvalue(string, optional) - Default/initial value for the inputplaceholder(string, optional) - Placeholder text shown when the field is emptyhelp(string, optional) - Help text displayed below the input
Example
// Basic text input
{
"type": "text",
"name": "userName",
"label": "Text",
"value": "defaultValue",
"placeholder": "Enter your text here",
"help": "Standard single-line text input field"
}
/
Source: src/schemaRendering/schemaElements/Text.js
TextArea
A multi-line text input field component for collecting longer text content. Provides an expandable text area with adjustable number of rows.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldvalue(string, optional) - Default/initial value for the inputrows=4(number, optional) - Number of visible text rowsplaceholder(string, optional) - Placeholder text shown when the field is emptyhelp(string, optional) - Help text displayed below the input
Example
// Basic textarea input
{
"type": "textarea",
"name": "description",
"label": "TextArea",
"value": "This is a default value with multiple lines of text.\nThis is the second line.",
"rows": 6,
"placeholder": "Enter multi-line text here",
"help": "Multi-line text input for longer content"
}
/
Source: src/schemaRendering/schemaElements/TextArea.js
Time
A time duration input component that allows users to specify time periods using separate days, hours, and minutes fields. The component internally converts these values to a combined "hours:minutes" format.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldvalue(string, optional) - Default/initial value in format "HH:MM" where HH includes days converted to hourshelp(string, optional) - Help text displayed below the input
Example
// Time duration input with separate day/hour/minute fields
{
"type": "time",
"name": "jobDuration",
"label": "Time",
"value": "36:30",
"help": "Specify a time duration in days, hours, and minutes"
}
/
Source: src/schemaRendering/schemaElements/Time.js
Unit
A compound input component that combines a numeric value with a unit selector. Useful for inputs like memory size (GB, MB), time duration (hours, minutes), or any quantity that requires both a number and unit.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldvalue(string, optional) - Default/initial value in format "numberunit" (e.g., "16GB")units - Array of unit options, each with value and label properties(Array) -help(string, optional) - Help text displayed below the input
Example
// Memory size input with unit selection
{
"type": "unit",
"name": "memorySize",
"label": "Unit",
"value": "16GB",
"units": [
{ "value": "MB", "label": "MB" },
{ "value": "GB", "label": "GB" },
{ "value": "TB", "label": "TB" }
],
"help": "Select a numeric value with units"
}
/
Source: src/schemaRendering/schemaElements/Unit.js
Uploader
A file and directory uploader component that allows users to select and upload individual files or entire directories. Displays a list of uploaded files and supports removal of files.
Properties
name - Input field name, used for form submission(string) -label(string, optional) - Display label for the fieldvalue(Array|string, optional) - Default/initial value, can be array of file objects or JSON stringmultiple=false(boolean, optional) - Whether multiple file selection is allowedacceptedFileTypes(Array, optional) - Array of MIME types or file extensions to accepthelp(string, optional) - Help text displayed below the input
Example
// File and directory uploader
{
"type": "uploader",
"name": "dataFiles",
"label": "Uploader",
"multiple": true,
"acceptedFileTypes": ["text/*", "application/json", ".csv"],
"help": "Upload files or directories with support for multiple file selection"
}
/
Source: src/schemaRendering/schemaElements/Uploader.js