Skip to main content

Text Input

Single-line or multi-line text entry control with label, icon, placeholder and focus handling; outputs the text as the user types.

The Text Input control renders an editable text field (or text area, or email/number/password/URL input, chosen by the type enum). Its main product is onTextChanged (display name 'Text'), a string output that updates continuously as the user types; the textChanged signal fires on every such change and onEnter fires when the user presses Enter. Text can also be written programmatically: the startValue (Text) input holds the field text, and the set signal applies it on demand. Optional label and icon sections, per-state styling and focus control (focus/blur signals, focusState output) are built in.

When to use it

Any free-text entry. Use type instead of separate nodes for email/number/password fields. For multi-line text set type to textArea. For choosing among fixed options use a Dropdown (net.noodl.controls.options) or Radio Button Group instead. The legacy Text Input type is superseded by this control.

At a glance

CategoryVisual
Type namenet.noodl.controls.textinput
Available inbrowser
SSR compatibilitysafe
Provided bynoodl-viewer-react

Inputs

Values

NameTypeDefaultDescription
alignXEnum (left, center, right)Horizontal alignment of this element within the space its parent gives it
alignYEnum (top, center, bottom)Vertical alignment of this element within the space its parent gives it
backgroundColorColortransparentFill colour of the field
blockTouchBooleanStops every pointer event that lands on this control from reaching the nodes it sits inside. Blunt: it takes hover and pointer-down with it, so reach for Click Bubbling first if it is only clicks you want to keep in
borderBottomColorColorColour of the bottom edge only, overriding Border Color
borderBottomLeftRadiusNumberRounds the bottom-left corner only, overriding Corner Radius
borderBottomRightRadiusNumberRounds the bottom-right corner only, overriding Corner Radius
borderBottomStyleEnum (none, solid, dotted, dashed)Line style for the bottom edge only, overriding Border Style; None hides that edge
borderBottomWidthNumberThickness of the bottom edge in pixels, and it adds to the element's size
borderColorColor#000000Colour of the border, which has no effect while Border Style is None
borderLeftColorColorColour of the left edge only, overriding Border Color
borderLeftStyleEnum (none, solid, dotted, dashed)Line style for the left edge only, overriding Border Style; None hides that edge
borderLeftWidthNumberThickness of the left edge in pixels, and it adds to the element's size
borderRadiusNumber0Rounds all four corners, except any corner that sets its own radius
borderRightColorColorColour of the right edge only, overriding Border Color
borderRightStyleEnum (none, solid, dotted, dashed)Line style for the right edge only, overriding Border Style; None hides that edge
borderRightWidthNumberThickness of the right edge in pixels, and it adds to the element's size
borderStyleEnum (none, solid, dotted, dashed)noneLine style for all four edges; None hides the border and leaves Border Width and Color inactive
borderTopColorColorColour of the top edge only, overriding Border Color
borderTopLeftRadiusNumberRounds the top-left corner only, overriding Corner Radius
borderTopRightRadiusNumberRounds the top-right corner only, overriding Corner Radius
borderTopStyleEnum (none, solid, dotted, dashed)Line style for the top edge only, overriding Border Style; None hides that edge
borderTopWidthNumberThickness of the top edge in pixels, and it adds to the element's size
borderWidthNumber2Thickness of the border in pixels, which adds to the element's size unless Box Sizing accounts for it
boxShadowBlurRadiusNumber5How soft the shadow edge is; 0 gives a hard edge
boxShadowColorColor#00000033Colour of the shadow, including how transparent it is
boxShadowEnabledBooleanfalseTurns the drop shadow on
boxShadowInsetBooleanfalseDraws the shadow inside the element instead of behind it
boxShadowOffsetXNumber0How far to the right the shadow is cast from the element
boxShadowOffsetYNumber0How far down the shadow is cast from the element
boxShadowSpreadRadiusNumber2How much larger than the element the shadow is drawn
clickBubblingEnum (auto, always, never)autoWhether a click on this control also fires Click on the nodes it sits inside. Automatic keeps it here as soon as this control's own Click is connected, so a Favourite button inside a clickable card runs Favourite and not the card; Always is the older behaviour where both run; Never keeps every click here, wired or not
colorColorColour of the text itself, not of the element behind it
cssClassNameString``Extra CSS class names to put on this element, for styling from a stylesheet you supply
enabledBooleantrueLets the user interact with this control; when off it still renders and occupies its space but ignores clicks, touches and typing
fontFamilyFontTypeface to render the text in, either a web-safe family name or a font file added to the project
fontSizeNumberHeight of the text, in pixels
heightDimension100Height of the element; how the value is read depends on Size Mode
iconColorColor#000000Colour of the icon
iconIconSourceIconWhich glyph to show, picked from an installed icon set
iconImageSourceImageImage file to show instead of an icon-set glyph
iconPlacementEnum (left, right)leftWhich side of the label the icon sits on, with Icon Spacing as the gap between them
iconSizeNumber16Height of the icon
iconSourceTypeEnum (image, icon)iconWhether the icon comes from an installed icon set or from an image file, which decides the source port below
iconSpacingNumber10Gap between the icon and the text beside it
labelStringLabelText shown on this element
labelSpacingNumber10Gap between the label and the edges around it
labelcolorColorColour of the text itself, not of the element behind it
labelfontFamilyFontTypeface to render the text in, either a web-safe family name or a font file added to the project
labelfontSizeNumberHeight of the text, in pixels
labelletterSpacingNumberAutoExtra space added between characters; leave as Auto to use the spacing built into the font
labellineHeightNumberAutoVertical space each line of text occupies; leave as Auto to follow the font
labeltextStyleTextStyleNoneApplies one of the project's saved text styles; the individual font ports below override whatever it sets
labeltextTransformEnum (none, uppercase, lowercase, capitalize)noneForces the text to upper case, lower case or capitalised without changing the underlying value
letterSpacingNumberAutoExtra space added between characters; leave as Auto to use the spacing built into the font
lineHeightNumberAutoVertical space each line of text occupies; leave as Auto to follow the font
marginBottomNumberSpace outside the element's bottom edge, between it and its neighbours
marginLeftNumberSpace outside the element's left edge, between it and its neighbours
marginRightNumberSpace outside the element's right edge, between it and its neighbours
marginTopNumberSpace outside the element's top edge, between it and its neighbours
maxHeightNumberLargest height the element may grow to, taking priority over Height
maxLengthNumberLargest number of characters the user can type; it does not truncate a value arriving on Text
maxWidthNumberLargest width the element may grow to, taking priority over Width
minHeightNumberSmallest height the element may shrink to, taking priority over Height
minWidthNumberSmallest width the element may shrink to, taking priority over Width
mixBlendModeEnum (normal, multiply, screen, overlay, darken, lighten, color-dodge, color-burn, hard-light, soft-light, difference, exclusion, hue, saturation, color, luminosity)normalHow this element's colours blend with whatever is painted behind it
mountedBooleantrueRemoves the element from the page entirely when false, unlike Visible which leaves its space behind
opacityNumber1How opaque this element is, from 0 for invisible to 1 for solid
paddingBottomNumber0Space inside the element's bottom edge, between it and its content
paddingLeftNumber0Space inside the element's left edge, between it and its content
paddingRightNumber0Space inside the element's right edge, between it and its content
paddingTopNumber0Space inside the element's top edge, between it and its content
placeHolderOpacityNumber0.5How faded the placeholder text is, from 0 to 1
placeholderStringType here...Greyed-out hint shown while the field is empty
positionEnum (relative, absolute, sticky, fixed)relativeHow the element is placed: In Layout follows its siblings, Absolute ignores them, Sticky pins to the parent edge on overflow, Fixed stays put and takes no space
sizeModeEnum (explicit, contentWidth, contentHeight, contentSize)contentSizeWhether Width and Height are used as given, or the element sizes itself to fit its contents
startValueStringThe text to put in the field. Applied as it arrives, unless you untick it under Run On Value Change, in which case it waits for a Set pulse
styleCssString/* background-color: red; */Raw CSS declarations applied to this element, overriding the styling ports above
textAlignXEnum (left, center, right)leftAligns the typed text within the field
textStyleTextStyleNoneApplies one of the project's saved text styles; the individual font ports below override whatever it sets
textTransformEnum (none, uppercase, lowercase, capitalize)noneForces the text to upper case, lower case or capitalised without changing the underlying value
transformOriginXNumber50Horizontal point the element rotates and scales around, as a fraction of its width
transformOriginYNumber50Vertical point the element rotates and scales around, as a fraction of its height
transformRotationNumber0Rotates the element clockwise in degrees, without affecting the layout
transformScaleNumber1Scales the element about its transform origin; 1 leaves it unscaled
transformXNumber0Moves the element right after layout, without moving its siblings
transformYNumber0Moves the element down after layout, without moving its siblings
typeEnum (text, textArea, email, number, password, url)textWhat kind of value the field accepts, which also changes the on-screen keyboard on touch devices
useIconBooleanfalseShows an icon on this element
useLabelBooleanfalseShows a text label on this element
variantStringName of a saved variant of this node type to apply, replacing the styling set here
visibleBooleantrueHides the element while keeping the space it occupies in the layout
widthDimension100Width of the element; how the value is read depends on Size Mode
zIndexNumberPaint order among overlapping siblings; higher numbers paint on top

