---@meta

---@class Region : UIObject
--- This is an abstract object type which cannot actually be created. Defines a potentially visible area.
Region = {
	--- Clears all attachment points for this object.
	--- @param self Region
	--- @example
	--- myRegion:ClearAllPoints()
	ClearAllPoints = function(self) end,

	--- Creates and returns a new AnimationGroup as a child of this Region.
	--- @param self Region
	--- @param name string? Optional. The name of the AnimationGroup.
	--- @param inheritsFrom string? Optional. The name of the AnimationGroup to inherit from.
	--- @return AnimationGroup animationGroup The created AnimationGroup.
	--- @example
	--- local myAnimationGroup = myRegion:CreateAnimationGroup("MyAnimationGroup")
	CreateAnimationGroup = function(self, name, inheritsFrom) end,

	--- Returns all AnimationGroups that are children of this Region.
	--- @param self Region
	--- @return table animationGroups A table of AnimationGroups.
	--- @example
	--- local animationGroups = myRegion:GetAnimationGroups()
	GetAnimationGroups = function(self) end,

	--- Get the y location of the bottom edge of this frame.
	--- @param self Region
	--- @return number bottom The y location of the bottom edge.
	--- @example
	--- local bottom = myRegion:GetBottom()
	GetBottom = function(self) end,

	--- Get the coordinates of the center of this frame.
	--- @param self Region
	--- @return number centerX The x coordinate of the center.
	--- @return number centerY The y coordinate of the center.
	--- @example
	--- local centerX, centerY = myRegion:GetCenter()
	GetCenter = function(self) end,

	--- Get the height of this object.
	--- @param self Region
	--- @return number height The height of the object.
	--- @example
	--- local height = myRegion:GetHeight()
	GetHeight = function(self) end,

	--- Get the x location of the left edge of this frame.
	--- @param self Region
	--- @return number left The x location of the left edge.
	--- @example
	--- local left = myRegion:GetLeft()
	GetLeft = function(self) end,

	--- Get the number of anchor points for this frame.
	--- @param self Region
	--- @return number numPoints The number of anchor points.
	--- @example
	--- local numPoints = myRegion:GetNumPoints()
	GetNumPoints = function(self) end,

	--- Get details for an anchor point for this frame.
	--- @param self Region
	--- @param pointNum number The index of the point to query.
	--- @return string point The anchor point.
	--- @return Region relativeTo The region to which it is anchored.
	--- @return string relativePoint The point on the other region to anchor to.
	--- @return number xofs The x offset.
	--- @return number yofs The y offset.
	--- @example
	--- local point, relativeTo, relativePoint, xofs, yofs = myRegion:GetPoint(1)
	GetPoint = function(self, pointNum) end,

	--- Get frame's left, bottom, width, height.
	--- @param self Region
	--- @return number left The left position.
	--- @return number bottom The bottom position.
	--- @return number width The width of the frame.
	--- @return number height The height of the frame.
	--- @example
	--- local left, bottom, width, height = myRegion:GetRect()
	GetRect = function(self) end,

	--- Get the x location of the right edge of this frame.
	--- @param self Region
	--- @return number right The x location of the right edge.
	--- @example
	--- local right = myRegion:GetRight()
	GetRight = function(self) end,

	--- Get the width of this object.
	--- @param self Region
	--- @return number width The width of the object.
	--- @example
	--- local width = myRegion:GetWidth()
	GetWidth = function(self) end,

	--- Get the height and width of the frame.
	--- @param self Region
	--- @return number width The width of the frame.
	--- @return number height The height of the frame.
	--- @example
	--- local width, height = myRegion:GetSize()
	GetSize = function(self) end,

	--- Set this object to hidden (it and all of its children will disappear).
	--- @param self Region
	--- @example
	--- myRegion:Hide()
	Hide = function(self) end,

	--- True if this Region or its Parent is being dragged.
	--- @param self Region
	--- @return boolean isDragging True if the region is being dragged.
	--- @example
	--- local isDragging = myRegion:IsDragging()
	IsDragging = function(self) end,

	--- Determine if this object can be manipulated in certain ways by tainted code in combat or not.
	--- @param self Region
	--- @return boolean isProtected True if the object is protected.
	--- @example
	--- local isProtected = myRegion:IsProtected()
	IsProtected = function(self) end,

	--- Determine if this object is shown (would be visible if its parent was visible).
	--- @param self Region
	--- @return boolean isShown True if the object is shown.
	--- @example
	--- local isShown = myRegion:IsShown()
	IsShown = function(self) end,

	--- Get whether the object is visible on screen.
	--- @param self Region
	--- @return boolean isVisible True if the object is visible.
	--- @example
	--- local isVisible = myRegion:IsVisible()
	IsVisible = function(self) end,

	--- Set all anchors to match edges of specified frame.
	--- @param self Region
	--- @param frame Frame The frame to match.
	--- @example
	--- myRegion:SetAllPoints(otherFrame)
	SetAllPoints = function(self, frame) end,

	--- Set the height of the object.
	--- @param self Region
	--- @param height number The height to set.
	--- @example
	--- myRegion:SetHeight(100)
	SetHeight = function(self, height) end,

	--- Set the parent for this frame.
	--- @param self Region
	--- @param parent Frame The parent frame to set.
	--- @example
	--- myRegion:SetParent(otherFrame)
	SetParent = function(self, parent) end,

	--- Set an attachment point of this object.
	--- @param self Region
	--- @param point string The point to anchor from.
	--- @param relativeTo Region|string The region or frameName to anchor to.
	--- @param relativePoint string The point on the other region to anchor to.
	--- @param xOfs number? The x-axis offset.
	--- @param yOfs number? The y-axis offset.
	--- @example
	--- myRegion:SetPoint("TOPLEFT", otherRegion, "BOTTOMRIGHT", 10, -10)
	SetPoint = function(self, point, relativeTo, relativePoint, xOfs, yOfs) end,

	--- Set the region's width and height.
	--- @param self Region
	--- @param width number The width to set.
	--- @param height number The height to set.
	--- @example
	--- myRegion:SetSize(200, 100)
	SetSize = function(self, width, height) end,

	--- Set the width of this object.
	--- @param self Region
	--- @param width number The width to set.
	--- @example
	--- myRegion:SetWidth(200)
	SetWidth = function(self, width) end,

	--- Set this object to shown (it will appear if its parent is visible).
	--- @param self Region
	--- @example
	--- myRegion:Show()
	Show = function(self) end,

	--- Stops any active animations on the Region and its children.
	--- @param self Region
	--- @example
	--- myRegion:StopAnimating()
	StopAnimating = function(self) end,
}
