From b306dedb92cfbd36ac7d477381f20688fcade973 Mon Sep 17 00:00:00 2001 From: Sergey Matyunin Date: Sun, 6 Sep 2026 14:06:31 +0300 Subject: [PATCH] docs: clarify color picker invalid confirmation Issue: #476 User-Visible: no --- docs/specs/476-color-picker-ok.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/specs/476-color-picker-ok.md b/docs/specs/476-color-picker-ok.md index ef9e07a2..d21066d5 100644 --- a/docs/specs/476-color-picker-ok.md +++ b/docs/specs/476-color-picker-ok.md @@ -133,6 +133,10 @@ theme tokens House Plan для primary action. В `forced-colors` использ повторное «ОК» без нового валидного пользовательского ввода не имеет права снять состояние ошибки только потому, что commit уже вернул в поле последнее валидное значение: поверхность остаётся открытой до реального исправления. +Компонент обязан отдельно запоминать, что после неуспешного commit не было +нового `input`-события HEX-поля. Этот признак не сбрасывается нормализацией +draft внутри commit helper, повторным нажатием «ОК», blur или переводом фокуса; +он снимается только новым пользовательским `input` с валидным HEX. ### 7.4 Остальные способы закрытия @@ -330,8 +334,13 @@ interaction contract, а не скрытая правка обработчика - рабочее имя нового поля — `ColorPickerLabels.confirm`, ключ — `color_picker.confirm`; -- confirm вызывает существующий HEX commit helper и использует результат - валидации, после чего вызывает единый `_closePicker(true, ...)`; +- confirm может переиспользовать существующий HEX commit helper, но решение о + закрытии не выводится только из нормализованного `_hexDraft`: компонент хранит + отдельный признак неуспешного commit без последующего валидного + пользовательского `input`. Невалидный commit устанавливает признак, а снять + его может только новое `input`-событие HEX-поля с валидным значением; blur, + нормализация draft и повторный confirm его не снимают. `_closePicker(true, + ...)` вызывается только когда текущий draft валиден и этот признак снят; - отдельный custom event `confirm` не нужен: родители уже получили live value; - кнопка стилизуется внутри shadow DOM `hp-color-opacity` theme tokens без зависимости от HA-private web components;