[DEPRECATED] guiElements - Make gui work easier!

I have stopped working on this and do not plan on continue supporting this.

Current Version: 1.3.3
Last Update: 8/29/2020

I’m unsure if I am going to continue this, as it was mainly an experiment on how to make plugins. On a seconds thought, I probably shouldn’t have released this. Was mainly an experiment for plugin development. For anyone interested, here’s the source:

source

warning the source may hurt your brain proceed with caution

get ready
local widgetInfo = DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float,true,true,400,50,200,100)
local widget = plugin:CreateDockWidgetPluginGui("Gui Elements", widgetInfo)
widget.Title = "Gui Elements"
local defaults = {"_buttonMove","_buttonSounds","_labelHover","_labelInfo"}

plugin:Activate(false)

local toolbar = plugin:CreateToolbar("Gui Elements")
local toggle = toolbar:CreateButton("Gui Elements", "Add Gui Elements!", "")

-- ======== CREATE UI ======== --
local mainFrame = Instance.new("Frame",widget)
mainFrame.Size = UDim2.new(1,0,1,0)
mainFrame.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.MainBackground,Enum.StudioStyleGuideModifier.Default)

local textLabel = Instance.new("TextLabel",mainFrame)
textLabel.Text = "Functions"
textLabel.AnchorPoint = Vector2.new(1,0)
textLabel.Position = UDim2.new(1,0,0,0)
textLabel.Size = UDim2.new(.3,0,.125,0)
textLabel.TextScaled = true
textLabel.Font = Enum.Font.SourceSansBold
textLabel.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Tab,Enum.StudioStyleGuideModifier.Default)
textLabel.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.MainText,Enum.StudioStyleGuideModifier.Default)
textLabel.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)

local functionsBar = Instance.new("Frame",widget)
functionsBar.Size = UDim2.new(.3,0,.875,0)
functionsBar.AnchorPoint = Vector2.new(1,0)
functionsBar.LayoutOrder = 1
functionsBar.Position = UDim2.new(1,0,0.125,0)
functionsBar.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.TabBar,Enum.StudioStyleGuideModifier.Default)
functionsBar.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)

local functionsFrame = Instance.new("ScrollingFrame",functionsBar)
functionsFrame.Size = UDim2.new(1,0,.8,0)
functionsFrame.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.ScrollBarBackground,Enum.StudioStyleGuideModifier.Default)
functionsFrame.ScrollBarImageColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.ScrollBar,Enum.StudioStyleGuideModifier.Default)
functionsFrame.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
functionsFrame.ScrollBarThickness = 8
functionsFrame.CanvasSize = UDim2.new(0,0,4,0)

local plusButton = Instance.new("TextButton",functionsBar)
plusButton.Text = "+"
plusButton.TextScaled = true
plusButton.Font = Enum.Font.SourceSansBold
plusButton.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.TitlebarText,Enum.StudioStyleGuideModifier.Default)
plusButton.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Hover)
plusButton.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
plusButton.Size = UDim2.new(.16,0,.16,0)
plusButton.AnchorPoint = Vector2.new(.5,.5)
plusButton.Position = UDim2.new(.35,0,.9,0)
local aspectRatio  = Instance.new("UIAspectRatioConstraint",plusButton)
aspectRatio.AspectType = Enum.AspectType.ScaleWithParentSize
aspectRatio.DominantAxis = Enum.DominantAxis.Height

local minusButton = Instance.new("TextButton",functionsBar)
minusButton.Text = "-"
minusButton.TextScaled = true
minusButton.Font = Enum.Font.SourceSansBold
minusButton.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.TitlebarText,Enum.StudioStyleGuideModifier.Default)
minusButton.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Hover)
minusButton.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
minusButton.Size = UDim2.new(.16,0,.16,0)
minusButton.AnchorPoint = Vector2.new(.5,.5)
minusButton.Position = UDim2.new(.65,0,.9,0)
local aspectRatio  = Instance.new("UIAspectRatioConstraint",minusButton)
aspectRatio.AspectType = Enum.AspectType.ScaleWithParentSize
aspectRatio.DominantAxis = Enum.DominantAxis.Height

local confirmBox = Instance.new("Frame",mainFrame)
confirmBox.Size = UDim2.new(.175,0,.3,0)
confirmBox.Visible = false
confirmBox.AnchorPoint = Vector2.new(1,1)
confirmBox.Position = UDim2.new(.1,0,.1,0)
confirmBox.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
confirmBox.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.CurrentMarker,Enum.StudioStyleGuideModifier.Default)
confirmBox.ZIndex = 2

local confirmText = Instance.new("TextLabel",confirmBox)
confirmText.Text = "Are you sure?"
confirmText.TextScaled = true
confirmText.BackgroundTransparency = 1
confirmText.ZIndex = 3
confirmText.Font = Enum.Font.SourceSansBold
confirmText.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.SubText,Enum.StudioStyleGuideModifier.Default)
confirmText.Size = UDim2.new(1,0,.25,0)

local confirmYes = Instance.new("TextButton",confirmBox)
confirmYes.AnchorPoint = Vector2.new(.5,.5)
confirmYes.Position = UDim2.new(.33,0,.6,0)
confirmYes.Size = UDim2.new(.25,0,.6,0)
confirmYes.Text = "Y"
confirmYes.ZIndex = 3
confirmYes.TextScaled = true
confirmYes.Font = Enum.Font.SourceSansBold
confirmYes.BackgroundColor3 = Color3.fromRGB(0,150,0)
confirmYes.TextColor3 = Color3.fromRGB(0,210,0)
confirmYes.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)

