Files
headroom/frontend/node_modules/happy-dom/lib/event/Event.js
Santhosh Janardhanan de2d83092e feat: Reinitialize frontend with SvelteKit and TypeScript
- Delete old Vite+Svelte frontend
- Initialize new SvelteKit project with TypeScript
- Configure Tailwind CSS v4 + DaisyUI
- Implement JWT authentication with auto-refresh
- Create login page with form validation (Zod)
- Add protected route guards
- Update Docker configuration for single-stage build
- Add E2E tests with Playwright (6/11 passing)
- Fix Svelte 5 reactivity with $state() runes

Known issues:
- 5 E2E tests failing (timing/async issues)
- Token refresh implementation needs debugging
- Validation error display timing
2026-02-17 16:19:59 -05:00

187 lines
5.1 KiB
JavaScript

import * as PropertySymbol from '../PropertySymbol.js';
import NodeTypeEnum from '../nodes/node/NodeTypeEnum.js';
import EventPhaseEnum from './EventPhaseEnum.js';
/**
* Event.
*/
export default class Event {
static NONE = EventPhaseEnum.none;
static CAPTURING_PHASE = EventPhaseEnum.capturing;
static AT_TARGET = EventPhaseEnum.atTarget;
static BUBBLING_PHASE = EventPhaseEnum.bubbling;
NONE = Event.NONE;
CAPTURING_PHASE = Event.CAPTURING_PHASE;
AT_TARGET = Event.AT_TARGET;
BUBBLING_PHASE = Event.BUBBLING_PHASE;
[PropertySymbol.composed] = false;
[PropertySymbol.bubbles] = false;
[PropertySymbol.cancelable] = false;
[PropertySymbol.defaultPrevented] = false;
[PropertySymbol.eventPhase] = EventPhaseEnum.none;
[PropertySymbol.timeStamp] = performance.now();
[PropertySymbol.type];
[PropertySymbol.dispatching] = false;
[PropertySymbol.immediatePropagationStopped] = false;
[PropertySymbol.propagationStopped] = false;
[PropertySymbol.target] = null;
[PropertySymbol.currentTarget] = null;
[PropertySymbol.isInPassiveEventListener] = false;
/**
* Constructor.
*
* @param type Event type.
* @param [eventInit] Event init.
*/
constructor(type, eventInit = null) {
this[PropertySymbol.type] = type;
this[PropertySymbol.bubbles] = eventInit?.bubbles ?? false;
this[PropertySymbol.cancelable] = eventInit?.cancelable ?? false;
this[PropertySymbol.composed] = eventInit?.composed ?? false;
}
/**
* Returns composed.
*
* @returns Composed.
*/
get composed() {
return this[PropertySymbol.composed];
}
/**
* Returns bubbles.
*
* @returns Bubbles.
*/
get bubbles() {
return this[PropertySymbol.bubbles];
}
/**
* Returns cancelable.
*
* @returns Cancelable.
*/
get cancelable() {
return this[PropertySymbol.cancelable];
}
/**
* Returns defaultPrevented.
*
* @returns Default prevented.
*/
get defaultPrevented() {
return this[PropertySymbol.defaultPrevented];
}
/**
* Returns eventPhase.
*
* @returns Event phase.
*/
get eventPhase() {
return this[PropertySymbol.eventPhase];
}
/**
* Returns timeStamp.
*
* @returns Time stamp.
*/
get timeStamp() {
return this[PropertySymbol.timeStamp];
}
/**
* Returns type.
*
* @returns Type.
*/
get type() {
return this[PropertySymbol.type];
}
/**
* Returns target.
*
* @returns Target.
*/
get target() {
return this[PropertySymbol.target];
}
/**
* Returns target.
*
* @returns Target.
*/
get currentTarget() {
return this[PropertySymbol.currentTarget];
}
/**
* Returns "true" if propagation has been stopped.
*
* @returns "true" if propagation has been stopped.
*/
get cancelBubble() {
return this[PropertySymbol.propagationStopped];
}
/**
* Returns composed path.
*
* @returns Composed path.
*/
composedPath() {
if (!this[PropertySymbol.target]) {
return [];
}
const composedPath = [];
let eventTarget = this[PropertySymbol.target];
while (eventTarget) {
composedPath.push(eventTarget);
if (eventTarget.parentNode) {
eventTarget = eventTarget.parentNode;
}
else if (this[PropertySymbol.composed] &&
eventTarget[PropertySymbol.nodeType] === NodeTypeEnum.documentFragmentNode &&
eventTarget.host) {
eventTarget = eventTarget.host;
}
else if (eventTarget[PropertySymbol.nodeType] === NodeTypeEnum.documentNode &&
// The "load" event is a special case. It should not bubble up to the window.
this[PropertySymbol.type] !== 'load') {
eventTarget = eventTarget[PropertySymbol.window];
}
else {
break;
}
}
return composedPath;
}
/**
* Init event.
*
* @deprecated
* @param type Type.
* @param [bubbles=false] "true" if it bubbles.
* @param [cancelable=false] "true" if it cancelable.
*/
initEvent(type, bubbles = false, cancelable = false) {
this[PropertySymbol.type] = type;
this[PropertySymbol.bubbles] = bubbles;
this[PropertySymbol.cancelable] = cancelable;
}
/**
* Prevents default.
*/
preventDefault() {
if (!this[PropertySymbol.isInPassiveEventListener] && this.cancelable) {
this[PropertySymbol.defaultPrevented] = true;
}
}
/**
* Stops immediate propagation.
*/
stopImmediatePropagation() {
this[PropertySymbol.immediatePropagationStopped] = true;
}
/**
* Stops propagation.
*/
stopPropagation() {
this[PropertySymbol.propagationStopped] = true;
}
}
//# sourceMappingURL=Event.js.map