@xmachines/docs 1.0.0-beta.31 → 1.0.0-beta.33

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 (289) hide show
  1. package/api/@xmachines/play/README.md +5 -0
  2. package/api/@xmachines/play/classes/NonNullableError.md +189 -0
  3. package/api/@xmachines/play/classes/PlayError.md +9 -4
  4. package/api/@xmachines/play/functions/assertNonNullable.md +56 -0
  5. package/api/@xmachines/play/type-aliases/PlayEvent.md +2 -2
  6. package/api/@xmachines/play-actor/README.md +9 -9
  7. package/api/@xmachines/play-actor/classes/AbstractActor.md +3 -3
  8. package/api/@xmachines/play-actor/functions/typedSpec.md +1 -1
  9. package/api/@xmachines/play-actor/interfaces/PlaySpec.md +2 -2
  10. package/api/@xmachines/play-actor/interfaces/Routable.md +3 -3
  11. package/api/@xmachines/play-actor/interfaces/ViewMetadata.md +3 -3
  12. package/api/@xmachines/play-actor/interfaces/Viewable.md +2 -2
  13. package/api/@xmachines/play-dom/README.md +228 -39
  14. package/api/@xmachines/play-dom/classes/PlayRenderer.md +39 -26
  15. package/api/@xmachines/play-dom/functions/connectRenderer.md +39 -20
  16. package/api/@xmachines/play-dom/functions/createRenderer.md +43 -0
  17. package/api/@xmachines/play-dom/functions/defineRegistry.md +5 -5
  18. package/api/@xmachines/play-dom/functions/renderSpec.md +43 -9
  19. package/api/@xmachines/play-dom/interfaces/ComponentContext.md +7 -7
  20. package/api/@xmachines/play-dom/interfaces/ConnectRendererOptions.md +11 -9
  21. package/api/@xmachines/play-dom/interfaces/DefineRegistryResult.md +7 -7
  22. package/api/@xmachines/play-dom/interfaces/DomRenderContext.md +14 -9
  23. package/api/@xmachines/play-dom/interfaces/EventHandle.md +4 -4
  24. package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +7 -5
  25. package/api/@xmachines/play-dom/type-aliases/ActionFn.md +23 -7
  26. package/api/@xmachines/play-dom/type-aliases/Actions.md +1 -1
  27. package/api/@xmachines/play-dom/type-aliases/BaseComponentProps.md +114 -0
  28. package/api/@xmachines/play-dom/type-aliases/CatalogHasActions.md +25 -0
  29. package/api/@xmachines/play-dom/type-aliases/ComponentFn.md +1 -1
  30. package/api/@xmachines/play-dom/type-aliases/ComponentRegistry.md +1 -1
  31. package/api/@xmachines/play-dom/type-aliases/DefineRegistryOptions.md +39 -0
  32. package/api/@xmachines/play-dom/type-aliases/DomComponentRenderer.md +1 -1
  33. package/api/@xmachines/play-dom/type-aliases/DomRegistry.md +1 -1
  34. package/api/@xmachines/play-dom/type-aliases/DomSchema.md +1 -1
  35. package/api/@xmachines/play-dom/type-aliases/SetState.md +30 -0
  36. package/api/@xmachines/play-dom/variables/schema.md +1 -1
  37. package/api/@xmachines/play-dom-router/README.md +166 -59
  38. package/api/@xmachines/play-dom-router/functions/connectRouter.md +1 -1
  39. package/api/@xmachines/play-dom-router/functions/createBrowserHistory.md +1 -1
  40. package/api/@xmachines/play-dom-router/functions/createRouteMap.md +1 -1
  41. package/api/@xmachines/play-dom-router/functions/createRouter.md +1 -1
  42. package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +14 -14
  43. package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +14 -14
  44. package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +4 -4
  45. package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +6 -6
  46. package/api/@xmachines/play-dom-router/interfaces/RouteMap.md +3 -3
  47. package/api/@xmachines/play-dom-router/interfaces/RouteMapLike.md +3 -3
  48. package/api/@xmachines/play-dom-router/interfaces/RouteMapping.md +3 -3
  49. package/api/@xmachines/play-dom-router/interfaces/RouterBridge.md +3 -3
  50. package/api/@xmachines/play-dom-router/interfaces/VanillaRouter.md +4 -4
  51. package/api/@xmachines/play-dom-router/type-aliases/RoutableActor.md +1 -1
  52. package/api/@xmachines/play-react/README.md +1 -0
  53. package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +5 -5
  54. package/api/@xmachines/play-react/functions/useActor.md +1 -1
  55. package/api/@xmachines/play-react/functions/useSignalEffect.md +1 -1
  56. package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +4 -4
  57. package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +3 -3
  58. package/api/@xmachines/play-react/interfaces/PlayRendererProps.md +9 -8
  59. package/api/@xmachines/play-react/type-aliases/PlayActor.md +1 -1
  60. package/api/@xmachines/play-react/type-aliases/RenderErrorHandler.md +22 -0
  61. package/api/@xmachines/play-react/variables/PlayRenderer.md +1 -1
  62. package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +23 -23
  63. package/api/@xmachines/play-react-router/classes/RouteMap.md +4 -4
  64. package/api/@xmachines/play-react-router/functions/PlayRouterProvider.md +1 -1
  65. package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +1 -1
  66. package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +6 -6
  67. package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +5 -5
  68. package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +3 -3
  69. package/api/@xmachines/play-react-router/interfaces/RouterBridge.md +3 -3
  70. package/api/@xmachines/play-router/README.md +1 -1
  71. package/api/@xmachines/play-router/classes/BaseRouteMap.md +4 -4
  72. package/api/@xmachines/play-router/classes/RouterBridgeBase.md +23 -23
  73. package/api/@xmachines/play-router/functions/buildPlayRouteEvent.md +1 -1
  74. package/api/@xmachines/play-router/functions/buildRouteTree.md +1 -1
  75. package/api/@xmachines/play-router/functions/createRouteMap.md +1 -1
  76. package/api/@xmachines/play-router/functions/createRouteMapFromMachine.md +1 -1
  77. package/api/@xmachines/play-router/functions/createRouteMapFromTree.md +1 -1
  78. package/api/@xmachines/play-router/functions/detectDuplicateRoutes.md +1 -1
  79. package/api/@xmachines/play-router/functions/extractMachineRoutes.md +1 -1
  80. package/api/@xmachines/play-router/functions/extractQuery.md +1 -1
  81. package/api/@xmachines/play-router/functions/extractRouteParams.md +1 -1
  82. package/api/@xmachines/play-router/functions/findRouteById.md +1 -1
  83. package/api/@xmachines/play-router/functions/findRouteByPath.md +1 -1
  84. package/api/@xmachines/play-router/functions/getNavigableRoutes.md +1 -1
  85. package/api/@xmachines/play-router/functions/getRoutableRoutes.md +1 -1
  86. package/api/@xmachines/play-router/functions/getTransitionReachableRoutes.md +1 -1
  87. package/api/@xmachines/play-router/functions/isRouteReachable.md +1 -1
  88. package/api/@xmachines/play-router/functions/machineToGraph.md +1 -1
  89. package/api/@xmachines/play-router/functions/routeExists.md +1 -1
  90. package/api/@xmachines/play-router/functions/sanitizePathname.md +1 -1
  91. package/api/@xmachines/play-router/functions/validateRouteFormat.md +1 -1
  92. package/api/@xmachines/play-router/functions/validateStateExists.md +1 -1
  93. package/api/@xmachines/play-router/interfaces/BuildPlayRouteEventOptions.md +4 -4
  94. package/api/@xmachines/play-router/interfaces/LocationLike.md +3 -3
  95. package/api/@xmachines/play-router/interfaces/MachineEdgeData.md +3 -3
  96. package/api/@xmachines/play-router/interfaces/MachineNodeData.md +5 -5
  97. package/api/@xmachines/play-router/interfaces/PlayRouteEvent.md +6 -6
  98. package/api/@xmachines/play-router/interfaces/RouteInfo.md +8 -8
  99. package/api/@xmachines/play-router/interfaces/RouteMap.md +4 -4
  100. package/api/@xmachines/play-router/interfaces/RouteMapping.md +3 -3
  101. package/api/@xmachines/play-router/interfaces/RouteMatch.md +3 -3
  102. package/api/@xmachines/play-router/interfaces/RouteNode.md +10 -10
  103. package/api/@xmachines/play-router/interfaces/RouteObject.md +2 -2
  104. package/api/@xmachines/play-router/interfaces/RouteTree.md +5 -5
  105. package/api/@xmachines/play-router/interfaces/RouteWatcherHandle.md +3 -3
  106. package/api/@xmachines/play-router/interfaces/RouterBridge.md +3 -3
  107. package/api/@xmachines/play-router/interfaces/WindowLike.md +3 -3
  108. package/api/@xmachines/play-router/type-aliases/MachineGraph.md +1 -1
  109. package/api/@xmachines/play-router/type-aliases/RouteMetadata.md +1 -1
  110. package/api/@xmachines/play-signals/functions/watchSignal.md +1 -1
  111. package/api/@xmachines/play-signals/interfaces/ComputedOptions.md +2 -2
  112. package/api/@xmachines/play-signals/interfaces/SignalComputed.md +2 -2
  113. package/api/@xmachines/play-signals/interfaces/SignalOptions.md +2 -2
  114. package/api/@xmachines/play-signals/interfaces/SignalState.md +3 -3
  115. package/api/@xmachines/play-signals/interfaces/SignalWatcher.md +4 -4
  116. package/api/@xmachines/play-signals/type-aliases/WatcherNotify.md +1 -1
  117. package/api/@xmachines/play-solid/README.md +1 -0
  118. package/api/@xmachines/play-solid/functions/useActor.md +1 -1
  119. package/api/@xmachines/play-solid/interfaces/PlayRendererProps.md +9 -8
  120. package/api/@xmachines/play-solid/type-aliases/PlayActor.md +1 -1
  121. package/api/@xmachines/play-solid/type-aliases/RenderErrorHandler.md +22 -0
  122. package/api/@xmachines/play-solid/variables/PlayRenderer.md +1 -1
  123. package/api/@xmachines/play-solid-router/README.md +2 -2
  124. package/api/@xmachines/play-solid-router/classes/RouteMap.md +4 -4
  125. package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +24 -24
  126. package/api/@xmachines/play-solid-router/functions/PlayRouterProvider.md +28 -1
  127. package/api/@xmachines/play-solid-router/functions/createRouteMap.md +1 -1
  128. package/api/@xmachines/play-solid-router/interfaces/AbstractActor.md +3 -3
  129. package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +6 -6
  130. package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +7 -7
  131. package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +3 -3
  132. package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +3 -3
  133. package/api/@xmachines/play-solid-router/type-aliases/RoutableActor.md +1 -1
  134. package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +4 -4
  135. package/api/@xmachines/play-svelte/README.md +52 -12
  136. package/api/@xmachines/play-svelte/functions/defineRegistry.md +12 -35
  137. package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +24 -0
  138. package/api/@xmachines/play-svelte/interfaces/PlayRendererProps.md +9 -8
  139. package/api/@xmachines/play-svelte/type-aliases/ActionFn.md +30 -0
  140. package/api/@xmachines/play-svelte/type-aliases/Actions.md +17 -0
  141. package/api/@xmachines/play-svelte/type-aliases/RenderErrorHandler.md +23 -0
  142. package/api/@xmachines/play-svelte/type-aliases/SetState.md +21 -0
  143. package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +4 -4
  144. package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +1 -1
  145. package/api/@xmachines/play-svelte-spa-router/functions/createRouteMap.md +1 -1
  146. package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +4 -4
  147. package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +6 -6
  148. package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +3 -3
  149. package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +3 -3
  150. package/api/@xmachines/play-svelte-spa-router/interfaces/WindowLike.md +3 -3
  151. package/api/@xmachines/play-svelte-spa-router/type-aliases/RoutableActor.md +1 -1
  152. package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +4 -4
  153. package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +1 -1
  154. package/api/@xmachines/play-sveltekit-router/functions/createRouteMap.md +1 -1
  155. package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +4 -4
  156. package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +3 -3
  157. package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +6 -6
  158. package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +3 -3
  159. package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +3 -3
  160. package/api/@xmachines/play-sveltekit-router/type-aliases/RoutableActor.md +1 -1
  161. package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +4 -4
  162. package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +23 -23
  163. package/api/@xmachines/play-tanstack-react-router/functions/PlayRouterProvider.md +8 -1
  164. package/api/@xmachines/play-tanstack-react-router/functions/createRouteMap.md +1 -1
  165. package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +1 -1
  166. package/api/@xmachines/play-tanstack-react-router/functions/extractMachineRoutes.md +1 -1
  167. package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +6 -6
  168. package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +7 -7
  169. package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +3 -3
  170. package/api/@xmachines/play-tanstack-react-router/interfaces/RouteNavigateEvent.md +3 -3
  171. package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +3 -3
  172. package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterInstance.md +1 -1
  173. package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterLike.md +4 -4
  174. package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +4 -4
  175. package/api/@xmachines/play-tanstack-solid-router/classes/SolidRouterBridge.md +24 -24
  176. package/api/@xmachines/play-tanstack-solid-router/functions/PlayRouterProvider.md +9 -1
  177. package/api/@xmachines/play-tanstack-solid-router/functions/createRouteMap.md +1 -1
  178. package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +6 -6
  179. package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +5 -5
  180. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +3 -3
  181. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +3 -3
  182. package/api/@xmachines/play-tanstack-solid-router/type-aliases/RoutableActor.md +1 -1
  183. package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterInstance.md +1 -1
  184. package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterLike.md +3 -3
  185. package/api/@xmachines/play-vue/README.md +1 -0
  186. package/api/@xmachines/play-vue/functions/defineRegistry.md +1 -1
  187. package/api/@xmachines/play-vue/functions/useActor.md +1 -1
  188. package/api/@xmachines/play-vue/interfaces/PlayRendererProps.md +7 -6
  189. package/api/@xmachines/play-vue/type-aliases/ComponentEntry.md +1 -1
  190. package/api/@xmachines/play-vue/type-aliases/ComponentsMap.md +1 -1
  191. package/api/@xmachines/play-vue/type-aliases/DefineRegistryOptions.md +2 -2
  192. package/api/@xmachines/play-vue/type-aliases/PlayActor.md +1 -1
  193. package/api/@xmachines/play-vue/type-aliases/RenderErrorHandler.md +22 -0
  194. package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
  195. package/api/@xmachines/play-vue-router/README.md +3 -3
  196. package/api/@xmachines/play-vue-router/classes/RouteMap.md +4 -4
  197. package/api/@xmachines/play-vue-router/classes/VueBaseRouteMap.md +4 -4
  198. package/api/@xmachines/play-vue-router/classes/VueRouterBridge.md +39 -26
  199. package/api/@xmachines/play-vue-router/functions/createRouteMap.md +1 -1
  200. package/api/@xmachines/play-vue-router/interfaces/PlayRouteEvent.md +6 -6
  201. package/api/@xmachines/play-vue-router/interfaces/RouteMapping.md +3 -3
  202. package/api/@xmachines/play-vue-router/interfaces/RouterBridge.md +3 -3
  203. package/api/@xmachines/play-vue-router/type-aliases/RoutableActor.md +1 -1
  204. package/api/@xmachines/play-vue-router/variables/PlayRouterProvider.md +1 -1
  205. package/api/@xmachines/play-xstate/classes/PlayerActor.md +12 -12
  206. package/api/@xmachines/play-xstate/functions/buildRouteUrl.md +1 -1
  207. package/api/@xmachines/play-xstate/functions/composeGuards.md +1 -1
  208. package/api/@xmachines/play-xstate/functions/composeGuardsOr.md +1 -1
  209. package/api/@xmachines/play-xstate/functions/contextFieldMatches.md +1 -1
  210. package/api/@xmachines/play-xstate/functions/definePlayer.md +1 -1
  211. package/api/@xmachines/play-xstate/functions/deriveRoute.md +1 -1
  212. package/api/@xmachines/play-xstate/functions/eventMatches.md +1 -1
  213. package/api/@xmachines/play-xstate/functions/formatPlayRouteTransitions.md +1 -1
  214. package/api/@xmachines/play-xstate/functions/hasContext.md +1 -1
  215. package/api/@xmachines/play-xstate/functions/isAbsoluteRoute.md +1 -1
  216. package/api/@xmachines/play-xstate/functions/negateGuard.md +1 -1
  217. package/api/@xmachines/play-xstate/interfaces/PlayerConfig.md +3 -3
  218. package/api/@xmachines/play-xstate/interfaces/PlayerFactoryResumeOptions.md +2 -2
  219. package/api/@xmachines/play-xstate/interfaces/PlayerOptions.md +6 -6
  220. package/api/@xmachines/play-xstate/interfaces/RouteContext.md +5 -5
  221. package/api/@xmachines/play-xstate/type-aliases/ComposedGuard.md +1 -1
  222. package/api/@xmachines/play-xstate/type-aliases/Guard.md +1 -1
  223. package/api/@xmachines/play-xstate/type-aliases/GuardArray.md +1 -1
  224. package/api/@xmachines/play-xstate/type-aliases/PlayerFactory.md +1 -1
  225. package/api/@xmachines/play-xstate/type-aliases/RouteMachineConfig.md +4 -4
  226. package/api/@xmachines/play-xstate/type-aliases/RouteStateNode.md +4 -4
  227. package/api/@xmachines/shared/README.md +47 -47
  228. package/api/@xmachines/shared/functions/defineXmVitestConfig.md +1 -1
  229. package/api/@xmachines/shared/functions/xmAliases.md +1 -1
  230. package/api/_media/README.md +321 -0
  231. package/examples/@xmachines/play-dom-demo/functions/createNavBar.md +1 -1
  232. package/examples/@xmachines/play-dom-demo/functions/initShell.md +1 -1
  233. package/examples/@xmachines/play-dom-demo/type-aliases/AuthCatalog.md +1 -1
  234. package/examples/@xmachines/play-dom-demo/variables/About.md +1 -1
  235. package/examples/@xmachines/play-dom-demo/variables/Contact.md +1 -1
  236. package/examples/@xmachines/play-dom-demo/variables/Dashboard.md +1 -1
  237. package/examples/@xmachines/play-dom-demo/variables/Home.md +1 -1
  238. package/examples/@xmachines/play-dom-demo/variables/Login.md +1 -1
  239. package/examples/@xmachines/play-dom-demo/variables/NavBarView.md +1 -1
  240. package/examples/@xmachines/play-dom-demo/variables/Navigation.md +1 -1
  241. package/examples/@xmachines/play-dom-demo/variables/Overview.md +1 -1
  242. package/examples/@xmachines/play-dom-demo/variables/Profile.md +1 -1
  243. package/examples/@xmachines/play-dom-demo/variables/Settings.md +1 -1
  244. package/examples/@xmachines/play-dom-demo/variables/Stats.md +1 -1
  245. package/examples/@xmachines/play-dom-demo/variables/authCatalog.md +1 -1
  246. package/examples/@xmachines/play-react-demo/functions/App.md +1 -1
  247. package/examples/@xmachines/play-react-demo/type-aliases/AuthCatalog.md +1 -1
  248. package/examples/@xmachines/play-react-demo/variables/About.md +1 -1
  249. package/examples/@xmachines/play-react-demo/variables/Contact.md +1 -1
  250. package/examples/@xmachines/play-react-demo/variables/Dashboard.md +1 -1
  251. package/examples/@xmachines/play-react-demo/variables/DebugPanel.md +1 -1
  252. package/examples/@xmachines/play-react-demo/variables/Home.md +1 -1
  253. package/examples/@xmachines/play-react-demo/variables/Login.md +1 -1
  254. package/examples/@xmachines/play-react-demo/variables/NavBar.md +1 -1
  255. package/examples/@xmachines/play-react-demo/variables/NavBarView.md +1 -1
  256. package/examples/@xmachines/play-react-demo/variables/Navigation.md +1 -1
  257. package/examples/@xmachines/play-react-demo/variables/Overview.md +1 -1
  258. package/examples/@xmachines/play-react-demo/variables/Profile.md +1 -1
  259. package/examples/@xmachines/play-react-demo/variables/Settings.md +1 -1
  260. package/examples/@xmachines/play-react-demo/variables/Shell.md +1 -1
  261. package/examples/@xmachines/play-react-demo/variables/Stats.md +1 -1
  262. package/examples/@xmachines/play-react-demo/variables/authCatalog.md +1 -1
  263. package/examples/@xmachines/play-react-router-demo/README.md +1 -3
  264. package/examples/@xmachines/play-solid-demo/functions/App.md +1 -1
  265. package/examples/@xmachines/play-solid-demo/type-aliases/AuthCatalog.md +1 -1
  266. package/examples/@xmachines/play-solid-demo/variables/About.md +1 -1
  267. package/examples/@xmachines/play-solid-demo/variables/Contact.md +1 -1
  268. package/examples/@xmachines/play-solid-demo/variables/Dashboard.md +1 -1
  269. package/examples/@xmachines/play-solid-demo/variables/DebugPanel.md +1 -1
  270. package/examples/@xmachines/play-solid-demo/variables/Home.md +1 -1
  271. package/examples/@xmachines/play-solid-demo/variables/Login.md +1 -1
  272. package/examples/@xmachines/play-solid-demo/variables/NavBar.md +1 -1
  273. package/examples/@xmachines/play-solid-demo/variables/NavBarView.md +1 -1
  274. package/examples/@xmachines/play-solid-demo/variables/Navigation.md +1 -1
  275. package/examples/@xmachines/play-solid-demo/variables/Overview.md +1 -1
  276. package/examples/@xmachines/play-solid-demo/variables/Profile.md +1 -1
  277. package/examples/@xmachines/play-solid-demo/variables/Settings.md +1 -1
  278. package/examples/@xmachines/play-solid-demo/variables/Shell.md +1 -1
  279. package/examples/@xmachines/play-solid-demo/variables/Stats.md +1 -1
  280. package/examples/@xmachines/play-solid-demo/variables/authCatalog.md +1 -1
  281. package/examples/@xmachines/play-solid-router-demo/README.md +1 -3
  282. package/examples/README.md +2 -2
  283. package/examples/form-validation.md +80 -0
  284. package/examples/routing-patterns.md +9 -19
  285. package/guides/getting-started.md +51 -38
  286. package/guides/installation.md +6 -6
  287. package/package.json +6 -6
  288. package/rfc/play.md +19 -19
  289. package/api/@xmachines/play-dom/interfaces/DefineRegistryOptions.md +0 -23
