Communitygithub.com

Professor-Chen/cursor-byok

Implementa o revisa interfaces flotantes de escritorio como desplegables, popovers, tooltips, menús, comboboxes y superposiciones anidadas en apps/desktop.

¿Qué es cursor-byok?

Esta habilidad está diseñada para desarrolladores que trabajan en aplicaciones de escritorio con elementos de interfaz flotante como menús desplegables, popovers, tooltips, combos y superposiciones anidadas. Su propósito es garantizar una implementación consistente y accesible evitando cálculos manuales de coordenadas o estilos CSS absolutos. La habilidad utiliza la biblioteca `@floating-ui/dom` para posicionar cada elemento interactivo relativo a un disparador (trigger), renderizando las superposiciones mediante `createPortal` en `document.body` para evitar recortes de layout. Incluye invariantes de interacción como mantener el foco visible mientras la superposición está abierta, cerrar al hacer clic fuera o presionar Escape, y retornar el foco al disparador. También establece pautas para el uso de middlewares (`placement`, `offset`, `flip`, `shift`, `size`), el almacenamiento de coordenadas en estado de React, y el uso de componentes virtuales para listas largas. Es compatible con cualquier stack de desarrollo que use React y requiere seguir la estructura de componentes existente en `apps/desktop/src/components/ui`.

Compatible con~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Professor-Chen/cursor-byok/tree/HEAD/.agents/skills/floating-ui

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Interfaz flotante

Usa @floating-ui/dom para cada elemento interactivo posicionado en relación a un disparador. No calcules coordenadas manualmente ni dependas de desplazamientos absolutos CSS para desplegables, popovers, menús, listas de combobox o tooltips.

Estructura requerida

  • Renderiza las superposiciones mediante createPortal(..., document.body) para que el layout y los contextos de apilamiento no las recorten.
  • Posiciónalas con computePosition dentro de autoUpdate; limpia la función devuelta por autoUpdate cuando la superposición se cierre o desmonte.
  • Parte del control existente más cercano en apps/desktop/src/components/ui. Coincide con sus middlewares placement, offset, flip, shift y size a menos que la interacción requiera una diferencia deliberada.
  • Almacena las coordenadas left, top, el ancho y la altura disponible en estado de React. Aplica el estado a la raíz del portal; no mutes los estilos de los elementos directamente.
  • Usa size cuando el ancho de referencia o la altura del viewport restrinja la superposición. Las listas que pueden crecer deben usar components/virtual/VirtualList.tsx; mantén los encabezados y pies fijos fuera del viewport virtual.

Invariantes de interacción

  • Mantén visible el borde de apertura/enfoque del disparador mientras el foco esté dentro de una superposición portaleada.
  • Cierra al hacer clic fuera o presionar Escape, luego retorna el foco al disparador.
  • Las comprobaciones de clic fuera deben incluir tanto el disparador como la superposición. Una superposición portaleada anidada debe detener su evento de puntero para que no llegue al oyente de clic fuera del padre, de modo que interactuar con un menú hijo nunca cierre su padre.
  • Expón el estado del disparador con aria-expanded, aria-controls y el correspondiente aria-haspopup; asigna a la superposición la semántica adecuada (menu, listbox, dialog o tooltip).
  • Verifica la colocación cerca de todos los bordes del viewport, clics en superposiciones anidadas, cierre con teclado, desplazamiento virtual y comportamiento de pie fijo.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills relacionados