@xmachines/docs 6.1.0 → 7.0.0

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 (595) hide show
  1. package/README.md +4 -4
  2. package/api/@xmachines/core/README.md +7 -2
  3. package/api/@xmachines/core/cache/functions/createLruCache.md +1 -1
  4. package/api/@xmachines/core/cache/interfaces/KeyValueCache.md +3 -3
  5. package/api/@xmachines/core/errors/classes/BaseError.md +4 -4
  6. package/api/@xmachines/core/errors/classes/DisposeConflictError.md +4 -4
  7. package/api/@xmachines/core/utils/functions/asDisposable.md +2 -2
  8. package/api/@xmachines/core/utils/functions/createNullRecord.md +1 -1
  9. package/api/@xmachines/core/utils/functions/createWarnOnce.md +1 -1
  10. package/api/@xmachines/core/utils/functions/describeValue.md +1 -1
  11. package/api/@xmachines/core/utils/functions/isError.md +1 -1
  12. package/api/@xmachines/core/utils/functions/isThenable.md +1 -1
  13. package/api/@xmachines/core/utils/functions/releaseQuietly.md +1 -1
  14. package/api/@xmachines/core/utils/functions/rethrowLater.md +1 -1
  15. package/api/@xmachines/core/utils/functions/safeString.md +1 -1
  16. package/api/@xmachines/core/utils/functions/shallowEqualExcept.md +1 -1
  17. package/api/@xmachines/core/utils/type-aliases/DisposeKey.md +1 -1
  18. package/api/@xmachines/core/utils/type-aliases/DisposeMember.md +1 -1
  19. package/api/@xmachines/core/utils/variables/DISPOSE.md +1 -1
  20. package/api/@xmachines/play/README.md +10 -5
  21. package/api/@xmachines/play/errors/classes/NonNullableError.md +4 -4
  22. package/api/@xmachines/play/errors/classes/PlayError.md +5 -4
  23. package/api/@xmachines/play/index/functions/assertNonNullable.md +1 -1
  24. package/api/@xmachines/play/index/type-aliases/PlayEvent.md +2 -2
  25. package/api/@xmachines/play-actor/README.md +9 -1
  26. package/api/@xmachines/play-actor/interfaces/ActorEvent.md +2 -2
  27. package/api/@xmachines/play-actor/interfaces/PlayActor.md +3 -3
  28. package/api/@xmachines/play-atom/README.md +16 -4
  29. package/api/@xmachines/play-atom/functions/watchAtom.md +1 -1
  30. package/api/@xmachines/play-atom/interfaces/AsyncAtomOptions.md +2 -2
  31. package/api/@xmachines/play-atom/interfaces/Atom.md +6 -6
  32. package/api/@xmachines/play-atom/interfaces/AtomObserver.md +4 -4
  33. package/api/@xmachines/play-atom/interfaces/AtomOptions.md +2 -2
  34. package/api/@xmachines/play-atom/interfaces/AtomSubscription.md +2 -2
  35. package/api/@xmachines/play-atom/interfaces/BaseAtom.md +4 -4
  36. package/api/@xmachines/play-atom/interfaces/CreateAtom.md +3 -3
  37. package/api/@xmachines/play-atom/interfaces/Readable.md +4 -4
  38. package/api/@xmachines/play-atom/interfaces/ReadonlyAtom.md +4 -4
  39. package/api/@xmachines/play-atom/type-aliases/AnyAtom.md +1 -1
  40. package/api/@xmachines/play-atom/type-aliases/AsyncAtomState.md +1 -1
  41. package/api/@xmachines/play-atom/variables/createAsyncAtom.md +1 -1
  42. package/api/@xmachines/play-atom/variables/createAtom.md +1 -1
  43. package/api/@xmachines/play-atom/variables/createWritableAtom.md +1 -1
  44. package/api/@xmachines/play-dom/README.md +131 -48
  45. package/api/@xmachines/play-dom/classes/PlayRenderer.md +12 -12
  46. package/api/@xmachines/play-dom/functions/createPlayUI.md +5 -5
  47. package/api/@xmachines/play-dom/functions/createRenderer.md +1 -1
  48. package/api/@xmachines/play-dom/functions/renderSpec.md +3 -2
  49. package/api/@xmachines/play-dom/interfaces/ComponentContext.md +9 -9
  50. package/api/@xmachines/play-dom/interfaces/CreatePlayUIOptions.md +15 -14
  51. package/api/@xmachines/play-dom/interfaces/DomRenderContext.md +26 -20
  52. package/api/@xmachines/play-dom/interfaces/MountOptions.md +3 -3
  53. package/api/@xmachines/play-dom/interfaces/PassOptions.md +14 -0
  54. package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +18 -17
  55. package/api/@xmachines/play-dom/interfaces/RenderErrorInfo.md +16 -0
  56. package/api/@xmachines/play-dom/interfaces/RenderSpecOptions.md +17 -15
  57. package/api/@xmachines/play-dom/interfaces/UIProviderOptions.md +9 -8
  58. package/api/@xmachines/play-dom/interfaces/ValidationRegistry.md +14 -11
  59. package/api/@xmachines/play-dom/type-aliases/ConfirmHandler.md +9 -10
  60. package/api/@xmachines/play-dom/type-aliases/DefineRegistryOptions.md +4 -3
  61. package/api/@xmachines/play-dom/type-aliases/MountFn.md +1 -1
  62. package/api/@xmachines/play-dom/type-aliases/OnRenderError.md +27 -0
  63. package/api/@xmachines/play-dom/type-aliases/RenderErrorKind.md +21 -0
  64. package/api/@xmachines/play-dom-router/README.md +41 -5
  65. package/api/@xmachines/play-dom-router/classes/DomRouterBridge.md +7 -7
  66. package/api/@xmachines/play-dom-router/classes/RouteMap.md +4 -4
  67. package/api/@xmachines/play-dom-router/functions/connectRouter.md +1 -1
  68. package/api/@xmachines/play-dom-router/functions/createBrowserHistory.md +1 -1
  69. package/api/@xmachines/play-dom-router/functions/createRouter.md +1 -1
  70. package/api/@xmachines/play-dom-router/interfaces/BasePathOptions.md +3 -3
  71. package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +14 -14
  72. package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +14 -14
  73. package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +8 -8
  74. package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +7 -7
  75. package/api/@xmachines/play-dom-router/interfaces/RoutableActor.md +4 -4
  76. package/api/@xmachines/play-dom-router/interfaces/RouteLookupContract.md +3 -3
  77. package/api/@xmachines/play-dom-router/interfaces/RouteMapOptions.md +4 -4
  78. package/api/@xmachines/play-dom-router/interfaces/RouteMapping.md +3 -3
  79. package/api/@xmachines/play-dom-router/interfaces/RouterBridge.md +3 -3
  80. package/api/@xmachines/play-dom-router/interfaces/RouterConnection.md +6 -6
  81. package/api/@xmachines/play-dom-router/interfaces/VanillaRouter.md +4 -4
  82. package/api/@xmachines/play-pattern/README.md +1 -1
  83. package/api/@xmachines/play-pattern/functions/buildPath.md +1 -1
  84. package/api/@xmachines/play-pattern/functions/createLruCache.md +1 -1
  85. package/api/@xmachines/play-pattern/functions/getIndexKey.md +1 -1
  86. package/api/@xmachines/play-pattern/functions/isDotSegment.md +1 -1
  87. package/api/@xmachines/play-pattern/functions/parsePattern.md +1 -1
  88. package/api/@xmachines/play-pattern/interfaces/GroupPart.md +4 -4
  89. package/api/@xmachines/play-pattern/interfaces/KeyValueCache.md +3 -3
  90. package/api/@xmachines/play-pattern/interfaces/LiteralPart.md +3 -3
  91. package/api/@xmachines/play-pattern/interfaces/ParamPart.md +7 -7
  92. package/api/@xmachines/play-pattern/interfaces/ParseOptions.md +2 -2
  93. package/api/@xmachines/play-pattern/interfaces/ParsedPattern.md +12 -12
  94. package/api/@xmachines/play-pattern/interfaces/PatternParam.md +4 -4
  95. package/api/@xmachines/play-pattern/type-aliases/PathBuildResult.md +1 -1
  96. package/api/@xmachines/play-pattern/type-aliases/PathParams.md +1 -1
  97. package/api/@xmachines/play-pattern/type-aliases/PatternModifier.md +1 -1
  98. package/api/@xmachines/play-pattern/type-aliases/PatternPart.md +1 -1
  99. package/api/@xmachines/play-react/README.md +57 -18
  100. package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +6 -6
  101. package/api/@xmachines/play-react/functions/defineRegistry.md +1 -1
  102. package/api/@xmachines/play-react/functions/useActor.md +1 -1
  103. package/api/@xmachines/play-react/functions/useAtomEffect.md +1 -1
  104. package/api/@xmachines/play-react/functions/usePlayView.md +1 -1
  105. package/api/@xmachines/play-react/interfaces/ActionProviderProps.md +5 -5
  106. package/api/@xmachines/play-react/interfaces/ActorProviderProps.md +11 -11
  107. package/api/@xmachines/play-react/interfaces/DefineRegistryResult.md +15 -0
  108. package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +6 -6
  109. package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +4 -4
  110. package/api/@xmachines/play-react/interfaces/PlayUIProviderProps.md +13 -13
  111. package/api/@xmachines/play-react/interfaces/RenderErrorInfo.md +16 -0
  112. package/api/@xmachines/play-react/interfaces/RendererProps.md +7 -7
  113. package/api/@xmachines/play-react/interfaces/ViewContextValue.md +5 -5
  114. package/api/@xmachines/play-react/type-aliases/AnyPlayActor.md +1 -1
  115. package/api/@xmachines/play-react/type-aliases/OnRenderError.md +27 -0
  116. package/api/@xmachines/play-react/type-aliases/RenderErrorKind.md +21 -0
  117. package/api/@xmachines/play-react/variables/ActorProvider.md +14 -4
  118. package/api/@xmachines/play-react/variables/PlayRenderer.md +1 -1
  119. package/api/@xmachines/play-react/variables/PlayUIProvider.md +1 -1
  120. package/api/@xmachines/play-react-router/README.md +26 -5
  121. package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +7 -7
  122. package/api/@xmachines/play-react-router/classes/RouteMap.md +4 -4
  123. package/api/@xmachines/play-react-router/functions/createPlayRouterProvider.md +1 -1
  124. package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +1 -1
  125. package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +7 -7
  126. package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +9 -9
  127. package/api/@xmachines/play-react-router/interfaces/RoutableActor.md +4 -4
  128. package/api/@xmachines/play-react-router/interfaces/RouteMapOptions.md +4 -4
  129. package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +3 -3
  130. package/api/@xmachines/play-react-router/interfaces/RouterBridge.md +3 -3
  131. package/api/@xmachines/play-react-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
  132. package/api/@xmachines/play-react-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  133. package/api/@xmachines/play-react-router/variables/PlayRouterProvider.md +1 -1
  134. package/api/@xmachines/play-router/README.md +73 -16
  135. package/api/@xmachines/play-router/errors/classes/DuplicateBridgeError.md +4 -4
  136. package/api/@xmachines/play-router/errors/classes/DuplicateRoutePathError.md +5 -5
  137. package/api/@xmachines/play-router/errors/classes/EmptyRoutePathError.md +5 -5
  138. package/api/@xmachines/play-router/errors/classes/InvalidBasePathError.md +5 -5
  139. package/api/@xmachines/play-router/errors/classes/InvalidRoutePatternError.md +5 -5
  140. package/api/@xmachines/play-router/errors/classes/InvalidStateIdError.md +5 -5
  141. package/api/@xmachines/play-router/errors/classes/MissingBasePathParamError.md +6 -6
  142. package/api/@xmachines/play-router/errors/classes/RouterSyncError.md +4 -4
  143. package/api/@xmachines/play-router/errors/classes/UnknownStateTypeError.md +6 -6
  144. package/api/@xmachines/play-router/index/classes/RouteMap.md +4 -4
  145. package/api/@xmachines/play-router/index/classes/RouterBridgeBase.md +7 -7
  146. package/api/@xmachines/play-router/index/functions/buildPlayRouteEvent.md +1 -1
  147. package/api/@xmachines/play-router/index/functions/buildRouteTree.md +1 -1
  148. package/api/@xmachines/play-router/index/functions/cleanFrameworkParams.md +1 -1
  149. package/api/@xmachines/play-router/index/functions/createLruCache.md +1 -1
  150. package/api/@xmachines/play-router/index/functions/createRouteMapFromTree.md +1 -1
  151. package/api/@xmachines/play-router/index/functions/createRouterConnection.md +1 -1
  152. package/api/@xmachines/play-router/index/functions/detectDuplicateRoutes.md +1 -1
  153. package/api/@xmachines/play-router/index/functions/extractQuery.md +1 -1
  154. package/api/@xmachines/play-router/index/functions/extractRouteParams.md +1 -1
  155. package/api/@xmachines/play-router/index/functions/findRouteById.md +1 -1
  156. package/api/@xmachines/play-router/index/functions/findRouteByPath.md +1 -1
  157. package/api/@xmachines/play-router/index/functions/isMountableBridge.md +1 -1
  158. package/api/@xmachines/play-router/index/functions/joinBasePath.md +1 -1
  159. package/api/@xmachines/play-router/index/functions/mountKey.md +1 -1
  160. package/api/@xmachines/play-router/index/functions/normalizeBasePath.md +1 -1
  161. package/api/@xmachines/play-router/index/functions/openProviderBridge.md +3 -3
  162. package/api/@xmachines/play-router/index/functions/parsePattern.md +1 -1
  163. package/api/@xmachines/play-router/index/functions/pickOwnParams.md +1 -1
  164. package/api/@xmachines/play-router/index/functions/repointProviderBridge.md +1 -1
  165. package/api/@xmachines/play-router/index/functions/resolveBasePath.md +1 -1
  166. package/api/@xmachines/play-router/index/functions/resolveFrameworkParams.md +1 -1
  167. package/api/@xmachines/play-router/index/functions/sanitizePathname.md +1 -1
  168. package/api/@xmachines/play-router/index/functions/splitLocation.md +1 -1
  169. package/api/@xmachines/play-router/index/functions/stripBasePath.md +1 -1
  170. package/api/@xmachines/play-router/index/functions/validateRouteFormat.md +1 -1
  171. package/api/@xmachines/play-router/index/functions/validateStateExists.md +1 -1
  172. package/api/@xmachines/play-router/index/interfaces/BasePathOptions.md +3 -3
  173. package/api/@xmachines/play-router/index/interfaces/BuildPlayRouteEventOptions.md +4 -4
  174. package/api/@xmachines/play-router/index/interfaces/CompileOptions.md +3 -3
  175. package/api/@xmachines/play-router/index/interfaces/FrameworkParamsSource.md +7 -7
  176. package/api/@xmachines/play-router/index/interfaces/KeyValueCache.md +3 -3
  177. package/api/@xmachines/play-router/index/interfaces/LocationLike.md +3 -3
  178. package/api/@xmachines/play-router/index/interfaces/MountableRouterBridge.md +6 -6
  179. package/api/@xmachines/play-router/index/interfaces/OpenProviderBridgeArgs.md +8 -8
  180. package/api/@xmachines/play-router/index/interfaces/ParseOptions.md +2 -2
  181. package/api/@xmachines/play-router/index/interfaces/ParsedPattern.md +12 -12
  182. package/api/@xmachines/play-router/index/interfaces/PlayRouteEvent.md +7 -7
  183. package/api/@xmachines/play-router/index/interfaces/PlayRouterProviderBaseProps.md +9 -9
  184. package/api/@xmachines/play-router/index/interfaces/ResolvedBasePath.md +3 -3
  185. package/api/@xmachines/play-router/index/interfaces/ResolvedRoutePath.md +3 -3
  186. package/api/@xmachines/play-router/index/interfaces/Routable.md +3 -3
  187. package/api/@xmachines/play-router/index/interfaces/RoutableActor.md +4 -4
  188. package/api/@xmachines/play-router/index/interfaces/RouteInfo.md +8 -8
  189. package/api/@xmachines/play-router/index/interfaces/RouteMapOptions.md +4 -4
  190. package/api/@xmachines/play-router/index/interfaces/RouteMapping.md +3 -3
  191. package/api/@xmachines/play-router/index/interfaces/RouteMatch.md +3 -3
  192. package/api/@xmachines/play-router/index/interfaces/RouteNode.md +10 -10
  193. package/api/@xmachines/play-router/index/interfaces/RouteObject.md +5 -5
  194. package/api/@xmachines/play-router/index/interfaces/RouteTree.md +5 -5
  195. package/api/@xmachines/play-router/index/interfaces/RouteWatcherHandle.md +3 -3
  196. package/api/@xmachines/play-router/index/interfaces/RouterBridge.md +3 -3
  197. package/api/@xmachines/play-router/index/interfaces/RouterBridgeOptions.md +6 -6
  198. package/api/@xmachines/play-router/index/interfaces/RouterConnection.md +6 -6
  199. package/api/@xmachines/play-router/index/interfaces/SplitLocation.md +5 -5
  200. package/api/@xmachines/play-router/index/interfaces/WindowLike.md +3 -3
  201. package/api/@xmachines/play-router/index/type-aliases/PlayRouterBridgeConstructor.md +1 -1
  202. package/api/@xmachines/play-router/index/type-aliases/RouteData.md +1 -1
  203. package/api/@xmachines/play-router/index/type-aliases/RouteDataResolver.md +1 -1
  204. package/api/@xmachines/play-router/index/type-aliases/RouteMetadata.md +1 -1
  205. package/api/@xmachines/play-router/index/type-aliases/URLPatternLike.md +3 -3
  206. package/api/@xmachines/play-router/index/variables/NO_BASE_PATH.md +1 -1
  207. package/api/@xmachines/play-router/index/variables/ROOT_NODE_ID.md +1 -1
  208. package/api/@xmachines/play-router/xstate/functions/createRouteMap.md +1 -1
  209. package/api/@xmachines/play-router/xstate/functions/extractMachineRoutes.md +1 -1
  210. package/api/@xmachines/play-router/xstate/functions/getNavigableRoutes.md +1 -1
  211. package/api/@xmachines/play-router/xstate/functions/getRoutableRoutes.md +1 -1
  212. package/api/@xmachines/play-router/xstate/functions/getRouteMappings.md +1 -1
  213. package/api/@xmachines/play-router/xstate/functions/getTransitionReachableRoutes.md +1 -1
  214. package/api/@xmachines/play-router/xstate/functions/isRouteReachable.md +1 -1
  215. package/api/@xmachines/play-router/xstate/functions/machineToGraph.md +1 -1
  216. package/api/@xmachines/play-router/xstate/functions/routeExists.md +1 -1
  217. package/api/@xmachines/play-router/xstate/interfaces/MachineEdgeData.md +3 -3
  218. package/api/@xmachines/play-router/xstate/interfaces/MachineNodeData.md +5 -5
  219. package/api/@xmachines/play-router/xstate/type-aliases/MachineGraph.md +1 -1
  220. package/api/@xmachines/play-solid/README.md +35 -11
  221. package/api/@xmachines/play-solid/functions/useActor.md +1 -1
  222. package/api/@xmachines/play-solid/functions/useBoundProp.md +8 -5
  223. package/api/@xmachines/play-solid/functions/useFieldValidation.md +6 -4
  224. package/api/@xmachines/play-solid/functions/usePlayView.md +1 -1
  225. package/api/@xmachines/play-solid/functions/useStateBinding.md +5 -3
  226. package/api/@xmachines/play-solid/functions/useStateValue.md +5 -3
  227. package/api/@xmachines/play-solid/interfaces/ActorProviderProps.md +10 -10
  228. package/api/@xmachines/play-solid/interfaces/PlayUIProviderProps.md +13 -13
  229. package/api/@xmachines/play-solid/interfaces/RenderErrorInfo.md +16 -0
  230. package/api/@xmachines/play-solid/interfaces/RendererProps.md +7 -7
  231. package/api/@xmachines/play-solid/interfaces/ViewContextValue.md +5 -5
  232. package/api/@xmachines/play-solid/type-aliases/AnyPlayActor.md +1 -1
  233. package/api/@xmachines/play-solid/type-aliases/OnRenderError.md +27 -0
  234. package/api/@xmachines/play-solid/type-aliases/RenderErrorKind.md +21 -0
  235. package/api/@xmachines/play-solid/variables/ActorContext.md +1 -1
  236. package/api/@xmachines/play-solid/variables/ActorProvider.md +17 -3
  237. package/api/@xmachines/play-solid/variables/PlayRenderer.md +1 -1
  238. package/api/@xmachines/play-solid/variables/PlayUIProvider.md +1 -1
  239. package/api/@xmachines/play-solid-router/README.md +21 -5
  240. package/api/@xmachines/play-solid-router/classes/RouteMap.md +4 -4
  241. package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +7 -7
  242. package/api/@xmachines/play-solid-router/functions/createPlayRouterProvider.md +1 -1
  243. package/api/@xmachines/play-solid-router/interfaces/PlayActor.md +3 -3
  244. package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +7 -7
  245. package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +9 -9
  246. package/api/@xmachines/play-solid-router/interfaces/RoutableActor.md +4 -4
  247. package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +4 -4
  248. package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +3 -3
  249. package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +3 -3
  250. package/api/@xmachines/play-solid-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
  251. package/api/@xmachines/play-solid-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  252. package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +4 -4
  253. package/api/@xmachines/play-solid-router/variables/PlayRouterProvider.md +1 -1
  254. package/api/@xmachines/play-svelte/README.md +18 -10
  255. package/api/@xmachines/play-svelte/functions/defineRegistry.md +3 -4
  256. package/api/@xmachines/play-svelte/functions/getActorContext.md +1 -1
  257. package/api/@xmachines/play-svelte/functions/getPlayViewContext.md +1 -1
  258. package/api/@xmachines/play-svelte/functions/setActorContext.md +1 -1
  259. package/api/@xmachines/play-svelte/interfaces/ActorProviderProps.md +12 -12
  260. package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +8 -8
  261. package/api/@xmachines/play-svelte/interfaces/DefineRegistryResult.md +15 -0
  262. package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +14 -14
  263. package/api/@xmachines/play-svelte/interfaces/RenderErrorInfo.md +16 -0
  264. package/api/@xmachines/play-svelte/interfaces/ViewContextValue.md +5 -5
  265. package/api/@xmachines/play-svelte/type-aliases/AnyPlayActor.md +1 -1
  266. package/api/@xmachines/play-svelte/type-aliases/OnRenderError.md +27 -0
  267. package/api/@xmachines/play-svelte/type-aliases/RenderErrorKind.md +21 -0
  268. package/api/@xmachines/play-svelte-spa-router/README.md +9 -5
  269. package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +4 -4
  270. package/api/@xmachines/play-svelte-spa-router/classes/SvelteSpaRouterBridge.md +7 -7
  271. package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +1 -1
  272. package/api/@xmachines/play-svelte-spa-router/interfaces/BasePathOptions.md +3 -3
  273. package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +8 -8
  274. package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +7 -7
  275. package/api/@xmachines/play-svelte-spa-router/interfaces/RoutableActor.md +4 -4
  276. package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +4 -4
  277. package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +3 -3
  278. package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +3 -3
  279. package/api/@xmachines/play-svelte-spa-router/interfaces/RouterConnection.md +6 -6
  280. package/api/@xmachines/play-svelte-spa-router/interfaces/WindowLike.md +3 -3
  281. package/api/@xmachines/play-sveltekit-router/README.md +65 -13
  282. package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +4 -4
  283. package/api/@xmachines/play-sveltekit-router/classes/SvelteKitRouterBridge.md +29 -19
  284. package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +1 -1
  285. package/api/@xmachines/play-sveltekit-router/interfaces/BasePathOptions.md +3 -3
  286. package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +13 -16
  287. package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +3 -3
  288. package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +7 -7
  289. package/api/@xmachines/play-sveltekit-router/interfaces/RoutableActor.md +4 -4
  290. package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +4 -4
  291. package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +3 -3
  292. package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +3 -3
  293. package/api/@xmachines/play-sveltekit-router/interfaces/RouterConnection.md +6 -6
  294. package/api/@xmachines/play-sveltekit-router/interfaces/SvelteKitRouterBridgeOptions.md +25 -0
  295. package/api/@xmachines/play-sveltekit-router/type-aliases/ShallowNavigation.md +21 -0
  296. package/api/@xmachines/play-tanstack-react-router/README.md +34 -16
  297. package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +4 -4
  298. package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +7 -7
  299. package/api/@xmachines/play-tanstack-react-router/functions/createPlayRouterProvider.md +1 -1
  300. package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +1 -1
  301. package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +7 -7
  302. package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +9 -9
  303. package/api/@xmachines/play-tanstack-react-router/interfaces/RoutableActor.md +4 -4
  304. package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +4 -4
  305. package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +3 -3
  306. package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +3 -3
  307. package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
  308. package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  309. package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterInstance.md +1 -1
  310. package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterLike.md +5 -5
  311. package/api/@xmachines/play-tanstack-react-router/variables/PlayRouterProvider.md +1 -1
  312. package/api/@xmachines/play-tanstack-router/README.md +5 -3
  313. package/api/@xmachines/play-tanstack-router/classes/TanStackRouterBridgeBase.md +7 -7
  314. package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouteMapLike.md +3 -3
  315. package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouterLike.md +5 -5
  316. package/api/@xmachines/play-tanstack-solid-router/README.md +45 -11
  317. package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +4 -4
  318. package/api/@xmachines/play-tanstack-solid-router/classes/TanStackSolidRouterBridge.md +7 -7
  319. package/api/@xmachines/play-tanstack-solid-router/functions/createPlayRouterProvider.md +1 -1
  320. package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +7 -7
  321. package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +9 -9
  322. package/api/@xmachines/play-tanstack-solid-router/interfaces/RoutableActor.md +4 -4
  323. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +4 -4
  324. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +3 -3
  325. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +3 -3
  326. package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
  327. package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  328. package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterInstance.md +1 -1
  329. package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterLike.md +5 -5
  330. package/api/@xmachines/play-tanstack-solid-router/variables/PlayRouterProvider.md +1 -1
  331. package/api/@xmachines/play-url/README.md +1 -1
  332. package/api/@xmachines/play-url/errors/classes/InvalidBasePathError.md +5 -5
  333. package/api/@xmachines/play-url/errors/classes/InvalidRoutePatternError.md +5 -5
  334. package/api/@xmachines/play-url/errors/classes/MissingBasePathParamError.md +6 -6
  335. package/api/@xmachines/play-url/index/functions/buildPath.md +1 -1
  336. package/api/@xmachines/play-url/index/functions/cleanFrameworkParams.md +1 -1
  337. package/api/@xmachines/play-url/index/functions/createLruCache.md +1 -1
  338. package/api/@xmachines/play-url/index/functions/getCandidates.md +1 -1
  339. package/api/@xmachines/play-url/index/functions/getCompiledPattern.md +1 -1
  340. package/api/@xmachines/play-url/index/functions/getIndexKey.md +1 -1
  341. package/api/@xmachines/play-url/index/functions/holdsUnsubstitutedParam.md +1 -1
  342. package/api/@xmachines/play-url/index/functions/isDotSegment.md +1 -1
  343. package/api/@xmachines/play-url/index/functions/joinBasePath.md +1 -1
  344. package/api/@xmachines/play-url/index/functions/normalizeBasePath.md +1 -1
  345. package/api/@xmachines/play-url/index/functions/parsePattern.md +1 -1
  346. package/api/@xmachines/play-url/index/functions/pickOwnParams.md +1 -1
  347. package/api/@xmachines/play-url/index/functions/resolveBasePath.md +1 -1
  348. package/api/@xmachines/play-url/index/functions/resolveFrameworkParams.md +1 -1
  349. package/api/@xmachines/play-url/index/functions/sanitizePathname.md +1 -1
  350. package/api/@xmachines/play-url/index/functions/splitLocation.md +1 -1
  351. package/api/@xmachines/play-url/index/functions/stripBasePath.md +1 -1
  352. package/api/@xmachines/play-url/index/interfaces/BasePathOptions.md +3 -3
  353. package/api/@xmachines/play-url/index/interfaces/CompileOptions.md +3 -3
  354. package/api/@xmachines/play-url/index/interfaces/FrameworkParamsSource.md +7 -7
  355. package/api/@xmachines/play-url/index/interfaces/GroupPart.md +4 -4
  356. package/api/@xmachines/play-url/index/interfaces/KeyValueCache.md +3 -3
  357. package/api/@xmachines/play-url/index/interfaces/LiteralPart.md +3 -3
  358. package/api/@xmachines/play-url/index/interfaces/ParamPart.md +7 -7
  359. package/api/@xmachines/play-url/index/interfaces/ParseOptions.md +2 -2
  360. package/api/@xmachines/play-url/index/interfaces/ParsedPattern.md +12 -12
  361. package/api/@xmachines/play-url/index/interfaces/PatternParam.md +4 -4
  362. package/api/@xmachines/play-url/index/interfaces/ResolvedBasePath.md +3 -3
  363. package/api/@xmachines/play-url/index/interfaces/SplitLocation.md +5 -5
  364. package/api/@xmachines/play-url/index/type-aliases/PathBuildResult.md +1 -1
  365. package/api/@xmachines/play-url/index/type-aliases/PathParams.md +1 -1
  366. package/api/@xmachines/play-url/index/type-aliases/PatternModifier.md +1 -1
  367. package/api/@xmachines/play-url/index/type-aliases/PatternPart.md +1 -1
  368. package/api/@xmachines/play-url/index/type-aliases/URLPatternCtor.md +1 -1
  369. package/api/@xmachines/play-url/index/type-aliases/URLPatternLike.md +3 -3
  370. package/api/@xmachines/play-url/index/variables/NO_BASE_PATH.md +1 -1
  371. package/api/@xmachines/play-url/index/variables/URLPattern.md +1 -1
  372. package/api/@xmachines/play-view/README.md +45 -19
  373. package/api/@xmachines/play-view/errors/README.md +1 -0
  374. package/api/@xmachines/play-view/errors/classes/InvalidViewOutletError.md +6 -6
  375. package/api/@xmachines/play-view/errors/classes/ReadOnlyContextError.md +5 -5
  376. package/api/@xmachines/play-view/errors/classes/ViewElementKeyCollisionError.md +181 -0
  377. package/api/@xmachines/play-view/index/README.md +10 -4
  378. package/api/@xmachines/play-view/index/functions/attachRenderErrorHandler.md +10 -9
  379. package/api/@xmachines/play-view/index/functions/bindStoreHandlers.md +34 -0
  380. package/api/@xmachines/play-view/index/functions/composePlayState.md +1 -1
  381. package/api/@xmachines/play-view/index/functions/composeViews.md +8 -2
  382. package/api/@xmachines/play-view/index/functions/createActorProxy.md +39 -0
  383. package/api/@xmachines/play-view/index/functions/createRenderErrorBinding.md +35 -0
  384. package/api/@xmachines/play-view/index/functions/createReportGuard.md +1 -1
  385. package/api/@xmachines/play-view/index/functions/createViewSession.md +29 -0
  386. package/api/@xmachines/play-view/index/functions/createViewStoreLifecycle.md +1 -1
  387. package/api/@xmachines/play-view/index/functions/forwardRenderError.md +45 -0
  388. package/api/@xmachines/play-view/index/functions/guardContextWrites.md +1 -1
  389. package/api/@xmachines/play-view/index/functions/refreshContextSubtree.md +1 -1
  390. package/api/@xmachines/play-view/index/functions/reuseComposedState.md +1 -1
  391. package/api/@xmachines/play-view/index/functions/toAtomState.md +1 -1
  392. package/api/@xmachines/play-view/index/functions/typedSpec.md +1 -1
  393. package/api/@xmachines/play-view/index/interfaces/BaseActorProviderProps.md +8 -8
  394. package/api/@xmachines/play-view/index/interfaces/BaseViewContextValue.md +5 -5
  395. package/api/@xmachines/play-view/index/interfaces/ComposedView.md +5 -5
  396. package/api/@xmachines/play-view/index/interfaces/HandlerFactory.md +19 -0
  397. package/api/@xmachines/play-view/index/interfaces/PlaySpec.md +3 -3
  398. package/api/@xmachines/play-view/index/interfaces/ReportGuard.md +5 -5
  399. package/api/@xmachines/play-view/index/interfaces/ReportGuardMessages.md +5 -5
  400. package/api/@xmachines/play-view/index/interfaces/ResolveViewStoreOptions.md +2 -2
  401. package/api/@xmachines/play-view/index/interfaces/ViewMeta.md +2 -2
  402. package/api/@xmachines/play-view/index/interfaces/ViewOutlet.md +3 -3
  403. package/api/@xmachines/play-view/index/interfaces/ViewSession.md +155 -0
  404. package/api/@xmachines/play-view/index/interfaces/ViewSessionOptions.md +12 -0
  405. package/api/@xmachines/play-view/index/interfaces/ViewSessionSnapshot.md +23 -0
  406. package/api/@xmachines/play-view/index/interfaces/ViewStoreLifecycle.md +22 -3
  407. package/api/@xmachines/play-view/index/interfaces/ViewStoreResolution.md +7 -6
  408. package/api/@xmachines/play-view/index/interfaces/ViewTree.md +4 -4
  409. package/api/@xmachines/play-view/index/interfaces/ViewTreeChild.md +3 -3
  410. package/api/@xmachines/play-view/index/interfaces/Viewable.md +2 -2
  411. package/api/@xmachines/play-view/index/type-aliases/StateUpdater.md +21 -0
  412. package/api/@xmachines/play-view/index/type-aliases/ViewActor.md +1 -1
  413. package/api/@xmachines/play-view/index/variables/CONTEXT_STATE_KEY.md +1 -1
  414. package/api/@xmachines/play-vue/README.md +20 -15
  415. package/api/@xmachines/play-vue/functions/defineRegistry.md +1 -1
  416. package/api/@xmachines/play-vue/functions/useActor.md +1 -1
  417. package/api/@xmachines/play-vue/functions/useBoundProp.md +10 -4
  418. package/api/@xmachines/play-vue/functions/useFieldValidation.md +12 -5
  419. package/api/@xmachines/play-vue/functions/usePlayView.md +1 -1
  420. package/api/@xmachines/play-vue/interfaces/ActorProviderProps.md +8 -8
  421. package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +11 -11
  422. package/api/@xmachines/play-vue/interfaces/RenderErrorInfo.md +16 -0
  423. package/api/@xmachines/play-vue/interfaces/RendererProps.md +7 -7
  424. package/api/@xmachines/play-vue/interfaces/ViewContextValue.md +5 -5
  425. package/api/@xmachines/play-vue/type-aliases/AnyPlayActor.md +1 -1
  426. package/api/@xmachines/play-vue/type-aliases/ComponentEntry.md +1 -1
  427. package/api/@xmachines/play-vue/type-aliases/ComponentsMap.md +1 -1
  428. package/api/@xmachines/play-vue/type-aliases/DefineRegistryOptions.md +2 -2
  429. package/api/@xmachines/play-vue/type-aliases/OnRenderError.md +27 -0
  430. package/api/@xmachines/play-vue/type-aliases/RenderErrorKind.md +21 -0
  431. package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
  432. package/api/@xmachines/play-vue/variables/Renderer.md +3 -3
  433. package/api/@xmachines/play-vue-router/README.md +18 -11
  434. package/api/@xmachines/play-vue-router/errors/classes/VueRouterNavigationError.md +4 -4
  435. package/api/@xmachines/play-vue-router/errors/classes/VueRouterSendError.md +4 -4
  436. package/api/@xmachines/play-vue-router/index/classes/RouteMap.md +4 -4
  437. package/api/@xmachines/play-vue-router/index/classes/VueRouterBridge.md +7 -7
  438. package/api/@xmachines/play-vue-router/index/interfaces/PlayRouteEvent.md +7 -7
  439. package/api/@xmachines/play-vue-router/index/interfaces/RoutableActor.md +4 -4
  440. package/api/@xmachines/play-vue-router/index/interfaces/RouteMapOptions.md +4 -4
  441. package/api/@xmachines/play-vue-router/index/interfaces/RouteMapping.md +3 -3
  442. package/api/@xmachines/play-vue-router/index/interfaces/RouterBridge.md +3 -3
  443. package/api/@xmachines/play-vue-router/index/variables/PlayRouterProvider.md +1 -1
  444. package/api/@xmachines/play-xstate/README.md +64 -12
  445. package/api/@xmachines/play-xstate/errors/classes/ActorThrewNonErrorError.md +4 -4
  446. package/api/@xmachines/play-xstate/errors/classes/InvalidEventError.md +5 -5
  447. package/api/@xmachines/play-xstate/errors/classes/InvalidMachineError.md +4 -4
  448. package/api/@xmachines/play-xstate/errors/classes/InvalidRouteHandlerError.md +5 -5
  449. package/api/@xmachines/play-xstate/errors/classes/InvalidRouteMetadataError.md +5 -5
  450. package/api/@xmachines/play-xstate/errors/classes/InvalidRouteParamError.md +7 -7
  451. package/api/@xmachines/play-xstate/errors/classes/MissingRouteParamError.md +6 -6
  452. package/api/@xmachines/play-xstate/errors/classes/MissingStateIdError.md +6 -6
  453. package/api/@xmachines/play-xstate/index/classes/PlayerActor.md +10 -10
  454. package/api/@xmachines/play-xstate/index/functions/compose.md +4 -4
  455. package/api/@xmachines/play-xstate/index/functions/definePlayer.md +2 -2
  456. package/api/@xmachines/play-xstate/index/interfaces/PlayerConfig.md +4 -4
  457. package/api/@xmachines/play-xstate/index/interfaces/PlayerFactoryResumeOptions.md +2 -2
  458. package/api/@xmachines/play-xstate/index/interfaces/PlayerOptions.md +7 -7
  459. package/api/@xmachines/play-xstate/index/type-aliases/Capability.md +1 -1
  460. package/api/@xmachines/play-xstate/index/type-aliases/PlayerConstructor.md +1 -1
  461. package/api/@xmachines/play-xstate/index/type-aliases/PlayerFactory.md +1 -1
  462. package/api/@xmachines/play-xstate/with-routing/functions/buildRouteUrl.md +1 -1
  463. package/api/@xmachines/play-xstate/with-routing/functions/deriveRoute.md +1 -1
  464. package/api/@xmachines/play-xstate/with-routing/functions/formatPlayRouteTransitions.md +1 -1
  465. package/api/@xmachines/play-xstate/with-routing/functions/isAbsoluteRoute.md +1 -1
  466. package/api/@xmachines/play-xstate/with-routing/functions/withRouting.md +1 -1
  467. package/api/@xmachines/play-xstate/with-routing/interfaces/RouteContext.md +5 -5
  468. package/api/@xmachines/play-xstate/with-routing/interfaces/RouteObject.md +5 -5
  469. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteData.md +1 -1
  470. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteDataResolver.md +1 -1
  471. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMachineConfig.md +4 -4
  472. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMetadata.md +1 -1
  473. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteStateNode.md +5 -5
  474. package/api/@xmachines/play-xstate/with-view/functions/withView.md +1 -1
  475. package/api/@xmachines/shared/README.md +1 -0
  476. package/api/@xmachines/shared/vite-aliases/functions/xmAliases.md +1 -1
  477. package/api/@xmachines/shared/vite-aliases/functions/xmBuildOutput.md +1 -1
  478. package/api/@xmachines/shared/vite-aliases/functions/xmBuildOutputFile.md +1 -1
  479. package/api/@xmachines/shared/vite-aliases/functions/xmCacheDir.md +1 -1
  480. package/api/@xmachines/shared/vite-aliases/functions/xmOptimizeDeps.md +1 -1
  481. package/api/@xmachines/shared/vite-aliases/functions/xmResolve.md +1 -1
  482. package/api/@xmachines/shared/vite-aliases/functions/xmSvelteRunes.md +2 -2
  483. package/api/@xmachines/shared/vite-aliases/functions/xmTestTarget.md +1 -1
  484. package/api/@xmachines/shared/vite-aliases/type-aliases/XmTestTarget.md +1 -1
  485. package/api/@xmachines/shared/vitest/functions/defineXmBrowserConfig.md +1 -1
  486. package/api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md +1 -1
  487. package/api/@xmachines/shared/vitest/interfaces/XmBrowserConfigOptions.md +4 -4
  488. package/contributing/architecture.md +88 -53
  489. package/contributing/configuration.md +20 -12
  490. package/contributing/deployment.md +3 -3
  491. package/contributing/development.md +28 -3
  492. package/contributing/migrating-to-play-atom.md +10 -4
  493. package/contributing/testing.md +64 -33
  494. package/examples/@xmachines/play-dom-demo/README.md +2 -2
  495. package/examples/@xmachines/play-dom-demo/functions/createAuthActionHandlers.md +9 -9
  496. package/examples/@xmachines/play-dom-demo/functions/createConfirmDialog.md +1 -1
  497. package/examples/@xmachines/play-dom-demo/functions/createNavBar.md +1 -1
  498. package/examples/@xmachines/play-dom-demo/functions/initShell.md +1 -1
  499. package/examples/@xmachines/play-dom-demo/type-aliases/AuthCatalog.md +1 -1
  500. package/examples/@xmachines/play-dom-demo/variables/About.md +1 -1
  501. package/examples/@xmachines/play-dom-demo/variables/Button.md +1 -1
  502. package/examples/@xmachines/play-dom-demo/variables/Contact.md +1 -1
  503. package/examples/@xmachines/play-dom-demo/variables/Dashboard.md +1 -1
  504. package/examples/@xmachines/play-dom-demo/variables/Field.md +1 -1
  505. package/examples/@xmachines/play-dom-demo/variables/Home.md +1 -1
  506. package/examples/@xmachines/play-dom-demo/variables/Login.md +1 -1
  507. package/examples/@xmachines/play-dom-demo/variables/NavBarView.md +1 -1
  508. package/examples/@xmachines/play-dom-demo/variables/Navigation.md +1 -1
  509. package/examples/@xmachines/play-dom-demo/variables/Overview.md +1 -1
  510. package/examples/@xmachines/play-dom-demo/variables/Panel.md +1 -1
  511. package/examples/@xmachines/play-dom-demo/variables/Profile.md +1 -1
  512. package/examples/@xmachines/play-dom-demo/variables/Settings.md +1 -1
  513. package/examples/@xmachines/play-dom-demo/variables/Stats.md +1 -1
  514. package/examples/@xmachines/play-dom-demo/variables/authCatalog.md +1 -1
  515. package/examples/@xmachines/play-dom-demo/variables/demoComponents.md +15 -15
  516. package/examples/@xmachines/play-dom-router-demo/README.md +4 -3
  517. package/examples/@xmachines/play-react-demo/README.md +2 -2
  518. package/examples/@xmachines/play-react-demo/functions/createAuthActionHandlers.md +9 -9
  519. package/examples/@xmachines/play-react-demo/type-aliases/AuthCatalog.md +1 -1
  520. package/examples/@xmachines/play-react-demo/variables/About.md +1 -1
  521. package/examples/@xmachines/play-react-demo/variables/Button.md +1 -1
  522. package/examples/@xmachines/play-react-demo/variables/Contact.md +1 -1
  523. package/examples/@xmachines/play-react-demo/variables/Dashboard.md +1 -1
  524. package/examples/@xmachines/play-react-demo/variables/DebugPanel.md +1 -1
  525. package/examples/@xmachines/play-react-demo/variables/Field.md +1 -1
  526. package/examples/@xmachines/play-react-demo/variables/Home.md +1 -1
  527. package/examples/@xmachines/play-react-demo/variables/Login.md +1 -1
  528. package/examples/@xmachines/play-react-demo/variables/NavBar.md +1 -1
  529. package/examples/@xmachines/play-react-demo/variables/NavBarView.md +1 -1
  530. package/examples/@xmachines/play-react-demo/variables/Navigation.md +1 -1
  531. package/examples/@xmachines/play-react-demo/variables/Overview.md +1 -1
  532. package/examples/@xmachines/play-react-demo/variables/Panel.md +1 -1
  533. package/examples/@xmachines/play-react-demo/variables/Profile.md +1 -1
  534. package/examples/@xmachines/play-react-demo/variables/Settings.md +1 -1
  535. package/examples/@xmachines/play-react-demo/variables/Shell.md +1 -1
  536. package/examples/@xmachines/play-react-demo/variables/Stats.md +1 -1
  537. package/examples/@xmachines/play-react-demo/variables/authCatalog.md +1 -1
  538. package/examples/@xmachines/play-react-demo/variables/demoComponents.md +15 -15
  539. package/examples/@xmachines/play-react-router-demo/README.md +4 -3
  540. package/examples/@xmachines/play-solid-demo/README.md +3 -3
  541. package/examples/@xmachines/play-solid-demo/functions/createAuthActionHandlers.md +9 -9
  542. package/examples/@xmachines/play-solid-demo/type-aliases/AuthCatalog.md +1 -1
  543. package/examples/@xmachines/play-solid-demo/variables/About.md +1 -1
  544. package/examples/@xmachines/play-solid-demo/variables/Button.md +1 -1
  545. package/examples/@xmachines/play-solid-demo/variables/Contact.md +1 -1
  546. package/examples/@xmachines/play-solid-demo/variables/Dashboard.md +1 -1
  547. package/examples/@xmachines/play-solid-demo/variables/DebugPanel.md +1 -1
  548. package/examples/@xmachines/play-solid-demo/variables/Field.md +1 -1
  549. package/examples/@xmachines/play-solid-demo/variables/Home.md +1 -1
  550. package/examples/@xmachines/play-solid-demo/variables/Login.md +1 -1
  551. package/examples/@xmachines/play-solid-demo/variables/NavBar.md +1 -1
  552. package/examples/@xmachines/play-solid-demo/variables/NavBarView.md +1 -1
  553. package/examples/@xmachines/play-solid-demo/variables/Navigation.md +1 -1
  554. package/examples/@xmachines/play-solid-demo/variables/Overview.md +1 -1
  555. package/examples/@xmachines/play-solid-demo/variables/Panel.md +1 -1
  556. package/examples/@xmachines/play-solid-demo/variables/Profile.md +1 -1
  557. package/examples/@xmachines/play-solid-demo/variables/Settings.md +1 -1
  558. package/examples/@xmachines/play-solid-demo/variables/Shell.md +1 -1
  559. package/examples/@xmachines/play-solid-demo/variables/Stats.md +1 -1
  560. package/examples/@xmachines/play-solid-demo/variables/authCatalog.md +1 -1
  561. package/examples/@xmachines/play-solid-demo/variables/demoComponents.md +15 -15
  562. package/examples/@xmachines/play-solid-router-demo/README.md +9 -3
  563. package/examples/@xmachines/play-svelte-demo/README.md +1 -1
  564. package/examples/@xmachines/play-svelte-demo/functions/createAuthActionHandlers.md +9 -9
  565. package/examples/@xmachines/play-svelte-demo/type-aliases/AuthCatalog.md +1 -1
  566. package/examples/@xmachines/play-svelte-demo/variables/authCatalog.md +1 -1
  567. package/examples/@xmachines/play-svelte-demo/variables/demoComponents.md +15 -15
  568. package/examples/@xmachines/play-svelte-spa-router-demo/README.md +1 -1
  569. package/examples/@xmachines/play-sveltekit-router-demo/README.md +1 -1
  570. package/examples/@xmachines/play-tanstack-react-router-demo/README.md +3 -2
  571. package/examples/@xmachines/play-tanstack-solid-router-demo/README.md +9 -8
  572. package/examples/@xmachines/play-vue-demo/README.md +2 -2
  573. package/examples/@xmachines/play-vue-demo/functions/createAuthActionHandlers.md +9 -9
  574. package/examples/@xmachines/play-vue-demo/type-aliases/AuthCatalog.md +1 -1
  575. package/examples/@xmachines/play-vue-demo/variables/App.md +1 -1
  576. package/examples/@xmachines/play-vue-demo/variables/authCatalog.md +1 -1
  577. package/examples/@xmachines/play-vue-demo/variables/demoComponents.md +1 -1
  578. package/examples/@xmachines/play-vue-router-demo/README.md +3 -3
  579. package/examples/form-validation.md +17 -13
  580. package/examples/multi-router-integration.md +268 -147
  581. package/examples/routing-patterns.md +43 -8
  582. package/examples/traffic-light.md +6 -2
  583. package/guides/actor-model.md +37 -19
  584. package/guides/atoms.md +48 -8
  585. package/guides/getting-started.md +63 -13
  586. package/guides/inspector.md +71 -11
  587. package/guides/routing.md +4 -1
  588. package/guides/state-machines.md +35 -13
  589. package/guides/views.md +34 -14
  590. package/package.json +6 -6
  591. package/rfc/play.md +31 -13
  592. package/api/@xmachines/play-view/index/functions/createFailureLatch.md +0 -20
  593. package/api/@xmachines/play-view/index/functions/sameViewInputs.md +0 -25
  594. package/api/@xmachines/play-view/index/interfaces/FailureLatch.md +0 -60
  595. package/api/@xmachines/play-view/index/interfaces/ViewInputs.md +0 -19
