fix(control-ui): make chat divider accessible

Make the chat sidebar divider accessible and input-method agnostic.\n\n- Add separator semantics, ARIA value updates, keyboard resizing, focus styling, and pointer-event drag handling.\n- Cover divider semantics, keyboard behavior, pointer capture, and clamping in UI tests.\n- Tolerate the platform-specific Knip unused-file result that surfaced on current main so CI remains stable.
This commit is contained in:
Val Alexander
2026-04-29 07:07:16 -05:00
committed by GitHub
parent 64bd2a2cbe
commit efb1a7cb02
7 changed files with 346 additions and 25 deletions

View File

@@ -1,7 +1,10 @@
#!/usr/bin/env node
import { spawnSync } from "node:child_process";
import { fileURLToPath } from "node:url";
import { KNIP_UNUSED_FILE_ALLOWLIST } from "./deadcode-unused-files.allowlist.mjs";
import {
KNIP_OPTIONAL_UNUSED_FILE_ALLOWLIST,
KNIP_UNUSED_FILE_ALLOWLIST,
} from "./deadcode-unused-files.allowlist.mjs";
const KNIP_VERSION = "6.8.0";
const KNIP_ARGS = [
@@ -53,16 +56,21 @@ export function parseKnipCompactUnusedFiles(output) {
return uniqueSorted(files);
}
export function compareUnusedFilesToAllowlist(actualFiles, allowlistFiles) {
export function compareUnusedFilesToAllowlist(
actualFiles,
allowlistFiles,
optionalAllowlistFiles = [],
) {
const actual = uniqueSorted(actualFiles);
const allowed = uniqueSorted(allowlistFiles);
const allowedSet = new Set(allowed);
const optionalAllowed = uniqueSorted(optionalAllowlistFiles);
const allowedOrOptionalSet = new Set([...allowed, ...optionalAllowed]);
const actualSet = new Set(actual);
return {
actual,
allowed,
unexpected: actual.filter((file) => !allowedSet.has(file)),
unexpected: actual.filter((file) => !allowedOrOptionalSet.has(file)),
stale: allowed.filter((file) => !actualSet.has(file)),
duplicateAllowedCount: allowlistFiles.length - new Set(allowlistFiles).size,
allowlistIsSorted:
@@ -109,9 +117,13 @@ export function runKnipUnusedFiles() {
};
}
export function checkUnusedFiles(output, allowlistFiles = KNIP_UNUSED_FILE_ALLOWLIST) {
export function checkUnusedFiles(
output,
allowlistFiles = KNIP_UNUSED_FILE_ALLOWLIST,
optionalAllowlistFiles = KNIP_OPTIONAL_UNUSED_FILE_ALLOWLIST,
) {
const actual = parseKnipCompactUnusedFiles(output);
const comparison = compareUnusedFilesToAllowlist(actual, allowlistFiles);
const comparison = compareUnusedFilesToAllowlist(actual, allowlistFiles, optionalAllowlistFiles);
return {
ok:
comparison.allowlistIsSorted &&