One button, one size: a surface never has to make room for the link arriving.
<.live_component module={ShareControl} id="share-call" url={@share_url}
available={sharable?(@nickname)} on_share="share_call" on_revoke="revoke_call" />
Where the address lives: sized by the dialog, not by the chrome it was wedged into.
<.share_link_dialog id="share" url={@share_url} on_close={...}
on_revoke="revoke" />
A viewer who may see the address but not revoke it gets no Revoke button.