@@ -27,7 +27,9 @@ Create an inspector and hand its `inspect` observer to [`definePlayer`](../api/@
27
27
  ```typescript
28
28
  import { createBrowserInspector } from "@statelyai/inspect";
29
29
  import { definePlayer } from "@xmachines/play-xstate";
30
- import { appMachine } from "./machine.js";
30
+ import type { AnyStateMachine } from "xstate";
31
+
32
+ declare const appMachine: AnyStateMachine; // your machine
31
33
 
32
34
  const { inspect } = createBrowserInspector();
33
35
 
@@ -45,6 +47,12 @@ actor.start();
45
47
  That is the whole integration. [`PlayerOptions.inspect`](../api/@xmachines/play-xstate/index/interfaces/PlayerOptions.md) is forwarded verbatim to XState's `createActor`, so anything XState accepts there is accepted here — a function, or an observer object with a `next` method:
46
48
 
47
49
  ```typescript
50
+ import { definePlayer } from "@xmachines/play-xstate";
51
+ import type { AnyStateMachine, InspectionEvent } from "xstate";
52
+
53
+ declare const machine: AnyStateMachine; // your machine
54
+ declare const sink: { write(event: InspectionEvent): void }; // your log
55
+
48
56
  // Function form — the common case
49
57
  definePlayer({ machine, options: { inspect: (event) => console.log(event.type) } });
50
58
 
@@ -61,6 +69,13 @@ Two properties of the attachment point matter in practice.
61
69
  **It is configured on the factory, not on the instance.** `definePlayer({ machine, options })` returns a factory; `options.inspect` belongs to that configuration, and every actor the factory creates reports to the same observer. The factory's per-call options bag carries `snapshot` for restoring persisted state and nothing else — there is no per-instance `inspect` override. When one factory produces several live actors (multi-user scenarios, SSR, tests), demultiplex the stream by root instead:
62
70
 
63
71
  ```typescript
72
+ import { definePlayer } from "@xmachines/play-xstate";
73
+ import type { AnyStateMachine, InspectionEvent } from "xstate";
74
+
75
+ declare const machine: AnyStateMachine; // your machine
76
+
77
+ const inspect = (event: InspectionEvent) => console.log(event.type);
78
+
64
79
  const createPlayer = definePlayer({ machine, options: { inspect } });
65
80
 
66
81
  const alice = createPlayer({ userId: "alice" });
@@ -87,7 +102,7 @@ The event types are XState's: `@xstate.actor` when an actor registers, `@xstate.
87
102
 
88
103
  `@xstate.actor` fires from _inside_ the actor's constructor. The `actorRef` it carries is a real `PlayerActor`, but a mid-construction one: `state`, `currentRoute`, `currentView` and `initialRoute` do not exist yet, and reading them there throws — XState itself refuses to read a snapshot in that window.
89
104
 
90
- ```typescript
105
+ ```typescript fragment
91
106
  const inspect = (event: InspectionEvent) => {
92
107
  if (event.type === "@xstate.actor") {
93
108
  // ❌ throws — the atoms are not assigned yet
@@ -109,11 +124,17 @@ Capture the reference during construction if you need it, and read the atoms fro
109
124
  An inspector that is only created when the user asks for it — a dev-tools toggle, a keyboard shortcut, a debug panel button — cannot be passed to `definePlayer`, which ran at module scope long before the click. Pass a forwarding function instead, so the attachment point is fixed at factory time while the destination stays swappable:
110
125
 
111
126
  ```typescript
112
- let current: ((event: InspectionEvent) => void) | undefined;
127
+ import { createBrowserInspector } from "@statelyai/inspect";
128
+ import { definePlayer } from "@xmachines/play-xstate";
129
+ import type { AnyStateMachine, InspectionEvent, Observer } from "xstate";
130
+
131
+ declare const appMachine: AnyStateMachine; // your machine
132
+
133
+ let current: Observer<InspectionEvent> | undefined;
113
134
 
114
135
  const createPlayer = definePlayer({
115
136
  machine: appMachine,
116
- options: { inspect: (event) => current?.(event) },
137
+ options: { inspect: (event) => current?.next?.(event) },
117
138
  });
118
139
 
119
140
  // Later, from a click handler
@@ -135,6 +156,10 @@ There is a catch worth knowing before you ship it: events that arrive while `cur
135
156
 
136
157
  ```typescript
137
158
  import { createWebSocketInspector } from "@statelyai/inspect";
159
+ import { definePlayer } from "@xmachines/play-xstate";
160
+ import type { AnyStateMachine } from "xstate";
161
+
162
+ declare const appMachine: AnyStateMachine; // your machine
138
163
 
139
164
  const { inspect } = createWebSocketInspector({ url: "ws://localhost:8080" });
140
165
 
@@ -155,22 +180,49 @@ pnpm --filter @xmachines/play-react-demo run dev
155
180
 
156
181
  Click **Show Inspector** in the debug panel at the bottom of the page. The inspector opens in its own window with the machine already drawn and the session's history replayed, and it keeps updating as you log in, navigate, and log out.
157
182
 
158
- The demos share one controller, `createDemoInspector()` from `@xmachines/play-actor-shared`, which each demo passes straight through to `definePlayer`:
183
+ The demos share one controller, `createDemoInspector()`, which each demo passes straight through to `definePlayer`. The controller lives in a private package of this repository, so you cannot install it. The block below shows the same wiring with the public API. It keeps each event from the creation of the actor, and it replays the events when the user opens the inspector:
159
184
 
160
185
  ```typescript
161
- const inspector = createDemoInspector();
186
+ import { createBrowserInspector } from "@statelyai/inspect";
187
+ import { definePlayer } from "@xmachines/play-xstate";
188
+ import type { AnyStateMachine, InspectionEvent, Observer } from "xstate";
189
+
190
+ declare const appMachine: AnyStateMachine; // your machine
191
+
192
+ const buffer: InspectionEvent[] = [];
193
+ let current: Observer<InspectionEvent> | undefined;
162
194
 
163
195
  const actor = definePlayer({
164
- machine: authMachine,
165
- options: { inspect: inspector.inspect },
196
+ machine: appMachine,
197
+ options: {
198
+ inspect: (event) => {
199
+ if (current) {
200
+ current.next?.(event);
201
+ return;
202
+ }
203
+ // Keep the last 500 events while nobody opens the inspector. A long session drops
204
+ // its oldest events, also the registration of the root actor, and the inspector
205
+ // then has no machine to draw. The demo controller pins each registration for
206
+ // that reason, and it costs more code.
207
+ buffer.push(event);
208
+ if (buffer.length > 500) buffer.shift();
209
+ },
210
+ },
166
211
  })();
167
212
  actor.start();
168
213
 
169
- // The debug panel's button
170
- <button onClick={() => inspector.show()}>Show Inspector</button>;
214
+ // The click handler of the "Show Inspector" button of the debug panel
215
+ export function showInspector() {
216
+ if (current) return;
217
+ // The inspector holds these events until its window connects, and it drops the oldest
218
+ // past `maxDeferredEvents`. The limit leaves room for the events of the handshake, so
219
+ // the inspector keeps every event of the replay.
220
+ current = createBrowserInspector({ maxDeferredEvents: 1000 }).inspect;
221
+ for (const event of buffer.splice(0)) current.next?.(event);
222
+ }
171
223
  ```
172
224
 
173
- The controller answers the late-opening problem from the previous section: it buffers serialized events from actor creation, pins the registration of every live root so it can never roll out of the bounded buffer, and flushes those buffers when the inspector window completes its handshake. Several machines can be alive together — one for each document a host has open — and the handshake replays each of them. That is a demo trade-off rather than a general recommendation — every transition pays serialization whether or not anyone ever opens the inspector — but it is what makes the button work at any point in a session. The shared package's own README, at `packages/play-actor/examples/shared/README.md` in this repository, documents the design in full.
225
+ The demo controller answers the late-opening problem from the previous section: it buffers serialized events from actor creation, pins the registration of every live root so it can never roll out of the bounded buffer, and flushes those buffers when the inspector window completes its handshake. Several machines can be alive together — one for each document a host has open — and the handshake replays each of them. That is a demo trade-off rather than a general recommendation — every transition pays serialization whether or not anyone ever opens the inspector — but it is what makes the button work at any point in a session. The shared package's own README, at `packages/play-actor/examples/shared/README.md` in this repository, documents the design in full.
174
226
 
175
227
  ---
176
228
 
@@ -179,6 +231,14 @@ The controller answers the late-opening problem from the previous section: it bu
179
231
  **Cost.** Inspection serializes events. A `console.log` observer is cheap; a browser inspector posting every transition, and any buffering scheme layered on top, is not. Gate the inspector behind a development-only branch, and prefer letting the bundler drop it entirely:
180
232
 
181
233
  ```typescript
234
+ /// <reference types="vite/client" />
235
+ import { createBrowserInspector } from "@statelyai/inspect";
236
+ import { definePlayer } from "@xmachines/play-xstate";
237
+ import type { AnyStateMachine } from "xstate";
238
+
239
+ declare const appMachine: AnyStateMachine; // your machine
240
+
241
+ // `import.meta.env.DEV` is the development flag of Vite
182
242
  const options = import.meta.env.DEV ? { inspect: createBrowserInspector().inspect } : {};
183
243
 
184
244
  const createPlayer = definePlayer({ machine: appMachine, options });
package/guides/routing.md CHANGED
@@ -55,8 +55,11 @@ A **modifier** follows a param, a wildcard or a group:
55
55
  | `*` | zero or more | matches |
56
56
 
57
57
  ```ts
58
+ import { createMachine } from "xstate";
59
+
58
60
  const machine = createMachine({
59
61
  id: "app",
62
+ initial: "home",
60
63
  states: {
61
64
  home: { meta: { route: "/" } },
62
65
  profile: { meta: { route: "/profile/:userId" } },
@@ -184,7 +187,7 @@ CAUTION: a parallel state loses the position of its other regions when it is the
184
187
 
185
188
  A state whose navigation must re-enter the domain too declares the flag for itself. Here the root runs its `exit` and `entry` actions on each navigation to `dashboard`:
186
189
 
187
- ```ts
190
+ ```ts fragment
188
191
  states: {
189
192
  dashboard: { meta: { route: { path: "/dashboard", reenter: true } } },
190
193
  },
@@ -33,7 +33,6 @@ const authSetup = setup({
33
33
  types: {
34
34
  context: {} as { username: string | null },
35
35
  events: {} as { type: "auth.login"; username: string } | { type: "auth.logout" },
36
- input: {} as undefined,
37
36
  },
38
37
  });
39
38
 
@@ -47,7 +46,8 @@ const authMachine = authSetup.createMachine({
47
46
  "auth.login": {
48
47
  target: "authenticated",
49
48
  actions: authSetup.assign({
50
- username: ({ event }) => event.username,
49
+ username: ({ event }) =>
50
+ event.type === "auth.login" ? event.username : null,
51
51
  }),
52
52
  },
53
53
  },
@@ -78,6 +78,7 @@ XMachines extends XState's `meta` field on each state node. This is where routin
78
78
 
79
79
  ```typescript
80
80
  import { typedSpec } from "@xmachines/play-view";
81
+ import { setup } from "xstate";
81
82
 
82
83
  const appMachine = setup({/* ... */}).createMachine({
83
84
  id: "app",
@@ -126,6 +127,8 @@ const appMachine = setup({/* ... */}).createMachine({
126
127
 
127
128
  The machine's whole context is available to every view through the **`/context` projection**: the derived spec's `state` carries `context: <machine context>`. Specs read it with ordinary state expressions — `{ $state: "/context/username" }` in props, `visible` conditions, or `repeat.statePath`. The subtree is **read-only**: context changes only through machine events, and a `$bindState`/`setState` write under `/context` throws. URL data lives at its own paths (`/context/params/…`, `/context/query/…`, written into context by `formatPlayRouteTransitions`), so a URL param can never shadow a machine-owned field. When validating specs with tools like `validateSpec`, validate the **derived** view (`actor.currentView.get()`) — its `state` honestly describes the store contents — not the raw `meta.view`. A context change re-emits the view with the same `viewKey`; providers respond by refreshing `/context` in the live store, not by remounting the UI.
128
129
 
130
+ **Give each state its own id, and do not use an array index as an id.** XState does not check that the ids of the states are unique, and a repeated id makes a `#id` target name two states. XMachines keys the route, the view and its store on the id of a state, so two states that share an id share one route entry, one store, and one key. An array index is a whole number from 0 to 2³² − 2 with no leading zero, such as `"42"`. JavaScript lists such a key first in every object that is keyed on ids, so the route of its state loses its place in the branch. [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) writes one warning for each machine that breaks these rules.
131
+
129
132
  **The machine is the single source of truth for both routing and views.** There is no separate route configuration file. There is no switch statement in a component deciding what to render based on the URL. The state machine encodes all of that.
130
133
 
131
134
  ### A layout and its pages: `outlets`
@@ -133,6 +136,11 @@ The machine's whole context is available to every view through the **`/context`
133
136
  Without outlets, the deepest active state that declares a view wins, and a view on a parent state stays off the screen. Declare `outlets` in the view of the parent to show the parent view AND the view of its active child. Each outlet names an element of the parent view, and the view of the child goes into that element:
134
137
 
135
138
  ```typescript
139
+ import { typedSpec, type ViewMeta } from "@xmachines/play-view";
140
+ import { setup } from "xstate";
141
+
142
+ declare const menuView: ViewMeta, homeView: ViewMeta, searchView: ViewMeta; // your views
143
+
136
144
  const shell = typedSpec({
137
145
  root: "shell",
138
146
  state: { collapsed: false },
@@ -166,11 +174,11 @@ const appMachine = setup({/* ... */}).createMachine({
166
174
  - **The key of an outlet** is the key of a child state in `states`, or `"*"` for each active child that has no outlet of its own. A child with neither stays off the screen.
167
175
  - **A compound state** fills one outlet with its active child. **A parallel state** fills one outlet for each region, in the order of `states`.
168
176
  - **`slot`** names a named slot of the element. Omit it to append the child view to the `children` of the element. The component of the element renders the slot, as the renderer of your framework describes.
169
- - **The view of a child** is the deepest view in its active subtree, and a child view can declare `outlets` of its own for a nested layout. A parallel state without outlets shows the region of the URL when that region has a view, and its first region that has a view otherwise.
177
+ - **The view of a child** is the deepest view in its active subtree, and a child view can declare `outlets` of its own for a nested layout. A parallel state without outlets shows the region of the routes when that region has a view, and its first region that has a view otherwise. The region of the routes keeps the screen while it sits in a state without a route of its own.
170
178
 
171
179
  The derived spec holds the elements of every composed view. The keys of the outer view stay as you wrote them, and each key of a child view gets the id of its state as a prefix, for example `app.page.search/root`, so two views never collide.
172
180
 
173
- The `viewKey` of a composed view is the id of the outermost state that declares `outlets`. A change of the page therefore keeps the store of the layout: the `collapsed` value in the example above does not change. The first time that a page shows, the provider writes the keys of its authored `state` that the store does not hold. A page that comes back finds the values that it left. All the pages of one layout share one store, so two pages that declare the same key share one value: give each page its own keys. When two composed views declare the same state key, the outer view wins, and the library writes a warning.
181
+ The `viewKey` of a composed view is the id of the outermost state that declares `outlets`. A change of the page therefore keeps the store of the layout: the `collapsed` value in the example above does not change. The first time that a page shows, the provider writes the keys of its authored `state` that the store does not hold. A page that comes back finds the values that it left. All the pages of one layout share one store, so two pages that declare the same key share one value: give each page its own keys. When two composed views declare the same state key, the outer view wins. The library writes one warning for each layout that names every key that two of its views declare, also for two pages that are never on the screen together.
174
182
 
175
183
  An outlet that names an element that its view does not hold throws `InvalidViewOutletError`. The actor reports it through its `onError` option, and it keeps the last good view.
176
184
 
@@ -198,7 +206,7 @@ A URL path has one hierarchy, and it cannot hold the branches of two regions. Ke
198
206
 
199
207
  For routing to work, the machine must respond to `play.route` events (sent by router bridges when the user navigates). Writing these transitions by hand is mechanical:
200
208
 
201
- ```typescript
209
+ ```typescript fragment
202
210
  // Without formatPlayRouteTransitions — verbose and repetitive
203
211
  states: {
204
212
  home: {
@@ -218,6 +226,7 @@ states: {
218
226
 
219
227
  ```typescript
220
228
  import { formatPlayRouteTransitions } from "@xmachines/play-xstate/routing";
229
+ import { setup } from "xstate";
221
230
 
222
231
  const appMachine = setup({/* ... */}).createMachine(
223
232
  formatPlayRouteTransitions({
@@ -234,7 +243,7 @@ const appMachine = setup({/* ... */}).createMachine(
234
243
 
235
244
  [`formatPlayRouteTransitions`](../api/@xmachines/play-xstate/with-routing/functions/formatPlayRouteTransitions.md) inspects all state nodes with a `meta.route` and generates the corresponding `play.route` guard transitions. The machine's context must include `params` and `query` fields (populated by the router bridge when params or query strings are present):
236
245
 
237
- ```typescript
246
+ ```typescript fragment
238
247
  types: {
239
248
  context: {} as {
240
249
  params: Record<string, string>;
@@ -252,7 +261,12 @@ types: {
252
261
  Guards are the mechanism by which the actor controls whether a transition occurs. They are pure functions of `{ context, event }` that return a boolean.
253
262
 
254
263
  ```typescript
264
+ import { setup } from "xstate";
265
+
255
266
  const authSetup = setup({
267
+ types: {
268
+ context: {} as { isAuthenticated: boolean; role: "user" | "admin" },
269
+ },
256
270
  guards: {
257
271
  isAuthenticated: ({ context }) => context.isAuthenticated,
258
272
  isAdmin: ({ context }) => context.role === "admin",
@@ -280,7 +294,7 @@ Each combinator resolves a guard NAME against the `guards` of `setup()`, so a na
280
294
 
281
295
  Context is the machine's persistent data store. It survives transitions and can be read and updated by actions:
282
296
 
283
- ```typescript
297
+ ```typescript fragment
284
298
  // Context is defined in setup({ types })
285
299
  types: {
286
300
  context: {} as {
@@ -307,22 +321,30 @@ Context is accessed in guards, actions, and when computing routes or views. It i
307
321
  A snapshot is a point-in-time serialisation of the machine's current state and context. XState produces snapshots in a JSON-compatible format:
308
322
 
309
323
  ```typescript
324
+ import { definePlayer } from "@xmachines/play-xstate";
325
+ import type { AnyStateMachine } from "xstate";
326
+
327
+ declare const machine: AnyStateMachine; // your machine
328
+
329
+ const createPlayer = definePlayer({ machine });
330
+ const actor = createPlayer();
331
+ actor.start();
332
+
310
333
  const snapshot = actor.getSnapshot();
311
334
  // snapshot.value → current state node name, e.g. "dashboard"
312
335
  // snapshot.context → current context object
313
336
 
314
- // Stop and serialize
337
+ // Serialize and stop
338
+ const saved = JSON.stringify(actor.getPersistedSnapshot());
315
339
  actor.stop();
316
- const saved = JSON.stringify(snapshot);
317
340
 
318
341
  // Restore
319
- const restored = JSON.parse(saved);
320
- const actor = createPlayer(undefined, { snapshot: restored });
321
- actor.start();
342
+ const restored = createPlayer(undefined, { snapshot: JSON.parse(saved) });
343
+ restored.start();
322
344
  // Actor resumes from where it left off
323
345
  ```
324
346
 
325
- [`definePlayer`](../api/@xmachines/play-xstate/index/functions/definePlayer.md) accepts an optional `restore` argument for this purpose. Restoration is useful for server-side rendering (hydrate with the server's snapshot), session persistence (resume after page reload), and testing (start from a known mid-flow state).
347
+ The factory that [`definePlayer`](../api/@xmachines/play-xstate/index/functions/definePlayer.md) returns accepts an optional second argument, `{ snapshot }`, for this purpose. Serialize the result of `getPersistedSnapshot()`, and not of `getSnapshot()`: XState restores from the persisted form. Restoration is useful for server-side rendering (hydrate with the server's snapshot), session persistence (resume after page reload), and testing (start from a known mid-flow state).
326
348
 
327
349
  ---
328
350
 
package/guides/views.md CHANGED
@@ -68,6 +68,9 @@ The view is an OPTIONAL capability of the actor. Compose it with `withView` of [
68
68
  ```ts
69
69
  import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
70
70
  import { withView } from "@xmachines/play-xstate/view";
71
+ import type { AnyStateMachine } from "xstate";
72
+
73
+ declare const machine: AnyStateMachine; // your machine
71
74
 
72
75
  const actor = definePlayer({ machine, actor: compose(PlayerActor, withView) })();
73
76
  actor.start();
@@ -81,7 +84,7 @@ The actor then holds `currentView`, a `ReadonlyAtom<PlaySpec | null>`. An applic
81
84
 
82
85
  **The deepest active state that declares a view supplies it**, unless a parent composes it. A state that declares no view shows the view of its nearest ancestor that declares one. An ancestor view without `outlets` does not show, because the view of its descendant replaces it:
83
86
 
84
- ```ts
87
+ ```ts fragment
85
88
  states: {
86
89
  dashboard: {
87
90
  meta: { view: dashboardView }, // shows in dashboard.overview
@@ -96,13 +99,13 @@ states: {
96
99
 
97
100
  When no active state declares a view, `currentView` holds `null`, and the renderer shows its `fallback` content.
98
101
 
99
- A **parallel** state follows the same region as the route derivation: the first region whose active states declare a `meta.route`, or the first region when no region does. The view on the screen therefore belongs to the region of the URL. When that region holds no view, the view comes from another active region, so one region can own the URL and another region can own the view. Keep the routes in one region: the [State Machines](state-machines.md#a-layout-and-its-pages-outlets) guide shows what a second routed region does to the URL.
102
+ A **parallel** state follows the same region as the route derivation: the first region whose active states declare a `meta.route`, else the first region that declares a route in any state, else the first region. A region that owns the routes therefore keeps the screen while it sits in a state without a route, such as a load. The view on the screen therefore belongs to the region of the URL. When that region holds no view, the view comes from another active region, so one region can own the URL and another region can own the view. Keep the routes in one region: the [State Machines](state-machines.md#a-layout-and-its-pages-outlets) guide shows what a second routed region does to the URL.
100
103
 
101
104
  ### A layout and its pages: `outlets`
102
105
 
103
106
  A parent view that declares `outlets` shows itself AND the view of its active child. Each outlet names an element of the parent view, and the view of the child goes into that element:
104
107
 
105
- ```ts
108
+ ```ts fragment
106
109
  const shell = typedSpec({
107
110
  root: "shell",
108
111
  state: { collapsed: false },
@@ -130,6 +133,7 @@ states: {
130
133
  - `slot` names a named slot of the element. Omit it, and the renderer appends the child view to the `children` of the element.
131
134
  - The view of a child is the deepest view below it. A child view can declare `outlets` of its own, for a nested layout.
132
135
  - An outlet that names an element that its view does not hold throws `InvalidViewOutletError`. The actor reports it through `onError`, and it keeps the last valid view.
136
+ - The keys of the outer view carry no prefix, and each key of a child view gets the id of its state and a `/` as a prefix. A key of the outer view such as `"page/root"` equals the key of the element `root` of the child state `page`, and the composition throws `ViewElementKeyCollisionError`. Do not start a key of the outer view with the id of a state and a `/`.
133
137
 
134
138
  The derived spec is ONE flat spec. The keys of the outer view stay as you wrote them. Each key of a child view gets the id of its state as a prefix: the `root` element of the view of the state `app.search` becomes `app.search/root`. Two views therefore never collide. The [State Machines](state-machines.md#a-layout-and-its-pages-outlets) guide shows a parallel layout with a named slot.
135
139
 
@@ -149,7 +153,7 @@ derived state = { ...meta.view.state, context: <the machine context> }
149
153
 
150
154
  A spec reads the context through the ordinary state grammar of json-render. The same path works in a prop, in a `visible` condition, and in `repeat.statePath`:
151
155
 
152
- ```ts
156
+ ```ts fragment
153
157
  elements: {
154
158
  greeting: { type: "Text", props: { text: { $state: "/context/username" } }, children: [] },
155
159
  tasks: {
@@ -189,7 +193,7 @@ Domain state is the state of the application. Each change of it is an event, so
189
193
 
190
194
  This login form uses both. The field binds to `/username`, and the submit sends the value to the machine:
191
195
 
192
- ```ts
196
+ ```ts fragment
193
197
  view: typedSpec({
194
198
  root: "form",
195
199
  state: { username: "" },
@@ -215,10 +219,26 @@ Keep high-frequency data in the ephemeral state or in a child actor, and not in
215
219
  A component emits a named event of json-render, such as `submit` or `press`. The `on` field of its element maps that name to an ACTION, with params that the renderer resolves from the store. The registry holds the handler of each action, and a handler of a domain action sends a machine event:
216
220
 
217
221
  ```ts
222
+ import { defineCatalog } from "@xmachines/json-render-core";
223
+ import { defineRegistry, schema, type ComponentFn } from "@xmachines/play-dom";
224
+ import type { ViewActor } from "@xmachines/play-view";
225
+ import { z } from "zod";
226
+
227
+ declare const actor: ViewActor<unknown, { type: "auth.login"; username: string }>;
228
+
229
+ const catalog = defineCatalog(schema, {
230
+ components: { Login: { props: z.object({ username: z.string() }) } },
231
+ actions: { login: { params: z.object({ username: z.string() }) } },
232
+ });
233
+
234
+ declare const Login: ComponentFn<typeof catalog, "Login">; // your component
235
+
218
236
  const registryResult = defineRegistry(catalog, {
219
237
  components: { Login },
220
238
  actions: {
221
- login: async ({ username }) => actor.send({ type: "auth.login", username }),
239
+ login: async (params) => {
240
+ if (params) actor.send({ type: "auth.login", username: params.username });
241
+ },
222
242
  },
223
243
  });
224
244
  ```
@@ -227,7 +247,7 @@ The guards of the machine then decide. The renderer changes no state of the mach
227
247
 
228
248
  The renderer implements four built-in actions over the ephemeral state: `setState`, `pushState`, `removeState` and `validateForm`. They need no handler in the registry. An `on` entry can hold an array of bindings, and the renderer runs them in order. For example, it sends the event, and then it clears the draft:
229
249
 
230
- ```ts
250
+ ```ts fragment
231
251
  on: {
232
252
  press: [
233
253
  { action: "addTask", params: { title: { $state: "/newTaskTitle" } } },
@@ -255,18 +275,18 @@ A renderer holds one view store for each view, and the `viewKey` decides its lif
255
275
 
256
276
  With the same `viewKey`, every renderer keeps the DOM nodes, the focus and the ephemeral state. A context change therefore updates a list under a field that has the focus, and the draft in the field stays.
257
277
 
258
- With a new `viewKey`, the ephemeral state starts again from `spec.state`. Two sibling states that each declare a view therefore reset a draft on each transition between them, also when their two specs are equal.
278
+ With a new `viewKey`, the ephemeral state starts again from `spec.state`, and every renderer builds the view again. The state that a component keeps for itself, such as the text of an unbound input, goes with the old view. Two sibling states that each declare a view therefore reset a draft on each transition between them, also when their two specs are equal.
259
279
 
260
280
  A parent keeps the ephemeral state across a move between its children in one of two ways:
261
281
 
262
282
  - **Declare the view on the parent**, and no view on the children. The `viewKey` stays the id of the parent.
263
283
  - **Declare `outlets` on the parent.** The `viewKey` stays the id of the parent, and each child still shows its own view. A change of the page keeps the store of the layout, so the `collapsed` value of the [layout above](#a-layout-and-its-pages-outlets) does not change.
264
284
 
265
- In a composed view, all the views of one layout share ONE store. The first time that a page shows, the renderer writes each key of its authored `state` that the store does not hold. A page that comes back finds the values that it left. Two pages that declare the same key therefore share one value: give each page its own keys. When two composed views declare the same key, the outer view wins, and a warning names the key.
285
+ In a composed view, all the views of one layout share ONE store. The first time that a page shows, the renderer writes each key of its authored `state` that the store does not hold. A page that comes back finds the values that it left. Two pages that declare the same key therefore share one value: give each page its own keys. When two composed views declare the same key, the outer view wins. play-xstate reads the states of the machine one time, and it writes one warning for each layout that names every key that two of its views declare.
266
286
 
267
287
  `currentView` also emits only on a real change of the view on the screen. An event that changes no context field and moves to no other view keeps the previous reference, and no subscriber runs. The gate compares the top-level fields of the context. It does not enter a value, so a new object in a field emits again, also when its contents are equal.
268
288
 
269
- In the **controlled mode**, you give the provider a `store`. The provider then ignores `spec.state`, and you own the seed and the lifetime of that store. The renderer still owns `/context`, and it refreshes the subtree in your store on each emission.
289
+ In the **controlled mode**, you give the provider a `store`. The provider then ignores `spec.state`, and you own the seed and the lifetime of that store. The renderer still owns `/context`, and it refreshes the subtree in your store on each emission. The tree lives as long as its store, so a new `viewKey` keeps the tree in the controlled mode, and a new store builds it again.
270
290
 
271
291
  ---
272
292
 
@@ -274,16 +294,16 @@ In the **controlled mode**, you give the provider a `store`. The provider then i
274
294
 
275
295
  A failure of the DERIVATION stays inside the actor. `currentView` catches it, it keeps the last valid view, and it reports the error to the `onError` hook of the actor in a microtask. The transition continues for every other observer.
276
296
 
277
- A failure of the RENDER stays inside the provider. When a component throws, or the store does not resolve, the provider shows its `fallback` and it calls its own `onError` prop:
297
+ A failure of the RENDER stays inside the provider. When a component throws, when the store does not resolve, or when the root of the view fails, the provider shows its `fallback` and it calls its own `onError` prop:
278
298
 
279
299
  | Renderer | The `onError` prop of the provider |
280
300
  | ----------------------------------------------------------------- | ---------------------------------- |
281
- | [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | `(error, info, reset) => void` |
301
+ | [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | `(error, reset, info) => void` |
282
302
  | the four other renderers | `(error, reset) => void` |
283
303
 
284
304
  The provider reports one failure one time for one set of inputs — the actor, the view and the store — and not one time for each render. A new emission, or a call of `reset`, makes the next failure report again. Without `onError`, the provider writes the failure to `console.error`, so that no failure is silent. A handler that throws does not break the containment: the provider writes that failure to `console.error` too.
285
305
 
286
- `onRenderError` receives the failure of one catalog component, with the name of the component, and it replaces every handler of `defineRegistry`.
306
+ `onRenderError` receives each failure that json-render reports, with `(error, name, info)`, and it replaces every handler of `defineRegistry`. `info.kind` names the failure: a catalog component that throws (`"element"`), a prop or a `visible` condition of a child (`"props"`, `"visible"`), an action chain or a watch chain (`"action"`, `"watch"`), or the root (`"root"`). A failure of the ROOT — its component, a prop, or its `visible` condition — leaves no view on the screen. json-render gives it to no error boundary of the host, so each of the five providers contains it as a failure of the view: it shows its `fallback`, it calls `onError` one time, and the next view renders again. `onRenderError` also receives it, with the kind `"root"`. A failure below the root reaches `onRenderError` alone, and the rest of the view stays. Without a handler of the host, the provider writes one console line for a failure of the root, and not two.
287
307
 
288
308
  ---
289
309
 
@@ -319,7 +339,7 @@ A provider takes a `ViewActor`: the actor contract and the `Viewable` capability
319
339
 
320
340
  Each one exports `schema` for `defineCatalog`, and `defineRegistry` for its own components. `PlayUIProvider` takes the `actor`, the `registryResult`, and the optional `store`, `fallback`, `onError` and `onRenderError`. The [Getting Started](getting-started.md#connecting-a-view-renderer) guide shows a complete mount for each framework.
321
341
 
322
- [`@xmachines/play-view`](../api/@xmachines/play-view/README.md) holds the part that the five share: the store lifecycle, the `/context` guard and the report rules. A shared contract suite runs the same scenarios against each renderer, so the five agree on what a viewer sees.
342
+ [`@xmachines/play-view`](../api/@xmachines/play-view/README.md) holds the part that the five share: the view session, which resolves the store of each view outside a render, the `/context` guard and the report guard. A shared contract suite runs the same scenarios against each renderer, so the five agree on what a viewer sees.
323
343
 
324
344
  ---
325
345
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xmachines/docs",
3
- "version": "6.1.0",
3
+ "version": "7.0.0",
4
4
  "description": "Documentation for XMachines",
5
5
  "keywords": [
6
6
  "documentation",
@@ -56,13 +56,13 @@
56
56
  },
57
57
  "devDependencies": {
58
58
  "@testing-library/jest-dom": "^7.0.1",
59
- "@types/node": "^26.6.2",
60
- "oxfmt": "^0.70.0",
61
- "oxlint": "^1.85.0",
59
+ "@types/node": "^26.6.4",
60
+ "oxfmt": "^0.71.0",
61
+ "oxlint": "^1.86.0",
62
62
  "typedoc": "^0.28.20",
63
63
  "typedoc-plugin-llms-txt": "^0.1.2",
64
- "typedoc-plugin-markdown": "^4.13.0",
65
- "vitest": "^5.0.1"
64
+ "typedoc-plugin-markdown": "^4.13.1",
65
+ "vitest": "^5.0.3"
66
66
  },
67
67
  "engines": {
68
68
  "node": ">=24.0.0"
package/rfc/play.md CHANGED
@@ -260,7 +260,7 @@ Wraps XState v5 to satisfy the `PlayActor` contract. Provides the primary API fo
260
260
  - Support snapshot restore for resumable sessions
261
261
  - Provide XState DevTools compatibility
262
262
 
263
- ```ts
263
+ ```ts fragment
264
264
  import type { AnyStateMachine, InputFrom } from "xstate";
265
265
 
266
266
  interface PlayerConfig<TMachine extends AnyStateMachine> {
@@ -380,7 +380,7 @@ Each view renderer provides a `PlayRenderer` component that passively observes t
380
380
 
381
381
  **[`@xmachines/play-react`](../api/@xmachines/play-react/README.md) exports (representative):**
382
382
 
383
- ```ts
383
+ ```ts fragment
384
384
  // Batteries-included composite — standard entry point
385
385
  // Props: actor, registryResult, store?, fallback?, onError?, onRenderError?,
386
386
  // validationFunctions?, navigate?, functions?
@@ -438,13 +438,18 @@ The original RFC proposed an `@xmachines/play-ui` package for this purpose. The
438
438
  Defines the **UI vocabulary** — available components and their prop schemas. No framework code.
439
439
 
440
440
  ```ts
441
- import { defineCatalog, z } from "@xmachines/json-render-core";
441
+ import { defineCatalog } from "@xmachines/json-render-core";
442
+ import { schema } from "@xmachines/json-render-react/schema";
443
+ import { z } from "zod";
442
444
 
443
- export const catalog = defineCatalog({
445
+ export const catalog = defineCatalog(schema, {
444
446
  components: {
445
447
  Dashboard: { props: z.object({ title: z.string() }) },
446
448
  Metric: { props: z.object({ value: z.number(), label: z.string() }) },
447
449
  },
450
+ actions: {
451
+ submit: { description: "Submit the form" },
452
+ },
448
453
  });
449
454
  ```
450
455
 
@@ -454,12 +459,17 @@ Defines **Logic**. No framework code. No routing library imports.
454
459
 
455
460
  ```ts
456
461
  import { setup } from "xstate";
457
- import { definePlayer } from "@xmachines/play-xstate";
462
+ import { compose, definePlayer, PlayerActor } from "@xmachines/play-xstate";
463
+ import { withRouting } from "@xmachines/play-xstate/routing";
464
+ import { withView } from "@xmachines/play-xstate/view";
465
+ import { typedSpec } from "@xmachines/play-view";
458
466
 
459
467
  export const machine = setup({/* types, guards, actions */}).createMachine({
468
+ id: "dashboard",
460
469
  initial: "overview",
461
470
  states: {
462
471
  overview: {
472
+ id: "overview",
463
473
  meta: {
464
474
  route: "/dashboard",
465
475
  view: typedSpec({
@@ -478,20 +488,27 @@ export const machine = setup({/* types, guards, actions */}).createMachine({
478
488
  },
479
489
  });
480
490
 
481
- // definePlayer returns a factory function
482
- export const createDashboard = definePlayer({ machine });
491
+ // definePlayer returns a factory function. The router and the renderer need both capabilities
492
+ export const createDashboard = definePlayer({
493
+ machine,
494
+ actor: compose(PlayerActor, withRouting, withView),
495
+ });
483
496
  ```
484
497
 
485
498
  ### 6.3 Application (`App.tsx`)
486
499
 
487
500
  Binds Logic to a View Renderer and Router Adapter.
488
501
 
489
- ```tsx
490
- import { createDashboard, machine } from "./features/dashboard/player";
491
- import { catalog } from "./catalog";
502
+ ```tsx fragment
503
+ import { createRootRoute, createRouter } from "@tanstack/react-router";
504
+ import { createDashboard, machine } from "./dashboard.player.js";
505
+ import { catalog } from "./catalog.js";
492
506
  import { PlayUIProvider, PlayRenderer, defineRegistry } from "@xmachines/play-react";
493
- import { TanStackReactRouterBridge } from "@xmachines/play-tanstack-react-router";
494
- import { extractMachineRoutes, createRouteMap } from "@xmachines/play-router/xstate";
507
+ import {
508
+ createRouteMapFromTree,
509
+ TanStackReactRouterBridge,
510
+ } from "@xmachines/play-tanstack-react-router";
511
+ import { extractMachineRoutes } from "@xmachines/play-router/xstate";
495
512
 
496
513
  // 1. Create the actor
497
514
  const actor = createDashboard();
@@ -516,7 +533,8 @@ const routeTree = extractMachineRoutes(machine);
516
533
  const routeMap = createRouteMapFromTree(routeTree);
517
534
 
518
535
  // 4. Connect router adapter (router, actor, routeMap)
519
- const bridge = new TanStackReactRouterBridge(tanstackRouter, actor, routeMap);
536
+ const router = createRouter({ routeTree: createRootRoute() });
537
+ const bridge = new TanStackReactRouterBridge(router, actor, routeMap);
520
538
  bridge.connect();
521
539
 
522
540
  // 5. Render — PlayUIProvider is the batteries-included composite; PlayRenderer is the zero-prop leaf
@@ -1,20 +0,0 @@
1
- [API](../../../../README.md) / [@xmachines/play-view](../../README.md) / [index](../README.md) / createFailureLatch
2
-
3
- # Function: createFailureLatch()
4
-
5
- ```ts
6
- function createFailureLatch(): FailureLatch;
7
- ```
8
-
9
- Defined in: [packages/play-view/src/failure-latch.ts:202](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v6.1.0/packages/play-view/src/failure-latch.ts#L202)
10
-
11
- Makes a [FailureLatch](../interfaces/FailureLatch.md).
12
-
13
- The latch holds the three inputs BESIDE the flag. Clearing on each emission would be
14
- enough for a provider that can hook every emission, and the identity check covers the
15
- one that cannot: a render that runs again with nothing changed reports nothing, whether
16
- or not the provider noticed that it ran.
17
-
18
- ## Returns
19
-
20
- [`FailureLatch`](../interfaces/FailureLatch.md)
@@ -1,25 +0,0 @@
1
- [API](../../../../README.md) / [@xmachines/play-view](../../README.md) / [index](../README.md) / sameViewInputs
2
-
3
- # Function: sameViewInputs()
4
-
5
- ```ts
6
- function sameViewInputs(a, b): boolean;
7
- ```
8
-
9
- Defined in: [packages/play-view/src/failure-latch.ts:45](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v6.1.0/packages/play-view/src/failure-latch.ts#L45)
10
-
11
- Answers whether two sets of inputs are the SAME attempt.
12
-
13
- Identity, and not a deep compare: a provider holds the references that it rendered, and
14
- a new spec object is a new attempt even when it holds equal fields.
15
-
16
- ## Parameters
17
-
18
- | Parameter | Type |
19
- | --------- | ------------------------------------------- |
20
- | `a` | [`ViewInputs`](../interfaces/ViewInputs.md) |
21
- | `b` | [`ViewInputs`](../interfaces/ViewInputs.md) |
22
-
23
- ## Returns
24
-
25
- `boolean`