diff --git a/docs/Elemements/index.md b/docs/Elemements/index.md
new file mode 100644
index 00000000..357b7551
--- /dev/null
+++ b/docs/Elemements/index.md
@@ -0,0 +1,9 @@
+---
+layout: default
+title: Elements
+show_buttons: true
+show_all_code: false
+---
+# Elements
+
+This section will show all the elements that are used by the varous components and by the menus themselves.
\ No newline at end of file
diff --git a/docs/Gemfile b/docs/Gemfile
new file mode 100644
index 00000000..e1e6aabd
--- /dev/null
+++ b/docs/Gemfile
@@ -0,0 +1,36 @@
+source "https://rubygems.org"
+# Hello! This is where you manage which Jekyll version is used to run.
+# When you want to use a different version, change it below, save the
+# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
+#
+# bundle exec jekyll serve
+#
+# This will help ensure the proper Jekyll version is running.
+# Happy Jekylling!
+#gem "jekyll", "~> 4.4.0"
+gem "github-pages", group: :jekyll_plugins
+# This is the default theme for new Jekyll sites. You may change this to anything you like.
+gem "just-the-docs", "~> 0.10.1"
+# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
+# uncomment the line below. To upgrade, run `bundle update github-pages`.
+# gem "github-pages", group: :jekyll_plugins
+# If you have any plugins, put them here!
+group :jekyll_plugins do
+ gem "jekyll-feed", "~> 0.12"
+end
+
+# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
+# and associated library.
+platforms :mingw, :x64_mingw, :mswin, :jruby do
+ gem "tzinfo", ">= 1", "< 3"
+ gem "tzinfo-data"
+end
+
+# Performance-booster for watching directories on Windows
+gem "wdm", "~> 0.1", :platforms => [:mingw, :x64_mingw, :mswin]
+
+# Lock `http_parser.rb` gem to `v0.6.x` on JRuby builds since newer versions of the gem
+# do not have a Java counterpart.
+gem "http_parser.rb", "~> 0.6.0", :platforms => [:jruby]
+
+gem 'jekyll-relative-links'
diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock
new file mode 100644
index 00000000..bb1ed31c
--- /dev/null
+++ b/docs/Gemfile.lock
@@ -0,0 +1,304 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ activesupport (8.0.1)
+ base64
+ benchmark (>= 0.3)
+ bigdecimal
+ concurrent-ruby (~> 1.0, >= 1.3.1)
+ connection_pool (>= 2.2.5)
+ drb
+ i18n (>= 1.6, < 2)
+ logger (>= 1.4.2)
+ minitest (>= 5.1)
+ securerandom (>= 0.3)
+ tzinfo (~> 2.0, >= 2.0.5)
+ uri (>= 0.13.1)
+ addressable (2.8.7)
+ public_suffix (>= 2.0.2, < 7.0)
+ base64 (0.2.0)
+ benchmark (0.4.0)
+ bigdecimal (3.1.9)
+ coffee-script (2.4.1)
+ coffee-script-source
+ execjs
+ coffee-script-source (1.12.2)
+ colorator (1.1.0)
+ commonmarker (0.23.11)
+ concurrent-ruby (1.3.5)
+ connection_pool (2.5.0)
+ csv (3.3.2)
+ dnsruby (1.72.3)
+ base64 (~> 0.2.0)
+ simpleidn (~> 0.2.1)
+ drb (2.2.1)
+ em-websocket (0.5.3)
+ eventmachine (>= 0.12.9)
+ http_parser.rb (~> 0)
+ ethon (0.16.0)
+ ffi (>= 1.15.0)
+ eventmachine (1.2.7)
+ execjs (2.10.0)
+ faraday (2.12.2)
+ faraday-net_http (>= 2.0, < 3.5)
+ json
+ logger
+ faraday-net_http (3.4.0)
+ net-http (>= 0.5.0)
+ ffi (1.17.1-arm64-darwin)
+ ffi (1.17.1-x64-mingw-ucrt)
+ ffi (1.17.1-x86_64-linux-gnu)
+ forwardable-extended (2.6.0)
+ gemoji (4.1.0)
+ github-pages (232)
+ github-pages-health-check (= 1.18.2)
+ jekyll (= 3.10.0)
+ jekyll-avatar (= 0.8.0)
+ jekyll-coffeescript (= 1.2.2)
+ jekyll-commonmark-ghpages (= 0.5.1)
+ jekyll-default-layout (= 0.1.5)
+ jekyll-feed (= 0.17.0)
+ jekyll-gist (= 1.5.0)
+ jekyll-github-metadata (= 2.16.1)
+ jekyll-include-cache (= 0.2.1)
+ jekyll-mentions (= 1.6.0)
+ jekyll-optional-front-matter (= 0.3.2)
+ jekyll-paginate (= 1.1.0)
+ jekyll-readme-index (= 0.3.0)
+ jekyll-redirect-from (= 0.16.0)
+ jekyll-relative-links (= 0.6.1)
+ jekyll-remote-theme (= 0.4.3)
+ jekyll-sass-converter (= 1.5.2)
+ jekyll-seo-tag (= 2.8.0)
+ jekyll-sitemap (= 1.4.0)
+ jekyll-swiss (= 1.0.0)
+ jekyll-theme-architect (= 0.2.0)
+ jekyll-theme-cayman (= 0.2.0)
+ jekyll-theme-dinky (= 0.2.0)
+ jekyll-theme-hacker (= 0.2.0)
+ jekyll-theme-leap-day (= 0.2.0)
+ jekyll-theme-merlot (= 0.2.0)
+ jekyll-theme-midnight (= 0.2.0)
+ jekyll-theme-minimal (= 0.2.0)
+ jekyll-theme-modernist (= 0.2.0)
+ jekyll-theme-primer (= 0.6.0)
+ jekyll-theme-slate (= 0.2.0)
+ jekyll-theme-tactile (= 0.2.0)
+ jekyll-theme-time-machine (= 0.2.0)
+ jekyll-titles-from-headings (= 0.5.3)
+ jemoji (= 0.13.0)
+ kramdown (= 2.4.0)
+ kramdown-parser-gfm (= 1.1.0)
+ liquid (= 4.0.4)
+ mercenary (~> 0.3)
+ minima (= 2.5.1)
+ nokogiri (>= 1.16.2, < 2.0)
+ rouge (= 3.30.0)
+ terminal-table (~> 1.4)
+ webrick (~> 1.8)
+ github-pages-health-check (1.18.2)
+ addressable (~> 2.3)
+ dnsruby (~> 1.60)
+ octokit (>= 4, < 8)
+ public_suffix (>= 3.0, < 6.0)
+ typhoeus (~> 1.3)
+ html-pipeline (2.14.3)
+ activesupport (>= 2)
+ nokogiri (>= 1.4)
+ http_parser.rb (0.8.0)
+ i18n (1.14.7)
+ concurrent-ruby (~> 1.0)
+ jekyll (3.10.0)
+ addressable (~> 2.4)
+ colorator (~> 1.0)
+ csv (~> 3.0)
+ em-websocket (~> 0.5)
+ i18n (>= 0.7, < 2)
+ jekyll-sass-converter (~> 1.0)
+ jekyll-watch (~> 2.0)
+ kramdown (>= 1.17, < 3)
+ liquid (~> 4.0)
+ mercenary (~> 0.3.3)
+ pathutil (~> 0.9)
+ rouge (>= 1.7, < 4)
+ safe_yaml (~> 1.0)
+ webrick (>= 1.0)
+ jekyll-avatar (0.8.0)
+ jekyll (>= 3.0, < 5.0)
+ jekyll-coffeescript (1.2.2)
+ coffee-script (~> 2.2)
+ coffee-script-source (~> 1.12)
+ jekyll-commonmark (1.4.0)
+ commonmarker (~> 0.22)
+ jekyll-commonmark-ghpages (0.5.1)
+ commonmarker (>= 0.23.7, < 1.1.0)
+ jekyll (>= 3.9, < 4.0)
+ jekyll-commonmark (~> 1.4.0)
+ rouge (>= 2.0, < 5.0)
+ jekyll-default-layout (0.1.5)
+ jekyll (>= 3.0, < 5.0)
+ jekyll-feed (0.17.0)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-gist (1.5.0)
+ octokit (~> 4.2)
+ jekyll-github-metadata (2.16.1)
+ jekyll (>= 3.4, < 5.0)
+ octokit (>= 4, < 7, != 4.4.0)
+ jekyll-include-cache (0.2.1)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-mentions (1.6.0)
+ html-pipeline (~> 2.3)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-optional-front-matter (0.3.2)
+ jekyll (>= 3.0, < 5.0)
+ jekyll-paginate (1.1.0)
+ jekyll-readme-index (0.3.0)
+ jekyll (>= 3.0, < 5.0)
+ jekyll-redirect-from (0.16.0)
+ jekyll (>= 3.3, < 5.0)
+ jekyll-relative-links (0.6.1)
+ jekyll (>= 3.3, < 5.0)
+ jekyll-remote-theme (0.4.3)
+ addressable (~> 2.0)
+ jekyll (>= 3.5, < 5.0)
+ jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
+ rubyzip (>= 1.3.0, < 3.0)
+ jekyll-sass-converter (1.5.2)
+ sass (~> 3.4)
+ jekyll-seo-tag (2.8.0)
+ jekyll (>= 3.8, < 5.0)
+ jekyll-sitemap (1.4.0)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-swiss (1.0.0)
+ jekyll-theme-architect (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-cayman (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-dinky (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-hacker (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-leap-day (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-merlot (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-midnight (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-minimal (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-modernist (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-primer (0.6.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-github-metadata (~> 2.9)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-slate (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-tactile (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-time-machine (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-titles-from-headings (0.5.3)
+ jekyll (>= 3.3, < 5.0)
+ jekyll-watch (2.2.1)
+ listen (~> 3.0)
+ jemoji (0.13.0)
+ gemoji (>= 3, < 5)
+ html-pipeline (~> 2.2)
+ jekyll (>= 3.0, < 5.0)
+ json (2.9.1)
+ just-the-docs (0.10.1)
+ jekyll (>= 3.8.5)
+ jekyll-include-cache
+ jekyll-seo-tag (>= 2.0)
+ rake (>= 12.3.1)
+ kramdown (2.4.0)
+ rexml
+ kramdown-parser-gfm (1.1.0)
+ kramdown (~> 2.0)
+ liquid (4.0.4)
+ listen (3.9.0)
+ rb-fsevent (~> 0.10, >= 0.10.3)
+ rb-inotify (~> 0.9, >= 0.9.10)
+ logger (1.6.5)
+ mercenary (0.3.6)
+ minima (2.5.1)
+ jekyll (>= 3.5, < 5.0)
+ jekyll-feed (~> 0.9)
+ jekyll-seo-tag (~> 2.1)
+ minitest (5.25.4)
+ net-http (0.6.0)
+ uri
+ nokogiri (1.18.2-arm64-darwin)
+ racc (~> 1.4)
+ nokogiri (1.18.2-x64-mingw-ucrt)
+ racc (~> 1.4)
+ nokogiri (1.18.2-x86_64-linux-gnu)
+ racc (~> 1.4)
+ octokit (4.25.1)
+ faraday (>= 1, < 3)
+ sawyer (~> 0.9)
+ pathutil (0.16.2)
+ forwardable-extended (~> 2.6)
+ public_suffix (5.1.1)
+ racc (1.8.1)
+ rake (13.2.1)
+ rb-fsevent (0.11.2)
+ rb-inotify (0.11.1)
+ ffi (~> 1.0)
+ rexml (3.4.0)
+ rouge (3.30.0)
+ rubyzip (2.4.1)
+ safe_yaml (1.0.5)
+ sass (3.7.4)
+ sass-listen (~> 4.0.0)
+ sass-listen (4.0.0)
+ rb-fsevent (~> 0.9, >= 0.9.4)
+ rb-inotify (~> 0.9, >= 0.9.7)
+ sawyer (0.9.2)
+ addressable (>= 2.3.5)
+ faraday (>= 0.17.3, < 3)
+ securerandom (0.4.1)
+ simpleidn (0.2.3)
+ terminal-table (1.8.0)
+ unicode-display_width (~> 1.1, >= 1.1.1)
+ typhoeus (1.4.1)
+ ethon (>= 0.9.0)
+ tzinfo (2.0.6)
+ concurrent-ruby (~> 1.0)
+ tzinfo-data (1.2025.1)
+ tzinfo (>= 1.0.0)
+ unicode-display_width (1.8.0)
+ uri (1.0.2)
+ wdm (0.2.0)
+ webrick (1.9.1)
+
+PLATFORMS
+ arm64-darwin
+ x64-mingw-ucrt
+ x86_64-linux-gnu
+
+DEPENDENCIES
+ github-pages
+ http_parser.rb (~> 0.6.0)
+ jekyll-feed (~> 0.12)
+ jekyll-relative-links
+ just-the-docs (~> 0.10.1)
+ tzinfo (>= 1, < 3)
+ tzinfo-data
+ wdm (~> 0.1)
+
+BUNDLED WITH
+ 2.6.3
diff --git a/docs/RadialMenu/index.md b/docs/RadialMenu/index.md
new file mode 100644
index 00000000..f6ba6072
--- /dev/null
+++ b/docs/RadialMenu/index.md
@@ -0,0 +1,108 @@
+---
+layout: default
+title: Radial Menu
+show_buttons: true
+show_all_code: false
+---
+# Radial Menu
+
+![image](https://github.com/manups4e/ScaleformUI/assets/4005518/ae808585-af36-4f00-a323-3b3f6036dd74)
+
+Radial Menu is a customizable WeaponWheel menu, it's divided in 8 segments ([RadialSegment](./radialsegment.md)) that can be selected, and to each segment you can add any amount of [SegmentItem](./segmentitem.md) items you want.
+
+## Constructor
+
+```c#
+public RadialMenu()
+public RadialMenu(PointF offset)
+```
+
+```lua
+RadialMenu.New(x, y)
+```
+
+## Parameters
+
+### Visible
+Gets or Sets the menu visible status. If Visible is `true` the menu is drawn on screen.
+
+```c#
+public bool Visible {get;set;}
+```
+
+```lua
+radMenu:Visible(bool)
+```
+
+### CurrentSegment
+Gets or Sets the current highlighted segment
+
+```c#
+public int CurrentSegment {get;set;}
+```
+
+```lua
+radMenu:CurrentSegment(index)
+```
+
+### Segments
+A `table` in Lua and a `List` in C#, both using only `RadialSegment` tab and max 8 items. Each item can contain int32.max items to scroll like the original `Weapon Wheel`.
+
+```c#
+public RadialSegment[] Segments
+```
+
+```lua
+radMenu.Segments -- An 8 items table, each item represents a segment of the wheel (clockwise)
+```
+
+### Enable3D
+Gets or Sets the 3D effect on wheel, `true` by default.
+
+```c#
+public bool Enable3D {get;set;}
+```
+
+```lua
+radMenu:Enable3D(enable) -- Enables / disables the 3D effects on the wheel (default true)
+```
+
+## Instructional Buttons
+This menu like all other menus have `InstructionalButtons` table / List handled automatically by ScaleformUI. Here's the functions to handle the list.
+
+```c#
+List InstructionalButtons // the instructional buttons to show while the menu is Visible
+void AddInstructionalButton(InstructionalButton button) // adds an instructional button to the current menu
+void RemoveInstructionalButton(InstructionalButton button) // removes the desired instructional button
+void RemoveInstructionalButton(int index) // removes the desired instructional button
+```
+
+```lua
+.InstructionalButtons -- the instructional buttons to show while the menu is Visible
+:AddInstructionButton(button) -- adds an instructional button to the current menu
+:RemoveInstructionButton(button) -- removes the desired instructional button
+```
+
+## Events
+Triggered based on player's actions.
+
+```c#
+MenuOpenedEvent(RadialMenu menu, dynamic data = null);
+MenuClosedEvent(RadialMenu menu);
+SegmentChanged(RadialSegment segment);
+IndexChanged(RadialSegment segment, int index);
+SegmentSelected(RadialSegment segment);
+```
+
+```lua
+OnMenuOpen = function(menu, data)
+end,
+OnMenuClose = function(menu)
+end,
+OnSegmentHighlight = function(segment)
+end,
+OnSegmentIndexChange = function(segment, index)
+end,
+OnSegmentSelect = function(segment)
+end
+```
diff --git a/docs/RadialMenu/radialsegment.md b/docs/RadialMenu/radialsegment.md
new file mode 100644
index 00000000..c1d24cf8
--- /dev/null
+++ b/docs/RadialMenu/radialsegment.md
@@ -0,0 +1,48 @@
+---
+layout: default
+title: Radial Segment
+parent: Radial Menu
+show_buttons: true
+show_all_code: false
+---
+
+# Radial Segment
+Only 8 of them exist, and usually they're already available on menu open. You can access them directly by the Segments List in Clockwise order
+
+## Parameters
+
+### CurrentSelection
+Gets or Sets the current segment selection scrolling its internal items
+
+```c#
+int CurrentSelection { get; set; }
+```
+
+```lua
+radMenu.Segments[currSeg]:CurrentSelection()
+```
+
+## Functions
+
+### Add Item
+Adds a [SegmentItem](./segmentitem.md) to the list of this Segment
+
+```c#
+public void AddItem(SegmentItem item)
+```
+
+```lua
+radMenu.Segments[curSeg]:AddItem(item)
+```
+
+### RemoveItem and RemoveItemAt
+Removes an item from the list
+
+```c#
+public void RemoveItemAt(int index){}
+public void RemoveItem(SegmentItem item){}
+```
+
+```lua
+function RadialSegment:RemoveItem(item)
+```
\ No newline at end of file
diff --git a/docs/RadialMenu/segmentitem.md b/docs/RadialMenu/segmentitem.md
new file mode 100644
index 00000000..14dd8f87
--- /dev/null
+++ b/docs/RadialMenu/segmentitem.md
@@ -0,0 +1,105 @@
+---
+layout: default
+title: Segment Item
+parent: Radial Menu
+show_buttons: true
+show_all_code: false
+---
+
+# Segment Item
+Each of the 8 [RadialSegment](./radialsegment.md)s can have multiple instances of this item.
+
+## Constructor
+
+```c#
+public SegmentItem(string label, string desc, string txd, string txn, int txwidth, int txheight, SColor color)
+```
+
+```lua
+SegmentItem.New(_label, _desc, _txd, _txn, _txwidth, _txheight, _color)
+```
+
+## Parameters
+
+### Label
+
+```c#
+public string Label {get; set;}
+```
+
+```lua
+segItem:Label(lbl)
+```
+
+### Description
+
+```c#
+public string Description {get; set;}
+```
+
+```lua
+segItem:Description(desc)
+```
+
+### TextureDict
+
+```c#
+public string TextureDict {get; set;}
+```
+
+```lua
+segItem:TextureDict(txd)
+```
+
+### TextureName
+
+```c#
+public string TextureName {get; set;}
+```
+
+```lua
+segItem:TextureName(txn)
+```
+
+### TextureWidth
+
+```c#
+public int TextureWidth {get; set;}
+```
+
+```lua
+segItem:TextureWidth(width)
+```
+
+### TextureHeight
+
+```c#
+public int TextureHeight {get; set;}
+```
+
+```lua
+segItem:TextureHeight(height)
+```
+
+### Color
+
+```c#
+public SColor Color {get; set;}
+```
+
+```lua
+segItem:Color(color)
+```
+
+## Functions
+
+### Set Quantity
+Set the quantity of this item, if max == 0 then the quantity will be centered
+
+```c#
+public void SetQuantity(int qtty, int max = 0)
+```
+
+```lua
+segItem:SetQuantity(qtty, max)
+```
diff --git a/docs/RadioMenu/index.md b/docs/RadioMenu/index.md
new file mode 100644
index 00000000..06190ba7
--- /dev/null
+++ b/docs/RadioMenu/index.md
@@ -0,0 +1,126 @@
+---
+layout: default
+title: Radio Menu
+show_buttons: true
+show_all_code: false
+---
+
+# Radio Menu
+![image](https://github.com/user-attachments/assets/9466c3c1-dab0-4251-8227-49166d804028)
+
+Counterpart of the Radial Menu it emulates the Vehicle Radio menu multiple [RadioItem](./radioitem.md)s to be added to the circle.
+
+## Constructor
+
+```c#
+public UIRadioMenu()
+```
+
+```lua
+UIRadioMenu.New()
+```
+
+## Parameters
+
+### Stations
+This is the main List inside the menu, a list of [RadioItem](./radioitem.md)s
+
+```c#
+public List Stations { get; private set; }
+```
+
+```lua
+menu.Stations = {}
+```
+
+### Instructional Buttons
+Like [Radial Menu]({{ site.baseurl }}/RadialMenu/index) and [UIMenu]({{ site.baseurl }}/UIMenu/index) this menu allows adding and removing custom instructional buttons
+
+```c#
+public void AddInstructionalButton(InstructionalButton button){}
+public void RemoveInstructionalButton(InstructionalButton button){}
+public void RemoveInstructionalButton(int index){}
+```
+
+```lua
+function UIRadioMenu:AddInstructionButton(button)
+function UIRadioMenu:RemoveInstructionButton(button)
+```
+
+### Current Selection
+Gets or Sets the current selected item in the menu.
+
+```c#
+public int CurrentSelection {get; set;}
+```
+
+```lua
+function UIRadioMenu:CurrentSelection(index)
+```
+
+### Visible
+Gets or Sets the visible state of the menu, if set to `true` the menu will be visible and automatically drawn on screen.
+
+```c#
+public bool Visible {get;set;}
+```
+
+```lua
+function UIRadioMenu:Visible(bool)
+```
+
+### Animation Direction
+The menu has animation opening and closing, you can choose between `ZoomOut` and `ZoomIn`
+
+```c#
+public AnimationDirection AnimDirection = AnimationDirection.ZoomIn;
+```
+
+```lua
+function UIRadioMenu:AnimDirection(direction)
+```
+
+### Animation Duration
+The time of exection for the animation where 1.0 means 1 second.
+
+```c#
+public float AnimationDuration = 1f;
+```
+
+```lua
+function UIRadioMenu:AnimationDuration(time)
+```
+
+## Functions
+
+### Add Station
+Adds a [station](./radioitem.md) to the menu wheel.
+
+```c#
+public void AddStation(RadioItem station)
+```
+
+```lua
+function UIRadioMenu:AddStation(station)
+```
+
+## Events
+Events are triggered on player interaction with the menu.
+
+```c#
+public delegate void MenuOpenedEvent(UIRadioMenu menu, dynamic data = null);
+public delegate void MenuClosedEvent(UIRadioMenu menu);
+public delegate void IndexChanged(int index);
+public delegate void StationSelected(RadioItem item, int index);
+```
+
+```lua
+OnMenuOpen = function(menu, data)
+end
+OnMenuClose = function(menu)
+end
+OnIndexChange = function(index)
+end
+OnStationSelect = function(segment, index)
+end
+```
\ No newline at end of file
diff --git a/docs/RadioMenu/radioitem.md b/docs/RadioMenu/radioitem.md
new file mode 100644
index 00000000..48a41115
--- /dev/null
+++ b/docs/RadioMenu/radioitem.md
@@ -0,0 +1,20 @@
+---
+layout: default
+title: Radio Item
+parent: Radio Menu
+show_buttons: true
+show_all_code: false
+---
+
+# Radio Item
+Each item of the [Radio Menu](./index.md) are Radio Items.
+
+### Constructor
+
+```c#
+public RadioItem(string station, string artist, string track, string txd, string txn)
+```
+
+```lua
+function RadioItem.New(_station, _artist, _track, _txd, _txn)
+```
\ No newline at end of file
diff --git a/docs/Scaleforms/BigMessage.md b/docs/Scaleforms/BigMessage.md
new file mode 100644
index 00000000..cfbe2262
--- /dev/null
+++ b/docs/Scaleforms/BigMessage.md
@@ -0,0 +1,72 @@
+---
+layout: default
+title: Big Message
+parent: Scaleforms API
+show_buttons: true
+show_all_code: false
+---
+
+# Big Message
+![image](https://user-images.githubusercontent.com/4005518/162581479-ccb4dabe-9225-4e9a-9b20-69fb5f7f0c15.png)
+
+```c#
+Main.BigMessageInstance
+```
+
+```lua
+ScaleformUI.Scaleforms.BigMessageInstance
+```
+
+## Parameters
+
+### Manual Dispose
+Allows to choose if disposing of the scaleform movie will be manual or automatic after time ends.
+Manual Dispose is also a parameter of all the available API functions. Check below.
+
+```c#
+public bool ManualDispose { get; set; }
+```
+
+```lua
+BigMessageInstance._manualDispose
+```
+
+### Transition
+These settings give full control of the transition animation. The available transitions are `TRANSITION_UP`, `TRANSITION_OUT`, `TRANSITION_DOWN`
+
+```c#
+public string Transition { get; set; } = "TRANSITION_OUT";
+public float TransitionDuration { get; set; } = 0.4f;
+public bool TransitionAutoExpansion { get; set; } = false;
+```
+
+```lua
+function BigMessageInstance:SetTransition(transition, duration, preventAutoExpansion)
+```
+
+## Functions
+Time parameter is defaulted at 5000 if not specified.
+
+```c#
+public void ShowMissionPassedMessage(string msg, int time = 5000, bool manualDispose = false){}
+public void ShowMissionPassedMessage(ScaleformLabel msg, int time = 5000, bool manualDispose = false){}
+public void ShowColoredShard(string msg, string desc, HudColor textColor, HudColor bgColor, int time = 5000, bool manualDispose = false){}
+public void ShowOldMessage(string msg, int time = 5000, bool manualDispose = false){}
+public void ShowSimpleShard(string title, string subtitle, int time = 5000, bool manualDispose = false){}
+public void ShowRankupMessage(string msg, string subtitle, int rank, int time = 5000, bool manualDispose = false){}
+public void ShowWeaponPurchasedMessage(string bigMessage, string weaponName, WeaponHash weapon, int time = 5000, bool manualDispose = false){}
+public void ShowMpMessageLarge(string msg, int time = 5000, bool manualDispose = false){}
+public void ShowMpWastedMessage(string msg, string sub, int time = 5000, bool manualDispose = false){}
+public void ShowCustomShard(string funcName, params object[] paremeters){}
+```
+
+```lua
+function BigMessageInstance:ShowMissionPassedMessage(msg, duration, manualDispose)
+function BigMessageInstance:ShowColoredShard(msg, desc, textColor, bgColor, duration, manualDispose)
+function BigMessageInstance:ShowOldMessage(msg, duration, manualDispose)
+function BigMessageInstance:ShowSimpleShard(msg, subtitle, duration, manualDispose)
+function BigMessageInstance:ShowRankupMessage(msg, subtitle, rank, duration, manualDispose)
+function BigMessageInstance:ShowWeaponPurchasedMessage(bigMessage, weaponName, weaponHash, duration, manualDispose)
+function BigMessageInstance:ShowMpMessageLarge(msg, duration, manualDispose)
+function BigMessageInstance:ShowMpWastedMessage(msg, subtitle, duration, manualDispose)
+```
diff --git a/docs/Scaleforms/Countdown.md b/docs/Scaleforms/Countdown.md
new file mode 100644
index 00000000..8ca37860
--- /dev/null
+++ b/docs/Scaleforms/Countdown.md
@@ -0,0 +1,47 @@
+---
+layout: default
+title: Countdown
+parent: Scaleforms API
+show_buttons: true
+show_all_code: false
+---
+
+# Countdown
+
+
+
+```c#
+Main.Countdown
+```
+
+```lua
+ScaleformUI.Scaleforms.Countdown
+```
+
+## Functions
+
+```c#
+async Task Start(int number = 3, HudColor hudColor = HudColor.HUD_COLOUR_GREEN, string countdownAudioName = "321", string countdownAudioRef = "Car_Club_Races_Pursuit_Series_Sounds", string goAudioName = "Go", string goAudioRef = "Car_Club_Races_Pursuit_Series_Sounds")
+// This will start a countdown and play the audio for each step, default is 3, 2, 1, GO
+// method is awaitable and will return when the countdown shows "GO"
+```
+
+```lua
+:Start(number, hudColour, countdownAudioName, countdownAudioRef, goAudioName, goAudioRef)
+---Starts the countdown
+---@param number number? - The number to start the countdown from
+---@param hudColour number? - The hud colour to use for the countdown
+---@param countdownAudioName string? - The audio name to play for each number
+---@param countdownAudioRef string? - The audio ref to play for each number
+---@param goAudioName string? - The audio name to play when the countdown is finished
+---@param goAudioRef string? - The audio ref to play when the countdown is finished
+---@return promise
+-- consider that:
+ if number == nil then number = 3 end
+ if hudColour == nil then hudColour = 18 end
+ if countdownAudioName == nil then countdownAudioName = "321" end
+ if countdownAudioRef == nil then countdownAudioRef = "Car_Club_Races_Pursuit_Series_Sounds" end
+ if goAudioName == nil then goAudioName = "Go" end
+ if goAudioRef == nil then goAudioRef = "Car_Club_Races_Pursuit_Series_Sounds" end
+
+```
diff --git a/docs/Scaleforms/Feed.md b/docs/Scaleforms/Feed.md
new file mode 100644
index 00000000..bba88973
--- /dev/null
+++ b/docs/Scaleforms/Feed.md
@@ -0,0 +1,41 @@
+---
+layout: default
+title: Big Feed
+parent: Scaleforms API
+show_buttons: true
+show_all_code: false
+---
+
+# Big Feed
+
+![image](https://github.com/manups4e/ScaleformUI/assets/4005518/62bc56a8-c67d-43f6-9c6a-2511b23a7c04)
+
+```c#
+Main.BigFeed
+```
+
+```lua
+ScaleformUI.Scaleforms.BigFeed
+```
+
+## Functions
+```c#
+bool RightAligned // Decides if the feed is centered or right aligned, *MUST* be called before Enabled
+bool DisabledNotifications // If true disables all kind of notifications while the feed is showing
+string Title // Sets the title of the BigFeedInstance
+string Subtitle // Sets the subtitle of the BigFeedInstance
+string BodyText // Sets the body text of the BigFeedInstance
+string TextureDictionary // The Texture Dictionary (TXD) where the texture is loaded
+string TextureName // The texture in the dictionary
+bool Enabled // Toggles the BigFeedInstance on or off
+void UpdatePicture(string txd, string txn) // updates the texture
+```
+
+```lua
+:Title(title) -- Sets the title of the BigFeedInstance, if no title is provided it will return the current title
+:Subtitle(subtitle) -- Sets the subtitle of the BigFeedInstance, if no subtitle is provided it will return the current subtitle
+:BodyText(body) -- Sets the body text of the BigFeedInstance, if no body text is provided it will return the current body text
+:RightAligned(rightAligned) -- [boolean] Sets the BigFeedInstance to be right aligned, if no state is provided it will return the current state
+:Texture(textureName, textureDictionary) -- Sets the texture of the BigFeedInstance, if no texture is provided it will return the current texture
+:Enabled(enabled) -- [boolean] Toggles the BigFeedInstance on or off, if a state is not provided it will return the current enabled state
+```
\ No newline at end of file
diff --git a/docs/Scaleforms/Instructionalbuttons.md b/docs/Scaleforms/Instructionalbuttons.md
new file mode 100644
index 00000000..4d1749dc
--- /dev/null
+++ b/docs/Scaleforms/Instructionalbuttons.md
@@ -0,0 +1,104 @@
+---
+layout: default
+title: Instructional Buttons
+parent: Scaleforms API
+show_buttons: true
+show_all_code: false
+---
+
+# Instructional Buttons
+One of the most used and most important scaleforms in FiveM and in ScaleformUI.
+
+![image](https://user-images.githubusercontent.com/4005518/162583983-be7a6a7d-c976-4258-9aea-c5e03d15c514.png)
+
+The instructional buttons are used to guide the player while using the menus but they can be used for whatever reason (one of them is the saving notification).
+
+```c#
+Main.InstructionalButtons
+```
+
+```lua
+ScaleformUI.Scaleforms.InstructionalButtons
+```
+
+Before showing what and how this scaleform performs, we need to look at one more component to make it work, an `InstructionalButton` must be declared for each control the developer wants to add or remove.
+
+the InstructionalButton can be created in a list in c# or in a table in lua and then the list/table can be added via the instructionalButtons's SetInstructionalButtons function.
+
+here's an example:
+
+```c#
+// new InstructionalButton(Control control, string text, PadCheck padFilter = PadCheck.Any)
+// new InstructionalButton(List controls, string text, PadCheck padFilter = PadCheck.Any)
+// new InstructionalButton(Control gamepadControl, Control keyboardControl, string text)
+// InstructionalButton(List gamepadControls, List keyboardControls, string text)
+// InstructionalButton(InputGroup control, string text, PadCheck padFilter = PadCheck.Any)
+
+List buttons = new List()
+{
+ new InstructionalButton(Control.PhoneCancel, Game.GetGXTEntry("HUD_INPUT3")),
+ new InstructionalButton(Control.LookUpDown, "Scroll text", PadCheck.Controller),
+ new InstructionalButton(InputGroup.INPUTGROUP_CURSOR_SCROLL, "Scroll text", PadCheck.Keyboard)
+ // cannot make difference between controller / keyboard here in 1 line because we are using the InputGroup for keyboard
+};
+ScaleformUI.InstructionalButtons.SetInstructionalButtons(buttons);
+
+```
+
+```lua
+-- InstructionalButton.New(text, padcheck, gamepadControls, keyboardControls, inputGroup)
+
+-- padCheck can be -1 for both, 0 for gamepad, 1 for keyboard and mouse, it filters to show that control only for the selected control or both
+-- gamepadControls can be one or a table of controls, for example 51 or {51, 47, 176, 177}
+-- keyboardControls the same as gamepadControls,
+-- inpuGroup can be set to handle all the buttons needed automatically (needs gamepad and keyboard controls to be -1)
+
+local buttons = {
+ InstructionalButton.New(GetLabelText("HUD_INPUT3"), -1, 177, 177, -1),
+ InstructionalButton.New("Scroll text", 0, 2, -1, -1),
+ InstructionalButton.New("Scroll text", 1, -1, -1, "INPUTGROUP_CURSOR_SCROLL")
+ -- cannot make difference between controller / keyboard here in 1 line because we are using the InputGroup for keyboard
+}
+ScaleformUI.Scaleforms.InstructionalButtons:SetInstructionalButtons(buttons)
+```
+
+The InstructionalButton can be filtered, setting 1 or more controls for controller / keyboard separately and can handle InputGroups, using the padcheck the control selected will be shown only if the player is using one of the 2 input methods.
+
+## Parameters
+
+### IsSaving check
+Used to check if the saving notification is showing (Busy Spinner)
+
+```c#
+public bool IsSaving {get;}
+```
+
+```lua
+ScaleformUI.Scaleforms.InstructionalButtons.IsSaving
+```
+
+## Functions
+
+```c#
+public void SetInstructionalButtons(List buttons) {}
+public void AddInstructionalButton(InstructionalButton button) {}
+public void RemoveInstructionalButton(InstructionalButton button) {}
+public void RemoveInstructionalButtons(List buttons) {}
+public void RemoveInstructionalButton(int button) {}
+public void ClearButtonList() {}
+public void AddSavingText(LoadingSpinnerType spinnerType, string text, int time) {}
+public void AddSavingText(LoadingSpinnerType spinnerType, string text) {}
+public void HideSavingText() {}
+public static bool IsControlJustPressed(Control control, PadCheck keyboardOnly = PadCheck.Any) {}
+public void ForceUpdate() {}
+```
+
+```lua
+function ButtonsHandler:SetInstructionalButtons(buttons)
+function ButtonsHandler:AddInstructionalButton(button)
+function ButtonsHandler:RemoveInstructionalButton(button)
+function ButtonsHandler:ClearButtonList()
+function ButtonsHandler:Refresh()
+function ButtonsHandler:ShowBusySpinner(spinnerType, text, time, manualDispose)
+function ButtonsHandler:HideBusySpinner()
+```
\ No newline at end of file
diff --git a/docs/Scaleforms/MidsizeMessage.md b/docs/Scaleforms/MidsizeMessage.md
new file mode 100644
index 00000000..34df5d5a
--- /dev/null
+++ b/docs/Scaleforms/MidsizeMessage.md
@@ -0,0 +1,30 @@
+---
+layout: default
+title: Midsize Message
+parent: Scaleforms API
+show_buttons: true
+show_all_code: false
+---
+
+# Midsize Message
+
+![image](https://user-images.githubusercontent.com/4005518/162582501-cd80a049-21ff-477e-b567-84b8fb477188.png)
+
+```c#
+Main.MedMessageInstance
+```
+
+```lua
+ScaleformUI.Scaleforms.MidMessageInstance
+```
+
+## Functions
+Time parameter is defaulted at 5000 if not specified.
+
+```c#
+void ShowColoredShard(string msg, string desc, HudColor bgColor, HudColor outColor = HudColor.HUD_COLOUR_FREEMODE, bool useDarkerShard = false, bool useCondensedShard = false, int time = 5000, float animTime = 0.33f)
+```
+
+```lua
+function MidMessageInstance:ShowColoredShard(msg, desc, bgColor, useDarkerShard, useCondensedShard, time)
+```
diff --git a/docs/Scaleforms/MinimapOverlays.md b/docs/Scaleforms/MinimapOverlays.md
new file mode 100644
index 00000000..4cb911b5
--- /dev/null
+++ b/docs/Scaleforms/MinimapOverlays.md
@@ -0,0 +1,81 @@
+---
+layout: default
+title: Minimap Overlays
+parent: Scaleforms API
+show_buttons: true
+show_all_code: false
+---
+
+# Minimap Overlays
+![image](https://github.com/manups4e/ScaleformUI/assets/4005518/3f1dbc73-da73-4c8c-813e-cae8c92f96d8)
+
+This is a custom scaleform that allows you to add as many overlays (textures) as you want to the ingame Map and Minimap, useful for custom maps and blips!
+
+```c#
+Main.MinimapOverlays
+```
+
+```lua
+ScaleformUI.Scaleforms.MinimapOverlays
+```
+
+## Functions
+
+```c#
+public static async Task AddSizedOverlayToMap(string textureDict, string textureName, float x, float y, float rotation = 0, float width = -1, float height = -1, int alpha = 100, bool centered = false) {}
+public static async Task AddScaledOverlayToMap(string textureDict, string textureName, float x, float y, float rotation = 0, float xScale = 100f, float yScale = 100f, int alpha = 100, bool centered = false) {}
+public static void SetOverlayColor(int overlayId, SColor color) {}
+public static void HideOverlay(int overlayId, bool hide) {}
+public static void SetOverlayAlpha(int overlayId, float alpha) {}
+public static void SetOverlayPosition(int overlayId, Vector2 pos) {}
+public static void SetOverlayPosition(int overlayId, float x, float y) {}
+public static void SetOverlayPosition(int overlayId, float[] pos) {}
+public static void SetOverlaySizeOrScale(int overlayId, SizeF size) {}
+public static void SetOverlaySizeOrScale(int overlayId, float w, float h) {}
+public static void SetOverlaySizeOrScale(int overlayId, float[] size) {}
+public static void SetOverlayRotation(int overlayId, float rotation) {}
+public static async void RemoveOverlayFromMinimap(int overlayId) {}
+public static void ClearAll() {}
+```
+
+```lua
+function MinimapOverlays:AddSizedOverlayToMap(textureDict, textureName, x, y, rotation, width, height, alpha, centered)
+function MinimapOverlays:AddScaledOverlayToMap(textureDict, textureName, x, y, rotation, xScale, yScale, alpha, centered)
+function MinimapOverlays:SetOverlayColor(overlayId, color)
+function MinimapOverlays:HideOverlay(overlayId, hide)
+function MinimapOverlays:SetOverlayAlpha(overlayId, alpha)
+function MinimapOverlays:SetOverlayPosition(overlayId, position)
+function MinimapOverlays:SetOverlaySizeOrScale(overlayId, width, height)
+function MinimapOverlays:RemoveOverlayFromMinimap(overlayId)
+function MinimapOverlays:ClearAll()
+```
+
+## Minimap Overlay
+Adding an overlay generates a `MinimapOverlay` item.
+The `MinimapOverlay` item is a very simple class, it contains all the info of your added overlay.
+
+### Minimap Overlay Parameters
+```c#
+public bool Visible
+public int Handle { get; set; }
+public string Txd { get; set; }
+public string Txn { get; set; }
+public SColor Color { get; set; }
+public Vector2 Position { get; set; }
+public float Rotation { get; set; }
+public SizeF Size { get; set; }
+public float Alpha { get; set; }
+public bool Centered { get; set; }
+```
+
+```lua
+overlay.Handle
+overlay.Txd
+overlay.Txn
+overlay.Color
+overlay.Position
+overlay.Rotation
+overlay.Size
+overlay.Alpha
+overlay.Centered
+```
\ No newline at end of file
diff --git a/docs/Scaleforms/MissionSelector.md b/docs/Scaleforms/MissionSelector.md
new file mode 100644
index 00000000..02f82f4d
--- /dev/null
+++ b/docs/Scaleforms/MissionSelector.md
@@ -0,0 +1,353 @@
+---
+layout: default
+title: Mission Selector
+parent: Scaleforms API
+show_buttons: true
+show_all_code: false
+---
+
+# Mission Selector
+![image](https://github.com/manups4e/ScaleformUI/assets/4005518/4dff1186-cd1e-4685-b77b-8101fe8859f1)
+
+The mission selector handler implements the use of the JobSelectionButton, JobSelectionCard and MissionDetailsItem (details below)
+
+```c#
+Main.JobMissionSelection
+```
+
+```lua
+ScaleformUI.Scaleforms.JobMissionSelector
+```
+
+## Features
+
+```c#
+int[] Votes // up to 9 votes (6 cards + 3 buttons)
+int VotedFor
+int MaxVotes
+int SelectedCard
+HudColor VotesColor // defaulted to HudColor.HUD_COLOUR_BLUE
+JobSelectionTitle JobTitle
+List Cards // 6 cards
+List Buttons // 3 buttons
+bool Enabled
+bool AlreadyVoted
+void SetTitle(string title)
+void SetVotes(int actual, string label = "")
+void AddCard(JobSelectionCard card)
+void AddButton(JobSelectionButton button)
+void ShowPlayerVote(int idx, string playerName, HudColor color, bool showCheckMark = false, bool flashBG = false)
+```
+
+```lua
+.Votes
+.VotedFor
+.VotesColor -- default Colours.HUD_COLOUR_BLUE
+:SetTitle(title)
+:SetVotes(actual, label)
+:AddCard(card)
+:AddButton(button)
+:Enabled(bool)
+:AlreadyVoted()
+:ShowPlayerVote(idx, playerName, color, showCheckMark, flashBG)
+```
+
+Example code for the Mission Selector
+
+```c#
+if (ScaleformUI.Main.JobMissionSelection.Enabled)
+{
+ ScaleformUI.Main.JobMissionSelection.Enabled = false;
+ return;
+}
+
+long txd = API.CreateRuntimeTxd("test");
+long _paneldui = API.CreateDui("https://i.imgur.com/mH0Y65C.gif", 288, 160);
+API.CreateRuntimeTextureFromDuiHandle(txd, "panelbackground", API.GetDuiHandle(_paneldui));
+
+ScaleformUI.Main.JobMissionSelection.SetTitle("MISSION SELECTOR");
+ScaleformUI.Main.JobMissionSelection.MaxVotes = 3;
+ScaleformUI.Main.JobMissionSelection.SetVotes(0, "VOTES");
+ScaleformUI.Main.JobMissionSelection.Cards = new List();
+
+JobSelectionCard card = new JobSelectionCard("Test 1", "~y~Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat", "test", "panelbackground", 12, 15, JobSelectionCardIcon.BASE_JUMPING, HudColor.HUD_COLOUR_FREEMODE, 2, new List()
+{
+ new MissionDetailsItem("Left Label", "Right Label", 0, HudColor.HUD_COLOUR_FREEMODE),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)1, HudColor.HUD_COLOUR_GOLD),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)2, HudColor.HUD_COLOUR_PURPLE),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)3, HudColor.HUD_COLOUR_GREEN),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)4, HudColor.HUD_COLOUR_WHITE, true),
+});
+ScaleformUI.Main.JobMissionSelection.AddCard(card);
+
+JobSelectionCard card1 = new JobSelectionCard("Test 2", "~y~Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat", "test", "panelbackground", 12, 15, JobSelectionCardIcon.BASE_JUMPING, HudColor.HUD_COLOUR_FREEMODE, 2, new List()
+{
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)5, HudColor.HUD_COLOUR_FREEMODE),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)6, HudColor.HUD_COLOUR_GOLD),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)7, HudColor.HUD_COLOUR_PURPLE),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)8, HudColor.HUD_COLOUR_GREEN),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)9, HudColor.HUD_COLOUR_WHITE, true),
+});
+ScaleformUI.Main.JobMissionSelection.AddCard(card1);
+
+JobSelectionCard card2 = new JobSelectionCard("Test 3", "~y~Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat", "test", "panelbackground", 12, 15, JobSelectionCardIcon.BASE_JUMPING, HudColor.HUD_COLOUR_FREEMODE, 2, new List()
+{
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)10, HudColor.HUD_COLOUR_FREEMODE),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)11, HudColor.HUD_COLOUR_GOLD),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)12, HudColor.HUD_COLOUR_PURPLE),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)13, HudColor.HUD_COLOUR_GREEN),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)14, HudColor.HUD_COLOUR_WHITE, true),
+});
+ScaleformUI.Main.JobMissionSelection.AddCard(card2);
+
+JobSelectionCard card3 = new JobSelectionCard("Test 4", "~y~Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat", "test", "panelbackground", 12, 15, JobSelectionCardIcon.BASE_JUMPING, HudColor.HUD_COLOUR_FREEMODE, 2, new List()
+{
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)15, HudColor.HUD_COLOUR_FREEMODE),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)16, HudColor.HUD_COLOUR_GOLD),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)17, HudColor.HUD_COLOUR_PURPLE),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)18, HudColor.HUD_COLOUR_GREEN),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)19, HudColor.HUD_COLOUR_WHITE, true),
+});
+ScaleformUI.Main.JobMissionSelection.AddCard(card3);
+
+JobSelectionCard card4 = new JobSelectionCard("Test 5", "~y~Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat", "test", "panelbackground", 12, 15, JobSelectionCardIcon.BASE_JUMPING, HudColor.HUD_COLOUR_FREEMODE, 2, new List()
+{
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)20, HudColor.HUD_COLOUR_FREEMODE),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)21, HudColor.HUD_COLOUR_GOLD),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)22, HudColor.HUD_COLOUR_PURPLE),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)23, HudColor.HUD_COLOUR_GREEN),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)24, HudColor.HUD_COLOUR_WHITE, true),
+});
+ScaleformUI.Main.JobMissionSelection.AddCard(card4);
+
+JobSelectionCard card5 = new JobSelectionCard("Test 6", "~y~Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat", "test", "panelbackground", 12, 15, JobSelectionCardIcon.BASE_JUMPING, HudColor.HUD_COLOUR_FREEMODE, 2, new List()
+{
+ new MissionDetailsItem("Left Label", "Right Label", 0, HudColor.HUD_COLOUR_FREEMODE),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)1, HudColor.HUD_COLOUR_GOLD),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)2, HudColor.HUD_COLOUR_PURPLE),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)3, HudColor.HUD_COLOUR_GREEN),
+ new MissionDetailsItem("Left Label", "Right Label", (JobIcon)4, HudColor.HUD_COLOUR_WHITE, true),
+});
+ScaleformUI.Main.JobMissionSelection.AddCard(card5);
+
+ScaleformUI.Main.JobMissionSelection.Buttons = new List()
+{
+ new JobSelectionButton("Test1", "description test", new List()) {Selectable = false },
+
+ new JobSelectionButton("Test2", "description test", new List()) {Selectable = false },
+
+ new JobSelectionButton("Test3", "description test", new List()) {Selectable = true },
+};
+ScaleformUI.Main.JobMissionSelection.Buttons[0].OnButtonPressed += () =>
+{
+ Screen.ShowSubtitle($"Button Pressed => {ScaleformUI.Main.JobMissionSelection.Buttons[0].Text}");
+};
+
+ScaleformUI.Main.JobMissionSelection.Enabled = true;
+
+await Delay(1000);
+ScaleformUI.Main.JobMissionSelection.ShowPlayerVote(2, "PlayerName", HudColor.HUD_COLOUR_GREEN, true, true);
+```
+
+```lua
+local MissionSelectorVisible = false
+function CreateMissionSelectorMenu()
+
+ MissionSelectorVisible = not MissionSelectorVisible
+
+ if not MissionSelectorVisible then
+ ScaleformUI.Scaleforms.JobMissionSelector:Enabled(false)
+ return
+ end
+
+ local txd = CreateRuntimeTxd("test")
+ local _paneldui = CreateDui("https://i.imgur.com/mH0Y65C.gif", 288, 160)
+ CreateRuntimeTextureFromDuiHandle(txd, "panelbackground", GetDuiHandle(_paneldui))
+
+ ScaleformUI.Scaleforms.JobMissionSelector:SetTitle("MISSION SELECTOR")
+ ScaleformUI.Scaleforms.JobMissionSelector.MaxVotes = 3
+ ScaleformUI.Scaleforms.JobMissionSelector:SetVotes(0, "VOTED")
+ ScaleformUI.Scaleforms.JobMissionSelector.Cards = {}
+
+ local card = JobSelectionCard.New("Test 1", "~y~Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat", "test", "panelbackground", 12, 15, JobSelectionCardIcon.BASE_JUMPING, Colours.HUD_COLOUR_FREEMODE, 2, {
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOMission, Colours.HUD_COLOUR_FREEMODE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.Deathmatch, Colours.HUD_COLOUR_GOLD),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.RaceFinish, Colours.HUD_COLOUR_PURPLE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOSurvival, Colours.HUD_COLOUR_GREEN),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.TeamDeathmatch, Colours.HUD_COLOUR_WHITE, true),
+ })
+ ScaleformUI.Scaleforms.JobMissionSelector:AddCard(card)
+
+ local card1 = JobSelectionCard.New("Test 2", "~y~Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat", "test", "panelbackground", 12, 15, JobSelectionCardIcon.BASE_JUMPING, Colours.HUD_COLOUR_FREEMODE, 2, {
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOMission, Colours.HUD_COLOUR_FREEMODE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.Deathmatch, Colours.HUD_COLOUR_GOLD),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.RaceFinish, Colours.HUD_COLOUR_PURPLE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOSurvival, Colours.HUD_COLOUR_GREEN),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.TeamDeathmatch, Colours.HUD_COLOUR_WHITE, true),
+ })
+ ScaleformUI.Scaleforms.JobMissionSelector:AddCard(card1)
+
+ local card2 = JobSelectionCard.New("Test 3", "~y~Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat", "test", "panelbackground", 12, 15, JobSelectionCardIcon.BASE_JUMPING, Colours.HUD_COLOUR_FREEMODE, 2, {
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOMission, Colours.HUD_COLOUR_FREEMODE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.Deathmatch, Colours.HUD_COLOUR_GOLD),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.RaceFinish, Colours.HUD_COLOUR_PURPLE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOSurvival, Colours.HUD_COLOUR_GREEN),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.TeamDeathmatch, Colours.HUD_COLOUR_WHITE, true),
+ })
+ ScaleformUI.Scaleforms.JobMissionSelector:AddCard(card2)
+
+ local card3 = JobSelectionCard.New("Test 4", "~y~Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat", "test", "panelbackground", 12, 15, JobSelectionCardIcon.BASE_JUMPING, Colours.HUD_COLOUR_FREEMODE, 2, {
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOMission, Colours.HUD_COLOUR_FREEMODE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.Deathmatch, Colours.HUD_COLOUR_GOLD),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.RaceFinish, Colours.HUD_COLOUR_PURPLE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOSurvival, Colours.HUD_COLOUR_GREEN),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.TeamDeathmatch, Colours.HUD_COLOUR_WHITE, true),
+ })
+ ScaleformUI.Scaleforms.JobMissionSelector:AddCard(card3)
+
+ local card4 = JobSelectionCard.New("Test 5", "~y~Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat", "test", "panelbackground", 12, 15, JobSelectionCardIcon.BASE_JUMPING, Colours.HUD_COLOUR_FREEMODE, 2, {
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOMission, Colours.HUD_COLOUR_FREEMODE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.Deathmatch, Colours.HUD_COLOUR_GOLD),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.RaceFinish, Colours.HUD_COLOUR_PURPLE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOSurvival, Colours.HUD_COLOUR_GREEN),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.TeamDeathmatch, Colours.HUD_COLOUR_WHITE, true),
+ })
+ ScaleformUI.Scaleforms.JobMissionSelector:AddCard(card4)
+
+ local card5 = JobSelectionCard.New("Test 6", "~y~Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat", "test", "panelbackground", 12, 15, JobSelectionCardIcon.BASE_JUMPING, Colours.HUD_COLOUR_FREEMODE, 2, {
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOMission, Colours.HUD_COLOUR_FREEMODE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.Deathmatch, Colours.HUD_COLOUR_GOLD),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.RaceFinish, Colours.HUD_COLOUR_PURPLE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOSurvival, Colours.HUD_COLOUR_GREEN),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.TeamDeathmatch, Colours.HUD_COLOUR_WHITE, true),
+ })
+ ScaleformUI.Scaleforms.JobMissionSelector:AddCard(card5)
+
+ ScaleformUI.Scaleforms.JobMissionSelector.Buttons = {
+ JobSelectionButton.New("Button 1", "description test", {
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOMission, Colours.HUD_COLOUR_FREEMODE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.Deathmatch, Colours.HUD_COLOUR_GOLD),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.RaceFinish, Colours.HUD_COLOUR_PURPLE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOSurvival, Colours.HUD_COLOUR_GREEN),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.TeamDeathmatch, Colours.HUD_COLOUR_WHITE, true),
+ }),
+ JobSelectionButton.New("Button 2", "description test", {
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOMission, Colours.HUD_COLOUR_FREEMODE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.Deathmatch, Colours.HUD_COLOUR_GOLD),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.RaceFinish, Colours.HUD_COLOUR_PURPLE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOSurvival, Colours.HUD_COLOUR_GREEN),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.TeamDeathmatch, Colours.HUD_COLOUR_WHITE, true),
+ }),
+ JobSelectionButton.New("Button 3", "description test", {
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOMission, Colours.HUD_COLOUR_FREEMODE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.Deathmatch, Colours.HUD_COLOUR_GOLD),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.RaceFinish, Colours.HUD_COLOUR_PURPLE),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.GTAOSurvival, Colours.HUD_COLOUR_GREEN),
+ MissionDetailsItem.New("Left Label", "Right Label", false, JobIcon.TeamDeathmatch, Colours.HUD_COLOUR_WHITE, true),
+ }),
+ }
+ ScaleformUI.Scaleforms.JobMissionSelector.Buttons[1].Selectable = false
+ ScaleformUI.Scaleforms.JobMissionSelector.Buttons[2].Selectable = false
+ ScaleformUI.Scaleforms.JobMissionSelector.Buttons[3].Selectable = true
+
+ ScaleformUI.Scaleforms.JobMissionSelector.Buttons[1].OnButtonPressed = function()
+ ScaleformUI.Notifications:ShowSubtitle("Button Pressed => " .. ScaleformUI.Scaleforms.JobMissionSelector.Buttons[1].Text)
+ end
+ ScaleformUI.Scaleforms.JobMissionSelector:Enabled(true)
+
+ Citizen.Wait(1000)
+ ScaleformUI.Scaleforms.JobMissionSelector:ShowPlayerVote(3, "PlayerName", Colours.HUD_COLOUR_GREEN, true, true)
+end
+```
+
+### JobSelectionCard
+
+```c#
+string Title
+string Description
+string Txd
+string Txn
+int RpMultiplier
+int CashMultiplier
+JobSelectionCardIcon Icon
+HudColor IconColor
+int ApMultiplier
+List Details // not more than 4!!
+
+JobSelectionCard(string title, string description, string txd, string txn, int rpMult, int cashMult, JobSelectionCardIcon icon, HudColor iconColor, int apMultiplier, List details)
+```
+
+```lua
+---@param title string
+---@param description string
+---@param txd string
+---@param txn string
+---@param rpMult number
+---@param cashMult number
+---@param icon JobSelectionCardIcon
+---@param iconColor Colours
+---@param apMultiplier number
+---@param details table
+JobSelectionCard.New(title, description, txd, txn, rpMult, cashMult, icon, iconColor, apMultiplier, details)
+---@field public Title string
+---@field public Description string
+---@field public Txd string
+---@field public Txn string
+---@field public RpMultiplier number
+---@field public CashMultiplier number
+---@field public Icon JobSelectionCardIcon
+---@field public IconColor Colours
+---@field public ApMultiplier number
+---@field public Details table -- not more than 4!!
+```
+### JobSelectionButton
+
+
+```c#
+string Text
+string Description
+List // NOT MORE THAN 5
+JobSelectionButtonEvent OnButtonPressed
+JobSelectionButton(string text, string description, List details)
+```
+
+```lua
+---@param title string
+---@param description string
+---@param details table
+JobSelectionButton.New(title, description, details)
+---@field public Text string
+---@field public Description string
+---@field public Details table -- NOT MORE THAN 5
+---@field public OnButtonPressed fun(self: JobSelectionButton)
+```
+### MissionDetailsItem
+
+
+```c#
+JobIcon Icon
+string TextLeft
+string TextRight
+HudColor IconColor
+int Type
+bool Tick
+MissionDetailsItem(string textLeft, string textRight, bool separator)
+MissionDetailsItem(string textLeft, string textRight, JobIcon icon, HudColor iconColor = HudColor.NONE, bool tick = false)
+```
+
+```lua
+---@param textLeft string
+---@param textRight string
+---@param seperator boolean
+---@param icon JobIcon
+---@param iconColor Colours
+---@param tick boolean
+MissionDetailsItem.New(textLeft, textRight, seperator, icon, iconColor, tick)
+
+---@field public Type number
+---@field public TextLeft string
+---@field public TextRight string
+---@field public Icon JobIcon
+---@field public IconColor Colours
+---@field public Tick boolean
+```
diff --git a/docs/Scaleforms/PlayerList.md b/docs/Scaleforms/PlayerList.md
new file mode 100644
index 00000000..f5dad2e1
--- /dev/null
+++ b/docs/Scaleforms/PlayerList.md
@@ -0,0 +1,60 @@
+---
+layout: default
+title: Player List
+parent: Scaleforms API
+show_buttons: true
+show_all_code: false
+---
+
+# Player List
+![image](https://github.com/user-attachments/assets/74a0970e-4303-4b3f-aa91-1d80136e8d8a)
+
+```c#
+Main.PlayerListHandler
+```
+
+```lua
+ScaleformUI.Scaleforms.PlayerListHandler
+```
+
+## Features
+To show and draw the player list you simply have to set CurrentPage to > 0 or use NextPage to let the API handle it.
+
+```c#
+public List PlayerRows { get; set; }
+public int CurrentPage { get; set; }
+public string TitleLeftText { get; set; }
+public string TitleRightText { get; set; }
+public int TitleIcon { get; set; }
+public void SetTitle(string left, string right, int icon)
+public void AddRow(PlayerRow row)
+public void RemoveRow(PlayerRow row)
+public void RemoveRow(int serverId)
+public void NextPage()
+public void SetHighlight(int idx)
+public void DisplayMic(int idx, int unk)
+public void UpdateSlot(PlayerRow row)
+public void SetIcon(int index, ScoreRightIconType icon, string txt)
+```
+
+```lua
+---@field public Enabled boolean
+---@field public Index number
+---@field public MaxPages number
+---@field public currentPage number
+---@field public PlayerRows table
+---@field public TitleLeftText string
+---@field public TitleRightText string
+---@field public TitleIcon number
+---@field public X number
+---@field public Y number
+---@field public Update fun():nil
+---@field public NextPage fun():nil
+---@field public AddRow fun(row:SCPlayerItem):nil
+---@field public RemoveRow fun(index:number):nil
+---@field public CurrentPage fun(_c:number?):number
+---@field public Dispose fun():nil
+---@field public Load fun():nil
+---@field public SetTitle fun(title:string, label:string, icon:number):nil
+---@field public SetPosition fun(x:number, y:number):nil
+```
\ No newline at end of file
diff --git a/docs/Scaleforms/index.md b/docs/Scaleforms/index.md
new file mode 100644
index 00000000..346bb4e1
--- /dev/null
+++ b/docs/Scaleforms/index.md
@@ -0,0 +1,10 @@
+---
+layout: default
+title: Scaleforms API
+show_buttons: false
+show_all_code: true
+---
+
+# ScaleformUI - InGame Scaleforms API
+
+ScaleformUI provides a **static** user-friendly API to manage different scaleforms within your game.
\ No newline at end of file
diff --git a/docs/Scaleforms/rankbar.md b/docs/Scaleforms/rankbar.md
new file mode 100644
index 00000000..887fe6f1
--- /dev/null
+++ b/docs/Scaleforms/rankbar.md
@@ -0,0 +1,42 @@
+---
+layout: default
+title: Rankbar
+parent: Scaleforms API
+show_buttons: true
+show_all_code: false
+---
+
+# Rankbar
+![image](https://github.com/manups4e/ScaleformUI/assets/4005518/92dab93d-b602-42e3-b8c2-302f26b190e8)
+
+```c#
+Main.RankBarInstance
+```
+
+```lua
+ScaleformUI.Scaleforms.RankbarHandler
+```
+
+## Features
+
+```c#
+HudColor Color // Set the color of the Rank Bar when displayed
+void SetScores(int limitStart, int limitEnd, int previousValue, int currentValue, int currentRank) // Shows the rank bar
+/// Floor value of experience e.g. 0
+/// Ceiling value of experience e.g. 800
+/// Previous Experience value
+/// New Experience value
+/// Current rank
+void Remove()
+void OverrideAnimationSpeed(int speed = 1000)
+void OverrideOnscreenDuration(int duration = 4000)
+```
+
+Functions available for Lua:
+```lua
+---@field public SetScores fun(limitStart:number, limitEnd:number, previousValue:number, currentValue:number, currentRank:number):nil
+---@field public SetColour fun(rankBarColor:number):nil
+---@field public Remove fun():nil
+---@field public OverrideAnimationSpeed fun(speed:number):nil
+---@field public OverrideOnscreenDuration fun(duration:number):nil
+```
\ No newline at end of file
diff --git a/docs/Scaleforms/warningscreen.md b/docs/Scaleforms/warningscreen.md
new file mode 100644
index 00000000..6ef76b3f
--- /dev/null
+++ b/docs/Scaleforms/warningscreen.md
@@ -0,0 +1,38 @@
+---
+layout: default
+title: Warning Screen
+parent: Scaleforms API
+show_buttons: true
+show_all_code: false
+---
+
+# Warning Screen
+![image](https://user-images.githubusercontent.com/4005518/162582803-87963fe6-7ea2-4ef4-896a-65a579f755b3.png)
+
+The Warning screen is a customizable screen that can be updated on the go and is compatible with instructionalButtons to make the user decide the action they wants to make.
+
+```c#
+Main.Warning
+```
+
+```lua
+ScaleformUI.Scaleforms.Warning
+```
+
+## Functions
+
+```c#
+ShowWarning(string title, string subtitle, string prompt = "", string errorMsg = "", WarningPopupType type = WarningPopupType.Classic)
+ShowWarningWithButtons(string title, string subtitle, string prompt, List buttons, string errorMsg = "", WarningPopupType type = WarningPopupType.Classic)
+UpdateWarning(string title, string subtitle, string prompt = "", string errorMsg = "", WarningPopupType type = WarningPopupType.Classic)
+Dispose() // used to stop showing the Warning
+OnButtonPressed (InstructionalButton button) // this is an event called if one of the instructional buttons available are pressed while the warning is showing
+```
+
+```lua
+ShowWarning(title, subtitle, prompt, errorMsg, warningType)
+ShowWarningWithButtons(title, subtitle, prompt, buttons, errorMsg, warningType)
+UpdateWarning(title, subtitle, prompt, errorMsg, warningType)
+Dispose() -- used to stop showing the Warning
+OnButtonPressed = function(button) end -- function called if one of the instructional buttons available are pressed while the warning is showing
+```
diff --git a/docs/UIMenu/Events.md b/docs/UIMenu/Events.md
new file mode 100644
index 00000000..abdc2993
--- /dev/null
+++ b/docs/UIMenu/Events.md
@@ -0,0 +1,248 @@
+---
+layout: default
+title: Events
+parent: UIMenu
+show_buttons: true
+show_all_code: false
+---
+
+# Menu Events
+Menu events in **ScaleformUI** are specific triggers that allow developers to execute actions in response to user interactions with the menu. These events ensure that the menu system stays dynamic and responsive, improving the user experience.
+
+## OnIndexChange
+Triggered when the user presses up or down, changing the current selection.
+
+```c#
+public event IndexChangedEvent OnIndexChange;
+```
+
+```lua
+--- Triggered when the user presses up or down, changing the current selection.
+menu.OnIndexChange = function(menu, newindex)
+end
+```
+
+---
+
+## OnListChange
+Triggered when the user presses left or right, changing a list position.
+
+```c#
+public event ListChangedEvent OnListChange;
+```
+
+```lua
+--- Triggered when the user presses left or right, changing a list position.
+menu.OnListChange = function(menu, list, newindex)
+end
+```
+
+---
+
+## OnSliderChange
+Triggered when the user presses left or right, changing a slider position.
+
+```c#
+public event SliderChangedEvent OnSliderChange;
+```
+
+```lua
+--- Triggered when the user presses left or right, changing a slider position.
+menu.OnSliderChange = function(menu, slider, newindex)
+end
+```
+
+---
+
+## OnProgressChange
+Triggered when the user changes the value of a progress item.
+
+```c#
+public event OnProgressChanged OnProgressChange;
+```
+
+```lua
+--- Triggered when the user changes the value of a progress item.
+menu.OnProgressChange = function(menu, progress, newindex)
+end
+```
+
+---
+
+## OnCheckboxChange
+Triggered when the user presses enter on a checkbox item.
+
+```c#
+public event CheckboxChangeEvent OnCheckboxChange;
+```
+
+```lua
+--- Triggered when the user presses enter on a checkbox item.
+menu.OnCheckboxChange = function(menu, item, checked)
+end
+```
+
+---
+
+## OnListSelect
+Triggered when the user selects a list item.
+
+```c#
+public event ListSelectedEvent OnListSelect;
+```
+
+```lua
+--- Triggered when the user selects a list item.
+menu.OnListSelect = function(menu, list, index)
+end
+```
+
+---
+
+## OnSliderSelect
+Triggered when the user selects a slider item.
+
+```c#
+public event SliderSelectedEvent OnSliderSelect;
+```
+
+```lua
+--- Triggered when the user selects a slider item.
+menu.OnSliderSelect = function(menu, slider, index)
+end
+```
+
+---
+
+## OnProgressSelect
+Triggered when the user selects a progress item.
+
+```c#
+public event OnProgressSelected OnProgressSelect;
+```
+
+```lua
+--- Triggered when the user selects a progress item.
+menu.OnProgressSelect = function(menu, progress, index)
+end
+```
+
+---
+
+## OnStatsSelect
+Triggered when the user selects a stats item.
+
+```c#
+public event StatItemProgressChange OnStatsItemChanged;
+```
+
+```lua
+--- Triggered when the user selects a stats item.
+menu.OnStatsSelect = function(menu, progress, index)
+end
+```
+
+---
+
+## OnItemSelect
+Triggered when the user selects a simple item.
+
+```c#
+public event ItemSelectEvent OnItemSelect;
+```
+
+```lua
+--- Triggered when the user selects a simple item.
+menu.OnItemSelect = function(menu, item, index)
+end
+```
+
+---
+
+## OnMenuOpen
+Triggered when the menu is opened.
+
+```c#
+public event MenuOpenedEvent OnMenuOpen;
+```
+
+```lua
+--- Triggered when the menu is opened.
+menu.OnMenuOpen = function(menu)
+end
+```
+
+---
+
+## OnMenuClose
+Triggered when the menu is closed.
+
+```c#
+public event MenuClosedEvent OnMenuClose;
+```
+
+```lua
+--- Triggered when the menu is closed.
+menu.OnMenuClose = function(menu)
+end
+```
+
+---
+
+## OnColorPanelChanged
+Triggered when the user changes the index of a color panel.
+
+```c#
+public event ColorPanelChangedEvent OnColorPanelChange;
+```
+
+```lua
+--- Triggered when the user changes the index of a color panel.
+menu.OnColorPanelChanged = function(menu, item, index)
+end
+```
+
+---
+
+## OnPercentagePanelChanged
+Triggered when the user changes the value of a percentage panel.
+
+```c#
+public event PercentagePanelChangedEvent OnPercentagePanelChange;
+```
+
+```lua
+--- Triggered when the user changes the value of a percentage panel.
+menu.OnPercentagePanelChanged = function(menu, item, index)
+end
+```
+
+---
+
+## OnGridPanelChanged
+Triggered when the user changes the value of a grid panel.
+
+```c#
+public event GridPanelChangedEvent OnGridPanelChange;
+```
+
+```lua
+--- Triggered when the user changes the value of a grid panel.
+menu.OnGridPanelChanged = function(menu, item, index)
+end
+```
+
+---
+
+## ExtensionMethod
+Triggered to run a custom method for extending the menu behavior.
+
+```c#
+public event ExtensionMethodEvent ExtensionMethod;
+```
+
+```lua
+--- Triggered to run a custom method for extending the menu behavior.
+menu.ExtensionMethod = function(menu)
+end
+```
diff --git a/docs/UIMenu/Functions.md b/docs/UIMenu/Functions.md
new file mode 100644
index 00000000..56967f0a
--- /dev/null
+++ b/docs/UIMenu/Functions.md
@@ -0,0 +1,337 @@
+---
+layout: default
+title: Functions
+parent: UIMenu
+show_buttons: true
+show_all_code: false
+---
+
+# Functions
+This section will show you UIMenu public functions and the use you can do with them. Examples are shown in C# and in Lua.
+
+## Set Menu Offset
+Sets the position offset for the menu.
+
+{: .warning}
+> β οΈ Warning
+>
+> Position is safezone dependant and positive values will shift the menu to the **right when Left aligned** and to the **left when Right aligned**!
+
+```c#
+void SetMenuOffset(Vector2 position)
+
+Vector2 position = new Vector2(0, 0);
+menu.SetMenuOffset(position);
+```
+
+```lua
+---Sets the position offset for the menu.
+---@param x number
+---@param y number
+menu:SetMenuOffset(x, y)
+```
+
+## Refresh Menu
+Refreshes the menu, optionally keeping the current selection index.
+
+```c#
+void RefreshMenu(bool keepIndex)
+menu.RefreshMenu(keepIndex)
+```
+
+```lua
+---Refreshes the menu, optionally keeping the current selection index.
+---@param keepIndex boolean
+menu:RefreshMenu(keepIndex)
+```
+
+## Set Banner Sprite
+Sets the banner sprite using a dictionary and name.
+
+```c#
+void SetBannerSprite(KeyValuePair spriteInfo)
+menu.SetBannerSprite(new KeyValuePair("txtDictionary", "txtName"))
+```
+
+```lua
+---Sets the banner sprite using a dictionary and name.
+---@param txtDictionary string
+---@param txtName string
+menu:SetBannerSprite(txtDictionary, txtName)
+```
+
+## Set Banner Color
+Sets the banner color for the menu.
+
+```c#
+void SetBannerColor(SColor color)
+menu.SetBannerColor(color)
+```
+
+```lua
+---Sets the banner color for the menu.
+---@param color SColor
+menu:SetBannerColor(color)
+```
+
+## Set Animations
+Handles all the menu animations in one place.
+
+```c#
+void SetAnimations(bool enableScrollingAnim, bool enable3DAnim, MenuAnimationType scrollingAnimation, MenuBuildingAnimation buildingAnimation, float fadingTime)
+menu.SetAnimations(enableScrollingAnim, enable3DAnim, scrollingAnimation, buildingAnimation, fadingTime)
+```
+
+```lua
+---Handles all the menu animations in one place.
+---@param enableScrollingAnim boolean
+---@param enable3DAnim boolean
+---@param scrollingAnimation MenuAnimationType
+---@param buildingAnimation MenuBuildingAnimation
+---@param fadingTime number
+menu:SetMenuAnimations(enableScrollingAnim, enable3DAnim, scrollingAnimation, buildingAnimation, fadingTime)
+```
+
+## Add Window
+Adds a window to the menu, only if the menu is not itemless.
+
+```c#
+void AddWindow(UIMenuWindow window)
+menu.AddWindow(window)
+```
+
+```lua
+---Adds a window to the menu, only if the menu is not itemless.
+---@param window table
+menu:AddWindow(window)
+```
+
+## Remove Window At
+Removes a window from the menu at a specified index.
+
+```c#
+void RemoveWindowAt(int index)
+menu.RemoveWindowAt(index)
+```
+
+```lua
+---Removes a window from the menu at a specified index.
+---@param Index number
+menu:RemoveWindowAt(Index)
+```
+
+## Add Item
+Adds a new item to the menu.
+
+```c#
+void AddItem(UIMenuItem item)
+menu.AddItem(item)
+```
+
+```lua
+--- Adds a new item to the menu.
+---@param item UIMenuItem
+---@see UIMenuItem
+menu:AddItem(item)
+```
+
+## Add Item At
+Adds an item at a specified index in the menu.
+
+```c#
+void AddItemAt(UIMenuItem item, int index)
+menu.AddItemAt(item, index)
+```
+
+```lua
+--- Adds an item at a specified index in the menu.
+---@param item UIMenuItem
+---@param index number
+menu:AddItemAt(item, index)
+```
+
+## Remove Item At
+Removes an item from the menu at a specified index.
+
+```c#
+void RemoveItemAt(int index)
+menu.RemoveItemAt(index)
+```
+
+```lua
+--- Removes an item from the menu at a specified index.
+---@param index number
+menu:RemoveItemAt(index)
+```
+
+## Remove Item
+Removes an item from the menu by matching its label.
+
+```c#
+void RemoveItem(UIMenuItem item)
+menu.RemoveItem(item)
+```
+
+```lua
+--- Removes an item from the menu by matching its label.
+---@param item UIMenuItem
+menu:RemoveItem(item)
+```
+
+## Clear
+Removes all items from the menu.
+
+```c#
+void Clear()
+menu.Clear()
+```
+
+```lua
+--- Removes all items from the menu.
+menu:Clear()
+```
+
+## Switch To
+Switches from the current menu to a new menu.
+
+```c#
+void SwitchTo(UIMenu newMenu, int newMenuCurrentSelection = 1, bool inheritOldMenuParams = true)
+menu.SwitchTo(newMenu, newMenuCurrentSelection, inheritOldMenuParams)
+```
+
+```lua
+--- Switches from the current menu to a new menu.
+---@param newMenu UIMenu
+---@param newMenuCurrentSelection number|nil
+---@param inheritOldMenuParams boolean|nil
+menu:SwitchTo(newMenu, newMenuCurrentSelection, inheritOldMenuParams)
+```
+
+## Set Mouse
+Configures mouse settings for the menu.
+
+```c#
+void SetMouse(bool enableMouseControls, bool enableEdge, bool isWheelEnabled, bool resetCursorOnOpen, bool leftClickSelect)
+menu.SetMouse(enableMouseControls, enableEdge, isWheelEnabled, resetCursorOnOpen, leftClickSelect)
+```
+
+```lua
+--- Configures mouse settings for the menu.
+---@param enableMouseControls boolean
+---@param enableEdge boolean
+---@param isWheelEnabled boolean
+---@param resetCursorOnOpen boolean
+---@param leftClickSelect boolean
+menu:MouseSettings(enableMouseControls, enableEdge, isWheelEnabled, resetCursorOnOpen, leftClickSelect)
+```
+
+## Filter Menu Items
+Filters menu items based on a predicate.
+
+```c#
+void FilterMenuItems(Func predicate)
+menu.FilterMenuItems(predicate);
+```
+
+```lua
+--- Filters menu items based on a predicate.
+---@param predicate function A function that returns true to keep an item.
+---@param fail function A function that executes if no items match the filter.
+menu:FilterMenuItems(predicate, fail)
+```
+
+---
+
+## Sort Menu Items
+Sorts menu items using a custom comparison function.
+
+```c#
+void SortMenuItems(Comparison compare)
+menu.SortMenuItems(compare);
+```
+
+```lua
+--- Sorts menu items using a custom comparison function.
+---@param compare function A function to compare two items.
+menu:SortMenuItems(compare)
+```
+
+---
+
+## Reset Filter
+Resets the filtering/sorting of items, restoring the original order.
+
+```c#
+void ResetFilter()
+menu.ResetFilter();
+```
+
+```lua
+--- Resets the filtering/sorting of items, restoring the original order.
+menu:ResetFilter()
+```
+
+## Update Description
+Refreshes the menu description in case of changes without updating via Scaleform.
+
+```c#
+void UpdateDescription()
+menu.UpdateDescription();
+```
+
+```lua
+--- Refreshes the menu description in case of changes without updating via Scaleform.
+function UIMenu:UpdateDescription()
+```
+
+## Instructional Buttons Management
+
+### AddInstructionButton
+Adds an instructional button to the menu.
+
+```c#
+void AddInstructionalButton(InstructionalButton button)
+menu.AddInstructionalButton(button);
+```
+
+```lua
+--- Adds an instructional button to the menu.
+---@param button InstructionalButton
+function UIMenu:AddInstructionButton(button)
+```
+
+---
+
+### RemoveInstructionButton
+Removes an instructional button from the menu.
+
+```c#
+void RemoveInstructionalButton(InstructionalButton button)
+menu.RemoveInstructionalButton(button);
+
+void RemoveInstructionalButton(int index)
+menu.RemoveInstructionalButton(index);
+```
+
+```lua
+--- Removes an instructional button from the menu.
+---@param button table
+function UIMenu:RemoveInstructionButton(button)
+```
+
+---
+
+### ClearInstructionalButtons
+Clears all instructional buttons from the menu.
+
+```c#
+void ClearInstructionalButtons()
+menu.ClearInstructionalButtons();
+```
+
+```lua
+--- Clears all instructional buttons from the menu.
+function UIMenu:ClearInstructionalButtons()
+ self.InstructionalButtons = {}
+end
+```
diff --git a/docs/UIMenu/Items/index.md b/docs/UIMenu/Items/index.md
new file mode 100644
index 00000000..eda81a69
--- /dev/null
+++ b/docs/UIMenu/Items/index.md
@@ -0,0 +1,11 @@
+---
+layout: default
+title: Menu Items
+parent: UIMenu
+show_buttons: false
+show_all_code: false
+---
+# Menu Items
+This section will explain each menu item and its functions, parameters, events.
+They're very easy to get along with and are very dynamic and versatyle.
+These items can also be used in Pause menus and Lobby menus.
\ No newline at end of file
diff --git a/docs/UIMenu/Items/uimenucheckboxitem.md b/docs/UIMenu/Items/uimenucheckboxitem.md
new file mode 100644
index 00000000..93f6ff57
--- /dev/null
+++ b/docs/UIMenu/Items/uimenucheckboxitem.md
@@ -0,0 +1,62 @@
+---
+layout: default
+title: UIMenuCheckboxItem
+parent: Menu Items
+show_buttons: true
+show_all_code: false
+---
+
+# UIMenuCheckboxItem
+![image](https://user-images.githubusercontent.com/4005518/162609521-a5a1f24a-9caf-4f6e-91c2-04e1916557aa.png)
+
+Shows a CheckBox on its right side and works as a true/false switch.
+This item inherits all parameters, functions and events from UIMenuItem, adding new ones for its uses.
+
+## Constructor
+
+```c#
+UIMenuCheckboxItem(string text, bool check)
+UIMenuCheckboxItem(string text, bool check, string description)
+UIMenuCheckboxItem(string text, UIMenuCheckboxStyle style, bool check, string description)
+UIMenuCheckboxItem(string text, UIMenuCheckboxStyle style, bool check, string description, HudColor mainColor, HudColor highlightColor)
+```
+
+```lua
+function UIMenuCheckboxItem.New(Text, Check, checkStyle, Description, color, highlightColor, textColor, highlightedTextColor)
+```
+
+## Parameters
+
+### Checkbox Style
+```c#
+UIMenuCheckboxStyle Style { get; }
+```
+
+```lua
+local style = item.CheckBoxStyle
+```
+
+### Checked
+
+```c#
+public bool Checked {get;set;}
+item.Checked = true;
+```
+
+```lua
+item:Checked(bool)
+```
+
+## Events
+
+### OnCheckboxChange
+Triggered everytime a player selects the item after being highlighted, changing the checkbox value.
+
+```c#
+public event CheckboxChangeEvent CheckboxEvent;
+```
+
+```lua
+OnCheckboxChanged = function(menu, item, checked)
+end,
+```
diff --git a/docs/UIMenu/Items/uimenudynamiclistitem.md b/docs/UIMenu/Items/uimenudynamiclistitem.md
new file mode 100644
index 00000000..ec11fad7
--- /dev/null
+++ b/docs/UIMenu/Items/uimenudynamiclistitem.md
@@ -0,0 +1,58 @@
+---
+layout: default
+title: UIMenuDynamicListItem
+parent: Menu Items
+show_buttons: true
+show_all_code: false
+---
+
+# UIMenuDynamicListItem
+![image](https://user-images.githubusercontent.com/4005518/162609798-658d1efa-1358-4f23-9747-1b3cee3c23fb.png)
+
+This is a runtime handled version of the more static ListItem where you don't input a predefined list to the item, the right label is outputed by the callback code called everytime left/right is inputted.
+This item can virtually output infinite values due to its runtime handling.
+
+{: .warning}
+> β οΈ Warning
+>
+> This item may change its name in future as it's scheduled for future updates to set [UIMenuListItem](./uimenulistitem.md) as Legacy and Obsolete and this as default List Item.
+
+## Constructor
+
+```c#
+UIMenuDynamicListItem(string text, string startingItem, DynamicListItemChangeCallback changeCallback)
+UIMenuDynamicListItem(string text, string description, string startingItem, DynamicListItemChangeCallback changeCallback)
+```
+
+```lua
+UIMenuDynamicListItem.New(Text, Description, StartingString, callback, color, highlightColor, textColor, highlightedTextColor)
+```
+
+## Example
+
+```c#
+float dynamicvalue = 0f;
+dynamicItem = new UIMenuDynamicListItem("Dynamic List Item", "Try pressing ~INPUT_FRONTEND_LEFT~ or ~INPUT_FRONTEND_RIGHT~", dynamicvalue.ToString("F3"), async (sender, direction) =>
+{
+ if (direction == UIMenuDynamicListItem.ChangeDirection.Left) dynamicvalue -= 0.01f;
+ else dynamicvalue += 0.01f;
+ return dynamicvalue.ToString("F3");
+});
+```
+
+```lua
+local dynamicValue = 0
+local dynamicListItem = UIMenuDynamicListItem.New("Dynamic List Item", "Try pressing ~INPUT_FRONTEND_LEFT~ or ~INPUT_FRONTEND_RIGHT~", tostring(dynamicValue), function(item, direction)
+ if(direction == "left") then
+ dynamicValue = dynamicValue -1
+ elseif(direction == "right") then
+ dynamicValue = dynamicValue +1
+ end
+ return tostring(dynamicValue)
+end)
+```
+
+## How does this item work?
+This item runtime handled.
+The callback you set when instantiating it is the function called everytime left or right is pressed.
+Pressing Left/Right will trigger the callback automatically, the callback **MUST** return a string that will be shown in the Right side of the item.
\ No newline at end of file
diff --git a/docs/UIMenu/Items/uimenuitem.md b/docs/UIMenu/Items/uimenuitem.md
new file mode 100644
index 00000000..6da6384b
--- /dev/null
+++ b/docs/UIMenu/Items/uimenuitem.md
@@ -0,0 +1,329 @@
+---
+layout: default
+title: UIMenuItem
+parent: Menu Items
+show_buttons: true
+show_all_code: false
+nav_order: 1
+---
+
+# UIMenuItem
+
+![UIMenuItem](https://user-images.githubusercontent.com/4005518/162608037-bc6e4c8e-a912-4465-bc8b-cfccedf6948d.png)
+
+**UIMenuItem** is the father of all other items, this means that every other menu-item has the same functions and features of this item except for some that are disabled for design reason.
+
+## Constructor
+
+```c#
+public UIMenuItem(string text);
+public UIMenuItem(string text, string description);
+public UIMenuItem(string text, uint descriptionHash);
+public UIMenuItem(string text, string description, HudColor mainColor, HudColor highlightColor);
+public UIMenuItem(string text, uint descriptionHash, HudColor mainColor, HudColor highlightColor);
+public UIMenuItem(string text, string description, HudColor color, HudColor highlightColor, HudColor textColor, HudColor highlightedTextColor);
+public UIMenuItem(string text, uint descriptionHash, HudColor color, HudColor highlightColor, HudColor textColor, HudColor highlightedTextColor);
+```
+
+```lua
+UIMenuItem.New(text, description, color, highlightColor, textColor, highlightedTextColor)
+```
+
+## Parameters
+
+### Selected
+Sets or gets the selected state of the menu item, and updates the menu labels accordingly.
+
+```c#
+public bool Selected {get;set;}
+item.Selected = true;
+```
+
+```lua
+--- Sets or gets the selected state of the menu item, and updates the menu labels accordingly.
+item:Selected(bool)
+```
+
+---
+
+### Hovered
+Sets or gets the hovered state of the menu item.
+
+```c#
+public bool Hovered {get;set;}
+item.Hovered = true;
+```
+
+```lua
+--- Sets or gets the hovered state of the menu item.
+item:Hovered(bool)
+```
+
+---
+
+### Enabled
+Sets or gets the enabled state of the menu item, and updates the menu labels accordingly.
+
+```c#
+public bool Enabled {get;set;}
+item.Enabled = true;
+```
+
+```lua
+--- Sets or gets the enabled state of the menu item, and updates the menu labels accordingly.
+item:Enabled(bool)
+```
+
+---
+
+### Description
+Sets or gets the description for the menu item.
+
+```c#
+public string Description {get;set;}
+item.Description = "This is a description";
+```
+
+```lua
+--- Sets or gets the description for the menu item.
+item:Description(str)
+```
+
+---
+
+### MainColor
+Sets or gets the main color for the menu item.
+
+```c#
+public SColor MainColor {get;set;}
+item.MainColor = SColor.FromArgb(255, 0, 0);
+```
+
+```lua
+--- Sets or gets the main color for the menu item.
+item:MainColor(color)
+```
+
+---
+
+### TextColor
+Sets or gets the text color for the menu item.
+
+```c#
+public SColor TextColor {get;set;}
+item.TextColor(SColor(0, 255, 0)); -- Green color
+```
+
+```lua
+--- Sets or gets the text color for the menu item.
+item:TextColor(color)
+```
+
+---
+
+### HighlightColor
+Sets or gets the highlight color for the menu item.
+
+```c#
+public SColor HighlightColor {get;set;}
+item.HighlightColor = SColor.FromArgb(0, 0, 255);
+```
+
+```lua
+--- Sets or gets the highlight color for the menu item.
+item:HighlightColor(color)
+```
+
+---
+
+### HighlightedTextColor
+Sets or gets the text color when the item is highlighted.
+
+```c#
+public SColor HighlightedTextColor {get;set;}
+item.HighlightedTextColor = SColor.FromArgb(255, 255, 0);
+```
+
+```lua
+--- Sets or gets the text color when the item is highlighted.
+item:HighlightedTextColor(color)
+```
+
+---
+
+### Label
+Sets or gets the left label for the menu item.
+
+```c#
+public string Label {get;set;}
+item.Label = "Left Label";
+```
+
+```lua
+--- Sets or gets the left label for the menu item.
+item:Label(Text)
+```
+
+---
+
+### RightLabel
+Sets (Lua only) or gets the right label for the menu item.
+
+```c#
+public string RightLabel {get; private set;}
+var rLabel = item.RightLabel;
+```
+
+```lua
+--- Sets or gets the right label for the menu item.
+item:RightLabel(Text)
+```
+
+---
+
+### RightBadge
+Sets (Lua only) or gets the right badge for the menu item.
+
+```c#
+public BadgeIcon RightBadge {get;private set;}
+var badge = item.RightBadge;
+```
+
+```lua
+--- Sets or gets the right badge for the menu item.
+item:RightBadge(Badge)
+```
+
+---
+
+### LeftBadge
+Sets (Lua only) or gets the left badge for the menu item.
+
+```c#
+void LeftBadge {get;private set;}
+var lBadge = item.LeftBadge;
+```
+
+```lua
+--- Sets or gets the left badge for the menu item.
+item:LeftBadge(Badge)
+```
+
+## Functions
+
+### BlinkDescription
+Sets or retrieves the blinking description for a menu item. If `bool` is provided, it sets the blinking status, otherwise, it returns the current blinking status.
+
+```c#
+public bool BlinkDescription {get;set;}
+item.BlinkDescription = true;
+```
+
+```lua
+--- Sets or retrieves the blinking description for a menu item.
+function item:BlinkDescription(bool)
+```
+
+### CustomRightBadge
+Sets a custom right badge for a menu item, typically used for visual indicators such as icons.
+
+```c#
+public void SetCustomRightBadge(txd, txn)
+item.SetCustomRightBadge("txd", "txn");
+```
+
+```lua
+--- Sets a custom right badge for a menu item.
+function item:CustomRightBadge(txd, txn)
+```
+
+### CustomLeftBadge
+Sets a custom left badge for a menu item, typically used for visual indicators such as icons.
+
+```c#
+public void SetCustomLeftBadge(txd, txn)
+item.SetCustomLeftBadge("txd", "txn");
+```
+
+```lua
+--- Sets a custom left badge for a menu item.
+function item:CustomLeftBadge(txd, txn)
+```
+
+### AddPanel
+Adds a panel to a menu item.
+
+```c#
+public void AddPanel(UIMenuPanel panel)
+item.AddPanel(panel)
+```
+
+```lua
+--- Adds a panel to a menu item.
+function item:AddPanel(Panel)
+```
+
+### AddSidePanel
+Adds a side panel to a menu item, used for additional details or options.
+
+```c#
+public void AddSidePanel(sidePanel)
+item.AddSidePanel(sidePanel)
+```
+
+```lua
+--- Adds a side panel to a menu item.
+function item:AddSidePanel(sidePanel)
+```
+
+### RemoveSidePanel
+Removes the side panel from a menu item.
+
+```c#
+public void RemoveSidePanel()
+item.RemoveSidePanel();
+```
+
+```lua
+--- Removes the side panel from a menu item.
+function item:RemoveSidePanel()
+```
+
+### RemovePanelAt
+Removes a panel from a menu item by index.
+
+```c#
+void RemovePanelAt(Index)
+item.RemovePanelAt(index);
+```
+
+```lua
+--- Removes a panel from a menu item by index.
+function item:RemovePanelAt(Index)
+```
+
+## Events
+
+### ItemActivatedEvent
+Triggered everytime a player select the item after highlighting it
+
+```c#
+public event ItemActivatedEvent Activated
+```
+
+```lua
+Activated = function(menu, item)
+end
+```
+
+### ItemHighlightedEvent
+Triggered everytime a player highlightings an item
+
+```c#
+public event ItemHighlightedEvent Highlighted
+```
+
+```lua
+Highlighted = function(menu, item)
+end
+```
\ No newline at end of file
diff --git a/docs/UIMenu/Items/uimenulistitem.md b/docs/UIMenu/Items/uimenulistitem.md
new file mode 100644
index 00000000..470a1d13
--- /dev/null
+++ b/docs/UIMenu/Items/uimenulistitem.md
@@ -0,0 +1,98 @@
+---
+layout: default
+title: UIMenuListItem
+parent: Menu Items
+show_buttons: true
+show_all_code: false
+---
+
+# UIMenuListItem
+
+![image](https://user-images.githubusercontent.com/4005518/162609041-3d969294-4208-47fa-887e-3a9c3fb6b34b.png)
+
+This item requires a list of values to be given, the menu will then scroll the items left/right.
+This item has 2 events, OnListChange called everytime the user goes left/right and OnListSelect called when the user selects the item after highlighting it.
+The item inherits all the UIMenuItem functions and adds some of his.
+
+{: .warning}
+> β οΈ Warning
+>
+> This item is sheduled to become obsolete and legacy in future updates of the library. It will be replaced by the more runtime friendly [UIMenuDynamicListItem](./uimenudynamiclistitem.md).
+
+
+## Constructor
+
+```c#
+UIMenuListItem(string text, List items, int index)
+UIMenuListItem(string text, List items, int index, string description)
+UIMenuListItem(string text, List items, int index, string description, HudColor mainColor, HudColor higlightColor)
+```
+
+```lua
+UIMenuListItem.New(Text, Items, Index, Description, mainColor, highlightColor, textColor, highlightedTextColor)
+```
+
+## Parameters
+
+### Items
+The values given in constructor are saved in the **Items** list.
+
+```c#
+List