@xmachines/docs 1.0.0-beta.46 → 1.0.0-beta.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/README.md +135 -7
  2. package/api/@xmachines/play/README.md +134 -57
  3. package/api/@xmachines/play/classes/NonNullableError.md +4 -4
  4. package/api/@xmachines/play/classes/PlayError.md +4 -4
  5. package/api/@xmachines/play/functions/assertNonNullable.md +1 -1
  6. package/api/@xmachines/play/type-aliases/PlayEvent.md +2 -2
  7. package/api/@xmachines/play-actor/README.md +130 -155
  8. package/api/@xmachines/play-actor/classes/AbstractActor.md +3 -3
  9. package/api/@xmachines/play-actor/functions/typedSpec.md +1 -1
  10. package/api/@xmachines/play-actor/interfaces/BaseActorProviderProps.md +5 -5
  11. package/api/@xmachines/play-actor/interfaces/BaseViewContextValue.md +5 -5
  12. package/api/@xmachines/play-actor/interfaces/PlaySpec.md +2 -2
  13. package/api/@xmachines/play-actor/interfaces/Routable.md +3 -3
  14. package/api/@xmachines/play-actor/interfaces/Viewable.md +2 -2
  15. package/api/@xmachines/play-dom/README.md +140 -232
  16. package/api/@xmachines/play-dom/classes/PlayRenderer.md +4 -4
  17. package/api/@xmachines/play-dom/functions/connectRenderer.md +1 -1
  18. package/api/@xmachines/play-dom/functions/createPlayUI.md +1 -1
  19. package/api/@xmachines/play-dom/functions/createRenderer.md +1 -1
  20. package/api/@xmachines/play-dom/functions/defineRegistry.md +1 -1
  21. package/api/@xmachines/play-dom/functions/renderSpec.md +1 -1
  22. package/api/@xmachines/play-dom/interfaces/ComponentContext.md +7 -7
  23. package/api/@xmachines/play-dom/interfaces/ConnectRendererOptions.md +13 -13
  24. package/api/@xmachines/play-dom/interfaces/CreatePlayUIOptions.md +6 -6
  25. package/api/@xmachines/play-dom/interfaces/DefineRegistryResult.md +4 -4
  26. package/api/@xmachines/play-dom/interfaces/DomRenderContext.md +12 -12
  27. package/api/@xmachines/play-dom/interfaces/EventHandle.md +4 -4
  28. package/api/@xmachines/play-dom/interfaces/MountOptions.md +3 -3
  29. package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +5 -5
  30. package/api/@xmachines/play-dom/interfaces/UIProviderOptions.md +5 -5
  31. package/api/@xmachines/play-dom/type-aliases/ActionFn.md +1 -1
  32. package/api/@xmachines/play-dom/type-aliases/Actions.md +1 -1
  33. package/api/@xmachines/play-dom/type-aliases/BaseComponentProps.md +7 -7
  34. package/api/@xmachines/play-dom/type-aliases/CatalogHasActions.md +1 -1
  35. package/api/@xmachines/play-dom/type-aliases/ComponentFn.md +1 -1
  36. package/api/@xmachines/play-dom/type-aliases/ComponentRegistry.md +1 -1
  37. package/api/@xmachines/play-dom/type-aliases/DefineRegistryOptions.md +2 -2
  38. package/api/@xmachines/play-dom/type-aliases/DomComponentRenderer.md +1 -1
  39. package/api/@xmachines/play-dom/type-aliases/DomRegistry.md +1 -1
  40. package/api/@xmachines/play-dom/type-aliases/DomSchema.md +1 -1
  41. package/api/@xmachines/play-dom/type-aliases/MountFn.md +1 -1
  42. package/api/@xmachines/play-dom/type-aliases/SetState.md +1 -1
  43. package/api/@xmachines/play-dom/variables/schema.md +1 -1
  44. package/api/@xmachines/play-dom-router/README.md +160 -158
  45. package/api/@xmachines/play-dom-router/functions/connectRouter.md +1 -1
  46. package/api/@xmachines/play-dom-router/functions/createBrowserHistory.md +1 -1
  47. package/api/@xmachines/play-dom-router/functions/createRouteMap.md +1 -1
  48. package/api/@xmachines/play-dom-router/functions/createRouter.md +1 -1
  49. package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +14 -14
  50. package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +14 -14
  51. package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +4 -4
  52. package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +6 -6
  53. package/api/@xmachines/play-dom-router/interfaces/RouteLookupContract.md +3 -3
  54. package/api/@xmachines/play-dom-router/interfaces/RouteMap.md +3 -3
  55. package/api/@xmachines/play-dom-router/interfaces/RouteMapOptions.md +2 -2
  56. package/api/@xmachines/play-dom-router/interfaces/RouteMapping.md +3 -3
  57. package/api/@xmachines/play-dom-router/interfaces/RouterBridge.md +3 -3
  58. package/api/@xmachines/play-dom-router/interfaces/VanillaRouter.md +4 -4
  59. package/api/@xmachines/play-dom-router/type-aliases/RoutableActor.md +1 -1
  60. package/api/@xmachines/play-react/README.md +109 -320
  61. package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +5 -5
  62. package/api/@xmachines/play-react/functions/useActor.md +1 -1
  63. package/api/@xmachines/play-react/functions/usePlayView.md +1 -1
  64. package/api/@xmachines/play-react/functions/useSignalEffect.md +1 -1
  65. package/api/@xmachines/play-react/interfaces/ActorProviderProps.md +8 -8
  66. package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +4 -4
  67. package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +3 -3
  68. package/api/@xmachines/play-react/interfaces/PlayUIProviderProps.md +8 -8
  69. package/api/@xmachines/play-react/interfaces/ViewContextValue.md +5 -5
  70. package/api/@xmachines/play-react/type-aliases/PlayActor.md +1 -1
  71. package/api/@xmachines/play-react/variables/ActorProvider.md +1 -1
  72. package/api/@xmachines/play-react/variables/PlayRenderer.md +1 -1
  73. package/api/@xmachines/play-react/variables/PlayUIProvider.md +1 -1
  74. package/api/@xmachines/play-react-router/README.md +107 -124
  75. package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +23 -23
  76. package/api/@xmachines/play-react-router/classes/RouteMap.md +4 -4
  77. package/api/@xmachines/play-react-router/functions/PlayRouterProvider.md +1 -1
  78. package/api/@xmachines/play-react-router/functions/createRouteMap.md +1 -1
  79. package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +1 -1
  80. package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +6 -6
  81. package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +5 -5
  82. package/api/@xmachines/play-react-router/interfaces/RouteMapOptions.md +2 -2
  83. package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +3 -3
  84. package/api/@xmachines/play-react-router/interfaces/RouterBridge.md +3 -3
  85. package/api/@xmachines/play-router/README.md +235 -475
  86. package/api/@xmachines/play-router/classes/RouteMap.md +4 -4
  87. package/api/@xmachines/play-router/classes/RouterBridgeBase.md +23 -23
  88. package/api/@xmachines/play-router/functions/buildPlayRouteEvent.md +1 -1
  89. package/api/@xmachines/play-router/functions/buildRouteTree.md +1 -1
  90. package/api/@xmachines/play-router/functions/createRouteMap.md +1 -1
  91. package/api/@xmachines/play-router/functions/createRouteMapFromTree.md +1 -1
  92. package/api/@xmachines/play-router/functions/createRouteMatcher.md +1 -1
  93. package/api/@xmachines/play-router/functions/detectDuplicateRoutes.md +1 -1
  94. package/api/@xmachines/play-router/functions/extractMachineRoutes.md +1 -1
  95. package/api/@xmachines/play-router/functions/extractQuery.md +1 -1
  96. package/api/@xmachines/play-router/functions/extractRouteParams.md +1 -1
  97. package/api/@xmachines/play-router/functions/findRouteById.md +1 -1
  98. package/api/@xmachines/play-router/functions/findRouteByPath.md +1 -1
  99. package/api/@xmachines/play-router/functions/getNavigableRoutes.md +1 -1
  100. package/api/@xmachines/play-router/functions/getRoutableRoutes.md +1 -1
  101. package/api/@xmachines/play-router/functions/getTransitionReachableRoutes.md +1 -1
  102. package/api/@xmachines/play-router/functions/isRouteReachable.md +1 -1
  103. package/api/@xmachines/play-router/functions/machineToGraph.md +1 -1
  104. package/api/@xmachines/play-router/functions/routeExists.md +1 -1
  105. package/api/@xmachines/play-router/functions/sanitizePathname.md +1 -1
  106. package/api/@xmachines/play-router/functions/validateRouteFormat.md +1 -1
  107. package/api/@xmachines/play-router/functions/validateStateExists.md +1 -1
  108. package/api/@xmachines/play-router/interfaces/BuildPlayRouteEventOptions.md +4 -4
  109. package/api/@xmachines/play-router/interfaces/LocationLike.md +3 -3
  110. package/api/@xmachines/play-router/interfaces/MachineEdgeData.md +3 -3
  111. package/api/@xmachines/play-router/interfaces/MachineNodeData.md +5 -5
  112. package/api/@xmachines/play-router/interfaces/PlayRouteEvent.md +6 -6
  113. package/api/@xmachines/play-router/interfaces/RouteInfo.md +8 -8
  114. package/api/@xmachines/play-router/interfaces/RouteMapOptions.md +2 -2
  115. package/api/@xmachines/play-router/interfaces/RouteMapping.md +3 -3
  116. package/api/@xmachines/play-router/interfaces/RouteMatch.md +3 -3
  117. package/api/@xmachines/play-router/interfaces/RouteMatcher.md +4 -4
  118. package/api/@xmachines/play-router/interfaces/RouteNode.md +10 -10
  119. package/api/@xmachines/play-router/interfaces/RouteObject.md +2 -2
  120. package/api/@xmachines/play-router/interfaces/RouteTree.md +5 -5
  121. package/api/@xmachines/play-router/interfaces/RouteWatcherHandle.md +3 -3
  122. package/api/@xmachines/play-router/interfaces/RouterBridge.md +3 -3
  123. package/api/@xmachines/play-router/interfaces/WindowLike.md +3 -3
  124. package/api/@xmachines/play-router/type-aliases/MachineGraph.md +1 -1
  125. package/api/@xmachines/play-router/type-aliases/RouteMetadata.md +1 -1
  126. package/api/@xmachines/play-signals/README.md +105 -73
  127. package/api/@xmachines/play-signals/functions/watchSignal.md +1 -1
  128. package/api/@xmachines/play-signals/interfaces/ComputedOptions.md +2 -2
  129. package/api/@xmachines/play-signals/interfaces/SignalComputed.md +2 -2
  130. package/api/@xmachines/play-signals/interfaces/SignalOptions.md +2 -2
  131. package/api/@xmachines/play-signals/interfaces/SignalState.md +3 -3
  132. package/api/@xmachines/play-signals/interfaces/SignalWatcher.md +4 -4
  133. package/api/@xmachines/play-signals/type-aliases/WatcherNotify.md +1 -1
  134. package/api/@xmachines/play-solid/README.md +117 -263
  135. package/api/@xmachines/play-solid/functions/useActor.md +1 -1
  136. package/api/@xmachines/play-solid/functions/usePlayView.md +1 -1
  137. package/api/@xmachines/play-solid/interfaces/ActorProviderProps.md +8 -8
  138. package/api/@xmachines/play-solid/interfaces/PlayUIProviderProps.md +8 -8
  139. package/api/@xmachines/play-solid/interfaces/ViewContextValue.md +5 -5
  140. package/api/@xmachines/play-solid/type-aliases/PlayActor.md +1 -1
  141. package/api/@xmachines/play-solid/variables/ActorContext.md +1 -1
  142. package/api/@xmachines/play-solid/variables/ActorProvider.md +1 -1
  143. package/api/@xmachines/play-solid/variables/PlayRenderer.md +1 -1
  144. package/api/@xmachines/play-solid/variables/PlayUIProvider.md +1 -1
  145. package/api/@xmachines/play-solid-router/README.md +93 -606
  146. package/api/@xmachines/play-solid-router/classes/RouteMap.md +4 -4
  147. package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +24 -24
  148. package/api/@xmachines/play-solid-router/functions/PlayRouterProvider.md +1 -1
  149. package/api/@xmachines/play-solid-router/functions/createRouteMap.md +1 -1
  150. package/api/@xmachines/play-solid-router/interfaces/AbstractActor.md +3 -3
  151. package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +6 -6
  152. package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +5 -5
  153. package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +2 -2
  154. package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +3 -3
  155. package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +3 -3
  156. package/api/@xmachines/play-solid-router/type-aliases/RoutableActor.md +1 -1
  157. package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +4 -4
  158. package/api/@xmachines/play-svelte/README.md +111 -103
  159. package/api/@xmachines/play-svelte/functions/defineRegistry.md +1 -1
  160. package/api/@xmachines/play-svelte/functions/getActorContext.md +1 -1
  161. package/api/@xmachines/play-svelte/functions/getPlayViewContext.md +1 -1
  162. package/api/@xmachines/play-svelte/functions/setActorContext.md +1 -1
  163. package/api/@xmachines/play-svelte/interfaces/ActorProviderProps.md +8 -8
  164. package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +4 -4
  165. package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +11 -11
  166. package/api/@xmachines/play-svelte/interfaces/ViewContextValue.md +5 -5
  167. package/api/@xmachines/play-svelte/type-aliases/PlayActor.md +1 -1
  168. package/api/@xmachines/play-svelte-spa-router/README.md +156 -17
  169. package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +4 -4
  170. package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +1 -1
  171. package/api/@xmachines/play-svelte-spa-router/functions/createRouteMap.md +1 -1
  172. package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +4 -4
  173. package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +6 -6
  174. package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +2 -2
  175. package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +3 -3
  176. package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +3 -3
  177. package/api/@xmachines/play-svelte-spa-router/interfaces/WindowLike.md +3 -3
  178. package/api/@xmachines/play-svelte-spa-router/type-aliases/RoutableActor.md +1 -1
  179. package/api/@xmachines/play-sveltekit-router/README.md +168 -17
  180. package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +4 -4
  181. package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +1 -1
  182. package/api/@xmachines/play-sveltekit-router/functions/createRouteMap.md +1 -1
  183. package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +4 -4
  184. package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +3 -3
  185. package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +6 -6
  186. package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +2 -2
  187. package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +3 -3
  188. package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +3 -3
  189. package/api/@xmachines/play-sveltekit-router/type-aliases/RoutableActor.md +1 -1
  190. package/api/@xmachines/play-tanstack-react-router/README.md +147 -122
  191. package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +4 -4
  192. package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +23 -23
  193. package/api/@xmachines/play-tanstack-react-router/functions/PlayRouterProvider.md +1 -1
  194. package/api/@xmachines/play-tanstack-react-router/functions/createRouteMap.md +1 -1
  195. package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +1 -1
  196. package/api/@xmachines/play-tanstack-react-router/functions/extractMachineRoutes.md +1 -1
  197. package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +6 -6
  198. package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +5 -5
  199. package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +2 -2
  200. package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +3 -3
  201. package/api/@xmachines/play-tanstack-react-router/interfaces/RouteNavigateEvent.md +3 -3
  202. package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +3 -3
  203. package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterInstance.md +1 -1
  204. package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterLike.md +4 -4
  205. package/api/@xmachines/play-tanstack-solid-router/README.md +195 -173
  206. package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +4 -4
  207. package/api/@xmachines/play-tanstack-solid-router/classes/SolidRouterBridge.md +24 -24
  208. package/api/@xmachines/play-tanstack-solid-router/functions/PlayRouterProvider.md +1 -1
  209. package/api/@xmachines/play-tanstack-solid-router/functions/createRouteMap.md +1 -1
  210. package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +6 -6
  211. package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +5 -5
  212. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +2 -2
  213. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +3 -3
  214. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +3 -3
  215. package/api/@xmachines/play-tanstack-solid-router/type-aliases/RoutableActor.md +1 -1
  216. package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterInstance.md +1 -1
  217. package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterLike.md +3 -3
  218. package/api/@xmachines/play-vue/README.md +126 -271
  219. package/api/@xmachines/play-vue/functions/defineRegistry.md +1 -1
  220. package/api/@xmachines/play-vue/functions/getPlayViewContext.md +1 -1
  221. package/api/@xmachines/play-vue/functions/useActor.md +1 -1
  222. package/api/@xmachines/play-vue/interfaces/ActorProviderProps.md +5 -5
  223. package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +8 -8
  224. package/api/@xmachines/play-vue/interfaces/ViewContextValue.md +5 -5
  225. package/api/@xmachines/play-vue/interfaces/VisibilityProviderProps.md +1 -1
  226. package/api/@xmachines/play-vue/type-aliases/ComponentEntry.md +1 -1
  227. package/api/@xmachines/play-vue/type-aliases/ComponentsMap.md +1 -1
  228. package/api/@xmachines/play-vue/type-aliases/DefineRegistryOptions.md +2 -2
  229. package/api/@xmachines/play-vue/type-aliases/PlayActor.md +1 -1
  230. package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
  231. package/api/@xmachines/play-vue-router/README.md +148 -528
  232. package/api/@xmachines/play-vue-router/classes/RouteMap.md +4 -4
  233. package/api/@xmachines/play-vue-router/classes/VueRouterBridge.md +24 -24
  234. package/api/@xmachines/play-vue-router/functions/createRouteMap.md +1 -1
  235. package/api/@xmachines/play-vue-router/interfaces/PlayRouteEvent.md +6 -6
  236. package/api/@xmachines/play-vue-router/interfaces/RouteMapOptions.md +2 -2
  237. package/api/@xmachines/play-vue-router/interfaces/RouteMapping.md +3 -3
  238. package/api/@xmachines/play-vue-router/interfaces/RouterBridge.md +3 -3
  239. package/api/@xmachines/play-vue-router/type-aliases/RoutableActor.md +1 -1
  240. package/api/@xmachines/play-vue-router/variables/PlayRouterProvider.md +1 -1
  241. package/api/@xmachines/play-xstate/README.md +167 -496
  242. package/api/@xmachines/play-xstate/classes/PlayerActor.md +12 -12
  243. package/api/@xmachines/play-xstate/functions/buildRouteUrl.md +1 -1
  244. package/api/@xmachines/play-xstate/functions/composeGuards.md +1 -1
  245. package/api/@xmachines/play-xstate/functions/composeGuardsOr.md +1 -1
  246. package/api/@xmachines/play-xstate/functions/contextFieldMatches.md +1 -1
  247. package/api/@xmachines/play-xstate/functions/definePlayer.md +1 -1
  248. package/api/@xmachines/play-xstate/functions/deriveRoute.md +1 -1
  249. package/api/@xmachines/play-xstate/functions/eventMatches.md +1 -1
  250. package/api/@xmachines/play-xstate/functions/formatPlayRouteTransitions.md +1 -1
  251. package/api/@xmachines/play-xstate/functions/hasContext.md +1 -1
  252. package/api/@xmachines/play-xstate/functions/isAbsoluteRoute.md +1 -1
  253. package/api/@xmachines/play-xstate/functions/negateGuard.md +1 -1
  254. package/api/@xmachines/play-xstate/interfaces/PlayerConfig.md +3 -3
  255. package/api/@xmachines/play-xstate/interfaces/PlayerFactoryResumeOptions.md +2 -2
  256. package/api/@xmachines/play-xstate/interfaces/PlayerOptions.md +6 -6
  257. package/api/@xmachines/play-xstate/interfaces/RouteContext.md +5 -5
  258. package/api/@xmachines/play-xstate/type-aliases/ComposedGuard.md +1 -1
  259. package/api/@xmachines/play-xstate/type-aliases/Guard.md +1 -1
  260. package/api/@xmachines/play-xstate/type-aliases/GuardArray.md +1 -1
  261. package/api/@xmachines/play-xstate/type-aliases/PlayerFactory.md +1 -1
  262. package/api/@xmachines/play-xstate/type-aliases/RouteMachineConfig.md +4 -4
  263. package/api/@xmachines/play-xstate/type-aliases/RouteStateNode.md +4 -4
  264. package/api/@xmachines/shared/README.md +81 -294
  265. package/api/@xmachines/shared/vite-aliases/functions/xmAliases.md +1 -1
  266. package/api/@xmachines/shared/vite-aliases/functions/xmCacheDir.md +1 -1
  267. package/api/@xmachines/shared/vite-aliases/functions/xmOptimizeDeps.md +1 -1
  268. package/api/@xmachines/shared/vite-aliases/functions/xmResolve.md +1 -1
  269. package/api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md +1 -1
  270. package/examples/@xmachines/play-dom-demo/README.md +3 -3
  271. package/examples/@xmachines/play-dom-demo/functions/createNavBar.md +1 -1
  272. package/examples/@xmachines/play-dom-demo/functions/initShell.md +1 -1
  273. package/examples/@xmachines/play-dom-demo/type-aliases/AuthCatalog.md +1 -1
  274. package/examples/@xmachines/play-dom-demo/variables/About.md +1 -1
  275. package/examples/@xmachines/play-dom-demo/variables/Contact.md +1 -1
  276. package/examples/@xmachines/play-dom-demo/variables/Dashboard.md +1 -1
  277. package/examples/@xmachines/play-dom-demo/variables/Home.md +1 -1
  278. package/examples/@xmachines/play-dom-demo/variables/Login.md +1 -1
  279. package/examples/@xmachines/play-dom-demo/variables/NavBarView.md +1 -1
  280. package/examples/@xmachines/play-dom-demo/variables/Navigation.md +1 -1
  281. package/examples/@xmachines/play-dom-demo/variables/Overview.md +1 -1
  282. package/examples/@xmachines/play-dom-demo/variables/Profile.md +1 -1
  283. package/examples/@xmachines/play-dom-demo/variables/Settings.md +1 -1
  284. package/examples/@xmachines/play-dom-demo/variables/Stats.md +1 -1
  285. package/examples/@xmachines/play-dom-demo/variables/authCatalog.md +1 -1
  286. package/examples/@xmachines/play-dom-router-demo/README.md +2 -2
  287. package/examples/@xmachines/play-react-demo/README.md +1 -1
  288. package/examples/@xmachines/play-react-demo/functions/App.md +1 -1
  289. package/examples/@xmachines/play-react-demo/type-aliases/AuthCatalog.md +1 -1
  290. package/examples/@xmachines/play-react-demo/variables/About.md +1 -1
  291. package/examples/@xmachines/play-react-demo/variables/Contact.md +1 -1
  292. package/examples/@xmachines/play-react-demo/variables/Dashboard.md +1 -1
  293. package/examples/@xmachines/play-react-demo/variables/DebugPanel.md +1 -1
  294. package/examples/@xmachines/play-react-demo/variables/Home.md +1 -1
  295. package/examples/@xmachines/play-react-demo/variables/Login.md +1 -1
  296. package/examples/@xmachines/play-react-demo/variables/NavBar.md +1 -1
  297. package/examples/@xmachines/play-react-demo/variables/NavBarView.md +1 -1
  298. package/examples/@xmachines/play-react-demo/variables/Navigation.md +1 -1
  299. package/examples/@xmachines/play-react-demo/variables/Overview.md +1 -1
  300. package/examples/@xmachines/play-react-demo/variables/Profile.md +1 -1
  301. package/examples/@xmachines/play-react-demo/variables/Settings.md +1 -1
  302. package/examples/@xmachines/play-react-demo/variables/Shell.md +1 -1
  303. package/examples/@xmachines/play-react-demo/variables/Stats.md +1 -1
  304. package/examples/@xmachines/play-react-demo/variables/authCatalog.md +1 -1
  305. package/examples/@xmachines/play-react-router-demo/README.md +1 -1
  306. package/examples/@xmachines/play-solid-demo/README.md +1 -1
  307. package/examples/@xmachines/play-solid-demo/functions/App.md +1 -1
  308. package/examples/@xmachines/play-solid-demo/type-aliases/AuthCatalog.md +1 -1
  309. package/examples/@xmachines/play-solid-demo/variables/About.md +1 -1
  310. package/examples/@xmachines/play-solid-demo/variables/Contact.md +1 -1
  311. package/examples/@xmachines/play-solid-demo/variables/Dashboard.md +1 -1
  312. package/examples/@xmachines/play-solid-demo/variables/DebugPanel.md +1 -1
  313. package/examples/@xmachines/play-solid-demo/variables/Home.md +1 -1
  314. package/examples/@xmachines/play-solid-demo/variables/Login.md +1 -1
  315. package/examples/@xmachines/play-solid-demo/variables/NavBar.md +1 -1
  316. package/examples/@xmachines/play-solid-demo/variables/NavBarView.md +1 -1
  317. package/examples/@xmachines/play-solid-demo/variables/Navigation.md +1 -1
  318. package/examples/@xmachines/play-solid-demo/variables/Overview.md +1 -1
  319. package/examples/@xmachines/play-solid-demo/variables/Profile.md +1 -1
  320. package/examples/@xmachines/play-solid-demo/variables/Settings.md +1 -1
  321. package/examples/@xmachines/play-solid-demo/variables/Shell.md +1 -1
  322. package/examples/@xmachines/play-solid-demo/variables/Stats.md +1 -1
  323. package/examples/@xmachines/play-solid-demo/variables/authCatalog.md +1 -1
  324. package/examples/@xmachines/play-svelte-demo/README.md +1 -1
  325. package/examples/@xmachines/play-svelte-demo/type-aliases/AuthCatalog.md +1 -1
  326. package/examples/@xmachines/play-svelte-demo/variables/authCatalog.md +1 -1
  327. package/examples/@xmachines/play-svelte-spa-router-demo/README.md +2 -2
  328. package/examples/@xmachines/play-sveltekit-router-demo/README.md +2 -2
  329. package/examples/@xmachines/play-vue-demo/README.md +1 -1
  330. package/examples/@xmachines/play-vue-demo/type-aliases/AuthCatalog.md +1 -1
  331. package/examples/@xmachines/play-vue-demo/variables/App.md +1 -1
  332. package/examples/@xmachines/play-vue-demo/variables/authCatalog.md +1 -1
  333. package/examples/README.md +24 -25
  334. package/examples/form-validation.md +2 -2
  335. package/guides/README.md +7 -7
  336. package/guides/actor-model.md +18 -18
  337. package/guides/architecture.md +500 -0
  338. package/guides/configuration.md +556 -0
  339. package/guides/deployment.md +336 -0
  340. package/guides/development.md +617 -0
  341. package/guides/getting-started.md +351 -142
  342. package/guides/signals.md +19 -19
  343. package/guides/state-machines.md +16 -16
  344. package/guides/testing.md +460 -0
  345. package/package.json +5 -5
  346. package/guides/installation.md +0 -257
