Attribute: Farbfeld zeigt nur noch ein Quadrat statt zwei
ColorHexField stellte Swatch UND natives <input type="color"> sichtbar nebeneinander dar (zusätzlich zum separaten Hex-Textfeld) — wirkte wie zwei Farbfelder pro Zeile. Hex-Textfeld entfernt, natives Color-Input liegt jetzt unsichtbar über dem Swatch (öffnet die native Palette beim Klick auf das einzige sichtbare Quadrat). Betrifft alle Attribute-Farbfelder in der App, nicht nur die neuen Fenster-Linien-Felder.
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
// Farbfeld: Swatch (öffnet die native Farbpalette) + separat editierbarer
|
||||
// Hex-Code (Tippen/Enter übernimmt, Esc verwirft). Ersetzt die frühere reine
|
||||
// Text-Anzeige des Hex-Werts, die nicht anklickbar/editierbar war.
|
||||
// Farbfeld: nur der quadratische Swatch (öffnet die native Farbpalette per
|
||||
// Klick) — bewusst OHNE separates Hex-Textfeld daneben (Nutzer-Wunsch: in den
|
||||
// Attributen soll generell nur das Quadrat sichtbar sein, keine zwei Felder).
|
||||
|
||||
import { useEffect, useState } from "react";
|
||||
import { t } from "../i18n";
|
||||
|
||||
export function ColorHexField({
|
||||
@@ -14,23 +13,6 @@ export function ColorHexField({
|
||||
onChange: (hex: string) => void;
|
||||
disabled?: boolean;
|
||||
}) {
|
||||
const [text, setText] = useState(value.toUpperCase());
|
||||
|
||||
// Extern geänderter Wert (z. B. Preset-Klick) synchron halten, solange das
|
||||
// Feld nicht gerade selbst bearbeitet wird (kein Cursor-Sprung beim Tippen).
|
||||
useEffect(() => setText(value.toUpperCase()), [value]);
|
||||
|
||||
const commit = (raw: string) => {
|
||||
const trimmed = raw.trim();
|
||||
const withHash = trimmed.startsWith("#") ? trimmed : `#${trimmed}`;
|
||||
if (/^#[0-9a-fA-F]{6}$/.test(withHash)) {
|
||||
onChange(withHash.toLowerCase());
|
||||
setText(withHash.toUpperCase());
|
||||
} else {
|
||||
setText(value.toUpperCase()); // ungültig → letzten gültigen Wert zeigen
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<span className="attr-color">
|
||||
<label className="attr-color-swatch-wrap" title={t("attr.pickColor")}>
|
||||
@@ -42,24 +24,6 @@ export function ColorHexField({
|
||||
onChange={(e) => onChange(e.target.value)}
|
||||
/>
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
className="attr-color-hex attr-color-hex-input"
|
||||
value={text}
|
||||
disabled={disabled}
|
||||
spellCheck={false}
|
||||
onChange={(e) => setText(e.target.value)}
|
||||
onBlur={(e) => commit(e.target.value)}
|
||||
onKeyDown={(e) => {
|
||||
if (e.key === "Enter") {
|
||||
commit(e.currentTarget.value);
|
||||
e.currentTarget.blur();
|
||||
} else if (e.key === "Escape") {
|
||||
setText(value.toUpperCase());
|
||||
e.currentTarget.blur();
|
||||
}
|
||||
}}
|
||||
/>
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user