text: #pragma once
  
  #include "Raybyte/Core/Constants.h"
  #include "Raybyte/Core/PointerWrappers.h"
  
  #include "Raybyte/Core/Events/Event.h"
  
  #include <glm/glm.hpp>
  #include <imgui.h>
  #include <imgui_internal.h>
  
  namespace Raybyte {
  
  	struct PanelInfo
  	{
  		glm::vec2 Bounds[2];
  		glm::vec2 ContentRegionAvail;
  		glm::vec2 Size;
  		glm::vec2 Position;
  
  		bool Visible;
  		bool Focused;
  		bool Hovered;
  		bool MouseHoveringRect;
  	};
  
  	struct PanelSettings
  	{
  		glm::vec2 Padding = { 8.0f, 8.0f };
  		glm::vec2 ItemSpacing = { 8.0f, 4.0f };
  
  		bool NoDecoration = false;
  		bool NoScrollbar = false;
  		bool NoScrollWithMouse = false;
  	};
  
  	class Panel : public ReferenceCounted
  	{
  	public:
  		virtual void OnGUI() {}
  		virtual void OnEvent(Event& event) {}
  
  		const PanelInfo& GetInfo() const { return m_Info; }
  	
  		PanelSettings& GetSettings() { return m_Settings; };
  		const PanelSettings& GetSettings() const { return m_Settings; };
  	protected:
  		PanelInfo m_Info = {};
  		PanelSettings m_Settings = {};
  		friend class PanelManager;
  	};
  
  }