package/guides/README.md CHANGED
@@ -7,14 +7,14 @@ Entry points for the current XMachines Play architecture.
7
7
  ## Start Here
8
8
 
9
9
  - **[Installation](installation.md)** — Core packages, framework-specific additions, TypeScript config, ESM setup
10
- - **[Getting Started](getting-started.md)** — `setup().createMachine()` → `definePlayer()` → `actor.start()` → TC39 Signals
10
+ - **[Getting Started](getting-started.md)** — `setup().createMachine()` → [`definePlayer()`](../api/@xmachines/play-xstate/functions/definePlayer.md) → `actor.start()` → TC39 Signals
11
11
 
12
12
  ## Concepts
13
13
 
14
14
  Background reading that explains the _why_ behind XMachines design decisions. Read these when you want to understand the architecture, not just use the API.
15
15
 
16
16
  - **[Understanding State Machines](state-machines.md)** — What finite state machines are, how `meta.route` and `meta.view` extend them, and why they replace boolean flags, scattered guards, and component-level routing logic
17
- - **[Understanding the Actor Model](actor-model.md)** — The actor/infrastructure split, what `AbstractActor` enforces, why the machine has zero framework imports, and how the reset invariant works
17
+ - **[Understanding the Actor Model](actor-model.md)** — The actor/infrastructure split, what [`AbstractActor`](../api/@xmachines/play-actor/classes/AbstractActor.md) enforces, why the machine has zero framework imports, and how the reset invariant works
18
18
  - **[Understanding TC39 Signals](signals.md)** — The three signal primitives (`Signal.State`, `Signal.Computed`, `Signal.subtle.Watcher`), why XMachines uses them instead of observables, and the five architectural invariants they enforce
