function init(B)local H=B.Element local t=B._Maid local E=B._DragBind local g=Vector3.new()t:Mark(B._DragBind)t:Mark(B._StartBind)t:Mark(B._StopBind)t:Mark(H.InputBegan:Connect(function(H)if VALID_PRESS[H.UserInputType]then g=H.Position B.IsDragging=true B._StartBind:Fire()end end))t:Mark(UIS.InputEnded:Connect(function(H)if VALID_PRESS[H.UserInputType]then B.IsDragging=false B._StopBind:Fire()end end))t:Mark(UIS.InputChanged:Connect(function(t,W)if B.IsDragging then if VALID_MOVEMENT[t.UserInputType]then local B=t.Position-g g=t.Position E:Fire(H,t,B)end end end))end


function init(self)
	local element = self.Element
	local maid = self._Maid
	local dragBind = self._DragBind
	local lastMousePosition = Vector3.new()
	
	maid:Mark(self._DragBind)
	maid:Mark(self._StartBind)
	maid:Mark(self._StopBind)
	
	maid:Mark(element.InputBegan:Connect(function(input)
		if (VALID_PRESS[input.UserInputType]) then
			lastMousePosition = input.Position
			self.IsDragging = true
			self._StartBind:Fire()
		end
	end))
	
	maid:Mark(UIS.InputEnded:Connect(function(input)
		if (VALID_PRESS[input.UserInputType]) then
			self.IsDragging = false
			self._StopBind:Fire()
		end
	end))
	
	maid:Mark(UIS.InputChanged:Connect(function(input, process)
		if (self.IsDragging) then
			if (VALID_MOVEMENT[input.UserInputType]) then
				local delta = input.Position - lastMousePosition
				lastMousePosition = input.Position
				dragBind:Fire(element, input, delta)
			end
		end
	end))
end
