@xmachines/docs 5.0.2 → 6.1.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 (572) hide show
  1. package/README.md +9 -5
  2. package/api/@xmachines/core/README.md +209 -0
  3. package/api/@xmachines/core/cache/README.md +17 -0
  4. package/api/@xmachines/core/cache/functions/createLruCache.md +52 -0
  5. package/api/@xmachines/core/cache/interfaces/KeyValueCache.md +61 -0
  6. package/api/@xmachines/core/errors/README.md +11 -0
  7. package/api/@xmachines/core/errors/classes/BaseError.md +226 -0
  8. package/api/@xmachines/core/errors/classes/DisposeConflictError.md +177 -0
  9. package/api/@xmachines/core/utils/README.md +33 -0
  10. package/api/@xmachines/core/utils/functions/asDisposable.md +139 -0
  11. package/api/@xmachines/core/utils/functions/createNullRecord.md +39 -0
  12. package/api/@xmachines/core/utils/functions/createWarnOnce.md +39 -0
  13. package/api/@xmachines/core/utils/functions/describeValue.md +39 -0
  14. package/api/@xmachines/core/utils/functions/isError.md +46 -0
  15. package/api/@xmachines/core/utils/functions/isThenable.md +43 -0
  16. package/api/@xmachines/core/utils/functions/releaseQuietly.md +37 -0
  17. package/api/@xmachines/core/utils/functions/rethrowLater.md +43 -0
  18. package/api/@xmachines/core/utils/functions/safeString.md +36 -0
  19. package/api/@xmachines/core/utils/functions/shallowEqualExcept.md +42 -0
  20. package/api/@xmachines/core/utils/type-aliases/DisposeKey.md +28 -0
  21. package/api/@xmachines/core/utils/type-aliases/DisposeMember.md +14 -0
  22. package/api/@xmachines/{play-router/index → core/utils}/variables/DISPOSE.md +9 -9
  23. package/api/@xmachines/play/README.md +18 -69
  24. package/api/@xmachines/play/errors/classes/NonNullableError.md +4 -4
  25. package/api/@xmachines/play/errors/classes/PlayError.md +31 -34
  26. package/api/@xmachines/play/index/README.md +0 -8
  27. package/api/@xmachines/play/index/functions/assertNonNullable.md +1 -1
  28. package/api/@xmachines/play/index/type-aliases/PlayEvent.md +2 -2
  29. package/api/@xmachines/play-actor/README.md +1 -1
  30. package/api/@xmachines/play-actor/interfaces/ActorEvent.md +2 -2
  31. package/api/@xmachines/play-actor/interfaces/PlayActor.md +3 -3
  32. package/api/@xmachines/play-atom/README.md +35 -26
  33. package/api/@xmachines/play-atom/functions/watchAtom.md +8 -8
  34. package/api/@xmachines/play-atom/interfaces/AsyncAtomOptions.md +4 -4
  35. package/api/@xmachines/play-atom/interfaces/Atom.md +6 -6
  36. package/api/@xmachines/play-atom/interfaces/AtomObserver.md +6 -6
  37. package/api/@xmachines/play-atom/interfaces/AtomOptions.md +4 -4
  38. package/api/@xmachines/play-atom/interfaces/AtomSubscription.md +2 -2
  39. package/api/@xmachines/play-atom/interfaces/BaseAtom.md +4 -4
  40. package/api/@xmachines/play-atom/interfaces/CreateAtom.md +3 -3
  41. package/api/@xmachines/play-atom/interfaces/Readable.md +4 -4
  42. package/api/@xmachines/play-atom/interfaces/ReadonlyAtom.md +4 -4
  43. package/api/@xmachines/play-atom/type-aliases/AnyAtom.md +1 -1
  44. package/api/@xmachines/play-atom/type-aliases/AsyncAtomState.md +1 -1
  45. package/api/@xmachines/play-atom/variables/createAsyncAtom.md +1 -1
  46. package/api/@xmachines/play-atom/variables/createAtom.md +1 -1
  47. package/api/@xmachines/play-atom/variables/createWritableAtom.md +1 -1
  48. package/api/@xmachines/play-dom/README.md +40 -47
  49. package/api/@xmachines/play-dom/classes/PlayRenderer.md +4 -4
  50. package/api/@xmachines/play-dom/functions/createPlayUI.md +1 -1
  51. package/api/@xmachines/play-dom/functions/createRenderer.md +3 -3
  52. package/api/@xmachines/play-dom/interfaces/CreatePlayUIOptions.md +11 -11
  53. package/api/@xmachines/play-dom/interfaces/DomRenderContext.md +2 -2
  54. package/api/@xmachines/play-dom/interfaces/MountOptions.md +3 -3
  55. package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +14 -14
  56. package/api/@xmachines/play-dom/type-aliases/MountFn.md +6 -17
  57. package/api/@xmachines/play-dom-router/README.md +28 -45
  58. package/api/@xmachines/play-dom-router/classes/DomRouterBridge.md +13 -13
  59. package/api/@xmachines/play-dom-router/classes/RouteMap.md +5 -6
  60. package/api/@xmachines/play-dom-router/functions/connectRouter.md +1 -1
  61. package/api/@xmachines/play-dom-router/functions/createBrowserHistory.md +5 -3
  62. package/api/@xmachines/play-dom-router/functions/createRouter.md +5 -3
  63. package/api/@xmachines/play-dom-router/interfaces/BasePathOptions.md +3 -3
  64. package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +21 -67
  65. package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +16 -16
  66. package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +10 -10
  67. package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +7 -7
  68. package/api/@xmachines/play-dom-router/interfaces/RoutableActor.md +4 -4
  69. package/api/@xmachines/play-dom-router/interfaces/RouteLookupContract.md +3 -3
  70. package/api/@xmachines/play-dom-router/interfaces/RouteMapOptions.md +6 -6
  71. package/api/@xmachines/play-dom-router/interfaces/RouteMapping.md +3 -3
  72. package/api/@xmachines/play-dom-router/interfaces/RouterBridge.md +5 -5
  73. package/api/@xmachines/play-dom-router/interfaces/RouterConnection.md +12 -31
  74. package/api/@xmachines/play-dom-router/interfaces/VanillaRouter.md +12 -27
  75. package/api/@xmachines/play-pattern/README.md +10 -6
  76. package/api/@xmachines/play-pattern/functions/buildPath.md +1 -1
  77. package/api/@xmachines/play-pattern/functions/{createPatternCache.md → createLruCache.md} +19 -14
  78. package/api/@xmachines/play-pattern/functions/getIndexKey.md +1 -1
  79. package/api/@xmachines/play-pattern/functions/isDotSegment.md +1 -1
  80. package/api/@xmachines/play-pattern/functions/parsePattern.md +1 -1
  81. package/api/@xmachines/play-pattern/interfaces/GroupPart.md +6 -6
  82. package/api/@xmachines/play-pattern/interfaces/KeyValueCache.md +61 -0
  83. package/api/@xmachines/play-pattern/interfaces/LiteralPart.md +5 -5
  84. package/api/@xmachines/play-pattern/interfaces/ParamPart.md +9 -9
  85. package/api/@xmachines/play-pattern/interfaces/ParseOptions.md +4 -4
  86. package/api/@xmachines/play-pattern/interfaces/ParsedPattern.md +14 -14
  87. package/api/@xmachines/play-pattern/interfaces/PatternParam.md +6 -6
  88. package/api/@xmachines/play-pattern/type-aliases/PathBuildResult.md +1 -1
  89. package/api/@xmachines/play-pattern/type-aliases/PathParams.md +1 -1
  90. package/api/@xmachines/play-pattern/type-aliases/PatternModifier.md +1 -1
  91. package/api/@xmachines/play-pattern/type-aliases/PatternPart.md +1 -1
  92. package/api/@xmachines/play-react/README.md +4 -4
  93. package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +6 -6
  94. package/api/@xmachines/play-react/functions/useActor.md +1 -1
  95. package/api/@xmachines/play-react/functions/useAtomEffect.md +1 -1
  96. package/api/@xmachines/play-react/functions/usePlayView.md +1 -1
  97. package/api/@xmachines/play-react/interfaces/ActorProviderProps.md +10 -10
  98. package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +6 -6
  99. package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +4 -4
  100. package/api/@xmachines/play-react/interfaces/PlayUIProviderProps.md +13 -13
  101. package/api/@xmachines/play-react/interfaces/ViewContextValue.md +5 -5
  102. package/api/@xmachines/play-react/type-aliases/AnyPlayActor.md +1 -1
  103. package/api/@xmachines/play-react/variables/ActorProvider.md +1 -1
  104. package/api/@xmachines/play-react/variables/PlayRenderer.md +1 -1
  105. package/api/@xmachines/play-react/variables/PlayUIProvider.md +1 -1
  106. package/api/@xmachines/play-react-router/README.md +4 -2
  107. package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +7 -7
  108. package/api/@xmachines/play-react-router/classes/RouteMap.md +5 -6
  109. package/api/@xmachines/play-react-router/functions/createPlayRouterProvider.md +1 -1
  110. package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +1 -1
  111. package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +7 -7
  112. package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +11 -11
  113. package/api/@xmachines/play-react-router/interfaces/RoutableActor.md +4 -4
  114. package/api/@xmachines/play-react-router/interfaces/RouteMapOptions.md +6 -6
  115. package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +3 -3
  116. package/api/@xmachines/play-react-router/interfaces/RouterBridge.md +5 -5
  117. package/api/@xmachines/play-react-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
  118. package/api/@xmachines/play-react-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  119. package/api/@xmachines/play-react-router/variables/PlayRouterProvider.md +1 -1
  120. package/api/@xmachines/play-router/README.md +20 -20
  121. package/api/@xmachines/play-router/errors/classes/DuplicateBridgeError.md +4 -4
  122. package/api/@xmachines/play-router/errors/classes/DuplicateRoutePathError.md +5 -5
  123. package/api/@xmachines/play-router/errors/classes/EmptyRoutePathError.md +5 -5
  124. package/api/@xmachines/play-router/errors/classes/InvalidBasePathError.md +5 -5
  125. package/api/@xmachines/play-router/errors/classes/InvalidRoutePatternError.md +5 -5
  126. package/api/@xmachines/play-router/errors/classes/InvalidStateIdError.md +5 -5
  127. package/api/@xmachines/play-router/errors/classes/MissingBasePathParamError.md +6 -6
  128. package/api/@xmachines/play-router/errors/classes/RouterSyncError.md +4 -4
  129. package/api/@xmachines/play-router/errors/classes/UnknownStateTypeError.md +6 -6
  130. package/api/@xmachines/play-router/index/README.md +2 -3
  131. package/api/@xmachines/play-router/index/classes/RouteMap.md +5 -6
  132. package/api/@xmachines/play-router/index/classes/RouterBridgeBase.md +7 -7
  133. package/api/@xmachines/play-router/index/functions/buildPlayRouteEvent.md +1 -1
  134. package/api/@xmachines/play-router/index/functions/buildRouteTree.md +1 -1
  135. package/api/@xmachines/play-router/index/functions/cleanFrameworkParams.md +1 -1
  136. package/api/@xmachines/play-router/index/functions/{createPatternCache.md → createLruCache.md} +19 -14
  137. package/api/@xmachines/play-router/index/functions/createRouteMapFromTree.md +1 -1
  138. package/api/@xmachines/play-router/index/functions/createRouterConnection.md +1 -1
  139. package/api/@xmachines/play-router/index/functions/detectDuplicateRoutes.md +1 -1
  140. package/api/@xmachines/play-router/index/functions/extractQuery.md +1 -1
  141. package/api/@xmachines/play-router/index/functions/extractRouteParams.md +1 -1
  142. package/api/@xmachines/play-router/index/functions/findRouteById.md +1 -1
  143. package/api/@xmachines/play-router/index/functions/findRouteByPath.md +3 -3
  144. package/api/@xmachines/play-router/index/functions/isMountableBridge.md +1 -1
  145. package/api/@xmachines/play-router/index/functions/joinBasePath.md +1 -1
  146. package/api/@xmachines/play-router/index/functions/mountKey.md +1 -1
  147. package/api/@xmachines/play-router/index/functions/normalizeBasePath.md +1 -1
  148. package/api/@xmachines/play-router/index/functions/openProviderBridge.md +3 -3
  149. package/api/@xmachines/play-router/index/functions/parsePattern.md +1 -1
  150. package/api/@xmachines/play-router/index/functions/pickOwnParams.md +1 -1
  151. package/api/@xmachines/play-router/index/functions/repointProviderBridge.md +1 -1
  152. package/api/@xmachines/play-router/index/functions/resolveBasePath.md +1 -1
  153. package/api/@xmachines/play-router/index/functions/resolveFrameworkParams.md +1 -1
  154. package/api/@xmachines/play-router/index/functions/sanitizePathname.md +1 -1
  155. package/api/@xmachines/play-router/index/functions/splitLocation.md +1 -1
  156. package/api/@xmachines/play-router/index/functions/stripBasePath.md +1 -1
  157. package/api/@xmachines/play-router/index/functions/validateRouteFormat.md +1 -1
  158. package/api/@xmachines/play-router/index/functions/validateStateExists.md +1 -1
  159. package/api/@xmachines/play-router/index/interfaces/BasePathOptions.md +3 -3
  160. package/api/@xmachines/play-router/index/interfaces/BuildPlayRouteEventOptions.md +4 -4
  161. package/api/@xmachines/play-router/index/interfaces/CompileOptions.md +5 -5
  162. package/api/@xmachines/play-router/index/interfaces/FrameworkParamsSource.md +9 -9
  163. package/api/@xmachines/play-router/index/interfaces/KeyValueCache.md +61 -0
  164. package/api/@xmachines/play-router/index/interfaces/LocationLike.md +3 -3
  165. package/api/@xmachines/play-router/index/interfaces/MountableRouterBridge.md +6 -6
  166. package/api/@xmachines/play-router/index/interfaces/OpenProviderBridgeArgs.md +10 -10
  167. package/api/@xmachines/play-router/index/interfaces/ParseOptions.md +4 -4
  168. package/api/@xmachines/play-router/index/interfaces/ParsedPattern.md +12 -12
  169. package/api/@xmachines/play-router/index/interfaces/PlayRouteEvent.md +7 -7
  170. package/api/@xmachines/play-router/index/interfaces/PlayRouterProviderBaseProps.md +11 -11
  171. package/api/@xmachines/play-router/index/interfaces/ResolvedBasePath.md +3 -3
  172. package/api/@xmachines/play-router/index/interfaces/ResolvedRoutePath.md +3 -3
  173. package/api/@xmachines/play-router/index/interfaces/Routable.md +3 -3
  174. package/api/@xmachines/play-router/index/interfaces/RoutableActor.md +4 -4
  175. package/api/@xmachines/play-router/index/interfaces/RouteInfo.md +8 -8
  176. package/api/@xmachines/play-router/index/interfaces/RouteMapOptions.md +6 -6
  177. package/api/@xmachines/play-router/index/interfaces/RouteMapping.md +3 -3
  178. package/api/@xmachines/play-router/index/interfaces/RouteMatch.md +3 -3
  179. package/api/@xmachines/play-router/index/interfaces/RouteNode.md +10 -10
  180. package/api/@xmachines/play-router/index/interfaces/RouteObject.md +12 -15
  181. package/api/@xmachines/play-router/index/interfaces/RouteTree.md +5 -5
  182. package/api/@xmachines/play-router/index/interfaces/RouteWatcherHandle.md +3 -3
  183. package/api/@xmachines/play-router/index/interfaces/RouterBridge.md +5 -5
  184. package/api/@xmachines/play-router/index/interfaces/RouterBridgeOptions.md +7 -7
  185. package/api/@xmachines/play-router/index/interfaces/RouterConnection.md +12 -31
  186. package/api/@xmachines/play-router/index/interfaces/SplitLocation.md +5 -5
  187. package/api/@xmachines/play-router/index/interfaces/WindowLike.md +3 -3
  188. package/api/@xmachines/play-router/index/type-aliases/PlayRouterBridgeConstructor.md +1 -1
  189. package/api/@xmachines/play-router/index/type-aliases/RouteData.md +1 -1
  190. package/api/@xmachines/play-router/index/type-aliases/RouteDataResolver.md +1 -1
  191. package/api/@xmachines/play-router/index/type-aliases/RouteMetadata.md +1 -1
  192. package/api/@xmachines/play-router/index/type-aliases/URLPatternLike.md +3 -3
  193. package/api/@xmachines/play-router/index/variables/NO_BASE_PATH.md +1 -1
  194. package/api/@xmachines/play-router/index/variables/ROOT_NODE_ID.md +1 -1
  195. package/api/@xmachines/play-router/xstate/functions/createRouteMap.md +1 -1
  196. package/api/@xmachines/play-router/xstate/functions/extractMachineRoutes.md +1 -1
  197. package/api/@xmachines/play-router/xstate/functions/getNavigableRoutes.md +1 -1
  198. package/api/@xmachines/play-router/xstate/functions/getRoutableRoutes.md +1 -1
  199. package/api/@xmachines/play-router/xstate/functions/getRouteMappings.md +1 -1
  200. package/api/@xmachines/play-router/xstate/functions/getTransitionReachableRoutes.md +1 -1
  201. package/api/@xmachines/play-router/xstate/functions/isRouteReachable.md +1 -1
  202. package/api/@xmachines/play-router/xstate/functions/machineToGraph.md +1 -1
  203. package/api/@xmachines/play-router/xstate/functions/routeExists.md +1 -1
  204. package/api/@xmachines/play-router/xstate/interfaces/MachineEdgeData.md +3 -3
  205. package/api/@xmachines/play-router/xstate/interfaces/MachineNodeData.md +5 -5
  206. package/api/@xmachines/play-router/xstate/type-aliases/MachineGraph.md +1 -1
  207. package/api/@xmachines/play-solid/README.md +2 -5
  208. package/api/@xmachines/play-solid/functions/defineRegistry.md +5 -5
  209. package/api/@xmachines/play-solid/functions/useActor.md +1 -1
  210. package/api/@xmachines/play-solid/functions/usePlayView.md +1 -1
  211. package/api/@xmachines/play-solid/interfaces/ActorProviderProps.md +10 -10
  212. package/api/@xmachines/play-solid/interfaces/ComponentContext.md +9 -8
  213. package/api/@xmachines/play-solid/interfaces/PlayUIProviderProps.md +13 -13
  214. package/api/@xmachines/play-solid/interfaces/ViewContextValue.md +5 -5
  215. package/api/@xmachines/play-solid/type-aliases/AnyPlayActor.md +1 -1
  216. package/api/@xmachines/play-solid/variables/ActorContext.md +1 -1
  217. package/api/@xmachines/play-solid/variables/ActorProvider.md +1 -1
  218. package/api/@xmachines/play-solid/variables/PlayRenderer.md +1 -1
  219. package/api/@xmachines/play-solid/variables/PlayUIProvider.md +1 -1
  220. package/api/@xmachines/play-solid/variables/schema.md +35 -54
  221. package/api/@xmachines/play-solid-router/README.md +5 -3
  222. package/api/@xmachines/play-solid-router/classes/RouteMap.md +5 -6
  223. package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +8 -8
  224. package/api/@xmachines/play-solid-router/functions/createPlayRouterProvider.md +1 -1
  225. package/api/@xmachines/play-solid-router/interfaces/PlayActor.md +3 -3
  226. package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +7 -7
  227. package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +11 -11
  228. package/api/@xmachines/play-solid-router/interfaces/RoutableActor.md +4 -4
  229. package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +6 -6
  230. package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +3 -3
  231. package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +5 -5
  232. package/api/@xmachines/play-solid-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
  233. package/api/@xmachines/play-solid-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  234. package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +4 -4
  235. package/api/@xmachines/play-solid-router/variables/PlayRouterProvider.md +1 -1
  236. package/api/@xmachines/play-svelte/README.md +3 -3
  237. package/api/@xmachines/play-svelte/functions/defineRegistry.md +1 -1
  238. package/api/@xmachines/play-svelte/functions/getActorContext.md +1 -1
  239. package/api/@xmachines/play-svelte/functions/getPlayViewContext.md +1 -1
  240. package/api/@xmachines/play-svelte/functions/setActorContext.md +1 -1
  241. package/api/@xmachines/play-svelte/interfaces/ActorProviderProps.md +10 -10
  242. package/api/@xmachines/play-svelte/interfaces/BaseComponentProps.md +10 -8
  243. package/api/@xmachines/play-svelte/interfaces/ComponentContext.md +10 -8
  244. package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +4 -4
  245. package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +13 -13
  246. package/api/@xmachines/play-svelte/interfaces/ViewContextValue.md +5 -5
  247. package/api/@xmachines/play-svelte/type-aliases/AnyPlayActor.md +1 -1
  248. package/api/@xmachines/play-svelte-spa-router/README.md +4 -2
  249. package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +5 -6
  250. package/api/@xmachines/play-svelte-spa-router/classes/SvelteSpaRouterBridge.md +7 -7
  251. package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +1 -1
  252. package/api/@xmachines/play-svelte-spa-router/interfaces/BasePathOptions.md +3 -3
  253. package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +10 -10
  254. package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +7 -7
  255. package/api/@xmachines/play-svelte-spa-router/interfaces/RoutableActor.md +4 -4
  256. package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +6 -6
  257. package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +3 -3
  258. package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +5 -5
  259. package/api/@xmachines/play-svelte-spa-router/interfaces/RouterConnection.md +12 -31
  260. package/api/@xmachines/play-svelte-spa-router/interfaces/WindowLike.md +3 -3
  261. package/api/@xmachines/play-sveltekit-router/README.md +4 -2
  262. package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +5 -6
  263. package/api/@xmachines/play-sveltekit-router/classes/SvelteKitRouterBridge.md +7 -7
  264. package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +1 -1
  265. package/api/@xmachines/play-sveltekit-router/interfaces/BasePathOptions.md +3 -3
  266. package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +10 -10
  267. package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +3 -3
  268. package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +7 -7
  269. package/api/@xmachines/play-sveltekit-router/interfaces/RoutableActor.md +4 -4
  270. package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +6 -6
  271. package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +3 -3
  272. package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +5 -5
  273. package/api/@xmachines/play-sveltekit-router/interfaces/RouterConnection.md +12 -31
  274. package/api/@xmachines/play-tanstack-react-router/README.md +4 -2
  275. package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +5 -6
  276. package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +7 -7
  277. package/api/@xmachines/play-tanstack-react-router/functions/createPlayRouterProvider.md +1 -1
  278. package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +1 -1
  279. package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +7 -7
  280. package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +11 -11
  281. package/api/@xmachines/play-tanstack-react-router/interfaces/RoutableActor.md +4 -4
  282. package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +6 -6
  283. package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +3 -3
  284. package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +5 -5
  285. package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
  286. package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  287. package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterInstance.md +1 -1
  288. package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterLike.md +5 -5
  289. package/api/@xmachines/play-tanstack-react-router/variables/PlayRouterProvider.md +1 -1
  290. package/api/@xmachines/play-tanstack-router/README.md +11 -1
  291. package/api/@xmachines/play-tanstack-router/classes/TanStackRouterBridgeBase.md +7 -7
  292. package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouteMapLike.md +3 -3
  293. package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouterLike.md +5 -5
  294. package/api/@xmachines/play-tanstack-solid-router/README.md +4 -2
  295. package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +5 -6
  296. package/api/@xmachines/play-tanstack-solid-router/classes/TanStackSolidRouterBridge.md +7 -7
  297. package/api/@xmachines/play-tanstack-solid-router/functions/createPlayRouterProvider.md +1 -1
  298. package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +7 -7
  299. package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +11 -11
  300. package/api/@xmachines/play-tanstack-solid-router/interfaces/RoutableActor.md +4 -4
  301. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +6 -6
  302. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +3 -3
  303. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +5 -5
  304. package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
  305. package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  306. package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterInstance.md +1 -1
  307. package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterLike.md +5 -5
  308. package/api/@xmachines/play-tanstack-solid-router/variables/PlayRouterProvider.md +1 -1
  309. package/api/@xmachines/play-url/README.md +3 -3
  310. package/api/@xmachines/play-url/errors/classes/InvalidBasePathError.md +5 -5
  311. package/api/@xmachines/play-url/errors/classes/InvalidRoutePatternError.md +5 -5
  312. package/api/@xmachines/play-url/errors/classes/MissingBasePathParamError.md +6 -6
  313. package/api/@xmachines/play-url/index/README.md +2 -2
  314. package/api/@xmachines/play-url/index/functions/buildPath.md +1 -1
  315. package/api/@xmachines/play-url/index/functions/cleanFrameworkParams.md +1 -1
  316. package/api/@xmachines/play-url/index/functions/{createPatternCache.md → createLruCache.md} +19 -14
  317. package/api/@xmachines/play-url/index/functions/getCandidates.md +1 -1
  318. package/api/@xmachines/play-url/index/functions/getCompiledPattern.md +1 -1
  319. package/api/@xmachines/play-url/index/functions/getIndexKey.md +1 -1
  320. package/api/@xmachines/play-url/index/functions/holdsUnsubstitutedParam.md +1 -1
  321. package/api/@xmachines/play-url/index/functions/isDotSegment.md +1 -1
  322. package/api/@xmachines/play-url/index/functions/joinBasePath.md +1 -1
  323. package/api/@xmachines/play-url/index/functions/normalizeBasePath.md +1 -1
  324. package/api/@xmachines/play-url/index/functions/parsePattern.md +1 -1
  325. package/api/@xmachines/play-url/index/functions/pickOwnParams.md +1 -1
  326. package/api/@xmachines/play-url/index/functions/resolveBasePath.md +1 -1
  327. package/api/@xmachines/play-url/index/functions/resolveFrameworkParams.md +1 -1
  328. package/api/@xmachines/play-url/index/functions/sanitizePathname.md +1 -1
  329. package/api/@xmachines/play-url/index/functions/splitLocation.md +1 -1
  330. package/api/@xmachines/play-url/index/functions/stripBasePath.md +1 -1
  331. package/api/@xmachines/play-url/index/interfaces/BasePathOptions.md +3 -3
  332. package/api/@xmachines/play-url/index/interfaces/CompileOptions.md +5 -5
  333. package/api/@xmachines/play-url/index/interfaces/FrameworkParamsSource.md +9 -9
  334. package/api/@xmachines/play-url/index/interfaces/GroupPart.md +4 -4
  335. package/api/@xmachines/play-url/index/interfaces/KeyValueCache.md +61 -0
  336. package/api/@xmachines/play-url/index/interfaces/LiteralPart.md +3 -3
  337. package/api/@xmachines/play-url/index/interfaces/ParamPart.md +7 -7
  338. package/api/@xmachines/play-url/index/interfaces/ParseOptions.md +4 -4
  339. package/api/@xmachines/play-url/index/interfaces/ParsedPattern.md +12 -12
  340. package/api/@xmachines/play-url/index/interfaces/PatternParam.md +4 -4
  341. package/api/@xmachines/play-url/index/interfaces/ResolvedBasePath.md +3 -3
  342. package/api/@xmachines/play-url/index/interfaces/SplitLocation.md +5 -5
  343. package/api/@xmachines/play-url/index/type-aliases/PathBuildResult.md +1 -1
  344. package/api/@xmachines/play-url/index/type-aliases/PathParams.md +1 -1
  345. package/api/@xmachines/play-url/index/type-aliases/PatternModifier.md +1 -1
  346. package/api/@xmachines/play-url/index/type-aliases/PatternPart.md +1 -1
  347. package/api/@xmachines/play-url/index/type-aliases/URLPatternCtor.md +1 -1
  348. package/api/@xmachines/play-url/index/type-aliases/URLPatternLike.md +3 -3
  349. package/api/@xmachines/play-url/index/variables/NO_BASE_PATH.md +1 -1
  350. package/api/@xmachines/play-url/index/variables/URLPattern.md +1 -1
  351. package/api/@xmachines/play-view/README.md +56 -24
  352. package/api/@xmachines/play-view/errors/README.md +2 -1
  353. package/api/@xmachines/play-view/errors/classes/InvalidViewOutletError.md +204 -0
  354. package/api/@xmachines/play-view/errors/classes/ReadOnlyContextError.md +5 -5
  355. package/api/@xmachines/play-view/index/README.md +6 -0
  356. package/api/@xmachines/play-view/index/functions/attachRenderErrorHandler.md +1 -1
  357. package/api/@xmachines/play-view/index/functions/composePlayState.md +1 -1
  358. package/api/@xmachines/play-view/index/functions/composeViews.md +35 -0
  359. package/api/@xmachines/play-view/index/functions/createFailureLatch.md +1 -1
  360. package/api/@xmachines/play-view/index/functions/createReportGuard.md +1 -1
  361. package/api/@xmachines/play-view/index/functions/createViewStoreLifecycle.md +1 -1
  362. package/api/@xmachines/play-view/index/functions/guardContextWrites.md +1 -1
  363. package/api/@xmachines/play-view/index/functions/refreshContextSubtree.md +1 -1
  364. package/api/@xmachines/play-view/index/functions/reuseComposedState.md +2 -2
  365. package/api/@xmachines/play-view/index/functions/sameViewInputs.md +1 -1
  366. package/api/@xmachines/play-view/index/functions/toAtomState.md +1 -1
  367. package/api/@xmachines/play-view/index/functions/typedSpec.md +11 -11
  368. package/api/@xmachines/play-view/index/interfaces/BaseActorProviderProps.md +5 -5
  369. package/api/@xmachines/play-view/index/interfaces/BaseViewContextValue.md +5 -5
  370. package/api/@xmachines/play-view/index/interfaces/ComposedView.md +16 -0
  371. package/api/@xmachines/play-view/index/interfaces/FailureLatch.md +3 -3
  372. package/api/@xmachines/play-view/index/interfaces/PlaySpec.md +12 -8
  373. package/api/@xmachines/play-view/index/interfaces/ReportGuard.md +5 -5
  374. package/api/@xmachines/play-view/index/interfaces/ReportGuardMessages.md +5 -5
  375. package/api/@xmachines/play-view/index/interfaces/ResolveViewStoreOptions.md +2 -2
  376. package/api/@xmachines/play-view/index/interfaces/ViewInputs.md +4 -4
  377. package/api/@xmachines/play-view/index/interfaces/ViewMeta.md +25 -0
  378. package/api/@xmachines/play-view/index/interfaces/ViewOutlet.md +23 -0
  379. package/api/@xmachines/play-view/index/interfaces/ViewStoreLifecycle.md +3 -3
  380. package/api/@xmachines/play-view/index/interfaces/ViewStoreResolution.md +4 -4
  381. package/api/@xmachines/play-view/index/interfaces/ViewTree.md +15 -0
  382. package/api/@xmachines/play-view/index/interfaces/ViewTreeChild.md +14 -0
  383. package/api/@xmachines/play-view/index/interfaces/Viewable.md +4 -4
  384. package/api/@xmachines/play-view/index/type-aliases/ViewActor.md +1 -1
  385. package/api/@xmachines/play-view/index/variables/CONTEXT_STATE_KEY.md +1 -1
  386. package/api/@xmachines/play-vue/README.md +4 -6
  387. package/api/@xmachines/play-vue/functions/defineRegistry.md +1 -1
  388. package/api/@xmachines/play-vue/functions/useActor.md +1 -1
  389. package/api/@xmachines/play-vue/functions/usePlayView.md +1 -1
  390. package/api/@xmachines/play-vue/interfaces/ActorProviderProps.md +8 -8
  391. package/api/@xmachines/play-vue/interfaces/ComponentContext.md +1 -0
  392. package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +11 -11
  393. package/api/@xmachines/play-vue/interfaces/ViewContextValue.md +5 -5
  394. package/api/@xmachines/play-vue/type-aliases/AnyPlayActor.md +1 -1
  395. package/api/@xmachines/play-vue/type-aliases/ComponentEntry.md +1 -1
  396. package/api/@xmachines/play-vue/type-aliases/ComponentsMap.md +1 -1
  397. package/api/@xmachines/play-vue/type-aliases/DefineRegistryOptions.md +2 -2
  398. package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
  399. package/api/@xmachines/play-vue/variables/schema.md +35 -54
  400. package/api/@xmachines/play-vue-router/README.md +4 -2
  401. package/api/@xmachines/play-vue-router/errors/classes/VueRouterNavigationError.md +4 -4
  402. package/api/@xmachines/play-vue-router/errors/classes/VueRouterSendError.md +4 -4
  403. package/api/@xmachines/play-vue-router/index/classes/RouteMap.md +5 -6
  404. package/api/@xmachines/play-vue-router/index/classes/VueRouterBridge.md +7 -7
  405. package/api/@xmachines/play-vue-router/index/interfaces/PlayRouteEvent.md +7 -7
  406. package/api/@xmachines/play-vue-router/index/interfaces/RoutableActor.md +4 -4
  407. package/api/@xmachines/play-vue-router/index/interfaces/RouteMapOptions.md +6 -6
  408. package/api/@xmachines/play-vue-router/index/interfaces/RouteMapping.md +3 -3
  409. package/api/@xmachines/play-vue-router/index/interfaces/RouterBridge.md +5 -5
  410. package/api/@xmachines/play-vue-router/index/variables/PlayRouterProvider.md +7 -7
  411. package/api/@xmachines/play-xstate/README.md +42 -24
  412. package/api/@xmachines/play-xstate/errors/classes/ActorThrewNonErrorError.md +4 -4
  413. package/api/@xmachines/play-xstate/errors/classes/InvalidEventError.md +5 -5
  414. package/api/@xmachines/play-xstate/errors/classes/InvalidMachineError.md +4 -4
  415. package/api/@xmachines/play-xstate/errors/classes/InvalidRouteHandlerError.md +5 -5
  416. package/api/@xmachines/play-xstate/errors/classes/InvalidRouteMetadataError.md +5 -5
  417. package/api/@xmachines/play-xstate/errors/classes/InvalidRouteParamError.md +14 -14
  418. package/api/@xmachines/play-xstate/errors/classes/MissingRouteParamError.md +6 -6
  419. package/api/@xmachines/play-xstate/errors/classes/MissingStateIdError.md +6 -6
  420. package/api/@xmachines/play-xstate/index/README.md +0 -4
  421. package/api/@xmachines/play-xstate/index/classes/PlayerActor.md +10 -45
  422. package/api/@xmachines/play-xstate/index/functions/compose.md +4 -4
  423. package/api/@xmachines/play-xstate/index/functions/definePlayer.md +2 -2
  424. package/api/@xmachines/play-xstate/index/interfaces/PlayerConfig.md +4 -4
  425. package/api/@xmachines/play-xstate/index/interfaces/PlayerFactoryResumeOptions.md +2 -2
  426. package/api/@xmachines/play-xstate/index/interfaces/PlayerOptions.md +7 -7
  427. package/api/@xmachines/play-xstate/index/type-aliases/Capability.md +1 -1
  428. package/api/@xmachines/play-xstate/index/type-aliases/PlayerConstructor.md +1 -1
  429. package/api/@xmachines/play-xstate/index/type-aliases/PlayerFactory.md +1 -1
  430. package/api/@xmachines/play-xstate/with-routing/functions/buildRouteUrl.md +1 -1
  431. package/api/@xmachines/play-xstate/with-routing/functions/deriveRoute.md +1 -1
  432. package/api/@xmachines/play-xstate/with-routing/functions/formatPlayRouteTransitions.md +1 -1
  433. package/api/@xmachines/play-xstate/with-routing/functions/isAbsoluteRoute.md +1 -1
  434. package/api/@xmachines/play-xstate/with-routing/functions/withRouting.md +1 -1
  435. package/api/@xmachines/play-xstate/with-routing/interfaces/RouteContext.md +5 -5
  436. package/api/@xmachines/play-xstate/with-routing/interfaces/RouteObject.md +12 -15
  437. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteData.md +1 -1
  438. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteDataResolver.md +1 -1
  439. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMachineConfig.md +4 -4
  440. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMetadata.md +1 -1
  441. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteStateNode.md +5 -5
  442. package/api/@xmachines/play-xstate/with-view/functions/withView.md +2 -4
  443. package/api/@xmachines/shared/vite-aliases/README.md +7 -0
  444. package/api/@xmachines/shared/vite-aliases/functions/xmAliases.md +11 -5
  445. package/api/@xmachines/shared/vite-aliases/functions/xmBuildOutput.md +37 -0
  446. package/api/@xmachines/shared/vite-aliases/functions/xmBuildOutputFile.md +28 -0
  447. package/api/@xmachines/shared/vite-aliases/functions/xmCacheDir.md +1 -1
  448. package/api/@xmachines/shared/vite-aliases/functions/xmOptimizeDeps.md +1 -1
  449. package/api/@xmachines/shared/vite-aliases/functions/xmResolve.md +1 -1
  450. package/api/@xmachines/shared/vite-aliases/functions/xmSvelteRunes.md +2 -2
  451. package/api/@xmachines/shared/vite-aliases/functions/xmTestTarget.md +26 -0
  452. package/api/@xmachines/shared/vite-aliases/type-aliases/XmTestTarget.md +15 -0
  453. package/api/@xmachines/shared/vitest/functions/defineXmBrowserConfig.md +1 -1
  454. package/api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md +5 -1
  455. package/api/@xmachines/shared/vitest/interfaces/XmBrowserConfigOptions.md +4 -4
  456. package/api/README.md +1 -0
  457. package/api/llms.txt +9 -4
  458. package/contributing/architecture.md +54 -29
  459. package/contributing/configuration.md +44 -9
  460. package/contributing/development.md +28 -28
  461. package/contributing/migrating-to-play-atom.md +2 -1
  462. package/contributing/testing.md +33 -4
  463. package/examples/@xmachines/play-dom-demo/functions/createAuthActionHandlers.md +9 -9
  464. package/examples/@xmachines/play-dom-demo/functions/createConfirmDialog.md +1 -1
  465. package/examples/@xmachines/play-dom-demo/functions/createNavBar.md +1 -1
  466. package/examples/@xmachines/play-dom-demo/functions/initShell.md +1 -1
  467. package/examples/@xmachines/play-dom-demo/type-aliases/AuthCatalog.md +1 -1
  468. package/examples/@xmachines/play-dom-demo/variables/About.md +1 -1
  469. package/examples/@xmachines/play-dom-demo/variables/Button.md +1 -1
  470. package/examples/@xmachines/play-dom-demo/variables/Contact.md +1 -1
  471. package/examples/@xmachines/play-dom-demo/variables/Dashboard.md +1 -1
  472. package/examples/@xmachines/play-dom-demo/variables/Field.md +1 -1
  473. package/examples/@xmachines/play-dom-demo/variables/Home.md +1 -1
  474. package/examples/@xmachines/play-dom-demo/variables/Login.md +1 -1
  475. package/examples/@xmachines/play-dom-demo/variables/NavBarView.md +1 -1
  476. package/examples/@xmachines/play-dom-demo/variables/Navigation.md +1 -1
  477. package/examples/@xmachines/play-dom-demo/variables/Overview.md +1 -1
  478. package/examples/@xmachines/play-dom-demo/variables/Panel.md +1 -1
  479. package/examples/@xmachines/play-dom-demo/variables/Profile.md +1 -1
  480. package/examples/@xmachines/play-dom-demo/variables/Settings.md +1 -1
  481. package/examples/@xmachines/play-dom-demo/variables/Stats.md +1 -1
  482. package/examples/@xmachines/play-dom-demo/variables/authCatalog.md +1 -1
  483. package/examples/@xmachines/play-dom-demo/variables/demoComponents.md +15 -15
  484. package/examples/@xmachines/play-react-demo/functions/createAuthActionHandlers.md +9 -9
  485. package/examples/@xmachines/play-react-demo/type-aliases/AuthCatalog.md +1 -1
  486. package/examples/@xmachines/play-react-demo/variables/About.md +1 -1
  487. package/examples/@xmachines/play-react-demo/variables/Button.md +1 -1
  488. package/examples/@xmachines/play-react-demo/variables/Contact.md +1 -1
  489. package/examples/@xmachines/play-react-demo/variables/Dashboard.md +1 -1
  490. package/examples/@xmachines/play-react-demo/variables/DebugPanel.md +1 -1
  491. package/examples/@xmachines/play-react-demo/variables/Field.md +1 -1
  492. package/examples/@xmachines/play-react-demo/variables/Home.md +1 -1
  493. package/examples/@xmachines/play-react-demo/variables/Login.md +1 -1
  494. package/examples/@xmachines/play-react-demo/variables/NavBar.md +1 -1
  495. package/examples/@xmachines/play-react-demo/variables/NavBarView.md +1 -1
  496. package/examples/@xmachines/play-react-demo/variables/Navigation.md +1 -1
  497. package/examples/@xmachines/play-react-demo/variables/Overview.md +1 -1
  498. package/examples/@xmachines/play-react-demo/variables/Panel.md +1 -1
  499. package/examples/@xmachines/play-react-demo/variables/Profile.md +1 -1
  500. package/examples/@xmachines/play-react-demo/variables/Settings.md +1 -1
  501. package/examples/@xmachines/play-react-demo/variables/Shell.md +1 -1
  502. package/examples/@xmachines/play-react-demo/variables/Stats.md +1 -1
  503. package/examples/@xmachines/play-react-demo/variables/authCatalog.md +1 -1
  504. package/examples/@xmachines/play-react-demo/variables/demoComponents.md +15 -15
  505. package/examples/@xmachines/play-solid-demo/functions/createAuthActionHandlers.md +9 -9
  506. package/examples/@xmachines/play-solid-demo/type-aliases/AuthCatalog.md +1 -1
  507. package/examples/@xmachines/play-solid-demo/variables/About.md +1 -1
  508. package/examples/@xmachines/play-solid-demo/variables/Button.md +1 -1
  509. package/examples/@xmachines/play-solid-demo/variables/Contact.md +1 -1
  510. package/examples/@xmachines/play-solid-demo/variables/Dashboard.md +1 -1
  511. package/examples/@xmachines/play-solid-demo/variables/DebugPanel.md +1 -1
  512. package/examples/@xmachines/play-solid-demo/variables/Field.md +1 -1
  513. package/examples/@xmachines/play-solid-demo/variables/Home.md +1 -1
  514. package/examples/@xmachines/play-solid-demo/variables/Login.md +1 -1
  515. package/examples/@xmachines/play-solid-demo/variables/NavBar.md +1 -1
  516. package/examples/@xmachines/play-solid-demo/variables/NavBarView.md +1 -1
  517. package/examples/@xmachines/play-solid-demo/variables/Navigation.md +1 -1
  518. package/examples/@xmachines/play-solid-demo/variables/Overview.md +1 -1
  519. package/examples/@xmachines/play-solid-demo/variables/Panel.md +1 -1
  520. package/examples/@xmachines/play-solid-demo/variables/Profile.md +1 -1
  521. package/examples/@xmachines/play-solid-demo/variables/Settings.md +1 -1
  522. package/examples/@xmachines/play-solid-demo/variables/Shell.md +1 -1
  523. package/examples/@xmachines/play-solid-demo/variables/Stats.md +1 -1
  524. package/examples/@xmachines/play-solid-demo/variables/authCatalog.md +190 -277
  525. package/examples/@xmachines/play-solid-demo/variables/demoComponents.md +17 -17
  526. package/examples/@xmachines/play-svelte-demo/functions/createAuthActionHandlers.md +9 -9
  527. package/examples/@xmachines/play-svelte-demo/type-aliases/AuthCatalog.md +1 -1
  528. package/examples/@xmachines/play-svelte-demo/variables/authCatalog.md +190 -277
  529. package/examples/@xmachines/play-svelte-demo/variables/demoComponents.md +15 -15
  530. package/examples/@xmachines/play-vue-demo/functions/createAuthActionHandlers.md +9 -9
  531. package/examples/@xmachines/play-vue-demo/type-aliases/AuthCatalog.md +1 -1
  532. package/examples/@xmachines/play-vue-demo/variables/App.md +1 -1
  533. package/examples/@xmachines/play-vue-demo/variables/authCatalog.md +190 -277
  534. package/examples/@xmachines/play-vue-demo/variables/demoComponents.md +1 -1
  535. package/examples/README.md +2 -2
  536. package/examples/multi-router-integration.md +1 -1
  537. package/examples/routing-patterns.md +1 -1
  538. package/examples/traffic-light.md +1 -1
  539. package/guides/README.md +5 -4
  540. package/guides/actor-model.md +4 -4
  541. package/guides/atoms.md +28 -16
  542. package/guides/getting-started.md +14 -16
  543. package/guides/inspector.md +1 -1
  544. package/guides/routing.md +41 -45
  545. package/guides/state-machines.md +69 -4
  546. package/guides/views.md +347 -0
  547. package/package.json +1 -1
  548. package/rfc/broker.md +4 -0
  549. package/rfc/browser.md +4 -0
  550. package/rfc/cli.md +4 -0
  551. package/rfc/git.md +4 -0
  552. package/rfc/mcp.md +4 -0
  553. package/rfc/node.md +4 -0
  554. package/rfc/play.md +25 -9
  555. package/rfc/rest.md +4 -0
  556. package/rfc/run.md +4 -0
  557. package/rfc/streams.md +4 -0
  558. package/api/@xmachines/play/index/functions/asCleanup.md +0 -77
  559. package/api/@xmachines/play/index/functions/shallowEqualExcept.md +0 -29
  560. package/api/@xmachines/play/index/type-aliases/Cleanup.md +0 -38
  561. package/api/@xmachines/play/index/type-aliases/DisposeKey.md +0 -32
  562. package/api/@xmachines/play/index/variables/DISPOSE.md +0 -34
  563. package/api/@xmachines/play-atom/type-aliases/Cleanup.md +0 -38
  564. package/api/@xmachines/play-dom/functions/asCleanup.md +0 -77
  565. package/api/@xmachines/play-dom/type-aliases/Cleanup.md +0 -38
  566. package/api/@xmachines/play-dom-router/functions/asCleanup.md +0 -77
  567. package/api/@xmachines/play-dom-router/type-aliases/Cleanup.md +0 -38
  568. package/api/@xmachines/play-dom-router/variables/DISPOSE.md +0 -34
  569. package/api/@xmachines/play-pattern/interfaces/PatternCache.md +0 -65
  570. package/api/@xmachines/play-router/index/interfaces/PatternCache.md +0 -65
  571. package/api/@xmachines/play-url/index/interfaces/PatternCache.md +0 -65
  572. package/api/@xmachines/play-xstate/index/variables/DISPOSE.md +0 -34
