Skip to content

fix: [Select/MultiSelect/FieldSelect] refinements (ENG-46730, 46731, 46732, 46739)#782

Open
isaquebock wants to merge 6 commits into
mainfrom
fix/select-refinements-eng-46730-31-32-39
Open

fix: [Select/MultiSelect/FieldSelect] refinements (ENG-46730, 46731, 46732, 46739)#782
isaquebock wants to merge 6 commits into
mainfrom
fix/select-refinements-eng-46730-31-32-39

Conversation

@isaquebock

@isaquebock isaquebock commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Refinamentos ao Select V4 cobrindo 4 bugs do épico.

  • ENG-46730 — Focus ring já estava no SelectOption; adicionados testes de regressão para navegação via ArrowDown (foco visível e wrap).
  • ENG-46731Resolvido via fix: [Inputs] normalize z-index across all inputs (ENG-46735) #783. O select-content.vue usa o novo token --z-input-overlay: 1100 desse PR (não modificado aqui para evitar conflito).
  • ENG-46732 — Criado componente FieldSelect (Label + Select + HelperText), v-model via defineModel, seguindo padrão FieldText.
  • ENG-46739 — Root cause: onDocumentPointerDown (capture phase) fechava o painel ao pointerdown no próprio trigger, e o @click do trigger reabria. Bailout adicionado quando triggerRef.contains(target).

How to test (mapeado 1:1 com Jira)

ENG-46730 — "Focus state por teclado não funciona nas opções"

  • Storybook → Components/Inputs/Select → abrir o painel.
  • Pressionar ArrowDown → primeira opção exibe o focus ring visível (destaque visual da opção em foco por teclado).
  • ArrowDown sucessivos movem o ring; do último volta para o primeiro (wrap).
  • Escape fecha e devolve o foco para o trigger.

ENG-46731 — "Dropdown renderiza atrás de Drawer/Dialog (z-index)"

  • Depois do PR fix: [Inputs] normalize z-index across all inputs (ENG-46735) #783 mergear: montar um <Select> ou <MultiSelect> dentro de um <Drawer> ou <Dialog> aberto.
  • Abrir o Select → painel de opções renderiza acima do overlay do modal (antes ficava atrás/invisível).
  • Repetir com MultiSelect (mesmo fix, aplicado no multi-select-content).

ENG-46732 — "Criar componente FieldSelect (faltando)"

  • Storybook → Components/Inputs/FieldSelect existe (era o gap).
  • Story Default — Label acima, Select no meio, HelperText abaixo — análogo aos demais Field*.
  • Stories Sizes, Required, Invalid, Disabled, Multiple renderizam corretamente e v-model funciona.

ENG-46739 — "Clique duplicado ao selecionar opção"

  • Storybook → Components/Inputs/Select → abrir com clique no trigger.
  • Clique novamente no trigger → painel fecha limpo (antes: fechava e reabria imediatamente).
  • DevTools log de update:openapenas 1 evento por clique no trigger.
  • Clique em uma opção → update:modelValue dispara apenas uma vez (não duas).

Dependencies

Requer merge de #783 (ENG-46735) primeiro — traz o token --z-input-overlay que resolve ENG-46731.

The document-level pointerdown handler in select-content closed the panel
whenever the pointer landed outside the content root — including on the
trigger itself. The trigger's @click then re-opened it, so closing the
open panel via the trigger appeared to require a second click and could
emit update:open twice per press. Skip the outside-close path when the
pointerdown lands on the trigger; the trigger's own handler drives the
toggle.

Adds two regression tests exercising a real pointerdown+click sequence:
one asserts the panel closes after a trigger press while open, the other
asserts one open transition per press. Also lands focus-visible tests
for ENG-46730 asserting ArrowDown moves DOM focus onto the options.

Refs: ENG-46730, ENG-46739
FieldSelect composes Label + Select (with Trigger + Content + Option
sub-components) + HelperText into a single vertical stack, mirroring
FieldText's role for text inputs. Options are supplied via a data prop
(`options: { value, label }[]`) so the field owns the rendering;
consumers who need slot-based composition can drop to the underlying
Select compound directly.

Includes the spec (.specs/field-select.md, monolithic structure), the
flat exports entry, a size-limit budget (6 KB), a minimal Storybook
story with Default/Sizes/Required/Invalid/Disabled/Multiple, and a
functional test suite covering data-testid derivation, label/for/id
wiring, aria-describedby / aria-required / aria-invalid, disabled
suppression, size variants, option rendering + selection, and axe
runs on the default and disabled states.

Refs: ENG-46732
@isaquebock
isaquebock marked this pull request as ready for review July 23, 2026 17:33
@isaquebock
isaquebock requested a review from a team as a code owner July 23, 2026 17:33
@isaquebock
isaquebock marked this pull request as draft July 23, 2026 17:34
@isaquebock
isaquebock marked this pull request as ready for review July 23, 2026 21:02
@gdsantana

Copy link
Copy Markdown
Contributor
image

menu do Select esta abrindo errado quando é feito zoom no story

@gdsantana

Copy link
Copy Markdown
Contributor
image image MultiSelect ta ficando com as bordas por baixo para as primeiras opçoes

@gdsantana

Copy link
Copy Markdown
Contributor

O FieldSelect fica alterando a largura conforme selecionamos mais itens.
image
image
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants