@@ -35,7 +35,10 @@ export class Pointeract<T extends ModuleInputCtor = []> {
3535 this . options = options ;
3636 modules . forEach ( ( module ) => {
3737 const instance = new module (
38- this . moduleUtils as PointeractInterface [ 'moduleUtils' ] ,
38+ this . #augment,
39+ this . dispatch ,
40+ this . #getNthPointer,
41+ this . #toTargetCoords,
3942 this . #window,
4043 this . #pointers,
4144 this . #element,
@@ -51,73 +54,69 @@ export class Pointeract<T extends ModuleInputCtor = []> {
5154 this . #subscribers[ type ] ?. add ( listener ) ;
5255 return this ;
5356 } ;
54- off < K extends keyof Events < T > > ( type : K , listener : ( event : Events < T > [ K ] ) => void ) {
57+
58+ off = < K extends keyof Events < T > > ( type : K , listener : ( event : Events < T > [ K ] ) => void ) => {
5559 this . #subscribers[ type ] ?. delete ( listener ) ;
5660 return this ;
57- }
61+ } ;
62+
63+ #getNthPointer = ( n : number ) => {
64+ const error = new Error ( '[Pointeract] Invalid pointer index.' ) ;
65+ if ( n < 0 || n >= this . #pointers. size ) throw error ;
66+ let i = 0 ;
67+ for ( const value of this . #pointers. values ( ) ) {
68+ if ( i === n ) return value ;
69+ i ++ ;
70+ }
71+ throw error ;
72+ } ;
5873
59- private moduleUtils = {
60- getNthPointer : ( n : number ) => {
61- const error = new Error ( '[Pointeract] Invalid pointer index.' ) ;
62- if ( n < 0 || n >= this . #pointers. size ) throw error ;
63- let i = 0 ;
64- for ( const value of this . #pointers. values ( ) ) {
65- if ( i === n ) return value ;
66- i ++ ;
67- }
68- throw error ;
69- } ,
70-
71- // Screen to Container
72- toTargetCoords : ( raw : Coordinates ) => {
73- if ( this . options . coordinateOutput === 'absolute' ) return raw ;
74- const rect = this . #element. getBoundingClientRect ( ) ;
75- raw . x -= rect . left ;
76- raw . y -= rect . top ;
77- if ( this . options . coordinateOutput === 'relative' ) return raw ;
78- raw . x /= rect . width ;
79- raw . y /= rect . height ;
80- return raw ;
81- } ,
82-
83- dispatch : < N extends keyof Events < T > > (
84- ...args : undefined extends Events < T > [ N ] ? [ N ] : [ N , Events < T > [ N ] ]
85- ) => {
86- const name = args [ 0 ] ;
87- const e = args [ 1 ] ;
88- let lastResult : boolean | Events < T > [ N ] = true ;
89- for ( const value of Object . values ( this . #modules) ) {
90- if ( ! value . modifiers || ! ( name in value . modifiers ) ) continue ;
91- lastResult =
92- e === undefined
93- ? ( value . modifiers [ name ] as ( ) => boolean ) ( )
94- : (
95- value . modifiers [ name ] as (
96- detail ?: Events < T > [ N ] ,
97- ) => boolean | Events < T > [ N ]
98- ) ( e ) ;
99- if ( lastResult === false ) return ;
100- }
101- let event : Events < T > [ N ] ;
102- if ( lastResult === true ) event = e as Events < T > [ N ] ;
103- else event = lastResult ;
104- this . #subscribers[ name ] ?. forEach ( ( listener ) => listener ( event ) ) ;
105- } ,
106-
107- augment : ( aug : GeneralObject ) => {
108- Object . entries ( aug ) . forEach ( ( [ key , value ] ) => ( this [ key as '_augmentSlot' ] = value ) ) ;
109- } ,
74+ // Screen to Container
75+ #toTargetCoords = ( raw : Coordinates ) => {
76+ if ( this . options . coordinateOutput === 'absolute' ) return raw ;
77+ const rect = this . #element. getBoundingClientRect ( ) ;
78+ raw . x -= rect . left ;
79+ raw . y -= rect . top ;
80+ if ( this . options . coordinateOutput === 'relative' ) return raw ;
81+ raw . x /= rect . width ;
82+ raw . y /= rect . height ;
83+ return raw ;
11084 } ;
11185
112- dispatch = this . moduleUtils . dispatch ;
86+ dispatch = < N extends keyof Events < T > > (
87+ ...args : undefined extends Events < T > [ N ] ? [ N ] : [ N , Events < T > [ N ] ]
88+ ) => {
89+ const name = args [ 0 ] ;
90+ const e = args [ 1 ] ;
91+ let lastResult : boolean | Events < T > [ N ] = true ;
92+ for ( const value of Object . values ( this . #modules) ) {
93+ if ( ! value . modifiers || ! ( name in value . modifiers ) ) continue ;
94+ lastResult =
95+ e === undefined
96+ ? ( value . modifiers [ name ] as ( ) => boolean ) ( )
97+ : ( value . modifiers [ name ] as ( detail ?: Events < T > [ N ] ) => boolean | Events < T > [ N ] ) (
98+ e ,
99+ ) ;
100+ if ( lastResult === false ) return ;
101+ }
102+ let event : Events < T > [ N ] ;
103+ if ( lastResult === true ) event = e as Events < T > [ N ] ;
104+ else event = lastResult ;
105+ this . #subscribers[ name ] ?. forEach ( ( listener ) => listener ( event ) ) ;
106+ } ;
107+
108+ #augment = ( aug : GeneralObject ) => {
109+ const descriptors = Object . getOwnPropertyDescriptors ( aug ) ;
110+ Object . defineProperties ( this , descriptors ) ;
111+ } ;
113112
114- #runHooks< K extends HookKeys > ( field : K , ...args : Parameters < Required < BaseModule > [ K ] > ) {
113+ #runHooks = < K extends HookKeys > ( field : K , ...args : Parameters < Required < BaseModule > [ K ] > ) => {
115114 Object . values ( this . #modules) . forEach ( ( module ) => {
116115 const hook = module [ field ] ;
117116 // oxlint-disable-next-line typescript/no-explicit-any
118117 if ( hook ) hook ( ...( args as any ) ) ;
119118 } ) ;
120- }
119+ } ;
121120
122121 #onPointerDown = ( e : PointerEvent ) => {
123122 if ( this . #pointers. size >= 2 ) return ;
0 commit comments