`;
}
private _handleLinksSlotChange() {
this.determineLevel();
this.requestUpdate();
}
private handlePointerEnter(e: PointerEvent) {
if (e.pointerType === 'mouse') {
this.open = true;
}
}
private handlePointerLeave(e: PointerEvent) {
if (e.pointerType === 'mouse') {
this.open = false;
}
}
private handleClick(e: Event) {
let preventDefault = false;
if (this.slottedElements.length) {
preventDefault = true;
e.preventDefault();
this.open = !this.open;
}
const event = new CustomEvent('on-click', {
detail: { origEvent: e, defaultPrevented: preventDefault },
});
this.dispatchEvent(event);
}
private handleClickOut(e: Event) {
if (!e.composedPath().includes(this)) {
this.open = false;
}
}
private determineLevel() {
const parentTagName = this.shadowRoot!.host.parentNode!.nodeName;
if (parentTagName == 'KYN-HEADER-NAV') {
this.level = 1;
} else {
this.level = 2;
}
}
override firstUpdated() {
this.determineLevel();
}
override connectedCallback() {
super.connectedCallback();
document.addEventListener('click', (e) => this.handleClickOut(e));
this.testBreakpoint();
window?.addEventListener(
'resize',
debounce(() => {
this.testBreakpoint();
})
);
}
override disconnectedCallback() {
document.removeEventListener('click', (e) => this.handleClickOut(e));
window?.removeEventListener(
'resize',
debounce(() => {
this.testBreakpoint();
})
);
super.disconnectedCallback();
}
private testBreakpoint() {
const nav = querySelectorDeep('kyn-header');
if (nav) {
this.breakpointHit = nav!.breakpointHit;
}
}
}
declare global {
interface HTMLElementTagNameMap {
'kyn-header-nav-link': HeaderLink;
}
}