feat(ui): drive mobile layouts from useIsMobile

This commit is contained in:
2026-04-21 22:46:07 -04:00
parent 16bbd9ab08
commit 7a917e5c22
16 changed files with 350 additions and 150 deletions

View File

@@ -0,0 +1,58 @@
import { describe, expect, test } from "bun:test";
import { readFileSync } from "node:fs";
const RESPONSIVE_PREFIX_PATTERN = /\b(?:max-sm|sm:|md:|lg:|xl:|2xl:)/;
const HOOK_DRIVEN_FILES = [
"src/app/page.tsx",
"src/app/demo/combined-date-picker/page.tsx",
"src/components/ai-toolbar.tsx",
"src/components/event-dialog.tsx",
"src/components/settings-panel.tsx",
"src/components/ui/calendar.tsx",
"src/components/ui/date-picker.tsx",
"src/components/ui/dialog.tsx",
"src/components/ui/input-group.tsx",
"src/components/ui/textarea.tsx",
"src/lib/ui-shell-contract.ts",
];
const DIRECT_HOOK_FILES = [
"src/app/page.tsx",
"src/app/demo/combined-date-picker/page.tsx",
"src/components/ai-toolbar.tsx",
"src/components/event-dialog.tsx",
"src/components/settings-panel.tsx",
"src/components/ui/calendar.tsx",
"src/components/ui/date-picker.tsx",
"src/components/ui/dialog.tsx",
"src/components/ui/input-group.tsx",
"src/components/ui/textarea.tsx",
];
const BOOLEAN_HELPER_FILES = [
"src/lib/ui-shell-contract.ts",
];
describe("mobile hook adoption", () => {
test("responsive source files stop using Tailwind breakpoint prefixes for mobile behavior", () => {
for (const filePath of HOOK_DRIVEN_FILES) {
const source = readFileSync(filePath, "utf8");
expect(source).not.toMatch(RESPONSIVE_PREFIX_PATTERN);
}
});
test("mobile-responsive component files explicitly depend on the shared useIsMobile hook", () => {
for (const filePath of DIRECT_HOOK_FILES) {
const source = readFileSync(filePath, "utf8");
expect(source).toContain("useIsMobile");
}
});
test("utility files accept isMobile booleans instead of embedding breakpoint strings", () => {
for (const filePath of BOOLEAN_HELPER_FILES) {
const source = readFileSync(filePath, "utf8");
expect(source).toContain("isMobile");
}
});
});