19
19
 
20
20
  ## Examples
@@ -25,8 +25,8 @@ Background reading that explains the _why_ behind XMachines design decisions. Re
25
25
 
26
26
  Framework-specific adapter documentation:
27
27
 
28
- - **[@xmachines/play-router](../api/@xmachines/play-router/README.md)** — Route extraction, route maps, and `RouterBridgeBase`
29
- - **[@xmachines/play-tanstack-react-router](../api/@xmachines/play-tanstack-react-router/README.md)** — TanStack React adapter (`PlayRouterProvider`, `createRouteMapFromTree`)
28
+ - **[@xmachines/play-router](../api/@xmachines/play-router/README.md)** — Route extraction, route maps, and [`RouterBridgeBase`](../api/@xmachines/play-router/classes/RouterBridgeBase.md)
29
+ - **[@xmachines/play-tanstack-react-router](../api/@xmachines/play-tanstack-react-router/README.md)** — TanStack React adapter (`PlayRouterProvider`, [`createRouteMapFromTree`](../api/@xmachines/play-router/functions/createRouteMapFromTree.md))
30
30
  - **[@xmachines/play-react-router](../api/@xmachines/play-react-router/README.md)** — React Router v7 data-router adapter
31
31
  - **[@xmachines/play-tanstack-solid-router](../api/@xmachines/play-tanstack-solid-router/README.md)** — TanStack Solid adapter
