UNPKG

@yhattav/react-component-cursor

Version:

A lightweight, TypeScript-first React library for creating beautiful custom cursors with SSR support, smooth animations, and zero dependencies. Perfect for interactive websites, games, and creative applications.

1 lines 4.09 kB
{"version":3,"sources":["../src/utils/ssr.ts"],"names":["isSSR","isBrowser","isMobileDevice","hasTouchCapability","isMobileUserAgent","isSmallScreen","browserOnly","fn","fallback","safeDocument","safeWindow"],"mappings":"AASO,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,qBAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,oBAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,YAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,IAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,IAAMA,CAAQ,CAAA,IACZ,OAAO,MAAA,EAAW,WAOdC,CAAAA,CAAAA,CAAY,IAChB,OAAO,MAAW,EAAA,WAAA,CAQdC,CAAiB,CAAA,IAAe,CAC3C,GAAIF,CAAAA,EACF,CAAA,OAAO,MAIT,CAAA,IAAMG,CAAqB,CAAA,cAAA,GAAkB,MACnB,EAAA,SAAA,CAAU,cAAiB,CAAA,CAAA,EAC1B,SAAkB,CAAA,gBAAA,CAAmB,CAI1DC,CAAAA,CAAAA,CADyB,iEACkB,IAAK,CAAA,SAAA,CAAU,SAAS,CAAA,CAGnEC,CAAgB,CAAA,MAAA,CAAO,UAAc,EAAA,GAAA,EAAO,MAAO,CAAA,WAAA,EAAe,GAGxE,CAAA,OAAOF,CAAuBC,GAAAA,CAAAA,EAAqBC,CACrD,CAAA,CAAA,CAQaC,EAAc,CAAIC,CAAAA,CAAaC,CACtCP,GAAAA,CAAAA,EACKM,CAAAA,CAAAA,EAEFC,CAAAA,CAAAA,CAOIC,EAAe,IACnBR,CAAAA,EAAc,CAAA,QAAA,CAAW,IAOrBS,CAAAA,CAAAA,CAAa,IACjBT,CAAAA,GAAc,MAAS,CAAA","file":"chunk-IYYPIASE.mjs","sourcesContent":["/**\n * SSR (Server-Side Rendering) utility functions\n * Provides safe detection and handling of server-side rendering environments\n */\n\n/**\n * Detects if the code is running in a server-side rendering environment\n * @returns true if running on server (SSR), false if running in browser\n */\nexport const isSSR = (): boolean => {\n return typeof window === 'undefined';\n};\n\n/**\n * Detects if the code is running in a browser environment\n * @returns true if running in browser, false if running on server\n */\nexport const isBrowser = (): boolean => {\n return typeof window !== 'undefined';\n};\n\n/**\n * Detects if the code is running on a mobile/touch device\n * Uses multiple detection methods for better accuracy\n * @returns true if running on mobile/touch device, false otherwise\n */\nexport const isMobileDevice = (): boolean => {\n if (isSSR()) {\n return false;\n }\n\n // Check for touch capability\n const hasTouchCapability = 'ontouchstart' in window || \n navigator.maxTouchPoints > 0 || \n (navigator as any).msMaxTouchPoints > 0;\n\n // Check user agent for mobile patterns\n const mobileUserAgentPattern = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i;\n const isMobileUserAgent = mobileUserAgentPattern.test(navigator.userAgent);\n\n // Check for small screen size (mobile viewport)\n const isSmallScreen = window.innerWidth <= 768 || window.innerHeight <= 768;\n\n // Device is considered mobile if it has touch AND (mobile user agent OR small screen)\n return hasTouchCapability && (isMobileUserAgent || isSmallScreen);\n};\n\n/**\n * Safely executes a function only in browser environment\n * @param fn Function to execute in browser\n * @param fallback Optional fallback value to return in SSR\n * @returns Result of function or fallback value\n */\nexport const browserOnly = <T>(fn: () => T, fallback?: T): T | undefined => {\n if (isBrowser()) {\n return fn();\n }\n return fallback;\n};\n\n/**\n * Safely gets the document object, handling SSR\n * @returns document if in browser, null if in SSR\n */\nexport const safeDocument = (): Document | null => {\n return isBrowser() ? document : null;\n};\n\n/**\n * Safely gets the window object, handling SSR\n * @returns window if in browser, null if in SSR\n */\nexport const safeWindow = (): Window | null => {\n return isBrowser() ? window : null;\n}; "]}