elements
lifecycle
browser
- useAudio
- useBattery
- useBluetooth
- useBreakpoints
- useBroadcastChannel
- useBrowserLocation
- useClipboard
- useCopy
- useCssVar
- useDisplayMedia
- useDocumentEvent
- useDocumentTitle
- useDocumentVisibility
- useEventListener
- useEventSource
- useEyeDropper
- useFavicon
- useFileSystemAccess
- useFps
- useFullscreen
- useGamepad
- useGeolocation
- useMeasure
- useMediaControls
- useMediaQuery
- useMemory
- useNetwork
- useObjectUrl
- useOnline
- useOtpCredential
- usePermission
- usePictureInPicture
- usePointerLock
- usePostMessage
- useRaf
- useShare
- useSpeechRecognition
- useSpeechSynthesis
- useSticky
- useVibrate
- useVirtualKeyboard
- useWakeLock
- useWebSocket
utilities
state
- useBoolean
- useControllableState
- useCookie
- useCookies
- useCounter
- useCycleList
- useDefault
- useDisclosure
- useField
- useHash
- useList
- useLocalStorage
- useMap
- useMask
- useMergedRef
- useObject
- useOffsetPagination
- useQueue
- useRafState
- useRefState
- useSessionStorage
- useSet
- useStateHistory
- useStep
- useStorage
- useToggle
- useUrlSearchParam
- useUrlSearchParams
- useValidatedState
- useWizard
user
sensors
- useDeviceMotion
- useDeviceOrientation
- useHotkeys
- useIdle
- useInfiniteScroll
- useIntersectionObserver
- useKeyboard
- useKeyPress
- useKeysPressed
- useMouse
- useMutationObserver
- useOrientation
- usePageLeave
- useParallax
- usePerformanceObserver
- useResizeObserver
- useScroll
- useScrollIntoView
- useScrollTo
- useSwipe
- useTextSelection
- useVisibility
- useWindowEvent
- useWindowFocus
- useWindowScroll
- useWindowSize
Warning
This hook has a fallback for virtual keyboard detection. If the virtual keyboard is not supported, the methods will not work.
Api not supported, make sure to check for compatibility with different browsers when using this api
import { useField, useVirtualKeyboard } from '@siberiacancode/reactuse';
import { SendIcon } from 'lucide-react';
import { cn } from '@/utils/lib';
const Demo = () => {
const virtualKeyboard = useVirtualKeyboard();
const messageField = useField('');
const message = messageField.watch();
if (!virtualKeyboard.supported)
return (
<p>
Api not supported, make sure to check for compatibility with different browsers when using
this{' '}
<a
href='https://developer.mozilla.org/en-US/docs/Web/API/VirtualKeyboard'
rel='noreferrer'
target='_blank'
>
api
</a>
</p>
);
return (
<section className='flex w-full max-w-sm flex-col p-4'>
<div
className={cn(
'bg-card border-border flex items-center gap-2 rounded-full border p-1.5 transition-all duration-200',
virtualKeyboard.opened && 'border-ring ring-ring/50 ring-3'
)}
>
<input
className='flex-1 rounded-full! border-none! bg-transparent px-3 text-sm shadow-none! ring-0! outline-none'
placeholder='Messageā¦'
{...messageField.register()}
/>
<button
aria-label='Send'
className='flex size-9 shrink-0 items-center justify-center rounded-full!'
disabled={!message.trim()}
type='button'
onClick={() => messageField.reset()}
>
<SendIcon className='size-4' />
</button>
</div>
</section>
);
};
export default Demo;
This hook uses VirtualKeyboard browser api to provide enhanced functionality. Make sure to check for compatibility with different browsers when using this api
Installation
pnpm add @siberiacancode/reactuseUsage
const { opened, show, hide, supported, changeOverlaysContent } = useVirtualKeyboard();Type Declarations
interface Navigator {
virtualKeyboard?: {
boundingRect: DOMRect;
overlaysContent: boolean;
show: () => void;
hide: () => void;
addEventListener: (type: 'geometrychange', listener: EventListener) => void;
removeEventListener: (type: 'geometrychange', listener: EventListener) => void;
};
}
export interface UseVirtualKeyboardReturn {
/** Whether the virtual keyboard is currently open */
opened: boolean;
/** Whether the VirtualKeyboard API is supported */
supported: boolean;
/** Change the overlays content */
changeOverlaysContent: (overlaysContent: boolean) => void;
/** Hide the virtual keyboard */
hide: () => void;
/** Show the virtual keyboard */
show: () => void;
}API
Parameters
| Name | Type | Default | Note |
|---|---|---|---|
| initialValue | boolean | false | The initial state value for keyboard visibility |
Returns
UseVirtualKeyboardReturnContributors
ddebabin
Last updated on