32
32
  - **[@xmachines/play-solid-router](../api/@xmachines/play-solid-router/README.md)** — SolidJS Router adapter
@@ -39,12 +39,12 @@ Framework-specific adapter documentation:
39
39
 
40
40
  View layer documentation by framework:
41
41
 
42
- - **[@xmachines/play-xstate](../api/@xmachines/play-xstate/README.md)** — `definePlayer`, `formatPlayRouteTransitions`, `PlayerActor`
43
- - **[@xmachines/play-react](../api/@xmachines/play-react/README.md)** — React rendering from actor-driven view state (`PlayRenderer`, `defineRegistry`)
42
+ - **[@xmachines/play-xstate](../api/@xmachines/play-xstate/README.md)** — [`definePlayer`](../api/@xmachines/play-xstate/functions/definePlayer.md), [`formatPlayRouteTransitions`](../api/@xmachines/play-xstate/functions/formatPlayRouteTransitions.md), [`PlayerActor`](../api/@xmachines/play-xstate/classes/PlayerActor.md)
43
+ - **[@xmachines/play-react](../api/@xmachines/play-react/README.md)** — React rendering from actor-driven view state (`PlayRenderer`, [`defineRegistry`](../api/@xmachines/play-dom/functions/defineRegistry.md))
44
44
  - **[@xmachines/play-vue](../api/@xmachines/play-vue/README.md)** — Vue rendering from actor-driven view state
45
45
  - **[@xmachines/play-solid](../api/@xmachines/play-solid/README.md)** — SolidJS rendering from actor-driven view state
46
46
  - **[@xmachines/play-svelte](../api/@xmachines/play-svelte/README.md)** — Svelte 5 rendering from actor-driven view state
47
- - **[@xmachines/play-dom](../api/@xmachines/play-dom/README.md)** — Vanilla DOM rendering (`connectRenderer`, `defineRegistry`)
47
+ - **[@xmachines/play-dom](../api/@xmachines/play-dom/README.md)** — Vanilla DOM rendering ([`connectRenderer`](../api/@xmachines/play-dom/functions/connectRenderer.md), [`defineRegistry`](../api/@xmachines/play-dom/functions/defineRegistry.md))
48
48
 
49
49
  ## API Reference
50
50
 
@@ -33,20 +33,20 @@ Infrastructure → actor: only via actor.send({ type: "..." })
33
33
 
34
34
  ## What the actor owns
35
35
 
36
- An actor in XMachines is a `PlayerActor` — a concrete class that extends XState's `Actor` class via `AbstractActor`. It implements three reactive properties:
36
+ An actor in XMachines is a [`PlayerActor`](../api/@xmachines/play-xstate/classes/PlayerActor.md) — a concrete class that extends XState's `Actor` class via [`AbstractActor`](../api/@xmachines/play-actor/classes/AbstractActor.md). It implements three reactive properties:
37
37
 
38
- | Property | Type | What it is |
39
- | -------------------- | --------------------------------- | ----------------------------------------------------------------------- |
40
- | `actor.state` | `Signal.State<Snapshot>` | Updated on every XState transition. The full machine snapshot. |
41
- | `actor.currentRoute` | `Signal.Computed<string \| null>` | Derived from the active state node's `meta.route`. |
42
- | `actor.currentView` | `Signal.State<PlaySpec \| null>` | Updated on each transition. Holds the `PlaySpec` that drives renderers. |
38
+ | Property | Type | What it is |
39
+ | -------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
40
+ | `actor.state` | `Signal.State<Snapshot>` | Updated on every XState transition. The full machine snapshot. |
41
+ | `actor.currentRoute` | `Signal.Computed<string \| null>` | Derived from the active state node's `meta.route`. |
42
+ | `actor.currentView` | `Signal.State<PlaySpec \| null>` | Updated on each transition. Holds the [`PlaySpec`](../api/@xmachines/play-actor/interfaces/PlaySpec.md) that drives renderers. |
43
43
 
44
44
  All three are set by the actor, never by infrastructure. Infrastructure reads them via signals.
45
45
 
46
46
  The actor also owns:
47
47
 
48
48
  - **Guards** — it decides whether a transition is valid. If a router sends a `play.route` event for a path the actor's guards reject, the actor does not transition. It then emits its current valid route back through `currentRoute`, and the router bridge overwrites the URL to match.
49
- - **Error states** — structured errors (`PlayError`) are part of the actor's state graph, not thrown into the environment.
49
+ - **Error states** — structured errors ([`PlayError`](../api/@xmachines/play/classes/PlayError.md)) are part of the actor's state graph, not thrown into the environment.
50
50
  - **Initial route** — `actor.initialRoute` is the route the actor starts in. Router adapters use this for initial navigation, not the browser's current URL.
51
51
 
52
52
  ---
@@ -87,17 +87,17 @@ This is why the invariant is called **State-Driven Reset** in the Play RFC.
87
87
 
88
88
  ---
89
89
 
90
- ## `AbstractActor` — the enforced contract
90
+ ## [`AbstractActor`](../api/@xmachines/play-actor/classes/AbstractActor.md) — the enforced contract
91
91
 
92
- `AbstractActor` (from `@xmachines/play-actor`) is the abstract base class that all actor implementations must extend. It extends XState's `Actor`, which means:
92
+ [`AbstractActor`](../api/@xmachines/play-actor/classes/AbstractActor.md) (from [`@xmachines/play-actor`](../api/@xmachines/play-actor/README.md)) is the abstract base class that all actor implementations must extend. It extends XState's `Actor`, which means:
93
93
 
94
94
  - XState's inspection API works (`@xstate/inspect`)
95
95
  - XState DevTools attach to actors normally
96
96
  - The full XState ecosystem (testing utilities, visualization) is compatible
97
97
 
