Goal
Define the shared type-only metadata contracts that UI libraries such as ZORA can use to declare which component props and events are bindable.
ZORA should export concrete metadata. Studio should consume that metadata. Runtime should resolve concrete bindings. The shared shape belongs in @ankhorage/contracts.
Scope
Add bindable component metadata contracts to @ankhorage/contracts.
Required concepts
BindableComponentMeta
BindablePropMeta
BindableEventMeta
BindableValueType
BindableEventPayloadMeta
ComponentTypeId
- label/description fields for authoring UI
- optional compatibility/value-type hints
Design requirements
- Metadata is serializable/type-only.
- Metadata does not import React.
- Metadata does not import React Native.
- Metadata does not import Studio.
- Metadata does not import Runtime.
- Metadata describes component types, not concrete component instances.
- Concrete component instance bindings remain separate.
No legacy / no deprecation rule
This is a new metadata model. Use final clean names only.
Do not add deprecated metadata names, aliases, or compatibility wrappers.
Implementation tasks
Acceptance criteria
Goal
Define the shared type-only metadata contracts that UI libraries such as ZORA can use to declare which component props and events are bindable.
ZORA should export concrete metadata. Studio should consume that metadata. Runtime should resolve concrete bindings. The shared shape belongs in
@ankhorage/contracts.Scope
Add bindable component metadata contracts to
@ankhorage/contracts.Required concepts
BindableComponentMetaBindablePropMetaBindableEventMetaBindableValueTypeBindableEventPayloadMetaComponentTypeIdDesign requirements
No legacy / no deprecation rule
This is a new metadata model. Use final clean names only.
Do not add deprecated metadata names, aliases, or compatibility wrappers.
Implementation tasks
Acceptance criteria
bun run build,bun run lint:fix, andbun run testpass.