Joystick ordering

Fixes issue with dependencies discussed here:
https://github.com/rive-app/rive/pull/5275

Joysticks now build their own DAG and export in the correct order for runtime.

Diffs=
f2ecb824b Joystick ordering (#5277)
diff --git a/.rive_head b/.rive_head
index 9c8e55f..592c7e0 100644
--- a/.rive_head
+++ b/.rive_head
@@ -1 +1 @@
-a4fb3dc7decb50f6965e21ebced098cbdc35883d
+f2ecb824beea0dadfe7077accacb5cd246cac669
diff --git a/include/rive/math/aabb.hpp b/include/rive/math/aabb.hpp
index 5d0ef5d..2e8132e 100644
--- a/include/rive/math/aabb.hpp
+++ b/include/rive/math/aabb.hpp
@@ -93,8 +93,8 @@
 
     Vec2D factorFrom(Vec2D point) const
     {
-        return Vec2D((point.x - left()) * 2.0f / width() - 1.0f,
-                     (point.y - top()) * 2.0f / height() - 1.0f);
+        return Vec2D(width() == 0.0f ? 0.0f : (point.x - left()) * 2.0f / width() - 1.0f,
+                     (height() == 0.0f ? 0.0f : point.y - top()) * 2.0f / height() - 1.0f);
     }
 };
 
diff --git a/src/artboard.cpp b/src/artboard.cpp
index 2c5b233..4f09ab0 100644
--- a/src/artboard.cpp
+++ b/src/artboard.cpp
@@ -485,9 +485,19 @@
     {
         for (auto joystick : m_Joysticks)
         {
+            if (!joystick->canApplyBeforeUpdate())
+            {
+                if (updateComponents())
+                {
+                    didUpdate = true;
+                }
+            }
             joystick->apply(this);
         }
-        updateComponents();
+        if (updateComponents())
+        {
+            didUpdate = true;
+        }
     }
     for (auto nestedArtboard : m_NestedArtboards)
     {