local confirmNo = Instance.new("TextButton",confirmBox)
confirmNo.AnchorPoint = Vector2.new(.5,.5)
confirmNo.Position = UDim2.new(.66,0,.6,0)
confirmNo.Size = UDim2.new(.25,0,.6,0)
confirmNo.Text = "X"
confirmNo.ZIndex = 3
confirmNo.TextScaled = true
confirmNo.Font = Enum.Font.SourceSansBold
confirmNo.BackgroundColor3 = Color3.fromRGB(150,0,0)
confirmNo.TextColor3 = Color3.fromRGB(210,0,0)
confirmNo.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)

local textPopUp = Instance.new("Frame",mainFrame)
textPopUp.Size = UDim2.new(.3,0,.3,0)
textPopUp.Visible = false
textPopUp.AnchorPoint = Vector2.new(1,1)
textPopUp.Position = UDim2.new(.1,0,.1,0)
textPopUp.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
textPopUp.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.CurrentMarker,Enum.StudioStyleGuideModifier.Default)
textPopUp.ZIndex = 2

local textBox = Instance.new("TextBox",textPopUp)
textBox.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
textBox.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.InputFieldBackground,Enum.StudioStyleGuideModifier.Default)
textBox.Font = Enum.Font.SourceSansBold
textBox.TextScaled = true
textBox.Text = ""
textBox.ZIndex = 3
textBox.Size = UDim2.new(1,-8,.5,-8)
textBox.AnchorPoint = Vector2.new(.5,.5)
textBox.Position = UDim2.new(.5,0,.25,0)
textBox.PlaceholderText = "Function name"
textBox.PlaceholderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.SubText,Enum.StudioStyleGuideModifier.Default)
textBox.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.MainText,Enum.StudioStyleGuideModifier.Default)

local textClose = Instance.new("TextButton",textPopUp)
textClose.AnchorPoint = Vector2.new(1,1)
textClose.Text = "X"
textClose.TextScaled = true
textClose.Size = UDim2.new(.4,0,0.4,0)
textClose.Font = Enum.Font.SourceSansBold
textClose.Position = UDim2.new(1,0,1,0)
textClose.TextColor3 = Color3.fromRGB(125,0,0)
textClose.BackgroundColor3 = Color3.fromRGB(190,0,0)
textClose.ZIndex = 3
textClose.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
local aspectRatio  = Instance.new("UIAspectRatioConstraint",textClose)
aspectRatio.AspectType = Enum.AspectType.ScaleWithParentSize
aspectRatio.DominantAxis = Enum.DominantAxis.Height

local textConfirm = Instance.new("TextButton",textPopUp)
textConfirm.Text = "Confirm"
textConfirm.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.DimmedText,Enum.StudioStyleGuideModifier.Default)
textConfirm.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
textConfirm.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
textConfirm.AnchorPoint = Vector2.new(.5,.5)
textConfirm.Position = UDim2.new(.5,0,.75,0)
textConfirm.Size = UDim2.new(.5,0,.4,0)
textConfirm.Font = Enum.Font.SourceSansBold
textConfirm.ZIndex = 3
textConfirm.TextScaled = true

local textLabel = Instance.new("TextLabel",mainFrame)
textLabel.Text = "Current Tags"
textLabel.AnchorPoint = Vector2.new(1,0)
textLabel.Position = UDim2.new(.7,0,0,0)
textLabel.Size = UDim2.new(.3,0,.125,0)
textLabel.TextScaled = true
textLabel.Font = Enum.Font.SourceSansBold
textLabel.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Tab,Enum.StudioStyleGuideModifier.Default)
textLabel.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.MainText,Enum.StudioStyleGuideModifier.Default)
textLabel.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)

local tagsBar = Instance.new("Frame",widget)
tagsBar.Size = UDim2.new(.3,0,.875,0)
tagsBar.AnchorPoint = Vector2.new(1,0)
tagsBar.LayoutOrder = 1
tagsBar.Position = UDim2.new(.7,0,0.125,0)
tagsBar.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.TabBar,Enum.StudioStyleGuideModifier.Default)
tagsBar.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)

local tagsFrame = Instance.new("ScrollingFrame",tagsBar)
tagsFrame.Size = UDim2.new(1,0,.8,0)
tagsFrame.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.ScrollBarBackground,Enum.StudioStyleGuideModifier.Default)
tagsFrame.ScrollBarImageColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.ScrollBar,Enum.StudioStyleGuideModifier.Default)
tagsFrame.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
tagsFrame.ScrollBarThickness = 8
tagsFrame.CanvasSize = UDim2.new(0,0,4,0)
local listLayout = Instance.new("UIListLayout",tagsFrame)

local plusShowButton = Instance.new("TextButton",tagsBar)
plusShowButton.Text = "+"
plusShowButton.TextScaled = true
plusShowButton.Font = Enum.Font.SourceSansBold
plusShowButton.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.TitlebarText,Enum.StudioStyleGuideModifier.Default)
plusShowButton.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Hover)
plusShowButton.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
plusShowButton.Size = UDim2.new(.16,0,.16,0)
plusShowButton.AnchorPoint = Vector2.new(.5,.5)
plusShowButton.Position = UDim2.new(.35,0,.9,0)
local aspectRatio  = Instance.new("UIAspectRatioConstraint",plusShowButton)
aspectRatio.AspectType = Enum.AspectType.ScaleWithParentSize
aspectRatio.DominantAxis = Enum.DominantAxis.Height

