What an attribute value IS in the GeoJSON feature.
Derived from the value type each field-renderer component actually declares
(ComponentDefinition<TValue>), not from the field name.
⚠️ badge ({label, color}), link ({href, label?}) and price
({amount, currency}) hold objects on the capture side — which is why passing
one of them to a plain text renderer yields [object Object], the defect that
motivated splitting the two type columns in the first place.
🛑 But on the reading side they are scalars, and this doc used to claim
otherwise. Confronting the declaration with the shipped GeoJSON found 15 fields
on 86 holding plain strings under those three widgets. The three are therefore
declared as unions in AttributeWidgetPrimitive, and the sentence above is
scoped rather than absolute — it was written from the capture components alone.
What an attribute value IS in the GeoJSON feature.
Derived from the value type each
field-renderercomponent actually declares (ComponentDefinition<TValue>), not from the field name.⚠️
badge({label, color}),link({href, label?}) andprice({amount, currency}) hold objects on the capture side — which is why passing one of them to a plain text renderer yields[object Object], the defect that motivated splitting the two type columns in the first place.🛑 But on the reading side they are scalars, and this doc used to claim otherwise. Confronting the declaration with the shipped GeoJSON found 15 fields on 86 holding plain strings under those three widgets. The three are therefore declared as unions in AttributeWidgetPrimitive, and the sentence above is scoped rather than absolute — it was written from the capture components alone.