@ -173,38 +173,60 @@ export function handle_event_propagation(handler_element, event) {
}
}
} ) ;
} ) ;
/** @param {Element} next_target */
try {
function next ( next _target ) {
/ * *
current _target = next _target ;
* @ type { unknown }
/** @type {null | Element} */
* /
var parent _element = next _target . parentNode || /** @type {any} */ ( next _target ) . host || null ;
var throw _error ;
/ * *
try {
* @ type { unknown [ ] }
// @ts-expect-error
* /
var delegated = next _target [ '__' + event _name ] ;
var other _errors = [ ] ;
yield _event _updates ( ( ) => {
if ( delegated !== undefined && ! ( /** @type {any} */ ( next _target ) . disabled ) ) {
while ( current _target !== null ) {
if ( is _array ( delegated ) ) {
/** @type {null | Element} */
var [ fn , ... data ] = delegated ;
var parent _element =
fn . apply ( next _target , [ event , ... data ] ) ;
current _target . parentNode || /** @type {any} */ ( current _target ) . host || null ;
} else {
delegated . call ( next _target , event ) ;
try {
// @ts-expect-error
var delegated = current _target [ '__' + event _name ] ;
if ( delegated !== undefined && ! ( /** @type {any} */ ( current _target ) . disabled ) ) {
if ( is _array ( delegated ) ) {
var [ fn , ... data ] = delegated ;
fn . apply ( current _target , [ event , ... data ] ) ;
} else {
delegated . call ( current _target , event ) ;
}
}
} catch ( error ) {
if ( throw _error ) {
other _errors . push ( error ) ;
} else {
throw _error = error ;
}
}
if (
event . cancelBubble ||
parent _element === handler _element ||
parent _element === null ||
current _target === handler _element
) {
break ;
}
}
current _target = parent _element ;
}
}
} finally {
} ) ;
if (
if ( throw _error ) {
! event . cancelBubble &&
for ( let error of other _errors ) {
parent _element !== handler _element &&
// Throw the rest of the errors, one-by-one on a microtask
parent _element !== null &&
queueMicrotask ( ( ) => {
next _target !== handler _element
throw error ;
) {
} ) ;
next ( parent _element ) ;
}
}
throw throw _error ;
}
}
}
try {
yield _event _updates ( ( ) => next ( /** @type {Element} */ ( current _target ) ) ) ;
} finally {
} finally {
// @ts-expect-error is used above
// @ts-expect-error is used above
event . _ _root = handler _element ;
event . _ _root = handler _element ;