98
- `AbstractActor` adds one abstract requirement: a reactive `state` property of type `Signal.State<unknown>`. This is the single point where XState's pull-based snapshot API is bridged to TC39's push-based signal system.
98
+ [`AbstractActor`](../api/@xmachines/play-actor/classes/AbstractActor.md) adds one abstract requirement: a reactive `state` property of type `Signal.State<unknown>`. This is the single point where XState's pull-based snapshot API is bridged to TC39's push-based signal system.
99
99
 
100
- The two optional capability interfaces — `Routable` and `Viewable` — are deliberately separate:
100
+ The two optional capability interfaces — [`Routable`](../api/@xmachines/play-actor/interfaces/Routable.md) and [`Viewable`](../api/@xmachines/play-actor/interfaces/Viewable.md) — are deliberately separate:
101
101
 
102
102
  - Not every actor needs routing (e.g., a background data-sync actor).
103
103
  - Not every actor drives a view (e.g., a sub-actor composed inside a parent).
@@ -118,13 +118,13 @@ class PlayerActor extends AbstractActor<SomeMachine> implements Routable, Viewab
118
118
  }
119
119
  ```
120
120
 
121
- In practice you never write `PlayerActor` yourself — `definePlayer` from `@xmachines/play-xstate` creates one from your machine definition.
121
+ In practice you never write [`PlayerActor`](../api/@xmachines/play-xstate/classes/PlayerActor.md) yourself — [`definePlayer`](../api/@xmachines/play-xstate/functions/definePlayer.md) from [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) creates one from your machine definition.
122
122
 
123
123
  ---
124
124
 
125
- ## `definePlayer` — the factory builder
125
+ ## [`definePlayer`](../api/@xmachines/play-xstate/functions/definePlayer.md) — the factory builder
126
126
 
127
- `definePlayer({ machine })` is the primary entry point for creating actors:
127
+ [`definePlayer({ machine })`](../api/@xmachines/play-xstate/functions/definePlayer.md) is the primary entry point for creating actors:
128
128
 
129
129
  ```typescript
130
130
  import { definePlayer } from "@xmachines/play-xstate";
@@ -137,7 +137,7 @@ const actor = createPlayer();
137
137
  actor.start();
