Reactive property declarations. Each field is declared with
declare (no runtime emit) so Lit's static properties
accessors are not shadowed by class-field initialisers. Default
values are seeded in the constructor.
Dot-separated path identifying the field to render
(e.g. "address.city" or "tags[0]"). Declared via declare
so Lit's accessor (installed by the static properties table)
is not shadowed by a class-field initialiser.
Static ReadonlypropertiesElement property declarations.
All four "data" properties (schema, value, resolver,
widgets) carry attribute: false: Custom Element attributes
are strings, and these payloads (an arbitrary Zod schema, an
arbitrary JS value, a resolver function map, a widget tag map)
cannot round-trip through attribute serialisation. Set them via
direct property assignment.
readOnly is a boolean attribute (and reflects to DOM) so the
common "render read-only view" case is reachable from plain
HTML markup (<schema-component readonly></schema-component>).
The capitalisation is readOnly on the property and readonly
on the attribute — matching the HTML readonly attribute on
<input> / <textarea>.
ProtectedmakeBuild the recursive renderChild closure threaded through every
container renderer.
ProtectedrenderDispatch a single walked field through the resolver, widget
registry, and recursion limit. Parallel to
renderField in react/SchemaComponent.tsx.
Lit Custom Element rendering a single sub-field of a schema.
Tag:
<schema-field>(registered byregisterSchemaComponents).