…isabled prop
Single-select and multi-select now support expression mode like every
other type, so the separate non-expression render path and the
expression-to-literal coercion are removed.
`locked` is now configuration only: it drives the lock toggle but no
longer makes the value read-only or swaps the control for plain text.
A new `disabled` prop disables the value control, lock, mode menu, and
header controls instead. Custom mode controls receive `disabled` via the
new exported QuickFormFieldControlProps type.
FIELD_TYPE_META.supportsExpression (now always true) and the
trueLabel/falseLabel strings are deprecated. The AI-assist output hint
now follows the current mode rather than the type.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Summary
Two gaps in
QuickFormFieldfound while wiring up HITL quick forms.InputGroupbranch, the expression-to-literal coercion, and the checks that hid the mode menu for selects.renderModeControl/renderExpressionEditor.lockedno longer blocks editing. It marks the value read-only for the person filling in the form. The author still edits it, so the lock is configuration, not a control state.getLockedDisplayValue).disabledprop disables every built-in control:headerActionsare the consumer's to disable.disabledtoo.renderModeControlandrenderExpressionEditorreceive it via a new exportedQuickFormFieldControlPropstype, which replaces two copies of the same inline type.FIELD_TYPE_META.supportsExpression(now alwaystrue) and thetrueLabel/falseLabelstrings (no longer rendered).Decisions worth a look
locked. A consumer relying onlockedto block edits now needsdisabled. Shipped asfixbecause the only consumers we know of are HITL (which asked for this) and in-repo stories.options, or a multi-select value that isn't valid JSON, used to show as raw text while locked. In literal mode it now shows an empty select. Expression mode shows it.Demo
Tested as dev package in hitl-schema to confirm that single-select/multi-select fields can render the expression editor and that fields are still editable while locked.
hitl-before.mov
hitl-after.mov
Test plan
disabledinsteaddisabledcovering every built-in controlDisabledstory reports every control disabled; a locked single-select in expression mode accepts typing🤖 Generated with Claude Code