local J=require(script.Parent.Symbol)local Y=require(script.Parent.strict)local U=newproxy(true)local u={}local function e(Y)u[Y]=J.named("\082\111\097\099\116"..Y)end e("\066\105\110\100\105\110\103")e("\069\108\101\109\101\110\116")e("\072\111\115\116\067\104\097\110\103\101\069\118\101\110\116")e("\072\111\115\116\069\118\101\110\116")e("\083\116\097\116\101\102\117\108\067\111\109\112\111\110\101\110\116\067\108\097\115\115")e("\083\116\097\116\101\102\117\108\067\111\109\112\111\110\101\110\116\073\110\115\116\097\110\099\101")e("\086\105\114\116\117\097\108\078\111\100\101")e("\086\105\114\116\117\097\108\084\114\101\101")function u.of(J)if typeof(J)~="\116\097\098\108\101"then return nil end return J[U]end;(getmetatable(U)).__index=u;(getmetatable(U)).__tostring=function()return"\082\111\097\099\116\084\121\112\101"end Y(u,"\084\121\112\101")return U
--[[
	Contains markers for annotating objects with types.

	To set the type of an object, use `Type` as a key and the actual marker as
	the value:

		local foo = {
			[Type] = Type.Foo,
		}
]]

local Symbol = require(script.Parent.Symbol)
local strict = require(script.Parent.strict)

local Type = newproxy(true)

local TypeInternal = {}

local function addType(name)
	TypeInternal[name] = Symbol.named("Roact" .. name)
end

addType("Binding")
addType("Element")
addType("HostChangeEvent")
addType("HostEvent")
addType("StatefulComponentClass")
addType("StatefulComponentInstance")
addType("VirtualNode")
addType("VirtualTree")

function TypeInternal.of(value)
	if typeof(value) ~= "table" then
		return nil
	end

	return value[Type]
end

getmetatable(Type).__index = TypeInternal

getmetatable(Type).__tostring = function()
	return "RoactType"
end

strict(TypeInternal, "Type")

return Type
