@xmachines/docs 6.0.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 (604) hide show
  1. package/README.md +9 -8
  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 +6 -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 +17 -5
  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 +138 -60
  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 +79 -23
  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 +12 -15
  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 -14
  221. package/api/@xmachines/play-solid/functions/defineRegistry.md +5 -5
  222. package/api/@xmachines/play-solid/functions/useActor.md +1 -1
  223. package/api/@xmachines/play-solid/functions/useBoundProp.md +8 -5
  224. package/api/@xmachines/play-solid/functions/useFieldValidation.md +6 -4
  225. package/api/@xmachines/play-solid/functions/usePlayView.md +1 -1
  226. package/api/@xmachines/play-solid/functions/useStateBinding.md +5 -3
  227. package/api/@xmachines/play-solid/functions/useStateValue.md +5 -3
  228. package/api/@xmachines/play-solid/interfaces/ActorProviderProps.md +10 -10
  229. package/api/@xmachines/play-solid/interfaces/ComponentContext.md +9 -8
  230. package/api/@xmachines/play-solid/interfaces/PlayUIProviderProps.md +13 -13
  231. package/api/@xmachines/play-solid/interfaces/RenderErrorInfo.md +16 -0
  232. package/api/@xmachines/play-solid/interfaces/RendererProps.md +7 -7
  233. package/api/@xmachines/play-solid/interfaces/ViewContextValue.md +5 -5
  234. package/api/@xmachines/play-solid/type-aliases/AnyPlayActor.md +1 -1
  235. package/api/@xmachines/play-solid/type-aliases/OnRenderError.md +27 -0
  236. package/api/@xmachines/play-solid/type-aliases/RenderErrorKind.md +21 -0
  237. package/api/@xmachines/play-solid/variables/ActorContext.md +1 -1
  238. package/api/@xmachines/play-solid/variables/ActorProvider.md +17 -3
  239. package/api/@xmachines/play-solid/variables/PlayRenderer.md +1 -1
  240. package/api/@xmachines/play-solid/variables/PlayUIProvider.md +1 -1
  241. package/api/@xmachines/play-solid/variables/schema.md +35 -54
  242. package/api/@xmachines/play-solid-router/README.md +22 -6
  243. package/api/@xmachines/play-solid-router/classes/RouteMap.md +4 -4
  244. package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +8 -8
  245. package/api/@xmachines/play-solid-router/functions/createPlayRouterProvider.md +1 -1
  246. package/api/@xmachines/play-solid-router/interfaces/PlayActor.md +3 -3
  247. package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +7 -7
  248. package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +9 -9
  249. package/api/@xmachines/play-solid-router/interfaces/RoutableActor.md +4 -4
  250. package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +4 -4
  251. package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +3 -3
  252. package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +3 -3
  253. package/api/@xmachines/play-solid-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
  254. package/api/@xmachines/play-solid-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  255. package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +4 -4
  256. package/api/@xmachines/play-solid-router/variables/PlayRouterProvider.md +1 -1
  257. package/api/@xmachines/play-svelte/README.md +18 -10
  258. package/api/@xmachines/play-svelte/functions/defineRegistry.md +3 -4
  259. package/api/@xmachines/play-svelte/functions/getActorContext.md +1 -1
  260. package/api/@xmachines/play-svelte/functions/getPlayViewContext.md +1 -1
  261. package/api/@xmachines/play-svelte/functions/setActorContext.md +1 -1
  262. package/api/@xmachines/play-svelte/interfaces/ActorProviderProps.md +12 -12
  263. package/api/@xmachines/play-svelte/interfaces/BaseComponentProps.md +10 -8
  264. package/api/@xmachines/play-svelte/interfaces/ComponentContext.md +10 -8
  265. package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +8 -8
  266. package/api/@xmachines/play-svelte/interfaces/DefineRegistryResult.md +15 -0
  267. package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +14 -14
  268. package/api/@xmachines/play-svelte/interfaces/RenderErrorInfo.md +16 -0
  269. package/api/@xmachines/play-svelte/interfaces/ViewContextValue.md +5 -5
  270. package/api/@xmachines/play-svelte/type-aliases/AnyPlayActor.md +1 -1
  271. package/api/@xmachines/play-svelte/type-aliases/OnRenderError.md +27 -0
  272. package/api/@xmachines/play-svelte/type-aliases/RenderErrorKind.md +21 -0
  273. package/api/@xmachines/play-svelte-spa-router/README.md +9 -5
  274. package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +4 -4
  275. package/api/@xmachines/play-svelte-spa-router/classes/SvelteSpaRouterBridge.md +7 -7
  276. package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +1 -1
  277. package/api/@xmachines/play-svelte-spa-router/interfaces/BasePathOptions.md +3 -3
  278. package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +8 -8
  279. package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +7 -7
  280. package/api/@xmachines/play-svelte-spa-router/interfaces/RoutableActor.md +4 -4
  281. package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +4 -4
  282. package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +3 -3
  283. package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +3 -3
  284. package/api/@xmachines/play-svelte-spa-router/interfaces/RouterConnection.md +6 -6
  285. package/api/@xmachines/play-svelte-spa-router/interfaces/WindowLike.md +3 -3
  286. package/api/@xmachines/play-sveltekit-router/README.md +65 -13
  287. package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +4 -4
  288. package/api/@xmachines/play-sveltekit-router/classes/SvelteKitRouterBridge.md +29 -19
  289. package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +1 -1
  290. package/api/@xmachines/play-sveltekit-router/interfaces/BasePathOptions.md +3 -3
  291. package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +13 -16
  292. package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +3 -3
  293. package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +7 -7
  294. package/api/@xmachines/play-sveltekit-router/interfaces/RoutableActor.md +4 -4
  295. package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +4 -4
  296. package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +3 -3
  297. package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +3 -3
  298. package/api/@xmachines/play-sveltekit-router/interfaces/RouterConnection.md +6 -6
  299. package/api/@xmachines/play-sveltekit-router/interfaces/SvelteKitRouterBridgeOptions.md +25 -0
  300. package/api/@xmachines/play-sveltekit-router/type-aliases/ShallowNavigation.md +21 -0
  301. package/api/@xmachines/play-tanstack-react-router/README.md +34 -16
  302. package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +4 -4
  303. package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +7 -7
  304. package/api/@xmachines/play-tanstack-react-router/functions/createPlayRouterProvider.md +1 -1
  305. package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +1 -1
  306. package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +7 -7
  307. package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +9 -9
  308. package/api/@xmachines/play-tanstack-react-router/interfaces/RoutableActor.md +4 -4
  309. package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +4 -4
  310. package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +3 -3
  311. package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +3 -3
  312. package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
  313. package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  314. package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterInstance.md +1 -1
  315. package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterLike.md +5 -5
  316. package/api/@xmachines/play-tanstack-react-router/variables/PlayRouterProvider.md +1 -1
  317. package/api/@xmachines/play-tanstack-router/README.md +5 -3
  318. package/api/@xmachines/play-tanstack-router/classes/TanStackRouterBridgeBase.md +7 -7
  319. package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouteMapLike.md +3 -3
  320. package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouterLike.md +5 -5
  321. package/api/@xmachines/play-tanstack-solid-router/README.md +45 -11
  322. package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +4 -4
  323. package/api/@xmachines/play-tanstack-solid-router/classes/TanStackSolidRouterBridge.md +7 -7
  324. package/api/@xmachines/play-tanstack-solid-router/functions/createPlayRouterProvider.md +1 -1
  325. package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +7 -7
  326. package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +9 -9
  327. package/api/@xmachines/play-tanstack-solid-router/interfaces/RoutableActor.md +4 -4
  328. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +4 -4
  329. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +3 -3
  330. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +3 -3
  331. package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
  332. package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  333. package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterInstance.md +1 -1
  334. package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterLike.md +5 -5
  335. package/api/@xmachines/play-tanstack-solid-router/variables/PlayRouterProvider.md +1 -1
  336. package/api/@xmachines/play-url/README.md +1 -1
  337. package/api/@xmachines/play-url/errors/classes/InvalidBasePathError.md +5 -5
  338. package/api/@xmachines/play-url/errors/classes/InvalidRoutePatternError.md +5 -5
  339. package/api/@xmachines/play-url/errors/classes/MissingBasePathParamError.md +6 -6
  340. package/api/@xmachines/play-url/index/functions/buildPath.md +1 -1
  341. package/api/@xmachines/play-url/index/functions/cleanFrameworkParams.md +1 -1
  342. package/api/@xmachines/play-url/index/functions/createLruCache.md +1 -1
  343. package/api/@xmachines/play-url/index/functions/getCandidates.md +1 -1
  344. package/api/@xmachines/play-url/index/functions/getCompiledPattern.md +1 -1
  345. package/api/@xmachines/play-url/index/functions/getIndexKey.md +1 -1
  346. package/api/@xmachines/play-url/index/functions/holdsUnsubstitutedParam.md +1 -1
  347. package/api/@xmachines/play-url/index/functions/isDotSegment.md +1 -1
  348. package/api/@xmachines/play-url/index/functions/joinBasePath.md +1 -1
  349. package/api/@xmachines/play-url/index/functions/normalizeBasePath.md +1 -1
  350. package/api/@xmachines/play-url/index/functions/parsePattern.md +1 -1
  351. package/api/@xmachines/play-url/index/functions/pickOwnParams.md +1 -1
  352. package/api/@xmachines/play-url/index/functions/resolveBasePath.md +1 -1
  353. package/api/@xmachines/play-url/index/functions/resolveFrameworkParams.md +1 -1
  354. package/api/@xmachines/play-url/index/functions/sanitizePathname.md +1 -1
  355. package/api/@xmachines/play-url/index/functions/splitLocation.md +1 -1
  356. package/api/@xmachines/play-url/index/functions/stripBasePath.md +1 -1
  357. package/api/@xmachines/play-url/index/interfaces/BasePathOptions.md +3 -3
  358. package/api/@xmachines/play-url/index/interfaces/CompileOptions.md +3 -3
  359. package/api/@xmachines/play-url/index/interfaces/FrameworkParamsSource.md +7 -7
  360. package/api/@xmachines/play-url/index/interfaces/GroupPart.md +4 -4
  361. package/api/@xmachines/play-url/index/interfaces/KeyValueCache.md +3 -3
  362. package/api/@xmachines/play-url/index/interfaces/LiteralPart.md +3 -3
  363. package/api/@xmachines/play-url/index/interfaces/ParamPart.md +7 -7
  364. package/api/@xmachines/play-url/index/interfaces/ParseOptions.md +2 -2
  365. package/api/@xmachines/play-url/index/interfaces/ParsedPattern.md +12 -12
  366. package/api/@xmachines/play-url/index/interfaces/PatternParam.md +4 -4
  367. package/api/@xmachines/play-url/index/interfaces/ResolvedBasePath.md +3 -3
  368. package/api/@xmachines/play-url/index/interfaces/SplitLocation.md +5 -5
  369. package/api/@xmachines/play-url/index/type-aliases/PathBuildResult.md +1 -1
  370. package/api/@xmachines/play-url/index/type-aliases/PathParams.md +1 -1
  371. package/api/@xmachines/play-url/index/type-aliases/PatternModifier.md +1 -1
  372. package/api/@xmachines/play-url/index/type-aliases/PatternPart.md +1 -1
  373. package/api/@xmachines/play-url/index/type-aliases/URLPatternCtor.md +1 -1
  374. package/api/@xmachines/play-url/index/type-aliases/URLPatternLike.md +3 -3
  375. package/api/@xmachines/play-url/index/variables/NO_BASE_PATH.md +1 -1
  376. package/api/@xmachines/play-url/index/variables/URLPattern.md +1 -1
  377. package/api/@xmachines/play-view/README.md +92 -35
  378. package/api/@xmachines/play-view/errors/README.md +2 -0
  379. package/api/@xmachines/play-view/errors/classes/InvalidViewOutletError.md +204 -0
  380. package/api/@xmachines/play-view/errors/classes/ReadOnlyContextError.md +5 -5
  381. package/api/@xmachines/play-view/errors/classes/ViewElementKeyCollisionError.md +181 -0
  382. package/api/@xmachines/play-view/index/README.md +16 -4
  383. package/api/@xmachines/play-view/index/functions/attachRenderErrorHandler.md +10 -9
  384. package/api/@xmachines/play-view/index/functions/bindStoreHandlers.md +34 -0
  385. package/api/@xmachines/play-view/index/functions/composePlayState.md +1 -1
  386. package/api/@xmachines/play-view/index/functions/composeViews.md +41 -0
  387. package/api/@xmachines/play-view/index/functions/createActorProxy.md +39 -0
  388. package/api/@xmachines/play-view/index/functions/createRenderErrorBinding.md +35 -0
  389. package/api/@xmachines/play-view/index/functions/createReportGuard.md +1 -1
  390. package/api/@xmachines/play-view/index/functions/createViewSession.md +29 -0
  391. package/api/@xmachines/play-view/index/functions/createViewStoreLifecycle.md +1 -1
  392. package/api/@xmachines/play-view/index/functions/forwardRenderError.md +45 -0
  393. package/api/@xmachines/play-view/index/functions/guardContextWrites.md +1 -1
  394. package/api/@xmachines/play-view/index/functions/refreshContextSubtree.md +1 -1
  395. package/api/@xmachines/play-view/index/functions/reuseComposedState.md +1 -1
  396. package/api/@xmachines/play-view/index/functions/toAtomState.md +1 -1
  397. package/api/@xmachines/play-view/index/functions/typedSpec.md +11 -11
  398. package/api/@xmachines/play-view/index/interfaces/BaseActorProviderProps.md +8 -8
  399. package/api/@xmachines/play-view/index/interfaces/BaseViewContextValue.md +5 -5
  400. package/api/@xmachines/play-view/index/interfaces/ComposedView.md +16 -0
  401. package/api/@xmachines/play-view/index/interfaces/HandlerFactory.md +19 -0
  402. package/api/@xmachines/play-view/index/interfaces/PlaySpec.md +12 -8
  403. package/api/@xmachines/play-view/index/interfaces/ReportGuard.md +5 -5
  404. package/api/@xmachines/play-view/index/interfaces/ReportGuardMessages.md +5 -5
  405. package/api/@xmachines/play-view/index/interfaces/ResolveViewStoreOptions.md +2 -2
  406. package/api/@xmachines/play-view/index/interfaces/ViewMeta.md +25 -0
  407. package/api/@xmachines/play-view/index/interfaces/ViewOutlet.md +23 -0
  408. package/api/@xmachines/play-view/index/interfaces/ViewSession.md +155 -0
  409. package/api/@xmachines/play-view/index/interfaces/ViewSessionOptions.md +12 -0
  410. package/api/@xmachines/play-view/index/interfaces/ViewSessionSnapshot.md +23 -0
  411. package/api/@xmachines/play-view/index/interfaces/ViewStoreLifecycle.md +22 -3
  412. package/api/@xmachines/play-view/index/interfaces/ViewStoreResolution.md +7 -6
  413. package/api/@xmachines/play-view/index/interfaces/ViewTree.md +15 -0
  414. package/api/@xmachines/play-view/index/interfaces/ViewTreeChild.md +14 -0
  415. package/api/@xmachines/play-view/index/interfaces/Viewable.md +4 -4
  416. package/api/@xmachines/play-view/index/type-aliases/StateUpdater.md +21 -0
  417. package/api/@xmachines/play-view/index/type-aliases/ViewActor.md +1 -1
  418. package/api/@xmachines/play-view/index/variables/CONTEXT_STATE_KEY.md +1 -1
  419. package/api/@xmachines/play-vue/README.md +21 -18
  420. package/api/@xmachines/play-vue/functions/defineRegistry.md +1 -1
  421. package/api/@xmachines/play-vue/functions/useActor.md +1 -1
  422. package/api/@xmachines/play-vue/functions/useBoundProp.md +10 -4
  423. package/api/@xmachines/play-vue/functions/useFieldValidation.md +12 -5
  424. package/api/@xmachines/play-vue/functions/usePlayView.md +1 -1
  425. package/api/@xmachines/play-vue/interfaces/ActorProviderProps.md +8 -8
  426. package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +11 -11
  427. package/api/@xmachines/play-vue/interfaces/RenderErrorInfo.md +16 -0
  428. package/api/@xmachines/play-vue/interfaces/RendererProps.md +7 -7
  429. package/api/@xmachines/play-vue/interfaces/ViewContextValue.md +5 -5
  430. package/api/@xmachines/play-vue/type-aliases/AnyPlayActor.md +1 -1
  431. package/api/@xmachines/play-vue/type-aliases/ComponentEntry.md +1 -1
  432. package/api/@xmachines/play-vue/type-aliases/ComponentsMap.md +1 -1
  433. package/api/@xmachines/play-vue/type-aliases/DefineRegistryOptions.md +2 -2
  434. package/api/@xmachines/play-vue/type-aliases/OnRenderError.md +27 -0
  435. package/api/@xmachines/play-vue/type-aliases/RenderErrorKind.md +21 -0
  436. package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
  437. package/api/@xmachines/play-vue/variables/Renderer.md +3 -3
  438. package/api/@xmachines/play-vue-router/README.md +18 -11
  439. package/api/@xmachines/play-vue-router/errors/classes/VueRouterNavigationError.md +4 -4
  440. package/api/@xmachines/play-vue-router/errors/classes/VueRouterSendError.md +4 -4
  441. package/api/@xmachines/play-vue-router/index/classes/RouteMap.md +4 -4
  442. package/api/@xmachines/play-vue-router/index/classes/VueRouterBridge.md +7 -7
  443. package/api/@xmachines/play-vue-router/index/interfaces/PlayRouteEvent.md +7 -7
  444. package/api/@xmachines/play-vue-router/index/interfaces/RoutableActor.md +4 -4
  445. package/api/@xmachines/play-vue-router/index/interfaces/RouteMapOptions.md +4 -4
  446. package/api/@xmachines/play-vue-router/index/interfaces/RouteMapping.md +3 -3
  447. package/api/@xmachines/play-vue-router/index/interfaces/RouterBridge.md +3 -3
  448. package/api/@xmachines/play-vue-router/index/variables/PlayRouterProvider.md +1 -1
  449. package/api/@xmachines/play-xstate/README.md +87 -28
  450. package/api/@xmachines/play-xstate/errors/classes/ActorThrewNonErrorError.md +4 -4
  451. package/api/@xmachines/play-xstate/errors/classes/InvalidEventError.md +5 -5
  452. package/api/@xmachines/play-xstate/errors/classes/InvalidMachineError.md +4 -4
  453. package/api/@xmachines/play-xstate/errors/classes/InvalidRouteHandlerError.md +5 -5
  454. package/api/@xmachines/play-xstate/errors/classes/InvalidRouteMetadataError.md +5 -5
  455. package/api/@xmachines/play-xstate/errors/classes/InvalidRouteParamError.md +7 -7
  456. package/api/@xmachines/play-xstate/errors/classes/MissingRouteParamError.md +6 -6
  457. package/api/@xmachines/play-xstate/errors/classes/MissingStateIdError.md +6 -6
  458. package/api/@xmachines/play-xstate/index/classes/PlayerActor.md +10 -10
  459. package/api/@xmachines/play-xstate/index/functions/compose.md +4 -4
  460. package/api/@xmachines/play-xstate/index/functions/definePlayer.md +2 -2
  461. package/api/@xmachines/play-xstate/index/interfaces/PlayerConfig.md +4 -4
  462. package/api/@xmachines/play-xstate/index/interfaces/PlayerFactoryResumeOptions.md +2 -2
  463. package/api/@xmachines/play-xstate/index/interfaces/PlayerOptions.md +7 -7
  464. package/api/@xmachines/play-xstate/index/type-aliases/Capability.md +1 -1
  465. package/api/@xmachines/play-xstate/index/type-aliases/PlayerConstructor.md +1 -1
  466. package/api/@xmachines/play-xstate/index/type-aliases/PlayerFactory.md +1 -1
  467. package/api/@xmachines/play-xstate/with-routing/functions/buildRouteUrl.md +1 -1
  468. package/api/@xmachines/play-xstate/with-routing/functions/deriveRoute.md +1 -1
  469. package/api/@xmachines/play-xstate/with-routing/functions/formatPlayRouteTransitions.md +1 -1
  470. package/api/@xmachines/play-xstate/with-routing/functions/isAbsoluteRoute.md +1 -1
  471. package/api/@xmachines/play-xstate/with-routing/functions/withRouting.md +1 -1
  472. package/api/@xmachines/play-xstate/with-routing/interfaces/RouteContext.md +5 -5
  473. package/api/@xmachines/play-xstate/with-routing/interfaces/RouteObject.md +12 -15
  474. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteData.md +1 -1
  475. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteDataResolver.md +1 -1
  476. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMachineConfig.md +4 -4
  477. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMetadata.md +1 -1
  478. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteStateNode.md +5 -5
  479. package/api/@xmachines/play-xstate/with-view/functions/withView.md +2 -4
  480. package/api/@xmachines/shared/README.md +1 -0
  481. package/api/@xmachines/shared/vite-aliases/README.md +7 -0
  482. package/api/@xmachines/shared/vite-aliases/functions/xmAliases.md +11 -5
  483. package/api/@xmachines/shared/vite-aliases/functions/xmBuildOutput.md +37 -0
  484. package/api/@xmachines/shared/vite-aliases/functions/xmBuildOutputFile.md +28 -0
  485. package/api/@xmachines/shared/vite-aliases/functions/xmCacheDir.md +1 -1
  486. package/api/@xmachines/shared/vite-aliases/functions/xmOptimizeDeps.md +1 -1
  487. package/api/@xmachines/shared/vite-aliases/functions/xmResolve.md +1 -1
  488. package/api/@xmachines/shared/vite-aliases/functions/xmSvelteRunes.md +2 -2
  489. package/api/@xmachines/shared/vite-aliases/functions/xmTestTarget.md +26 -0
  490. package/api/@xmachines/shared/vite-aliases/type-aliases/XmTestTarget.md +15 -0
  491. package/api/@xmachines/shared/vitest/functions/defineXmBrowserConfig.md +1 -1
  492. package/api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md +5 -1
  493. package/api/@xmachines/shared/vitest/interfaces/XmBrowserConfigOptions.md +4 -4
  494. package/api/llms.txt +8 -4
  495. package/contributing/architecture.md +96 -51
  496. package/contributing/configuration.md +55 -14
  497. package/contributing/deployment.md +3 -3
  498. package/contributing/development.md +31 -4
  499. package/contributing/migrating-to-play-atom.md +11 -5
  500. package/contributing/testing.md +93 -33
  501. package/examples/@xmachines/play-dom-demo/README.md +2 -2
  502. package/examples/@xmachines/play-dom-demo/functions/createAuthActionHandlers.md +9 -9
  503. package/examples/@xmachines/play-dom-demo/functions/createConfirmDialog.md +1 -1
  504. package/examples/@xmachines/play-dom-demo/functions/createNavBar.md +1 -1
  505. package/examples/@xmachines/play-dom-demo/functions/initShell.md +1 -1
  506. package/examples/@xmachines/play-dom-demo/type-aliases/AuthCatalog.md +1 -1
  507. package/examples/@xmachines/play-dom-demo/variables/About.md +1 -1
  508. package/examples/@xmachines/play-dom-demo/variables/Button.md +1 -1
  509. package/examples/@xmachines/play-dom-demo/variables/Contact.md +1 -1
  510. package/examples/@xmachines/play-dom-demo/variables/Dashboard.md +1 -1
  511. package/examples/@xmachines/play-dom-demo/variables/Field.md +1 -1
  512. package/examples/@xmachines/play-dom-demo/variables/Home.md +1 -1
  513. package/examples/@xmachines/play-dom-demo/variables/Login.md +1 -1
  514. package/examples/@xmachines/play-dom-demo/variables/NavBarView.md +1 -1
  515. package/examples/@xmachines/play-dom-demo/variables/Navigation.md +1 -1
  516. package/examples/@xmachines/play-dom-demo/variables/Overview.md +1 -1
  517. package/examples/@xmachines/play-dom-demo/variables/Panel.md +1 -1
  518. package/examples/@xmachines/play-dom-demo/variables/Profile.md +1 -1
  519. package/examples/@xmachines/play-dom-demo/variables/Settings.md +1 -1
  520. package/examples/@xmachines/play-dom-demo/variables/Stats.md +1 -1
  521. package/examples/@xmachines/play-dom-demo/variables/authCatalog.md +1 -1
  522. package/examples/@xmachines/play-dom-demo/variables/demoComponents.md +15 -15
  523. package/examples/@xmachines/play-dom-router-demo/README.md +4 -3
  524. package/examples/@xmachines/play-react-demo/README.md +2 -2
  525. package/examples/@xmachines/play-react-demo/functions/createAuthActionHandlers.md +9 -9
  526. package/examples/@xmachines/play-react-demo/type-aliases/AuthCatalog.md +1 -1
  527. package/examples/@xmachines/play-react-demo/variables/About.md +1 -1
  528. package/examples/@xmachines/play-react-demo/variables/Button.md +1 -1
  529. package/examples/@xmachines/play-react-demo/variables/Contact.md +1 -1
  530. package/examples/@xmachines/play-react-demo/variables/Dashboard.md +1 -1
  531. package/examples/@xmachines/play-react-demo/variables/DebugPanel.md +1 -1
  532. package/examples/@xmachines/play-react-demo/variables/Field.md +1 -1
  533. package/examples/@xmachines/play-react-demo/variables/Home.md +1 -1
  534. package/examples/@xmachines/play-react-demo/variables/Login.md +1 -1
  535. package/examples/@xmachines/play-react-demo/variables/NavBar.md +1 -1
  536. package/examples/@xmachines/play-react-demo/variables/NavBarView.md +1 -1
  537. package/examples/@xmachines/play-react-demo/variables/Navigation.md +1 -1
  538. package/examples/@xmachines/play-react-demo/variables/Overview.md +1 -1
  539. package/examples/@xmachines/play-react-demo/variables/Panel.md +1 -1
  540. package/examples/@xmachines/play-react-demo/variables/Profile.md +1 -1
  541. package/examples/@xmachines/play-react-demo/variables/Settings.md +1 -1
  542. package/examples/@xmachines/play-react-demo/variables/Shell.md +1 -1
  543. package/examples/@xmachines/play-react-demo/variables/Stats.md +1 -1
  544. package/examples/@xmachines/play-react-demo/variables/authCatalog.md +1 -1
  545. package/examples/@xmachines/play-react-demo/variables/demoComponents.md +15 -15
  546. package/examples/@xmachines/play-react-router-demo/README.md +4 -3
  547. package/examples/@xmachines/play-solid-demo/README.md +3 -3
  548. package/examples/@xmachines/play-solid-demo/functions/createAuthActionHandlers.md +9 -9
  549. package/examples/@xmachines/play-solid-demo/type-aliases/AuthCatalog.md +1 -1
  550. package/examples/@xmachines/play-solid-demo/variables/About.md +1 -1
  551. package/examples/@xmachines/play-solid-demo/variables/Button.md +1 -1
  552. package/examples/@xmachines/play-solid-demo/variables/Contact.md +1 -1
  553. package/examples/@xmachines/play-solid-demo/variables/Dashboard.md +1 -1
  554. package/examples/@xmachines/play-solid-demo/variables/DebugPanel.md +1 -1
  555. package/examples/@xmachines/play-solid-demo/variables/Field.md +1 -1
  556. package/examples/@xmachines/play-solid-demo/variables/Home.md +1 -1
  557. package/examples/@xmachines/play-solid-demo/variables/Login.md +1 -1
  558. package/examples/@xmachines/play-solid-demo/variables/NavBar.md +1 -1
  559. package/examples/@xmachines/play-solid-demo/variables/NavBarView.md +1 -1
  560. package/examples/@xmachines/play-solid-demo/variables/Navigation.md +1 -1
  561. package/examples/@xmachines/play-solid-demo/variables/Overview.md +1 -1
  562. package/examples/@xmachines/play-solid-demo/variables/Panel.md +1 -1
  563. package/examples/@xmachines/play-solid-demo/variables/Profile.md +1 -1
  564. package/examples/@xmachines/play-solid-demo/variables/Settings.md +1 -1
  565. package/examples/@xmachines/play-solid-demo/variables/Shell.md +1 -1
  566. package/examples/@xmachines/play-solid-demo/variables/Stats.md +1 -1
  567. package/examples/@xmachines/play-solid-demo/variables/authCatalog.md +190 -277
  568. package/examples/@xmachines/play-solid-demo/variables/demoComponents.md +17 -17
  569. package/examples/@xmachines/play-solid-router-demo/README.md +9 -3
  570. package/examples/@xmachines/play-svelte-demo/README.md +1 -1
  571. package/examples/@xmachines/play-svelte-demo/functions/createAuthActionHandlers.md +9 -9
  572. package/examples/@xmachines/play-svelte-demo/type-aliases/AuthCatalog.md +1 -1
  573. package/examples/@xmachines/play-svelte-demo/variables/authCatalog.md +190 -277
  574. package/examples/@xmachines/play-svelte-demo/variables/demoComponents.md +15 -15
  575. package/examples/@xmachines/play-svelte-spa-router-demo/README.md +1 -1
  576. package/examples/@xmachines/play-sveltekit-router-demo/README.md +1 -1
  577. package/examples/@xmachines/play-tanstack-react-router-demo/README.md +3 -2
  578. package/examples/@xmachines/play-tanstack-solid-router-demo/README.md +9 -8
  579. package/examples/@xmachines/play-vue-demo/README.md +2 -2
  580. package/examples/@xmachines/play-vue-demo/functions/createAuthActionHandlers.md +9 -9
  581. package/examples/@xmachines/play-vue-demo/type-aliases/AuthCatalog.md +1 -1
  582. package/examples/@xmachines/play-vue-demo/variables/App.md +1 -1
  583. package/examples/@xmachines/play-vue-demo/variables/authCatalog.md +1 -1
  584. package/examples/@xmachines/play-vue-demo/variables/demoComponents.md +1 -1
  585. package/examples/@xmachines/play-vue-router-demo/README.md +3 -3
  586. package/examples/README.md +1 -1
  587. package/examples/form-validation.md +17 -13
  588. package/examples/multi-router-integration.md +269 -148
  589. package/examples/routing-patterns.md +44 -9
  590. package/examples/traffic-light.md +7 -3
  591. package/guides/README.md +5 -4
  592. package/guides/actor-model.md +41 -23
  593. package/guides/atoms.md +52 -12
  594. package/guides/getting-started.md +65 -19
  595. package/guides/inspector.md +72 -12
  596. package/guides/routing.md +44 -45
  597. package/guides/state-machines.md +102 -15
  598. package/guides/views.md +367 -0
  599. package/package.json +6 -6
  600. package/rfc/play.md +55 -21
  601. package/api/@xmachines/play-view/index/functions/createFailureLatch.md +0 -20
  602. package/api/@xmachines/play-view/index/functions/sameViewInputs.md +0 -25
  603. package/api/@xmachines/play-view/index/interfaces/FailureLatch.md +0 -60
  604. package/api/@xmachines/play-view/index/interfaces/ViewInputs.md +0 -19
