Magnetic

import { Magnetic } from '@hanzo/ui'

Default

A button that pulls toward the pointer as it approaches.

export function Default() {
return (
<YStack items="center" justify="center" minH={200} p="$8">
<Magnetic strength={0.3}>
<button type="button" style={{ padding: "16px 32px", borderRadius: 8, fontWeight: 600, border: "none", }} >
Hover Me!
</button>
</Magnetic>
</YStack>
)
}

Strength

A stronger pull travels further for the same pointer distance.

Subtle
Strong
export function Strength() {
return (
<XStack items="center" justify="center" gap="$8" minH={200} p="$8">
<Magnetic strength={0.15}>
<YStack width={96} height={96} rounded="$4" bg="$blue9" items="center" justify="center">
Subtle
</YStack>
</Magnetic>
<Magnetic strength={0.6}>
<YStack width={96} height={96} rounded="$4" bg="$purple9" items="center" justify="center">
Strong
</YStack>
</Magnetic>
</XStack>
)
}

Multiple

Each wrapped element tracks its own pointer distance independently.

1
2
3
export function Multiple() {
return (
<XStack items="center" justify="center" gap="$6" minH={200} p="$8">
{[0, 1, 2].map((i) => (
<Magnetic key={i} strength={0.35}>
<YStack width={64} height={64} rounded="$10" bg="$green9" items="center" justify="center">
{i + 1}
</YStack>
</Magnetic>
))}
</XStack>
)
}

Types

export type MagneticProps = ComponentProps<typeof Frame> & {
/** Fraction of the pointer's distance from centre the child travels. */
strength?: number
}

Exports

Magnetictype MagneticProps