SheetXL - v1.0.2
    Preparing search index...

    Variable RangeAnnotationLayerConst

    RangeAnnotationLayer: MemoExoticComponent<
        (props: RangeAnnotationLayerProps) => Element,
    > = ...

    The workbook's range annotations on this sheet: a soft box per annotation, and a tag per anchor cell. The tag rides a StickyPortal with whenOff: 'clamp', so when its range scrolls out of view it stays at the edge, its pointer turned toward the range (click reveals it) instead of vanishing.

    A tag is its number alone until the annotation is current or hovered; then it grows into the card (label, walk controls). Hover is shared through the annotation state, so a host's list of the same annotations lights the tag and the tag lights the list.

    The navigator's current annotation draws last (on top) at full strength; the others dim. That is what keeps overlapping annotations legible. Hovering lifts a tag — and its boxes — above the current one while the pointer stays, so a tag hidden under another can be read and reached. Annotations that share a top-left cell share one tag — the current one's if it is among them — with a +N for the rest, so tags never stack.

    A prebuilt layer, not part of the sheet's default stack: the feature that writes annotations mounts one for them, filtered to its own source. A plugin registers it for every sheet with DefaultSheetLayersRegistry; a host can also pass it in a sheet's layers (propsSheet={{ layers: [<RangeAnnotationLayer key="annotations" />] }} on a workbook element). It reads the sheet from context and draws nothing while it has no annotations to show. Fed through addRangeAnnotations.