ScrollingFrame.defaultProps={BackgroundTransparency=1,BorderSizePixel=0;Size=UDim2.new(1,0,1,0),CanvasSize=UDim2.new(1,0,1,0)}function ScrollingFrame.render(o)local V=Support.CloneTable(o.props)local q=o.state if V.AspectRatio then local o=new("\085\073\065\115\112\101\099\116\082\097\116\105\111\067\111\110\115\116\114\097\105\110\116",{AspectRatio=V.AspectRatio})V[Roact.Children]=Support.Merge({AspectRatio=o},V[Roact.Children]or{})end if V.Layout=="\076\105\115\116"then local q=new("\085\073\076\105\115\116\076\097\121\111\117\116",{FillDirection=V.LayoutDirection;Padding=V.LayoutPadding;HorizontalAlignment=V.HorizontalAlignment,VerticalAlignment=V.VerticalAlignment;SortOrder=V.SortOrder or"\076\097\121\111\117\116\079\114\100\101\114";[Roact.Ref]=function(V)o:UpdateContentSize(V)end;[Roact.Change.AbsoluteContentSize]=function(V)o:UpdateContentSize(V)end})V.Size=o:GetSize()V.CanvasSize=o:GetCanvasSize()V[Roact.Children]=Support.Merge({Layout=q},V[Roact.Children]or{})end V.AspectRatio=nil V.Layout=nil V.LayoutDirection=nil V.LayoutPadding=nil V.HorizontalAlignment=nil V.VerticalAlignment=nil V.SortOrder=nil V.Width=nil V.Height=nil V.CanvasWidth=nil V.CanvasHeight=nil return new("\083\099\114\111\108\108\105\110\103\070\114\097\109\101",V)end function ScrollingFrame.GetSize(V,o)local q=V.props local J=q.Size=="\087\082\065\080\095\067\079\078\084\069\078\084"or q.Width=="\087\082\065\080\095\067\079\078\084\069\078\084"local g=q.Size=="\087\082\065\080\095\067\079\078\084\069\078\084"or q.Height=="\087\082\065\080\095\067\079\078\084\069\078\084"local p=J or g return UDim2.new((o and J)and UDim.new(0,o.X)or typeof(q.Width)=="\085\068\105\109"and q.Width or q.Size.X,(o and g)and UDim.new(0,o.Y)or typeof(q.Height)=="\085\068\105\109"and q.Height or q.Size.Y)end function ScrollingFrame.GetCanvasSize(V,o)local q=V.props local J=q.CanvasSize=="\087\082\065\080\095\067\079\078\084\069\078\084"or q.CanvasWidth=="\087\082\065\080\095\067\079\078\084\069\078\084"local g=q.CanvasSize=="\087\082\065\080\095\067\079\078\084\069\078\084"or q.CanvasHeight=="\087\082\065\080\095\067\079\078\084\069\078\084"local p=J or g return UDim2.new((o and J)and UDim.new(0,o.X)or typeof(q.CanvasWidth)=="\085\068\105\109"and q.CanvasWidth or q.CanvasSize.X,(o and g)and UDim.new(0,o.Y)or typeof(q.CanvasHeight)=="\085\068\105\109"and q.CanvasHeight or q.CanvasSize.Y)end function ScrollingFrame.UpdateContentSize(V,o)if not(o and o.Parent)then return end o.Parent.Size=V:GetSize(o.AbsoluteContentSize)o.Parent.CanvasSize=V:GetCanvasSize(o.AbsoluteContentSize)end return ScrollingFrame
-- Set defaults
ScrollingFrame.defaultProps = {
	BackgroundTransparency = 1,
	BorderSizePixel = 0,
	Size = UDim2.new(1, 0, 1, 0),
	CanvasSize = UDim2.new(1, 0, 1, 0),
}