@@ -4,76 +4,257 @@
4
4
 
5
5
  **Vanilla DOM renderer for XMachines**
6
6
 
7
- `connectRenderer` — a framework-free `PlayRenderer` equivalent that wires an XState v5 actor's `currentView` TC39 Signal to pure DOM rendering via a catalog-typed `DomRegistry`.
7
+ Framework-free view rendering driven by an XState v5 actor's `currentView` TC39 Signal. Implements the same catalog-typed `defineRegistry` / `ComponentFn` / `ActionFn` API surface as `@json-render/react`, `/solid`, `/vue`, and `/svelte`.
8
8
 
9
9
  ## Installation
10
10
 
11
11
  ```bash
12
- npm install @xmachines/play-dom
12
+ npm install @xmachines/play-dom @json-render/core zod
13
13
  ```
14
14
 
15
15
  ## Key Exports
16
16
 
17
- - `connectRenderer({ actor, registry, container, handlers })` — connect actor view signal to DOM
18
- - `defineRegistry(catalog, { components, actions })` — build a catalog-typed `DomRegistry` with real async action handlers
19
- - `schema` DOM schema for use with `defineCatalog` (mirrors `@json-render/react/schema` shape)
20
- - `PlayRenderer` class-based renderer (connect/disconnect lifecycle)
21
- - `ComponentFn<C, K>` catalog-typed DOM component function type
22
- - `ComponentContext<C, K>`context passed to each `ComponentFn` (props, emit, on, children, bindings)
23
- - `renderSpec(spec, store, registry, send, handlers)` pure Spec → DOM renderer
24
-
25
- ## Usage
26
-
27
- ```ts
28
- import { definePlayer } from "@xmachines/play-xstate";
29
- import { connectRenderer, defineRegistry, schema } from "@xmachines/play-dom";
17
+ | Export | Description |
18
+ | --------------------------------------------------- | ------------------------------------------------------------------------------------------- |
19
+ | `createRenderer(catalog, componentMap)` | One-call factory: returns `mount(actor, container, options?) disconnect` |
20
+ | `connectRenderer(options)` | Functional API: connect actor → DOM with full options |
21
+ | `defineRegistry(catalog, { components, actions })` | Build a catalog-typed `DomRegistry` with typed action handlers |
22
+ | `PlayRenderer` | Class-based renderer `connect()` / `disconnect()` lifecycle |
23
+ | `schema` | DOM schema for `defineCatalog` (mirrors `@json-render/react/schema`) |
24
+ | `ComponentFn<C, K>` | Catalog-typed DOM component function type |
25
+ | `ComponentContext<C, K>` | Context passed to each `ComponentFn` — `props`, `on`, `emit`, `children`, `bindings`, `ctx` |
26
+ | `ActionFn<C, K>` | `(params, setState, state) => Promise<void>` — catalog-typed action handler |
27
+ | `SetState` | `(updater: prev => next) => void` — write to the local state store |
28
+ | `BaseComponentProps<P>` | Base type for catalog component prop definitions |
29
+ | `CatalogHasActions<C>` | Conditional type: `true` when catalog declares actions |
30
+ | `renderSpec(spec, store, registry, send, handlers)` | Pure Spec → DOM renderer (advanced use) |
31
+
32
+ ## Quick Start — `createRenderer`
33
+
34
+ The preferred one-call pattern — mirrors all framework renderers:
35
+
36
+ ```typescript
37
+ import { createRenderer, schema } from "@xmachines/play-dom";
30
38
  import { defineCatalog } from "@json-render/core";