Signals

NameTypeDefaultDescription
blurSignalTakes keyboard focus away from this field, which is what fires Blurred
clearSignalEmpties the field
focusSignalPuts the keyboard cursor in this field
setSignalWrites the current Text into the field now. This is additional to Text applying as it arrives; untick Text under Run On Value Change to stop that

Outputs

Values

NameTypeDefaultDescription
boundingHeightNumberHeight this element actually ended up with after layout, in pixels
boundingWidthNumberWidth this element actually ended up with after layout, in pixels
childIndexNumberThis element's position among its parent's children, counting from 0
enabledBooleanReports back whether this control is currently accepting interaction, following the Enabled input
focusStateBooleanTrue while this control holds keyboard focus, so typing and Enter go to it
hoverStateBooleanTrue while the pointer is over this control; stays false on touch devices with no pointer
onTextChangedStringWhat the field currently contains, updated as the user types
pressedStateBooleanTrue while a mouse button or finger is held down on this control, and false again the moment it is released or slides off
screenPositionXNumberDistance in pixels from the left edge of the window to this element's left edge
screenPositionYNumberDistance in pixels from the top edge of the window to this element's top edge
thisReferenceA reference to this node itself, for ports that take a node rather than a value

Signals

NameTypeDefaultDescription
completedSignalFires after every invocation, whatever the outcome — wire this to carry on regardless. Failure still fires and still carries its reason, so this cannot hide an error
didMountSignalFires once this element has been added to the page and can be measured
doneSignalFires when Set, Clear, Focus or Blur did something
hoverEndSignalFires when the pointer leaves this control, including when it leaves while a button is still held
hoverStartSignalFires when the pointer moves onto this control
onBlurSignalFires when keyboard focus leaves this control, which is the usual place to validate what was entered
onEnterSignalFires when the user presses Enter in the field, which is the usual place to submit
onFocusSignalFires the moment this control takes keyboard focus, whether from a click, a tab or a Focus action
pointerDownSignalFires as a mouse button or finger goes down on this control, before any click has completed
pointerUpSignalFires when the mouse button or finger is lifted, and also when a touch is cancelled by the system
textChangedSignalFires whenever the Text output changes, so a graph can sequence off the new value rather than poll it
unchangedSignalFires when a Set or Clear left the field as it was — most often a Set while the field has focus, which is deliberately absorbed so it cannot overwrite what is being typed
willUnmountSignalFires just before this element is removed from the page, while it still exists

