Agent Skills
› wannabespace/conar
› tamery-ui
tamery-ui
GitHubTamery UI设计系统规范,定义macOS原生风格的前端开发硬规则。涵盖色彩、排版、动效及组件使用约束,指导Electron+React应用的UI构建、重构与审查,确保视觉一致性与可访问性。
Trigger Scenarios
构建或重写前端UI组件
进行前端代码审查
调整应用主题或样式
Install
npx skills add wannabespace/conar --skill tamery-ui -g -y
SKILL.md
Frontmatter
{
"name": "tamery-ui",
"description": "Tamery's UI design system and hard rules — native macOS look, three-level color system, typography tokens, motion recipes, and the kit's known gotchas. Use whenever building, restyling, or reviewing any UI in this repo (components, pages, popovers, menus, animations), before writing the first className."
}
Tamery UI
Native-feeling macOS database client (Electron + React + Tailwind v4 + base-ui kit in packages/ui). Every screen reads like an Apple app, not a web page. Owner-established rules; hard rules are review blockers.
Topic files — read what the task touches; record new decisions in the matching file:
| File | When |
|---|---|
| colors.md | Colors, surfaces, glass, shadows, cell highlights |
| typography.md | Fonts, type scale, row heights, radius |
| patterns.md | Chrome: menus, tabs, tooltips, toasts, icons, badges, filter field, shortcuts |
| motion.md | Any animation |
| gotchas.md | Before debugging kit components |
Hard rules
- Search the registry before writing markup.
pnpm dlx shadcn@latest search @shadcn -q <term>(fulluilist ~60 items). Adivstack re-implementingItem,Empty,InputGroup,Field,ButtonGroup,AttachmentorQuestionnaireis a review blocker — including "just this once". Missing frompackages/ui→ vendor it (shadcn view @shadcn/<name>), rewrite imports to kit conventions (@tamery/ui/lib/utils, arrow components, sorted props), then use. Registry components carry the density, focus rings, hover states and data-slots the app relies on. Long-form text never hand-parsed: prose via kitResponse, fenced code via kitCodeBlock(patterns.md). - No
dark:selectors. Theme tokens resolving in both themes. No new theme-pair vars (rejected). Token pair lacks contrast → cross-theme constructions in colors.md (alpha tints,bg-foreground/*steps,color-mixfills). Test: several call sites each dialing their own alpha on one token = the token is wrong. - No pixel font sizes. Tokens only:
text-2xs/text-xs/text-sm/text-base+. Missing size → add rem token to@theme. - No
cursor-pointer.cursor-defaulton link-based controls; I-beam and col-resize only exceptions. - Kit-level fixes in
packages/uifor systemic sizing/color problems; page overrides only for page-specific design. - No bare interactive icons. Hover bg + color shift + tooltip, always — patterns.md.
- No
sidebar-*color tokens. Regular tokens everywhere. - Global anchor rule:
a { text-primary }in globals — row-styledLinks must settext-foregroundor render blue. data-maskon all user data. Any element rendering user values (connection names/labels/hosts, connection strings, resource/schema/table/column names, cell values, SQL, filter values) getsdata-maskso screen-recording tools can blur it. App chrome never. Put on the closest element wrapping only the user value.- Verify heights in a row. After touching any control sharing a line with others (toolbar, controls row, dock), measure every element's
getBoundingClientRect().heightin the browser — equal to the pixel. Classic traps:py-*+ fixed-height children exceedingmin-h, borders withoutbg-clip-padding, hand-seth-*instead of size props. - Refresh belongs to the tab bar, never to the page.
TabRefresh(connection/$resourceId/-components/tab-bar.tsx) owns refreshing the active tab: a tab type that can refresh gets a branch there — invalidate its query keys,useRefreshHotkey, renderTabRefreshButton— and its page ships no refresh control of its own. A tab type that genuinely cannot refresh keeps the button mounted anddisabled. Two buttons for one dataset read as two different refreshes and both fire on ⌘R. Details: patterns.md.
Version History
-
57e2312
Current 2026-08-28 22:31
移除reference.md文件,更新hard rules第0条以强调搜索注册表,细化跨主题颜色对比测试方法。
- 06ecca0 2026-08-20 11:10