31
- import { authCatalogDef, type AuthActor } from "@xmachines/play-actor-shared";
39
+ import { z } from "zod";
32
40
  import type { ComponentFn } from "@xmachines/play-dom";
33
41
 
34
- // 1. Build catalog with DOM schema
35
- const authCatalog = defineCatalog(schema, authCatalogDef);
36
- type AuthCatalog = typeof authCatalog;
42
+ // 1. Define catalog
43
+ const catalog = defineCatalog(schema, {
44
+ components: {
45
+ Home: { props: z.object({ title: z.string() }) },
46
+ Login: { props: z.object({ title: z.string(), username: z.string().optional() }) },
47
+ },
48
+ actions: {
49
+ login: { params: z.object({ username: z.string() }) },
50
+ logout: {},
51
+ },
52
+ });
53
+ type AppCatalog = typeof catalog;
37
54
 
38
- // 2. Implement catalog components
39
- const Home: ComponentFn<AuthCatalog, "Home"> = ({ props }) => {
55
+ // 2. Implement components
56
+ const Home: ComponentFn<AppCatalog, "Home"> = ({ props }) => {
40
57
  const el = document.createElement("section");
41
58
  el.textContent = props.title;
42
59
  return el;
43
60
  };
44
61
 
45
- // 3. Build registry with real async action handlers
46
- const registryResult = defineRegistry(authCatalog, {
47
- components: { Home /* ... */ },
62
+ const Login: ComponentFn<AppCatalog, "Login"> = ({ props, on }) => {
63
+ const section = document.createElement("section");
64
+ const input = document.createElement("input");
65
+ input.value = props.username ?? "";
66
+ input.addEventListener("input", () => ctx.store.update((s) => ({ ...s, username: input.value })));
67
+
68
+ const button = document.createElement("button");
69
+ button.textContent = "Log In";
70
+ const submit = on("submit");
71
+ button.addEventListener("click", () => submit.emit());
72
+
73
+ section.append(input, button);
74
+ return section;
75
+ };
76
+
77
+ // 3. Create the renderer factory (once, at module level)
78
+ const mount = createRenderer(catalog, { Home, Login });
79
+
80
+ // 4. Mount when actor and container are ready
81
+ const actor = createPlayer()();
82
+ actor.start();
83
+
84
+ const disconnect = mount(actor, document.getElementById("app")!);
85
+
86
+ // Cleanup:
87
+ disconnect();
88
+ ```
89
+
90
+ ## `defineRegistry` — Full Control
91
+
92
+ When you need `registryResult.executeAction()` or want to share the registry with `connectRenderer`:
93
+
94
+ ```typescript
95
+ import { defineRegistry, connectRenderer, schema } from "@xmachines/play-dom";
96
+ import { defineCatalog } from "@json-render/core";
97
+ import { z } from "zod";
98
+
99
+ const catalog = defineCatalog(schema, {
100
+ components: {
101
+ Home: { props: z.object({ title: z.string() }) },
102
+ },
48
103
  actions: {
49
- login: async (params) => {
104
+ login: { params: z.object({ username: z.string() }) },
105
+ logout: {},
106
+ },
107
+ });
108
+
109
+ // Action handlers receive (params, setState, state)
110
+ // - params: resolved from the spec's on.submit.params (e.g. { $state: "/username" })
111
+ // - setState: write to the local state store (e.g. to clear a form)
112
+ // - state: current local state store snapshot
113
+ const registryResult = defineRegistry(catalog, {
114
+ components: {
115
+ Home: ({ props }) => {
116
+ const el = document.createElement("section");
117
+ el.textContent = props.title;
118
+ return el;
119
+ },
120
+ },
121
+ actions: {
122
+ login: async (params, setState) => {
50
123
  if (!params) return;
51
124
  actor.send({ type: "auth.login", username: params.username });
125
+ setState((prev) => ({ ...prev, username: "" })); // clear the form
52
126
  },
53
127
  logout: async () => actor.send({ type: "auth.logout" }),
54
128
  },
55
129
  });
56
130
 
57
- // 4. Resolve handlers and connect
58
- const actor = definePlayer({ machine: authMachine })();
59
- actor.start();
60
-
61
- const handlers = registryResult.handlers(
62
- () => undefined,
63
- () => ({}),
64
- );
65
- const container = document.getElementById("app")!;
66
131
  const disconnect = connectRenderer({
67
132
  actor,
68
133
  registry: registryResult.registry,
69
- container,
70
- handlers,
134
+ registryResult, // wires setState/state from xstate store automatically
135
+ container: document.getElementById("app")!,
71
136
  });
72
137
  ```
73
138
 
139
+ ## Component API
140
+
141
+ ### `ComponentFn<C, K>` — component function signature
142
+
143
+ ```typescript
144
+ const MyCard: ComponentFn<AppCatalog, "Card"> = ({
145
+ props, // catalog-typed props for this component
146
+ children, // Node[] — rendered child nodes
147
+ on, // (eventName) => EventHandle — get emit() for catalog-declared events
148
+ emit, // (eventName) => void — fire an event directly
149
+ bindings, // Record<string, string> — $bindState paths for two-way bindings
150
+ ctx, // DomRenderContext — store, send, handlers, loading, functions
151
+ }) => {
152
+ const el = document.createElement("div");
153
+ el.append(...children);
154
+ return el;
155
+ };
156
+ ```
157
+
158
+ ### Two-way binding with `$bindState`
159
+
160
+ In the view spec:
161
+
162
+ ```json
163
+ { "username": { "$bindState": "/username" } }
164
+ ```
165
+
166
+ In the component:
167
+
168
+ ```typescript
169
+ const Login: ComponentFn<AppCatalog, "Login"> = ({ props, ctx }) => {
170
+ const input = document.createElement("input");
171
+ input.value = props.username ?? "";
172
+ // Write back to the store on user input
173
+ input.addEventListener("input", () => {
174
+ ctx.store.update((s) => ({ ...s, username: input.value }));
175
+ });
176
+ return input;
177
+ };
178
+ ```
179
+
180
+ ### `on()` — event handle
181
+
182
+ ```typescript
183
+ const submit = on("submit"); // EventHandle
184
+ if (submit.bound) {
185
+ button.addEventListener("click", (e) => {
186
+ if (submit.shouldPreventDefault) e.preventDefault();
187
+ submit.emit(); // resolves params from store, calls action handler
188
+ });
189
+ }
190
+ ```
191
+
192
+ ### `ActionFn` — action handler signature
193
+
194
+ ```typescript
195
+ // Full signature — all three params are available
196
+ login: async (params, setState, state) => {
197
+ actor.send({ type: "auth.login", username: params!.username });
198
+ setState(prev => ({ ...prev, username: "" }));
199
+ console.log("previous state was:", state);
200
+ },
201
+
202
+ // Params-only — setState/state can be omitted if unused
203
+ logout: async () => actor.send({ type: "auth.logout" }),
204
+ route: async (params) => actor.send({ type: "play.route", to: params!.to }),
205
+ ```
206
+
207
+ ## Spec Features
208
+
209
+ `renderSpec` / `renderElement` supports these spec directives:
210
+
211
+ | Directive | Description |
212
+ | ------------------------------------------------------ | ------------------------------------------------------------------------------------- |
213
+ | `visible` | Boolean or `{ $state: "/path" }` — hide element when false |
214
+ | `on.submit` / `on.click` | Action binding — `{ action: "login", params: { username: { $state: "/username" } } }` |
215
+ | `repeat: { statePath, key? }` | Render children once per item in the state array at `statePath` |
216
+ | `watch: { "/path": actionBinding }` | Fire action when store path changes after mount |
217
+ | `props.username: { $bindState: "/username" }` | Two-way binding — read from store, write back via `ctx.store.update()` |
218
+ | `props.value: { $state: "/value" }` | Read-only store reference |
219
+ | `props.label: { $computed: "computeFn", args: [...] }` | Computed prop via `functions` map |
220
+
221
+ ## `PlayRenderer` — class API
222
+
223
+ ```typescript
224
+ import { PlayRenderer, defineRegistry } from "@xmachines/play-dom";
225
+
226
+ const { registry, registryResult } = defineRegistry(catalog, { components, actions });
227
+
228
+ const renderer = new PlayRenderer(document.getElementById("app")!, actor, registry, {
229
+ registryResult,
230
+ });
231
+
232
+ renderer.connect(); // starts watching actor.currentView
233
+ renderer.disconnect(); // stops watching, clears container
234
+
235
+ // double-connect is safe — connect() calls disconnect() internally if already connected
236
+ ```
237
+
238
+ ## Options Reference
239
+
240
+ ### `ConnectRendererOptions` / `PlayDomOptions`
241
+
242
+ | Option | Type | Description |
243
+ | ---------------- | ------------------------------- | ----------------------------------------------------------------------------- |
244
+ | `actor` | `AbstractActor & Viewable` | Actor providing `currentView` signal |
245
+ | `registry` | `DomRegistry` | Component renderer map from `defineRegistry` |
246
+ | `registryResult` | `DefineRegistryResult` | Preferred — auto-wires `setState`/`state` from xstate store |
247
+ | `handlers` | `Record<string, ActionHandler>` | Pre-resolved handlers (legacy / advanced) |
248
+ | `container` | `HTMLElement` | DOM element to render into |
249
+ | `fallback` | `HTMLElement \| null` | Shown on initial mount when view is `null` (initial mount only) |
250
+ | `store` | `StateStore` | External store — controlled mode, overrides `spec.state` |
251
+ | `loading` | `boolean` | Streaming mode — suppresses missing-child warnings, exposes `ctx.ctx.loading` |
252
+
74
253
  ## Learn More
75
254
 
76
255
  - [DOM Router adapter `@xmachines/play-dom-router`](../play-dom-router/README.md)
256
+ - [API reference](../../_media/README.md)
257
+ - [Play RFC](../../packages/docs/rfc/play.md)
77
258
 
78
259
  @xmachines/play-dom — Vanilla DOM renderer for XMachines Play architecture.
79
260
 
@@ -81,8 +262,9 @@ Public API split into two layers:
81
262
 
82
263
  **XMachines layer** (this package):
83
264
 
84
- - `PlayRenderer` — connects actor.currentView signalDOM renderer
85
- - `connectRenderer()` — backward-compat functional API
265
+ - `createRenderer()` — one-call factory: returns `mount(actor, container, options?) disconnect`
266
+ - `PlayRenderer` — class-based renderer with `connect()` / `disconnect()` lifecycle
267
+ - `connectRenderer()` — functional API (backward-compat alternative to `PlayRenderer`)
86
268
  - `ConnectRendererOptions`, `PlayDomOptions`
87
269
 
88
270
  **json-render layer** (upstreamable to @json-render/dom):
@@ -96,6 +278,9 @@ Public API split into two layers:
96
278
  - `DomRegistry` — raw registry type
97
279
  - `DomRenderContext` — raw render context
98
280
  - `EventHandle` — event handle returned by on()
281
+ - `SetState` — state updater function passed to ActionFn
282
+ - `CatalogHasActions` — conditional type: true when catalog declares actions
283
+ - `BaseComponentProps` — base props type for catalog component definitions
99
284
 
100
285
  ## Classes
101
286
 
@@ -105,7 +290,6 @@ Public API split into two layers:
105
290
 
106
291
  - [ComponentContext](interfaces/ComponentContext.md)
107
292
  - [ConnectRendererOptions](interfaces/ConnectRendererOptions.md)
108
- - [DefineRegistryOptions](interfaces/DefineRegistryOptions.md)
109
293
  - [DefineRegistryResult](interfaces/DefineRegistryResult.md)
110
294
  - [DomRenderContext](interfaces/DomRenderContext.md)
111
295
  - [EventHandle](interfaces/EventHandle.md)
@@ -115,11 +299,15 @@ Public API split into two layers:
115
299
 
116
300
  - [ActionFn](type-aliases/ActionFn.md)
117
301
  - [Actions](type-aliases/Actions.md)
302
+ - [BaseComponentProps](type-aliases/BaseComponentProps.md)
303
+ - [CatalogHasActions](type-aliases/CatalogHasActions.md)
118
304
  - [ComponentFn](type-aliases/ComponentFn.md)
119
305
  - [ComponentRegistry](type-aliases/ComponentRegistry.md)
306
+ - [DefineRegistryOptions](type-aliases/DefineRegistryOptions.md)
120
307
  - [DomComponentRenderer](type-aliases/DomComponentRenderer.md)
121
308
  - [DomRegistry](type-aliases/DomRegistry.md)
122
309
  - [DomSchema](type-aliases/DomSchema.md)
310
+ - [SetState](type-aliases/SetState.md)
123
311
 
124
312
  ## Variables
125
313
 
@@ -128,5 +316,6 @@ Public API split into two layers:
128
316
  ## Functions
129
317
 
130
318
  - [connectRenderer](functions/connectRenderer.md)
319
+ - [createRenderer](functions/createRenderer.md)
131
320
  - [defineRegistry](functions/defineRegistry.md)
132
321
  - [renderSpec](functions/renderSpec.md)
@@ -2,34 +2,42 @@
2
2
 
3
3
  # Class: PlayRenderer
4
4
 
5
- Defined in: [PlayRenderer.ts:42](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.31/packages/play-dom/src/PlayRenderer.ts#L42)
5
+ Defined in: [PlayRenderer.ts:78](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.33/packages/play-dom/src/PlayRenderer.ts#L78)
6
6
 
7
- PlayRenderer connects an actor's currentView signal to the DOM renderer.
7
+ PlayRenderer connects an actor's `currentView` signal to the DOM renderer.
8
8
 
9
- Usage:
9
+ Watches `actor.currentView` via TC39 Signals and renders `DomComponentRenderer`
10
+ functions into `container` on every view transition. Cleared on `disconnect()`.
11
+
12
+ **Preferred usage — via `registryResult`:**
10
13
 
11
14
  ```typescript
12
- const { registry, handlers } = defineRegistry(catalog, { components, actions });
13
- const resolvedHandlers = handlers(
14
- () => undefined,
15
- () => ({}),
16
- );
17
- const renderer = new PlayRenderer(container, actor, registry, { handlers: resolvedHandlers });
15
+ import { PlayRenderer, defineRegistry } from "@xmachines/play-dom";
16
+
17
+ const registryResult = defineRegistry(catalog, { components, actions });
18
+ const renderer = new PlayRenderer(container, actor, registryResult.registry, {
19
+ registryResult, // wires setState/getState from xstate store automatically
20
+ });
18
21
  renderer.connect();
22
+ // Later:
23
+ renderer.disconnect();
24
+ ```
25
+
26
+ **Controlled store mode** — bring your own `StateStore`:
19
27
 
20
- // Controlled mode — bring your own store:
28
+ ```typescript
21
29
  import { createAtom } from "@xstate/store";
22
30
  import { xstateStoreStateStore } from "@json-render/xstate";
23
- const store = xstateStoreStateStore({ atom: createAtom({ username: "" }) });
24
- const renderer = new PlayRenderer(container, actor, registry, {
25
- store,
26
- handlers: resolvedHandlers,
27
- });
28
31
 
29
- // Later:
30
- renderer.disconnect();
32
+ const atom = createAtom({ username: "" });
33
+ const store = xstateStoreStateStore({ atom });
34
+ const renderer = new PlayRenderer(container, actor, registry, { registryResult, store });
35
+ renderer.connect();
31
36
  ```
32
37
 
38
+ Double `connect()` is safe — calling `connect()` while already connected
39
+ automatically disconnects first, preventing double-render subscriptions.
40
+
33
41
  ## Constructors
34
42
 
35
43
  ### Constructor
@@ -42,16 +50,16 @@ new PlayRenderer(
42
50
  options?): PlayRenderer;
43
51
  ```
44
52
 
45
- Defined in: [PlayRenderer.ts:54](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.31/packages/play-dom/src/PlayRenderer.ts#L54)
53
+ Defined in: [PlayRenderer.ts:101](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.33/packages/play-dom/src/PlayRenderer.ts#L101)
46
54
 
47
55
  #### Parameters
48
56
 
49
- | Parameter | Type | Description |
50
- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
51
- | `container` | `HTMLElement` | The `HTMLElement` to render into. Cleared and repopulated on every view transition. |
52
- | `actor` | [`AbstractActor`](../../play-actor/classes/AbstractActor.md)\<[`AnyActorLogic`](https://www.jsdocs.io/package/xstate#AnyActorLogic), [`EventObject`](https://www.jsdocs.io/package/xstate#EventObject)\> & [`Viewable`](../../play-actor/interfaces/Viewable.md) | Actor instance providing the `currentView` signal (must implement `Viewable`). |
53
- | `registry` | [`DomRegistry`](../type-aliases/DomRegistry.md) | Map of component type names to `DomComponentRenderer` functions. |
54
- | `options` | [`PlayDomOptions`](../interfaces/PlayDomOptions.md) | Optional configuration: `handlers` map (action name async handler) and optional external `store` (controlled mode when omitted, a fresh `@xstate/store` atom is created per view transition seeded from `spec.state`). |
57
+ | Parameter | Type | Description |
58
+ | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
59
+ | `container` | `HTMLElement` | `HTMLElement` to render into. Cleared and repopulated on every view transition. |
60
+ | `actor` | [`AbstractActor`](../../play-actor/classes/AbstractActor.md)\<[`AnyActorLogic`](https://www.jsdocs.io/package/xstate#AnyActorLogic), [`EventObject`](https://www.jsdocs.io/package/xstate#EventObject)\> & [`Viewable`](../../play-actor/interfaces/Viewable.md) | Actor providing the `currentView` signal (must implement `Viewable`). |
61
+ | `registry` | [`DomRegistry`](../type-aliases/DomRegistry.md) | Component renderer map typically `registryResult.registry` from `defineRegistry`. |
62
+ | `options` | [`PlayDomOptions`](../interfaces/PlayDomOptions.md) | Configuration: - `registryResult` preferred; auto-wires `setState`/`state` from the xstate store. - `handlers` — pre-resolved handler map (legacy; used when `registryResult` is absent). - `store` external `StateStore` (controlled mode; overrides `spec.state` seeding). - `loading` — streaming mode flag; suppresses missing-child warnings. |
55
63
 
56
64
  #### Returns
57
65
 
@@ -65,11 +73,16 @@ Defined in: [PlayRenderer.ts:54](https://gitlab.com/xmachin-es/xmachines-js/-/bl
65
73
  connect(): void;
66
74
  ```
67
75
 
68
- Defined in: [PlayRenderer.ts:65](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.31/packages/play-dom/src/PlayRenderer.ts#L65)
76
+ Defined in: [PlayRenderer.ts:117](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.33/packages/play-dom/src/PlayRenderer.ts#L117)
69
77
 
70
78
  Start watching actor.currentView and render to container.
71
79
  Renders the initial view synchronously, then subscribes to signal changes.
72
80
 
81
+ Calling `connect()` on an already-connected renderer (where a previous
82
+ `connect()` was never followed by `disconnect()`) would silently install a
83
+ second `watchSignal` subscription, causing double-renders on every view
84
+ change. Guard against this by auto-disconnecting first.
85
+
73
86
  #### Returns
74
87
 
75
88
  `void`
@@ -82,7 +95,7 @@ Renders the initial view synchronously, then subscribes to signal changes.
82
95
  disconnect(): void;
83
96
  ```
84
97
 
85
- Defined in: [PlayRenderer.ts:73](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.31/packages/play-dom/src/PlayRenderer.ts#L73)
98
+ Defined in: [PlayRenderer.ts:126](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.33/packages/play-dom/src/PlayRenderer.ts#L126)
86
99
 
87
100
  Stop watching and clear the container.
88
101
 
@@ -6,46 +6,65 @@
6
6
  function connectRenderer(options): () => void;
7
7
  ```
8
8
 
9
- Defined in: [connect-renderer.ts:46](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.31/packages/play-dom/src/connect-renderer.ts#L46)
9
+ Defined in: [connect-renderer.ts:65](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.33/packages/play-dom/src/connect-renderer.ts#L65)
10
10
 
11
- Connect a signal-driven DOM renderer to an actor's currentView signal.
11
+ Connect a signal-driven DOM renderer to an actor's `currentView` signal.
12
12
 
13
- Subscribes to `actor.currentView` via TC39 Signals and renders `DomComponentRenderer`
14
- functions into the provided `container` element on every state change.
13
+ Subscribes to `actor.currentView` via TC39 Signals and renders catalog-typed
14
+ components into `container` on every view transition. Clears the container
15
+ when the view is `null` (optionally appends `fallback` on initial mount).
15
16
 
16
- - Renders the initial view immediately (synchronous)
17
- - Re-renders when `actor.currentView` signal changes (via microtask)
18
- - Clears container when view is `null` (optionally appends fallback)
17
+ - Initial render is **synchronous** — the container is populated before `connectRenderer` returns.
18
+ - Signal-driven re-renders are **microtask-deferred** — `watchSignal` schedules them
19
+ on the next microtask queue tick, not synchronously within the signal update.
20
+
21
+ For the one-call pattern, prefer [createRenderer](createRenderer.md) which wraps `defineRegistry`
22
+ and `PlayRenderer` into a single factory function.
19
23
 
20
24
  ## Parameters
21
25
 
22
- | Parameter | Type | Description |
23
- | --------- | ------------------------------------------------------------------- | ---------------------- |
24
- | `options` | [`ConnectRendererOptions`](../interfaces/ConnectRendererOptions.md) | ConnectRendererOptions |
26
+ | Parameter | Type | Description |
27
+ | --------- | ------------------------------------------------------------------- | ----------------------------------------------------------------- |
28
+ | `options` | [`ConnectRendererOptions`](../interfaces/ConnectRendererOptions.md) | [ConnectRendererOptions](../interfaces/ConnectRendererOptions.md) |
25
29
 
26
30
  ## Returns
27
31
 
28
- A cleanup function that stops all DOM mutations
32
+ A cleanup function call to stop all DOM mutations and remove subscriptions.
29
33
 
30
34
  () => `void`
31
35
 
32
36
  ## Example
33
37
 
34
38
  ```typescript
35
- import { connectRenderer, type DomComponentRenderer } from "@xmachines/play-dom";
39
+ import { connectRenderer, defineRegistry, schema } from "@xmachines/play-dom";
40
+ import { defineCatalog } from "@json-render/core";
41
+ import { z } from "zod";
36
42
 
37
- const unwatch = connectRenderer({
38
- actor,
39
- registry: {
40
- Home: (element, ctx) => {
41
- const el = document.createElement("div");
42
- el.textContent = element.props.title as string;
43
+ const catalog = defineCatalog(schema, {
44
+ components: { Home: { props: z.object({ title: z.string() }) } },
45
+ actions: { logout: {} },
46
+ });
47
+
48
+ const registryResult = defineRegistry(catalog, {
49
+ components: {
50
+ Home: ({ props }) => {
51
+ const el = document.createElement("section");
52
+ el.textContent = props.title;
43
53
  return el;
44
54
  },
45
55
  },
56
+ actions: {
57
+ logout: async () => actor.send({ type: "auth.logout" }),
58
+ },
59
+ });
60
+
61
+ const disconnect = connectRenderer({
62
+ actor,
63
+ registry: registryResult.registry,
64
+ registryResult, // preferred — wires setState/state from xstate store automatically
46
65
  container: document.getElementById("app")!,
47
66
  });
48
67
 
49
- // Later: stop watching
50
- unwatch();
68
+ // Later:
69
+ disconnect();
51
70
  ```
@@ -0,0 +1,43 @@
1
+ [Documentation](../../../README.md) / [@xmachines/play-dom](../README.md) / createRenderer
2
+
3
+ # Function: createRenderer()
4
+
5
+ ```ts
6
+ function createRenderer<C>(catalog, componentMap): (actor, container, options?) => () => void;
7
+ ```
8
+
9
+ Defined in: [create-renderer.ts:83](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.33/packages/play-dom/src/create-renderer.ts#L83)
10
+
11
+ Create a reusable DOM renderer factory from a catalog and component map.
12
+
13
+ Returns a `mount(actor, container, options?)` function that wires up the
14
+ PlayRenderer in one call and returns a `disconnect` cleanup function.
15
+
16
+ ## Type Parameters
17
+
18
+ | Type Parameter |
19
+ | ------------------------------------------------------------------------------------------------------------------------------------ |
20
+ | `C` _extends_ `Catalog`\<`SchemaDefinition`\<`SchemaType`\<`string`, `unknown`\>, `SchemaType`\<`string`, `unknown`\>\>, `unknown`\> |
21
+
22
+ ## Parameters
23
+
24
+ | Parameter | Type | Description |
25
+ | -------------- | ------------------------------------------------------------------ | ---------------------------------------------------------------- |
26
+ | `catalog` | `C` | The json-render Catalog describing component and action schemas. |
27
+ | `componentMap` | [`ComponentRegistry`](../type-aliases/ComponentRegistry.md)\<`C`\> | Component implementations keyed by catalog component name. |
28
+
29
+ ## Returns
30
+
31
+ A `mount` function that accepts `(actor, container, options?)` and returns `disconnect`.
32
+
33
+ (`actor`, `container`, `options?`) => () => `void`
34
+
35
+ ## Remarks
36
+
37
+ `createRenderer` manages `registryResult` internally — it calls `defineRegistry` once and
38
+ reuses the result across all `mount()` calls. The `mount` options type therefore excludes
39
+ `registryResult` (it is always provided by `createRenderer` itself and cannot be overridden).
40
+
41
+ If you need to call `registryResult.executeAction()` programmatically (outside the emit/on
42
+ flow), or share the same `registryResult` with `connectRenderer`, use `defineRegistry` and
43
+ `PlayRenderer` directly rather than `createRenderer`.
@@ -6,7 +6,7 @@
6
6
  function defineRegistry<C>(_catalog, options): DefineRegistryResult;
7
7
  ```
8
8
 
9
- Defined in: [json-render/types.ts:213](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.31/packages/play-dom/src/json-render/types.ts#L213)
9
+ Defined in: [json-render/types.ts:351](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.33/packages/play-dom/src/json-render/types.ts#L351)
10
10
 
11
11
  Build a `DomRegistry` from a catalog and component/action options.
12
12
 
@@ -18,10 +18,10 @@ Build a `DomRegistry` from a catalog and component/action options.
18
18
 
19
19
  ## Parameters
20
20
 
21
- | Parameter | Type |
22
- | ---------- | ------------------------------------------------------------------------ |
23
- | `_catalog` | `C` |
24
- | `options` | [`DefineRegistryOptions`](../interfaces/DefineRegistryOptions.md)\<`C`\> |
21
+ | Parameter | Type |
22
+ | ---------- | -------------------------------------------------------------------------- |
23
+ | `_catalog` | `C` |
24
+ | `options` | [`DefineRegistryOptions`](../type-aliases/DefineRegistryOptions.md)\<`C`\> |
25
25
 
26
26
  ## Returns
27
27