Skip to content

Input

Current implementation: PromeoInput. The canonical text input. It renders in filled style on surface01, with hover and focus adding a 1px teal accent border. When maxLength is set, the field switches to the tall, counter-bearing layout with 0/N rendered bottom-right.

PromeoInput via Flutter micro-app at /preview. Live state pushed via postMessage.

From snapshot v2026.05.15-001. Reflects the published defaults, not live playground state — see PRD 02 §6 snapshot-fidelity rule.

// from snapshot v2026.05.15-001
import 'package:flutter/material.dart';
import 'package:promeo_design_system/promeo_design_system.dart';
class InputSample extends StatelessWidget {
const InputSample({super.key});
@override
Widget build(BuildContext context) {
return PromeoInput(
label: 'Product name',
placeholder: 'e.g. Wireless mouse',
maxLength: 60,
onChanged: (v) {},
);
}
}
PropTypeDefaultNotes
controllerTextEditingController?nullExternal controller; widget owns one when null
initialValueString?nullSeeds the internally-owned controller. Ignored when controller is provided
onChangedValueChanged<String>?nullFired on every keystroke
placeholderString?nullEmpty-state hint text
labelString?nullTitle rendered above the field; maps to Figma title axis
maxLengthint?nullWhen non-null, switches to tall layout with 0/N counter
enabledbooltruefalse → disabled style, no interaction
widthdouble?nullField width; falls back to 300 (Figma frame default)
focusNodeFocusNode?nullExternal focus node; widget owns one when null
  • Filled style only; outlined / underlined variants are not part of the Promeo input system.
  • Counter layout (maxLength set) bumps total field height; account for this in tight vertical layouts.