function ScrollingFrame:render()
	local props = Support.CloneTable(self.props)
	local state = self.state

	-- Include aspect ratio constraint if specified
	if props.AspectRatio then
		local Constraint = new("UIAspectRatioConstraint", {
			AspectRatio = props.AspectRatio,
		})

		-- Insert constraint into children
		props[Roact.Children] = Support.Merge({ AspectRatio = Constraint }, props[Roact.Children] or {})
	end

	-- Include list layout if specified
	if props.Layout == "List" then
		local Layout = new("UIListLayout", {
			FillDirection = props.LayoutDirection,
			Padding = props.LayoutPadding,
			HorizontalAlignment = props.HorizontalAlignment,
			VerticalAlignment = props.VerticalAlignment,
			SortOrder = props.SortOrder or "LayoutOrder",
			[Roact.Ref] = function(rbx)
				self:UpdateContentSize(rbx)
			end,
			[Roact.Change.AbsoluteContentSize] = function(rbx)
				self:UpdateContentSize(rbx)
			end,
		})

		-- Update size
		props.Size = self:GetSize()
		props.CanvasSize = self:GetCanvasSize()

		-- Insert layout into children
		props[Roact.Children] = Support.Merge({ Layout = Layout }, props[Roact.Children] or {})
	end

	-- Filter out custom properties
	props.AspectRatio = nil
	props.Layout = nil
	props.LayoutDirection = nil
	props.LayoutPadding = nil
	props.HorizontalAlignment = nil
	props.VerticalAlignment = nil
	props.SortOrder = nil
	props.Width = nil
	props.Height = nil
	props.CanvasWidth = nil
	props.CanvasHeight = nil

	-- Display component in wrapper
	return new("ScrollingFrame", props)
end

function ScrollingFrame:GetSize(ContentSize)
	local props = self.props

	-- Determine dynamic dimensions
	local DynamicWidth = props.Size == "WRAP_CONTENT" or props.Width == "WRAP_CONTENT"
	local DynamicHeight = props.Size == "WRAP_CONTENT" or props.Height == "WRAP_CONTENT"
	local DynamicSize = DynamicWidth or DynamicHeight

	-- Calculate size based on content if dynamic
	return UDim2.new(
		(ContentSize and DynamicWidth) and UDim.new(0, ContentSize.X)
			or (typeof(props.Width) == "UDim" and props.Width or props.Size.X),
		(ContentSize and DynamicHeight) and UDim.new(0, ContentSize.Y)
			or (typeof(props.Height) == "UDim" and props.Height or props.Size.Y)
	)
end

function ScrollingFrame:GetCanvasSize(ContentSize)
	local props = self.props

	-- Determine dynamic canvas dimensions
	local DynamicCanvasWidth = props.CanvasSize == "WRAP_CONTENT" or props.CanvasWidth == "WRAP_CONTENT"
	local DynamicCanvasHeight = props.CanvasSize == "WRAP_CONTENT" or props.CanvasHeight == "WRAP_CONTENT"
	local DynamicCanvasSize = DynamicCanvasWidth or DynamicCanvasHeight

	-- Calculate size based on content if dynamic
	return UDim2.new(
		(ContentSize and DynamicCanvasWidth) and UDim.new(0, ContentSize.X)
			or (typeof(props.CanvasWidth) == "UDim" and props.CanvasWidth or props.CanvasSize.X),
		(ContentSize and DynamicCanvasHeight) and UDim.new(0, ContentSize.Y)
			or (typeof(props.CanvasHeight) == "UDim" and props.CanvasHeight or props.CanvasSize.Y)
	)
end

function ScrollingFrame:UpdateContentSize(Layout)
	if not (Layout and Layout.Parent) then
		return
	end

	-- Set container size based on content
	Layout.Parent.Size = self:GetSize(Layout.AbsoluteContentSize)
	Layout.Parent.CanvasSize = self:GetCanvasSize(Layout.AbsoluteContentSize)
end

return ScrollingFrame
