refactor(chat): remove keyboard compatibility layer

This commit is contained in:
2026-07-16 14:36:33 +08:00
parent aec7cee9cf
commit 8b6bcab05c
9 changed files with 26 additions and 629 deletions
@@ -1,95 +0,0 @@
export const CHAT_KEYBOARD_FOCUS_GAP_PX = 14;
export const CHAT_KEYBOARD_VISIBLE_THRESHOLD_PX = 80;
export const CHAT_KEYBOARD_ZOOM_THRESHOLD = 1.05;
export const CHAT_KEYBOARD_FALLBACK_RATIO = 0.42;
export const CHAT_KEYBOARD_FALLBACK_MIN_PX = 260;
export const CHAT_KEYBOARD_FALLBACK_MAX_PX = 380;
const CHAT_KEYBOARD_MAX_LIFT_RATIO = 0.55;
export interface ChatKeyboardViewportBaseline {
layoutHeight: number;
visualHeight: number;
}
export interface ChatKeyboardViewportSnapshot {
layoutHeight: number;
visualHeight: number;
visualScale: number;
virtualKeyboardHeight: number;
}
export type ChatKeyboardLiftSource =
| "content-resize"
| "visual-viewport"
| "virtual-keyboard"
| "none";
export interface ChatKeyboardLiftResolution {
keyboardVisible: boolean;
lift: number;
source: ChatKeyboardLiftSource;
}
export function resolveChatKeyboardLift(
baseline: ChatKeyboardViewportBaseline,
snapshot: ChatKeyboardViewportSnapshot,
): ChatKeyboardLiftResolution {
const contentResize = baseline.layoutHeight - snapshot.layoutHeight;
if (contentResize > CHAT_KEYBOARD_VISIBLE_THRESHOLD_PX) {
return {
keyboardVisible: true,
lift: 0,
source: "content-resize",
};
}
const virtualKeyboardHeight = Math.max(
0,
snapshot.virtualKeyboardHeight,
);
const visualViewportHeight =
snapshot.visualScale <= CHAT_KEYBOARD_ZOOM_THRESHOLD
? Math.max(0, baseline.visualHeight - snapshot.visualHeight)
: 0;
const occludedHeight = Math.max(
virtualKeyboardHeight,
visualViewportHeight,
);
if (occludedHeight <= CHAT_KEYBOARD_VISIBLE_THRESHOLD_PX) {
return {
keyboardVisible: false,
lift: 0,
source: "none",
};
}
const maxLift = Math.round(
baseline.layoutHeight * CHAT_KEYBOARD_MAX_LIFT_RATIO,
);
return {
keyboardVisible: true,
lift: Math.min(
maxLift,
Math.round(occludedHeight + CHAT_KEYBOARD_FOCUS_GAP_PX),
),
source:
virtualKeyboardHeight >= visualViewportHeight
? "virtual-keyboard"
: "visual-viewport",
};
}
export function resolveChatKeyboardFallbackLift(
layoutHeight: number,
): number {
return Math.min(
CHAT_KEYBOARD_FALLBACK_MAX_PX,
Math.max(
CHAT_KEYBOARD_FALLBACK_MIN_PX,
Math.round(layoutHeight * CHAT_KEYBOARD_FALLBACK_RATIO),
),
);
}