local minusShowButton = Instance.new("TextButton",tagsBar)
minusShowButton.Text = "-"
minusShowButton.TextScaled = true
minusShowButton.Font = Enum.Font.SourceSansBold
minusShowButton.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.TitlebarText,Enum.StudioStyleGuideModifier.Default)
minusShowButton.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Hover)
minusShowButton.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
minusShowButton.Size = UDim2.new(.16,0,.16,0)
minusShowButton.AnchorPoint = Vector2.new(.5,.5)
minusShowButton.Position = UDim2.new(.65,0,.9,0)
local aspectRatio  = Instance.new("UIAspectRatioConstraint",minusShowButton)
aspectRatio.AspectType = Enum.AspectType.ScaleWithParentSize
aspectRatio.DominantAxis = Enum.DominantAxis.Height

local editProperties = Instance.new("TextButton",mainFrame)
editProperties.TextScaled = true
editProperties.Font = Enum.Font.SourceSansBold
editProperties.Text = "Custom properties"
editProperties.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.DimmedText,Enum.StudioStyleGuideModifier.Default)
editProperties.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
editProperties.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Disabled)
editProperties.Size = UDim2.new(.15,0,.2,0)
editProperties.AnchorPoint = Vector2.new(1,0)
editProperties.Position = UDim2.new(.3625,0,.7)

local defaultProperties = Instance.new("TextButton",mainFrame)
defaultProperties.TextScaled = true
defaultProperties.Font = Enum.Font.SourceSansBold
defaultProperties.Text = "Default properties"
defaultProperties.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.DimmedText,Enum.StudioStyleGuideModifier.Default)
defaultProperties.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
defaultProperties.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Disabled)
defaultProperties.Size = UDim2.new(.15,0,.2,0)
defaultProperties.AnchorPoint = Vector2.new(1,0)
defaultProperties.Position = UDim2.new(.1875,0,.7)

local getLatestModel = Instance.new("TextButton",mainFrame)
getLatestModel.TextScaled = true
getLatestModel.Font = Enum.Font.SourceSansBold
getLatestModel.Text = "Get latest model"
getLatestModel.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.SubText,Enum.StudioStyleGuideModifier.Default)
getLatestModel.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
getLatestModel.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Disabled)
getLatestModel.Size = UDim2.new(.15,0,.2,0)
getLatestModel.AnchorPoint = Vector2.new(1,0)
getLatestModel.Position = UDim2.new(.1875,0,.425)

local selectedPart = Instance.new("TextLabel",mainFrame)
selectedPart.TextScaled = true
selectedPart.Font = Enum.Font.SourceSansBold
selectedPart.Text = "Selected: 0 Parts - "
selectedPart.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.DimmedText,Enum.StudioStyleGuideModifier.Default)
selectedPart.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
selectedPart.Size = UDim2.new(.35,0,.125,0)
selectedPart.Position = UDim2.new(.025,0,.1,0)
selectedPart.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Disabled)

-- ===== FUNCTIONS ===== --


local selection = game:GetService("Selection")
local minusButtonDeb = false
local plusButtonDeb = false
local highlighted 
local mouse = plugin:GetMouse()
local model
local selectedButton
local selectedTag
local selectdeb = false
local changeHistoryService = game:GetService("ChangeHistoryService")

local function selectFunction(guiButton)
	local function buttonClicked()
		if selectdeb == false then
			selectdeb = true
			if guiButton == selectedButton then
				selectedButton.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
				selectedButton = nil
				defaultProperties.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.DimmedText,Enum.StudioStyleGuideModifier.Default)
				defaultProperties.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Disabled)
				wait()
			else
				if selectedButton ~= nil then
					selectedButton.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
				end	
				defaultProperties.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.SubText,Enum.StudioStyleGuideModifier.Default)
				defaultProperties.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
				selectedButton = guiButton
				selectedButton.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Pressed)
				wait()	
			end
			selectdeb = false
		end
	end
	guiButton.MouseButton1Click:Connect(buttonClicked)
end


toggle.Click:Connect(function()
	widget.Enabled = not widget.Enabled
	if widget.Enabled == true then
		for i,v in pairs(functionsFrame:GetChildren()) do
			if not v:IsA("UIListLayout") then
				v:Destroy()
			end
		end
		local listLayout = Instance.new("UIListLayout",functionsFrame)
		if game:GetService("StarterGui"):FindFirstChild("guiElements") then
			for i,v in pairs(game:GetService("StarterGui"):FindFirstChild("guiElements"):FindFirstChild("GuiFunctions"):GetChildren()) do
				local newButton = Instance.new("TextButton",functionsFrame)
				selectFunction(newButton)
				newButton.Size = UDim2.new(1,-8,.05,0)
				newButton.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
				newButton.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
				newButton.Text = v.Name
				newButton.Font = Enum.Font.SourceSansBold
				if table.find(defaults,v.Name) then
					newButton.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.SubText,Enum.StudioStyleGuideModifier.Default)
				else
					newButton.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.DimmedText,Enum.StudioStyleGuideModifier.Default)
				end
				newButton.TextStrokeColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Dark,Enum.StudioStyleGuideModifier.Default)
				newButton.TextScaled = true
			end
		end
	end
end)


