Waypoints get an additional array property of the label broken up into
text and shape keys, obtained using a new function splitLabel().
When displaying, each item is rendered or appended in sequence using a for loop.
Because of the variable number of elements, waypoints in the list are now flexboxes,
and an extra element is added to align the edit icon to the right side.
When calculating the length of a label, the function getLabelLength() is used.
Each shape is treated as a set number of characters, using a new constant SHAPE_TEXT_LENGTH.
Other fixes/changes:
- getWaypointCanvas() uses a shape key instead of a waypoint.
- getWaypointScreenParams() returns an array of label parts,
which include the text and whether the part is a shape key.
- Text and shape width for marker boxes now correctly accounts for scale.
getWaypointScreenParams() now determines shape width using the scale,
and getTextWidth also keeps track of scale in its cache.
- Waypoint sorting no longer right-pads labels with 0's.