MAIDR JavaScript API
    Preparing search index...

    Everything applySelection needs, gathered once at bind time.

    interface SelectionBridge {
        index: SelectionIndex;
        worksheets: Map<string, TableauWorksheet>;
        guard: SelectionGuard;
        disabled: Set<string>;
        owned: Set<string>;
        issued: IssuedSelection[];
    }
    Index

    Properties

    Where every navigable position came from, from the extractor.

    worksheets: Map<string, TableauWorksheet>

    Layer id → the worksheet that layer was built from.

    Shared re-entrancy flag.

    disabled: Set<string>

    Worksheets, by name, whose selection has been permanently disabled by a rejection.

    Keyed by name and not by layer id: a layer id is an index among the worksheets that survived one extraction, so a refresh that drops a worksheet re-points every id after it at a different worksheet, and a latch earned by one worksheet would silence another. A worksheet name is stable across refreshes — it is already how SelectionBridge.worksheets is rebuilt.

    owned: Set<string>

    Worksheets, by name, whose selection MAIDR currently holds.

    Shared across refreshes like SelectionBridge.disabled. A worksheet joins when a navigation selects marks in it and leaves when MAIDR clears it or a user's own click replaces the selection. It is what lets focus leaving the figure clear only what MAIDR put there: a colleague's click on a mark takes the focus with it, and clearing that selection because focus left would undo the very click the reader is about to follow.

    issued: IssuedSelection[]

    The selections and clears this bridge issued most recently, so their echoes can be told from a user's own clicks. See handleMarkSelection; bounded by MAX_ISSUED_SELECTIONS.