@@ -0,0 +1,347 @@
1
+ # Views in XMachines
2
+
3
+ A view of XMachines is a fact about a STATE, and not a fact about a component tree. A state node declares `meta.view`, the actor derives the current view from the active states, and a renderer turns that description into the UI of one framework.
4
+
5
+ This guide tells which state supplies the view, how a parent view holds the views of its substates, how a view reads the machine context, and when a renderer keeps the UI and when it builds the UI again. It also names the four rules that every one of the five renderers follows.
6
+
7
+ After you read it, you know where to put a value that the screen shows, why a write to `/context` throws, and why a draft in a form survives one event and not another.
8
+
9
+ ---
10
+
11
+ ## What problem a view spec solves
12
+
13
+ An application without a machine decides the screen inside its components: `if (user && !loading) return <Dashboard />`. Each such condition is a second copy of a decision, and the copies disagree when one of them changes.
14
+
15
+ The machine knows the state already. XMachines therefore puts the view ON the state, as data. The component tree holds no condition that selects a screen, and the machine holds no import of a framework.
16
+
17
+ The data is a spec of `@xmachines/json-render-core`: a flat map of elements, each with a component type, props and children. One spec renders in React, in Vue, in SolidJS, in Svelte and in the plain DOM, because each renderer reads the same grammar.
18
+
19
+ ---
20
+
21
+ ## The three parts of a view
22
+
23
+ | Part | Where it lives | What it says |
24
+ | -------- | ---------------------------------------------- | ----------------------------------------------------- |
25
+ | catalog | `defineCatalog(schema, …)`, one for each app | the component types and the actions that exist |
26
+ | spec | `meta.view` of a state node | WHICH components show in that state, with which data |
27
+ | registry | `defineRegistry(catalog, …)`, one per renderer | HOW each component renders, and what each action does |
28
+
29
+ The catalog is the vocabulary. It holds Zod schemas and no framework code. The spec uses the vocabulary. The registry binds each word to a component of one framework and to a handler of each action.
30
+
31
+ A machine and its specs therefore change never when you change the framework. You write a second registry.
32
+
33
+ ---
34
+
35
+ ## Declaring a view
36
+
37
+ A `meta.view` is a [`ViewMeta`](../api/@xmachines/play-view/index/interfaces/ViewMeta.md). `root` names the first element, and `elements` holds every element by its key:
38
+
39
+ ```ts
40
+ import { setup } from "xstate";
41
+ import { typedSpec } from "@xmachines/play-view";
42
+
43
+ const machine = setup({}).createMachine({
44
+ id: "app",
45
+ initial: "home",
46
+ states: {
47
+ home: {
48
+ meta: {
49
+ view: typedSpec({
50
+ root: "page",
51
+ elements: {
52
+ page: { type: "Page", props: { title: "Welcome" }, children: ["intro"] },
53
+ intro: { type: "Text", props: { text: "Choose a task." }, children: [] },
54
+ },
55
+ }),
56
+ },
57
+ },
58
+ },
59
+ });
60
+ ```
61
+
62
+ XState types `meta` as `Record<string, unknown>`, so TypeScript checks nothing that you write there. `typedSpec` of [`@xmachines/play-view`](../api/@xmachines/play-view/README.md) gives the literal the type `ViewMeta` where you write it, and it does nothing at run time. The check of an excess property works on an inline literal only. For a spec in a variable, write `satisfies ViewMeta` at the literal.
63
+
64
+ A `ViewMeta` is what you WRITE. A [`PlaySpec`](../api/@xmachines/play-view/index/interfaces/PlaySpec.md) is what the actor DERIVES from it, and what a renderer receives. The derivation consumes `outlets`, it adds the machine context, and it stamps `viewKey` and `viewParts`.
65
+
66
+ The view is an OPTIONAL capability of the actor. Compose it with `withView` of [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md), from its `view` subpath:
67
+
68
+ ```ts
69
+ import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
70
+ import { withView } from "@xmachines/play-xstate/view";
71
+
72
+ const actor = definePlayer({ machine, actor: compose(PlayerActor, withView) })();
73
+ actor.start();
74
+ ```
75
+
76
+ The actor then holds `currentView`, a `ReadonlyAtom<PlaySpec | null>`. An application that renders no view composes no `withView`, and it installs no json-render.
77
+
78
+ ---
79
+
80
+ ## Which state supplies the view
81
+
82
+ **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
+
84
+ ```ts
85
+ states: {
86
+ dashboard: {
87
+ meta: { view: dashboardView }, // shows in dashboard.overview
88
+ initial: "overview",
89
+ states: {
90
+ overview: {},
91
+ settings: { meta: { view: settingsView } }, // replaces dashboardView
92
+ },
93
+ },
94
+ },
95
+ ```
96
+
97
+ When no active state declares a view, `currentView` holds `null`, and the renderer shows its `fallback` content.
98
+
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.
100
+
101
+ ### A layout and its pages: `outlets`
102
+
103
+ 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
+
105
+ ```ts
106
+ const shell = typedSpec({
107
+ root: "shell",
108
+ state: { collapsed: false },
109
+ elements: {
110
+ shell: { type: "Shell", props: {}, children: ["title"] },
111
+ title: { type: "Heading", props: { text: "App" }, children: [] },
112
+ },
113
+ outlets: { "*": { element: "shell" } },
114
+ });
115
+
116
+ states: {
117
+ app: {
118
+ meta: { view: shell },
119
+ initial: "home",
120
+ states: {
121
+ home: { meta: { route: "/", view: homeView } },
122
+ search: { meta: { route: "/search", view: searchView } },
123
+ },
124
+ },
125
+ },
126
+ ```
127
+
128
+ - The key of an outlet is the key of a child in `states`, or `"*"` for each active child that has no outlet of its own. A child with neither stays off the screen.
129
+ - A compound state fills one outlet with its active child. A parallel state fills one outlet for each region, in the order of `states`.
130
+ - `slot` names a named slot of the element. Omit it, and the renderer appends the child view to the `children` of the element.
131
+ - 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
+ - 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.
133
+
134
+ 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
+
136
+ ### The view key
137
+
138
+ The derivation stamps the identity of the view on the spec, as `viewKey`. For a view without outlets, it is the id of the state that declares the view. For a composed view, it is the id of the outermost state that declares `outlets`, and `viewParts` lists the id of each composed state. The [renderer section](#when-the-renderer-keeps-the-ui) tells why the key matters. Never write `viewKey` or `viewParts` yourself: `typedSpec` refuses both, and the derivation overwrites them.
139
+
140
+ ---
141
+
142
+ ## Reading the machine context
143
+
144
+ Each derived view carries the whole machine context in its `state`, under the key `context`:
145
+
146
+ ```
147
+ derived state = { ...meta.view.state, context: <the machine context> }
148
+ ```
149
+
150
+ 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
+
152
+ ```ts
153
+ elements: {
154
+ greeting: { type: "Text", props: { text: { $state: "/context/username" } }, children: [] },
155
+ tasks: {
156
+ type: "List",
157
+ props: {},
158
+ repeat: { statePath: "/context/tasks", key: "id" },
159
+ children: ["task"],
160
+ },
161
+ task: { type: "Text", props: { text: { $item: "title" } }, children: [] },
162
+ },
163
+ ```
164
+
165
+ The routing capability writes the URL into the context: the params go to `context.params`, and the query goes to `context.query`. A spec therefore reads `/context/params/userId` for a value of the URL and `/context/username` for a value of the machine. The path tells the origin of each value, and a param can hide no field of the machine.
166
+
167
+ **The `/context` subtree is read-only to the spec.** A `$bindState` write or a `setState` write under `/context` throws `ReadOnlyContextError`, and the message names the path. The context changes through a machine event only. A handler that writes the whole snapshot back, with the `context` key unchanged, does not throw: the store ignores a write of an identical value.
168
+
169
+ `context` is a reserved key. When `meta.view.state` declares a top-level `context` key of its own, the derivation skips the projection for that view, the authored value wins, and a warning in development names the conflict. Rename the field.
170
+
171
+ CAUTION: the projection shows the WHOLE context to the client. A debug panel, an inspector and a validator read the view store, and each one is a client-side tool. Keep a secret out of the context.
172
+
173
+ Validate the DERIVED view, `actor.currentView.get()`, and not the raw `meta.view`. The `state` of the derived view describes the store as it is, so a tool such as `validateSpec` sees a spec that agrees with itself.
174
+
175
+ ---
176
+
177
+ ## Two kinds of state
178
+
179
+ A view store holds two kinds of state, at two places, with two owners.
180
+
181
+ | Kind | Where in the store | Written by | Lives for |
182
+ | --------------- | --------------------- | ------------------------------------------------------------ | ------------- |
183
+ | ephemeral state | the root: `/username` | `spec.state` seeds it; `$bindState` and `setState` change it | one `viewKey` |
184
+ | domain state | `/context/…` | the machine, through an event | the actor |
185
+
186
+ Ephemeral state is the state of the screen: a draft in a field, an open panel, a selected tab. The machine does not need it until the user commits it.
187
+
188
+ Domain state is the state of the application. Each change of it is an event, so the inspector shows each change with its cause.
189
+
190
+ This login form uses both. The field binds to `/username`, and the submit sends the value to the machine:
191
+
192
+ ```ts
193
+ view: typedSpec({
194
+ root: "form",
195
+ state: { username: "" },
196
+ elements: {
197
+ form: {
198
+ type: "Login",
199
+ props: { username: { $bindState: "/username" } },
200
+ children: [],
201
+ on: {
202
+ submit: { action: "login", params: { username: { $state: "/username" } } },
203
+ },
204
+ },
205
+ },
206
+ }),
207
+ ```
208
+
209
+ Keep high-frequency data in the ephemeral state or in a child actor, and not in the context. Each change of a top-level field of the context emits the view again. A keystroke is not a fact of the domain.
210
+
211
+ ---
212
+
213
+ ## How an interaction becomes an event
214
+
215
+ 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
+
217
+ ```ts
218
+ const registryResult = defineRegistry(catalog, {
219
+ components: { Login },
220
+ actions: {
221
+ login: async ({ username }) => actor.send({ type: "auth.login", username }),
222
+ },
223
+ });
224
+ ```
225
+
226
+ The guards of the machine then decide. The renderer changes no state of the machine, and it selects no view. It sends, and it shows what the actor derives next.
227
+
228
+ 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
+
230
+ ```ts
231
+ on: {
232
+ press: [
233
+ { action: "addTask", params: { title: { $state: "/newTaskTitle" } } },
234
+ { action: "setState", params: { statePath: "/newTaskTitle", value: "" } },
235
+ ],
236
+ },
237
+ ```
238
+
239
+ In an action param, `{ $item: "id" }` resolves to the JSON pointer of the item field, such as `/context/tasks/0/id`, and not to its value. The built-ins need the pointer to address the entry. A handler that needs the value reads it from the state that it receives as its third argument.
240
+
241
+ ---
242
+
243
+ ## When the renderer keeps the UI
244
+
245
+ A renderer holds one view store for each view, and the `viewKey` decides its lifetime.
246
+
247
+ | The emission | What the renderer does |
248
+ | ------------------------------------- | --------------------------------------------------------------- |
249
+ | a new `viewKey` | it seeds a NEW store from `spec.state` |
250
+ | the same `viewKey` | it replaces `/context` in the live store, and it keeps the rest |
251
+ | the same `viewKey`, new `viewParts` | as above, and it writes each authored key that the store lacks |
252
+ | no `viewKey`, from a hand-built actor | it seeds a new store for each emission |
253
+ | a different actor | it discards the store with the actor |
254
+ | `null` | it shows the fallback, and it resolves no store |
255
+
256
+ 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
+
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.
259
+
260
+ A parent keeps the ephemeral state across a move between its children in one of two ways:
261
+
262
+ - **Declare the view on the parent**, and no view on the children. The `viewKey` stays the id of the parent.
263
+ - **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
+
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.
266
+
267
+ `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
+
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.
270
+
271
+ ---
272
+
273
+ ## When a view fails
274
+
275
+ 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
+
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:
278
+
279
+ | Renderer | The `onError` prop of the provider |
280
+ | ----------------------------------------------------------------- | ---------------------------------- |
281
+ | [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | `(error, info, reset) => void` |
282
+ | the four other renderers | `(error, reset) => void` |
283
+
284
+ 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
+
286
+ `onRenderError` receives the failure of one catalog component, with the name of the component, and it replaces every handler of `defineRegistry`.
287
+
288
+ ---
289
+
290
+ ## The view invariants
291
+
292
+ ### 1. The machine selects the view. The renderer never does
293
+
294
+ The renderer reads `currentView` and shows it. No component decides which screen shows. A condition that selects a screen belongs in a state and its guards.
295
+
296
+ ### 2. `/context` is read-only to the spec
297
+
298
+ A spec reads the machine context, and it writes it never. The store throws `ReadOnlyContextError` for a write, and the machine changes the context through an event. The renderer refreshes the subtree through a store below the guard, so the rule binds the spec and not the machinery.
299
+
300
+ ### 3. The `viewKey` decides the life of the ephemeral state
301
+
302
+ The same key keeps the store, and a new key seeds a new one. Put a view, or a layout with `outlets`, on the state whose lifetime the ephemeral state must have.
303
+
304
+ ### 4. A renderer reads `currentView` and `send`, and nothing else
305
+
306
+ A provider takes a `ViewActor`: the actor contract and the `Viewable` capability. It names no engine and no router. The five renderers read no router package, and the routers read no view package. The two halves meet in the application only.
307
+
308
+ ---
309
+
310
+ ## Which renderer to use
311
+
312
+ | Renderer | Mount |
313
+ | ------------------------------------------------------------------- | ---------------------------------------------- |
314
+ | [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | `<PlayUIProvider>` around `<PlayRenderer />` |
315
+ | [`@xmachines/play-vue`](../api/@xmachines/play-vue/README.md) | `<PlayUIProvider>` around `<PlayRenderer />` |
316
+ | [`@xmachines/play-solid`](../api/@xmachines/play-solid/README.md) | `<PlayUIProvider>` around `<PlayRenderer />` |
317
+ | [`@xmachines/play-svelte`](../api/@xmachines/play-svelte/README.md) | `<PlayUIProvider>` around `<PlayRenderer />` |
318
+ | [`@xmachines/play-dom`](../api/@xmachines/play-dom/README.md) | `createPlayUI(registryResult)(actor, element)` |
319
+
320
+ 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
+
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.
323
+
324
+ ---
325
+
326
+ ## Summary
327
+
328
+ | Question | Answer |
329
+ | ----------------------------------------- | ------------------------------------------------------------------- |
330
+ | Where does a view come from? | `meta.view` of the deepest active state that declares one |
331
+ | How does a layout show its page? | The layout declares `outlets`, and the page view goes into one |
332
+ | What shows when no state declares a view? | The `fallback` of the provider |
333
+ | How does a spec read the machine context? | `{ $state: "/context/…" }`, in a prop, a condition or a repeat |
334
+ | Can a spec write the context? | No. Send the actor an event |
335
+ | Where does a draft go? | In `spec.state`, at the root of the store, with `$bindState` |
336
+ | When does a draft reset? | When the `viewKey` changes: the outermost state of the view changes |
337
+ | Which side selects the screen? | The machine, in every renderer |
338
+ | Who reports a failure of a render? | The provider, one time, through its `onError` |
339
+
340
+ ## See also
341
+
342
+ - [State Machines](state-machines.md) — how `meta.route` and `meta.view` sit on a state node
343
+ - [Routing](routing.md) — the other half, and the same rule of a single active branch
344
+ - [Atoms](atoms.md) — the primitive under `currentView`
345
+ - [The Actor Model](actor-model.md) — why the machine holds no framework import
346
+ - [Form validation](../examples/form-validation.md) — a worked login form, with `$bindState` and a guard
347
+ - [@xmachines/play-view](../api/@xmachines/play-view/README.md) — API reference
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xmachines/docs",
3
- "version": "5.0.2",
3
+ "version": "6.1.0",
4
4
  "description": "Documentation for XMachines",
5
5
  "keywords": [
6
6
  "documentation",
package/rfc/broker.md CHANGED
@@ -1,3 +1,7 @@
1
+ ---
2
+ status: planned
3
+ ---
4
+
1
5
  # RFC: Broker
2
6
 
3
7
  **Status:** Draft
package/rfc/browser.md CHANGED
@@ -1,3 +1,7 @@
1
+ ---
2
+ status: planned
3
+ ---
4
+
1
5
  # RFC: Browser
2
6
 
3
7
  **Status:** Draft
package/rfc/cli.md CHANGED
@@ -1,3 +1,7 @@
1
+ ---
2
+ status: planned
3
+ ---
4
+
1
5
  # RFC: CLI
2
6
 
3
7
  **Status:** Draft
package/rfc/git.md CHANGED
@@ -1,3 +1,7 @@
1
+ ---
2
+ status: planned
3
+ ---
4
+
1
5
  # RFC: Git
2
6
 
3
7
  **Status:** Draft
package/rfc/mcp.md CHANGED
@@ -1,3 +1,7 @@
1
+ ---
2
+ status: planned
3
+ ---
4
+
1
5
  # RFC: MCP
2
6
 
3
7
  **Status:** Draft
package/rfc/node.md CHANGED
@@ -1,3 +1,7 @@
1
+ ---
2
+ status: planned
3
+ ---
4
+
1
5
  # RFC: Node
2
6
 
3
7
  **Status:** Draft
package/rfc/play.md CHANGED
@@ -147,7 +147,7 @@ Exports the minimal shared contracts that allow the Logic Engine and Infrastruct
147
147
  **Exports:**
148
148
 
149
149
  - `PlayEvent<TPayload>` — Generic intent event dispatched from Infrastructure to Actor. Any object with `{ readonly type: string }` plus optional typed payload fields.
150
- - `PlayError` — Structured error base with `scope` and `code` fields for consistent error handling across all `@xmachines/*` packages.
150
+ - `PlayError` — Structured error base with `scope` and `code` fields for consistent error handling across the Play packages. It extends `BaseError` of [`@xmachines/core`](../api/@xmachines/core/README.md).
151
151
 
152
152
  > **Note:** Routing contracts (`RouterBridge`, `PlayRouteEvent`) live in [`@xmachines/play-router`](../api/@xmachines/play-router/README.md), not here. This keeps the core protocol package dependency-free.
153
153
 
@@ -195,6 +195,20 @@ export interface PlaySpec extends Spec {
195
195
  // authored): providers key their store lifecycle on it — changed key
196
196
  // reseeds the store, unchanged key refreshes /context in place.
197
197
  viewKey?: string;
198
+
199
+ // Stamped on a composed view: the ids of the composed states. viewKey
200
+ // stays the id of the outermost view, so a change of a substate keeps
201
+ // the store and seeds only the keys that it lacks.
202
+ viewParts?: readonly string[];
203
+ }
204
+
205
+ // What an author writes in meta.view. The derivation turns it into a
206
+ // PlaySpec, so no renderer receives this type.
207
+ export interface ViewMeta extends Spec {
208
+ // The element (and the optional named slot) that receives the view of
209
+ // each active child, keyed by the child state key or "*". The derivation
210
+ // consumes it.
211
+ outlets?: Record<string, { element: string; slot?: string }>;
198
212
  }
199
213
 
200
214
  export interface Viewable {
@@ -241,6 +255,7 @@ Wraps XState v5 to satisfy the `PlayActor` contract. Provides the primary API fo
241
255
  **Responsibilities:**
242
256
 
243
257
  - Derive `currentRoute` and `currentView` from active state node metadata
258
+ - Compose the view of a parent state that declares `outlets` with the views of its active substates, so the state tree decides the layout
244
259
  - Manage atom lifecycle (create on start, dispose on stop)
245
260
  - Support snapshot restore for resumable sessions
246
261
  - Provide XState DevTools compatibility
@@ -348,18 +363,19 @@ Each adapter extends `RouterBridgeBase` and implements the three abstract method
348
363
 
349
364
  Each view renderer provides a `PlayRenderer` component that passively observes the actor's `currentView` atom and projects the JSON spec into framework-native components via `@json-render`.
350
365
 
351
- | Package | Framework | JSON-Render Backend |
352
- | ----------------------------------------------------------------- | ----------- | ------------------------------ |
353
- | [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | React | `@xmachines/json-render-react` |
354
- | [`@xmachines/play-vue`](../api/@xmachines/play-vue/README.md) | Vue 3 | `@xmachines/json-render-vue` |
355
- | [`@xmachines/play-solid`](../api/@xmachines/play-solid/README.md) | SolidJS | `@xmachines/json-render-solid` |
356
- | [`@xmachines/play-dom`](../api/@xmachines/play-dom/README.md) | Vanilla DOM | `@xmachines/json-render-core` |
366
+ | Package | Framework | JSON-Render Backend |
367
+ | ------------------------------------------------------------------- | ----------- | ------------------------------- |
368
+ | [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | React | `@xmachines/json-render-react` |
369
+ | [`@xmachines/play-vue`](../api/@xmachines/play-vue/README.md) | Vue 3 | `@xmachines/json-render-vue` |
370
+ | [`@xmachines/play-solid`](../api/@xmachines/play-solid/README.md) | SolidJS | `@xmachines/json-render-solid` |
371
+ | [`@xmachines/play-svelte`](../api/@xmachines/play-svelte/README.md) | Svelte 5 | `@xmachines/json-render-svelte` |
372
+ | [`@xmachines/play-dom`](../api/@xmachines/play-dom/README.md) | Vanilla DOM | `@xmachines/json-render-dom` |
357
373
 
358
374
  **Shared Architecture (all renderers):**
359
375
 
360
376
  1. Subscribe to `actor.currentView` atom
361
- 2. Resolve a `StateStore` (external or auto-created per view transition via `@xstate/store`)
362
- 3. Wire `actions` prop to `actor.send()` via `ActionProvider`
377
+ 2. Resolve a `StateStore`: the external store of the caller, or a new `@xstate/store` store for each `viewKey`
378
+ 3. Give the action handlers of the registry to the `ActionProvider`. A handler of `defineRegistry` sends the machine event with `actor.send()`
363
379
  4. Render `spec` through the framework's `Renderer` with a `registry` (defined via `defineRegistry`)
364
380
 
365
381
  **[`@xmachines/play-react`](../api/@xmachines/play-react/README.md) exports (representative):**
package/rfc/rest.md CHANGED
@@ -1,3 +1,7 @@
1
+ ---
2
+ status: planned
3
+ ---
4
+
1
5
  # RFC: REST
2
6
 
3
7
  **Status:** Draft
package/rfc/run.md CHANGED
@@ -1,3 +1,7 @@
1
+ ---
2
+ status: planned
3
+ ---
4
+
1
5
  # RFC: Run
2
6
 
3
7
  **Status:** Draft
package/rfc/streams.md CHANGED
@@ -1,3 +1,7 @@
1
+ ---
2
+ status: planned
3
+ ---
4
+
1
5
  # RFC: Streams
2
6
 
3
7
  **Status:** Draft
@@ -1,77 +0,0 @@
1
- [API](../../../../README.md) / [@xmachines/play](../../README.md) / [index](../README.md) / asCleanup
2
-
3
- # Function: asCleanup()
4
-
5
- ```ts
6
- function asCleanup<R>(release): Cleanup;
7
- ```
8
-
9
- Defined in: [packages/play/src/disposable.ts:149](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.2/packages/play/src/disposable.ts#L149)
10
-
11
- Makes one release function serve as a [Cleanup](../type-aliases/Cleanup.md).
12
-
13
- The function comes back as itself, with [DISPOSE](../variables/DISPOSE.md) added. Nothing wraps it, so
14
- the identity of the release holds: a caller that compares two releases, or that puts
15
- one in a `Set`, sees what it saw before this protocol existed.
16
-
17
- The release therefore must be idempotent. A scope releases the value one time, but a
18
- caller that runs the function AND lets the scope end runs it two times. Every release
19
- of this workspace already accepts that, because a teardown that runs two times is
20
- older than this protocol.
21
-
22
- The release must be synchronous. `Disposable` and not `AsyncDisposable`: a
23
- `Disposable` serves `using` AND `await using`, because `await using` falls back to
24
- `Symbol.dispose`, while an `AsyncDisposable` raises a TypeError under a plain `using`
25
- and forces every holder into an async function. Nothing in this workspace releases
26
- asynchronously. An `AsyncCleanup` can arrive the day something does.
27
-
28
- The `R extends void | undefined` bound is what holds that line. A plain `() => void`
29
- parameter would ACCEPT `async () => {}`, because TypeScript lets a function that
30
- returns a value stand where one returning `void` is wanted. The promise would then go
31
- on the floor: the scope releases, the release looks finished, and the work runs later
32
- with nobody able to await it. The bound rejects that at the call, and it rejects a
33
- release that returns any other value as well.
34
-
35
- The bound holds where the compiler knows the return type. It cannot hold where the
36
- caller erased it: `R` infers `any` for a release typed `any`, such as a bare
37
- `vi.fn()`, and `any` satisfies every constraint. A release declared `() => void` whose
38
- body is async passes for the same reason — the declaration, and not the body, is what
39
- the call site sees. Write the release inline, or type it, and the bound applies.
40
-
41
- The release lands under [DISPOSE](../variables/DISPOSE.md) and, when the two differ, under the
42
- `Symbol.dispose` that exists at the CALL. `DISPOSE` resolves when the module evaluates,
43
- so a polyfill that installs the well-known symbol later would otherwise leave the
44
- release on the registered key while a downlevelled `using` reads the well-known one.
45
- Writing both closes that window for every release this function publishes.
46
-
47
- ## Type Parameters
48
-
49
- | Type Parameter |
50
- | ----------------------------------- |
51
- | `R` _extends_ `void` \| `undefined` |
52
-
53
- ## Parameters
54
-
55
- | Parameter | Type | Description |
56
- | --------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
57
- | `release` | () => `R` | The release to publish. It must return nothing. The function is changed in place, so pass a function that this release owns: a shared or module-level function becomes a `Disposable` for every other holder of it. |
58
-
59
- ## Returns
60
-
61
- [`Cleanup`](../type-aliases/Cleanup.md)
62
-
63
- The same function, now also a `Disposable`.
64
-
65
- ## Throws
66
-
67
- TypeError - When the release is frozen or is otherwise not extensible. The
68
- protocol adds a property, and a sealed function accepts none.
69
-
70
- ## Example
71
-
72
- ```ts
73
- export function watchAtom<T>(atom: Readable<T>, onValue: (v: T) => void): Cleanup {
74
- const subscription = atom.subscribe(() => onValue(atom.get()));
75
- return asCleanup(() => subscription.unsubscribe());
76
- }
77
- ```
@@ -1,29 +0,0 @@
1
- [API](../../../../README.md) / [@xmachines/play](../../README.md) / [index](../README.md) / shallowEqualExcept
2
-
3
- # Function: shallowEqualExcept()
4
-
5
- ```ts
6
- function shallowEqualExcept(a, b, except?): boolean;
7
- ```
8
-
9
- Defined in: [packages/play/src/utils.ts:59](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.2/packages/play/src/utils.ts#L59)
10
-
11
- The shallow equality of the own keys, with `Object.is`. It can ignore one key on
12
- both sides.
13
-
14
- This is the one comparison rule behind every decision of the emission dedup: the
15
- equality of a slice, and also the emit gate of the player, which compares the
16
- spec fields in `viewSpecsEquivalent` and reuses the composed state in
17
- `reuseComposedState` of `@xmachines/play-view`.
18
-
19
- ## Parameters
20
-
21
- | Parameter | Type |
22
- | --------- | -------- |
23
- | `a` | `object` |
24
- | `b` | `object` |
25
- | `except?` | `string` |
26
-
27
- ## Returns
28
-
29
- `boolean`
@@ -1,38 +0,0 @@
1
- [API](../../../../README.md) / [@xmachines/play](../../README.md) / [index](../README.md) / Cleanup
2
-
3
- # Type Alias: Cleanup
4
-
5
- ```ts
6
- type Cleanup = () => void & { [Key in DisposeKey]: () => void };
7
- ```
8
-
9
- Defined in: [packages/play/src/disposable.ts:66](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.2/packages/play/src/disposable.ts#L66)
10
-
11
- The release of a subscription. A caller runs it, or a scope releases it.
12
-
13
- The type is a function AND a `Disposable`, so one value serves both forms. A caller
14
- that holds the release in a field and runs it from a teardown keeps that code. A
15
- caller inside one scope writes `using` and writes no teardown at all:
16
-
17
- ```ts
18
- // The explicit form. It stays correct.
19
- const stop = watchAtom(count, render);
20
- stop();
21
-
22
- // The scoped form. The scope releases it, and an exception releases it too.
23
- {
24
- using stop = watchAtom(count, render);
25
- render(count.get());
26
- }
27
- ```
28
-
29
- `using` needs Node 24 or a browser with Explicit Resource Management, and it needs
30
- `"lib": ["ESNext"]` of the consumer. The publishable packages build at
31
- `target: "esnext"` and pass the syntax through, so the bundler of the consumer decides
32
- how to emit it. The `Cleanup` VALUE needs neither: a runtime without `Symbol.dispose`
33
- still calls it as a function, and a consumer that declares a lower `lib` still reads
34
- the type. See [DisposeKey](DisposeKey.md) for the second half of that.
35
-
36
- ## See
37
-
38
- [Play RFC](../../../../../rfc/play.md)