From 2a1b56c6e30154676f2e9da34b7873a1288b452b Mon Sep 17 00:00:00 2001 From: Buddy Date: Wed, 10 Jun 2026 21:45:40 -0700 Subject: [PATCH] refactor: remove leaflet-request-icon event protocol The discovery handshake (marker dispatching leaflet-request-icon on children, icons listening and responding with icon-changed) existed to handle the edge case where icon definitions register before marker definitions. Since bundled imports register all components in deterministic order and deep imports are an advanced use case left to the consumer, remove the event entirely. icon-changed bubbling alone covers all practical timing scenarios. - Remove LeafletRequestIconEvent type and HTMLElementEventMap entry - Remove #onRequest handler and addEventListener/removeEventListener calls from both leaflet-icon and leaflet-div-icon - Remove child-iteration dispatch loop from leaflet-marker --- src/components/leaflet-div-icon.ts | 6 ------ src/components/leaflet-icon.ts | 6 ------ src/components/leaflet-marker.ts | 3 --- src/core/register.ts | 3 --- 4 files changed, 18 deletions(-) diff --git a/src/components/leaflet-div-icon.ts b/src/components/leaflet-div-icon.ts index 9c6ca9d..64b91a9 100644 --- a/src/components/leaflet-div-icon.ts +++ b/src/components/leaflet-div-icon.ts @@ -16,15 +16,10 @@ const JSON_KEYS = new Set(['iconSize', 'iconAnchor', 'popupAnchor', 'tooltipAnch export class LeafletDivIcon extends HTMLElement { #obj?: Icon; #observer?: MutationObserver; - #onRequest = () => { - if (!this.#obj) return; - emitIconChanged(this, this.#obj); - }; connectedCallback() { this.#applyIcon(); emitIconChanged(this, this.#obj); - this.addEventListener('leaflet-request-icon', this.#onRequest); this.#observer = new MutationObserver(() => { this.#applyIcon(); @@ -38,7 +33,6 @@ export class LeafletDivIcon extends HTMLElement { } disconnectedCallback() { - this.removeEventListener('leaflet-request-icon', this.#onRequest); this.#observer?.disconnect(); this.#observer = undefined; emitIconChanged(this, null); diff --git a/src/components/leaflet-icon.ts b/src/components/leaflet-icon.ts index 0ba2ddc..56d8383 100644 --- a/src/components/leaflet-icon.ts +++ b/src/components/leaflet-icon.ts @@ -26,19 +26,13 @@ const JSON_KEYS = new Set([ export class LeafletIcon extends HTMLElement { #obj?: Icon; - #onRequest = () => { - if (!this.#obj) return; - emitIconChanged(this, this.#obj); - }; connectedCallback() { this.#applyIcon(); emitIconChanged(this, this.#obj); - this.addEventListener('leaflet-request-icon', this.#onRequest); } disconnectedCallback() { - this.removeEventListener('leaflet-request-icon', this.#onRequest); emitIconChanged(this, null); } diff --git a/src/components/leaflet-marker.ts b/src/components/leaflet-marker.ts index 73b296f..b9bb5e8 100644 --- a/src/components/leaflet-marker.ts +++ b/src/components/leaflet-marker.ts @@ -27,9 +27,6 @@ export class LeafletMarker extends WithProps(HTMLElement, PROPS) { this.#obj.on('dragend move', this.#onChange, this); registerChildren(this, this.#obj); this.addEventListener('icon-changed', this.#onIconChanged); - for (const child of this.children) { - child.dispatchEvent(new CustomEvent('leaflet-request-icon')); - } } disconnectedCallback() { diff --git a/src/core/register.ts b/src/core/register.ts index 68cb5a1..d32ce38 100644 --- a/src/core/register.ts +++ b/src/core/register.ts @@ -13,15 +13,12 @@ export type LeafletLayerEvent = CustomEvent<{ layer: Layer }>; export type LeafletIconChangedEvent = CustomEvent<{ icon: Icon | null }>; -export type LeafletRequestIconEvent = CustomEvent>; - declare global { interface HTMLElementEventMap { 'leaflet-register': LeafletRegisterEvent; 'leaflet-add-layer': LeafletLayerEvent; 'leaflet-remove-layer': LeafletLayerEvent; 'icon-changed': LeafletIconChangedEvent; - 'leaflet-request-icon': LeafletRequestIconEvent; } }