function loadModel()
	local localScript = Instance.new("LocalScript")
	local functionsMod = Instance.new("ModuleScript",localScript)
	local functionsFolder = Instance.new("Folder",localScript)
	functionsFolder.Name = "GuiFunctions"
	functionsMod.Name = "Functions"
	localScript.Name = "guiElements"
	model = functionsFolder
	
	localScript.Source = "local functions = require(script:WaitForChild('Functions')) \nlocal collectionService = game:GetService('CollectionService') \n \nwait(1)\n \nfunction attachTagToGuiObject(tag,effect) \n	assert(type(tag) == 'string') \n	assert(type(effect) == 'function') \n	local guiInstances = collectionService:GetTagged(tag) \n	if #guiInstances ~= 0 then \n		for _,part in ipairs(guiInstances) do \n			if not functions.IsGuiObject(part) then \n				error(string.format('%q is not a GuiObject',part:GetFullName())) \n			end \n			local success, errormessage = pcall(effect,part) \n			if not success then \n				error(string.format('An error occured when putting %q on %q: %q',tag,part:GetFullName(),errormessage)) \n			end \n		end \n	else \n		warn(string.format('No GuiObjects are using the tag %q',tag)) \n	end \nend \n \nfor _,part in ipairs(script:WaitForChild('GuiFunctions'):GetChildren()) do \n	local tag = part.Name \n	local Function = require(part) \n	attachTagToGuiObject(tag,Function) \nend"
	localScript.Parent = workspace	
	
	functionsMod.Source = " -- adding any additional code into here will get lost when getting the latest version of the model. \n \nlocal clickName \nlocal Functions = {} \n \nFunctions.IsGuiObject = function(guiObject) \n	local instanceType = typeof(guiObject) == 'Instance' \n	local instanceObject = guiObject:IsA('GuiObject') \n	local check = instanceType and instanceObject \n	if not check then \n		local parameterAsString = instanceType and guiObject.ClassName or typeof(guiObject); \n		local message = string.format( \n			'Invalid parameter! Expected a GuiObject, got %q', \n			parameterAsString ); \n		error(message); \n	end \n	return guiObject \nend \n \nFunctions.IsGuiButton = function(guiObject) \n	local instanceType = typeof(guiObject) == 'Instance' \n	local instanceObject = guiObject:IsA('GuiButton') \n	local check = instanceType and instanceObject \n	if not check then \n		local parameterAsString = instanceType and guiObject.ClassName or typeof(guiObject); \n		local message = string.format( \n			'Invalid parameter! Expected a GuiObject, got %q', \n			parameterAsString ); \n		error(message); \n	end \n	return guiObject \nend \n \nreturn Functions	"
	
	local _buttonMove = Instance.new("ModuleScript",functionsFolder)
	_buttonMove.Source = "local functions = require(script.Parent.Parent.Functions) \nlocal function _buttonMove(guiObject) \n	local originalSizes = {} \n	originalSizes[guiObject] = guiObject.Size \n	functions.IsGuiButton(guiObject) \n	\n -- ===== DEFAULT VALUES ===== -- \nlocal defaultValues = { \n		['Size'] = UDim2.new(.2,0,0,0); \n		['EasingStyle'] = Enum.EasingStyle.Sine; \n		['Time'] = .5; \n	} \n	local originalSize \n	local function expandButton() \n		local mod \n		local values = {} \n		if guiObject:FindFirstChild('_Config') then \n			mod = require(guiObject:FindFirstChild('_Config')) \n			for i,value in pairs(defaultValues) do \n				if mod[i] then \n					values[i] = mod[i] \n				else \n					values[i] = value \n				end \n			end \n		else \n			values = defaultValues \n		end \n		originalSize = originalSizes[guiObject] \n		guiObject:TweenSize(originalSize + values['Size'],Enum.EasingDirection.Out,values['EasingStyle'],values['Time'],true) \n	end \n	local function retractButton() \n		local mod \n		local values = {} \n		if guiObject:FindFirstChild('_Config') then \n			mod = require(guiObject:FindFirstChild('_Config')) \n			for i,value in pairs(defaultValues) do \n				if mod[i] then \n					values[i] = mod[i] \n				else \n					values[i] = value \n				end \n			end \nelse \n			values = defaultValues \nend \n		guiObject:TweenSize(originalSize,Enum.EasingDirection.Out,values['EasingStyle'],values['Time'],true) \n	end \guiObject.MouseEnter:Connect(expandButton) \n	guiObject.MouseLeave:Connect(retractButton) \nend \n \nreturn _buttonMove;"
	_buttonMove.Name = "_buttonMove"
	
	local _buttonSounds = Instance.new("ModuleScript",functionsFolder)
	_buttonSounds.Source = "local functions = require(script.Parent.Parent.Functions) \n \n -- ===== DEFAULT VALUES ===== -- \nlocal soundService = game:GetService('SoundService') \n \nlocal hoverSoundId = 408524543 \nlocal hoverSound = Instance.new('Sound') \nhoverSound.Parent = game:GetService('SoundService') \nhoverSound.SoundId  = 'rbxassetid://'..hoverSoundId \nhoverSound.Name = 'ui_hover1' \nhoverSound.Volume = .2 \nfunctions.hoverSound = hoverSound \n \nlocal clickSoundId = 3868133279 \nlocal clickSound = Instance.new('Sound') \nclickSound.Parent = game:GetService('SoundService') \nclickSound.SoundId  = 'rbxassetid://'..clickSoundId \nclickSound.Name = 'ui_button1' \nclickSound.PlaybackSpeed = 2.5 \nclickSound.Volume = .2 \nfunctions.clickSound = clickSound \n \nlocal function _buttonSounds(guiObject) \n \n	local function mouseLabelHover() \n		functions.hoverSound:Play() \n	end \n	local function mouseButtonClick() \n		local check = functions.IsGuiButton(guiObject) \n		if check then \n			functions.clickSound:Play() \n		else \n			error(string.format'%q is not a GuiButton',guiObject:GetFullName()) \n		end \n \n	end \n	guiObject.MouseEnter:Connect(mouseLabelHover) \n	guiObject.MouseButton1Click:Connect(mouseButtonClick) \nend \n \nreturn _buttonSounds;"
	_buttonSounds.Name = "_buttonSounds"
	
	local _labelInfo = Instance.new("ModuleScript",functionsFolder)
	_labelInfo.Source = "local userInputService = game:GetService('UserInputService') \nlocal textService = game:GetService('TextService') \nlocal functions = require(script.Parent.Parent.Functions) \nlocal function _labelInfo(guiObject) \n \n -- ===== DEFAULT VALUES ===== -- \n\nlocal labelPosition = true	 -- false: Below the mouse true: Above the mouse	\n\nlocal defaultValues = { \n		['Text'] = ' '; \n		['BackgroundColor3'] = Color3.fromRGB(125,125,125); \n		['BackgroundTransparency'] = .75; \n		['BorderColor3'] = Color3.fromRGB(0,0,0); \n		['BorderMode'] = Enum.BorderMode.Outline; \n		['BorderSizePixel'] = 0; \n		['Font'] = Enum.Font.Arial; \n		['TextColor3'] = Color3.fromRGB(0,0,0); \n		['TextStrokeColor3'] = Color3.fromRGB(0,0,0); \n		['TextStrokeTransparency'] = 1; \n		['TextTransparency'] = 0; \n		['TextXAlignment'] = Enum.TextXAlignment.Left; \n		['TextYAlignment'] = Enum.TextYAlignment.Bottom; \n		['TextSize'] = 10; \n	} \n	local textLabel \n \n	local function labelMove() \n		if textLabel then \n			local mousePos = userInputService:GetMouseLocation() \n			if labelPosition then \n				textLabel.Position = UDim2.new(0,mousePos.X + 5,0,mousePos.Y - (40 + textLabel.Size.Y.Offset)) \n			else \n				textLabel.Position = UDim2.new(0,mousePos.X + 5,0,mousePos.Y - 5) \n			end \n		end \n	end \n \n	local function labelCreate() \n		if not textLabel then \n			textLabel = Instance.new('TextLabel') \n			textLabel.Visible = false \n			textLabel.Parent = guiObject:FindFirstAncestorOfClass('ScreenGui') \n			textLabel.ZIndex = guiObject.ZIndex + 1 \n			local mod \n			local values = {} \n			if guiObject:FindFirstChild('_Config') then \n				mod = require(guiObject:FindFirstChild('_Config')) \n				for i,value in pairs(defaultValues) do \n					if mod[i] then \n						values[i] = mod[i] \n					else \n						values[i] = value \n					end \n				end \n			else \n				values = defaultValues \n			end \n			textLabel.Size = UDim2.new(.1,0,.25,0) \n			for i,v in pairs(values) do \n				textLabel[i] = v \n			end \n			local newSize = textService:GetTextSize(textLabel.Text,values['TextSize'],values['Font'],textLabel.AbsoluteSize) \n			textLabel.Size = UDim2.new(0,newSize.X,0,newSize.Y) \n			local mousePos = userInputService:GetMouseLocation() \n			if labelPosition then \n				textLabel.Position = UDim2.new(0,mousePos.X + 5,0,mousePos.Y - (40 + textLabel.Size.Y.Offset)) \n			else \n				textLabel.Position = UDim2.new(0,mousePos.X + 5,0,mousePos.Y - 5) \n			end \n			textLabel.Visible = true \n			end \n	end \n \n	local function labelDestroy() \n		if textLabel then \n			textLabel:Destroy() \n			textLabel = nil \n		end \n	end \n	guiObject.MouseEnter:Connect(labelCreate) \n	guiObject.MouseLeave:Connect(labelDestroy) \n	guiObject.MouseMoved:Connect(labelMove) \nend \n \nreturn _labelInfo;"
	_labelInfo.Name = "_labelInfo"
	
	if game:GetService("StarterGui"):FindFirstChild("guiElements") then
		
		local newFolder = Instance.new("Folder",localScript)
		newFolder.Name = "oldDefaultFunctions - Copy values over"
		
		local check = Instance.new("ObjectValue",newFolder)
		check.Name = "_check"
		
		for i,v in pairs(game:GetService("StarterGui"):FindFirstChild("guiElements").GuiFunctions:GetChildren()) do
			if not table.find(defaults,v.Name) then
				v.Parent = functionsFolder
			else
				v.Parent = newFolder
			end
		end
		
		if #newFolder:GetChildren() == 0 then
			newFolder:Destroy()
		end
		
		game:GetService("StarterGui"):FindFirstChild("guiElements"):Destroy()
	end
	
	localScript.Parent = game:GetService("StarterGui")
	
	for i,v in pairs(functionsFrame:GetChildren()) do
		if not v:IsA("UIListLayout") then
			v:Destroy()
		end
	end
	
	local listLayout = Instance.new("UIListLayout",functionsFrame)
	for i,v in pairs(functionsFolder:GetChildren()) do
		local newButton = Instance.new("TextButton",functionsFrame)
		selectFunction(newButton)
		newButton.Size = UDim2.new(1,-8,.05,0)
		newButton.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
		newButton.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
		newButton.Text = v.Name
		newButton.Font = Enum.Font.SourceSansBold
		if table.find(defaults,v.Name) then
			newButton.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.SubText,Enum.StudioStyleGuideModifier.Default)
		else
			newButton.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.DimmedText,Enum.StudioStyleGuideModifier.Default)
		end
		newButton.TextStrokeColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Dark,Enum.StudioStyleGuideModifier.Default)
		newButton.TextScaled = true
	end
	if selectedTag ~= nil then
		selectedTag.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
	end	
	selectedButton = nil
	print"[Gui Elements]: Loaded lastest version of the model."
	changeHistoryService:SetWaypoint("Get Latest Model")
