@xmachines/docs 4.0.0 → 5.0.1

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 (568) hide show
  1. package/README.md +8 -6
  2. package/api/@xmachines/play/README.md +21 -21
  3. package/api/@xmachines/play/errors/classes/NonNullableError.md +4 -4
  4. package/api/@xmachines/play/errors/classes/PlayError.md +5 -4
  5. package/api/@xmachines/play/index/README.md +2 -2
  6. package/api/@xmachines/play/index/functions/asCleanup.md +4 -5
  7. package/api/@xmachines/play/index/functions/assertNonNullable.md +1 -1
  8. package/api/@xmachines/play/index/functions/shallowEqualExcept.md +1 -1
  9. package/api/@xmachines/play/index/type-aliases/Cleanup.md +3 -3
  10. package/api/@xmachines/play/index/type-aliases/DisposeKey.md +1 -1
  11. package/api/@xmachines/play/index/type-aliases/PlayEvent.md +2 -2
  12. package/api/@xmachines/play/index/variables/DISPOSE.md +1 -1
  13. package/api/@xmachines/play-actor/README.md +9 -9
  14. package/api/@xmachines/play-actor/interfaces/ActorEvent.md +2 -2
  15. package/api/@xmachines/play-actor/interfaces/PlayActor.md +6 -6
  16. package/api/@xmachines/play-atom/README.md +281 -0
  17. package/api/@xmachines/play-atom/functions/watchAtom.md +79 -0
  18. package/api/@xmachines/play-atom/interfaces/AsyncAtomOptions.md +16 -0
  19. package/api/@xmachines/play-atom/interfaces/Atom.md +149 -0
  20. package/api/@xmachines/play-atom/interfaces/AtomObserver.md +25 -0
  21. package/api/@xmachines/play-atom/interfaces/AtomOptions.md +33 -0
  22. package/api/@xmachines/play-atom/interfaces/AtomSubscription.md +23 -0
  23. package/api/@xmachines/play-atom/interfaces/BaseAtom.md +97 -0
  24. package/api/@xmachines/play-atom/interfaces/CreateAtom.md +91 -0
  25. package/api/@xmachines/play-atom/interfaces/Readable.md +93 -0
  26. package/api/@xmachines/play-atom/interfaces/ReadonlyAtom.md +108 -0
  27. package/api/@xmachines/play-atom/type-aliases/AnyAtom.md +13 -0
  28. package/api/@xmachines/play-atom/type-aliases/AsyncAtomState.md +32 -0
  29. package/api/@xmachines/{play-signals → play-atom}/type-aliases/Cleanup.md +4 -4
  30. package/api/@xmachines/play-atom/variables/createAsyncAtom.md +42 -0
  31. package/api/@xmachines/play-atom/variables/createAtom.md +18 -0
  32. package/api/@xmachines/play-atom/variables/createWritableAtom.md +70 -0
  33. package/api/@xmachines/play-dom/README.md +21 -17
  34. package/api/@xmachines/play-dom/classes/PlayRenderer.md +10 -10
  35. package/api/@xmachines/play-dom/functions/asCleanup.md +4 -5
  36. package/api/@xmachines/play-dom/functions/createPlayUI.md +1 -1
  37. package/api/@xmachines/play-dom/functions/createRenderer.md +1 -1
  38. package/api/@xmachines/play-dom/interfaces/CreatePlayUIOptions.md +3 -3
  39. package/api/@xmachines/play-dom/interfaces/MountOptions.md +3 -3
  40. package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +6 -6
  41. package/api/@xmachines/play-dom/type-aliases/Cleanup.md +3 -3
  42. package/api/@xmachines/play-dom/type-aliases/MountFn.md +1 -1
  43. package/api/@xmachines/play-dom-router/README.md +24 -24
  44. package/api/@xmachines/play-dom-router/classes/DomRouterBridge.md +15 -15
  45. package/api/@xmachines/play-dom-router/classes/RouteMap.md +11 -11
  46. package/api/@xmachines/play-dom-router/functions/asCleanup.md +4 -5
  47. package/api/@xmachines/play-dom-router/functions/connectRouter.md +1 -1
  48. package/api/@xmachines/play-dom-router/functions/createBrowserHistory.md +1 -1
  49. package/api/@xmachines/play-dom-router/functions/createRouter.md +1 -1
  50. package/api/@xmachines/play-dom-router/interfaces/BasePathOptions.md +3 -7
  51. package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +15 -15
  52. package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +14 -14
  53. package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +11 -9
  54. package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +7 -7
  55. package/api/@xmachines/play-dom-router/interfaces/RoutableActor.md +6 -6
  56. package/api/@xmachines/play-dom-router/interfaces/RouteLookupContract.md +3 -3
  57. package/api/@xmachines/play-dom-router/interfaces/RouteMapOptions.md +10 -4
  58. package/api/@xmachines/play-dom-router/interfaces/RouteMapping.md +3 -3
  59. package/api/@xmachines/play-dom-router/interfaces/RouterBridge.md +15 -17
  60. package/api/@xmachines/play-dom-router/interfaces/RouterConnection.md +7 -7
  61. package/api/@xmachines/play-dom-router/interfaces/VanillaRouter.md +5 -5
  62. package/api/@xmachines/play-dom-router/type-aliases/Cleanup.md +3 -3
  63. package/api/@xmachines/play-dom-router/variables/DISPOSE.md +1 -1
  64. package/api/@xmachines/play-pattern/README.md +115 -0
  65. package/api/@xmachines/play-pattern/functions/buildPath.md +46 -0
  66. package/api/@xmachines/play-pattern/functions/createPatternCache.md +47 -0
  67. package/api/@xmachines/play-pattern/functions/getIndexKey.md +30 -0
  68. package/api/@xmachines/play-pattern/functions/isDotSegment.md +40 -0
  69. package/api/@xmachines/play-pattern/functions/parsePattern.md +28 -0
  70. package/api/@xmachines/play-pattern/interfaces/GroupPart.md +15 -0
  71. package/api/@xmachines/play-pattern/interfaces/LiteralPart.md +14 -0
  72. package/api/@xmachines/play-pattern/interfaces/ParamPart.md +21 -0
  73. package/api/@xmachines/play-pattern/interfaces/ParseOptions.md +19 -0
  74. package/api/@xmachines/play-pattern/interfaces/ParsedPattern.md +23 -0
  75. package/api/@xmachines/play-pattern/interfaces/PatternCache.md +65 -0
  76. package/api/@xmachines/play-pattern/interfaces/PatternParam.md +15 -0
  77. package/api/@xmachines/play-pattern/type-aliases/PathBuildResult.md +74 -0
  78. package/api/@xmachines/play-pattern/type-aliases/PathParams.md +15 -0
  79. package/api/@xmachines/play-pattern/type-aliases/PatternModifier.md +11 -0
  80. package/api/@xmachines/play-pattern/type-aliases/PatternPart.md +9 -0
  81. package/api/@xmachines/play-react/README.md +31 -21
  82. package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +6 -6
  83. package/api/@xmachines/play-react/functions/useActor.md +1 -1
  84. package/api/@xmachines/play-react/functions/useAtomEffect.md +103 -0
  85. package/api/@xmachines/play-react/functions/usePlayView.md +1 -1
  86. package/api/@xmachines/play-react/interfaces/ActorProviderProps.md +8 -8
  87. package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +6 -6
  88. package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +4 -4
  89. package/api/@xmachines/play-react/interfaces/PlayUIProviderProps.md +8 -8
  90. package/api/@xmachines/play-react/interfaces/ViewContextValue.md +5 -5
  91. package/api/@xmachines/play-react/type-aliases/AnyPlayActor.md +1 -1
  92. package/api/@xmachines/play-react/variables/ActorProvider.md +2 -2
  93. package/api/@xmachines/play-react/variables/PlayRenderer.md +1 -1
  94. package/api/@xmachines/play-react/variables/PlayUIProvider.md +1 -1
  95. package/api/@xmachines/play-react-router/README.md +3 -3
  96. package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +15 -15
  97. package/api/@xmachines/play-react-router/classes/RouteMap.md +11 -11
  98. package/api/@xmachines/play-react-router/functions/createPlayRouterProvider.md +1 -1
  99. package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +5 -5
  100. package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +7 -7
  101. package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +11 -9
  102. package/api/@xmachines/play-react-router/interfaces/RoutableActor.md +6 -6
  103. package/api/@xmachines/play-react-router/interfaces/RouteMapOptions.md +10 -4
  104. package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +3 -3
  105. package/api/@xmachines/play-react-router/interfaces/RouterBridge.md +15 -17
  106. package/api/@xmachines/play-react-router/type-aliases/PlayRouterBridgeConstructor.md +14 -7
  107. package/api/@xmachines/play-react-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  108. package/api/@xmachines/play-react-router/variables/PlayRouterProvider.md +1 -1
  109. package/api/@xmachines/play-router/README.md +25 -14
  110. package/api/@xmachines/play-router/errors/classes/DuplicateBridgeError.md +4 -4
  111. package/api/@xmachines/play-router/errors/classes/DuplicateRoutePathError.md +5 -5
  112. package/api/@xmachines/play-router/errors/classes/EmptyRoutePathError.md +5 -5
  113. package/api/@xmachines/play-router/errors/classes/InvalidBasePathError.md +5 -5
  114. package/api/@xmachines/play-router/errors/classes/InvalidRoutePatternError.md +5 -5
  115. package/api/@xmachines/play-router/errors/classes/InvalidStateIdError.md +5 -5
  116. package/api/@xmachines/play-router/errors/classes/MissingBasePathParamError.md +6 -6
  117. package/api/@xmachines/play-router/errors/classes/RouterSyncError.md +4 -4
  118. package/api/@xmachines/play-router/errors/classes/UnknownStateTypeError.md +6 -6
  119. package/api/@xmachines/play-router/index/README.md +10 -2
  120. package/api/@xmachines/play-router/index/classes/RouteMap.md +11 -11
  121. package/api/@xmachines/play-router/index/classes/RouterBridgeBase.md +10 -10
  122. package/api/@xmachines/play-router/index/functions/buildPlayRouteEvent.md +1 -1
  123. package/api/@xmachines/play-router/index/functions/buildRouteTree.md +1 -1
  124. package/api/@xmachines/play-router/index/functions/cleanFrameworkParams.md +1 -1
  125. package/api/@xmachines/play-router/index/functions/createPatternCache.md +47 -0
  126. package/api/@xmachines/play-router/index/functions/createRouteMapFromTree.md +5 -5
  127. package/api/@xmachines/play-router/index/functions/createRouterConnection.md +1 -1
  128. package/api/@xmachines/play-router/index/functions/detectDuplicateRoutes.md +1 -1
  129. package/api/@xmachines/play-router/index/functions/extractQuery.md +1 -1
  130. package/api/@xmachines/play-router/index/functions/extractRouteParams.md +7 -6
  131. package/api/@xmachines/play-router/index/functions/findRouteById.md +1 -1
  132. package/api/@xmachines/play-router/index/functions/findRouteByPath.md +13 -6
  133. package/api/@xmachines/play-router/index/functions/isMountableBridge.md +1 -1
  134. package/api/@xmachines/play-router/index/functions/joinBasePath.md +2 -1
  135. package/api/@xmachines/play-router/index/functions/mountKey.md +1 -1
  136. package/api/@xmachines/play-router/index/functions/normalizeBasePath.md +1 -1
  137. package/api/@xmachines/play-router/index/functions/openProviderBridge.md +3 -3
  138. package/api/@xmachines/play-router/index/functions/parsePattern.md +28 -0
  139. package/api/@xmachines/play-router/index/functions/pickOwnParams.md +1 -1
  140. package/api/@xmachines/play-router/index/functions/repointProviderBridge.md +1 -1
  141. package/api/@xmachines/play-router/index/functions/resolveBasePath.md +1 -1
  142. package/api/@xmachines/play-router/index/functions/resolveFrameworkParams.md +5 -5
  143. package/api/@xmachines/play-router/index/functions/sanitizePathname.md +9 -24
  144. package/api/@xmachines/play-router/index/functions/splitLocation.md +37 -0
  145. package/api/@xmachines/play-router/index/functions/stripBasePath.md +1 -1
  146. package/api/@xmachines/play-router/index/functions/validateRouteFormat.md +1 -1
  147. package/api/@xmachines/play-router/index/functions/validateStateExists.md +1 -1
  148. package/api/@xmachines/play-router/index/interfaces/BasePathOptions.md +4 -4
  149. package/api/@xmachines/play-router/index/interfaces/BuildPlayRouteEventOptions.md +4 -4
  150. package/api/@xmachines/play-router/index/interfaces/CompileOptions.md +35 -0
  151. package/api/@xmachines/play-router/index/interfaces/FrameworkParamsSource.md +13 -8
  152. package/api/@xmachines/play-router/index/interfaces/LocationLike.md +3 -3
  153. package/api/@xmachines/play-router/index/interfaces/MountableRouterBridge.md +9 -9
  154. package/api/@xmachines/play-router/index/interfaces/OpenProviderBridgeArgs.md +11 -9
  155. package/api/@xmachines/play-router/index/interfaces/ParseOptions.md +24 -0
  156. package/api/@xmachines/play-router/index/interfaces/ParsedPattern.md +23 -0
  157. package/api/@xmachines/play-router/index/interfaces/PatternCache.md +65 -0
  158. package/api/@xmachines/play-router/index/interfaces/PlayRouteEvent.md +7 -7
  159. package/api/@xmachines/play-router/index/interfaces/PlayRouterProviderBaseProps.md +15 -9
  160. package/api/@xmachines/play-router/index/interfaces/ResolvedBasePath.md +3 -3
  161. package/api/@xmachines/play-router/index/interfaces/ResolvedRoutePath.md +3 -3
  162. package/api/@xmachines/play-router/index/interfaces/Routable.md +5 -5
  163. package/api/@xmachines/play-router/index/interfaces/RoutableActor.md +6 -6
  164. package/api/@xmachines/play-router/index/interfaces/RouteInfo.md +8 -8
  165. package/api/@xmachines/play-router/index/interfaces/RouteMapOptions.md +10 -4
  166. package/api/@xmachines/play-router/index/interfaces/RouteMapping.md +3 -3
  167. package/api/@xmachines/play-router/index/interfaces/RouteMatch.md +3 -3
  168. package/api/@xmachines/play-router/index/interfaces/RouteNode.md +10 -10
  169. package/api/@xmachines/play-router/index/interfaces/RouteObject.md +5 -5
  170. package/api/@xmachines/play-router/index/interfaces/RouteTree.md +5 -5
  171. package/api/@xmachines/play-router/index/interfaces/RouteWatcherHandle.md +11 -11
  172. package/api/@xmachines/play-router/index/interfaces/RouterBridge.md +15 -17
  173. package/api/@xmachines/play-router/index/interfaces/RouterBridgeOptions.md +31 -0
  174. package/api/@xmachines/play-router/index/interfaces/RouterConnection.md +7 -7
  175. package/api/@xmachines/play-router/index/interfaces/SplitLocation.md +16 -0
  176. package/api/@xmachines/play-router/index/interfaces/WindowLike.md +3 -3
  177. package/api/@xmachines/play-router/index/type-aliases/PlayRouterBridgeConstructor.md +14 -7
  178. package/api/@xmachines/play-router/index/type-aliases/RouteData.md +1 -1
  179. package/api/@xmachines/play-router/index/type-aliases/RouteDataResolver.md +1 -1
  180. package/api/@xmachines/play-router/index/type-aliases/RouteMetadata.md +1 -1
  181. package/api/@xmachines/play-router/index/type-aliases/URLPatternLike.md +68 -0
  182. package/api/@xmachines/play-router/index/variables/DISPOSE.md +1 -1
  183. package/api/@xmachines/play-router/index/variables/NO_BASE_PATH.md +1 -1
  184. package/api/@xmachines/play-router/index/variables/ROOT_NODE_ID.md +1 -1
  185. package/api/@xmachines/play-router/xstate/functions/createRouteMap.md +5 -5
  186. package/api/@xmachines/play-router/xstate/functions/extractMachineRoutes.md +6 -5
  187. package/api/@xmachines/play-router/xstate/functions/getNavigableRoutes.md +1 -1
  188. package/api/@xmachines/play-router/xstate/functions/getRoutableRoutes.md +1 -1
  189. package/api/@xmachines/play-router/xstate/functions/getRouteMappings.md +1 -1
  190. package/api/@xmachines/play-router/xstate/functions/getTransitionReachableRoutes.md +1 -1
  191. package/api/@xmachines/play-router/xstate/functions/isRouteReachable.md +1 -1
  192. package/api/@xmachines/play-router/xstate/functions/machineToGraph.md +1 -1
  193. package/api/@xmachines/play-router/xstate/functions/routeExists.md +1 -1
  194. package/api/@xmachines/play-router/xstate/interfaces/MachineEdgeData.md +3 -3
  195. package/api/@xmachines/play-router/xstate/interfaces/MachineNodeData.md +5 -5
  196. package/api/@xmachines/play-router/xstate/type-aliases/MachineGraph.md +1 -1
  197. package/api/@xmachines/play-solid/README.md +9 -5
  198. package/api/@xmachines/play-solid/functions/useActor.md +1 -1
  199. package/api/@xmachines/play-solid/functions/usePlayView.md +1 -1
  200. package/api/@xmachines/play-solid/interfaces/ActorProviderProps.md +8 -8
  201. package/api/@xmachines/play-solid/interfaces/PlayUIProviderProps.md +8 -8
  202. package/api/@xmachines/play-solid/interfaces/ViewContextValue.md +5 -5
  203. package/api/@xmachines/play-solid/type-aliases/AnyPlayActor.md +1 -1
  204. package/api/@xmachines/play-solid/variables/ActorContext.md +1 -1
  205. package/api/@xmachines/play-solid/variables/ActorProvider.md +2 -2
  206. package/api/@xmachines/play-solid/variables/PlayRenderer.md +1 -1
  207. package/api/@xmachines/play-solid/variables/PlayUIProvider.md +1 -1
  208. package/api/@xmachines/play-solid-router/README.md +14 -14
  209. package/api/@xmachines/play-solid-router/classes/RouteMap.md +11 -11
  210. package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +18 -18
  211. package/api/@xmachines/play-solid-router/functions/createPlayRouterProvider.md +1 -1
  212. package/api/@xmachines/play-solid-router/interfaces/PlayActor.md +6 -6
  213. package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +7 -7
  214. package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +11 -9
  215. package/api/@xmachines/play-solid-router/interfaces/RoutableActor.md +6 -6
  216. package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +10 -4
  217. package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +3 -3
  218. package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +15 -17
  219. package/api/@xmachines/play-solid-router/type-aliases/PlayRouterBridgeConstructor.md +14 -7
  220. package/api/@xmachines/play-solid-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  221. package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +4 -4
  222. package/api/@xmachines/play-solid-router/variables/PlayRouterProvider.md +1 -1
  223. package/api/@xmachines/play-svelte/README.md +11 -7
  224. package/api/@xmachines/play-svelte/functions/defineRegistry.md +1 -1
  225. package/api/@xmachines/play-svelte/functions/getActorContext.md +1 -1
  226. package/api/@xmachines/play-svelte/functions/getPlayViewContext.md +1 -1
  227. package/api/@xmachines/play-svelte/functions/setActorContext.md +1 -1
  228. package/api/@xmachines/play-svelte/interfaces/ActorProviderProps.md +8 -8
  229. package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +4 -4
  230. package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +11 -11
  231. package/api/@xmachines/play-svelte/interfaces/ViewContextValue.md +5 -5
  232. package/api/@xmachines/play-svelte/type-aliases/AnyPlayActor.md +1 -1
  233. package/api/@xmachines/play-svelte-spa-router/README.md +14 -14
  234. package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +11 -11
  235. package/api/@xmachines/play-svelte-spa-router/classes/SvelteSpaRouterBridge.md +15 -15
  236. package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +1 -1
  237. package/api/@xmachines/play-svelte-spa-router/interfaces/BasePathOptions.md +3 -7
  238. package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +11 -9
  239. package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +7 -7
  240. package/api/@xmachines/play-svelte-spa-router/interfaces/RoutableActor.md +6 -6
  241. package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +10 -4
  242. package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +3 -3
  243. package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +15 -17
  244. package/api/@xmachines/play-svelte-spa-router/interfaces/RouterConnection.md +7 -7
  245. package/api/@xmachines/play-svelte-spa-router/interfaces/WindowLike.md +3 -3
  246. package/api/@xmachines/play-sveltekit-router/README.md +17 -17
  247. package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +11 -11
  248. package/api/@xmachines/play-sveltekit-router/classes/SvelteKitRouterBridge.md +15 -15
  249. package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +1 -1
  250. package/api/@xmachines/play-sveltekit-router/interfaces/BasePathOptions.md +3 -7
  251. package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +15 -23
  252. package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +3 -3
  253. package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +7 -7
  254. package/api/@xmachines/play-sveltekit-router/interfaces/RoutableActor.md +6 -6
  255. package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +10 -4
  256. package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +3 -3
  257. package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +15 -17
  258. package/api/@xmachines/play-sveltekit-router/interfaces/RouterConnection.md +7 -7
  259. package/api/@xmachines/play-tanstack-react-router/README.md +7 -7
  260. package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +11 -11
  261. package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +11 -11
  262. package/api/@xmachines/play-tanstack-react-router/functions/createPlayRouterProvider.md +1 -1
  263. package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +5 -5
  264. package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +7 -7
  265. package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +11 -9
  266. package/api/@xmachines/play-tanstack-react-router/interfaces/RoutableActor.md +6 -6
  267. package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +10 -4
  268. package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +3 -3
  269. package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +15 -17
  270. package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterBridgeConstructor.md +14 -7
  271. package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  272. package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterInstance.md +1 -1
  273. package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterLike.md +5 -5
  274. package/api/@xmachines/play-tanstack-react-router/variables/PlayRouterProvider.md +1 -1
  275. package/api/@xmachines/play-tanstack-router/README.md +1 -1
  276. package/api/@xmachines/play-tanstack-router/classes/TanStackRouterBridgeBase.md +16 -16
  277. package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouteMapLike.md +3 -3
  278. package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouterLike.md +5 -5
  279. package/api/@xmachines/play-tanstack-solid-router/README.md +7 -7
  280. package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +11 -11
  281. package/api/@xmachines/play-tanstack-solid-router/classes/TanStackSolidRouterBridge.md +11 -11
  282. package/api/@xmachines/play-tanstack-solid-router/functions/createPlayRouterProvider.md +1 -1
  283. package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +7 -7
  284. package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +11 -9
  285. package/api/@xmachines/play-tanstack-solid-router/interfaces/RoutableActor.md +6 -6
  286. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +10 -4
  287. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +3 -3
  288. package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +15 -17
  289. package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterBridgeConstructor.md +14 -7
  290. package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
  291. package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterInstance.md +1 -1
  292. package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterLike.md +5 -5
  293. package/api/@xmachines/play-tanstack-solid-router/variables/PlayRouterProvider.md +1 -1
  294. package/api/@xmachines/play-url/README.md +21 -15
  295. package/api/@xmachines/play-url/errors/classes/InvalidBasePathError.md +5 -5
  296. package/api/@xmachines/play-url/errors/classes/InvalidRoutePatternError.md +5 -5
  297. package/api/@xmachines/play-url/errors/classes/MissingBasePathParamError.md +6 -6
  298. package/api/@xmachines/play-url/index/README.md +15 -8
  299. package/api/@xmachines/play-url/index/functions/buildPath.md +46 -0
  300. package/api/@xmachines/play-url/index/functions/cleanFrameworkParams.md +1 -1
  301. package/api/@xmachines/play-url/index/functions/createPatternCache.md +47 -0
  302. package/api/@xmachines/play-url/index/functions/getCandidates.md +1 -1
  303. package/api/@xmachines/play-url/index/functions/getCompiledPattern.md +8 -7
  304. package/api/@xmachines/play-url/index/functions/getIndexKey.md +1 -1
  305. package/api/@xmachines/play-url/index/functions/holdsUnsubstitutedParam.md +2 -2
  306. package/api/@xmachines/play-url/index/functions/isDotSegment.md +40 -0
  307. package/api/@xmachines/play-url/index/functions/joinBasePath.md +2 -1
  308. package/api/@xmachines/play-url/index/functions/normalizeBasePath.md +1 -1
  309. package/api/@xmachines/play-url/index/functions/parsePattern.md +6 -5
  310. package/api/@xmachines/play-url/index/functions/pickOwnParams.md +1 -1
  311. package/api/@xmachines/play-url/index/functions/resolveBasePath.md +1 -1
  312. package/api/@xmachines/play-url/index/functions/resolveFrameworkParams.md +5 -5
  313. package/api/@xmachines/play-url/index/functions/sanitizePathname.md +27 -0
  314. package/api/@xmachines/play-url/index/functions/splitLocation.md +37 -0
  315. package/api/@xmachines/play-url/index/functions/stripBasePath.md +1 -1
  316. package/api/@xmachines/play-url/index/interfaces/BasePathOptions.md +3 -3
  317. package/api/@xmachines/play-url/index/interfaces/CompileOptions.md +21 -0
  318. package/api/@xmachines/play-url/index/interfaces/FrameworkParamsSource.md +13 -8
  319. package/api/@xmachines/play-url/index/interfaces/GroupPart.md +6 -6
  320. package/api/@xmachines/play-url/index/interfaces/LiteralPart.md +5 -5
  321. package/api/@xmachines/play-url/index/interfaces/ParamPart.md +9 -9
  322. package/api/@xmachines/play-url/index/interfaces/ParseOptions.md +24 -0
  323. package/api/@xmachines/play-url/index/interfaces/ParsedPattern.md +14 -14
  324. package/api/@xmachines/play-url/index/interfaces/PatternCache.md +65 -0
  325. package/api/@xmachines/play-url/index/interfaces/PatternParam.md +6 -6
  326. package/api/@xmachines/play-url/index/interfaces/ResolvedBasePath.md +3 -3
  327. package/api/@xmachines/play-url/index/interfaces/SplitLocation.md +16 -0
  328. package/api/@xmachines/play-url/index/type-aliases/PathBuildResult.md +74 -0
  329. package/api/@xmachines/play-url/index/type-aliases/PathParams.md +15 -0
  330. package/api/@xmachines/play-url/index/type-aliases/PatternModifier.md +1 -1
  331. package/api/@xmachines/play-url/index/type-aliases/PatternPart.md +1 -1
  332. package/api/@xmachines/play-url/index/type-aliases/URLPatternCtor.md +1 -1
  333. package/api/@xmachines/play-url/index/type-aliases/URLPatternLike.md +3 -3
  334. package/api/@xmachines/play-url/index/variables/NO_BASE_PATH.md +1 -1
  335. package/api/@xmachines/play-url/index/variables/URLPattern.md +1 -1
  336. package/api/@xmachines/play-view/README.md +19 -8
  337. package/api/@xmachines/play-view/errors/classes/ReadOnlyContextError.md +5 -5
  338. package/api/@xmachines/play-view/index/functions/attachRenderErrorHandler.md +1 -1
  339. package/api/@xmachines/play-view/index/functions/composePlayState.md +1 -1
  340. package/api/@xmachines/play-view/index/functions/createFailureLatch.md +1 -1
  341. package/api/@xmachines/play-view/index/functions/createReportGuard.md +1 -1
  342. package/api/@xmachines/play-view/index/functions/createViewStoreLifecycle.md +1 -1
  343. package/api/@xmachines/play-view/index/functions/guardContextWrites.md +4 -28
  344. package/api/@xmachines/play-view/index/functions/refreshContextSubtree.md +1 -1
  345. package/api/@xmachines/play-view/index/functions/reuseComposedState.md +1 -1
  346. package/api/@xmachines/play-view/index/functions/sameViewInputs.md +1 -1
  347. package/api/@xmachines/play-view/index/functions/toAtomState.md +1 -1
  348. package/api/@xmachines/play-view/index/functions/typedSpec.md +1 -1
  349. package/api/@xmachines/play-view/index/interfaces/BaseActorProviderProps.md +5 -5
  350. package/api/@xmachines/play-view/index/interfaces/BaseViewContextValue.md +5 -5
  351. package/api/@xmachines/play-view/index/interfaces/FailureLatch.md +3 -3
  352. package/api/@xmachines/play-view/index/interfaces/PlaySpec.md +2 -2
  353. package/api/@xmachines/play-view/index/interfaces/ReportGuard.md +5 -5
  354. package/api/@xmachines/play-view/index/interfaces/ReportGuardMessages.md +3 -3
  355. package/api/@xmachines/play-view/index/interfaces/ResolveViewStoreOptions.md +2 -2
  356. package/api/@xmachines/play-view/index/interfaces/ViewInputs.md +4 -4
  357. package/api/@xmachines/play-view/index/interfaces/ViewStoreLifecycle.md +3 -3
  358. package/api/@xmachines/play-view/index/interfaces/ViewStoreResolution.md +4 -4
  359. package/api/@xmachines/play-view/index/interfaces/Viewable.md +5 -5
  360. package/api/@xmachines/play-view/index/type-aliases/ViewActor.md +1 -1
  361. package/api/@xmachines/play-view/index/variables/CONTEXT_STATE_KEY.md +1 -1
  362. package/api/@xmachines/play-vue/README.md +13 -9
  363. package/api/@xmachines/play-vue/functions/defineRegistry.md +1 -1
  364. package/api/@xmachines/play-vue/functions/useActor.md +1 -1
  365. package/api/@xmachines/play-vue/functions/usePlayView.md +1 -1
  366. package/api/@xmachines/play-vue/interfaces/ActorProviderProps.md +6 -6
  367. package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +9 -9
  368. package/api/@xmachines/play-vue/interfaces/ViewContextValue.md +5 -5
  369. package/api/@xmachines/play-vue/type-aliases/AnyPlayActor.md +1 -1
  370. package/api/@xmachines/play-vue/type-aliases/ComponentEntry.md +1 -1
  371. package/api/@xmachines/play-vue/type-aliases/ComponentsMap.md +1 -1
  372. package/api/@xmachines/play-vue/type-aliases/DefineRegistryOptions.md +2 -2
  373. package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
  374. package/api/@xmachines/play-vue-router/README.md +12 -11
  375. package/api/@xmachines/play-vue-router/errors/classes/VueRouterNavigationError.md +4 -4
  376. package/api/@xmachines/play-vue-router/errors/classes/VueRouterSendError.md +4 -4
  377. package/api/@xmachines/play-vue-router/index/classes/RouteMap.md +11 -11
  378. package/api/@xmachines/play-vue-router/index/classes/VueRouterBridge.md +15 -15
  379. package/api/@xmachines/play-vue-router/index/interfaces/PlayRouteEvent.md +7 -7
  380. package/api/@xmachines/play-vue-router/index/interfaces/RoutableActor.md +6 -6
  381. package/api/@xmachines/play-vue-router/index/interfaces/RouteMapOptions.md +10 -4
  382. package/api/@xmachines/play-vue-router/index/interfaces/RouteMapping.md +3 -3
  383. package/api/@xmachines/play-vue-router/index/interfaces/RouterBridge.md +15 -17
  384. package/api/@xmachines/play-vue-router/index/variables/PlayRouterProvider.md +23 -1
  385. package/api/@xmachines/play-xstate/README.md +61 -30
  386. package/api/@xmachines/play-xstate/errors/README.md +1 -0
  387. package/api/@xmachines/play-xstate/errors/classes/ActorThrewNonErrorError.md +4 -4
  388. package/api/@xmachines/play-xstate/errors/classes/InvalidEventError.md +5 -5
  389. package/api/@xmachines/play-xstate/errors/classes/InvalidMachineError.md +4 -4
  390. package/api/@xmachines/play-xstate/errors/classes/InvalidRouteHandlerError.md +5 -5
  391. package/api/@xmachines/play-xstate/errors/classes/InvalidRouteMetadataError.md +5 -5
  392. package/api/@xmachines/play-xstate/errors/classes/InvalidRouteParamError.md +207 -0
  393. package/api/@xmachines/play-xstate/errors/classes/MissingRouteParamError.md +6 -6
  394. package/api/@xmachines/play-xstate/errors/classes/MissingStateIdError.md +6 -6
  395. package/api/@xmachines/play-xstate/index/README.md +2 -2
  396. package/api/@xmachines/play-xstate/index/classes/PlayerActor.md +41 -42
  397. package/api/@xmachines/play-xstate/index/functions/compose.md +4 -4
  398. package/api/@xmachines/play-xstate/index/functions/definePlayer.md +2 -2
  399. package/api/@xmachines/play-xstate/index/interfaces/PlayerConfig.md +4 -4
  400. package/api/@xmachines/play-xstate/index/interfaces/PlayerFactoryResumeOptions.md +2 -2
  401. package/api/@xmachines/play-xstate/index/interfaces/PlayerOptions.md +9 -9
  402. package/api/@xmachines/play-xstate/index/type-aliases/Capability.md +1 -1
  403. package/api/@xmachines/play-xstate/index/type-aliases/PlayerConstructor.md +1 -1
  404. package/api/@xmachines/play-xstate/index/type-aliases/PlayerFactory.md +1 -1
  405. package/api/@xmachines/play-xstate/index/variables/DISPOSE.md +1 -1
  406. package/api/@xmachines/play-xstate/with-routing/functions/buildRouteUrl.md +13 -6
  407. package/api/@xmachines/play-xstate/with-routing/functions/deriveRoute.md +1 -1
  408. package/api/@xmachines/play-xstate/with-routing/functions/formatPlayRouteTransitions.md +1 -1
  409. package/api/@xmachines/play-xstate/with-routing/functions/isAbsoluteRoute.md +1 -1
  410. package/api/@xmachines/play-xstate/with-routing/functions/withRouting.md +1 -1
  411. package/api/@xmachines/play-xstate/with-routing/interfaces/RouteContext.md +5 -5
  412. package/api/@xmachines/play-xstate/with-routing/interfaces/RouteObject.md +5 -5
  413. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteData.md +1 -1
  414. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteDataResolver.md +1 -1
  415. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMachineConfig.md +4 -4
  416. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMetadata.md +1 -1
  417. package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteStateNode.md +5 -5
  418. package/api/@xmachines/play-xstate/with-view/functions/withView.md +6 -5
  419. package/api/@xmachines/shared/vite-aliases/functions/xmAliases.md +1 -1
  420. package/api/@xmachines/shared/vite-aliases/functions/xmCacheDir.md +1 -1
  421. package/api/@xmachines/shared/vite-aliases/functions/xmOptimizeDeps.md +1 -1
  422. package/api/@xmachines/shared/vite-aliases/functions/xmResolve.md +1 -1
  423. package/api/@xmachines/shared/vite-aliases/functions/xmSvelteRunes.md +2 -2
  424. package/api/@xmachines/shared/vitest/functions/defineXmBrowserConfig.md +1 -1
  425. package/api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md +1 -1
  426. package/api/@xmachines/shared/vitest/interfaces/XmBrowserConfigOptions.md +4 -4
  427. package/api/README.md +2 -1
  428. package/api/llms.txt +4 -3
  429. package/contributing/architecture.md +105 -124
  430. package/contributing/configuration.md +15 -15
  431. package/contributing/deployment.md +82 -6
  432. package/contributing/development.md +58 -30
  433. package/contributing/migrating-to-play-atom.md +209 -0
  434. package/contributing/testing.md +61 -64
  435. package/examples/@xmachines/play-dom-demo/README.md +40 -63
  436. package/examples/@xmachines/play-dom-demo/functions/createAuthActionHandlers.md +35 -0
  437. package/examples/@xmachines/play-dom-demo/functions/createConfirmDialog.md +27 -0
  438. package/examples/@xmachines/play-dom-demo/functions/createNavBar.md +2 -2
  439. package/examples/@xmachines/play-dom-demo/functions/initShell.md +7 -6
  440. package/examples/@xmachines/play-dom-demo/type-aliases/AuthCatalog.md +1 -1
  441. package/examples/@xmachines/play-dom-demo/variables/About.md +1 -1
  442. package/examples/@xmachines/play-dom-demo/variables/Button.md +12 -0
  443. package/examples/@xmachines/play-dom-demo/variables/Contact.md +1 -1
  444. package/examples/@xmachines/play-dom-demo/variables/Dashboard.md +1 -1
  445. package/examples/@xmachines/play-dom-demo/variables/Field.md +19 -0
  446. package/examples/@xmachines/play-dom-demo/variables/Home.md +1 -1
  447. package/examples/@xmachines/play-dom-demo/variables/Login.md +1 -1
  448. package/examples/@xmachines/play-dom-demo/variables/NavBarView.md +1 -1
  449. package/examples/@xmachines/play-dom-demo/variables/Navigation.md +1 -1
  450. package/examples/@xmachines/play-dom-demo/variables/Overview.md +1 -1
  451. package/examples/@xmachines/play-dom-demo/variables/Panel.md +14 -0
  452. package/examples/@xmachines/play-dom-demo/variables/Profile.md +1 -1
  453. package/examples/@xmachines/play-dom-demo/variables/Settings.md +1 -1
  454. package/examples/@xmachines/play-dom-demo/variables/Stats.md +1 -1
  455. package/examples/@xmachines/play-dom-demo/variables/authCatalog.md +190 -165
  456. package/examples/@xmachines/play-dom-demo/variables/demoComponents.md +30 -0
  457. package/examples/@xmachines/play-dom-router-demo/README.md +20 -27
  458. package/examples/@xmachines/play-react-demo/README.md +33 -57
  459. package/examples/@xmachines/play-react-demo/functions/createAuthActionHandlers.md +35 -0
  460. package/examples/@xmachines/play-react-demo/type-aliases/AuthCatalog.md +1 -1
  461. package/examples/@xmachines/play-react-demo/variables/About.md +1 -1
  462. package/examples/@xmachines/play-react-demo/variables/Button.md +12 -0
  463. package/examples/@xmachines/play-react-demo/variables/Contact.md +1 -1
  464. package/examples/@xmachines/play-react-demo/variables/Dashboard.md +1 -1
  465. package/examples/@xmachines/play-react-demo/variables/DebugPanel.md +4 -3
  466. package/examples/@xmachines/play-react-demo/variables/Field.md +18 -0
  467. package/examples/@xmachines/play-react-demo/variables/Home.md +1 -1
  468. package/examples/@xmachines/play-react-demo/variables/Login.md +1 -1
  469. package/examples/@xmachines/play-react-demo/variables/NavBar.md +1 -1
  470. package/examples/@xmachines/play-react-demo/variables/NavBarView.md +1 -1
  471. package/examples/@xmachines/play-react-demo/variables/Navigation.md +1 -1
  472. package/examples/@xmachines/play-react-demo/variables/Overview.md +1 -1
  473. package/examples/@xmachines/play-react-demo/variables/Panel.md +15 -0
  474. package/examples/@xmachines/play-react-demo/variables/Profile.md +1 -1
  475. package/examples/@xmachines/play-react-demo/variables/Settings.md +1 -1
  476. package/examples/@xmachines/play-react-demo/variables/Shell.md +2 -1
  477. package/examples/@xmachines/play-react-demo/variables/Stats.md +1 -1
  478. package/examples/@xmachines/play-react-demo/variables/authCatalog.md +190 -165
  479. package/examples/@xmachines/play-react-demo/variables/demoComponents.md +30 -0
  480. package/examples/@xmachines/play-react-router-demo/README.md +32 -32
  481. package/examples/@xmachines/play-solid-demo/README.md +33 -57
  482. package/examples/@xmachines/play-solid-demo/functions/createAuthActionHandlers.md +35 -0
  483. package/examples/@xmachines/play-solid-demo/type-aliases/AuthCatalog.md +1 -1
  484. package/examples/@xmachines/play-solid-demo/variables/About.md +1 -1
  485. package/examples/@xmachines/play-solid-demo/variables/Button.md +11 -0
  486. package/examples/@xmachines/play-solid-demo/variables/Contact.md +1 -1
  487. package/examples/@xmachines/play-solid-demo/variables/Dashboard.md +1 -1
  488. package/examples/@xmachines/play-solid-demo/variables/DebugPanel.md +5 -3
  489. package/examples/@xmachines/play-solid-demo/variables/Field.md +11 -0
  490. package/examples/@xmachines/play-solid-demo/variables/Home.md +1 -1
  491. package/examples/@xmachines/play-solid-demo/variables/Login.md +1 -1
  492. package/examples/@xmachines/play-solid-demo/variables/NavBar.md +1 -1
  493. package/examples/@xmachines/play-solid-demo/variables/NavBarView.md +1 -1
  494. package/examples/@xmachines/play-solid-demo/variables/Navigation.md +1 -1
  495. package/examples/@xmachines/play-solid-demo/variables/Overview.md +1 -1
  496. package/examples/@xmachines/play-solid-demo/variables/Panel.md +11 -0
  497. package/examples/@xmachines/play-solid-demo/variables/Profile.md +1 -1
  498. package/examples/@xmachines/play-solid-demo/variables/Settings.md +1 -1
  499. package/examples/@xmachines/play-solid-demo/variables/Shell.md +2 -1
  500. package/examples/@xmachines/play-solid-demo/variables/Stats.md +1 -1
  501. package/examples/@xmachines/play-solid-demo/variables/authCatalog.md +114 -2
  502. package/examples/@xmachines/play-solid-demo/variables/demoComponents.md +30 -0
  503. package/examples/@xmachines/play-solid-router-demo/README.md +20 -23
  504. package/examples/@xmachines/play-svelte-demo/README.md +38 -44
  505. package/examples/@xmachines/play-svelte-demo/functions/createAuthActionHandlers.md +35 -0
  506. package/examples/@xmachines/play-svelte-demo/type-aliases/AuthCatalog.md +1 -1
  507. package/examples/@xmachines/play-svelte-demo/variables/authCatalog.md +114 -2
  508. package/examples/@xmachines/play-svelte-demo/variables/demoComponents.md +30 -0
  509. package/examples/@xmachines/play-svelte-spa-router-demo/README.md +20 -26
  510. package/examples/@xmachines/play-sveltekit-router-demo/README.md +20 -26
  511. package/examples/@xmachines/play-tanstack-react-router-demo/README.md +29 -31
  512. package/examples/@xmachines/play-tanstack-solid-router-demo/README.md +25 -27
  513. package/examples/@xmachines/play-vue-demo/README.md +36 -60
  514. package/examples/@xmachines/play-vue-demo/functions/createAuthActionHandlers.md +35 -0
  515. package/examples/@xmachines/play-vue-demo/type-aliases/AuthCatalog.md +1 -1
  516. package/examples/@xmachines/play-vue-demo/variables/App.md +1 -1
  517. package/examples/@xmachines/play-vue-demo/variables/authCatalog.md +114 -2
  518. package/examples/@xmachines/play-vue-demo/variables/demoComponents.md +11 -0
  519. package/examples/@xmachines/play-vue-router-demo/README.md +12 -23
  520. package/examples/README.md +3 -3
  521. package/examples/basic-state-machine.md +4 -4
  522. package/examples/form-validation.md +1 -1
  523. package/examples/multi-router-integration.md +23 -23
  524. package/examples/routing-patterns.md +5 -5
  525. package/examples/traffic-light.md +6 -6
  526. package/guides/README.md +1 -1
  527. package/guides/actor-model.md +26 -17
  528. package/guides/atoms.md +264 -0
  529. package/guides/getting-started.md +52 -17
  530. package/guides/inspector.md +3 -3
  531. package/guides/routing.md +67 -47
  532. package/guides/state-machines.md +4 -4
  533. package/package.json +3 -3
  534. package/rfc/play.md +83 -52
  535. package/api/@xmachines/play-react/functions/useSignalEffect.md +0 -77
  536. package/api/@xmachines/play-router/index/functions/getPatternParamNames.md +0 -29
  537. package/api/@xmachines/play-router/index/functions/getRequiredPatternParamNames.md +0 -39
  538. package/api/@xmachines/play-signals/README.md +0 -209
  539. package/api/@xmachines/play-signals/functions/watchSignal.md +0 -65
  540. package/api/@xmachines/play-signals/interfaces/ComputedOptions.md +0 -36
  541. package/api/@xmachines/play-signals/interfaces/SignalComputed.md +0 -49
  542. package/api/@xmachines/play-signals/interfaces/SignalOptions.md +0 -37
  543. package/api/@xmachines/play-signals/interfaces/SignalState.md +0 -68
  544. package/api/@xmachines/play-signals/interfaces/SignalWatcher.md +0 -97
  545. package/api/@xmachines/play-signals/namespaces/Signal/README.md +0 -22
  546. package/api/@xmachines/play-signals/namespaces/Signal/classes/Computed.md +0 -52
  547. package/api/@xmachines/play-signals/namespaces/Signal/classes/State.md +0 -72
  548. package/api/@xmachines/play-signals/namespaces/Signal/interfaces/Options.md +0 -19
  549. package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/README.md +0 -21
  550. package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/classes/Watcher.md +0 -85
  551. package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/currentComputed.md +0 -13
  552. package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/hasSinks.md +0 -19
  553. package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/hasSources.md +0 -19
  554. package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/introspectSinks.md +0 -19
  555. package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/introspectSources.md +0 -19
  556. package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/untrack.md +0 -25
  557. package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/variables/unwatched.md +0 -9
  558. package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/variables/watched.md +0 -9
  559. package/api/@xmachines/play-signals/namespaces/Signal/variables/isComputed.md +0 -19
  560. package/api/@xmachines/play-signals/namespaces/Signal/variables/isState.md +0 -19
  561. package/api/@xmachines/play-signals/namespaces/Signal/variables/isWatcher.md +0 -19
  562. package/api/@xmachines/play-signals/type-aliases/WatcherNotify.md +0 -33
  563. package/api/@xmachines/play-url/index/functions/getNormalizedParamNameMap.md +0 -32
  564. package/api/@xmachines/play-url/index/functions/getPatternParamNames.md +0 -29
  565. package/api/@xmachines/play-url/index/functions/getRequiredPatternParamNames.md +0 -39
  566. package/api/@xmachines/play-url/index/functions/isParameterizedPattern.md +0 -36
  567. package/api/@xmachines/play-url/index/functions/normalizeParamNames.md +0 -36
  568. package/guides/signals.md +0 -209