@@ -102,13 +102,13 @@ The test suite relies on TypeScript path aliases that resolve to source files. I
102
102
 
103
103
  #### TypeScript errors about missing types after adding a dependency
104
104
 
105
- Run `pnpm install --frozen-lockfile` again to ensure all types are installed. If you added a workspace-local dependency, also add the correct `references` entry in the package's `tsconfig.base.json`.
105
+ Run `pnpm install --frozen-lockfile` again to ensure all types are installed. If you added a workspace-local dependency, declare it in the `package.json` of the package with a `workspace:*` range. The root `tsconfig.json` holds the build order, and `tests/tsconfig-reference-graph.test.ts` fails when that order misses the new edge.
106
106
 
107
107
  #### Lint errors about import extensions
108
108
 
109
109
  All TypeScript imports must end with `.js`, even for `.ts` source files:
110
110
 
111
- ```typescript
111
+ ```typescript fragment
112
112
  // ✅ Correct
113
113
  import { PlayError } from "./errors.js";
114
114
 
@@ -154,9 +154,11 @@ All packages are ES modules (`"type": "module"`). Use `.js` extensions in all Ty
154
154
  Every XMachines application needs these six packages plus XState:
155
155
 
156
156
  ```bash
157
- pnpm add xstate @xmachines/play-xstate @xmachines/play-actor @xmachines/play-atom @xmachines/play @xmachines/core @xmachines/json-render-core
157
+ pnpm add xstate @xmachines/play-xstate @xmachines/play-actor @xmachines/play-atom @xmachines/play @xmachines/core @xmachines/json-render-core@0.21.0-xm.6
158
158
  ```
