local A={Signal="\078\101\120\117\115\073\110\115\116\097\110\099\101\046\069\118\101\110\116\046\082\111\098\108\111\120\069\118\101\110\116";PluginButton="\080\108\117\103\105\110\046\078\101\120\117\115\080\108\117\103\105\110\066\117\116\116\111\110";PluginGui="\080\108\117\103\105\110\046\078\101\120\117\115\080\108\117\103\105\110\071\117\105",PluginToolbar="\080\108\117\103\105\110\046\078\101\120\117\115\080\108\117\103\105\110\084\111\111\108\098\097\114",UserInput="\080\108\117\103\105\110\046\078\101\120\117\115\085\115\101\114\073\110\112\117\116";CollapsableListFrame="\085\073\046\067\111\108\108\097\112\115\097\098\108\101\076\105\115\116\046\078\101\120\117\115\067\111\108\108\097\112\115\097\098\108\101\076\105\115\116\070\114\097\109\101";ListContentsPropertyConstraint="\085\073\046\067\111\108\108\097\112\115\097\098\108\101\076\105\115\116\046\067\111\110\115\116\114\097\105\110\116\046\078\101\120\117\115\067\111\110\116\101\110\116\115\080\114\111\112\101\114\116\121\067\111\110\115\116\114\097\105\110\116",ListMultiConstraint="\085\073\046\067\111\108\108\097\112\115\097\098\108\101\076\105\115\116\046\067\111\110\115\116\114\097\105\110\116\046\078\101\120\117\115\077\117\108\116\105\067\111\110\115\116\114\097\105\110\116",ListSelectionConstraint="\085\073\046\067\111\108\108\097\112\115\097\098\108\101\076\105\115\116\046\067\111\110\115\116\114\097\105\110\116\046\078\101\120\117\115\083\101\108\101\099\116\105\111\110\067\111\110\115\116\114\097\105\110\116",BoundingSizeConstraint="\085\073\046\067\111\110\115\116\114\097\105\110\116\046\078\101\120\117\115\066\111\117\110\100\105\110\103\083\105\122\101\067\111\110\115\116\114\097\105\110\116";CheckBox="\085\073\046\073\110\112\117\116\046\078\101\120\117\115\067\104\101\099\107\066\111\120",ImageButton="\085\073\046\073\110\112\117\116\046\078\101\120\117\115\073\109\097\103\101\066\117\116\116\111\110";TextBox="\085\073\046\073\110\112\117\116\046\078\101\120\117\115\084\101\120\116\066\111\120",ScrollBar="\085\073\046\083\099\114\111\108\108\046\078\101\120\117\115\083\099\114\111\108\108\066\097\114";ScrollingFrame="\085\073\046\083\099\114\111\108\108\046\078\101\120\117\115\083\099\114\111\108\108\105\110\103\070\114\097\109\101"}local b=require(script:WaitForChild("\078\101\120\117\115\080\108\117\103\105\110\070\114\097\109\101\119\111\114\107\080\114\111\106\101\099\116"))local O=b:GetResource("\080\108\117\103\105\110\046\078\101\120\117\115\080\108\117\103\105\110")local w=b:GetResource("\080\108\117\103\105\110\046\078\101\120\117\115\083\101\116\116\105\110\103\115")b.NexusEnum=(b:GetResource("\068\097\116\097\046\069\110\117\109\046\078\101\120\117\115\069\110\117\109\067\111\108\108\101\099\116\105\111\110")).GetBuiltInEnums()function b.new(O,...)local w=A[O]if w then return(b:GetClass(O)).new(...)end local X=b:GetResource("\066\097\115\101\046\078\101\120\117\115\087\114\097\112\112\101\100\073\110\115\116\097\110\099\101")return X.GetInstance(O)end function b.GetClass(w,O)local X=A[O]if not X then error("\067\108\097\115\115 \100\111\101\115 \110\111\116 \101\120\105\115\116\058 "..O)end return b:GetResource(X)end function b.SetPlugin(b,A)return O.SetPlugin(A)end function b.GetPlugin(A)return O.GetPlugin()end function b.GetSettings(A)return w.GetSettings()end return b
--[[
TheNexusAvenger

Main module for Nexus Plugin Framework.
Version 0.1.0
--]]

local NEXUS_CLASS_PATHS = {
	--Signal Classes
	["Signal"] = "NexusInstance.Event.RobloxEvent",
	
	--Plugin
	["PluginButton"] = "Plugin.NexusPluginButton",
	["PluginGui"] = "Plugin.NexusPluginGui",
	["PluginToolbar"] = "Plugin.NexusPluginToolbar",
	["UserInput"] = "Plugin.NexusUserInput",
	
	--UI Classes
	["CollapsableListFrame"] = "UI.CollapsableList.NexusCollapsableListFrame",
	["ListContentsPropertyConstraint"] = "UI.CollapsableList.Constraint.NexusContentsPropertyConstraint",
	["ListMultiConstraint"] = "UI.CollapsableList.Constraint.NexusMultiConstraint",
	["ListSelectionConstraint"] = "UI.CollapsableList.Constraint.NexusSelectionConstraint",
	["BoundingSizeConstraint"] = "UI.Constraint.NexusBoundingSizeConstraint",
	["CheckBox"] = "UI.Input.NexusCheckBox",
	["ImageButton"] = "UI.Input.NexusImageButton",
	["TextBox"] = "UI.Input.NexusTextBox",
	["ScrollBar"] = "UI.Scroll.NexusScrollBar",
	["ScrollingFrame"] = "UI.Scroll.NexusScrollingFrame",
}



local NexusPluginFramework = require(script:WaitForChild("NexusPluginFrameworkProject"))
local NexusPlugin = NexusPluginFramework:GetResource("Plugin.NexusPlugin")
local NexusSettings = NexusPluginFramework:GetResource("Plugin.NexusSettings")
NexusPluginFramework.NexusEnum = NexusPluginFramework:GetResource("Data.Enum.NexusEnumCollection").GetBuiltInEnums()



--[[
Creates either a Nexus Plugin Framework class or a wrapped Roblox
class for Nexus Plugin Framework. Not all classes are exposed 
through this function.
--]]
function NexusPluginFramework.new(ClassName,...)
	--Return a Nexus Plugin Framework class if any.
	local Path = NEXUS_CLASS_PATHS[ClassName]
	if Path then
		return NexusPluginFramework:GetClass(ClassName).new(...)
	end
	
	--Return a wrapped class.
	local NexusWrappedInstance = NexusPluginFramework:GetResource("Base.NexusWrappedInstance")
	return NexusWrappedInstance.GetInstance(ClassName)
end

--[[
Returns the class for a given name.
--]]
function NexusPluginFramework:GetClass(ClassName)
	local Path = NEXUS_CLASS_PATHS[ClassName]
	if not Path then
		error("Class does not exist: "..ClassName)
	end
	return NexusPluginFramework:GetResource(Path)
end

--[[
Sets the plugin instance. Needed when
initializing the framework.
--]]
function NexusPluginFramework:SetPlugin(Plugin)
	return NexusPlugin.SetPlugin(Plugin)
end

--[[
Returns the plugin instance.
--]]
function NexusPluginFramework:GetPlugin()
	return NexusPlugin.GetPlugin()
end

--[[
Returns the settings instance.
--]]
function NexusPluginFramework:GetSettings()
	return NexusSettings.GetSettings()
end



return NexusPluginFramework