Shared rules live in Shared core; platform differences in
macOS / Windows. This page holds the per-control
Do/Don’t; register a new control here before implementing it.
data-active: / data-inactive: variants are dead rules: reka’s TabsTrigger only emits
data-state="active|inactive". Always style with data-[state=active]:.
TabsList horizontal height is pinned by the group variant:
group-data-[orientation=horizontal]/tabs:h-9 cannot be overridden by a plain h-*; use an inline style.
Do not reinstate global transition suppression: transition-duration: 75ms !important is
removed; motion uses tokens. The reka popper wrapper’s transition-duration: 0s exception must stay.
The web layer renders in a normal browser (the preview bridge emulates the Tauri API), so screenshots
can be scripted:
终端窗口
npxvite# start the frontend (1420)
nodescripts/design-shot.mjs\
--url"/tool/hello-table"--out/tmp/a.png\
--themedark--font14 [--platform win]\
[--eval "document.querySelector('button').click()"]# interact before shooting
Preview bridge src/dev/preview-bridge.ts: active only under import.meta.env.DEV and outside
Tauri; implements the __TAURI_INTERNALS__ protocol + a localStorage plugin-store + framework command fixtures.
A plugin’s own business-command fixtures live in plugins/<id>/frontend/preview.ts (default
exportRecord<commandName, returnValue>), merged automatically in dev preview; base ships none.
Use it to check spec clauses per screen and verify overlays / focus / three states; native window
shell and material still need real-machine confirmation.
Base ships only _template / hello-world / system, all already brought up to this spec.
A fork’s own plugins follow the same checklist batch by batch, tracked by each fork (the framework
does not need to know fork plugin names). After each batch: pnpm lint && pnpm build && pnpm test,
then self-check against Shared core §7; Rust batches additionally run
pnpm fmt:rs && pnpm lint:rs && pnpm test:rs.