159
159
 
160
+ The json-render packages are exact peers: install the version that this release names, `0.21.0-xm.6`.
161
+
160
162
  | Package | Role |
161
163
  | ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
162
164
  | `xstate` | XState v5 state machine engine (peer dependency) |
@@ -208,7 +210,6 @@ const appSetup = setup({
208
210
  types: {
209
211
  context: {} as { count: number },
210
212
  events: {} as { type: "toggle" },
211
- input: {} as undefined,
212
213
  },
213
214
  });
214
215
 
@@ -272,6 +273,10 @@ release:
272
273
 
273
274
  ```typescript
274
275
  import { watchAtom } from "@xmachines/play-atom";
276
+ import type { PlayerActor } from "@xmachines/play-xstate";
277
+ import type { AnyStateMachine } from "xstate";
278
+
279
+ declare const actor: PlayerActor<AnyStateMachine>; // the actor of the example above
275
280
 
276
281
  const stop = watchAtom(actor.state, (snapshot) => {
277
282
  console.log("the machine is now:", snapshot.value);
@@ -296,7 +301,7 @@ A renderer needs none of this: [`@xmachines/play-react`](../api/@xmachines/play-
296
301
  and the other renderers observe `currentView` for you. Reach for `watchAtom` when you
297
302
  write infrastructure, or a debug panel beside the UI.
298
303
 
299
- [Understanding Atoms](atoms.md) states the whole model.
304
+ [Atoms](atoms.md) states the whole model.
300
305
 
301
306
  ---
302
307
 
@@ -325,7 +330,6 @@ const appSetup = setup({
325
330
  },
326
331
  events: {} as
327
332
  PlayRouteEvent | { type: "auth.login"; username: string } | { type: "auth.logout" },
328
- input: {} as undefined,
329
333
  },
330
334
  });
331
335
 
@@ -412,16 +416,27 @@ Used with framework-integrated routers like TanStack Router. All three props (`a
412
416
 
