Files
Netcatty/components/settings/DebouncedTextarea.test.tsx
T
陈大猫 733e19a6f6 perf(settings): reduce Mac settings window input lag (#1347) (#1368)
* perf(settings): reduce Mac settings window input lag (#1347)

Debounce custom CSS commits, memoize heavy tabs, and replace Radix ScrollArea
with native scrolling so typing and navigation stay responsive on macOS.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(settings): flush debounced textarea on unmount

Avoid losing custom CSS edits when the settings window closes before the
debounce timer fires.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-10 14:45:33 +08:00

30 lines
1.1 KiB
TypeScript

import assert from 'node:assert/strict';
import { readFileSync } from 'node:fs';
import { join } from 'node:path';
import test from 'node:test';
const root = new URL('../..', import.meta.url);
function readProjectFile(path: string): string {
return readFileSync(join(root.pathname, path), 'utf8');
}
test('DebouncedTextarea keeps draft locally and commits on debounce/blur', () => {
const source = readProjectFile('components/settings/DebouncedTextarea.tsx');
assert.match(source, /useState\(value\)/);
assert.match(source, /onDraftChangeRef\.current\?\.\(next\)/);
assert.match(source, /setTimeout\(\(\) =>/);
assert.match(source, /onBlur/);
assert.match(source, /onCommitRef\.current\(draft\)/);
assert.match(source, /draftRef\.current !== committedRef\.current/);
});
test('settings appearance uses debounced custom CSS textarea with live preview', () => {
const source = readProjectFile('components/settings/tabs/SettingsAppearanceTab.tsx');
assert.match(source, /DebouncedTextarea/);
assert.match(source, /applyCustomCssToDocument/);
assert.match(source, /onDraftChange=\{applyCustomCssToDocument\}/);
});