Files
phantomptrandClaude Opus 5.5 11827039d3 Android: rounded split buttons, Home tiles that fit a phone, a Payloads search box
- The build rewrote start/end corners and positions with :lang(ar,fa,…) language
  lists, which Chromium before 141 (Android's WebView) drops: split buttons were
  square and start/end-placed controls sat wrong. Each list is now split into
  one language per check (postcss/langLists.mjs, run on the built CSS).
- Home's action tiles stack the icon above the label on a phone; the labels broke
  mid-word.
- Payloads' search box takes its own row on a phone instead of shrinking to nothing.
- After Resend helper, pairing keeps checking for a minute, not 16 s.
- Reverts the Android blur change: the doubled title was the emulator's software
  rendering, gone with its GPU on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-10 17:05:48 -07:00

37 lines
1.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { splitLangLists } from "./langLists.mjs";
const LIST = "ae,ar,arc,fa,he";
describe("splitLangLists", () => {
it("turns a negated language list into one check per shipped right-to-left language", () => {
const out = splitLangLists(`.rounded-s-full:not(:lang(${LIST})){border-top-left-radius:9px}`);
expect(out).toBe(
".rounded-s-full:not(:lang(ar)):not(:lang(fa)){border-top-left-radius:9px}",
);
});
it("gives a matching language list one selector per right-to-left language the app ships", () => {
const out = splitLangLists(`.end-3:lang(${LIST}){left:1rem}`);
expect(out).toBe(".end-3:lang(ar),.end-3:lang(fa){left:1rem}");
});
it("keeps the other selectors of the rule and leaves single languages alone", () => {
const out = splitLangLists(`.a:lang(${LIST}),.b{x:1}:root:lang(ar) .c{y:2}`);
expect(out).toBe(".a:lang(ar),.a:lang(fa),.b{x:1}:root:lang(ar) .c{y:2}");
});
it("drops a matching rule whose list holds none of the shipped languages", () => {
expect(splitLangLists(".x:lang(he,yi){a:1}.y{b:2}")).toBe(".y{b:2}");
});
});
describe("SHIPPED_RTL", () => {
it("names every right-to-left language the app can be set to", async () => {
const { SHIPPED_RTL } = await import("./langLists.mjs");
const { RTL_LANGS } = await import("../src/state/lang");
expect([...SHIPPED_RTL].sort()).toEqual([...RTL_LANGS].sort());
});
});