refactor(chat): remove keyboard compatibility layer
This commit is contained in:
@@ -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),
|
||||
),
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user