413
417
  ```tsx
414
418
  // React + TanStack Router example
415
- import { useMemo, useEffect } from "react";
419
+ import { useMemo, useEffect, type ReactNode } from "react";
416
420
  import { createRouter, createRootRoute } from "@tanstack/react-router";
417
421
  import { PlayRouterProvider, createRouteMapFromTree } from "@xmachines/play-tanstack-react-router";
418
422
  import { extractMachineRoutes } from "@xmachines/play-router/xstate";
423
+ import { compose, definePlayer, PlayerActor } from "@xmachines/play-xstate";
424
+ import { withRouting } from "@xmachines/play-xstate/routing";
425
+ import type { AnyStateMachine } from "xstate";
426
+
427
+ declare const appMachine: AnyStateMachine; // the machine of "Adding Routing"
428
+ declare function Shell(props: { actor: typeof actor }): ReactNode; // your layout
429
+
419
430
  // Build OUTSIDE of JSX — must be stable references
420
431
  const routeTree = extractMachineRoutes(appMachine);
421
432
  const routeMap = createRouteMapFromTree(routeTree);
422
433
  const router = createRouter({ routeTree: createRootRoute() });
423
434
 
424
435
  // Actor also created outside the component (or memoized inside)
436
+ const createPlayer = definePlayer({
437
+ machine: appMachine,
438
+ actor: compose(PlayerActor, withRouting),
439
+ });
425
440
  const actor = createPlayer();
426
441
  actor.start();
427
442
 
@@ -448,12 +463,21 @@ Used with framework-agnostic or server-rendered routers. `connectRouter` handles
448
463
  import { createBrowserHistory, createRouter, connectRouter } from "@xmachines/play-dom-router";
449
464
  import { createRouteMapFromTree } from "@xmachines/play-router";
450
465
  import { extractMachineRoutes } from "@xmachines/play-router/xstate";
466
+ import { compose, definePlayer, PlayerActor } from "@xmachines/play-xstate";
467
+ import { withRouting } from "@xmachines/play-xstate/routing";
468
+ import type { AnyStateMachine } from "xstate";
469
+
470
+ declare const appMachine: AnyStateMachine; // the machine of "Adding Routing"
451
471
 
452
472
  const routeTree = extractMachineRoutes(appMachine);
453
473
  const routeMap = createRouteMapFromTree(routeTree);
454
474
  const history = createBrowserHistory({ window });
455
475
  const router = createRouter({ routeTree, history });
456
476
 
477
+ const createPlayer = definePlayer({
478
+ machine: appMachine,
479
+ actor: compose(PlayerActor, withRouting),
480
+ });
457
481
  const actor = createPlayer();
458
482
  actor.start();
459
483
 
@@ -483,6 +507,10 @@ import { PlayUIProvider, PlayRenderer, defineRegistry } from "@xmachines/play-re
483
507
  import { defineCatalog } from "@xmachines/json-render-core";
484
508
  import { schema } from "@xmachines/play-react";
485
509
  import { z } from "zod";
510
+ import type { ViewActor } from "@xmachines/play-view";
511
+
512
+ type AuthEvent = { type: "auth.login"; username: string } | { type: "auth.logout" };
513
+ declare const actor: ViewActor<unknown, AuthEvent>; // your actor, composed with `withView`
486
514
 
487
515
  const catalog = defineCatalog(schema, {
488
516
  components: {
@@ -501,7 +529,9 @@ const registryResult = defineRegistry(catalog, {
501
529
  Login: ({ on }) => <button onClick={() => on("submit").emit()}>Log in</button>,
502
530
  },
503
531
  actions: {
504
- login: async ({ username }) => actor.send({ type: "auth.login", username }),
532
+ login: async (params) => {
533
+ if (params) actor.send({ type: "auth.login", username: params.username });
534
+ },
505
535
  logout: async () => actor.send({ type: "auth.logout" }),
506
536
  },
507
537
  });
@@ -548,7 +578,9 @@ function App() {
548
578
  Login: { template: `<button @click="on('submit').emit()">Log in</button>` },
549
579
  },
550
580
  actions: {
551
- login: async ({ username }) => actor.send({ type: "auth.login", username }),
581
+ login: async (params) => {
582
+ if (params) actor.send({ type: "auth.login", username: params.username });
583
+ },
552
584
  logout: async () => actor.send({ type: "auth.logout" }),
553
585
  },
554
586
  });
@@ -562,6 +594,10 @@ import { PlayUIProvider, PlayRenderer, defineRegistry } from "@xmachines/play-so
562
594
  import { defineCatalog } from "@xmachines/json-render-core";
563
595
  import { schema } from "@xmachines/play-solid";
564
596
  import { z } from "zod";
597
+ import type { ViewActor } from "@xmachines/play-view";
598
+
599
+ type AuthEvent = { type: "auth.login"; username: string } | { type: "auth.logout" };
600
+ declare const actor: ViewActor<unknown, AuthEvent>; // your actor, composed with `withView`
565
601
 
566
602
  const catalog = defineCatalog(schema, {
567
603
  components: {
@@ -580,7 +616,9 @@ const registryResult = defineRegistry(catalog, {
580
616
  Login: ({ on }) => <button onClick={() => on("submit").emit()}>Log in</button>,
581
617
  },
582
618
  actions: {
583
- login: async ({ username }) => actor.send({ type: "auth.login", username }),
619
+ login: async (params) => {
620
+ if (params) actor.send({ type: "auth.login", username: params.username });
621
+ },
584
622
  logout: async () => actor.send({ type: "auth.logout" }),
585
623
  },
586
624
  });
@@ -601,6 +639,10 @@ import { createPlayUI, defineRegistry, schema } from "@xmachines/play-dom";
601
639
  import { defineCatalog } from "@xmachines/json-render-core";
602
640
  import { z } from "zod";
603
641
  import type { ComponentFn } from "@xmachines/play-dom";
642
+ import type { ViewActor } from "@xmachines/play-view";
643
+
644
+ type AuthEvent = { type: "auth.login"; username: string } | { type: "auth.logout" };
645
+ declare const actor: ViewActor<unknown, AuthEvent>; // your actor, composed with `withView`
604
646
 
605
647
  const catalog = defineCatalog(schema, {
606
648
  components: {
@@ -631,7 +673,9 @@ const Login: ComponentFn<typeof catalog, "Login"> = ({ on }) => {
631
673
  const registryResult = defineRegistry(catalog, {
632
674
  components: { Home, Login },
633
675
  actions: {
634
- login: async ({ username }) => actor.send({ type: "auth.login", username }),
676
+ login: async (params) => {
677
+ if (params) actor.send({ type: "auth.login", username: params.username });
678
+ },
635
679
  logout: async () => actor.send({ type: "auth.logout" }),
636
680
  },
637
681
  });
@@ -658,7 +702,7 @@ nothing is needed — the generated transitions assign `event.query` to context
658
702
  on every navigation. A machine that handles `play.route` by hand must do that
659
703
  assignment itself:
660
704
 
661
- ```typescript
705
+ ```typescript fragment
662
706
  on: {
663
707
  "play.route": {
664
708
  actions: assign({
@@ -669,18 +713,13 @@ on: {
669
713
  }
670
714
  ```