end

if not game:GetService("StarterGui"):FindFirstChild("guiElements") then
	loadModel()	
else
	model = game:GetService("StarterGui"):FindFirstChild("guiElements").GuiFunctions
	for i,v in pairs(functionsFrame:GetChildren()) do
		if not v:IsA("UIListLayout") then
			v:Destroy()
		end
	end
	local listLayout = Instance.new("UIListLayout",functionsFrame)
	for i,v in pairs(model:GetChildren()) do
		local newButton = Instance.new("TextButton",functionsFrame)
		selectFunction(newButton)
		newButton.Size = UDim2.new(1,-8,.05,0)
		newButton.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
		newButton.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
		newButton.Text = v.Name
		newButton.Font = Enum.Font.SourceSansBold
		if table.find(defaults,v.Name) then
			newButton.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.SubText,Enum.StudioStyleGuideModifier.Default)
		else
			newButton.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.DimmedText,Enum.StudioStyleGuideModifier.Default)
		end
		newButton.TextStrokeColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Dark,Enum.StudioStyleGuideModifier.Default)
		newButton.TextScaled = true
	end
end



for i,v in pairs(functionsFrame:GetChildren()) do
	if v:IsA("GuiButton") then
		selectFunction(v)
	end	
end

minusButton.MouseButton1Click:Connect(function()
	if selectedButton and minusButtonDeb == false and textPopUp.Visible == false then
		confirmBox.Visible = true
		minusButtonDeb = true
		confirmBox.Position = UDim2.new(0,minusButton.AbsolutePosition.X - 4,0,minusButton.AbsolutePosition.Y - 4)
		confirmYes.MouseButton1Click:Connect(function()
			if not table.find(defaults,selectedButton.Text) then
				if model:FindFirstChild(selectedButton.Text) then
					model:FindFirstChild(selectedButton.Text):Destroy()
					for i,v in pairs(game:GetService("CollectionService"):GetTagged(selectedButton.Text)) do
						game:GetService("CollectionService"):RemoveTag(v,selectedButton.Text)
					end
					print("[Gui Elements]: Removed tag and function'"..selectedButton.Text.."'")
					selectedButton:Destroy()
				end
			else
				warn(selectedButton.Text.." can not be deleted, it is a default function.")
			end
			minusButtonDeb = false
			confirmBox.Visible = false
			changeHistoryService:SetWaypoint("Delete GUI Function")
		end)
		confirmNo.MouseButton1Click:Connect(function()
			confirmBox.Visible = false
			minusButtonDeb = false
		end)
	else
		if not selectedButton then
			print"[Gui Elements]: No function selected! Please select a function from the list 'Functions' if you want to delete it."
		end
	end
end)

