Communitygithub.com

Professor-Chen/cursor-byok

Floating-UI-Komponenten wie Dropdowns, Popover, Tooltips, Menüs, Comboboxen und verschachtelte Overlays in der Desktop-App implementieren oder überprüfen.

Was ist cursor-byok?

Dieses Skill ist für Entwickler gedacht, die Floating-UI-Komponenten in der Desktop-App („apps/desktop“) implementieren oder überprüfen. Es schreibt die Verwendung von `@floating-ui/dom` für alle interaktiven Elemente vor, die relativ zu einem Trigger positioniert werden, und verbietet manuelle Koordinatenberechnungen oder reine CSS-Positionierung. Das Skill legt eine klare Struktur fest: Overlays müssen über `createPortal` in `document.body` gerendert werden, damit Layout- und Stacking-Kontexte sie nicht abschneiden. Die Positionierung erfolgt mit `computePosition` innerhalb von `autoUpdate`, wobei die von `autoUpdate` zurückgegebene Bereinigungsfunktion beim Schließen des Overlays aufgerufen wird. Es wird empfohlen, von den vorhandenen Komponenten in `apps/desktop/src/components/ui` auszugehen und deren Middleware-Einstellungen (placement, offset, flip, shift, size) zu übernehmen, sofern die Interaktion keine bewusste Abweichung erfordert. Das Skill definiert außerdem wichtige Interaktionsinvarianten, wie das Sichtbarlassen des Trigger-Fokusrahmens während der Fokus im Overlay ist, das Schließen bei Klick außerhalb und Escape mit Fokusrückgabe auf den Trigger, sowie korrekte ARIA-Attribute für Barrierefreiheit. Es unterstützt Plattformen wie Claude Code, Cursor und Codex, die SKILL.md-Dateien verwenden.

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Floating UI

Verwenden Sie @floating-ui/dom für jedes interaktive Element, das relativ zu einem Trigger positioniert wird. Berechnen Sie Koordinaten nicht manuell und verlassen Sie sich nicht auf CSS-Abstandsoffsets für Dropdowns, Popover, Menüs, Combobox-Listen oder Tooltips.

Erforderliche Struktur

  • Rendern Sie Overlays mit createPortal(..., document.body), damit Layout- und Stacking-Kontexte sie nicht abschneiden.
  • Positionieren Sie mit computePosition innerhalb von autoUpdate; räumen Sie die von autoUpdate zurückgegebene Funktion auf, wenn das Overlay geschlossen oder ausgehängt wird.
  • Gehen Sie von der nächstgelegenen vorhandenen Steuerung in apps/desktop/src/components/ui aus. Übernehmen Sie deren placement-, offset-, flip-, shift- und size-Middleware, es sei denn, die Interaktion erfordert eine bewusste Abweichung.
  • Speichern Sie die berechneten left, top, width und verfügbare Höhe im React-Status. Wenden Sie den Status auf das Portal-Root-Element an; mutieren Sie Elementstile nicht direkt.
  • Verwenden Sie size, wenn die Referenzbreite oder die Viewport-Höhe das Overlay einschränkt. Listen, die wachsen können, müssen components/virtual/VirtualList.tsx verwenden; halten Sie feste Kopf- und Fußzeilen außerhalb des virtuellen Viewports.

Interaktionsinvarianten

  • Halten Sie den offenen/fokussierten Rand des Triggers sichtbar, während der Fokus innerhalb eines portalierten Overlays liegt.
  • Schließen Sie bei Mausinteraktion außerhalb und Escape und geben Sie den Fokus dann an den Trigger zurück.
  • Überprüfungen auf Klick außerhalb müssen sowohl den Trigger als auch das Overlay einschließen. Ein verschachteltes portaliertes Overlay muss sein Pointer-Ereignis stoppen, bevor es den Outside-Click-Listener des Eltern-Overlays erreicht, sodass die Interaktion mit einem Kindmenü niemals das Elternmenü schließt.
  • Stellen Sie den Trigger-Status mit aria-expanded, aria-controls und dem entsprechenden aria-haspopup dar; versehen Sie das Overlay mit der passenden menu-, listbox-, dialog- oder tooltip-Semantik.
  • Überprüfen Sie die Positionierung an allen Viewport-Rändern, Klicks auf verschachtelte Overlays, Tastaturverwerfung, virtuelles Scrollen und Verhalten bei fixierten Fußzeilen.

Individual skills in this repo

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

Verwandte Skills