+ {/* Row 1: Field chips + actions */}
+
+ {FIELD_ORDER.map((type) => {
+ const active = activeField === type;
+ const fValue = fields ? getFieldValue(fields, type) : '*';
+ return (
+
+ );
+ })}
+
+
+
+
+
+
+
+ {/* Row 2: Expression + description (stacked on mobile, inline on lg) */}
+
+
+ {editingRaw ? (
+ setRawExpr(e.target.value)}
+ onKeyDown={handleRawKey}
+ onBlur={() => setEditingRaw(false)}
+ className={cn(
+ 'w-full bg-transparent font-mono text-sm tracking-[0.15em] focus:outline-none',
+ validateCronExpression(rawExpr).valid ? 'text-foreground' : 'text-destructive/80',
+ )}
+ />
+ ) : (
+ expression
+ )}
+
+
+
+ {isValid
+ ?
+ :
}
+
+ {description}
+
+
+
+
+ {/* Row 3: Presets select */}
+
+ setExpression(expr)} current={expression} />
+
+
+ );
+
+ return (
+