plusButton.MouseButton1Click:Connect(function()
	if plusButtonDeb == false and confirmBox.Visible == false then
		plusButtonDeb = true
		textPopUp.Visible = true
		textPopUp.Position = UDim2.new(0,plusButton.AbsolutePosition.X - 4,0,plusButton.AbsolutePosition.Y - 4)
		textClose.MouseButton1Click:Connect(function()
			textPopUp.Visible = false
			plusButtonDeb = false
		end)
		textConfirm.MouseButton1Click:Connect(function()
			textPopUp.Visible = false
			if not model:FindFirstChild(textBox.Text) and textBox.Text ~= "" then
				local module = Instance.new("ModuleScript")
				local newName = string.gsub(textBox.Text," ","")
				module.Source = "local functions = require(script.Parent.Parent.Functions) \nlocal function "..newName.."() \n \nend \n \nreturn "..newName
				module.Parent = model
				plugin:OpenScript(module)
				module.Name = newName
				
				local newButton = Instance.new("TextButton",functionsFrame)
				newButton.Size = UDim2.new(1,-8,.05,0)
				newButton.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
				newButton.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Pressed)
				newButton.Text = newName
				newButton.Font = Enum.Font.SourceSansBold
				newButton.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.DimmedText,Enum.StudioStyleGuideModifier.Pressed)
				newButton.TextStrokeColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Dark,Enum.StudioStyleGuideModifier.Default)
				newButton.TextScaled = true
				selectFunction(newButton)
				functionsFrame.CanvasPosition = Vector2.new(0,newButton.AbsolutePosition.Y - newButton.AbsoluteSize.Y)
				
				if selectedButton then
					selectedButton.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
				end	
				selectedButton = newButton
				
			else
				if model:FindFirstChild(textBox.Text) then
					warn("A function already has that name!")
				elseif textBox.Text == "" then
					warn("You must name the function!")
				end
			end
			textBox.Text = ""
		end)
		plusButtonDeb = false
	end
end)

function clearTagView()
	for i,v in pairs(tagsFrame:GetChildren()) do
		if not v:IsA("UIListLayout") then
			v:Destroy()
		end
	end
end

local function selectTag(guiButton)
	local function buttonClicked()
		if guiButton == selectedTag then
			selectedTag.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
			selectedTag = nil
		else
			if selectedTag ~= nil then
				selectedTag.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
			end	
			selectedTag = guiButton
			selectedTag.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Pressed)
		end
	end
	guiButton.MouseButton1Click:Connect(buttonClicked)
end

