* Fix: Skillcheck animation speed inconsistencies by switching to time-based RAF loop
This PR fixes long-standing issues with the skillcheck mini-game animation speed being inconsistent across machines and after long play sessions. Some players reported extremely slow indicator movement, others extremely fast, and many noticed that the speed changed unpredictably the longer they stayed logged in.
The root cause was that the skillcheck relied on a useInterval tick (setInterval-like behavior) and assumed it fired every 1ms. In reality, browser timer clamping and throttling make interval timing highly unpredictable — especially in embedded CEF browsers like FiveM’s NUI.
This PR replaces tick-based animation with a time-based requestAnimationFrame loop using performance.now(), ensuring perfectly consistent animation timing across all hardware and browser states. I have used this method in other NUI based skillcheck scripts to address this same behavior.
Signed-off-by: Senlar <brandonrhue@gmail.com>
* Refactor keyHandler and clean up code
Signed-off-by: Senlar <brandonrhue@gmail.com>
* Refactor keyHandler and cleanup useEffect logic again
Signed-off-by: Senlar <brandonrhue@gmail.com>
---------
Signed-off-by: Senlar <brandonrhue@gmail.com>
Resolves#554
* fix(notify): prevent duration not showing in notifications with id
* fix(notify): add toast key to reset circle animation
* refactor(web/notify): use ref for key counter instead of state
---------
Co-authored-by: Luke <39926192+LukeWasTakenn@users.noreply.github.com>
* feat(notify): add option to show duration
lib.notify new option
`showDuration?: boolean -- Option to show duration bar`
* fix(notify): allow icon color using hexadecimal values
* chore(notify): show duration to default and added tinycolor2 for supporting available color formats
* feat(notify): define interface for showDuration
* feat(interface/input): useFormat field
* feat(interface/input): useFormat field
* feat(types/dialog): useFormat field
* feat(components/date): format date conversion
* tweak(components/date): forgot other data type
* chore(interface/input): more descriptive name
* chore(interface/input): more descriptive name
* chore(types/dialog): more descriptive name
* tweak(components/date): reset things
* feat(dialog/input): date conversion with returnString
* refactor(web/input): remove unnecessary state
---------
Co-authored-by: Luke <39926192+LukeWasTakenn@users.noreply.github.com>
* - (FEAT) Added feature to cancel skillcheck
- (FEAT) Added feature to check is any active skillcheck
* - Fix hiding UI
* - return actual boolean
* - Fix focus does not reset properly
* Update skillcheck wrappers
* update(notify): add warning it's own type
* update(notify): inform > info, change warning default icon to circle
* fix typo
* update(notify): case for def notifs, update icons
use circle icons for all notifs so its more unified, also looks a bit better imo
* fix(progressBar): spamming cancel
spamming cancel would sometimes not interrupt current progbar
* Revert "fix(progressBar): spamming cancel"
This reverts commit b030fddd20f9f2b92a07ce4199c73e3b43f435a3.