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.
Buddy ebd6f20cdf chore: packaging polish for 0.1.0
- ship `src/` in the npm tarball alongside `dist/` — the emitted `.d.ts.map`
  reference `../../src/*.ts`, so "go to definition" only lands on real code
  if the source is there; also gives npm/JSR source parity. (+16 kB packed.)
- `sideEffects` becomes an explicit allowlist (`dist/index.js`,
  `dist/index.npm.js`, `dist/components/*.js`) instead of `true`, so bundlers
  can tree-shake the side-effect-free `elements/*` and `core/*`.
- add `scripts/sync-version.mjs`: copies `package.json` version into
  `jsr.json`. Wired into the `version` npm lifecycle hook (so `npm version`
  bumps and stages both) and re-run in `prepublishOnly`.
- add `repository` / `bugs` / `homepage`; `author` -> "Buddy Sandidge" (was
  "buddy", now matches LICENSE); a few more `keywords`.
- note in README/CLAUDE/docs that per-component deep imports
  (`./elements/*.js`, `./components/*.js`) are npm-only — JSR has no subpath
  patterns, so `jsr.json` exposes just `.` and `./elements`.
- exclude `scripts/` and `CLAUDE.md` from the JSR tarball.

Verified: `typecheck`, `lint`, `test` (76), `build`, `jsr publish --dry-run`
("Success"), and a fresh `npm pack` consumer typecheck all pass.
2 weeks ago
..
01-architecture.md chore: packaging polish for 0.1.0 2 weeks ago
02-props-and-attributes.md chore: prep 0.1.0 for npm + JSR publish 2 weeks ago
03-component-tree.md docs: add design docs breaking down architecture and major decisions 3 weeks ago
04-events.md chore: prep 0.1.0 for npm + JSR publish 2 weeks ago
05-special-cases.md chore: prep 0.1.0 for npm + JSR publish 2 weeks ago
06-load-order.md chore: prep 0.1.0 for npm + JSR publish 2 weeks ago
07-tooling-and-build.md chore: packaging polish for 0.1.0 2 weeks ago
README.md refactor: split element classes from customElements.define 2 weeks ago

README.md

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 ./components/* import 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.