- Switch conversation agent to xiaomi/mimo-v2.5 (multimodal: text + image) - Render native reasoning parts as live 'Thinking trace' (streaming open, collapsed after completion); inline <think> extraction for streaming models - Image attachments: picker (up to 4, 10MB each), base64 to Flue AgentPromptImage, authenticated blob-URL replay for historical images - Mobile keyboard viewport fix: visual-viewport hook, fixed shell, interactive-widget=resizes-content, header pinned, composer follows keyboard - Conversation to Signal to proposed Work: Convex persistence, Effect validation in @code/work-os, Work cards with exact source provenance - Streamdown markdown + Mermaid chart rendering in chat messages - Flue tool turns hidden, reasoning-containing turns remain visible - Frontend regression tests: keyboard viewport, responsive shell, attachment overflow, authenticated images, reasoning traces, transforms - .env.example updated to xiaomi/mimo-v2.5 config
27 lines
798 B
TypeScript
27 lines
798 B
TypeScript
import { describe, expect, test } from "vitest";
|
|
|
|
import { visualViewportStyle } from "./use-visual-viewport";
|
|
|
|
describe("Slice 1 visual viewport", () => {
|
|
test("shrinks the application surface to the keyboard-visible height", () => {
|
|
expect(visualViewportStyle({ height: 500, offsetTop: 0 })).toEqual({
|
|
height: "500px",
|
|
transform: undefined,
|
|
});
|
|
});
|
|
|
|
test("tracks a panned visual viewport without scrolling the document", () => {
|
|
expect(visualViewportStyle({ height: 500, offsetTop: 44 })).toEqual({
|
|
height: "500px",
|
|
transform: "translateY(44px)",
|
|
});
|
|
});
|
|
|
|
test("uses a dynamic viewport fallback before browser measurement", () => {
|
|
expect(visualViewportStyle()).toEqual({
|
|
height: "100dvh",
|
|
transform: undefined,
|
|
});
|
|
});
|
|
});
|