Mouse Collider script has events in .new(), better implementation?

Below is the module and some driver code

--[[
Quick rundown: .new() accepts a Frame Ui object, computes points x1, x2, y1, y2,
and deletes the frame. Several events are created to handle mouse "entering" and when the parent moves.
]]
local UserInputService = game:GetService("UserInputService")
local module = {}
module.__index = module

function module.new(frame: Frame)
	local self = setmetatable(module, {})
	self.Triggered = false
	self.Enabled = true
	
	if frame.Parent.IsA("Frame") then self.Parent = frame.Parent end
	self.Position = frame.AbsolutePosition
	self.Size = frame.AbsoluteSize --TODO: Dynamic size support!
	
	--compute trigger bounds
	self.X1, self.X2, self.Y1, self.Y2 = self.Position.X,
		self.Position.X + self.Size.X,
		self.Position.Y,
		self.Position.Y + self.Size.Y
	
	frame:Destroy()
	
	self.mouseEvent = UserInputService.InputChanged:Connect(function(input)
		if not self.Enabled then return end
		
		if input.UserInputType == Enum.UserInputType.MouseMovement then
			if input.Position.X >= self.X1 and input.Position.X <= self.X2 and
				input.Position.Y >= self.Y1 and input.Position.Y <= self.Y2 then
				self.Triggered = true
			else 
				self.Triggered = false 
			end
		end
	end)
	
	self.absolutePositionMoveEvent = frame:GetPropertyChangedSignal("AbsolutePosition"):Connect(function()
		self.Position = frame.AbsolutePosition
		self.X1, self.X2, self.Y1, self.Y2 = self.Position.X,
			self.Position.X + self.Size.X,
			self.Position.Y,
			self.Position.Y + self.Size.Y
	end)
	
	return self
end

return module
--driver code, someFrame is a Frame UI object, MouseTriggerModule is the above module script
local MouseTrigger = require(MouseTriggerModule).new(someFrame)

while wait() do
    if MouseTrigger.Triggered then print("triggered!") end
end

Is it possible to remove a ton of clutter in the .new() method by doing something different with the events?