Skip to main content

Usage

import { useBreakpoint } from "@servicetitan/anvil2";

function ResponsiveComponent() {
  const breakpoint = useBreakpoint();

  return (
    <div>
      {/* Mobile-first: lg is true for lg, xl, and xxl */}
      {breakpoint?.lg ? (
        <DesktopLayout />
      ) : (
        <MobileLayout />
      )}
    </div>
  );
}

Return Value

PropertyTypeDescription
name"xs" | "sm" | "md" | "lg" | "xl" | "xxl"Current breakpoint name
minnumber | undefinedMinimum width for this breakpoint
maxnumber | undefinedMaximum width for this breakpoint
orientation"portrait" | "landscape"Current device orientation
innerWidthnumberCurrent viewport width
innerHeightnumberCurrent viewport height
xsbooleanAlways true (mobile-first: xs and above)
smbooleanTrue when viewport ≥ 640px
mdbooleanTrue when viewport ≥ 768px
lgbooleanTrue when viewport ≥ 1024px
xlbooleanTrue when viewport ≥ 1280px
xxlbooleanTrue when viewport ≥ 1536px

Options

PropertyTypeDescription
disablebooleanDisables the hook and prevents resize event listeners

Examples

Conditional Rendering

const breakpoint = useBreakpoint();

return (
  <>
    {breakpoint?.lg ? (
      <DesktopComponent />
    ) : (
      <MobileComponent />
    )}
  </>
);

With Disabled Option

// Disable breakpoint detection for SSR or testing
const breakpoint = useBreakpoint({ disable: true });

Breakpoint Values

The hook uses the following breakpoint values:
BreakpointMin Width
xs0px
sm640px
md768px
lg1024px
xl1280px
xxl1536px

Mobile-First Approach

The boolean flags (xs, sm, md, lg, xl, xxl) follow a mobile-first approach:
  • xs is always true
  • sm is true when viewport width is 640px or greater
  • md is true when viewport width is 768px or greater
  • And so on…
This makes it easy to write mobile-first responsive logic:
// This pattern: "default mobile, override for desktop"
const columns = breakpoint?.lg ? 3 : 1;
Last modified on January 23, 2026