ConstReadonlyBlank: "blank"The gap stays open - the source is blanked where it sits and the block lands exactly where drawn.
ReadonlyClose: "close"The gap closes: cells behind the cut slide back along the axis. That closure carries the destination with it when the destination sits after the cut, so the block still lands on the line it was dropped on.
ReadonlyInside: "inside"Refused: the insert line falls inside the very block being cut.
ReadonlyTear: "tear"Refused: the insert would shift only PART of the cut, which no rectangle describes.
Both ends of that operation classify here so they can never disagree: the model, which performs the shift, and the drag preview, which has to say whether a release will be refused before the model is ever called. Applies to a cut and destination on the SAME sheet; a cut lifted from another sheet is always InsertCutShift.Blank, its gap having nothing to close into.
What becomes of the space a CUT range vacates when its block is INSERTED elsewhere - the Shift-drag drop, and the
insertFrom({ isCut: true })behind it.