Dynamic ports

This node's port list changes at runtime (declared-port-groups); the tables above may be incomplete for a given instance.

Declares conditional/expandable port groups whose visibility depends on parameter values (see declaredPortGroups).

ConditionInputs shownOutputs shown
sizeMode = explicit OR sizeMode = contentHeightwidth
sizeMode = explicit OR sizeMode = contentWidthheight
useIcon = trueiconSourceType, iconSize, iconPlacement, iconSpacing
useIcon = true AND iconSourceType = imageiconImageSource
useIcon = true AND iconSourceType = iconiconIconSource, iconColor
useLabel = truelabel, labeltextStyle, labelfontFamily, labelfontSize, labelcolor, labelletterSpacing, labellineHeight, labeltextTransform, labelSpacing
borderStyle = solid OR borderStyle = dashed OR borderStyle = dottedborderWidth, borderColor
borderLeftStyle = solid OR borderLeftStyle = dashed OR borderLeftStyle = dotted OR borderStyle = solid OR borderStyle = dashed OR borderStyle = dottedborderLeftWidth, borderLeftColor
borderTopStyle = solid OR borderTopStyle = dashed OR borderTopStyle = dotted OR borderStyle = solid OR borderStyle = dashed OR borderStyle = dottedborderTopWidth, borderTopColor
borderRightStyle = solid OR borderRightStyle = dashed OR borderRightStyle = dotted OR borderStyle = solid OR borderStyle = dashed OR borderStyle = dottedborderRightWidth, borderRightColor
borderBottomStyle = solid OR borderBottomStyle = dashed OR borderBottomStyle = dotted OR borderStyle = solid OR borderStyle = dashed OR borderStyle = dottedborderBottomWidth, borderBottomColor
boxShadowEnabled = trueboxShadowOffsetX, boxShadowOffsetY, boxShadowInset, boxShadowBlurRadius, boxShadowSpreadRadius, boxShadowColor

Ports at runtime

Declared-port-groups: width/height appear per sizeMode, icon ports per useIcon/iconSourceType, label styling ports when useLabel is true, and border/shadow ports per border-style and boxShadowEnabled settings. The catalog list is the superset; the editor shows the subset matching current parameters.

Patterns

  • onTextChanged → an Expression or Condition: validate as the user types.
  • onEnter → the same action as the submit button's onClick: keyboard-friendly forms.
  • A stored value → startValue with a load signal → set: prefill a form when data arrives.

Watch out for

  • Polling the text with a timer — onTextChanged is already live; wire it directly.
  • Wiring textChanged (signal) where the text string is wanted; use onTextChanged.

Examples

Settings form: the standard input controls bound to values

One of each core control: Text Input's live string comes out of onTextChanged, Checkbox exposes checked (level) plus onChange (edge), Dropdown (net.noodl.controls.options) takes an items list and emits the selected value, Slider (net.noodl.controls.range) emits a numeric value between min/max, and a Radio Button Group reports the value of whichever child Radio Button is selected. Values flow into a live summary — no submit step needed for value binding.

Button, Dropdown, Condition, Expression, Text

Generated

This page is generated from node-catalog-enriched.json. Do not edit it by hand — run npm run docs:nodes to regenerate, and fix the source enrichment instead.