You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
leaflet-components/docs/README.md

2.3 KiB

Design docs

These describe how leaflet-components is built and why — the load-bearing decisions, in their current form. They are not a usage guide (that's the top-level README.md) and not a working cheat-sheet (that's CLAUDE.md).

Doc Covers
01 — Architecture Element-per-Leaflet-object, the WithProps mixin, the lifecycle it owns
02 — Props & attributes The PropDef model, the codec factories, two-way attribute↔object sync
03 — Component tree & registration The leaflet-register bubbling protocol, attach modes, the other announcement events
04 — Events Re-emitting Leaflet events as leaflet:<type>, and how they're typed
05 — Per-component special cases Where a component does something the mixin can't express generically
06 — Load order Why the export order in src/index.ts is load-bearing
07 — Tooling & build TypeScript 7, oxlint, oxfmt, Vitest, the no-bundle build, dual publish

The one-paragraph version

Each leaflet-* custom element wraps exactly one Leaflet object. A mixin (WithProps) generates the element class from a table of property descriptors: it derives observedAttributes, builds the Leaflet options object from the current attributes, calls the component's createLeafletObject(), keeps attributes and the live object in sync in both directions, and re-fires every Leaflet event on the element. Components join each other through a DOM-event registration protocol that bubbles up to <leaflet-map> at the root — no component ever reads another component's state or queries the DOM for its relatives. The build is tsc with no bundler; Leaflet is always external.