Avatar picker + square cropper, shared by the portal and tracking. Shows the
current avatar (pending crop → existing photo → initials) as a full-width
square, lets the user pick a file, frame it in a square crop with pan + zoom,
and emits the result as base64 JPEG via onChange (the shape the
profileImage API field expects).
Parameters
__namedParameters: Props
Returns Element
Remarks
Pure crop math lives in @enode/core/images/crop-geometry; decode/encode in
crop-image. The crop modal renders in a body portal so it isn't clipped by
a hosting drawer.
Downscales to OUTPUT² before encoding to keep the base64 payload small.
Avatar picker + square cropper, shared by the portal and tracking. Shows the current avatar (pending crop → existing photo → initials) as a full-width square, lets the user pick a file, frame it in a square crop with pan + zoom, and emits the result as base64 JPEG via
onChange(the shape theprofileImageAPI field expects).