@@ -6,11 +6,11 @@ This document describes the test framework, conventions, and CI integration for
6
6
 
7
7
  The monorepo uses **[Vitest](https://vitest.dev/) `^5.0.1`** as its test framework, with **@vitest/coverage-v8** for coverage reporting and **@vitest/browser-playwright** (Playwright/Chromium) for browser-mode tests.
8
8
 
9
- All packages extend the shared Vitest configuration helper `defineXmVitestConfig` (from `@xmachines/shared/vitest`) which automatically applies:
9
+ All packages extend the shared Vitest configuration helper `defineXmVitestConfig` (from [`@xmachines/shared/vitest`](../api/@xmachines/shared/README.md)) which automatically applies:
10
10
 
11
11
  - `@xmachines/*` source aliases so imports resolve to source during test runs
12
- - `@xmachines/shared/vitest-setup` — extends Vitest matchers with `@testing-library/jest-dom`
13
- - `@xmachines/shared/vitest-node-setup` — enforces Node.js ≥ 24 on non-browser projects
12
+ - [`@xmachines/shared/vitest-setup`](../api/@xmachines/shared/README.md) — extends Vitest matchers with `@testing-library/jest-dom`
13
+ - [`@xmachines/shared/vitest-node-setup`](../api/@xmachines/shared/README.md) — enforces Node.js ≥ 24 on non-browser projects
14
14
 
15
15
  **Auto-injected setup files:**
16
16
 
@@ -19,7 +19,7 @@ All packages extend the shared Vitest configuration helper `defineXmVitestConfig
19
19
  | `packages/shared/config/vitest.node.setup.ts` | All non-browser projects | Validates Node.js ≥ 24 runtime; throws if wrong runtime |
20
20
  | `packages/shared/config/vitest.setup.ts` | All projects | Imports `@testing-library/jest-dom/vitest` matchers |
21
21
 
22
- `vitest.setup.ts` is also the one file that `@xmachines/shared/tsconfig-test` names in `files`, so its import puts the matcher TYPES in every test program. Each package overrides `include`, and `files` survives that.
22
+ `vitest.setup.ts` is also the one file that [`@xmachines/shared/tsconfig-test`](../api/@xmachines/shared/README.md) names in `files`, so its import puts the matcher TYPES in every test program. Each package overrides `include`, and `files` survives that.
23
23
 
24
24
  ### The jest-dom patch
25
25
 
@@ -141,21 +141,21 @@ packages/<name>/
141
141
 
142
142
  ### File naming conventions
143
143
 
144
- | Extension | Purpose |
145
- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
146
- | `.spec.ts` | Protocol enforcement tests; compile-time type safety tests; used in core packages (`play`, `play-actor`, `play-signals`, `play-xstate`) |
147
- | `.test.ts` | Unit, integration, and behavioral tests; used across all packages |
148
- | `.browser.test.ts` / `.browser.test.tsx` | Playwright browser environment tests; excluded from standard `vitest.config.ts`, only run via `vitest.browser.config.ts` |
149
- | `.typecheck.ts` (in `src/`) | Compile-time-only type assertion files; not Vitest test files; validated by `pnpm run test:build` |
150
- | `router-bridge-contract.ts` | Shared contract test runner; not a test file itself; imported by adapter test files |
144
+ | Extension | Purpose |
145
+ | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
146
+ | `.spec.ts` | Protocol enforcement tests; compile-time type safety tests; used in core packages (`play`, `play-actor`, `play-atom`, `play-xstate`) |
147
+ | `.test.ts` | Unit, integration, and behavioral tests; used across all packages |
148
+ | `.browser.test.ts` / `.browser.test.tsx` | Playwright browser environment tests; excluded from standard `vitest.config.ts`, only run via `vitest.browser.config.ts` |
149
+ | `.typecheck.ts` (in `src/`) | Compile-time-only type assertion files; not Vitest test files; validated by `pnpm run test:build` |
150
+ | `router-bridge-contract.ts` | Shared contract test runner; not a test file itself; imported by adapter test files |
151
151
 
152
152
  ### Test environments
153
153
 
154
- | Environment | Packages |
155
- | ----------------------------- | ---------------------------------------------------------------------------------------------------------- |
156
- | `node` | Core logic: `@xmachines/play`, `play-actor`, `play-signals`, `play-xstate`, `play-router`, router adapters |
157
- | `jsdom` | UI renderers: `@xmachines/play-react`, `play-vue`, `play-solid`, `play-svelte`, `play-dom` |
158
- | Browser (Playwright/Chromium) | Browser-specific and E2E demo tests |
154
+ | Environment | Packages |
155
+ | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
156
+ | `node` | Core logic: [`@xmachines/play`](../api/@xmachines/play/README.md), `play-actor`, `play-atom`, `play-xstate`, `play-router`, router adapters |
157
+ | `jsdom` | UI renderers: [`@xmachines/play-react`](../api/@xmachines/play-react/README.md), `play-vue`, `play-solid`, `play-svelte`, `play-dom` |
158
+ | Browser (Playwright/Chromium) | Browser-specific and E2E demo tests |
159
159
 
160
160
  `defineXmVitestConfig` gives a jsdom project the `vmThreads` pool. The `forks` pool builds one jsdom for each test file, and a jsdom costs about 0.4 s. The `vmThreads` pool gives each file its own VM context in a worker that keeps the environment, so a worker builds one jsdom for all the files that it runs. Each file still gets a fresh module registry and fresh globals. The full `pnpm test` run takes 94 s with `vmThreads` and 160 s with `forks`, and the environment share of the tracked time drops from 42% to 14%.
161
161
 
@@ -167,15 +167,15 @@ A project that declares its own `pool` keeps it.
167
167
 
168
168
  Isolation gives each test FILE its own worker: Vitest spawns a process, builds the environment, and evaluates the module graph one more time. That costs about 110 ms for each file, and the full `pnpm test` run takes 90 s with isolation on every project and 62 s with this rule.
169
169
 
170
- A jsdom project keeps isolation and loses no time by it, because `vmThreads` above already gives one worker to many files. It also needs isolation: `isolate: false` shares the globals between the files of one worker, and three `@xmachines/play-react` tests fail under it.
170
+ A jsdom project keeps isolation and loses no time by it, because `vmThreads` above already gives one worker to many files. It also needs isolation: `isolate: false` shares the globals between the files of one worker, and three [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) tests fail under it.
171
171
 
172
- A worker that runs without isolation keeps ONE module registry for all the files that it runs, so `vi.mock` applies only while the worker has not yet loaded the real module. The order that the pool picks decides the winner, and the suite then fails on some runs and passes on others. `@xmachines/play-router` showed it: one file mocked `machine-to-graph.js` while twenty-five sibling files called the real module, and the package failed three tests on one run of the whole suite and twenty-five on the next. The file now builds a real machine, the package needs no isolation, and it runs in 1.0 s rather than 5.4 s.
172
+ A worker that runs without isolation keeps ONE module registry for all the files that it runs, so `vi.mock` applies only while the worker has not yet loaded the real module. The order that the pool picks decides the winner, and the suite then fails on some runs and passes on others. [`@xmachines/play-router`](../api/@xmachines/play-router/README.md) showed it: one file mocked `machine-to-graph.js` while twenty-five sibling files called the real module, and the package failed three tests on one run of the whole suite and twenty-five on the next. The file now builds a real machine, the package needs no isolation, and it runs in 1.0 s rather than 5.4 s.
173
173
 
174
174
  **A project whose test files call `vi.mock`, `vi.doMock`, `vi.stubGlobal`, or `vi.stubEnv` declares `isolate: true` in its own `vitest.config.ts`, with the reason.** `tests/isolate-policy.test.ts` holds this rule true: it asks `vitest list` which project collects which file, reads `isolate` from the config module, and names the file and the config when the two disagree. The scan follows the relative imports of each test file and reads the setup files of the project, so a fixture that mocks a module cannot hide, and it reads each `@vitest-environment` docblock, which reaches no config. Two projects declare it today: the `play-sveltekit-router` demo, which mocks `$app/navigation`, and the `play-actor` shared example, which stubs `window`.
175
175
 
176
176
  Prefer the other answer where you can reach it. A test that builds the real collaborator needs no isolation, and it costs the whole project nothing.
177
177
 
178
- A project that gives SOME of its files another environment isolates for the same reason. Vitest builds and tears down that environment inside a worker that keeps its module registry, so a module evaluated against the jsdom of one file stays cached for the next one and holds a `window` that no longer exists. `@xmachines/play-react-router` runs three React files that way.
178
+ A project that gives SOME of its files another environment isolates for the same reason. Vitest builds and tears down that environment inside a worker that keeps its module registry, so a module evaluated against the jsdom of one file stays cached for the next one and holds a `window` that no longer exists. [`@xmachines/play-react-router`](../api/@xmachines/play-react-router/README.md) runs three React files that way.
179
179
 
180
180
  A spy needs no isolation, and neither do fake timers. Each patches something that the test itself owns and restores, and neither depends on a fresh module registry.
181
181
 
@@ -187,8 +187,8 @@ pnpm exec vitest run --sequence.shuffle.files
187
187
 
188
188
  ### Test helpers and shared setup
189
189
 
190
- - **`@xmachines/shared/vitest-setup`** — Injects `@testing-library/jest-dom` matchers. Applied automatically by `defineXmVitestConfig`.
191
- - **`@xmachines/shared/vitest-node-setup`** — Enforces Node ≥ 24 at runtime. Auto-injected for non-browser configs.
190
+ - **[`@xmachines/shared/vitest-setup`](../api/@xmachines/shared/README.md)** — Injects `@testing-library/jest-dom` matchers. Applied automatically by `defineXmVitestConfig`.
191
+ - **[`@xmachines/shared/vitest-node-setup`](../api/@xmachines/shared/README.md)** — Enforces Node ≥ 24 at runtime. Auto-injected for non-browser configs.
192
192
  - **`packages/play-react/test/test-utils.ts`** — React-specific test utilities for the `play-react` package.
193
193
  - **`packages/play-router/examples/shared/`** and **`packages/play-actor/examples/shared/`** — Shared test fixtures for router and actor integration tests.
194
194
 
@@ -263,7 +263,6 @@ describe("ClassName or functionName()", () => {
263
263
 
264
264
  ```typescript
265
265
  import { PlayActor } from "../src/abstract-actor.js";
266
- import { Signal } from "@xmachines/play-signals";
267
266
  ```
268
267
 
269
268
  ### Lifecycle hooks
@@ -306,7 +305,7 @@ afterEach(() => {
306
305
 
307
306
  **Never mock these:**
308
307
 
309
- - **TC39 Signals** (`Signal.State`, `Signal.Computed`, `Signal.subtle.Watcher`) — always use real implementations from `@xmachines/play-signals`. Signals have precise reactive semantics (synchronous propagation, lazy computation) that mocks cannot replicate accurately.
308
+ - **Atoms** (`createAtom`, `watchAtom`) — always use real implementations from [`@xmachines/play-atom`](../api/@xmachines/play-atom/README.md). Atoms have precise reactive semantics (synchronous propagation, memoized derivation) that mocks cannot replicate accurately.
310
309
  - **Internal `@xmachines/*` packages** — these are resolved directly to source via the `xmAliases` Vite plugin in the Vitest config. Mocking them would hide integration bugs and defeat the purpose of cross-package testing.
311
310
  - **XState** — always use real `setup()` / `createMachine()` / `createActor()`. XState's actor lifecycle (start, stop, snapshot, subscription) is a behavioral contract that mocks cannot reliably emulate.
312
311
 
@@ -317,17 +316,16 @@ afterEach(() => {
317
316
  ```typescript
318
317
  import { PlayActor } from "@xmachines/play-actor";
319
318
  import type { Routable } from "@xmachines/play-router";
320
- import { Signal } from "@xmachines/play-signals";
321
319
 
322
320
  class MockActor implements PlayActor, Routable {
323
- readonly state = new Signal.State({} as unknown);
324
- private _routeState: Signal.State<string | null>;
325
- readonly currentRoute: Signal.Computed<string | null>;
321
+ readonly state = createAtom({} as unknown);
322
+ private _routeState: Atom<string | null>;
323
+ readonly currentRoute: ReadonlyAtom<string | null>;
326
324
  readonly initialRoute: string | null;
327
325
 
328
326
  constructor(startRoute: string | null = "/") {
329
- this._routeState = new Signal.State<string | null>(startRoute);
330
- this.currentRoute = new Signal.Computed(() => this._routeState.get());
327
+ this._routeState = createAtom<string | null>(startRoute);
328
+ this.currentRoute = createAtom(() => this._routeState.get());
331
329
  this.initialRoute = startRoute;
332
330
  }
333
331
 
@@ -344,14 +342,14 @@ import { stubOf } from "@xmachines/shared/test-support";
344
342
 
345
343
  function createMockActor(initialView: PlaySpec | null = null) {
346
344
  return stubOf<ViewActor>({
347
- currentView: new Signal.State<PlaySpec | null>(initialView),
345
+ currentView: createAtom<PlaySpec | null>(initialView),
348
346
  send: vi.fn(),
349
347
  start: vi.fn(),
350
348
  stop: vi.fn(),
351
349
  getSnapshot: vi.fn(),
352
350
  subscribe: vi.fn(),
353
- state: new Signal.State<unknown>({}),
354
- currentRoute: new Signal.Computed(() => null),
351
+ state: createAtom<unknown>({}),
352
+ currentRoute: createAtom(() => null),
355
353
  });
356
354
  }
357
355
  ```
@@ -363,9 +361,9 @@ sites. `X as unknown as T` is banned in this repo; if `stubOf` cannot express
363
361
  the case, `unsafeCast<T>(value)` from the same module is the deliberate,
364
362
  greppable escape hatch.
365
363
 
366
- ### Async and signal patterns
364
+ ### Async and atom patterns
367
365
 
368
- **Flushing the microtask queue (required for Signal propagation):**
366
+ **Flushing the microtask queue (required for `watchAtom` delivery):**
369
367
 
370
368
  ```typescript
371
369
  function waitForMicrotask(): Promise<void> {
@@ -377,23 +375,26 @@ await waitForMicrotask();
377
375
  await vi.waitFor(() => expect(result).toBe(expected), { timeout: 100 });
378
376
  ```
379
377
 
380
- **Signal watcher pattern:**
378
+ **Atom watch pattern:**
381
379
 
382
380
  ```typescript
383
- let notified = false;
384
- const watcher = new Signal.subtle.Watcher(() => {
385
- notified = true;
381
+ import { createAtom, watchAtom } from "@xmachines/play-atom";
382
+
383
+ let notified: string | null = null;
384
+ const stop = watchAtom(actor.currentRoute, (route) => {
385
+ notified = route;
386
386
  });
387
- watcher.watch(actor.currentRoute);
388
- actor.currentRoute.get(); // Initial read required to prime computed signals
389
387
 
390
388
  actor.state.set({ path: "/dashboard" });
391
- watcher.getPending(); // Process notifications synchronously
389
+ // `watchAtom` coalesces into a microtask, so flush before the assertion.
390
+ await new Promise((resolve) => setTimeout(resolve, 0));
392
391
 
393
- expect(notified).toBe(true);
394
- watcher.unwatch(actor.currentRoute); // Always clean up
392
+ expect(notified).toBe("/dashboard");
393
+ stop(); // Always clean up
395
394
  ```
396
395
 
396
+ `atom.subscribe` delivers SYNCHRONOUSLY, inside the `set`, and it needs no flush. Use it when a test must observe the notification at the moment of the write. Use `watchAtom` everywhere else, because it is what the renderers and the bridges use.
397
+
397
398
  ### Compile-time type tests
398
399
 
399
400
  For type-only assertions, use `@ts-expect-error` in `.spec.ts` files:
@@ -448,18 +449,18 @@ try {
448
449
 
449
450
  ### An expected report in the log
450
451
 
451
- A test that makes a component fail gets a report of the framework for free. React writes the error and a component stack to `console.error` when the root declares no `onCaughtError`, and `@xmachines/play-solid` writes a line of its own when the caller gives no `onError`. Both reports are correct, and both reach the log of the pipeline, where 29 of them once filled more than half of the `test` job.
452
+ A test that makes a component fail gets a report of the framework for free. React writes the error and a component stack to `console.error` when the root declares no `onCaughtError`, and [`@xmachines/play-solid`](../api/@xmachines/play-solid/README.md) writes a line of its own when the caller gives no `onError`. Both reports are correct, and both reach the log of the pipeline, where 29 of them once filled more than half of the `test` job.
452
453
 
453
454
  Claim the report in the test that expects it, and assert it:
454
455
 
455
- - **React.** Take `render` from `test/test-utils.js` of `@xmachines/play-react`, and not from `@testing-library/react`. It gives an `onCaughtError` to the root, which stops the print, and the result carries `caughtErrors` for an assertion. Keep the `render` of the library for a test that holds the DEFAULT report: the print of React IS the report of play-react for a caller that gives no `onError`.
456
+ - **React.** Take `render` from `test/test-utils.js` of [`@xmachines/play-react`](../api/@xmachines/play-react/README.md), and not from `@testing-library/react`. It gives an `onCaughtError` to the root, which stops the print, and the result carries `caughtErrors` for an assertion. Keep the `render` of the library for a test that holds the DEFAULT report: the print of React IS the report of play-react for a caller that gives no `onError`.
456
457
  - **Any framework.** Call `vi.spyOn(console, "error").mockImplementation(() => {})` before the render, and `expect(spy).toHaveBeenCalled()` after it. An `afterEach` with `vi.restoreAllMocks()` returns the console to the next test.
457
458
 
458
459
  A report that a spy swallows and no assertion reads is worse than the noise, because it hides the day that the renderer stops to report.
459
460
 
460
461
  ## Contract Tests
461
462
 
462
- The `@xmachines/play-router-shared` package exports a shared behavioral contract suite that all router bridge adapters must satisfy. It lives here (rather than in `@xmachines/play-router`) because the suite drives a real actor via `@xmachines/play-xstate` and uses the shared `authMachine` fixture from `@xmachines/play-actor-shared`, so it sits one layer above the router package and keeps `@xmachines/play-router` free of any dependency on the actor runtime:
463
+ The `@xmachines/play-router-shared` package exports a shared behavioral contract suite that all router bridge adapters must satisfy. It lives here (rather than in [`@xmachines/play-router`](../api/@xmachines/play-router/README.md)) because the suite drives a real actor via [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) and uses the shared `authMachine` fixture from `@xmachines/play-actor-shared`, so it sits one layer above the router package and keeps [`@xmachines/play-router`](../api/@xmachines/play-router/README.md) free of any dependency on the actor runtime:
463
464
 
464
465
  ```typescript
465
466
  // packages/play-router/examples/shared/test/router-bridge-contract.ts
@@ -481,7 +482,7 @@ runBridgeContractTests({
481
482
 
482
483
  The contract covers: deep-link sync on connect, router→actor navigation sync, actor→router sync, guard redirect flows, duplicate event deduplication, and restore-from-snapshot behavior.
483
484
 
484
- **Used by:** `@xmachines/play-router`, `play-tanstack-react-router`, `play-vue-router`, `play-solid-router`, `play-react-router`, and other adapter packages.
485
+ **Used by:** [`@xmachines/play-router`](../api/@xmachines/play-router/README.md), `play-tanstack-react-router`, `play-vue-router`, `play-solid-router`, `play-react-router`, and other adapter packages.
485
486
 
486
487
  **Compile-time bridge contract verification:**
487
488
 
@@ -505,13 +506,13 @@ Coverage is collected using the **v8** provider. The root `vitest.config.ts` def
505
506
 
506
507
  Individual packages enforce their own (typically stricter) thresholds inside their `vitest.config.ts`:
507
508
 
508
- | Package tier | Lines | Functions | Branches | Statements |
509
- | ---------------------------------------------------------------------------------- | ----- | --------- | -------- | ---------- |
510
- | Core packages (`@xmachines/play`, `@xmachines/play-actor`, `@xmachines/play-view`) | 90% | 90% | 85% | 90% |
511
- | Complex logic (`@xmachines/play-xstate`, `@xmachines/play-router`) | 85% | 85% | 80% | 85% |
512
- | Integration packages (e.g. `@xmachines/play-react`, `@xmachines/play-dom`) | 80% | 80% | 80% | 80% |
509
+ | Package tier | Lines | Functions | Branches | Statements |
510
+ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | --------- | -------- | ---------- |
511
+ | Core packages ([`@xmachines/play`](../api/@xmachines/play/README.md), [`@xmachines/play-actor`](../api/@xmachines/play-actor/README.md), [`@xmachines/play-view`](../api/@xmachines/play-view/README.md)) | 90% | 90% | 85% | 90% |
512
+ | Complex logic ([`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md), [`@xmachines/play-router`](../api/@xmachines/play-router/README.md)) | 85% | 85% | 80% | 85% |
513
+ | Integration packages (e.g. [`@xmachines/play-react`](../api/@xmachines/play-react/README.md), [`@xmachines/play-dom`](../api/@xmachines/play-dom/README.md)) | 80% | 80% | 80% | 80% |
513
514
 
514
- `@xmachines/play-router` carries the lower numbers for a reason that its `vitest.config.ts` states: the bridge and the provider lifecycle are the mass of that package, and neither is measured by its own project. `@xmachines/play-router-shared` drives them through 3032 lines of contract suite, and each of the nine router adapters drives them again from its own project. The root `pnpm run test:coverage` is what measures the package whole.
515
+ [`@xmachines/play-router`](../api/@xmachines/play-router/README.md) carries the lower numbers for a reason that its `vitest.config.ts` states: the bridge and the provider lifecycle are the mass of that package, and neither is measured by its own project. `@xmachines/play-router-shared` drives them through 3032 lines of contract suite, and each of the nine router adapters drives them again from its own project. The root `pnpm run test:coverage` is what measures the package whole.
515
516
 
516
517
  Coverage includes: `src/**/*.ts`, `src/**/*.tsx`, `src/**/*.vue`, `src/**/*.svelte`
517
518
 
@@ -530,23 +531,19 @@ Tests run in GitLab CI using the `to-be-continuous/node` pipeline component (ver
530
531
  **CI test command** (from `.gitlab-ci.yml`):
531
532
 
532
533
  ```bash
533
- pnpm run test:coverage -- \
534
- --coverage.reporter=text \
535
- --coverage.reporter=cobertura \
536
- --coverage.reportsDirectory=reports/coverage \
537
- --reporter=default \
538
- --reporter=junit \
539
- --outputFile.junit=reports/junit.xml
534
+ pnpm run test:coverage
540
535
  ```
541
536
 
542
- **Artifacts:** The CI job (`node-build`) publishes:
537
+ The job passes no reporter flag. `vitest.config.ts` owns the reporters, the JUnit file and the coverage directory, and it reads `COVERAGE_REPORTS_DIR` — which the `test` job sets to `reports/`. A new package therefore needs no CI change.
538
+
539
+ **Artifacts:** The `test` job publishes:
543
540
 
544
- - JUnit XML report at `reports/junit.xml` (surfaced in GitLab's test results panel)
545
- - Cobertura coverage XML at `reports/coverage/cobertura-coverage.xml` (used for GitLab's coverage percentage badge — extracted from the `All files` line)
541
+ - JUnit XML report at `reports/test-results.xml` (surfaced in GitLab's test results panel)
542
+ - Cobertura coverage XML at `reports/cobertura-coverage.xml` (used for GitLab's coverage percentage badge — extracted from the `All files` line)
546
543
 
547
544
  Coverage and test results are always uploaded (`when: always`) so failures are visible even when the job itself fails.
548
545
 
549
- The `pnpm run format:check` and `pnpm run lint` commands enforce code style and are run separately from tests (via the `lint-enabled: true` input to the pipeline component).
546
+ The `pnpm run format:check` and `pnpm run lint` commands enforce code style. They run as the separate `format` and `lint` jobs: the component's own lint job is turned off with `lint-enabled: "false"`, because it runs ESLint.
550
547
 
551
548
  ## Test Types Reference
552
549
 
@@ -1,18 +1,24 @@
1
1
  [Examples](../../README.md) / @xmachines/play-dom-demo
2
2
 
3
- <!-- generated-by: gsd-doc-writer -->
4
-
5
3
  # @xmachines/play-dom-demo
6
4
 
7
5
  Vanilla DOM renderer demo for [`@xmachines/play-dom`](../../../api/@xmachines/play-dom/README.md) — actor + `createPlayUI` without a router.
8
6
 
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
+
9
9
  ## What This Demonstrates
10
10
 
11
11
  - Shared auth machine reused without framework-specific business logic
12
12
  - `createPlayUI` wiring `PlayRenderer`-equivalent DOM rendering without a framework
13
- - Auth machine states (home → login → dashboard) drive DOM updates via TC39 Signal watchers
14
- - `watchSignal` for reactive nav visibility and debug panel updates
13
+ - Auth machine states (home → login → dashboard) drive DOM updates via atom watchers
14
+ - `watchAtom` for reactive nav visibility and debug panel updates
15
15
  - Non-browser invariant tests plus browser renderer coverage
16
+ - Stately inspector attached at creation via `options.inspect` — the debug panel's **Show Inspector** button opens the live machine in its own window
17
+ - json-render 0.20 showcase pages driven purely by spec:
18
+ - **Overview** — two data planes side by side: `/context/tasks` (machine context via the read-only `/context` projection; `repeat` + `key`, `$item`-filtered lists, per-row actions sending inspectable machine events) next to ephemeral store state (`pushState`/`removeState`/`setState` built-ins driving filter chips and toggles that survive context updates)
19
+ - **Stats** — nested repeats (`repeat.statePath: { $item: "members" }`) over `/context/teams`
20
+ - **Settings** — declarative field validation, the `validateForm` built-in, a confirm-gated `resetForm` host action, and `onSuccess`/`onError` chains
21
+ - **Contact** — a chained named action: submit validates, then routes home on success or writes `"$error.message"` to state on failure
16
22
 
17
23
  ## Running the Demo
18
24
 
@@ -29,64 +35,41 @@ Then open `http://localhost:3000`.
29
35
 
30
36
  Use this order to understand the implementation:
31
37
 
32
- 1. `src/main.ts` calls `definePlayer({ machine: authMachine })` and starts the actor.
33
- 2. `initShell(actor, app)` from `src/components/Shell.ts` builds the HTML scaffold, mounts a reactive `NavBar`, wires the debug panel, and returns a disconnect function.
38
+ 1. `src/main.ts` creates the page's inspector with `createDemoInspector()`, calls `definePlayer({ machine: authMachine, options: { inspect: inspector.inspect } })`, and starts the actor.
39
+ 2. `initShell(actor, app, inspector)` from `src/components/Shell.ts` builds the HTML scaffold, mounts a reactive `NavBar`, wires the debug panel, and returns a disconnect function.
34
40
  3. `defineRegistry(authCatalog, { components, actions })` builds the typed `registryResult` — real async action handlers dispatching to `actor.send()`.
35
41
  4. `createPlayUI(registryResult)` produces a `mount` function; `mount(actor, container)` wires the registry to the actor — view switches happen automatically when `actor.currentView` changes.
36
- 5. `createNavBar(actor, headerEl)` in `src/components/NavBar.ts` uses `watchSignal(actor.state, ...)` to update nav button visibility based on auth state.
37
- 6. `createDebugPanel(actor, shell)` in `src/components/DebugPanel.ts` uses `watchSignal(actor.state, ...)` and `watchSignal(actor.currentRoute, ...)` to drive live debug panel updates.
42
+ 5. `createNavBar(actor, headerEl)` in `src/components/NavBar.ts` uses `watchAtom(actor.state, ...)` to update nav button visibility based on auth state.
43
+ 6. `createDebugPanel(actor, shell, inspector)` in `src/components/DebugPanel.ts` uses `watchAtom(actor.state, ...)` and `watchAtom(actor.currentRoute, ...)` to drive live debug panel updates, and renders the **Show Inspector** button that calls `inspector.show()`.
38
44
  7. Browser tests in `test/browser/` validate startup rendering and auth interactions.
39
45
 
40
46
  ```ts
41
47
  // src/main.ts (shape)
42
- const createPlayer = definePlayer({ machine: authMachine });
48
+ const inspector = createDemoInspector();
49
+ const createPlayer = definePlayer({
50
+ machine: authMachine,
51
+ options: { inspect: inspector.inspect },
52
+ });
43
53
  const actor = createPlayer();
44
54
  actor.start();
45
55
 
46
56
  const app = document.getElementById("app");
47
57
  if (!app) throw new Error("Root element not found");
48
58
 
49
- initShell(actor, app);
59
+ initShell(actor, app, inspector);
50
60
  ```
51
61
 
52
62
  ```ts
53
63
  // src/components/Shell.ts (shape)
54
64
  const registryResult = defineRegistry(authCatalog, {
55
- components: {
56
- Home,
57
- About,
58
- Contact,
59
- Login,
60
- Dashboard,
61
- Overview,
62
- Stats,
63
- Profile,
64
- Settings,
65
- Navigation,
66
- NavBar: NavBarView,
67
- },
68
- actions: {
69
- login: async (args) =>
70
- actor.send({
71
- type: "auth.login",
72
- username: assertNonNullable(args, "args").username,
73
- }),
74
- logout: async () => actor.send({ type: "auth.logout" }),
75
- route: async (args) => {
76
- const { to, params } = assertNonNullable(args, "args");
77
- actor.send({
78
- type: "play.route",
79
- to,
80
- ...(params != null && { params }),
81
- });
82
- },
83
- },
65
+ components: demoComponents, // one shared map — Home…NavBar plus the 0.20 Panel/Field/Button leaves
66
+ actions: createAuthActionHandlers(actor), // login/logout/route + task events + form actions
84
67
  });
85
68
 
86
69
  const disconnectNavBar = createNavBar(actor, headerEl);
87
- const mount = createPlayUI(registryResult);
70
+ const mount = createPlayUI(registryResult, { onConfirm: createConfirmDialog });
88
71
  const disconnectRenderer = mount(actor, viewContent);
89
- const disconnectDebugPanel = createDebugPanel(actor, shell);
72
+ const disconnectDebugPanel = createDebugPanel(actor, shell, inspector);
90
73
 
91
74
  return () => {
92
75
  disconnectNavBar();
@@ -99,8 +82,8 @@ return () => {
99
82
 
100
83
  - `src/main.ts` - actor creation and shell bootstrap
101
84
  - `src/components/Shell.ts` - DOM scaffold, `DomRegistry` construction, `createPlayUI` wiring, `createNavBar`, and `createDebugPanel`
102
- - `src/components/NavBar.ts` - reactive nav bar using `watchSignal(actor.state, ...)` for auth-driven button visibility
103
- - `src/components/DebugPanel.ts` - live debug footer using `watchSignal` on both `actor.state` and `actor.currentRoute`
85
+ - `src/components/NavBar.ts` - reactive nav bar using `watchAtom(actor.state, ...)` for auth-driven button visibility
86
+ - `src/components/DebugPanel.ts` - live debug footer using `watchAtom` on both `actor.state` and `actor.currentRoute`, plus the **Show Inspector** button
104
87
  - `test/library-pattern.test.ts` - architecture boundary and invariant assertions
105
88
  - `test/browser/renderer-demo.browser.test.ts` - browser-mode renderer coverage
106
89
 
@@ -109,24 +92,22 @@ return () => {
109
92
  The demo utilizes XMachines architectural invariants:
110
93
 
111
94
  1. **Actor Authority:** Navigation buttons dispatch `play.route` events to the actor. The actor evaluates guards and transitions to the correct state — the DOM never decides which view to show.
112
- 2. **Passive Infrastructure:** `createPlayUI` and `watchSignal` only react to actor signals. They do not hold business state or make routing decisions.
113
- 3. **Signal-Only Reactivity:** `watchSignal` (from [`@xmachines/play-signals`](../../../api/@xmachines/play-signals/README.md)) wraps the canonical TC39 Signals watcher lifecycle, keeping all reactivity in the actor signal layer rather than in ad-hoc DOM event listeners.
95
+ 2. **Passive Infrastructure:** `createPlayUI` and `watchAtom` only react to actor atoms. They do not hold business state or make routing decisions.
96
+ 3. **Atom-Only Reactivity:** `watchAtom` (from [`@xmachines/play-atom`](../../../api/@xmachines/play-atom/README.md)) wraps the canonical atoms watcher lifecycle, keeping all reactivity in the actor atom layer rather than in ad-hoc DOM event listeners.
114
97
 
115
98
  ## Watcher Lifecycle and Cleanup Contract
116
99
 
117
100
  This demo follows the canonical watcher lifecycle:
118
101
 
119
- 1. `notify`
120
- 2. `queueMicrotask`
121
- 3. `getPending()`
122
- 4. Read actor signals and project DOM state
123
- 5. Re-arm with `watch()`/`watch(...signals)`
102
+ 1. The atom notifies the subscription, synchronously, from the `set` that changed it
103
+ 2. `watchAtom` queues one microtask, and it drops each duplicate notification of that batch
104
+ 3. The microtask reads the actor atoms and projects DOM state
124
105
 
125
- Watcher notifications are one-shot. Cleanup is explicit: `disconnectNavBar()`, `disconnectRenderer()`, and `disconnectDebugPanel()` are all called from the disconnect function returned by `initShell`. In this demo, cleanup is called on `beforeunload` via `actor.stop()`.
106
+ One subscription lives for the whole watch, and no caller arms a watcher again. Cleanup is explicit: `disconnectNavBar()`, `disconnectRenderer()`, and `disconnectDebugPanel()` are all called from the disconnect function returned by `initShell`. In this demo, cleanup is called on `beforeunload` via `actor.stop()`.
126
107
 
127
108
  ## Adapter Boundaries
128
109
 
129
- `createPlayUI` (from [`@xmachines/play-dom`](../../../api/@xmachines/play-dom/README.md)) is passive infrastructure. It translates actor view signals into DOM mutations but holds no business logic. The `DomRegistry` maps catalog component keys to factory functions — the actor owns which key is active.
110
+ `createPlayUI` (from [`@xmachines/play-dom`](../../../api/@xmachines/play-dom/README.md)) is passive infrastructure. It translates actor view atoms into DOM mutations but holds no business logic. The `DomRegistry` maps catalog component keys to factory functions — the actor owns which key is active.
130
111
 
131
112
  ## Available Scripts
132
113
 
@@ -140,21 +121,11 @@ These commands are defined in `package.json`:
140
121
  | `pnpm --filter @xmachines/play-dom-demo run test` | Run Vitest test suite |
141
122
  | `pnpm --filter @xmachines/play-dom-demo run test:browser` | Run browser-focused Vitest suite |
142
123
 
143
- ## Verification
144
-
145
- Use these checks to validate README claims against the current demo implementation:
146
-
147
- ```bash
148
- pnpm --filter @xmachines/play-dom-demo run test
149
- pnpm --filter @xmachines/play-dom-demo run test:browser
150
- ```
151
-
152
- Expected result: library-pattern invariant tests pass and the browser renderer suite completes.
153
-
154
124
  ## Learn More
155
125
 
156
126
  - [Play DOM](../../../api/@xmachines/play-dom/README.md)
157
127
  - [Play DOM Router](../play-dom-router-demo/README.md)
128
+ - [Inspecting a Running Actor](../../../guides/inspector.md)
158
129
 
159
130
  ## Type Aliases
160
131
 
@@ -164,18 +135,24 @@ Expected result: library-pattern invariant tests pass and the browser renderer s
164
135
 
165
136
  - [About](variables/About.md)
166
137
  - [authCatalog](variables/authCatalog.md)
138
+ - [Button](variables/Button.md)
167
139
  - [Contact](variables/Contact.md)
168
140
  - [Dashboard](variables/Dashboard.md)
141
+ - [demoComponents](variables/demoComponents.md)
142
+ - [Field](variables/Field.md)
169
143
  - [Home](variables/Home.md)
170
144
  - [Login](variables/Login.md)
171
145
  - [NavBarView](variables/NavBarView.md)
172
146
  - [Navigation](variables/Navigation.md)
173
147
  - [Overview](variables/Overview.md)
148
+ - [Panel](variables/Panel.md)
174
149
  - [Profile](variables/Profile.md)
175
150
  - [Settings](variables/Settings.md)
176
151
  - [Stats](variables/Stats.md)
177
152
 
178
153
  ## Functions
179
154
 
155
+ - [createAuthActionHandlers](functions/createAuthActionHandlers.md)
156
+ - [createConfirmDialog](functions/createConfirmDialog.md)
180
157
  - [createNavBar](functions/createNavBar.md)
181
158
  - [initShell](functions/initShell.md)
@@ -0,0 +1,35 @@
1
+ [Examples](../../../README.md) / [@xmachines/play-dom-demo](../README.md) / createAuthActionHandlers
2
+
3
+ # Function: createAuthActionHandlers()
4
+
5
+ ```ts
6
+ function createAuthActionHandlers(actor): object;
7
+ ```
8
+
9
+ Defined in: [packages/play-actor/examples/shared/src/actions.ts:48](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-actor/examples/shared/src/actions.ts#L48)
10
+
11
+ Build the demo action handler map for one actor.
12
+
13
+ Returned functions use the `(params, setState) => Promise<void>` shape every
14
+ framework's `defineRegistry` accepts; spread the result into its `actions`.
15
+
16
+ ## Parameters
17
+
18
+ | Parameter | Type |
19
+ | --------- | ----------- |
20
+ | `actor` | `AuthActor` |
21
+
22
+ ## Returns
23
+
24
+ `object`
25
+
26
+ | Name | Type | Defined in |
27
+ | ---------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
28
+ | `addTask()` | (`params?`) => `Promise`\<`void`\> | [packages/play-actor/examples/shared/src/actions.ts:65](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-actor/examples/shared/src/actions.ts#L65) |
29
+ | `completeTask()` | (`params`, `_setState`, `state`) => `Promise`\<`void`\> | [packages/play-actor/examples/shared/src/actions.ts:72](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-actor/examples/shared/src/actions.ts#L72) |
30
+ | `login()` | (`params?`) => `Promise`\<`void`\> | [packages/play-actor/examples/shared/src/actions.ts:50](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-actor/examples/shared/src/actions.ts#L50) |
31
+ | `logout()` | () => `Promise`\<`void`\> | [packages/play-actor/examples/shared/src/actions.ts:54](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-actor/examples/shared/src/actions.ts#L54) |
32
+ | `removeTask()` | (`params`, `_setState`, `state`) => `Promise`\<`void`\> | [packages/play-actor/examples/shared/src/actions.ts:81](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-actor/examples/shared/src/actions.ts#L81) |
33
+ | `resetForm()` | (`params`, `setState`) => `Promise`\<`void`\> | [packages/play-actor/examples/shared/src/actions.ts:99](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-actor/examples/shared/src/actions.ts#L99) |
34
+ | `route()` | (`params?`) => `Promise`\<`void`\> | [packages/play-actor/examples/shared/src/actions.ts:55](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-actor/examples/shared/src/actions.ts#L55) |
35
+ | `submitForm()` | (`params?`) => `Promise`\<`void`\> | [packages/play-actor/examples/shared/src/actions.ts:92](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-actor/examples/shared/src/actions.ts#L92) |
@@ -0,0 +1,27 @@
1
+ [Examples](../../../README.md) / [@xmachines/play-dom-demo](../README.md) / createConfirmDialog
2
+
3
+ # Function: createConfirmDialog()
4
+
5
+ ```ts
6
+ function createConfirmDialog(confirm): Promise<boolean>;
7
+ ```
8
+
9
+ Defined in: [packages/play-dom/examples/demo/src/components/ConfirmDialog.ts:12](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-dom/examples/demo/src/components/ConfirmDialog.ts#L12)
10
+
11
+ ConfirmDialog — the DOM demo's onConfirm implementation.
12
+
13
+ The DOM package ships no dialog of its own (it only exposes `ctx.onConfirm`),
14
+ so the demo renders one. The buttons carry the spec's
15
+ `confirmLabel`/`cancelLabel` verbatim — the same text the framework
16
+ renderers' ConfirmDialogManager shows — so the shared browser suite drives
17
+ every demo's dialog by label text.
18
+
19
+ ## Parameters
20
+
21
+ | Parameter | Type |
22
+ | --------- | --------------- |
23
+ | `confirm` | `ActionConfirm` |
24
+
25
+ ## Returns
26
+
27
+ `Promise`\<`boolean`\>
@@ -6,10 +6,10 @@
6
6
  function createNavBar(actor, container): () => void;
7
7
  ```
8
8
 
9
- Defined in: [packages/play-dom/examples/demo/src/components/NavBar.ts:9](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.56/packages/play-dom/examples/demo/src/components/NavBar.ts#L9)
9
+ Defined in: [packages/play-dom/examples/demo/src/components/NavBar.ts:9](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-dom/examples/demo/src/components/NavBar.ts#L9)
10
10
 
11
11
  NavBar — App-shell navigation factory. Mounts a reactive nav into
12
- `container`, observes actor.state via watchSignal, and updates button
12
+ `container`, observes actor.state via watchAtom, and updates button
13
13
  visibility based on auth state. Returns a disconnect function.
14
14
 
15
15
  ## Parameters
@@ -3,10 +3,10 @@
3
3
  # Function: initShell()
4
4
 
5
5
  ```ts
6
- function initShell(actor, appElement): () => void;
6
+ function initShell(actor, appElement, inspector): () => void;
7
7
  ```
8
8
 
9
- Defined in: [packages/play-dom/examples/demo/src/components/Shell.ts:24](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.56/packages/play-dom/examples/demo/src/components/Shell.ts#L24)
9
+ Defined in: [packages/play-dom/examples/demo/src/components/Shell.ts:18](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-dom/examples/demo/src/components/Shell.ts#L18)
10
10
 
11
11
  Shell — DOM shell layout factory. Renders demo chrome (header + main +
12
12
  debug panel), mounts NavBar, connects DOM renderer, and wires DebugPanel.
@@ -14,10 +14,11 @@ Returns a disconnect function.
14
14
 
15
15
  ## Parameters
16
16
 
17
- | Parameter | Type |
18
- | ------------ | ------------- |
19
- | `actor` | `AuthActor` |
20
- | `appElement` | `HTMLElement` |
17
+ | Parameter | Type |
18
+ | ------------ | --------------- |
19
+ | `actor` | `AuthActor` |
20
+ | `appElement` | `HTMLElement` |
21
+ | `inspector` | `DemoInspector` |
21
22
 
22
23
  ## Returns
23
24
 
@@ -6,4 +6,4 @@
6
6
  type AuthCatalog = typeof authCatalog;
7
7
  ```
8
8
 
9
- Defined in: [packages/play-dom/examples/demo/src/catalog.ts:6](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.56/packages/play-dom/examples/demo/src/catalog.ts#L6)
9
+ Defined in: [packages/play-dom/examples/demo/src/catalog.ts:6](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-dom/examples/demo/src/catalog.ts#L6)
@@ -6,7 +6,7 @@
6
6
  const About: ComponentFn<AuthCatalog, "About">;
7
7
  ```
8
8
 
9
- Defined in: [packages/play-dom/examples/demo/src/components/About.ts:8](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v1.0.0-beta.56/packages/play-dom/examples/demo/src/components/About.ts#L8)
9
+ Defined in: [packages/play-dom/examples/demo/src/components/About.ts:8](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-dom/examples/demo/src/components/About.ts#L8)
10
10
 
11
11
  About — Public information page. Catalog-typed DOM component
12
12
  (ComponentFn<AuthCatalog, 'About'>). Renders static content from props.
@@ -0,0 +1,12 @@
1
+ [Examples](../../../README.md) / [@xmachines/play-dom-demo](../README.md) / Button
2
+
3
+ # Variable: Button
4
+
5
+ ```ts
6
+ const Button: ComponentFn<AuthCatalog, "Button">;
7
+ ```
8
+
9
+ Defined in: [packages/play-dom/examples/demo/src/components/Button.ts:8](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-dom/examples/demo/src/components/Button.ts#L8)
10
+
11
+ Button — emits `press`; the spec's `on.press` binding decides what happens
12
+ (a host action sending a machine event, or a built-in like setState).