selection.SelectionChanged:Connect(function()
	local selected = selection:Get()
	
	if #selected == 1 then
		clearTagView()
		selectedPart.Text = ("Selected: 1 Part - ".. selected[1].Name)
		for i,tag in pairs(game:GetService("CollectionService"):GetTags(selected[1])) do
			local newButton = Instance.new("TextButton",tagsFrame)
			newButton.Size = UDim2.new(1,-8,.05,0)
			newButton.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
			newButton.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
			newButton.Text = tag
			newButton.Font = Enum.Font.SourceSansBold
			newButton.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.SubText,Enum.StudioStyleGuideModifier.Default)
			newButton.TextStrokeColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Dark,Enum.StudioStyleGuideModifier.Default)
			newButton.TextScaled = true
			selectTag(newButton)
			editProperties.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.SubText,Enum.StudioStyleGuideModifier.Default)
			editProperties.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
		end
		if selectedTag then
			selectedTag.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
		end
		selectedTag = nil
		highlighted = selected[1]
	else
		selectedPart.Text = ("Selected: "..#selected.." Parts - ")
		highlighted = nil
		if selectedTag then
			selectedTag.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
		end
		editProperties.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.DimmedText,Enum.StudioStyleGuideModifier.Default)
		editProperties.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Disabled)
		selectedTag = nil
	end
end)

minusShowButton.MouseButton1Click:Connect(function()
	if selectedTag and minusButtonDeb == false and textPopUp.Visible == false then
		confirmBox.Visible = true
		minusButtonDeb = true
		confirmBox.Position = UDim2.new(0,minusShowButton.AbsolutePosition.X - 4,0,minusShowButton.AbsolutePosition.Y - 4)
		confirmYes.MouseButton1Click:Connect(function()
			minusButtonDeb = false
			confirmBox.Visible = false
			if highlighted == selection:Get()[1] then
				game:GetService("CollectionService"):RemoveTag(highlighted,selectedTag.Text)
				print("[Gui Elements]: Removed tag '"..selectedTag.Text.."' from "..highlighted:GetFullName())
			else
				print("[Gui Elements]: Selected objects switched")
			end
			selectedTag:Destroy()
			changeHistoryService:SetWaypoint("Delete Tag")
		end)
		confirmNo.MouseButton1Click:Connect(function()
			minusButtonDeb = false
			confirmBox.Visible = false
		end)
	else
		if not selectedTag then
			minusButtonDeb = false
			print"[Gui Elements]: No tags selected! Please select a tag from the 'Current Tags' List if you want to remove it from the selected object."
		end
	end
end)

plusShowButton.MouseButton1Click:Connect(function()
	if selectedButton and plusButtonDeb == false and textPopUp.Visible == false then
		--confirmBox.Visible = true
		plusButtonDeb = true
		--confirmBox.Position = UDim2.new(0,minusShowButton.AbsolutePosition.X - 4,0,minusShowButton.AbsolutePosition.Y - 4)
		if highlighted == selection:Get()[1] and #selection:Get() == 1 then
			if not game:GetService("CollectionService"):HasTag(highlighted,selectedButton.Text) then
				game:GetService("CollectionService"):AddTag(highlighted,selectedButton.Text)
				local newButton = Instance.new("TextButton",tagsFrame)
				newButton.Size = UDim2.new(1,-8,.05,0)
				newButton.BorderColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Border,Enum.StudioStyleGuideModifier.Default)
				newButton.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
				newButton.Text = selectedButton.Text
				newButton.Font = Enum.Font.SourceSansBold
				newButton.TextColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.SubText,Enum.StudioStyleGuideModifier.Default)
				newButton.TextStrokeColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Dark,Enum.StudioStyleGuideModifier.Default)
				newButton.TextScaled = true
				if selectedTag then
					selectedTag.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Default)
				end
				selectedTag = newButton
				selectedTag.BackgroundColor3 = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button,Enum.StudioStyleGuideModifier.Pressed)
				selectTag(newButton)
				print("[Gui Elements]: Added tag '"..selectedTag.Text.."' to "..highlighted:GetFullName())
			else
				print("[Gui Elements]: That part already has that tag!")
			end
		else
			if not highlighted then
				print"[Gui Elements]: No object selected! Please select a GuiObject from the Explorer or Workspace to add a function to it."
			end
		end
		plusButtonDeb = false
	else
		if not selectedButton then
			print"[Gui Elements]: No function selected! Please select a function from the 'Functions' List if you want to add it to the selected object."
			plusButtonDeb = false
		end
	end
end)

defaultProperties.MouseButton1Click:Connect(function()
	if selectedButton then
		plugin:OpenScript(model[selectedButton.Text])
	end
end)

editProperties.MouseButton1Click:Connect(function()
	if highlighted then 
		if highlighted:FindFirstChild("_Config") then
			plugin:OpenScript(highlighted:FindFirstChild("_Config"))
		else
			local module = Instance.new("ModuleScript")
			module.Name = "_Config"
			module.Parent = highlighted
			module.Source = "-- To add a custom property, insert 'module.PropertyName = PropertyValue' below. If none is added, then it will use the default value. \nlocal module = {} \n \nreturn module"
			plugin:OpenScript(module)
		end
	end	
end)

local getDeb = false

getLatestModel.MouseButton1Click:Connect(function()
	if getDeb == false then
		getDeb = true
		if game:GetService("StarterGui"):FindFirstChild("guiElements") then
			if model.Parent:FindFirstChild("_check",true) then
				confirmBox.Visible = true
				warn"[Gui Elements]: You have functions you havent moved the default values over to the new scripts. Are you sure you want to delete them by getting the latest model?"
				confirmBox.Position = UDim2.new(0,getLatestModel.AbsolutePosition.X + confirmBox.AbsoluteSize.X + 4,0,getLatestModel.AbsolutePosition.Y - 4)
				confirmYes.MouseButton1Click:Connect(function()
					loadModel()
					confirmBox.Visible = false
					getDeb = false
				end)
				confirmNo.MouseButton1Click:Connect(function()
					confirmBox.Visible = false
					getDeb = false
				end)
			else
				loadModel()
				getDeb = false
			end
		else
			loadModel()
			getDeb = false
		end
	end
end)

