studio-ui-patterns

โดย supabase

รูปแบบ UI ของระบบดีไซน์สำหรับ Supabase Studio ใช้เมื่อสร้างหรืออัปเดต

npx skills add https://github.com/supabase/supabase --skill studio-ui-patterns

Studio UI Patterns

The Design System docs and demos are the source of truth. Always check the relevant demo file before composing new UI.

Layout

Docs: apps/design-system/content/docs/ui-patterns/layout.mdx

Build pages with PageContainer, PageHeader, and PageSection.

Content typesize
Settings / config"default"
Lists / tables"large"
Full-screen views"full"
  • If filters/search exist on a list page, align table actions with the filters (don't use PageHeaderAside/PageSectionAside for those actions)
  • If no filters, actions can go in PageHeaderAside or PageSectionAside

Demos: page-layout-settings.tsx, page-layout-list.tsx, page-layout-list-simple.tsx, page-layout-detail.tsx (all in apps/design-system/registry/default/example/)

Forms

Docs: apps/design-system/content/docs/ui-patterns/forms.mdx

  • Use react-hook-form + zod
  • Use FormItemLayout instead of manually composing FormItem/FormLabel/FormMessage/FormDescription
  • Wrap inputs with FormControl; use _Shadcn_ imports from ui for primitives

Layout selection:

ContextLayoutContainer
Page (settings/config)FormItemLayout layout="flex-row-reverse"Card (CardContent per field; CardFooter for actions)
Side panel — wideFormItemLayout layout="horizontal"SheetSection
Side panel — narrow (size="sm" or below)FormItemLayout layout="vertical"SheetSection

Dirty state / submit:

  • Destructure isDirty from form.formState to show Cancel and disable Save
  • Show loading on submit button via loading prop
  • If submit button is outside <form>, set a stable formId and use form prop on the button

Demos: form-patterns-pagelayout.tsx, form-patterns-sidepanel.tsx

Tables

Docs: apps/design-system/content/docs/ui-patterns/tables.mdx

PatternUse when
TableSimple, static, semantic display
Data TableTanStack-powered; sorting, filtering, pagination; composed per use-case
Data GridVirtualization, column resizing, or complex cell editing
  • Actions: above the table, aligned right
  • Search/filters: above the table, aligned left
  • If table is primary content with no filters, actions can live in the page's primary/secondary actions area

Demos: table-demo.tsx, data-table-demo.tsx, data-grid-demo.tsx

Charts

Docs: apps/design-system/content/docs/ui-patterns/charts.mdx

  • Use provided chart building blocks; avoid passing raw Recharts components to ChartContent
  • Use useChart context flags for loading/disabled states
  • Keep composition straightforward — avoid over-abstraction

Demos (in apps/design-system/__registry__/default/block/): chart-composed-demo.tsx, chart-composed-basic.tsx, chart-composed-states.tsx, chart-composed-metrics.tsx, chart-composed-actions.tsx, chart-composed-table.tsx

Empty States

Docs: apps/design-system/content/docs/ui-patterns/empty-states.mdx

ScenarioPattern
Initial / onboardingPresentational empty state with value prop + clear next action
Data-heavy listsInformational empty state matching the list/table layout
Zero results from searchKeep layout consistent with data state to avoid jarring transitions
Missing routeCentered Admonition

Demos: empty-state-presentational-icon.tsx, empty-state-initial-state-informational.tsx, empty-state-zero-items-table.tsx, data-grid-empty-state.tsx, empty-state-missing-route.tsx

Navigation

Docs: apps/design-system/content/docs/ui-patterns/navigation.mdx

  • Use NavMenu for a horizontal list of related views within a consistent page layout
  • Activating an item must trigger a URL change — no local-only tab state

Cards

  • Group related information in cards
  • CardContent for sections, CardFooter for actions
  • Only use CardHeader/CardTitle when context isn't already provided by surrounding content
  • Use headers/titles when multiple cards represent distinct groups (e.g. multiple settings sections)

Alerts

  • Use Admonition to call out important actions, restrictions, or critical context
  • Place at the top of a page's content (below page title) or top of the relevant section (below section title)
  • Use sparingly

Sheets (Side Panels)

Use a Sheet when switching pages would be disruptive and the user needs to maintain context (e.g. selecting a row from a list to edit).

Structure:

  • SheetContent with size="lg" for forms needing horizontal layout
  • Use SheetHeader, SheetTitle, SheetSection, SheetFooter
  • Submit/cancel actions go in SheetFooter

Forms in sheets:

  • layout="horizontal" for wider sheets
  • layout="vertical" for narrow sheets (size="sm" or below)

Copy

Source of truth: apps/design-system/content/docs/copywriting.mdx — sentence case, title case, proper nouns, voice and tone.

When changing visible copy, grep e2e/studio/ for the old string.

Skills เพิ่มเติมจาก supabase

studio-e2e-tests
supabase
เขียนและรันการทดสอบ E2E ด้วย Playwright สำหรับ Supabase Studio ใช้เมื่อถูกถาม
official
vitest
supabase
เฟรมเวิร์กการทดสอบหน่วยความเร็วสูง Vitest ที่ขับเคลื่อนโดย Vite พร้อม API ที่เข้ากันได้กับ Jest ใช้เมื่อเขียนทดสอบ, สร้างม็อก, กำหนดค่าความครอบคลุม, หรือทำงานกับทดสอบ…
official
skill-creator
supabase
คู่มือที่ครอบคลุมสำหรับการสร้างสกิลแบบโมดูลาร์ที่ขยายความสามารถของ Claude ด้วยความรู้เฉพาะทางและเวิร์กโฟลว์ สกิลประกอบด้วยไฟล์ SKILL.md ที่จำเป็นพร้อม YAML frontmatter และคำแนะนำในรูปแบบ markdown รวมถึงทรัพยากรเสริมเพิ่มเติม (สคริปต์ เอกสารอ้างอิง สื่อต่างๆ) ที่จัดระเบียบตามวัตถุประสงค์และโหลดแบบค่อยเป็นค่อยไปเพื่อประหยัดบริบท ออกแบบสกิลโดยยึดตามตัวอย่างการใช้งานที่เป็นรูปธรรม ระบุสคริปต์ที่ใช้ซ้ำได้สำหรับงานที่กำหนดตายตัว ไฟล์อ้างอิงสำหรับความรู้เฉพาะโดเมน และสื่อต่างๆ สำหรับ...
official
supabase
supabase
ใช้เมื่อทำงานใดๆ ที่เกี่ยวข้องกับ Supabase ทริกเกอร์: ผลิตภัณฑ์ของ Supabase (ฐานข้อมูล, การยืนยันตัวตน, ฟังก์ชัน Edge, Realtime, พื้นที่จัดเก็บ, เวกเตอร์, Cron, คิว); ไคลเอนต์…
official
supabase-server
supabase
ใช้เมื่อเขียนโค้ดฝั่งเซิร์ฟเวอร์กับ Supabase — Edge Functions, แอป Hono, ตัวจัดการเว็บฮุค หรือแบ็กเอนด์ใดๆ ที่ต้องการการสร้างไคลเอนต์และการตรวจสอบสิทธิ์ของ Supabase
official
clickhouse-logs-queries
supabase
Write, review, and migrate Supabase logs queries against the ClickHouse-backed `logs` table (the `logs.all.otel` analytics endpoint). Use this whenever a task…
official
dev-toolbar-review
supabase
ใช้เมื่อตรวจสอบ PR ที่เกี่ยวข้องกับ packages/dev-tools/, packages/common/posthog-client.ts,
official
e2e-studio-tests
supabase
รันการทดสอบ e2e ในแอป Studio ใช้เมื่อถูกขอให้รันการทดสอบ e2e รันการทดสอบ studio การทดสอบ playwright หรือทดสอบฟีเจอร์
official