Agent Skillssupabase/supabase › studio-shortcuts

studio-shortcuts

GitHub

定义 Supabase Studio 键盘快捷键的开发规范,涵盖注册、冲突检测、UI展示及搜索输入处理,确保快捷键系统的一致性与可发现性。

.agents/skills/studio-shortcuts/SKILL.md supabase/supabase

触发场景

添加新的键盘快捷键功能 修改或重构现有快捷键逻辑 实现搜索/过滤输入的 Escape 行为

安装

npx skills add supabase/supabase --skill studio-shortcuts -g -y
更多选项

非标准路径

npx skills add https://github.com/supabase/supabase/tree/master/.agents/skills/studio-shortcuts -g -y

不安装直接使用

npx skills use supabase/supabase@studio-shortcuts

指定 Agent (Claude Code)

npx skills add supabase/supabase --skill studio-shortcuts -a claude-code -g -y

安装 repo 全部 skill

npx skills add supabase/supabase --all -g -y

预览 repo 内 skill

npx skills add supabase/supabase --list

SKILL.md

Frontmatter
{
    "name": "studio-shortcuts",
    "description": "Keyboard shortcut conventions for Supabase Studio. Use when adding a repeated user action, toolbar action, list\/table operation, or sub-page navigation that should have shortcut coverage, when registering or changing a shortcut, or when adding a search\/filter Input (which needs the staged-Escape handler). Covers the shortcut registry, useShortcut, ShortcutTooltip\/ShortcutBadge, the reference sheet, and collision rules."
}

Studio Keyboard Shortcuts

When Studio UI changes introduce or materially alter repeated user actions, consider whether keyboard shortcut coverage should be added or updated. Shortcuts use the shared Studio shortcut system and must be discoverable from the visible UI.

Rules

  • Never add a one-off keydown listener for a normal Studio action — register it through the shortcut registry and useShortcut.
  • Every registered shortcut is exposed where the action is visible, via ShortcutTooltip, ShortcutBadge, or a command-menu badge.
  • G then … chords are reserved for navigation.
  • Avoid broad Mod+letter shortcuts that overlap common browser, editor, system, copy/save/search, or devtools behavior.
  • Before adding a shortcut, check the registry and any remaining non-registry listeners for collisions.
  • Every search/filter <Input> gets onKeyDown={onSearchInputEscape(...)} — see Search inputs.

Preferred pattern

  • Add definitions in apps/studio/state/shortcuts/registry.ts or apps/studio/state/shortcuts/registry/*.
  • Register with useShortcut.
  • Gate availability with enabled.
  • Surface visible actions with ShortcutTooltip or ShortcutBadge.
  • Prefer scoped, mnemonic sequential chords over global modifier chords.
  • Set showInSettings: false on contextual shortcuts (scoped to a specific page state, sheet, or panel).
  • When a shortcut group should appear in the reference sheet (Shift+?), add the group key to SHORTCUT_REFERENCE_GROUP_ORDER in apps/studio/state/shortcuts/referenceGroups.ts and a human label to GROUP_LABELS in ShortcutsReferenceSheet.tsx.
  • For sheet-scoped shortcuts (active only while a <Sheet> is open), mount useShortcut inside the sheet component gated by the open prop ({ enabled: open }) — apps/studio/components/interfaces/Platform/Webhooks/PlatformWebhooksDeliveryDetailsSheet.tsx is the canonical example. A shortcut that opens a sheet from anywhere is global instead, gated by whatever makes the action valid (e.g. useConnectSheetShortcut checks project health).

Search inputs

Every <Input> used as a search or filter field must include the staged-Escape handler from apps/studio/lib/keyboard.ts:

import { onSearchInputEscape } from '@/lib/keyboard'

;<Input
  value={query}
  onChange={(e) => setQuery(e.target.value)}
  onKeyDown={onSearchInputEscape(query, setQuery)}
/>

Behavior:

  • Escape while the input has a value → clears the value, keeps focus (so a second Escape then blurs)
  • Escape while the input is empty → blurs the input
  • Stops propagation on Escape so the keystroke does not accidentally close a parent dialog or sheet

When pairing with useShortcut(LIST_PAGE_FOCUS_SEARCH, ...) to focus a search input via keyboard, always also add onSearchInputEscape on the same input — focus and escape-to-blur are always a pair.

Key files

apps/studio/state/shortcuts/registry.ts, apps/studio/state/shortcuts/useShortcut.tsx, apps/studio/components/ui/Shortcut*.tsx, apps/studio/lib/keyboard.ts.

Tests

E2E tests for a feature with shortcuts cover both click interactions and the keyboard path — see studio-e2e-tests.

版本历史

  • 59e2122 当前 2026-09-23 10:29

同 Skill 集合

.agents/skills/api-types/SKILL.md
.agents/skills/copywriting/SKILL.md
.agents/skills/dev-toolbar-review/SKILL.md
.agents/skills/edit-the-docs/SKILL.md
.agents/skills/review-the-docs/SKILL.md
.agents/skills/studio-e2e-tests/SKILL.md
.agents/skills/studio-error-handling/SKILL.md
.agents/skills/studio-mock-api-tests/SKILL.md
.agents/skills/studio-queries/SKILL.md
.agents/skills/studio-testing/SKILL.md
.agents/skills/studio-ui-patterns/SKILL.md
.agents/skills/telemetry-standards/SKILL.md
.agents/skills/test-the-docs/SKILL.md
.agents/skills/vercel-composition-patterns/SKILL.md
.agents/skills/vitest/SKILL.md
.agents/skills/write-the-docs/SKILL.md
.claude/skills/copywriting/SKILL.md
.claude/skills/dev-toolbar-review/SKILL.md
.claude/skills/docs-content/SKILL.md
.claude/skills/studio-e2e-tests/SKILL.md
.claude/skills/studio-error-handling/SKILL.md
.claude/skills/studio-mock-api-tests/SKILL.md
.claude/skills/studio-queries/SKILL.md
.claude/skills/studio-testing/SKILL.md
.claude/skills/studio-ui-patterns/SKILL.md
.claude/skills/telemetry-standards/SKILL.md
.claude/skills/vercel-composition-patterns/SKILL.md
apps/studio/.claude/skills/explorer/SKILL.md
.agents/skills/ask-the-docs/SKILL.md
.agents/skills/clickhouse-logs-queries/SKILL.md
.agents/skills/pm-the-docs/SKILL.md
.agents/skills/react-hook-form/SKILL.md
.agents/skills/safe-sql-execution/SKILL.md
.claude/skills/clickhouse-logs-queries/SKILL.md
.claude/skills/react-hook-form/SKILL.md
.claude/skills/safe-sql-execution/SKILL.md

元信息

文件数
0
版本
59e2122
Hash
c6a04c6f
收录时间
2026-09-23 10:29

首页 - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-09-23 15:21
浙ICP备14020137号-1