La trampa: el accent vivia en DOS scopes — cascada per-rol en el root y una re-declaracion fija `primary-border` en el contenido portalado. El forward del root nunca alcanzaba el portal: el prop `color` solo tintaba el ring del trigger; los rings del portal (area-thumb, slider-thumb, eye-dropper) eran SIEMPRE primary. Solucion (espejo de select): el forward apunta a las DOS partes que estampan — recipe `_palette-border` con `parts: ['trigger', 'content']` (fusionado en la recipe existente). El trigger consume el token directo en su ring; el content re-deriva su `--_color-picker-accent` del token EN SU scope (sus descendientes lo heredan como antes). Root: fuera la decl base + la cascada de 7 roles; el provider solo estampa el marcador canonico y el color RAW viaja por contexto (Trigger/Content/ChannelInput lo resuelven cada uno via resolveComponentColor, con seed `--color-custom` para valores raw). El marker div del ChannelInput enruta ademas el forward de color-field, como un ColorField standalone. Tipos: `ColorPickerColor = ComponentColorProp` (era ColorRole). Verificado en Chrome con el popover abierto: content portalado estampa su propio data-color; default primary = probe exacto en trigger y content; risk/teal en el scope del portal = token compartido; custom → color-mix del seed; el area-thumb hereda el accent. Contract test: mis cambios no añaden fallos (los 2 de chat-composer son WIP de otra sesion con recipe fuera del tree; 2 de proof-of-human pre-existentes). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>alpha-0.1-sec-dom
parent
6b37beed69
commit
c9db0a8d26
Loading…
Reference in new issue