Agent Skillssupabase/supabase › studio-shortcuts

studio-shortcuts

GitHub

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

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

Trigger Scenarios

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

Install

npx skills add supabase/supabase --skill studio-shortcuts -g -y
More Options

Non-standard path

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

Use without installing

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.

Version History

  • 59e2122 Current 2026-09-23 10:29

Same Skill Collection

.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

Metadata

Files
0
Version
59e2122
Hash
c6a04c6f
Indexed
2026-09-23 10:29

trang chủ - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-09-23 15:28
浙ICP备14020137号-1