Commit Graph

11 Commits

Author SHA1 Message Date
Buddy
8865b49f4e Add examples page with a context manager
DSD, open/closed template, and light-DOM components that talk through
<main-context>: children register on… callbacks and share updates as events.
Served by Vite via npm run examples; examples/ is linted, formatted and
typechecked.
2026-11-10 09:59:09 -08:00
Buddy
be8ee0198f Add typed events map: true, listener options, listen<E>(), or custom<T>()
events maps a name to true, listener options, listen<E>(options?) for an
explicit event type, or custom<T>(options?) for a CustomEvent<T> (the same as
listen<CustomEvent<T>>()). Otherwise an event is typed from HTMLElementEventMap
by name. The array form is gone. handleEvent gets HandledEvent<S>, each event
tagged with its literal type so event.type narrows.
2026-11-10 09:59:09 -08:00
Buddy
6ece00c8cc Allow static names as props and rename attributeFor back to attributes
Props live on instances, so statics on the generated class or the base
can't collide with them. Only instance members of the base and the
mixin are reserved now.
2026-11-07 12:25:11 -08:00
Buddy
767fa0eb41 Add jsr.json for publishing to JSR as @buddy/wc-mixin 2026-11-07 11:51:24 -08:00
Buddy
98c209741d Throw on wrong-class [selector, Class] refs instead of skipping them 2026-11-06 21:33:42 -08:00
Buddy
b26cff3468 Support [selector, Class] refs and show resolved types for refs, observedAttributes, and attributeFor 2026-11-06 21:31:14 -08:00
Buddy
361a194766 chore: bump oxlint oxfmt 2026-11-06 15:54:55 -08:00
Buddy
a398fc98f1 Reserve static names for props and reject keys shared by element and elements 2026-11-06 14:10:53 -08:00
Buddy
6efcdd210e Rename static attributes map to attributeFor and reserve the name 2026-11-06 14:09:38 -08:00
Buddy
c961d01fc4 Add typed WebComponent mixin factory
WebComponent(spec) builds a custom-element base class from a spec:
shadow root or declarative shadow DOM, template, shared stylesheet
(adopted, or a <style> once per root for light DOM), reflected props
with two-way attribute sync, a per-connection AbortSignal, host event
wiring, and typed element refs.

Types derive exact observedAttributes, prop value types, ref element
types from selectors, and reject prop names that collide with the base
class or mixin members.

Tooling: strict tsconfig, type-aware oxlint, oxfmt, and Vitest browser
mode (Chromium) with type tests.
2026-11-06 00:08:56 -08:00
29ed38fbc2 Initial commit 2026-11-05 07:53:57 +00:00