Add all system cursors (framework) (#60931)

diff --git a/packages/flutter/lib/src/rendering/mouse_cursor.dart b/packages/flutter/lib/src/rendering/mouse_cursor.dart
index bbde264..472bbe3 100644
--- a/packages/flutter/lib/src/rendering/mouse_cursor.dart
+++ b/packages/flutter/lib/src/rendering/mouse_cursor.dart
@@ -400,7 +400,7 @@
 ///
 /// [SystemMouseCursors] is a superset of the system cursors of every platform
 /// that Flutter supports, therefore some of these objects might map to the same
-/// result, or fallback to the basic arrow. This mapping is defined by the
+/// result, or fallback to the [basic] arrow. This mapping is defined by the
 /// Flutter engine.
 ///
 /// The cursor names are chosen to reflect the cursors' use cases instead of
@@ -416,45 +416,428 @@
   /// Any cursor other than [none] or [uncontrolled] unhides the cursor.
   static const SystemMouseCursor none = SystemMouseCursor._(kind: 'none');
 
+
+  //// STATUS ////
+
   /// The platform-dependent basic cursor.
   ///
   /// Typically the shape of an arrow.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_DEFAULT, TYPE_ARROW
+  ///  * Web: default
+  ///  * macOS: arrowCursor
   static const SystemMouseCursor basic = SystemMouseCursor._(kind: 'basic');
 
-  /// A cursor that indicates a user interface element that is clickable, such as a hyperlink.
+  /// A cursor that emphasizes an element being clickable, such as a hyperlink.
   ///
   /// Typically the shape of a pointing hand.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_HAND
+  ///  * Web: pointer
+  ///  * macOS: pointingHandCursor
   static const SystemMouseCursor click = SystemMouseCursor._(kind: 'click');
 
-  /// A cursor that indicates selectable text.
+  /// A cursor indicating an operation that will not be carried out.
   ///
-  /// Typically the shape of a capital I.
-  static const SystemMouseCursor text = SystemMouseCursor._(kind: 'text');
-
-  /// A cursor that indicates a forbidden action.
+  /// Typically the shape of a circle with a diagonal line. May fall back to
+  /// [noDrop].
   ///
-  /// Typically the shape of a circle with a diagonal line.
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_NO_DROP
+  ///  * Web: not-allowed
+  ///  * macOS: operationNotAllowedCursor
+  ///
+  /// See also:
+  ///
+  ///  * [noDrop], which indicates somewhere that the current item may not be
+  ///    dropped.
   static const SystemMouseCursor forbidden = SystemMouseCursor._(kind: 'forbidden');
 
-  /// A cursor that indicates something that can be dragged.
+  /// A cursor indicating the status that the program is busy and therefore
+  /// can not be interacted with.
+  ///
+  /// Typically the shape of an hourglass or a watch.
+  ///
+  /// This cursor is not available as a system cursor on macOS. Although macOS
+  /// displays a "spinning ball" cursor when busy, it's handled by the OS and not
+  /// exposed for applications to choose.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_WAIT
+  ///  * Web: wait
+  ///
+  /// See also:
+  ///
+  ///  * [progress], which is similar to [wait] but the program can still be
+  ///    interacted with.
+  static const SystemMouseCursor wait = SystemMouseCursor._(kind: 'wait');
+
+  /// A cursor indicating the status that the program is busy but can still be
+  /// interacted with.
+  ///
+  /// Typically the shape of an arrow with an hourglass or a watch at the corner.
+  /// Does *not* fall back to [wait] if unavailable.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Web: progress
+  ///
+  /// See also:
+  ///
+  ///  * [wait], which is similar to [progress] but the program can not be
+  ///    interacted with.
+  static const SystemMouseCursor progress = SystemMouseCursor._(kind: 'progress');
+
+  /// A cursor indicating somewhere the user can trigger a context menu.
+  ///
+  /// Typically the shape of an arrow with a small menu at the corner.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_CONTEXT_MENU
+  ///  * Web: context-menu
+  ///  * macOS: contextualMenuCursor
+  static const SystemMouseCursor contextMenu = SystemMouseCursor._(kind: 'contextMenu');
+
+  /// A cursor indicating help information.
+  ///
+  /// Typically the shape of a question mark, or an arrow therewith.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_HELP
+  ///  * Web: help
+  static const SystemMouseCursor help = SystemMouseCursor._(kind: 'help');
+
+
+  //// SELECTION ////
+
+  /// A cursor indicating selectable text.
+  ///
+  /// Typically the shape of a capital I.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_TEXT
+  ///  * Web: text
+  ///  * macOS: IBeamCursor
+  static const SystemMouseCursor text = SystemMouseCursor._(kind: 'text');
+
+  /// A cursor indicating selectable vertical text.
+  ///
+  /// Typically the shape of a capital I rotated to be horizontal. May fall back
+  /// to [text].
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_VERTICAL_TEXT
+  ///  * Web: vertical-text
+  ///  * macOS: IBeamCursorForVerticalLayout
+  static const SystemMouseCursor verticalText = SystemMouseCursor._(kind: 'verticalText');
+
+  /// A cursor indicating selectable table cells.
+  ///
+  /// Typically the shape of a hollow plus sign.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_CELL
+  ///  * Web: cell
+  static const SystemMouseCursor cell = SystemMouseCursor._(kind: 'cell');
+
+  /// A cursor indicating precise selection, such as selecting a pixel in a
+  /// bitmap.
+  ///
+  /// Typically the shape of a crosshair.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_CROSSHAIR
+  ///  * Web: crosshair
+  ///  * macOS: crosshairCursor
+  static const SystemMouseCursor precise = SystemMouseCursor._(kind: 'precise');
+
+
+  //// DRAG-AND-DROP ////
+
+  /// A cursor indicating moving something.
+  ///
+  /// Typically the shape of four-way arrow. May fall back to [allScroll].
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_ALL_SCROLL
+  ///  * Web: move
+  static const SystemMouseCursor move = SystemMouseCursor._(kind: 'move');
+
+  /// A cursor indicating something that can be dragged.
   ///
   /// Typically the shape of an open hand.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_GRAB
+  ///  * Web: grab
+  ///  * macOS: openHandCursor
   static const SystemMouseCursor grab = SystemMouseCursor._(kind: 'grab');
 
-  /// A cursor that indicates something that is being dragged.
+  /// A cursor indicating something that is being dragged.
   ///
   /// Typically the shape of a closed hand.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_GRABBING
+  ///  * Web: grabbing
+  ///  * macOS: closedHandCursor
   static const SystemMouseCursor grabbing = SystemMouseCursor._(kind: 'grabbing');
 
-  /// A cursor in the shape of a horizontal double-arrow.
+  /// A cursor indicating somewhere that the current item may not be dropped.
   ///
-  /// This cursor is typically used when moving or resizing an object, and the
-  /// object can be moved left or right.
-  static const SystemMouseCursor horizontalDoubleArrow = SystemMouseCursor._(kind: 'horizontalDoubleArrow');
+  /// Typically the shape of a hand with a [forbidden] sign at the corner. May
+  /// fall back to [forbidden].
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_NO_DROP
+  ///  * Web: no-drop
+  ///  * macOS: operationNotAllowedCursor
+  ///
+  /// See also:
+  ///
+  ///  * [forbidden], which indicates an action that will not be carried out.
+  static const SystemMouseCursor noDrop = SystemMouseCursor._(kind: 'noDrop');
 
-  /// A cursor in the shape of a vertical double-arrow.
+  /// A cursor indicating that the current operation will create an alias of, or
+  /// a shortcut of the item.
   ///
-  /// This cursor is typically used when moving or resizing an object, and the
-  /// object can be moved up or down.
-  static const SystemMouseCursor verticalDoubleArrow = SystemMouseCursor._(kind: 'verticalDoubleArrow');
+  /// Typically the shape of an arrow with a shortcut icon at the corner.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_ALIAS
+  ///  * Web: alias
+  ///  * macOS: dragLinkCursor
+  static const SystemMouseCursor alias = SystemMouseCursor._(kind: 'alias');
+
+  /// A cursor indicating that the current operation will copy the item.
+  ///
+  /// Typically the shape of an arrow with a boxed plus sign at the corner.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_COPY
+  ///  * Web: copy
+  ///  * macOS: dragCopyCursor
+  static const SystemMouseCursor copy = SystemMouseCursor._(kind: 'copy');
+
+  /// A cursor indicating that the current operation will result in the
+  /// disappearance of the item.
+  ///
+  /// Typically the shape of an arrow with a cloud of smoke at the corner.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * macOS: disappearingItemCursor
+  static const SystemMouseCursor disappearing = SystemMouseCursor._(kind: 'disappearing');
+
+
+  //// RESIZING AND SCROLLING ////
+
+  /// A cursor indicating scrolling in any direction.
+  ///
+  /// Typically the shape of a dot surrounded by 4 arrows.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_ALL_SCROLL
+  ///  * Web: all-scroll
+  ///
+  /// See also:
+  ///
+  ///  * [move], which indicates moving in any direction.
+  static const SystemMouseCursor allScroll = SystemMouseCursor._(kind: 'allScroll');
+
+  /// A cursor indicating resizing an object bidirectionally from its left or
+  /// right edge.
+  ///
+  /// Typically the shape of a bidirectional arrow pointing left and right.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_HORIZONTAL_DOUBLE_ARROW
+  ///  * Web: ew-resize
+  ///  * macOS: resizeLeftRightCursor
+  static const SystemMouseCursor resizeLeftRight = SystemMouseCursor._(kind: 'resizeLeftRight');
+
+  /// A cursor indicating resizing an object bidirectionally from its top or
+  /// bottom edge.
+  ///
+  /// Typically the shape of a bidirectional arrow pointing up and down.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_VERTICAL_DOUBLE_ARROW
+  ///  * Web: ns-resize
+  ///  * macOS: resizeUpDownCursor
+  static const SystemMouseCursor resizeUpDown = SystemMouseCursor._(kind: 'resizeUpDown');
+
+  /// A cursor indicating resizing an object bidirectionally from its top left or
+  /// bottom right corner.
+  ///
+  /// Typically the shape of a bidirectional arrow pointing upper left and lower right.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW
+  ///  * Web: nwse-resize
+  static const SystemMouseCursor resizeUpLeftDownRight = SystemMouseCursor._(kind: 'resizeUpLeftDownRight');
+
+  /// A cursor indicating resizing an object bidirectionally from its top right or
+  /// bottom left corner.
+  ///
+  /// Typically the shape of a bidirectional arrow pointing upper right and lower left.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW
+  ///  * Web: nesw-resize
+  static const SystemMouseCursor resizeUpRightDownLeft = SystemMouseCursor._(kind: 'resizeUpRightDownLeft');
+
+  /// A cursor indicating resizing an object from its top edge.
+  ///
+  /// Typically the shape of an arrow pointing up. May fallback to [resizeUpDown].
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_VERTICAL_DOUBLE_ARROW
+  ///  * Web: n-resize
+  ///  * macOS: resizeUpCursor
+  static const SystemMouseCursor resizeUp = SystemMouseCursor._(kind: 'resizeUp');
+
+  /// A cursor indicating resizing an object from its bottom edge.
+  ///
+  /// Typically the shape of an arrow pointing down. May fallback to [resizeUpDown].
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_VERTICAL_DOUBLE_ARROW
+  ///  * Web: s-resize
+  ///  * macOS: resizeDownCursor
+  static const SystemMouseCursor resizeDown = SystemMouseCursor._(kind: 'resizeDown');
+
+  /// A cursor indicating resizing an object from its left edge.
+  ///
+  /// Typically the shape of an arrow pointing left. May fallback to [resizeLeftRight].
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_HORIZONTAL_DOUBLE_ARROW
+  ///  * Web: w-resize
+  ///  * macOS: resizeLeftCursor
+  static const SystemMouseCursor resizeLeft = SystemMouseCursor._(kind: 'resizeLeft');
+
+  /// A cursor indicating resizing an object from its right edge.
+  ///
+  /// Typically the shape of an arrow pointing right. May fallback to [resizeLeftRight].
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_HORIZONTAL_DOUBLE_ARROW
+  ///  * Web: e-resize
+  ///  * macOS: resizeRightCursor
+  static const SystemMouseCursor resizeRight = SystemMouseCursor._(kind: 'resizeRight');
+
+  /// A cursor indicating resizing an object from its top-left corner.
+  ///
+  /// Typically the shape of an arrow pointing upper left. May fallback to [resizeUpLeftDownRight].
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW
+  ///  * Web: nw-resize
+  static const SystemMouseCursor resizeUpLeft = SystemMouseCursor._(kind: 'resizeUpLeft');
+
+  /// A cursor indicating resizing an object from its top-right corner.
+  ///
+  /// Typically the shape of an arrow pointing upper right. May fallback to [resizeUpRightDownLeft].
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW
+  ///  * Web: ne-resize
+  static const SystemMouseCursor resizeUpRight = SystemMouseCursor._(kind: 'resizeUpRight');
+
+  /// A cursor indicating resizing an object from its bottom-left corner.
+  ///
+  /// Typically the shape of an arrow pointing lower left. May fallback to [resizeUpRightDownLeft].
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW
+  ///  * Web: sw-resize
+  static const SystemMouseCursor resizeDownLeft = SystemMouseCursor._(kind: 'resizeDownLeft');
+
+  /// A cursor indicating resizing an object from its bottom-right corner.
+  ///
+  /// Typically the shape of an arrow pointing lower right. May fallback to [resizeUpLeftDownRight].
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW
+  ///  * Web: se-resize
+  static const SystemMouseCursor resizeDownRight = SystemMouseCursor._(kind: 'resizeDownRight');
+
+  /// A cursor indicating resizing a column, or an item horizontally.
+  ///
+  /// Typically the shape of arrows pointing left and right with a vertical bar
+  /// separating them. May fallback to [resizeLeftRight].
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_HORIZONTAL_DOUBLE_ARROW
+  ///  * Web: col-resize
+  ///  * macOS: resizeLeftRightCursor
+  static const SystemMouseCursor resizeColumn = SystemMouseCursor._(kind: 'resizeColumn');
+
+  /// A cursor indicating resizing a row, or an item vertically.
+  ///
+  /// Typically the shape of arrows pointing up and down with a horizontal bar
+  /// separating them. May fallback to [resizeUpDown].
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_VERTICAL_DOUBLE_ARROW
+  ///  * Web: row-resize
+  ///  * macOS: resizeUpDownCursor
+  static const SystemMouseCursor resizeRow = SystemMouseCursor._(kind: 'resizeRow');
+
+
+  //// OTHER OPERATIONS ////
+
+  /// A cursor indicating zooming in.
+  ///
+  /// Typically a magnifying glass with a plus sign.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_ZOOM_IN
+  ///  * Web: zoom-in
+  static const SystemMouseCursor zoomIn = SystemMouseCursor._(kind: 'zoomIn');
+
+  /// A cursor indicating zooming out.
+  ///
+  /// Typically a magnifying glass with a minus sign.
+  ///
+  /// Corresponds to:
+  ///
+  ///  * Android: TYPE_ZOOM_OUT
+  ///  * Web: zoom-out
+  static const SystemMouseCursor zoomOut = SystemMouseCursor._(kind: 'zoomOut');
 }