Skip to content

Text Input

A free text entry field. Stores a .string value. Fires action on submit (return key).

Type

"textInput"

Relevant Fields

Inherits all Control Definition. Key fields:

Field Type Default Description
placeholder string — Placeholder text when empty
label string — Display label
icon string — SF Symbol shown in the field
defaultValue string — Initial text
style string "default" "default", "search", "multiline"
tint string "#667eea" Accent color
sendButton bool false Turn the field into a growing composer with a Send button (Return = newline)
minLines int 1 Composer starting line count
maxLines int 6 Composer max lines before it scrolls internally
autocorrect bool false Default autocorrect/caps; off ⇒ ASCII keyboard (terminal-friendly)
autocorrectToggle bool false Show the inline Aa toggle
keyboard string — "ascii", "default", "url", "email", "numbers"
clearOnSubmit bool false Clear the field after the return-key submit (for entry forms where the typed value shouldn't linger)
hideBackground bool false Remove glass background
hideLabel bool false Hide the header label

Styles

"default"

Standard single-line text field with rounded background.

Search-style field with magnifying glass icon and clear button.

"multiline"

Expands vertically for multi-line text entry.

Composer & keyboard

Set sendButton: true to turn the field into a growing composer: it grows from minLines up to maxLines then scrolls inside, Return inserts a newline, and a Send button submits. Ideal for chat or command entry.

Keyboard behaviour, tuned for command entry:

  • autocorrect defaults to false — autocorrect/autocapitalization off with an ASCII keyboard, so typed commands aren't "corrected." Set true for prose. keyboard overrides the keyboard type explicitly.
  • autocorrectToggle shows an inline Aa button that flips autocorrect at runtime and reconfigures the live keyboard immediately (no refocus needed). It also appears on the above-keyboard bar.
  • An above-keyboard Hide button lets you dismiss the keyboard to reach the controls/tabs underneath it.

Examples

Device name field

{
  "type": "textInput",
  "id": "device-name",
  "position": [1, 0],
  "span": [1, 2],
  "placeholder": "Device name",
  "defaultValue": "my-device",
  "icon": "tag",
  "action": { "method": "meshsocket", "mode": "request", "event": "identify", "payload": { "name": "{{value}}" } }
}

Command composer

{
  "type": "textInput",
  "id": "pane-input",
  "position": [7, 0],
  "span": [1, 4],
  "placeholder": "type a command…",
  "icon": "chevron.right",
  "sendButton": true,
  "autocorrectToggle": true,
  "autocorrect": false,
  "maxLines": 6,
  "action": { "method": "meshsocket", "mode": "broadcast", "event": "broadcast", "payload": { "msg_type": "command", "text": "{{value}}" } }
}

Behavior

  • Default field: the action fires when the user presses return/submit
  • Composer (sendButton: true): Send submits and Return inserts a newline
  • The {{value}} placeholder is replaced with the current text content