refactor(hooks): split keyboard height hook modules

This commit is contained in:
2026-06-26 15:50:45 +08:00
parent 30796ca4e7
commit 18bd9eaa47
12 changed files with 801 additions and 481 deletions
@@ -0,0 +1,46 @@
import { BrowserDetector, PlatformDetector } from "@/utils";
import type { KeyboardAdaptEnvironment } from "./types";
import { getVirtualKeyboard } from "./virtual-keyboard";
export function getKeyboardAdaptEnvironment(
ua: string | null = null,
): KeyboardAdaptEnvironment {
const platform = PlatformDetector.getPlatformInfo(ua);
const browser = BrowserDetector.getBrowserInfo(ua);
const isXiaomiFamilyDevice = PlatformDetector.isXiaomiFamilyDevice(ua);
const isFacebookInAppBrowser = BrowserDetector.isFacebookInAppBrowser(ua);
return {
platform: platform.platform,
osName: platform.osName,
osVersion: platform.osVersion,
deviceVendor: platform.deviceVendor,
deviceModel: platform.deviceModel,
isAndroid: platform.isAndroid,
isIOS: platform.isIOS,
isMobile: platform.isMobile,
browserName: browser.name,
browserVersion: browser.version,
isInAppBrowser: browser.isInAppBrowser,
inAppBrowserName: browser.inAppBrowserName,
isXiaomiFamilyDevice,
isFacebookInAppBrowser,
hasVisualViewport:
typeof window !== "undefined" && window.visualViewport != null,
hasVirtualKeyboard: getVirtualKeyboard() != null,
usesXiaomiFacebookFallback:
platform.isAndroid && isXiaomiFamilyDevice && isFacebookInAppBrowser,
};
}
export function shouldEnableKeyboardAdaptation(
environment: KeyboardAdaptEnvironment,
): boolean {
return environment.isInAppBrowser;
}
export function shouldUseInAppKeyboardFallback(): boolean {
if (typeof navigator === "undefined") return false;
return getKeyboardAdaptEnvironment(navigator.userAgent).usesXiaomiFacebookFallback;
}