138
138
  ```
139
139
 
140
- `definePlayer` returns a **factory function**, not an actor. This is intentional: it lets you create multiple independent instances (e.g., one per test, one per user session) without re-processing the machine definition each time.
140
+ [`definePlayer`](../api/@xmachines/play-xstate/functions/definePlayer.md) returns a **factory function**, not an actor. This is intentional: it lets you create multiple independent instances (e.g., one per test, one per user session) without re-processing the machine definition each time.
141
141
 
142
142
  The factory accepts optional `input` (initial context overrides) and a `restore` snapshot (for resumable sessions):
143
143
 
@@ -152,7 +152,7 @@ const actor = createPlayer(undefined, { snapshot }); // restored from snapshot
152
152
 
153
153
  The machine definition — the `setup().createMachine(...)` call — is pure TypeScript with zero runtime dependencies on browsers, routers, or UI frameworks. This is not a convention; it is enforced by the dependency graph.
154
154
 
155
- `@xmachines/play-xstate` depends on `xstate` and `@xmachines/play-signals`. It does not depend on React, Vue, any router library, or any browser API. Your machine file inherits those same boundaries.
155
+ [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) depends on `xstate` and [`@xmachines/play-signals`](../api/@xmachines/play-signals/README.md). It does not depend on React, Vue, any router library, or any browser API. Your machine file inherits those same boundaries.
156
156
 
157
157
  This has concrete practical benefits:
158
158
 
@@ -175,6 +175,6 @@ The Play RFC captures the actor/infrastructure split in a single statement:
175
175
  - [Understanding TC39 Signals](signals.md) — how the actor communicates with infrastructure
176
176
  - [Understanding State Machines](state-machines.md) — how the machine definition drives actor behavior
177
177
  - [Getting Started](getting-started.md) — hands-on walkthrough creating and starting an actor
178
- - [@xmachines/play-actor README](../api/@xmachines/play-actor/README.md) — API reference for `AbstractActor`
179
- - [@xmachines/play-xstate README](../api/@xmachines/play-xstate/README.md) — API reference for `definePlayer` and `PlayerActor`
178
+ - [@xmachines/play-actor README](../api/@xmachines/play-actor/README.md) — API reference for [`AbstractActor`](../api/@xmachines/play-actor/classes/AbstractActor.md)
179
+ - [@xmachines/play-xstate README](../api/@xmachines/play-xstate/README.md) — API reference for [`definePlayer`](../api/@xmachines/play-xstate/functions/definePlayer.md) and [`PlayerActor`](../api/@xmachines/play-xstate/classes/PlayerActor.md)
180
180
  - [Play RFC](../rfc/play.md) — complete architectural specification
@@ -0,0 +1,500 @@
1
+ <!-- generated-by: gsd-doc-writer -->
2
+
3
+ # Architecture
4
+
5
+ ## System Overview
6
+
7
+ XMachines JS is the JavaScript/TypeScript reference implementation of the **Universal Player Architecture** (Play RFC). It is a monorepo of modular packages that strictly separates **business logic (the Actor)** from **infrastructure (router adapters and view renderers)**. An XState v5 state machine is the single source of truth; it owns all state, guards, and route validity. Infrastructure is passive: it observes TC39 Signals emitted by the Actor and proposes state changes via typed events. The Actor's guards make every navigation and transition decision. Communication across the boundary is exclusively through TC39 Signals — never subscriptions, callbacks, or direct state mutation. Five architectural invariants (documented in [`rfc/play.md`](../rfc/play.md)) enforce this contract across the entire package graph.
8
+
9
+ **Architectural invariants:**
10
+
11
+ | ID | Name | Rule |
12
+ | ------ | ---------------------- | ----------------------------------------------------------------- |
13
+ | INV-01 | Actor Authority | Infrastructure proposes intents; Actor decides via guards |
14
+ | INV-02 | Strict Separation | No direct dependencies between Actor and Infrastructure layers |
15
+ | INV-03 | Passive Infrastructure | Infrastructure observes Actor signals, never controls state |
16
+ | INV-04 | Signal-Only Reactivity | All state changes flow through TC39 Signals |
17
+ | INV-05 | State-Driven Reset | Invalid external navigation is overwritten by Actor-derived state |
18
+
19
+ ---
20
+
21
+ ## Component Diagram
22
+
23
+ ```mermaid
24
+ graph TD
25
+ subgraph Layer0["Layer 0 — Protocol / Primitives"]
26
+ play["@xmachines/play<br/>(PlayEvent, PlayError)"]
27
+ signals["@xmachines/play-signals<br/>(TC39 Signal, watchSignal)"]
28
+ shared["@xmachines/shared<br/>(tsconfig, oxlint, oxfmt)"]
29
+ end
30
+
31
+ subgraph Layer1["Layer 1 — Abstract Actor Base"]
32
+ actor["@xmachines/play-actor<br/>(AbstractActor, Routable, Viewable, PlaySpec)"]
33
+ end
34
+
35
+ subgraph Layer2["Layer 2 — Concrete Implementations"]
36
+ xstate["@xmachines/play-xstate<br/>(PlayerActor, definePlayer, guards, routing)"]
37
+ router["@xmachines/play-router<br/>(RouterBridgeBase, RouteMap, extractMachineRoutes)"]
38
+
39
+ subgraph Views["View Renderers"]
40
+ react["@xmachines/play-react"]
41
+ vue["@xmachines/play-vue"]
42
+ solid["@xmachines/play-solid"]
43
+ svelte["@xmachines/play-svelte"]
44
+ dom["@xmachines/play-dom"]
45
+ end
46
+
47
+ subgraph RouterAdapters["Router Adapters"]
48
+ tsr["@xmachines/play-tanstack-react-router"]
49
+ rr["@xmachines/play-react-router"]
50
+ vr["@xmachines/play-vue-router"]
51
+ sr["@xmachines/play-solid-router"]
52
+ tss["@xmachines/play-tanstack-solid-router"]
53
+ sk["@xmachines/play-sveltekit-router"]
54
+ ssr["@xmachines/play-svelte-spa-router"]
55
+ dr["@xmachines/play-dom-router"]
56
+ end
57
+ end
58
+
59
+ play --> actor
60
+ signals --> actor
61
+ actor --> xstate
62
+ actor --> router
63
+ actor --> Views
64
+ signals --> xstate
65
+ signals --> router
66
+ play --> xstate
67
+ play --> router
68
+ router --> RouterAdapters
69
+ xstate -.->|"play.route events"| router
70
+ ```
71
+
72
+ ---
73
+
74
+ ## Data Flow
75
+
76
+ ### Actor State Change → UI Render
77
+
78
+ ```mermaid
79
+ flowchart TD
80
+ A["XState machine transition"]
81
+ B["PlayerActor._xstateActor.subscribe(snapshot)"]
82
+ C["StateSignalManager.scheduleUpdate(snapshot)\nactor.state Signal.State updated — synchronous"]
83
+ D["actor.currentRoute Signal.Computed recomputes\nderives URL from meta.route + context.params"]
84
+ E["_validateAndCacheView(snapshot)\nactor.currentView Signal.State updated"]
85
+ F["Framework signal watcher fires\nmicrotask"]
86
+ G["ActorProvider reads actor.currentView.get()"]
87
+ H["PlayRenderer renders via @json-render/* Renderer"]
88
+
89
+ A --> B --> C --> D --> E --> F --> G --> H
90
+ ```
91
+
92
+ ### User Navigation (Browser URL → Actor)
93
+
94
+ ```mermaid
95
+ flowchart TD
96
+ A["Browser popstate / router navigation event"]
97
+ B["Router adapter watchRouterChanges() handler fires"]
98
+ C["RouterBridgeBase.syncActorFromRouter(pathname, search)"]
99
+ D["sanitizePathname(pathname)\nlength/content guard"]
100
+ E["buildPlayRouteEvent(path, routeMap)\nresolves stateId from URL via URLPattern"]
101
+ F["actor.send({ type: 'play.route', to: '#stateId', params, query })"]
102
+ G["XState machine guard evaluates transition"]
103
+ H["machine transitions → signals update\n→ URL bar updated"]
104
+ I["guard blocks → machine stays\n→ router re-syncs to actor's current route"]
105
+
106
+ A --> B --> C --> D --> E --> F --> G
107
+ G -->|valid| H
108
+ G -->|invalid| I
109
+ ```
110
+
111
+ ### Actor State Change → Router URL Sync
112
+
113
+ ```mermaid
114
+ flowchart TD
115
+ A["actor.currentRoute Signal.Computed changes"]
116
+ B["RouterBridgeBase routeWatcher\nTC39 Signal.subtle.Watcher fires"]
117
+ C["watchSignal microtask queued\nneedsEnqueue dedup guard"]
118
+ D["syncRouterFromActor(route) called"]
119
+ E["lastSyncedPath set\necho suppression — prevents circular callback"]
120
+ F["navigateRouter(path)\ncalls framework router's navigate API"]
121
+ G["Router updates URL bar"]
122
+
123
+ A --> B --> C --> D --> E --> F --> G
124
+ ```
125
+
126
+ ### Initial Connection (deep-link vs. restore detection)
127
+
128
+ ```mermaid
129
+ flowchart TD
130
+ A["bridge.connect()"]
131
+ B["routeWatcher armed on actor.currentRoute"]
132
+ C["watchRouterChanges() subscribed"]
133
+ D["getInitialRouterPath() reads current browser URL"]
134
+ E["resolves sanitized URL path → stateId via routeMap"]
135
+ F{"Compare stateId vs actor.initialRoute"}
136
+ G["syncActorFromRouter()\nrouter wins — deep-link"]
137
+ H["navigateRouter()\nactor wins — restore"]
138
+
139
+ A --> B --> C --> D --> E --> F
140
+ F -->|"URL ≠ machine initial state"| G
141
+ F -->|"URL = machine initial state"| H
142
+ ```
143
+
144
+ ### View Prop Enrichment
145
+
146
+ ```mermaid
147
+ flowchart TD
148
+ A["XState snapshot.getMeta()"]
149
+ B["resolveViewMeta(meta)\nfinds first meta.view with root + elements"]
150
+ C["Extract context.params\nURL path params set by formatPlayRouteTransitions assign"]
151
+ D["Extract contextProps allowlist\nexplicit opt-in from PlaySpec.contextProps"]
152
+ E["mergeRouteParamsIntoProps()\npriority: spec prop > URL param > contextProps value"]
153
+ F["Enriched PlaySpec set on currentView signal"]
154
+
155
+ A --> B --> C --> D --> E --> F
156
+ ```
157
+
158
+ ---
159
+
160
+ ## Key Abstractions
161
+
162
+ ### [`PlayEvent<TPayload>`](../api/@xmachines/play/type-aliases/PlayEvent.md)
163
+
164
+ The minimal event contract for Actor communication: any object with a `readonly type: string` property. `TPayload` extends `Record<string, unknown>` for additional fields. Framework-agnostic; used directly by XState, router adapters, and domain logic. Part of [`@xmachines/play`](../api/@xmachines/play/README.md).
165
+
166
+ ```typescript
167
+ import type { PlayEvent } from "@xmachines/play";
168
+
169
+ type LoginEvent = PlayEvent<{ userId: string; timestamp: number }>;
170
+ ```
171
+
172
+ ### [`PlayError`](../api/@xmachines/play/classes/PlayError.md)
173
+
174
+ Base class for all `@xmachines/*` typed runtime errors. Carries `scope` (throwing class/module) and `code` (stable machine-readable identifier, e.g. `"PLAY_ROUTER_SYNC_FAILED"`). Subclassed per package, exported from each package's `./errors` subpath. Never match on `.message` — always match on `.code` or the subclass.
175
+
176
+ ```typescript
177
+ import { PlayError } from "@xmachines/play";
178
+ import { RouterSyncError } from "@xmachines/play-router/errors";
179
+
180
+ if (err instanceof RouterSyncError) {
181
+ /* err.scope, err.code, err.cause */
182
+ }
183
+ ```
184
+
185
+ ### [`AbstractActor<TLogic, TEvent>`](../api/@xmachines/play-actor/classes/AbstractActor.md)
186
+
187
+ Abstract base class extending XState `Actor`. Declares `public abstract state: Signal.State<unknown>` and `public abstract override send(event: TEvent): void`. Maintains XState ecosystem compatibility (devtools, inspection) while enforcing the signal protocol. Concrete implementations extend this (e.g. [`PlayerActor`](../api/@xmachines/play-xstate/classes/PlayerActor.md)).
188
+
189
+ ### [`Routable`](../api/@xmachines/play-actor/interfaces/Routable.md)
190
+
191
+ Optional capability interface. Exposes `currentRoute: Signal.Computed<string | null>` (derived URL path) and `readonly initialRoute: string | null` (machine's initial route, fixed at definition time). Router bridges consume this interface directly — they never depend on the concrete [`PlayerActor`](../api/@xmachines/play-xstate/classes/PlayerActor.md).
192
+
193
+ ### [`Viewable`](../api/@xmachines/play-actor/interfaces/Viewable.md)
194
+
195
+ Optional capability interface. Exposes `currentView: Signal.State<PlaySpec | null>`. View renderers (`PlayRenderer`) consume this contract to resolve the current view description into UI without coupling to the framework or actor implementation.
196
+
197
+ ### [`PlaySpec`](../api/@xmachines/play-actor/interfaces/PlaySpec.md)
198
+
199
+ Extends `@json-render/core` `Spec` with `readonly contextProps?: readonly string[]` — an explicit allowlist of machine context fields that `deriveCurrentView` merges into element props. Only fields named here are ever exposed to components. `typedSpec<TContext>()` provides compile-time validation of `contextProps` entries against the machine's context type.
200
+
201
+ ### [`PlayerActor<TMachine>`](../api/@xmachines/play-xstate/classes/PlayerActor.md)
202
+
203
+ Concrete XState v5 actor implementing the full signal protocol. Extends [`AbstractActor`](../api/@xmachines/play-actor/classes/AbstractActor.md); implements both [`Routable`](../api/@xmachines/play-actor/interfaces/Routable.md) and [`Viewable`](../api/@xmachines/play-actor/interfaces/Viewable.md). Wraps an internal `xstate.Actor` and bridges its subscription to TC39 Signals via `StateSignalManager`. Exposes: `state`, `currentRoute`, `currentView`, `initialRoute`, `send()`, `start()`, `stop()`, `can()`, `dispose()`.
204
+
205
+ ### [`definePlayer(config)`](../api/@xmachines/play-xstate/functions/definePlayer.md)
206
+
207
+ Factory creator. Pre-computes `initialRoute` once from the machine's initial state (zero extra actor instantiation per factory call). Returns [`PlayerFactory<TMachine>`](../api/@xmachines/play-xstate/type-aliases/PlayerFactory.md): `(input?, restore?) => PlayerActor<TMachine>`.
208
+
209
+ ```typescript
210
+ import { definePlayer } from "@xmachines/play-xstate";
211
+ const createPlayer = definePlayer({ machine, options });
212
+ const actor = createPlayer(); // or createPlayer(input) or createPlayer(undefined, { snapshot })
213
+ actor.start();
214
+ ```
215
+
216
+ ### [`RouterBridgeBase`](../api/@xmachines/play-router/classes/RouterBridgeBase.md)
217
+
218
+ Abstract base class capturing 100% of the shared router bridge logic. Template Method pattern: subclasses implement exactly three abstract methods — `navigateRouter(path)`, `watchRouterChanges()`, `unwatchRouterChanges()`. Manages `isConnected`, `lastSyncedPath` (echo suppression), `isProcessingNavigation` (re-entrant guard redirect prevention), and `routeWatcher` lifecycle. Enforces one-bridge-per-actor via a module-level `WeakMap`.
219
+
220
+ ### [`RouteMap`](../api/@xmachines/play-router/classes/RouteMap.md) / [`createRouteMap`](../api/@xmachines/play-router/functions/createRouteMap.md)
221
+
222
+ Bidirectional `stateId ↔ URL path` lookup. [`createRouteMap(machine)`](../api/@xmachines/play-router/functions/createRouteMap.md) → [`RouteMap`](../api/@xmachines/play-router/classes/RouteMap.md). [`createRouteMapFromTree(routeTree)`](../api/@xmachines/play-router/functions/createRouteMapFromTree.md) takes the output of [`extractMachineRoutes(machine)`](../api/@xmachines/play-router/functions/extractMachineRoutes.md) directly. Internally uses `URLPattern` for parameterized route matching (e.g. `/profile/:userId`).
223
+
224
+ ### [`PlayRouteEvent`](../api/@xmachines/play-router/interfaces/PlayRouteEvent.md)
225
+
226
+ Unified routing event sent by router adapters to the Actor.
227
+
228
+ ```typescript
229
+ interface PlayRouteEvent {
230
+ readonly type: "play.route";
231
+ readonly to: string; // e.g. "#home", "#profile"
232
+ readonly params?: Record<string, string>; // URL path params, e.g. { userId: "123" }
233
+ readonly query?: Record<string, string>; // Query string params
234
+ readonly match?: unknown; // URLPatternResult (optional, for debugging)
235
+ }
236
+ ```
237
+
238
+ ### [`watchSignal(signal, callback)`](../api/@xmachines/play-signals/functions/watchSignal.md)
239
+
240
+ Subscribe to a single TC39 signal with microtask batching and memory-safe cleanup. Uses a one-shot `Signal.subtle.Watcher` lifecycle — re-arms after each notification. `disposed` flag guards post-cleanup callbacks; `needsEnqueue` deduplicates rapid synchronous signal changes. Returns a `() => void` cleanup function.
241
+
242
+ ### [`formatPlayRouteTransitions(machineConfig)`](../api/@xmachines/play-xstate/functions/formatPlayRouteTransitions.md)
243
+
244
+ Crawls machine state configs looking for states with `meta.route` and auto-generates `play.route` transition handlers at the root machine level. Each generated transition: targets the matching state, guards on `event.to === "#stateId"`, and assigns `event.params` and `event.query` to context. Returns the same config type `T` — directly usable by `setup().createMachine()`.
245
+
246
+ ---
247
+
248
+ ## Directory Structure Rationale
249
+
250
+ ```
251
+ /workspace/
252
+ ├── packages/ # All npm workspace packages
253
+ │ ├── shared/ # Shared tooling configs (tsconfig, oxlint, oxfmt, vitest setup)
254
+ │ │ └── config/ # Not a runtime package — devDependency only
255
+ │ │
256
+ │ ├── play/ # Layer 0: Protocol contracts
257
+ │ │ └── src/ # PlayEvent, PlayError, NonNullableError, assertNonNullable
258
+ │ │
259
+ │ ├── play-signals/ # Layer 0: TC39 Signals isolation layer
260
+ │ │ └── src/ # Re-exports signal-polyfill; watchSignal utility
261
+ │ │
262
+ │ ├── play-actor/ # Layer 1: Abstract actor + capability interfaces
263
+ │ │ └── src/ # AbstractActor, Routable, Viewable, PlaySpec, typedSpec
264
+ │ │
265
+ │ ├── play-xstate/ # Layer 2: XState v5 adapter
266
+ │ │ └── src/
267
+ │ │ ├── player-actor.ts # PlayerActor — concrete actor
268
+ │ │ ├── define-player.ts # definePlayer factory
269
+ │ │ ├── guards/ # composeGuards, composeGuardsOr, negateGuard, hasContext...
270
+ │ │ ├── routing/ # deriveRoute, buildRouteUrl, formatPlayRouteTransitions
271
+ │ │ └── signals/ # StateSignalManager (XState → TC39 Signal bridge)
272
+ │ │
273
+ │ ├── play-router/ # Layer 2: Route extraction, bidirectional mapping, bridge base
274
+ │ │ └── src/
275
+ │ │ ├── router-bridge-base.ts # RouterBridgeBase (Template Method for all adapters)
276
+ │ │ ├── extract-routes.ts # extractMachineRoutes → RouteTree
277
+ │ │ ├── base-route-map.ts # RouteMap (bidirectional stateId ↔ path)
278
+ │ │ ├── create-route-map.ts # createRouteMap factory (URLPattern-based)
279
+ │ │ ├── router-sync.ts # buildPlayRouteEvent, extractRouteParams, sanitizePathname
280
+ │ │ └── types.ts # PlayRouteEvent, RouterBridge, RouteTree, WindowLike...
281
+ │ │
282
+ │ ├── play-react/ # Layer 2: React view renderer
283
+ │ ├── play-vue/ # Layer 2: Vue 3 view renderer
284
+ │ ├── play-solid/ # Layer 2: SolidJS view renderer
285
+ │ ├── play-svelte/ # Layer 2: Svelte 5 view renderer
286
+ │ ├── play-dom/ # Layer 2: Vanilla DOM renderer
287
+ │ │
288
+ │ ├── play-tanstack-react-router/ # Router adapter: TanStack Router (React)
289
+ │ ├── play-react-router/ # Router adapter: React Router v7
290
+ │ ├── play-vue-router/ # Router adapter: Vue Router
291
+ │ ├── play-solid-router/ # Router adapter: SolidJS Router
292
+ │ ├── play-tanstack-solid-router/ # Router adapter: TanStack Router (SolidJS)
293
+ │ ├── play-sveltekit-router/ # Router adapter: SvelteKit
294
+ │ ├── play-svelte-spa-router/ # Router adapter: Svelte SPA Router
295
+ │ ├── play-dom-router/ # Router adapter: Vanilla DOM (History API)
296
+ │ │
297
+ │ └── docs/ # @xmachines/docs — API docs + RFCs
298
+ │ └── rfc/ # Living RFC documents (play.md, streams.md, etc.)
299
+
300
+ ├── tsconfig.json # Root TypeScript project reference coordinator
301
+ │ # Lists all packages in build-order (leaves first)
302
+ │ # Does not compile anything itself
303
+ └── package.json # npm workspaces root
304
+ ```
305
+
306
+ ---
307
+
308
+ ## TypeScript Build Graph
309
+
310
+ The monorepo uses **TypeScript project references** (`"composite": true` per package) for a correct, incremental, dependency-ordered build. The root `tsconfig.json` lists all packages in layer order — leaves first, dependents last. `tsc --build` at the root resolves the full dependency graph automatically.
311
+
312
+ **Build layer order (as declared in `tsconfig.json`):**
313
+
314
+ ```mermaid
315
+ flowchart LR
316
+ subgraph L0["Layer 0 — no internal deps"]
317
+ ps[play-signals]
318
+ p[play]
319
+ d[docs]
320
+ end
321
+ subgraph L1["Layer 1 — depends on L0"]
322
+ pa[play-actor]
323
+ end
324
+ subgraph L2["Layer 2 — depends on L0 + L1"]
325
+ pr[play-router]
326
+ pdr[play-dom-router]
327
+ psk[play-sveltekit-router]
328
+ px[play-xstate]
329
+ prea[play-react]
330
+ pv[play-vue]
331
+ pso[play-solid]
332
+ psv[play-svelte]
333
+ pdo[play-dom]
334
+ ptsr[play-tanstack-react-router]
335
+ pvr[play-vue-router]
336
+ psor[play-solid-router]
337
+ pssr[play-svelte-spa-router]
338
+ ptss[play-tanstack-solid-router]
339
+ end
340
+ subgraph L3["Layer 3 — examples / demos"]
341
+ ex[play-react-router\nplay-*/examples/demo]
342
+ end
343
+
344
+ L0 --> L1 --> L2 --> L3
345
+ ```
346
+
347
+ With `declarationMap: true` in the base tsconfig (from `@xmachines/shared/tsconfig`), IDE "Go to Definition" jumps to TypeScript source files rather than compiled `.d.ts` files, and refactoring works correctly across package boundaries without requiring a build step.
348
+
349
+ ---
350
+
351
+ ## View Renderer Pattern
352
+
353
+ All five view renderer packages follow an identical structural pattern:
354
+
355
+ | Component | Role |
356
+ | ---------------- | -------------------------------------------------------------------------------------- |
357
+ | `ActorProvider` | Subscribes to `actor.currentView` signal; owns signal lifecycle; provides view context |
358
+ | `PlayUIProvider` | Convenience wrapper combining `ActorProvider` + framework's `JSONUIProvider` |
359
+ | `PlayRenderer` | Zero-prop leaf component; reads from context; delegates to `@json-render/*` `Renderer` |
360
+ | `useActor()` | Hook/composable for accessing the raw actor in consuming components |
361
+
362
+ **Framework-specific signal bridging:**
363
+
364
+ | Package | Signal → Render mechanism |
365
+ | ------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
366
+ | [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | `useSignalEffect` → `useReducer` force-update |
367
+ | [`@xmachines/play-vue`](../api/@xmachines/play-vue/README.md) | Vue reactivity bridge via `watchEffect` equivalent |
368
+ | [`@xmachines/play-solid`](../api/@xmachines/play-solid/README.md) | SolidJS native reactive integration |
369
+ | [`@xmachines/play-svelte`](../api/@xmachines/play-svelte/README.md) | Svelte 5 runes (`$effect`) via `actor-context.svelte.ts` |
370
+ | [`@xmachines/play-dom`](../api/@xmachines/play-dom/README.md) | Manual DOM updates via [`connectRenderer`](../api/@xmachines/play-dom/functions/connectRenderer.md) / [`createPlayUI`](../api/@xmachines/play-dom/functions/createPlayUI.md) |
371
+
372
+ Per-view component state is managed by `@xstate/store`: a fresh store atom is created per [`PlaySpec`](../api/@xmachines/play-actor/interfaces/PlaySpec.md) transition (uncontrolled mode), or an external `store` prop is passed via `ActorProvider`/`PlayUIProvider` (controlled mode).
373
+
374
+ ---
375
+
376
+ ## Router Adapter Pattern
377
+
378
+ All eight router adapter packages follow the Template Method pattern via [`RouterBridgeBase`](../api/@xmachines/play-router/classes/RouterBridgeBase.md). Each adapter implements exactly three abstract methods:
379
+
380
+ ```typescript
381
+ // How to tell the framework router to change URL
382
+ protected abstract navigateRouter(path: string): void;
383
+
384
+ // How to subscribe to router location change events
385
+ protected abstract watchRouterChanges(): void;
386
+
387
+ // How to unsubscribe from router location change events
388
+ protected abstract unwatchRouterChanges(): void;
389
+ ```
390
+
391
+ | Package | Bridge class |
392
+ | ------------------------------------------------------------------------------------------------- | -------------------------------------- |
393
+ | [`@xmachines/play-tanstack-react-router`](../api/@xmachines/play-tanstack-react-router/README.md) | `TanStackReactRouterBridge` |
394
+ | [`@xmachines/play-react-router`](../api/@xmachines/play-react-router/README.md) | `ReactRouterBridge` |
395
+ | [`@xmachines/play-vue-router`](../api/@xmachines/play-vue-router/README.md) | `VueRouterBridge` |
396
+ | [`@xmachines/play-solid-router`](../api/@xmachines/play-solid-router/README.md) | `SolidRouterBridge` |
397
+ | [`@xmachines/play-tanstack-solid-router`](../api/@xmachines/play-tanstack-solid-router/README.md) | `SolidRouterBridge` (TanStack variant) |
398
+ | [`@xmachines/play-sveltekit-router`](../api/@xmachines/play-sveltekit-router/README.md) | `SvelteKitRouterBridge` |
399
+ | [`@xmachines/play-svelte-spa-router`](../api/@xmachines/play-svelte-spa-router/README.md) | `SvelteSpaRouterBridge` |
400
+ | [`@xmachines/play-dom-router`](../api/@xmachines/play-dom-router/README.md) | `DomRouterBridge` |
401
+
402
+ Each adapter also exports a framework-integrated provider component (e.g. `PlayRouterProvider`) and a `createRouteMapFrom*` factory appropriate for its router's route definition format.
403
+
404
+ ---
405
+
406
+ ## Error Handling
407
+
408
+ All `@xmachines/*` errors extend [`PlayError`](../api/@xmachines/play/classes/PlayError.md) and carry two stable fields:
409
+
410
+ - `scope` — the class or module that threw (e.g. `"RouterBridgeBase"`)
411
+ - `code` — a stable machine-readable identifier (e.g. `"PLAY_ROUTER_SYNC_FAILED"`)
412
+
413
+ **Error hierarchy:**
414
+
415
+ ```mermaid
416
+ flowchart TD
417
+ PE["PlayError\n@xmachines/play"]
418
+ PE --> NNE["NonNullableError\nPLAY_NON_NULLABLE"]
419
+ PE --> RSE["RouterSyncError\nPLAY_ROUTER_SYNC_FAILED"]
420
+ PE --> UPE["URLPatternUnavailableError\nPLAY_URL_PATTERN_UNAVAILABLE"]
421
+ PE --> DBE["DuplicateBridgeError\nPLAY_DUPLICATE_BRIDGE"]
422
+ PE --> IEE["InvalidEventError\nPLAY_INVALID_EVENT"]
423
+ PE --> IME["InvalidMachineError\nPLAY_INVALID_MACHINE"]
424
+ PE --> MRP["MissingRouteParamError\nPLAY_MISSING_ROUTE_PARAM"]
425
+ PE --> MSI["MissingStateIdError\nPLAY_MISSING_STATE_ID"]
426
+ ```
427
+
428
+ Package-specific errors are exported from `./errors` subpath imports:
429
+
430
+ ```typescript
431
+ import { PlayError } from "@xmachines/play";
432
+ import { RouterSyncError } from "@xmachines/play-router/errors";
433
+ import { InvalidEventError } from "@xmachines/play-xstate/errors";
434
+ ```
435
+
436
+ ---
437
+
438
+ ## Cross-Cutting Concerns
439
+
440
+ **Circular update prevention:** `lastSyncedPath` in [`RouterBridgeBase`](../api/@xmachines/play-router/classes/RouterBridgeBase.md) provides echo suppression for the actor→router direction; `isProcessingNavigation` flag guards against re-entrant guard-redirect loops in `syncActorFromRouter`. `needsEnqueue` in [`watchSignal`](../api/@xmachines/play-signals/functions/watchSignal.md) deduplicates rapid synchronous signal changes via microtask batching.
441
+
442
+ **SSR / test injection:** [`WindowLike`](../api/@xmachines/play-router/interfaces/WindowLike.md) and [`LocationLike`](../api/@xmachines/play-router/interfaces/LocationLike.md) structural interfaces in [`@xmachines/play-router`](../api/@xmachines/play-router/README.md) allow injecting mock objects in router adapters, enabling testing without a real browser environment.
443
+
444
+ **Logging:** None built-in. [`PlayerOptions`](../api/@xmachines/play-xstate/interfaces/PlayerOptions.md) exposes lifecycle hooks — `onStart`, `onStop`, `onTransition`, `onStateChange`, `onError` — as observability extension points.
445
+
446
+ **Authentication:** Not in scope. Authentication is enforced by XState machine guards. Infrastructure proposes navigation via `play.route` events; guards decide whether the transition is allowed from the current state.
447
+
448
+ **TC39 Signal isolation:** All signal imports go through [`@xmachines/play-signals`](../api/@xmachines/play-signals/README.md), which re-exports the `signal-polyfill` reference implementation. This isolates the codebase from Stage-1 API churn — a polyfill version upgrade or API change requires editing only one package.
449
+
450
+ ---
451
+
452
+ ## Application Bootstrap (typical React example)
453
+
454
+ ```typescript
455
+ import { setup } from "xstate";
456
+ import { definePlayer, formatPlayRouteTransitions } from "@xmachines/play-xstate";
457
+ import { extractMachineRoutes } from "@xmachines/play-router";
458
+ import { createRouteMapFromTree, PlayRouterProvider } from "@xmachines/play-tanstack-react-router";
459
+ import { PlayUIProvider, PlayRenderer, defineRegistry } from "@xmachines/play-react";
460
+
461
+ // 1. Define machine — meta.route declares virtual routes; meta.view declares UI specs
462
+ const machineConfig = formatPlayRouteTransitions({
463
+ id: "app",
464
+ initial: "home",
465
+ context: { params: {}, query: {} },
466
+ states: {
467
+ home: { id: "home", meta: { route: "/", view: { root: "home", elements: { home: { type: "HomePage", props: {}, children: [] } } } } },
468
+ profile: { id: "profile", meta: { route: "/profile/:userId", view: { root: "profile", elements: { profile: { type: "ProfilePage", props: { userId: undefined }, children: [] } } } } },
469
+ },
470
+ });
471
+
472
+ const machine = setup({}).createMachine(machineConfig);
473
+
474
+ // 2. Build route map from machine definition (done once at startup)
475
+ const routeTree = extractMachineRoutes(machine);
476
+ const routeMap = createRouteMapFromTree(routeTree);
477
+
478
+ // 3. Create player factory and start actor
479
+ const createPlayer = definePlayer({ machine });
480
+ const actor = createPlayer();
481
+ actor.start();
482
+
483
+ // 4. Define component registry for json-render
484
+ const registryResult = defineRegistry({ /* components */ });
485
+
486
+ // 5. Render — framework providers wire actor → router → view
487
+ function App() {
488
+ return (
489
+ <PlayRouterProvider actor={actor} router={router} routeMap={routeMap}>
490
+ <PlayUIProvider actor={actor} registryResult={registryResult}>
491
+ <PlayRenderer />
492
+ </PlayUIProvider>
493
+ </PlayRouterProvider>
494
+ );
495
+ }
496
+ ```
497
+
498
+ ---
499
+
500
+ _For the living RFC specification, see [`rfc/play.md`](../rfc/play.md)._