From f9c07a263d9d27b0874be3c3924e32ea80c1c0a7 Mon Sep 17 00:00:00 2001 From: Buddy Date: Tue, 8 Sep 2026 20:59:27 -0700 Subject: [PATCH] refactor: split element classes from customElements.define Every component is now two modules sharing a basename: - src/elements/leaflet-foo.ts -- `export default class LeafletFooElement extends WithProps(...)`, the class only, no customElements.define, no side effects. src/elements/index.ts is an order-free barrel. - src/components/leaflet-foo.ts -- three lines: import the class, define the tag, re-export. Importing this (or src/index.ts) registers the tag. Plugin authors can now import a class without triggering the built-in define, to subclass it or register it under a different tag name. Package subpath exports `leaflet-components/elements`, `leaflet-components/elements/leaflet-foo.js`, and `leaflet-components/components/leaflet-foo.js` map onto dist/; jsr.json gains an `./elements` entry. The load-bearing ordering moves from the export statements in src/index.ts to its `./components/*` side-effect imports (the elements barrel carries no define, so its order is free). Classes are renamed LeafletFoo -> LeafletFooElement, including in the HTMLElementTagNameMap augmentation. Docs (CLAUDE.md, docs/, README.md) updated for the new layout. --- CLAUDE.md | 31 ++- README.md | 15 +- docs/01-architecture.md | 40 ++- docs/04-events.md | 2 +- docs/05-special-cases.md | 12 +- docs/06-load-order.md | 45 ++-- docs/07-tooling-and-build.md | 22 +- docs/README.md | 2 +- jsr.json | 5 +- package.json | 12 + src/components/leaflet-circle-marker.ts | 26 +- src/components/leaflet-circle.ts | 28 +- src/components/leaflet-control-attribution.ts | 20 +- src/components/leaflet-control-layers.ts | 54 +--- src/components/leaflet-control-scale.ts | 23 +- src/components/leaflet-control-zoom.ts | 25 +- src/components/leaflet-div-icon.ts | 49 +--- src/components/leaflet-feature-group.ts | 21 +- src/components/leaflet-geojson.ts | 35 +-- src/components/leaflet-icon.ts | 40 +-- src/components/leaflet-image-overlay.ts | 42 +-- src/components/leaflet-layer-group.ts | 22 +- src/components/leaflet-line.ts | 32 +-- src/components/leaflet-map.ts | 239 +----------------- src/components/leaflet-marker.ts | 63 +---- src/components/leaflet-polygon.ts | 50 +--- src/components/leaflet-polyline.ts | 57 +---- src/components/leaflet-popup.ts | 55 +--- src/components/leaflet-rectangle.ts | 25 +- src/components/leaflet-svg-overlay.ts | 36 +-- src/components/leaflet-tile-layer-wms.ts | 89 +------ src/components/leaflet-tile-layer.ts | 24 +- src/components/leaflet-tooltip.ts | 55 +--- src/components/leaflet-video-overlay.ts | 57 +---- src/elements/index.ts | 32 +++ src/elements/leaflet-circle-marker.ts | 23 ++ src/elements/leaflet-circle.ts | 25 ++ src/elements/leaflet-control-attribution.ts | 17 ++ src/elements/leaflet-control-layers.ts | 51 ++++ src/elements/leaflet-control-scale.ts | 20 ++ src/elements/leaflet-control-zoom.ts | 22 ++ src/elements/leaflet-div-icon.ts | 46 ++++ src/elements/leaflet-feature-group.ts | 18 ++ src/elements/leaflet-geojson.ts | 32 +++ src/elements/leaflet-icon.ts | 40 +++ src/elements/leaflet-image-overlay.ts | 39 +++ src/elements/leaflet-layer-group.ts | 19 ++ src/elements/leaflet-line.ts | 29 +++ src/elements/leaflet-map.ts | 236 +++++++++++++++++ src/elements/leaflet-marker.ts | 60 +++++ src/elements/leaflet-polygon.ts | 47 ++++ src/elements/leaflet-polyline.ts | 54 ++++ src/elements/leaflet-popup.ts | 52 ++++ src/elements/leaflet-rectangle.ts | 22 ++ src/elements/leaflet-svg-overlay.ts | 33 +++ src/elements/leaflet-tile-layer-wms.ts | 86 +++++++ src/elements/leaflet-tile-layer.ts | 21 ++ src/elements/leaflet-tooltip.ts | 52 ++++ src/elements/leaflet-video-overlay.ts | 54 ++++ src/index.ts | 192 +++++++------- test/core/event-types.test.ts | 16 +- test/load-order.test.ts | 2 +- 62 files changed, 1443 insertions(+), 1250 deletions(-) create mode 100644 src/elements/index.ts create mode 100644 src/elements/leaflet-circle-marker.ts create mode 100644 src/elements/leaflet-circle.ts create mode 100644 src/elements/leaflet-control-attribution.ts create mode 100644 src/elements/leaflet-control-layers.ts create mode 100644 src/elements/leaflet-control-scale.ts create mode 100644 src/elements/leaflet-control-zoom.ts create mode 100644 src/elements/leaflet-div-icon.ts create mode 100644 src/elements/leaflet-feature-group.ts create mode 100644 src/elements/leaflet-geojson.ts create mode 100644 src/elements/leaflet-icon.ts create mode 100644 src/elements/leaflet-image-overlay.ts create mode 100644 src/elements/leaflet-layer-group.ts create mode 100644 src/elements/leaflet-line.ts create mode 100644 src/elements/leaflet-map.ts create mode 100644 src/elements/leaflet-marker.ts create mode 100644 src/elements/leaflet-polygon.ts create mode 100644 src/elements/leaflet-polyline.ts create mode 100644 src/elements/leaflet-popup.ts create mode 100644 src/elements/leaflet-rectangle.ts create mode 100644 src/elements/leaflet-svg-overlay.ts create mode 100644 src/elements/leaflet-tile-layer-wms.ts create mode 100644 src/elements/leaflet-tile-layer.ts create mode 100644 src/elements/leaflet-tooltip.ts create mode 100644 src/elements/leaflet-video-overlay.ts diff --git a/CLAUDE.md b/CLAUDE.md index 4054471..ef02638 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -28,7 +28,7 @@ Tests run under Vitest + jsdom (`test/**/*.test.ts`), with a single setup file ( - Some Leaflet DOM state (the ``/`