New Changes

V1.3 - 7/2/2020

  • Remade into a plugin from its old hard to use model state

V1.3.1 - 7/3/2020

  • Changed method of Inserting the guiElements script which caused the Widget to fail to load.
  • Cleaner Output messages for more feedback
  • Small UI Changes
  • ChangeHistoryService
  • Fixes

V1.3.2 - 7/5/2020

  • Removed auto load when opening up a place, you now need to press ‘Get latest model’ to insert it.
  • Changed float position to right on default instead of bottom

V1.3.3 - 8/29/2020

  • Setting to change _labelInfo to above or below the mouse

Hello! This is the first resource I have made and I’m posting it here for everyone to use, and to get feedback on how I can improve it.

My goal when making this was to make making GUI work simpler and faster because I found myself copying and pasting the same scripts over and over for different buttons, labels, etc. This made me go out and make this which takes use of CollectionService to do it all.

The basic model contains several things:

  • Local Script
    • Functions Module
    • Tags Folder
      • _buttonMove
      • _buttonSounds
      • _labelInfo

Examples

_buttonMove
15d764dea89ba5790311ba64ca649460
_buttonSounds
*Cant play audio in gifs, but plays customizable click sounds and hover sounds!

_labenInfo
dd6bed7fadaf4208937ae149c7520609

  • More to come!
What I plan on adding

Because this plugin is still new, there’s a bunch I plan on adding to it. Heres what will come to it:

  • More functionality to _labelInfo to include a header, image, and info text, and improved auto-sizing.
  • New function _labelGrad which will constantly tween a moving gradient effect to the object whenever it is visible
  • New function _hoverLabel for easy changes to any guiObject when hovering over or possibly clicking.
  • Tooltips whenever roblox will allow plugins to make their own built in tooltips
  • Auto send over default values from the preset functions to save you from having to copy and past them manually
  • Your suggestions and more!

Functions

This plugin is very simple; it lets you easily add tags to GUI parts to assign effects to it(I guess its also a tags editor as well). You can easily edit your tags, functions, and properties! (Its also my first plugin so I would appreciate feedback on its design and any bugs!)

There are 7 buttons:
My stupid head trying to figure out how to plugin - Roblox Studio 7_3_2020 11_06_02 PM

Functions with brighter text are default functions, you cant delete them by using the built-in delete button. Darker gray text functions are custom ones. The only difference is that they can be deleted, and the others can’t.

  • Default Properties button allows you to edit the default properties for each function. These are the values it will use if you assign a part to a tag without any custom values.

  • Custom Properties allows you to add properties that will overwrite the Default property. If none is defined here, it will use the default property.

  • Get Latest Model - Gives you the most up-to-date version of the script, and moves all made functions over. Any default functions will be placed into another folder which allows you to easily transfer any default values set in them over until I find a fix for it.

Chosen Tags

  • ‘+’ allows you to add the selected tag highlighted on the right to the current GuiObject you have selected.
  • ‘-’ will remove the tag you have selected under the Chosen Tags section. It will ask you to confirm it so you don’t delete it on accident.

Functions

  • ‘+’ allows you to easily create your own function
  • ‘-’ will remove the selected function, and all tags associated with it. It will ask you to confirm it so you cannot delete it on accident.

That’s all there is to it, Enjoy! Please leave all feedback below, I really appreciate it!
https://www.roblox.com/library/5276555194/GuiElements

I completely deleted the link on accident, whoops

66 Likes

Wow this is really helpful, especially for people who are new to UI designing. Definitely bookmarking this.

5 Likes

This is great! will save me from having to make a Locals
Script to play the sound when someone clicks it.
I’ll be bookmarking this for future usage.

1 Like

This Is Sick! Like Super Duper Helpful!

3 Likes

I have updated the old model with a plugin! Make sure you use the plugin instead of the old model now.

2 Likes

Where can I get this?

1 Like

He posted a link:

On a different post.

1 Like

I tried the plugin but it doesn’t work?

1 Like

Well… that’s not really my problem. I can’t help you because I didn’t make the plugin. You should ask @grif_0 for help.

Hmmm, that’s odd. I’ve tried reinstalling it and I’ve had no issues with it. Can do send me a screenshot of your output?

1 Like

This is actually a life saver! (for the time) thanks for releasing this.

2 Likes

The same happened to me. I don’t know what’s wrong

1 Like

Im working on a fix for this. I still dont know the exact cause but im pretty sure I know what it is. I think itll be out soon / later today.

EDIT: Fix is live, make sure to update the plugin! Thanks for letting me know about it.

2 Likes

I cant here the sound using button_sound

1 Like

Just installed it again today and it works. Thanks!

Edit: A nice feature would be to remove the widget opening automatically on start up.

1 Like

Ill change that so it doesnt pop up every time. I forgot to change that back, I was messing with different positions

2 Likes

Also, this plugin is really good for starting developers. It’s easy to use and has a nice UI. Even though most of these are simple scripts, it’s nice how you implemented it into a plugin.

1 Like

I have a problem with the add-on, it doesn’t work well for me, the icon doesn’t appear but I like the effects, good work :+1:

2 Likes

This is amazing! It will save me SOOO much time!! I cant thank you enough for making this!!

2 Likes

uhh it doesnt show in the ‘plugins’ tab, but on my plugin manage its enabled and installed. waht do i do?

4 Likes