local Symbol = require(script.Parent.Symbol)
local strict = require(script.Parent.strict)
local Portal = require(script.Parent.Portal)
local ElementKind = newproxy(true)
local ElementKindInternal = {
Portal = Symbol.named("Portal"),
Host = Symbol.named("Host"),
Function = Symbol.named("Function"),
Stateful = Symbol.named("Stateful"),
Fragment = Symbol.named("Fragment"),
}
function ElementKindInternal.of(value)
if typeof(value) ~= "table" then
return nil
end
return value[ElementKind]
end
local componentTypesToKinds = {
["string"] = ElementKindInternal.Host,
["function"] = ElementKindInternal.Function,
["table"] = ElementKindInternal.Stateful,
}
function ElementKindInternal.fromComponent(component)
if component == Portal then
return ElementKind.Portal
else
return componentTypesToKinds[typeof(component)]
end
end
getmetatable(ElementKind).__index = ElementKindInternal
strict(ElementKindInternal, "ElementKind")
return ElementKind