671
715
 
672
- (Older releases threw `MissingQueryContextError` at construction for a
673
- routing-aware context without a `query` field. That class is gone: the generated
674
- `play.route` transitions assign `query` on every navigation, so the loss it
675
- guarded against cannot happen.)
676
-
677
716
  #### Missing `id` on routable states
678
717
 
679
718
  **Error:** `MissingStateIdError: State "home" has meta.route "/" but no id`.
680
719
 
681
720
  **Fix:** Every state with `meta.route` must declare an explicit `id`:
682
721
 
683
- ```typescript
722
+ ```typescript fragment
684
723
  // ❌ Missing id
685
724
  home: { meta: { route: "/" } }
686
725
 
@@ -695,6 +734,12 @@ home: { id: "home", meta: { route: "/" } }
695
734
  **Fix:** Always call `actor.start()` before `actor.send()`:
696
735
 
697
736
  ```typescript
737
+ import { definePlayer } from "@xmachines/play-xstate";
738
+ import type { AnyStateMachine } from "xstate";
739
+
740
+ declare const machine: AnyStateMachine; // your machine
741
+
742
+ const createPlayer = definePlayer({ machine });
698
743
  const actor = createPlayer();
699
744
  actor.start(); // required before any send()
700
745
  actor.send({ type: "toggle" });
@@ -706,7 +751,7 @@ actor.send({ type: "toggle" });
706
751
 
707
752
  **Fix:** Construct stable references outside JSX or memoize them:
708
753
 
709
- ```typescript
754
+ ```typescript fragment
710
755
  // ✅ Built outside the component
711
756
  const routeTree = extractMachineRoutes(appMachine);
712
757
  const routeMap = createRouteMapFromTree(routeTree);
@@ -751,6 +796,7 @@ node --version
751
796
 
752
797
  ## Next Steps
753
798
 
799
+ - **[Views](views.md)** — Which state supplies the view, the `/context` projection, and when a renderer keeps the UI
754
800
  - **[Inspecting a Running Actor](inspector.md)** — Attaching the Stately inspector to see the machine, its transitions, and its context live
755
801
  - **[Architecture](../contributing/architecture.md)** — System design, layers, invariants, and data flow
756
802
  - **[Play RFC](../rfc/play.md)** — Complete architectural specification
@@ -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 });
@@ -192,6 +252,6 @@ const createPlayer = definePlayer({ machine: appMachine, options });
192
252
 
193
253
  - **[`PlayerOptions`](../api/@xmachines/play-xstate/index/interfaces/PlayerOptions.md)** — the full options bag, `inspect` included
194
254
  - **[`PlayerActor`](../api/@xmachines/play-xstate/index/classes/PlayerActor.md)** — the actor an inspector observes
195
- - **[Understanding the Actor Model](actor-model.md)** — why the actor is the actor, and what that buys
255
+ - **[The Actor Model](actor-model.md)** — why the actor is the actor, and what that buys
196
256
  - **[Getting Started](getting-started.md)** — installing packages and creating your first actor
197
257
  - **[Stately inspect docs](https://stately.ai/docs/inspector)** — the inspector itself, its transports and options
package/guides/routing.md CHANGED
@@ -1,8 +1,8 @@
1
- # Understanding Routing in XMachines
1
+ # Routing in XMachines
2
2
 
3
3
  A route of XMachines is a fact about a STATE, and not a fact about a component tree. A state node declares `meta.route`, and the library carries that declaration in both directions: a URL becomes a state, and a state becomes a URL.
4
4
 
5
- This guide states the pattern language one time, and it names the three rules that every one of the nine router adapters follows.
5
+ This guide states the pattern language one time, it tells when a navigation re-enters a state, and it names the three rules that every one of the nine router adapters follows.
6
6
 
7
7
  After you read it, you know which patterns a route can declare, which side resolves a location, and why a bridge comes in a `connect()` and `disconnect()` pair.
8
8
 
@@ -19,13 +19,13 @@ The first direction needs a matcher, and every router writes its own. Express us
19
19
 
20
20
  `URLPattern` is the WHATWG standard for this, its syntax comes from `path-to-regexp`, and it is a superset of it. XMachines takes it as the pattern language, and it reads the whole of it.
21
21
 
22
- This is the same decision that [`@xmachines/play-atom`](atoms.md) makes for reactivity: one primitive, isolated behind one module, present on every runtime. There is no `AtomsUnavailableError`, because one package holds the reactive primitive and every consumer reads it from there, and there is no URLPattern availability error for the same reason.
22
+ [`@xmachines/play-atom`](../api/@xmachines/play-atom/README.md) makes the same decision for reactivity: one primitive, isolated behind one module, present on every runtime. The [Atoms](atoms.md) guide describes it.
23
23
 
24
24
  ### The API is always present
25
25
 
26
- [`@xmachines/play-router`](../api/@xmachines/play-router/README.md) carries [`urlpattern-polyfill`](https://github.com/kenchris/urlpattern-polyfill) as an ordinary dependency. It uses the native `URLPattern` when the runtime has one, and the polyfill when it does not. **Install nothing, and load nothing.**
26
+ [`@xmachines/play-url`](../api/@xmachines/play-url/README.md) carries [`urlpattern-polyfill`](https://github.com/kenchris/urlpattern-polyfill) as an ordinary dependency. It uses the native `URLPattern` when the runtime has one, and the polyfill when it does not. **Install nothing, and load nothing.**
27
27
 
28
- The native API arrived in Chrome 95, in Firefox 142 and in Safari 26. The browser floor of this workspace is Chrome 110, Firefox 115 and Safari 16.4. Chrome carries the API at that floor, and Firefox and Safari carry it far above it, so a Firefox or a Safari at the floor runs the polyfill. `test/url-pattern-parity.test.ts` measures the two implementations against each other, form by form. They agree on every form of the grammar, and they disagree about one shape that no bridge can produce — see the prefix rule below.
28
+ The native API arrived in Chrome 95, in Firefox 142 and in Safari 26. The browser floor of XMachines is Chrome 110, Firefox 115 and Safari 16.4. Chrome carries the API at that floor, and Firefox and Safari carry it far above it, so a Firefox or a Safari at the floor runs the polyfill. The test suite of [`@xmachines/play-url`](../api/@xmachines/play-url/README.md) measures the two implementations against each other, form by form. They agree on every form of the grammar, and they disagree about one shape that no bridge can produce — see the prefix rule below.
29
29
 
30
30
  The cost is 18 kB, minified and with no dependency of its own, and a consumer whose runtime has the native API pays it too. A conditional load would save those bytes and it would make the module asynchronous: `RouteMap` compiles in its constructor, and a navigation matches inside an event handler. Neither can await.
31
31
 
@@ -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" } },
@@ -116,12 +119,6 @@ The build resolves every escape, so the derived path carries the character and n
116
119
  backslash that protects it. `/tags/c\+\+` derives `/tags/c++`, which is the path that the
117
120
  route matches.
118
121
 
119
- **An escaped `:` is the one escape that stops at the bridge.** The build derives
120
- `/time/10:30` for `/time/10\:30`, and the route matches that path — but a bridge refuses
121
- to push a path that holds a `:`, because a `:` in a CONCRETE path marks a param that
122
- nothing substituted. `resolveNavigationPath` therefore answers `null`, and the address bar
123
- follows that state never. Write `%3A` instead, as the section below prescribes.
124
-
125
122
  ### A literal that the grammar would read
126
123
 
127
124
  `:`, `+`, `?`, `(` and `{` are characters of the grammar, so a route that writes one of them raw does not mean the literal. The two halves fail differently.
@@ -148,25 +145,7 @@ This rule is about the PATTERN that a state declares. A param VALUE needs no esc
148
145
 
149
146
  `encodeURIComponent` leaves `*` as it stands, and that is the one exception. A bridge refuses a path that still holds a `:` or a `*`, because such a character marks a param that nothing substituted. A value of `a*b` therefore stops the push, and the URL stays where it is.
150
147
 
151
- **This is a change of behaviour, and a route of yours can hold one of these characters today.** An earlier release read a route as a pattern only when the route held a `:` or a `*`. `/tags/c++`, `/docs/rfc(2119)` and `/i18n/{en}` therefore went to the exact-match map, and each one matched the path that its author wrote. The route map reads the whole grammar now. `/tags/c++` throws `InvalidRoutePatternError` in the constructor of `RouteMap`, and the other two compile and match another path in silence. Add the escape to each route that writes one of these characters raw.
152
-
153
- A route that carries a QUERY STRING is the same case, and it is the form a machine writes most often. `meta: { route: "/dates?trip=one-way" }` reached the exact-match map before, and the bridge pushed it to the address bar with its query. The grammar reads that `?` as a modifier that follows no part, so `RouteMap` throws `InvalidRoutePatternError` in its constructor now and the application starts never. A route declares a PATHNAME: put the default in `context.query`, which the generated `play.route` transition assigns and `buildRouteUrl` writes to the URL.
154
-
155
- ### Upgrading from 3.x: the `reenter` default changed
156
-
157
- An earlier release wrote `reenter: true` on every transition that `formatPlayRouteTransitions` generated, so every routed state re-entered its own domain on each navigation and ran its `entry` actions again. The flag now comes from `meta.route`, and the default is `false`, which is the default of XState.
158
-
159
- **Nothing throws, and the `entry` action simply stops running.** A state that needs it declares the flag for itself:
160
-
161
- ```ts
162
- states: {
163
- dashboard: { meta: { route: { path: "/dashboard", reenter: true } } },
164
- },
165
- ```
166
-
167
- `reenter` spares the DOMAIN of the transition and not every ancestor that stays active. Under the default `handler: "root"` the domain is the root of the machine, so `false` spares the root alone and each ancestor between the root and the target still runs its `exit` and `entry` actions. `handler: "local"` and `handler: "both"` move the domain down to the parent, which is the field that spares those intermediate ancestors.
168
-
169
- CAUTION: `"local"` also SCOPES the route. The generated transition then sits on the parent alone, so a `play.route` event that arrives while the parent is inactive matches nothing and the actor does not move — a deep link or a press on BACK therefore leaves the URL and the actor divergent. Choose `"local"` where that scope is the intent, such as a step that a person reaches only inside its wizard. Choose `"both"` where the state must stay reachable from everywhere.
148
+ A route that carries a QUERY STRING is the same case as a raw `?`, and it is the form a machine writes most often. The grammar reads the `?` of `meta: { route: "/dates?trip=one-way" }` as a modifier that follows no part, so `RouteMap` throws `InvalidRoutePatternError` in its constructor and the application starts never. A route declares a PATHNAME: put the default in `context.query`, which the generated `play.route` transition assigns and `buildRouteUrl` writes to the URL.
170
149
 
171
150
  ### The prefix rule
172
151
 
@@ -196,6 +175,28 @@ The cost is that you cannot write URLPattern's own reading of `:cat-id`. Use `:c
196
175
 
197
176
  ---
198
177
 
178
+ ## Re-entry on a navigation
179
+
180
+ `formatPlayRouteTransitions` reads the `reenter` flag of each transition from `meta.route`. The default is `false`, which is the default of XState.
181
+
182
+ The flag decides one thing: whether the DOMAIN of the transition runs its `exit` and `entry` actions again. Under the default `handler: "root"` the domain is the root of the machine. `"local"` and `"both"` put a transition on the parent, and while the parent is active that transition answers the event, so the domain is the parent.
183
+
184
+ Each state below the domain on the path to the target runs its `exit` and `entry` actions on each navigation, whatever the flag says. The target itself is one of them, unless the route targets the root of the machine: the root is then the domain, and the flag decides. Under `"root"`, `false` therefore spares the root alone, and each ancestor between the root and the target runs its actions again. `handler` is the field that spares those intermediate ancestors.
185
+
186
+ CAUTION: a parallel state loses the position of its other regions when it is the domain or a state below the domain. XState exits each active state below the domain, and not only the states on the path to the target. Each other region therefore enters its `initial` state again. A parallel root under `handler: "root"` is such a domain. With `reenter: true`, a `"local"` or `"both"` transition also exits the parent. Where the parent is a region of a parallel state, the other regions of that state enter their `initial` state again too.
187
+
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`:
189
+
190
+ ```ts fragment
191
+ states: {
192
+ dashboard: { meta: { route: { path: "/dashboard", reenter: true } } },
193
+ },
194
+ ```
195
+
196
+ CAUTION: `"local"` also SCOPES the route. The generated transition then sits on the parent alone, so a `play.route` event that arrives while the parent is inactive matches nothing and the actor does not move — a deep link or a press on BACK therefore leaves the URL and the actor divergent. Choose `"local"` where that scope is the intent, such as a step that a person reaches only inside its wizard. Choose `"both"` where the state must stay reachable from everywhere.
197
+
198
+ ---
199
+
199
200
  ## The routing invariants
200
201
 
201
202
  ### 1. XMachines resolves the state id. The router never does
@@ -234,31 +235,29 @@ A bridge installs an atom subscription on the actor and a subscription on the ro
234
235
 
235
236
  ---
236
237
 
237
- ## Why not a matcher of our own
238
-
239
- The 2.2.0 review asked whether a hand-written segment matcher could drop the `URLPattern` requirement. The answer is no, and the reason is not the size of the code.
238
+ ## Why not a smaller matcher
240
239
 
241
- A pattern language has to carry the largest set of features that the nine target routers can express, and not the subset that this repository happens to use today. A count of the patterns HERE — 85 of 88 are a literal plus `:name` — measures our own habits, and it is the wrong basis for the decision. `URLPattern` is the most expressive engine available, and a matcher of our own would carry less.
240
+ A matcher that reads only a literal and `:name` covers most routes. It carries fewer features than the routers that XMachines supports, which is the problem that [the first section](#what-problem-urlpattern-solves) describes.
242
241
 
243
- Two matchers that disagree is also a worse failure than one dependency. The match and the extraction of the params would then read the same pattern differently, and a route would resolve while its params came back empty.
242
+ One engine also keeps the match and the params in agreement. With two matchers, a route could resolve while its params came back empty.
244
243
 
245
244
  ---
246
245
 
247
246
  ## Summary
248
247
 
249
- | Question | Answer |
250
- | ----------------------------------------- | ----------------------------------------------------------------------------------- |
251
- | What is the pattern language? | The `URLPattern` pathname grammar, plus hyphenated param names |
252
- | Do I install a polyfill? | No. [`@xmachines/play-router`](../api/@xmachines/play-router/README.md) carries one |
253
- | Which side turns a URL into a state? | XMachines, in every adapter |
254
- | Which side turns a state into a URL? | XMachines, with no URLPattern at all |
255
- | When does the framework parse the params? | Vue Router and SolidJS Router, when the parse covers every name |
256
- | Who releases the bridge? | You, through `disconnect()` in the teardown of your component |
248
+ | Question | Answer |
249
+ | ----------------------------------------- | ----------------------------------------------------------------------------- |
250
+ | What is the pattern language? | The `URLPattern` pathname grammar, plus hyphenated param names |
251
+ | Do I install a polyfill? | No. [`@xmachines/play-url`](../api/@xmachines/play-url/README.md) carries one |
252
+ | Which side turns a URL into a state? | XMachines, in every adapter |
253
+ | Which side turns a state into a URL? | XMachines, with no URLPattern at all |
254
+ | When does the framework parse the params? | Vue Router and SolidJS Router, when the parse covers every name |
255
+ | Who releases the bridge? | You, through `disconnect()` in the teardown of your component |
257
256
 
258
257
  ## See also
259
258
 
260
- - [Understanding State Machines](state-machines.md) — how `meta.route` reaches the route map
261
- - [Understanding Atoms](atoms.md) — the same decision, made for reactivity
259
+ - [State Machines](state-machines.md) — how `meta.route` reaches the route map
260
+ - [Atoms](atoms.md) — the same decision, made for reactivity
262
261
  - [Multi-router integration](../examples/multi-router-integration.md) — the provider pattern and `basePath`, end to end
263
262
  - [Routing patterns](../examples/routing-patterns.md) — worked route maps
264
263
  - [@xmachines/play-router](../api/@xmachines/play-router/README.md) — API reference