

TypeScript utilities for the browser: media, WebSocket, WebRTC, fullscreen, platform detection, responsive helpers, events, DOM, service workers, and more.
yarn add @js-toolkit/web-utils
# or
npm install @js-toolkit/web-utils
Use subpath imports for tree-shaking:
import{FullscreenController}from'@js-toolkit/web-utils/FullscreenController';import{getRandomID}from'@js-toolkit/web-utils/getRandomID';import{isMobile}from'@js-toolkit/web-utils/platform/isMobile';| Module | Description |
|---|
media/TextTracksController | HTML5 video text tracks management |
media/PipController | Picture-in-Picture controller |
media/MediaStreamController | MediaStream attach/detach |
media/Capabilities | Media type support detection |
media/timeRanges | TimeRanges utilities |
media/resetMedia | Reset media element and clear decoder buffer |
media/getMediaSource | Get MediaSource or ManagedMediaSource |
media/getSourceBuffer | Get SourceBuffer or ManagedSourceBuffer |
media/parseCueText | WebVTT cue text parser |
| Module | Description |
|---|
ws/WSController | WebSocket controller with auto-reconnect |
webrtc/PeerConnection | RTCPeerConnection wrapper |
webrtc/sdputils | SDP manipulation utilities |
| Module | Description |
|---|
FullscreenController | Fullscreen API controller with fallback |
fullscreen | Cross-browser fullscreen utilities |
fullscreenUtils | Pseudo-fullscreen helpers |
| Module | Description |
|---|
platform/getPlatformInfo | Browser/platform detection (ua-parser-js) |
platform/isSafari, isChrome | Browser detection |
platform/isIOS, isAndroid, isMacOS | OS detection |
platform/isMobile | Mobile device detection |
platform/isTouchSupported | Touch support detection |
platform/isMSESupported | Media Source Extensions support |
platform/isEMESupported | Encrypted Media Extensions support |
platform/isAirPlayAvailable | AirPlay availability |
platform/Semver | Semantic version parser |
| Module | Description |
|---|
responsive/MediaQueryListener | Media query change listener |
responsive/MediaQuery | Static media query utilities |
responsive/ViewSize | Viewport size enum and helpers |
| Module | Description |
|---|
EventEmitterListener | Unified listener for DOM/EventEmitter/EventTarget |
EventListeners | Multi-target event listener manager |
getEventAwaiter | Promise-based event waiting |
| Module | Description |
|---|
onDOMReady | Execute callback when DOM is ready |
onPageReady | Execute callback when page is loaded |
getInnerRect | Element inner dimensions |
toLocalPoint | Convert coordinates to local element space |
loadScript | Dynamic script loading with deduplication |
copyToClipboard | Copy text to clipboard |
| Module | Description |
|---|
saveFileAs | Trigger file download |
loadImage | Load image with caching |
blobToDataUrl, dataUrlToBlob | Blob/DataURL conversions |
toBase64, fromBase64 | Unicode-safe base64 encoding |
takeScreenshot | Capture screenshot from CanvasImageSource |
| Module | Description |
|---|
createLoop | Interval-based loop with RAF throttling |
createRafLoop | RequestAnimationFrame loop |
| Module | Description |
|---|
metrics/ga/* | Google Analytics helpers |
metrics/yandex/* | Yandex Metrica helpers |
| Module | Description |
|---|
getRandomID | Random ID via crypto API |
getBrowserLanguage | Browser language detection |
WakeLockController | Screen wake lock |
serviceWorker/ServiceWorkerInstaller | Service worker registration |
iframe/* | Iframe parent-child communication |
viewableTracker | Element visibility tracking |
import{FullscreenController}from'@js-toolkit/web-utils/FullscreenController';constcontroller=newFullscreenController(document.getElementById('player')!);awaitcontroller.requestFullscreen();console.log(controller.isFullscreen);import{isMobile}from'@js-toolkit/web-utils/platform/isMobile';import{isSafari}from'@js-toolkit/web-utils/platform/isSafari';if(isMobile()){// mobile-specific logic}if(isSafari()){// Safari workaround}import{getEventAwaiter}from'@js-toolkit/web-utils/getEventAwaiter';constvideo=document.querySelector('video')!;awaitgetEventAwaiter(video,'canplay').wait();video.play();import{loadScript}from'@js-toolkit/web-utils/loadScript';awaitloadScript('https://cdn.example.com/sdk.js');https://github.com/js-toolkit/web-utils