deer-flow/frontend/rstest.config.ts
Agustin M. 66f00e7b86
fix(frontend): make docs search work on desktop and mobile (#6715)
* fix(frontend): make docs search work on desktop and mobile

Docs search on deerflow.tech was broken twice over: no build step ever
generated the Pagefind index that Nextra's <Search> loads, and the custom
docs header that replaces Nextra's navbar never rendered a search box.

- `pnpm build` now runs `search:index` (pagefind 1.5.2, pinned) to write
  public/_pagefind/ (gitignored).
- The landing Header and its mobile sheet take an optional `search` slot;
  only the docs layout fills it, with localized labels and an aria-label.
- Each docs page carries a Pagefind `lang` filter and queries are scoped to
  it, since the root <html lang> is fixed and would mix en/zh results.
- globals.css restyles the results panel with app tokens because Nextra's
  <Head> variables are unset, lifts it above the mobile sheet, and keeps it
  tappable; the sheet no longer closes before a result navigates and closes
  after navigation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs(frontend): add DESIGN.md describing the shipped design system

Records the existing tokens, typography, components, docs (Nextra)
overrides, motion, accessibility and copy rules, plus the landing-only
decorative exceptions, so UI changes have something to be checked
against. Linked from frontend/AGENTS.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(frontend): address Codex review of docs search

- Chinese search: the root <html lang> is fixed, so Pagefind indexed zh
  pages with the English tokenizer and multi-character words (e.g. 偏好)
  never matched. scripts/build-search-index.mjs now sets each page's lang
  from its route before indexing, producing separate en-US and zh-CN
  indexes, and DocsHtmlLang syncs <html lang> at runtime (resetting
  Pagefind on a language switch) so queries hit the right index.
- Mobile menu: reset the open state when the route changes instead of
  comparing against the saved path, so Back no longer reopens the sheet.
- Shortcut: stop mounting a second <Search> in Nextra's unused mobile menu,
  which captured Cmd/Ctrl+K and focused an offscreen input at 640-767px.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs(frontend): keep guidance within size budget

* fix(frontend): address docs search review feedback

Keep Nextra results within the mobile sheet scroll boundary and dismiss same-hash selections by pointer or keyboard. Rebuild Pagefind output without stale fragments and replace UI source-string checks with behavioral coverage.

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Willem Jiang <willem.jiang@gmail.com>
2026-10-25 21:31:11 +08:00

42 lines
1.3 KiB
TypeScript

import { resolve } from "path";
import { pluginReact } from "@rsbuild/plugin-react";
import { defineConfig } from "@rstest/core";
// Build wiring is identical across projects; only the environment and which
// files each one claims differ.
const shared = {
plugins: [pluginReact()],
resolve: {
alias: {
"@": resolve(__dirname, "src"),
},
},
output: {
// Streamdown imports KaTeX CSS as a side effect. Bundle these packages so
// Rsbuild processes that CSS import instead of Node trying to load it.
// Nextra's client icons also use extensionless imports that need bundling.
bundleDependencies: ["streamdown", "katex", "nextra"],
},
};
export default defineConfig({
projects: [
{
...shared,
name: "node",
include: ["tests/unit/**/*.test.ts", "tests/unit/**/*.test.tsx"],
// A DOM environment costs roughly 3x the runtime of this suite, so the
// pure-logic tests that make up nearly all of it stay on node and only
// `*.dom.test.*` pays for a document.
exclude: { patterns: ["**/*.dom.test.*"], override: false },
},
{
...shared,
name: "dom",
testEnvironment: "happy-dom",
include: ["tests/unit/**/*.dom.test.ts", "tests/unit/**/*.dom.test.tsx"],
},
],
});