mirror of
https://github.com/getpaseo/paseo.git
synced 2026-07-29 12:01:31 +00:00
Add `packages/app/src/constants/platform.ts` with canonical gates (isWeb, isNative, getIsElectron) and refactor all ~100 ad-hoc Platform.OS checks across 69 files to use shared imports. Fix sidebar hover crash on native (onPointerEnter → onHoverIn), fix tooltip to use breakpoint instead of platform detection, make sidebar action buttons always visible on native where hover doesn't work, and document the platform gating decision matrix in CLAUDE.md.
46 lines
1.7 KiB
TypeScript
46 lines
1.7 KiB
TypeScript
import { useUnistyles } from "react-native-unistyles";
|
|
import { isWeb } from "@/constants/platform";
|
|
|
|
export const FOOTER_HEIGHT = 75;
|
|
|
|
// Shared header inner height (excluding safe area insets and border)
|
|
// Used by both agent header (ScreenHeader) and explorer sidebar header
|
|
// This ensures both headers have the same visual height
|
|
export const HEADER_INNER_HEIGHT = 48;
|
|
export const HEADER_INNER_HEIGHT_MOBILE = 56;
|
|
export const WORKSPACE_SECONDARY_HEADER_HEIGHT = 36;
|
|
export const HEADER_TOP_PADDING_MOBILE = 8;
|
|
|
|
// Max width for chat content (stream view, input area, new agent form)
|
|
export const MAX_CONTENT_WIDTH = 820;
|
|
|
|
// Desktop app constants for macOS traffic light buttons
|
|
// These buttons (close/minimize/maximize) overlay the top-left corner
|
|
export const DESKTOP_TRAFFIC_LIGHT_WIDTH = 78;
|
|
export const DESKTOP_TRAFFIC_LIGHT_HEIGHT = 45;
|
|
|
|
// Windows/Linux window controls (minimize/maximize/close) — top-right
|
|
export const DESKTOP_WINDOW_CONTROLS_WIDTH = 140;
|
|
export const DESKTOP_WINDOW_CONTROLS_HEIGHT = 48;
|
|
|
|
export {
|
|
getIsElectron as getIsElectronRuntime,
|
|
getIsElectronMac as getIsElectronRuntimeMac,
|
|
} from "./platform";
|
|
|
|
/**
|
|
* Reactive hook — re-renders the component when the breakpoint changes.
|
|
* Always use this instead of reading UnistylesRuntime.breakpoint directly.
|
|
*/
|
|
export function useIsCompactFormFactor(): boolean {
|
|
const { rt } = useUnistyles();
|
|
return rt.breakpoint === "xs" || rt.breakpoint === "sm";
|
|
}
|
|
|
|
// SplitContainer relies on dnd-kit and DOM-backed accessibility helpers.
|
|
// Keep that capability distinct from desktop-width layout so touch tablets
|
|
// can use the desktop shell without entering web-only code paths.
|
|
export function supportsDesktopPaneSplits(): boolean {
|
|
return isWeb;
|
|
}
|