@supermousejs/core 2.0.4 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/index.mjs +3 -3
- package/dist/index.umd.js +1 -1
- package/package.json +11 -1
- package/src/systems/Stage.ts +14 -15
- package/src/types.ts +7 -8
package/CHANGELOG.md
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -38,7 +38,7 @@ class c {
|
|
|
38
38
|
]);
|
|
39
39
|
/**
|
|
40
40
|
* Adds a new CSS selector to the "Hide Native Cursor" list.
|
|
41
|
-
* Called by `Supermouse` (and subsequently plugins) during install to ensure
|
|
41
|
+
* Called by `Supermouse` (and subsequently plugins) during install to ensure
|
|
42
42
|
* the native cursor is hidden on their specific interactive targets.
|
|
43
43
|
*/
|
|
44
44
|
addSelector(t) {
|
|
@@ -221,8 +221,8 @@ const g = [
|
|
|
221
221
|
];
|
|
222
222
|
class y {
|
|
223
223
|
/** The current version of Supermouse.js */
|
|
224
|
-
static version = "2.0.
|
|
225
|
-
version = "2.0.
|
|
224
|
+
static version = "2.0.5";
|
|
225
|
+
version = "2.0.5";
|
|
226
226
|
/**
|
|
227
227
|
* The Single Source of Truth.
|
|
228
228
|
*
|
package/dist/index.umd.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
${e} {
|
|
3
3
|
cursor: none !important;
|
|
4
4
|
}
|
|
5
|
-
`}destroy(){this.element.remove(),this.styleTag.remove(),this.container.style.cursor="",this.container.classList.remove(this.scopeClass)}}class v{constructor(t,e,s,n){this.state=t,this.options=e,this.getHoverSelector=s,this.onEnableChange=n,this.checkDeviceCapability(),this.checkMotionPreference(),this.bindEvents()}mediaQueryList;mediaQueryHandler;motionQuery;isEnabled=!0;interactionCache=new WeakMap;checkDeviceCapability(){this.options.autoDisableOnMobile&&(this.mediaQueryList=window.matchMedia("(pointer: fine)"),this.updateEnabledState(this.mediaQueryList.matches),this.mediaQueryHandler=t=>{this.updateEnabledState(t.matches)},this.mediaQueryList.addEventListener("change",this.mediaQueryHandler))}checkMotionPreference(){this.motionQuery=window.matchMedia("(prefer-reduced-motion: reduce)"),this.state.reducedMotion=this.motionQuery.matches,this.motionQuery.addEventListener("change",t=>{this.state.reducedMotion=t.matches})}updateEnabledState(t){this.isEnabled=t,this.onEnableChange(t)}parseDOMInteraction(t){if(this.options.resolveInteraction){this.state.interaction=this.options.resolveInteraction(t);return}if(this.interactionCache.has(t)){this.state.interaction=this.interactionCache.get(t);return}const e={};if(this.options.rules)for(const[n,i]of Object.entries(this.options.rules))t.matches(n)&&Object.assign(e,i);const s=t.dataset;for(const n in s)if(n.startsWith("supermouse")){const i=n.slice(10);if(i){const l=i.charAt(0).toLowerCase()+i.slice(1),r=s[n];e[l]=r===""?!0:r}}this.interactionCache.set(t,e),this.state.interaction=e}handleMove=t=>{if(!this.isEnabled||this.options.autoDisableOnMobile&&t.pointerType==="touch")return;let e=t.clientX,s=t.clientY;if(this.options.container&&this.options.container!==document.body){const n=this.options.container.getBoundingClientRect();e-=n.left,s-=n.top}this.state.pointer.x=e,this.state.pointer.y=s,this.state.hasReceivedInput||(this.state.hasReceivedInput=!0,this.state.target.x=this.state.smooth.x=e,this.state.target.y=this.state.smooth.y=s)};handleDown=()=>{this.isEnabled&&(this.state.isDown=!0)};handleUp=()=>{this.isEnabled&&(this.state.isDown=!1)};handleMouseOver=t=>{if(!this.isEnabled)return;const e=t.target;if(e.closest("[data-supermouse-ignore]")){this.state.isNative=!0;return}const s=this.getHoverSelector(),n=e.closest(s);n&&(this.state.isHover=!0,this.state.hoverTarget=n,this.parseDOMInteraction(this.state.hoverTarget));const i=this.options.ignoreOnNative;if(i){const l=i===!0||i==="auto"||i==="tag",r=i===!0||i==="auto"||i==="css";let h=!1;if(l){const a=e.localName;(a==="input"||a==="textarea"||a==="select"||e.isContentEditable)&&(h=!0)}if(!h&&r){const a=window.getComputedStyle(e).cursor;["default","auto","pointer","none","inherit"].includes(a)||(h=!0)}h&&(this.state.isNative=!0)}};handleMouseOut=t=>{if(!this.isEnabled)return;const e=t.target;(e===this.state.hoverTarget||e.contains(this.state.hoverTarget))&&(!t.relatedTarget||!this.state.hoverTarget?.contains(t.relatedTarget))&&(this.state.isHover=!1,this.state.hoverTarget=null,this.state.interaction={}),this.state.isNative&&(this.state.isNative=!1)};handleWindowLeave=()=>{this.options.hideOnLeave&&(this.state.hasReceivedInput=!1)};bindEvents(){window.addEventListener("pointermove",this.handleMove,{passive:!0}),window.addEventListener("pointerdown",this.handleDown,{passive:!0}),window.addEventListener("pointerup",this.handleUp),document.addEventListener("mouseover",this.handleMouseOver),document.addEventListener("mouseout",this.handleMouseOut),document.addEventListener("mouseleave",this.handleWindowLeave)}destroy(){this.mediaQueryList&&this.mediaQueryHandler&&this.mediaQueryList.removeEventListener("change",this.mediaQueryHandler),window.removeEventListener("pointermove",this.handleMove),window.removeEventListener("pointerdown",this.handleDown),window.removeEventListener("pointerup",this.handleUp),document.removeEventListener("mouseover",this.handleMouseOver),document.removeEventListener("mouseout",this.handleMouseOut),document.removeEventListener("mouseleave",this.handleWindowLeave)}}function m(o,t,e){return o+(t-o)*e}function c(o,t,e,s){return m(o,t,1-Math.exp(-e*s))}function g(o,t){return Math.atan2(t,o)*(180/Math.PI)}const p=["a","button","input","textarea","[data-hover]","[data-cursor]"];class y{static version="2.0.
|
|
5
|
+
`}destroy(){this.element.remove(),this.styleTag.remove(),this.container.style.cursor="",this.container.classList.remove(this.scopeClass)}}class v{constructor(t,e,s,n){this.state=t,this.options=e,this.getHoverSelector=s,this.onEnableChange=n,this.checkDeviceCapability(),this.checkMotionPreference(),this.bindEvents()}mediaQueryList;mediaQueryHandler;motionQuery;isEnabled=!0;interactionCache=new WeakMap;checkDeviceCapability(){this.options.autoDisableOnMobile&&(this.mediaQueryList=window.matchMedia("(pointer: fine)"),this.updateEnabledState(this.mediaQueryList.matches),this.mediaQueryHandler=t=>{this.updateEnabledState(t.matches)},this.mediaQueryList.addEventListener("change",this.mediaQueryHandler))}checkMotionPreference(){this.motionQuery=window.matchMedia("(prefer-reduced-motion: reduce)"),this.state.reducedMotion=this.motionQuery.matches,this.motionQuery.addEventListener("change",t=>{this.state.reducedMotion=t.matches})}updateEnabledState(t){this.isEnabled=t,this.onEnableChange(t)}parseDOMInteraction(t){if(this.options.resolveInteraction){this.state.interaction=this.options.resolveInteraction(t);return}if(this.interactionCache.has(t)){this.state.interaction=this.interactionCache.get(t);return}const e={};if(this.options.rules)for(const[n,i]of Object.entries(this.options.rules))t.matches(n)&&Object.assign(e,i);const s=t.dataset;for(const n in s)if(n.startsWith("supermouse")){const i=n.slice(10);if(i){const l=i.charAt(0).toLowerCase()+i.slice(1),r=s[n];e[l]=r===""?!0:r}}this.interactionCache.set(t,e),this.state.interaction=e}handleMove=t=>{if(!this.isEnabled||this.options.autoDisableOnMobile&&t.pointerType==="touch")return;let e=t.clientX,s=t.clientY;if(this.options.container&&this.options.container!==document.body){const n=this.options.container.getBoundingClientRect();e-=n.left,s-=n.top}this.state.pointer.x=e,this.state.pointer.y=s,this.state.hasReceivedInput||(this.state.hasReceivedInput=!0,this.state.target.x=this.state.smooth.x=e,this.state.target.y=this.state.smooth.y=s)};handleDown=()=>{this.isEnabled&&(this.state.isDown=!0)};handleUp=()=>{this.isEnabled&&(this.state.isDown=!1)};handleMouseOver=t=>{if(!this.isEnabled)return;const e=t.target;if(e.closest("[data-supermouse-ignore]")){this.state.isNative=!0;return}const s=this.getHoverSelector(),n=e.closest(s);n&&(this.state.isHover=!0,this.state.hoverTarget=n,this.parseDOMInteraction(this.state.hoverTarget));const i=this.options.ignoreOnNative;if(i){const l=i===!0||i==="auto"||i==="tag",r=i===!0||i==="auto"||i==="css";let h=!1;if(l){const a=e.localName;(a==="input"||a==="textarea"||a==="select"||e.isContentEditable)&&(h=!0)}if(!h&&r){const a=window.getComputedStyle(e).cursor;["default","auto","pointer","none","inherit"].includes(a)||(h=!0)}h&&(this.state.isNative=!0)}};handleMouseOut=t=>{if(!this.isEnabled)return;const e=t.target;(e===this.state.hoverTarget||e.contains(this.state.hoverTarget))&&(!t.relatedTarget||!this.state.hoverTarget?.contains(t.relatedTarget))&&(this.state.isHover=!1,this.state.hoverTarget=null,this.state.interaction={}),this.state.isNative&&(this.state.isNative=!1)};handleWindowLeave=()=>{this.options.hideOnLeave&&(this.state.hasReceivedInput=!1)};bindEvents(){window.addEventListener("pointermove",this.handleMove,{passive:!0}),window.addEventListener("pointerdown",this.handleDown,{passive:!0}),window.addEventListener("pointerup",this.handleUp),document.addEventListener("mouseover",this.handleMouseOver),document.addEventListener("mouseout",this.handleMouseOut),document.addEventListener("mouseleave",this.handleWindowLeave)}destroy(){this.mediaQueryList&&this.mediaQueryHandler&&this.mediaQueryList.removeEventListener("change",this.mediaQueryHandler),window.removeEventListener("pointermove",this.handleMove),window.removeEventListener("pointerdown",this.handleDown),window.removeEventListener("pointerup",this.handleUp),document.removeEventListener("mouseover",this.handleMouseOver),document.removeEventListener("mouseout",this.handleMouseOut),document.removeEventListener("mouseleave",this.handleWindowLeave)}}function m(o,t,e){return o+(t-o)*e}function c(o,t,e,s){return m(o,t,1-Math.exp(-e*s))}function g(o,t){return Math.atan2(t,o)*(180/Math.PI)}const p=["a","button","input","textarea","[data-hover]","[data-cursor]"];class y{static version="2.0.5";version="2.0.5";state;options;plugins=[];stage;input;rafId=0;lastTime=0;isRunning=!1;hoverSelectors;constructor(t={}){this.options={smoothness:.15,enableTouch:!1,autoDisableOnMobile:!0,ignoreOnNative:"auto",hideCursor:!0,hideOnLeave:!0,autoStart:!0,container:document.body,...t},this.options.container||(this.options.container=document.body),this.state={pointer:{x:-100,y:-100},target:{x:-100,y:-100},smooth:{x:-100,y:-100},velocity:{x:0,y:0},angle:0,isDown:!1,isHover:!1,isNative:!1,forcedCursor:null,hoverTarget:null,reducedMotion:!1,hasReceivedInput:!1,shape:null,interaction:{}},this.options.hoverSelectors?this.hoverSelectors=new Set(this.options.hoverSelectors):this.hoverSelectors=new Set(p),this.stage=new f(this.options.container,!!this.options.hideCursor),this.hoverSelectors.forEach(e=>this.stage.addSelector(e)),this.input=new v(this.state,this.options,()=>Array.from(this.hoverSelectors).join(", "),e=>{e||this.resetPosition()}),this.options.plugins&&this.options.plugins.forEach(e=>this.use(e)),this.init()}getPlugin(t){return this.plugins.find(e=>e.name===t)}get isEnabled(){return this.input.isEnabled}enablePlugin(t){const e=this.getPlugin(t);e&&e.isEnabled===!1&&(e.isEnabled=!0,e.onEnable?.(this))}disablePlugin(t){const e=this.getPlugin(t);e&&e.isEnabled!==!1&&(e.isEnabled=!1,e.onDisable?.(this))}togglePlugin(t){const e=this.getPlugin(t);e&&(e.isEnabled===!1?this.enablePlugin(t):this.disablePlugin(t))}registerHoverTarget(t){this.hoverSelectors.has(t)||(this.hoverSelectors.add(t),this.stage.addSelector(t))}get container(){return this.stage.element}setCursor(t){this.state.forcedCursor=t}init(){this.options.autoStart&&this.startLoop()}enable(){this.input.isEnabled=!0,this.stage.setNativeCursor("none")}disable(){this.input.isEnabled=!1,this.stage.setNativeCursor("auto"),this.resetPosition()}use(t){return this.plugins.find(e=>e.name===t.name)?(console.warn(`[Supermouse] Plugin "${t.name}" already installed.`),this):(t.isEnabled===void 0&&(t.isEnabled=!0),this.plugins.push(t),this.plugins.sort((e,s)=>(e.priority||0)-(s.priority||0)),t.install?.(this),this)}resetPosition(){const t={x:-100,y:-100};this.state.pointer={...t},this.state.target={...t},this.state.smooth={...t},this.state.velocity={x:0,y:0},this.state.angle=0,this.state.hasReceivedInput=!1,this.state.shape=null,this.state.interaction={}}startLoop(){this.isRunning||(this.isRunning=!0,this.lastTime=performance.now(),this.tick(this.lastTime))}step(t){this.tick(t)}runPluginSafe(t,e){if(t.isEnabled!==!1)try{t.update?.(this,e)}catch(s){console.error(`[Supermouse] Plugin '${t.name}' crashed and has been disabled.`,s),t.isEnabled=!1,t.onDisable?.(this)}}tick=t=>{const e=t-this.lastTime,s=Math.min(e/1e3,.1);this.lastTime=t;const n=this.input.isEnabled&&!this.state.isNative&&this.state.hasReceivedInput;if(this.stage.setVisibility(n),this.input.isEnabled&&this.options.hideCursor){let i="auto";this.state.forcedCursor!==null?i=this.state.forcedCursor:i=this.state.isNative||!this.state.hasReceivedInput?"auto":"none",this.stage.setNativeCursor(i)}if(this.input.isEnabled){this.state.target.x=this.state.pointer.x,this.state.target.y=this.state.pointer.y;for(let a=0;a<this.plugins.length;a++)this.runPluginSafe(this.plugins[a],e);const i=this.options.smoothness,l=this.state.reducedMotion?1e3:1/i*2;this.state.smooth.x=c(this.state.smooth.x,this.state.target.x,l,s),this.state.smooth.y=c(this.state.smooth.y,this.state.target.y,l,s);const r=this.state.target.x-this.state.smooth.x,h=this.state.target.y-this.state.smooth.y;this.state.velocity.x=r,this.state.velocity.y=h,(Math.abs(r)>.1||Math.abs(h)>.1)&&(this.state.angle=g(r,h))}else{this.state.smooth.x=-100,this.state.smooth.y=-100,this.state.pointer.x=-100,this.state.pointer.y=-100,this.state.velocity.x=0,this.state.velocity.y=0;for(let i=0;i<this.plugins.length;i++)this.runPluginSafe(this.plugins[i],e)}this.options.autoStart&&this.isRunning&&(this.rafId=requestAnimationFrame(this.tick))};destroy(){this.isRunning=!1,cancelAnimationFrame(this.rafId),this.input.destroy(),this.stage.destroy(),this.plugins.forEach(t=>t.destroy?.(this)),this.plugins=[]}}u.DEFAULT_HOVER_SELECTORS=p,u.Supermouse=y,Object.defineProperty(u,Symbol.toStringTag,{value:"Module"})}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@supermousejs/core",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.5",
|
|
4
|
+
"description": "The core physics engine and state manager for Supermouse.",
|
|
4
5
|
"main": "dist/index.umd.js",
|
|
5
6
|
"module": "dist/index.mjs",
|
|
6
7
|
"types": "dist/index.d.ts",
|
|
@@ -20,6 +21,15 @@
|
|
|
20
21
|
"javascript",
|
|
21
22
|
"web"
|
|
22
23
|
],
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "git+https://github.com/Whitestar14/supermouse-js.git",
|
|
27
|
+
"directory": "packages/core"
|
|
28
|
+
},
|
|
29
|
+
"bugs": {
|
|
30
|
+
"url": "https://github.com/Whitestar14/supermouse-js/issues"
|
|
31
|
+
},
|
|
32
|
+
"homepage": "https://github.com/Whitestar14/supermouse-js/tree/main/packages/core#readme",
|
|
23
33
|
"dependencies": {},
|
|
24
34
|
"devDependencies": {},
|
|
25
35
|
"exports": {
|
package/src/systems/Stage.ts
CHANGED
|
@@ -1,37 +1,36 @@
|
|
|
1
|
-
|
|
2
1
|
let stageCount = 0;
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* The Environment / DOM Manager.
|
|
6
|
-
*
|
|
7
|
-
* This class handles the DOM container where the cursor lives and manages the global CSS
|
|
5
|
+
*
|
|
6
|
+
* This class handles the DOM container where the cursor lives and manages the global CSS
|
|
8
7
|
* required to hide the default OS cursor without flickering.
|
|
9
|
-
*
|
|
8
|
+
*
|
|
10
9
|
* ## Why CSS Injection?
|
|
11
|
-
* Simply adding `cursor: none` to the body isn't enough. Interactive elements like `<input>`
|
|
10
|
+
* Simply adding `cursor: none` to the body isn't enough. Interactive elements like `<input>`
|
|
12
11
|
* or `<a>` often have their own user-agent styles that force `cursor: text` or `cursor: pointer`.
|
|
13
12
|
* This results in the "double cursor" glitch.
|
|
14
|
-
*
|
|
13
|
+
*
|
|
15
14
|
* The Stage system generates a scoped stylesheet that aggressively targets registered selectors
|
|
16
15
|
* with `cursor: none !important` to ensure a seamless experience.
|
|
17
|
-
*
|
|
16
|
+
*
|
|
18
17
|
* @internal This is an internal system class instantiated by `Supermouse`.
|
|
19
18
|
*/
|
|
20
19
|
export class Stage {
|
|
21
20
|
/** The container element appended to the document. Plugins must append here. */
|
|
22
21
|
public readonly element: HTMLDivElement;
|
|
23
|
-
|
|
22
|
+
|
|
24
23
|
private styleTag: HTMLStyleElement;
|
|
25
24
|
private id: string;
|
|
26
25
|
private scopeClass: string;
|
|
27
|
-
|
|
26
|
+
|
|
28
27
|
// Cache to prevent redundant DOM updates
|
|
29
28
|
private currentCursorState: 'none' | 'auto' | '' | null = null;
|
|
30
29
|
|
|
31
30
|
// Defaults for CSS hiding. We must override user-agent styles on these elements
|
|
32
31
|
// to prevent the native cursor from popping through.
|
|
33
32
|
private selectors: Set<string> = new Set([
|
|
34
|
-
'a', 'button', 'input', 'textarea', 'select',
|
|
33
|
+
'a', 'button', 'input', 'textarea', 'select',
|
|
35
34
|
'[role="button"]', '[tabindex]'
|
|
36
35
|
]);
|
|
37
36
|
|
|
@@ -43,7 +42,7 @@ export class Stage {
|
|
|
43
42
|
const instanceId = stageCount++;
|
|
44
43
|
this.id = `supermouse-style-${instanceId}`;
|
|
45
44
|
this.scopeClass = `supermouse-scope-${instanceId}`;
|
|
46
|
-
|
|
45
|
+
|
|
47
46
|
const isBody = container === document.body;
|
|
48
47
|
|
|
49
48
|
// 1. Create Container
|
|
@@ -58,7 +57,7 @@ export class Stage {
|
|
|
58
57
|
opacity: '1',
|
|
59
58
|
transition: 'opacity 0.15s ease'
|
|
60
59
|
});
|
|
61
|
-
|
|
60
|
+
|
|
62
61
|
// Ensure parent is relative if we are using absolute positioning
|
|
63
62
|
if (!isBody) {
|
|
64
63
|
const computed = window.getComputedStyle(container);
|
|
@@ -66,7 +65,7 @@ export class Stage {
|
|
|
66
65
|
container.style.position = 'relative';
|
|
67
66
|
}
|
|
68
67
|
}
|
|
69
|
-
|
|
68
|
+
|
|
70
69
|
container.appendChild(this.element);
|
|
71
70
|
|
|
72
71
|
// 2. Create Dynamic Style Tag
|
|
@@ -87,7 +86,7 @@ export class Stage {
|
|
|
87
86
|
|
|
88
87
|
/**
|
|
89
88
|
* Adds a new CSS selector to the "Hide Native Cursor" list.
|
|
90
|
-
* Called by `Supermouse` (and subsequently plugins) during install to ensure
|
|
89
|
+
* Called by `Supermouse` (and subsequently plugins) during install to ensure
|
|
91
90
|
* the native cursor is hidden on their specific interactive targets.
|
|
92
91
|
*/
|
|
93
92
|
public addSelector(selector: string) {
|
|
@@ -133,7 +132,7 @@ export class Stage {
|
|
|
133
132
|
this.styleTag.innerText = '';
|
|
134
133
|
return;
|
|
135
134
|
}
|
|
136
|
-
|
|
135
|
+
|
|
137
136
|
// Scoped Selector Logic:
|
|
138
137
|
// We prepend the scope class to every selector to ensure we don't bleed into
|
|
139
138
|
// other parts of the page if the user is using a specific container.
|
package/src/types.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
import { Supermouse } from './Supermouse';
|
|
3
2
|
|
|
4
3
|
export interface MousePosition {
|
|
@@ -15,7 +14,7 @@ export interface ShapeState {
|
|
|
15
14
|
/**
|
|
16
15
|
* The Interface for interaction state.
|
|
17
16
|
* Plugins should use Module Augmentation to add their specific properties to this interface.
|
|
18
|
-
*
|
|
17
|
+
*
|
|
19
18
|
* @example
|
|
20
19
|
* declare module '@supermousejs/core' {
|
|
21
20
|
* interface InteractionState {
|
|
@@ -25,8 +24,8 @@ export interface ShapeState {
|
|
|
25
24
|
* }
|
|
26
25
|
*/
|
|
27
26
|
export interface InteractionState {
|
|
28
|
-
/**
|
|
29
|
-
* Allow arbitrary keys for rapid prototyping.
|
|
27
|
+
/**
|
|
28
|
+
* Allow arbitrary keys for rapid prototyping.
|
|
30
29
|
* For type safety, use module augmentation to define expected keys.
|
|
31
30
|
*/
|
|
32
31
|
[key: string]: any;
|
|
@@ -49,8 +48,8 @@ export interface MouseState {
|
|
|
49
48
|
isHover: boolean;
|
|
50
49
|
/** Whether the native cursor is currently forced visible by internal logic (e.g. input elements). */
|
|
51
50
|
isNative: boolean;
|
|
52
|
-
/**
|
|
53
|
-
* If set, this overrides all auto-detection logic.
|
|
51
|
+
/**
|
|
52
|
+
* If set, this overrides all auto-detection logic.
|
|
54
53
|
* 'auto' = Force Native Cursor (Show)
|
|
55
54
|
* 'none' = Force Custom Cursor (Hide Native)
|
|
56
55
|
* null = Let the Core decide based on isNative/isHover
|
|
@@ -74,8 +73,8 @@ export type NativeIgnoreStrategy = 'auto' | 'tag' | 'css';
|
|
|
74
73
|
* Configuration options passed to the Supermouse constructor.
|
|
75
74
|
*/
|
|
76
75
|
export interface SupermouseOptions {
|
|
77
|
-
/**
|
|
78
|
-
* The interpolation factor (0 to 1). Lower is smoother/slower.
|
|
76
|
+
/**
|
|
77
|
+
* The interpolation factor (0 to 1). Lower is smoother/slower.
|
|
79
78
|
* @default 0.15
|
|
80
79
|
*/
|
|
81
80
|
smoothness?: number;
|