@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.
- package/README.md +8 -6
- package/api/@xmachines/play/README.md +21 -21
- package/api/@xmachines/play/errors/classes/NonNullableError.md +4 -4
- package/api/@xmachines/play/errors/classes/PlayError.md +5 -4
- package/api/@xmachines/play/index/README.md +2 -2
- package/api/@xmachines/play/index/functions/asCleanup.md +4 -5
- package/api/@xmachines/play/index/functions/assertNonNullable.md +1 -1
- package/api/@xmachines/play/index/functions/shallowEqualExcept.md +1 -1
- package/api/@xmachines/play/index/type-aliases/Cleanup.md +3 -3
- package/api/@xmachines/play/index/type-aliases/DisposeKey.md +1 -1
- package/api/@xmachines/play/index/type-aliases/PlayEvent.md +2 -2
- package/api/@xmachines/play/index/variables/DISPOSE.md +1 -1
- package/api/@xmachines/play-actor/README.md +9 -9
- package/api/@xmachines/play-actor/interfaces/ActorEvent.md +2 -2
- package/api/@xmachines/play-actor/interfaces/PlayActor.md +6 -6
- package/api/@xmachines/play-atom/README.md +281 -0
- package/api/@xmachines/play-atom/functions/watchAtom.md +79 -0
- package/api/@xmachines/play-atom/interfaces/AsyncAtomOptions.md +16 -0
- package/api/@xmachines/play-atom/interfaces/Atom.md +149 -0
- package/api/@xmachines/play-atom/interfaces/AtomObserver.md +25 -0
- package/api/@xmachines/play-atom/interfaces/AtomOptions.md +33 -0
- package/api/@xmachines/play-atom/interfaces/AtomSubscription.md +23 -0
- package/api/@xmachines/play-atom/interfaces/BaseAtom.md +97 -0
- package/api/@xmachines/play-atom/interfaces/CreateAtom.md +91 -0
- package/api/@xmachines/play-atom/interfaces/Readable.md +93 -0
- package/api/@xmachines/play-atom/interfaces/ReadonlyAtom.md +108 -0
- package/api/@xmachines/play-atom/type-aliases/AnyAtom.md +13 -0
- package/api/@xmachines/play-atom/type-aliases/AsyncAtomState.md +32 -0
- package/api/@xmachines/{play-signals → play-atom}/type-aliases/Cleanup.md +4 -4
- package/api/@xmachines/play-atom/variables/createAsyncAtom.md +42 -0
- package/api/@xmachines/play-atom/variables/createAtom.md +18 -0
- package/api/@xmachines/play-atom/variables/createWritableAtom.md +70 -0
- package/api/@xmachines/play-dom/README.md +21 -17
- package/api/@xmachines/play-dom/classes/PlayRenderer.md +10 -10
- package/api/@xmachines/play-dom/functions/asCleanup.md +4 -5
- package/api/@xmachines/play-dom/functions/createPlayUI.md +1 -1
- package/api/@xmachines/play-dom/functions/createRenderer.md +1 -1
- package/api/@xmachines/play-dom/interfaces/CreatePlayUIOptions.md +3 -3
- package/api/@xmachines/play-dom/interfaces/MountOptions.md +3 -3
- package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +6 -6
- package/api/@xmachines/play-dom/type-aliases/Cleanup.md +3 -3
- package/api/@xmachines/play-dom/type-aliases/MountFn.md +1 -1
- package/api/@xmachines/play-dom-router/README.md +24 -24
- package/api/@xmachines/play-dom-router/classes/DomRouterBridge.md +15 -15
- package/api/@xmachines/play-dom-router/classes/RouteMap.md +11 -11
- package/api/@xmachines/play-dom-router/functions/asCleanup.md +4 -5
- package/api/@xmachines/play-dom-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-dom-router/functions/createBrowserHistory.md +1 -1
- package/api/@xmachines/play-dom-router/functions/createRouter.md +1 -1
- package/api/@xmachines/play-dom-router/interfaces/BasePathOptions.md +3 -7
- package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +15 -15
- package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +14 -14
- package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +11 -9
- package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-dom-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-dom-router/interfaces/RouteLookupContract.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-dom-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-dom-router/interfaces/RouterConnection.md +7 -7
- package/api/@xmachines/play-dom-router/interfaces/VanillaRouter.md +5 -5
- package/api/@xmachines/play-dom-router/type-aliases/Cleanup.md +3 -3
- package/api/@xmachines/play-dom-router/variables/DISPOSE.md +1 -1
- package/api/@xmachines/play-pattern/README.md +115 -0
- package/api/@xmachines/play-pattern/functions/buildPath.md +46 -0
- package/api/@xmachines/play-pattern/functions/createPatternCache.md +47 -0
- package/api/@xmachines/play-pattern/functions/getIndexKey.md +30 -0
- package/api/@xmachines/play-pattern/functions/isDotSegment.md +40 -0
- package/api/@xmachines/play-pattern/functions/parsePattern.md +28 -0
- package/api/@xmachines/play-pattern/interfaces/GroupPart.md +15 -0
- package/api/@xmachines/play-pattern/interfaces/LiteralPart.md +14 -0
- package/api/@xmachines/play-pattern/interfaces/ParamPart.md +21 -0
- package/api/@xmachines/play-pattern/interfaces/ParseOptions.md +19 -0
- package/api/@xmachines/play-pattern/interfaces/ParsedPattern.md +23 -0
- package/api/@xmachines/play-pattern/interfaces/PatternCache.md +65 -0
- package/api/@xmachines/play-pattern/interfaces/PatternParam.md +15 -0
- package/api/@xmachines/play-pattern/type-aliases/PathBuildResult.md +74 -0
- package/api/@xmachines/play-pattern/type-aliases/PathParams.md +15 -0
- package/api/@xmachines/play-pattern/type-aliases/PatternModifier.md +11 -0
- package/api/@xmachines/play-pattern/type-aliases/PatternPart.md +9 -0
- package/api/@xmachines/play-react/README.md +31 -21
- package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +6 -6
- package/api/@xmachines/play-react/functions/useActor.md +1 -1
- package/api/@xmachines/play-react/functions/useAtomEffect.md +103 -0
- package/api/@xmachines/play-react/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-react/interfaces/ActorProviderProps.md +8 -8
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +6 -6
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +4 -4
- package/api/@xmachines/play-react/interfaces/PlayUIProviderProps.md +8 -8
- package/api/@xmachines/play-react/interfaces/ViewContextValue.md +5 -5
- package/api/@xmachines/play-react/type-aliases/AnyPlayActor.md +1 -1
- package/api/@xmachines/play-react/variables/ActorProvider.md +2 -2
- package/api/@xmachines/play-react/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-react/variables/PlayUIProvider.md +1 -1
- package/api/@xmachines/play-react-router/README.md +3 -3
- package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +15 -15
- package/api/@xmachines/play-react-router/classes/RouteMap.md +11 -11
- package/api/@xmachines/play-react-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +5 -5
- package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +11 -9
- package/api/@xmachines/play-react-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-react-router/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-react-router/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-react-router/type-aliases/PlayRouterBridgeConstructor.md +14 -7
- package/api/@xmachines/play-react-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
- package/api/@xmachines/play-react-router/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-router/README.md +25 -14
- package/api/@xmachines/play-router/errors/classes/DuplicateBridgeError.md +4 -4
- package/api/@xmachines/play-router/errors/classes/DuplicateRoutePathError.md +5 -5
- package/api/@xmachines/play-router/errors/classes/EmptyRoutePathError.md +5 -5
- package/api/@xmachines/play-router/errors/classes/InvalidBasePathError.md +5 -5
- package/api/@xmachines/play-router/errors/classes/InvalidRoutePatternError.md +5 -5
- package/api/@xmachines/play-router/errors/classes/InvalidStateIdError.md +5 -5
- package/api/@xmachines/play-router/errors/classes/MissingBasePathParamError.md +6 -6
- package/api/@xmachines/play-router/errors/classes/RouterSyncError.md +4 -4
- package/api/@xmachines/play-router/errors/classes/UnknownStateTypeError.md +6 -6
- package/api/@xmachines/play-router/index/README.md +10 -2
- package/api/@xmachines/play-router/index/classes/RouteMap.md +11 -11
- package/api/@xmachines/play-router/index/classes/RouterBridgeBase.md +10 -10
- package/api/@xmachines/play-router/index/functions/buildPlayRouteEvent.md +1 -1
- package/api/@xmachines/play-router/index/functions/buildRouteTree.md +1 -1
- package/api/@xmachines/play-router/index/functions/cleanFrameworkParams.md +1 -1
- package/api/@xmachines/play-router/index/functions/createPatternCache.md +47 -0
- package/api/@xmachines/play-router/index/functions/createRouteMapFromTree.md +5 -5
- package/api/@xmachines/play-router/index/functions/createRouterConnection.md +1 -1
- package/api/@xmachines/play-router/index/functions/detectDuplicateRoutes.md +1 -1
- package/api/@xmachines/play-router/index/functions/extractQuery.md +1 -1
- package/api/@xmachines/play-router/index/functions/extractRouteParams.md +7 -6
- package/api/@xmachines/play-router/index/functions/findRouteById.md +1 -1
- package/api/@xmachines/play-router/index/functions/findRouteByPath.md +13 -6
- package/api/@xmachines/play-router/index/functions/isMountableBridge.md +1 -1
- package/api/@xmachines/play-router/index/functions/joinBasePath.md +2 -1
- package/api/@xmachines/play-router/index/functions/mountKey.md +1 -1
- package/api/@xmachines/play-router/index/functions/normalizeBasePath.md +1 -1
- package/api/@xmachines/play-router/index/functions/openProviderBridge.md +3 -3
- package/api/@xmachines/play-router/index/functions/parsePattern.md +28 -0
- package/api/@xmachines/play-router/index/functions/pickOwnParams.md +1 -1
- package/api/@xmachines/play-router/index/functions/repointProviderBridge.md +1 -1
- package/api/@xmachines/play-router/index/functions/resolveBasePath.md +1 -1
- package/api/@xmachines/play-router/index/functions/resolveFrameworkParams.md +5 -5
- package/api/@xmachines/play-router/index/functions/sanitizePathname.md +9 -24
- package/api/@xmachines/play-router/index/functions/splitLocation.md +37 -0
- package/api/@xmachines/play-router/index/functions/stripBasePath.md +1 -1
- package/api/@xmachines/play-router/index/functions/validateRouteFormat.md +1 -1
- package/api/@xmachines/play-router/index/functions/validateStateExists.md +1 -1
- package/api/@xmachines/play-router/index/interfaces/BasePathOptions.md +4 -4
- package/api/@xmachines/play-router/index/interfaces/BuildPlayRouteEventOptions.md +4 -4
- package/api/@xmachines/play-router/index/interfaces/CompileOptions.md +35 -0
- package/api/@xmachines/play-router/index/interfaces/FrameworkParamsSource.md +13 -8
- package/api/@xmachines/play-router/index/interfaces/LocationLike.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/MountableRouterBridge.md +9 -9
- package/api/@xmachines/play-router/index/interfaces/OpenProviderBridgeArgs.md +11 -9
- package/api/@xmachines/play-router/index/interfaces/ParseOptions.md +24 -0
- package/api/@xmachines/play-router/index/interfaces/ParsedPattern.md +23 -0
- package/api/@xmachines/play-router/index/interfaces/PatternCache.md +65 -0
- package/api/@xmachines/play-router/index/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-router/index/interfaces/PlayRouterProviderBaseProps.md +15 -9
- package/api/@xmachines/play-router/index/interfaces/ResolvedBasePath.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/ResolvedRoutePath.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/Routable.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/RouteInfo.md +8 -8
- package/api/@xmachines/play-router/index/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-router/index/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/RouteMatch.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/RouteNode.md +10 -10
- package/api/@xmachines/play-router/index/interfaces/RouteObject.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/RouteTree.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/RouteWatcherHandle.md +11 -11
- package/api/@xmachines/play-router/index/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-router/index/interfaces/RouterBridgeOptions.md +31 -0
- package/api/@xmachines/play-router/index/interfaces/RouterConnection.md +7 -7
- package/api/@xmachines/play-router/index/interfaces/SplitLocation.md +16 -0
- package/api/@xmachines/play-router/index/interfaces/WindowLike.md +3 -3
- package/api/@xmachines/play-router/index/type-aliases/PlayRouterBridgeConstructor.md +14 -7
- package/api/@xmachines/play-router/index/type-aliases/RouteData.md +1 -1
- package/api/@xmachines/play-router/index/type-aliases/RouteDataResolver.md +1 -1
- package/api/@xmachines/play-router/index/type-aliases/RouteMetadata.md +1 -1
- package/api/@xmachines/play-router/index/type-aliases/URLPatternLike.md +68 -0
- package/api/@xmachines/play-router/index/variables/DISPOSE.md +1 -1
- package/api/@xmachines/play-router/index/variables/NO_BASE_PATH.md +1 -1
- package/api/@xmachines/play-router/index/variables/ROOT_NODE_ID.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/createRouteMap.md +5 -5
- package/api/@xmachines/play-router/xstate/functions/extractMachineRoutes.md +6 -5
- package/api/@xmachines/play-router/xstate/functions/getNavigableRoutes.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/getRoutableRoutes.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/getRouteMappings.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/getTransitionReachableRoutes.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/isRouteReachable.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/machineToGraph.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/routeExists.md +1 -1
- package/api/@xmachines/play-router/xstate/interfaces/MachineEdgeData.md +3 -3
- package/api/@xmachines/play-router/xstate/interfaces/MachineNodeData.md +5 -5
- package/api/@xmachines/play-router/xstate/type-aliases/MachineGraph.md +1 -1
- package/api/@xmachines/play-solid/README.md +9 -5
- package/api/@xmachines/play-solid/functions/useActor.md +1 -1
- package/api/@xmachines/play-solid/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-solid/interfaces/ActorProviderProps.md +8 -8
- package/api/@xmachines/play-solid/interfaces/PlayUIProviderProps.md +8 -8
- package/api/@xmachines/play-solid/interfaces/ViewContextValue.md +5 -5
- package/api/@xmachines/play-solid/type-aliases/AnyPlayActor.md +1 -1
- package/api/@xmachines/play-solid/variables/ActorContext.md +1 -1
- package/api/@xmachines/play-solid/variables/ActorProvider.md +2 -2
- package/api/@xmachines/play-solid/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-solid/variables/PlayUIProvider.md +1 -1
- package/api/@xmachines/play-solid-router/README.md +14 -14
- package/api/@xmachines/play-solid-router/classes/RouteMap.md +11 -11
- package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +18 -18
- package/api/@xmachines/play-solid-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-solid-router/interfaces/PlayActor.md +6 -6
- package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +11 -9
- package/api/@xmachines/play-solid-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-solid-router/type-aliases/PlayRouterBridgeConstructor.md +14 -7
- package/api/@xmachines/play-solid-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
- package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +4 -4
- package/api/@xmachines/play-solid-router/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-svelte/README.md +11 -7
- package/api/@xmachines/play-svelte/functions/defineRegistry.md +1 -1
- package/api/@xmachines/play-svelte/functions/getActorContext.md +1 -1
- package/api/@xmachines/play-svelte/functions/getPlayViewContext.md +1 -1
- package/api/@xmachines/play-svelte/functions/setActorContext.md +1 -1
- package/api/@xmachines/play-svelte/interfaces/ActorProviderProps.md +8 -8
- package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +4 -4
- package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +11 -11
- package/api/@xmachines/play-svelte/interfaces/ViewContextValue.md +5 -5
- package/api/@xmachines/play-svelte/type-aliases/AnyPlayActor.md +1 -1
- package/api/@xmachines/play-svelte-spa-router/README.md +14 -14
- package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +11 -11
- package/api/@xmachines/play-svelte-spa-router/classes/SvelteSpaRouterBridge.md +15 -15
- package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-svelte-spa-router/interfaces/BasePathOptions.md +3 -7
- package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +11 -9
- package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-svelte-spa-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterConnection.md +7 -7
- package/api/@xmachines/play-svelte-spa-router/interfaces/WindowLike.md +3 -3
- package/api/@xmachines/play-sveltekit-router/README.md +17 -17
- package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +11 -11
- package/api/@xmachines/play-sveltekit-router/classes/SvelteKitRouterBridge.md +15 -15
- package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-sveltekit-router/interfaces/BasePathOptions.md +3 -7
- package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +15 -23
- package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-sveltekit-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterConnection.md +7 -7
- package/api/@xmachines/play-tanstack-react-router/README.md +7 -7
- package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +11 -11
- package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +11 -11
- package/api/@xmachines/play-tanstack-react-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +5 -5
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +11 -9
- package/api/@xmachines/play-tanstack-react-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterBridgeConstructor.md +14 -7
- package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterInstance.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterLike.md +5 -5
- package/api/@xmachines/play-tanstack-react-router/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-tanstack-router/README.md +1 -1
- package/api/@xmachines/play-tanstack-router/classes/TanStackRouterBridgeBase.md +16 -16
- package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouteMapLike.md +3 -3
- package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouterLike.md +5 -5
- package/api/@xmachines/play-tanstack-solid-router/README.md +7 -7
- package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +11 -11
- package/api/@xmachines/play-tanstack-solid-router/classes/TanStackSolidRouterBridge.md +11 -11
- package/api/@xmachines/play-tanstack-solid-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +11 -9
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterBridgeConstructor.md +14 -7
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterProviderBaseProps.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterInstance.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterLike.md +5 -5
- package/api/@xmachines/play-tanstack-solid-router/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-url/README.md +21 -15
- package/api/@xmachines/play-url/errors/classes/InvalidBasePathError.md +5 -5
- package/api/@xmachines/play-url/errors/classes/InvalidRoutePatternError.md +5 -5
- package/api/@xmachines/play-url/errors/classes/MissingBasePathParamError.md +6 -6
- package/api/@xmachines/play-url/index/README.md +15 -8
- package/api/@xmachines/play-url/index/functions/buildPath.md +46 -0
- package/api/@xmachines/play-url/index/functions/cleanFrameworkParams.md +1 -1
- package/api/@xmachines/play-url/index/functions/createPatternCache.md +47 -0
- package/api/@xmachines/play-url/index/functions/getCandidates.md +1 -1
- package/api/@xmachines/play-url/index/functions/getCompiledPattern.md +8 -7
- package/api/@xmachines/play-url/index/functions/getIndexKey.md +1 -1
- package/api/@xmachines/play-url/index/functions/holdsUnsubstitutedParam.md +2 -2
- package/api/@xmachines/play-url/index/functions/isDotSegment.md +40 -0
- package/api/@xmachines/play-url/index/functions/joinBasePath.md +2 -1
- package/api/@xmachines/play-url/index/functions/normalizeBasePath.md +1 -1
- package/api/@xmachines/play-url/index/functions/parsePattern.md +6 -5
- package/api/@xmachines/play-url/index/functions/pickOwnParams.md +1 -1
- package/api/@xmachines/play-url/index/functions/resolveBasePath.md +1 -1
- package/api/@xmachines/play-url/index/functions/resolveFrameworkParams.md +5 -5
- package/api/@xmachines/play-url/index/functions/sanitizePathname.md +27 -0
- package/api/@xmachines/play-url/index/functions/splitLocation.md +37 -0
- package/api/@xmachines/play-url/index/functions/stripBasePath.md +1 -1
- package/api/@xmachines/play-url/index/interfaces/BasePathOptions.md +3 -3
- package/api/@xmachines/play-url/index/interfaces/CompileOptions.md +21 -0
- package/api/@xmachines/play-url/index/interfaces/FrameworkParamsSource.md +13 -8
- package/api/@xmachines/play-url/index/interfaces/GroupPart.md +6 -6
- package/api/@xmachines/play-url/index/interfaces/LiteralPart.md +5 -5
- package/api/@xmachines/play-url/index/interfaces/ParamPart.md +9 -9
- package/api/@xmachines/play-url/index/interfaces/ParseOptions.md +24 -0
- package/api/@xmachines/play-url/index/interfaces/ParsedPattern.md +14 -14
- package/api/@xmachines/play-url/index/interfaces/PatternCache.md +65 -0
- package/api/@xmachines/play-url/index/interfaces/PatternParam.md +6 -6
- package/api/@xmachines/play-url/index/interfaces/ResolvedBasePath.md +3 -3
- package/api/@xmachines/play-url/index/interfaces/SplitLocation.md +16 -0
- package/api/@xmachines/play-url/index/type-aliases/PathBuildResult.md +74 -0
- package/api/@xmachines/play-url/index/type-aliases/PathParams.md +15 -0
- package/api/@xmachines/play-url/index/type-aliases/PatternModifier.md +1 -1
- package/api/@xmachines/play-url/index/type-aliases/PatternPart.md +1 -1
- package/api/@xmachines/play-url/index/type-aliases/URLPatternCtor.md +1 -1
- package/api/@xmachines/play-url/index/type-aliases/URLPatternLike.md +3 -3
- package/api/@xmachines/play-url/index/variables/NO_BASE_PATH.md +1 -1
- package/api/@xmachines/play-url/index/variables/URLPattern.md +1 -1
- package/api/@xmachines/play-view/README.md +19 -8
- package/api/@xmachines/play-view/errors/classes/ReadOnlyContextError.md +5 -5
- package/api/@xmachines/play-view/index/functions/attachRenderErrorHandler.md +1 -1
- package/api/@xmachines/play-view/index/functions/composePlayState.md +1 -1
- package/api/@xmachines/play-view/index/functions/createFailureLatch.md +1 -1
- package/api/@xmachines/play-view/index/functions/createReportGuard.md +1 -1
- package/api/@xmachines/play-view/index/functions/createViewStoreLifecycle.md +1 -1
- package/api/@xmachines/play-view/index/functions/guardContextWrites.md +4 -28
- package/api/@xmachines/play-view/index/functions/refreshContextSubtree.md +1 -1
- package/api/@xmachines/play-view/index/functions/reuseComposedState.md +1 -1
- package/api/@xmachines/play-view/index/functions/sameViewInputs.md +1 -1
- package/api/@xmachines/play-view/index/functions/toAtomState.md +1 -1
- package/api/@xmachines/play-view/index/functions/typedSpec.md +1 -1
- package/api/@xmachines/play-view/index/interfaces/BaseActorProviderProps.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/BaseViewContextValue.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/FailureLatch.md +3 -3
- package/api/@xmachines/play-view/index/interfaces/PlaySpec.md +2 -2
- package/api/@xmachines/play-view/index/interfaces/ReportGuard.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/ReportGuardMessages.md +3 -3
- package/api/@xmachines/play-view/index/interfaces/ResolveViewStoreOptions.md +2 -2
- package/api/@xmachines/play-view/index/interfaces/ViewInputs.md +4 -4
- package/api/@xmachines/play-view/index/interfaces/ViewStoreLifecycle.md +3 -3
- package/api/@xmachines/play-view/index/interfaces/ViewStoreResolution.md +4 -4
- package/api/@xmachines/play-view/index/interfaces/Viewable.md +5 -5
- package/api/@xmachines/play-view/index/type-aliases/ViewActor.md +1 -1
- package/api/@xmachines/play-view/index/variables/CONTEXT_STATE_KEY.md +1 -1
- package/api/@xmachines/play-vue/README.md +13 -9
- package/api/@xmachines/play-vue/functions/defineRegistry.md +1 -1
- package/api/@xmachines/play-vue/functions/useActor.md +1 -1
- package/api/@xmachines/play-vue/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-vue/interfaces/ActorProviderProps.md +6 -6
- package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +9 -9
- package/api/@xmachines/play-vue/interfaces/ViewContextValue.md +5 -5
- package/api/@xmachines/play-vue/type-aliases/AnyPlayActor.md +1 -1
- package/api/@xmachines/play-vue/type-aliases/ComponentEntry.md +1 -1
- package/api/@xmachines/play-vue/type-aliases/ComponentsMap.md +1 -1
- package/api/@xmachines/play-vue/type-aliases/DefineRegistryOptions.md +2 -2
- package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-vue-router/README.md +12 -11
- package/api/@xmachines/play-vue-router/errors/classes/VueRouterNavigationError.md +4 -4
- package/api/@xmachines/play-vue-router/errors/classes/VueRouterSendError.md +4 -4
- package/api/@xmachines/play-vue-router/index/classes/RouteMap.md +11 -11
- package/api/@xmachines/play-vue-router/index/classes/VueRouterBridge.md +15 -15
- package/api/@xmachines/play-vue-router/index/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-vue-router/index/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-vue-router/index/interfaces/RouteMapOptions.md +10 -4
- package/api/@xmachines/play-vue-router/index/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-vue-router/index/interfaces/RouterBridge.md +15 -17
- package/api/@xmachines/play-vue-router/index/variables/PlayRouterProvider.md +23 -1
- package/api/@xmachines/play-xstate/README.md +61 -30
- package/api/@xmachines/play-xstate/errors/README.md +1 -0
- package/api/@xmachines/play-xstate/errors/classes/ActorThrewNonErrorError.md +4 -4
- package/api/@xmachines/play-xstate/errors/classes/InvalidEventError.md +5 -5
- package/api/@xmachines/play-xstate/errors/classes/InvalidMachineError.md +4 -4
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteHandlerError.md +5 -5
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteMetadataError.md +5 -5
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteParamError.md +207 -0
- package/api/@xmachines/play-xstate/errors/classes/MissingRouteParamError.md +6 -6
- package/api/@xmachines/play-xstate/errors/classes/MissingStateIdError.md +6 -6
- package/api/@xmachines/play-xstate/index/README.md +2 -2
- package/api/@xmachines/play-xstate/index/classes/PlayerActor.md +41 -42
- package/api/@xmachines/play-xstate/index/functions/compose.md +4 -4
- package/api/@xmachines/play-xstate/index/functions/definePlayer.md +2 -2
- package/api/@xmachines/play-xstate/index/interfaces/PlayerConfig.md +4 -4
- package/api/@xmachines/play-xstate/index/interfaces/PlayerFactoryResumeOptions.md +2 -2
- package/api/@xmachines/play-xstate/index/interfaces/PlayerOptions.md +9 -9
- package/api/@xmachines/play-xstate/index/type-aliases/Capability.md +1 -1
- package/api/@xmachines/play-xstate/index/type-aliases/PlayerConstructor.md +1 -1
- package/api/@xmachines/play-xstate/index/type-aliases/PlayerFactory.md +1 -1
- package/api/@xmachines/play-xstate/index/variables/DISPOSE.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/functions/buildRouteUrl.md +13 -6
- package/api/@xmachines/play-xstate/with-routing/functions/deriveRoute.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/functions/formatPlayRouteTransitions.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/functions/isAbsoluteRoute.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/functions/withRouting.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/interfaces/RouteContext.md +5 -5
- package/api/@xmachines/play-xstate/with-routing/interfaces/RouteObject.md +5 -5
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteData.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteDataResolver.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMachineConfig.md +4 -4
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMetadata.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteStateNode.md +5 -5
- package/api/@xmachines/play-xstate/with-view/functions/withView.md +6 -5
- package/api/@xmachines/shared/vite-aliases/functions/xmAliases.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmCacheDir.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmOptimizeDeps.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmResolve.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmSvelteRunes.md +2 -2
- package/api/@xmachines/shared/vitest/functions/defineXmBrowserConfig.md +1 -1
- package/api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md +1 -1
- package/api/@xmachines/shared/vitest/interfaces/XmBrowserConfigOptions.md +4 -4
- package/api/README.md +2 -1
- package/api/llms.txt +4 -3
- package/contributing/architecture.md +105 -124
- package/contributing/configuration.md +15 -15
- package/contributing/deployment.md +82 -6
- package/contributing/development.md +58 -30
- package/contributing/migrating-to-play-atom.md +209 -0
- package/contributing/testing.md +61 -64
- package/examples/@xmachines/play-dom-demo/README.md +40 -63
- package/examples/@xmachines/play-dom-demo/functions/createAuthActionHandlers.md +35 -0
- package/examples/@xmachines/play-dom-demo/functions/createConfirmDialog.md +27 -0
- package/examples/@xmachines/play-dom-demo/functions/createNavBar.md +2 -2
- package/examples/@xmachines/play-dom-demo/functions/initShell.md +7 -6
- package/examples/@xmachines/play-dom-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/About.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Button.md +12 -0
- package/examples/@xmachines/play-dom-demo/variables/Contact.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Dashboard.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Field.md +19 -0
- package/examples/@xmachines/play-dom-demo/variables/Home.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Login.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/NavBarView.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Navigation.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Overview.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Panel.md +14 -0
- package/examples/@xmachines/play-dom-demo/variables/Profile.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Settings.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/Stats.md +1 -1
- package/examples/@xmachines/play-dom-demo/variables/authCatalog.md +190 -165
- package/examples/@xmachines/play-dom-demo/variables/demoComponents.md +30 -0
- package/examples/@xmachines/play-dom-router-demo/README.md +20 -27
- package/examples/@xmachines/play-react-demo/README.md +33 -57
- package/examples/@xmachines/play-react-demo/functions/createAuthActionHandlers.md +35 -0
- package/examples/@xmachines/play-react-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/About.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Button.md +12 -0
- package/examples/@xmachines/play-react-demo/variables/Contact.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Dashboard.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/DebugPanel.md +4 -3
- package/examples/@xmachines/play-react-demo/variables/Field.md +18 -0
- package/examples/@xmachines/play-react-demo/variables/Home.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Login.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/NavBar.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/NavBarView.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Navigation.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Overview.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Panel.md +15 -0
- package/examples/@xmachines/play-react-demo/variables/Profile.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Settings.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/Shell.md +2 -1
- package/examples/@xmachines/play-react-demo/variables/Stats.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/authCatalog.md +190 -165
- package/examples/@xmachines/play-react-demo/variables/demoComponents.md +30 -0
- package/examples/@xmachines/play-react-router-demo/README.md +32 -32
- package/examples/@xmachines/play-solid-demo/README.md +33 -57
- package/examples/@xmachines/play-solid-demo/functions/createAuthActionHandlers.md +35 -0
- package/examples/@xmachines/play-solid-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/About.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Button.md +11 -0
- package/examples/@xmachines/play-solid-demo/variables/Contact.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Dashboard.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/DebugPanel.md +5 -3
- package/examples/@xmachines/play-solid-demo/variables/Field.md +11 -0
- package/examples/@xmachines/play-solid-demo/variables/Home.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Login.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/NavBar.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/NavBarView.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Navigation.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Overview.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Panel.md +11 -0
- package/examples/@xmachines/play-solid-demo/variables/Profile.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Settings.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Shell.md +2 -1
- package/examples/@xmachines/play-solid-demo/variables/Stats.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/authCatalog.md +114 -2
- package/examples/@xmachines/play-solid-demo/variables/demoComponents.md +30 -0
- package/examples/@xmachines/play-solid-router-demo/README.md +20 -23
- package/examples/@xmachines/play-svelte-demo/README.md +38 -44
- package/examples/@xmachines/play-svelte-demo/functions/createAuthActionHandlers.md +35 -0
- package/examples/@xmachines/play-svelte-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-svelte-demo/variables/authCatalog.md +114 -2
- package/examples/@xmachines/play-svelte-demo/variables/demoComponents.md +30 -0
- package/examples/@xmachines/play-svelte-spa-router-demo/README.md +20 -26
- package/examples/@xmachines/play-sveltekit-router-demo/README.md +20 -26
- package/examples/@xmachines/play-tanstack-react-router-demo/README.md +29 -31
- package/examples/@xmachines/play-tanstack-solid-router-demo/README.md +25 -27
- package/examples/@xmachines/play-vue-demo/README.md +36 -60
- package/examples/@xmachines/play-vue-demo/functions/createAuthActionHandlers.md +35 -0
- package/examples/@xmachines/play-vue-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-vue-demo/variables/App.md +1 -1
- package/examples/@xmachines/play-vue-demo/variables/authCatalog.md +114 -2
- package/examples/@xmachines/play-vue-demo/variables/demoComponents.md +11 -0
- package/examples/@xmachines/play-vue-router-demo/README.md +12 -23
- package/examples/README.md +3 -3
- package/examples/basic-state-machine.md +4 -4
- package/examples/form-validation.md +1 -1
- package/examples/multi-router-integration.md +23 -23
- package/examples/routing-patterns.md +5 -5
- package/examples/traffic-light.md +6 -6
- package/guides/README.md +1 -1
- package/guides/actor-model.md +26 -17
- package/guides/atoms.md +264 -0
- package/guides/getting-started.md +52 -17
- package/guides/inspector.md +3 -3
- package/guides/routing.md +67 -47
- package/guides/state-machines.md +4 -4
- package/package.json +3 -3
- package/rfc/play.md +83 -52
- package/api/@xmachines/play-react/functions/useSignalEffect.md +0 -77
- package/api/@xmachines/play-router/index/functions/getPatternParamNames.md +0 -29
- package/api/@xmachines/play-router/index/functions/getRequiredPatternParamNames.md +0 -39
- package/api/@xmachines/play-signals/README.md +0 -209
- package/api/@xmachines/play-signals/functions/watchSignal.md +0 -65
- package/api/@xmachines/play-signals/interfaces/ComputedOptions.md +0 -36
- package/api/@xmachines/play-signals/interfaces/SignalComputed.md +0 -49
- package/api/@xmachines/play-signals/interfaces/SignalOptions.md +0 -37
- package/api/@xmachines/play-signals/interfaces/SignalState.md +0 -68
- package/api/@xmachines/play-signals/interfaces/SignalWatcher.md +0 -97
- package/api/@xmachines/play-signals/namespaces/Signal/README.md +0 -22
- package/api/@xmachines/play-signals/namespaces/Signal/classes/Computed.md +0 -52
- package/api/@xmachines/play-signals/namespaces/Signal/classes/State.md +0 -72
- package/api/@xmachines/play-signals/namespaces/Signal/interfaces/Options.md +0 -19
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/README.md +0 -21
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/classes/Watcher.md +0 -85
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/currentComputed.md +0 -13
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/hasSinks.md +0 -19
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/hasSources.md +0 -19
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/introspectSinks.md +0 -19
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/introspectSources.md +0 -19
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/untrack.md +0 -25
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/variables/unwatched.md +0 -9
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/variables/watched.md +0 -9
- package/api/@xmachines/play-signals/namespaces/Signal/variables/isComputed.md +0 -19
- package/api/@xmachines/play-signals/namespaces/Signal/variables/isState.md +0 -19
- package/api/@xmachines/play-signals/namespaces/Signal/variables/isWatcher.md +0 -19
- package/api/@xmachines/play-signals/type-aliases/WatcherNotify.md +0 -33
- package/api/@xmachines/play-url/index/functions/getNormalizedParamNameMap.md +0 -32
- package/api/@xmachines/play-url/index/functions/getPatternParamNames.md +0 -29
- package/api/@xmachines/play-url/index/functions/getRequiredPatternParamNames.md +0 -39
- package/api/@xmachines/play-url/index/functions/isParameterizedPattern.md +0 -36
- package/api/@xmachines/play-url/index/functions/normalizeParamNames.md +0 -36
- package/guides/signals.md +0 -209
|
@@ -36,8 +36,17 @@ const authCatalog: Catalog<
|
|
|
36
36
|
{
|
|
37
37
|
children: SchemaType<"array", SchemaType<"string", unknown>>;
|
|
38
38
|
props: SchemaType<"propsOf", string>;
|
|
39
|
+
repeat: {
|
|
40
|
+
inner?: unknown;
|
|
41
|
+
kind: "any";
|
|
42
|
+
optional: true;
|
|
43
|
+
};
|
|
39
44
|
type: SchemaType<"ref", string>;
|
|
40
|
-
visible:
|
|
45
|
+
visible: {
|
|
46
|
+
inner?: unknown;
|
|
47
|
+
kind: "any";
|
|
48
|
+
optional: true;
|
|
49
|
+
};
|
|
41
50
|
}
|
|
42
51
|
>
|
|
43
52
|
>;
|
|
@@ -47,6 +56,24 @@ const authCatalog: Catalog<
|
|
|
47
56
|
},
|
|
48
57
|
{
|
|
49
58
|
actions: {
|
|
59
|
+
addTask: {
|
|
60
|
+
description: "Add a task (sends task.add to the machine)";
|
|
61
|
+
params: ZodObject<
|
|
62
|
+
{
|
|
63
|
+
title: ZodString;
|
|
64
|
+
},
|
|
65
|
+
$strip
|
|
66
|
+
>;
|
|
67
|
+
};
|
|
68
|
+
completeTask: {
|
|
69
|
+
description: "Mark a task done (sends task.complete to the machine)";
|
|
70
|
+
params: ZodObject<
|
|
71
|
+
{
|
|
72
|
+
id: ZodString;
|
|
73
|
+
},
|
|
74
|
+
$strip
|
|
75
|
+
>;
|
|
76
|
+
};
|
|
50
77
|
login: {
|
|
51
78
|
description: "Login with username";
|
|
52
79
|
params: ZodObject<
|
|
@@ -59,6 +86,24 @@ const authCatalog: Catalog<
|
|
|
59
86
|
logout: {
|
|
60
87
|
description: "Logout and return to home";
|
|
61
88
|
};
|
|
89
|
+
removeTask: {
|
|
90
|
+
description: "Remove a task (sends task.remove to the machine)";
|
|
91
|
+
params: ZodObject<
|
|
92
|
+
{
|
|
93
|
+
id: ZodString;
|
|
94
|
+
},
|
|
95
|
+
$strip
|
|
96
|
+
>;
|
|
97
|
+
};
|
|
98
|
+
resetForm: {
|
|
99
|
+
description: "Reset a demo form to its defaults (confirm-gated in the spec)";
|
|
100
|
+
params: ZodObject<
|
|
101
|
+
{
|
|
102
|
+
form: ZodString;
|
|
103
|
+
},
|
|
104
|
+
$strip
|
|
105
|
+
>;
|
|
106
|
+
};
|
|
62
107
|
route: {
|
|
63
108
|
description: "Navigate to a route by path (e.g. '#home', '#login', '#dashboard')";
|
|
64
109
|
params: ZodObject<
|
|
@@ -69,6 +114,16 @@ const authCatalog: Catalog<
|
|
|
69
114
|
$strip
|
|
70
115
|
>;
|
|
71
116
|
};
|
|
117
|
+
submitForm: {
|
|
118
|
+
description: "Submit a demo form; rejects when the form did not pass validation";
|
|
119
|
+
params: ZodObject<
|
|
120
|
+
{
|
|
121
|
+
form: ZodString;
|
|
122
|
+
valid: ZodOptional<ZodNullable<ZodBoolean>>;
|
|
123
|
+
},
|
|
124
|
+
$strip
|
|
125
|
+
>;
|
|
126
|
+
};
|
|
72
127
|
};
|
|
73
128
|
components: {
|
|
74
129
|
About: {
|
|
@@ -79,6 +134,23 @@ const authCatalog: Catalog<
|
|
|
79
134
|
$strip
|
|
80
135
|
>;
|
|
81
136
|
};
|
|
137
|
+
Button: {
|
|
138
|
+
props: ZodObject<
|
|
139
|
+
{
|
|
140
|
+
disabled: ZodOptional<ZodBoolean>;
|
|
141
|
+
label: ZodString;
|
|
142
|
+
testId: ZodOptional<ZodString>;
|
|
143
|
+
variant: ZodOptional<
|
|
144
|
+
ZodEnum<{
|
|
145
|
+
danger: "danger";
|
|
146
|
+
primary: "primary";
|
|
147
|
+
secondary: "secondary";
|
|
148
|
+
}>
|
|
149
|
+
>;
|
|
150
|
+
},
|
|
151
|
+
$strip
|
|
152
|
+
>;
|
|
153
|
+
};
|
|
82
154
|
Contact: {
|
|
83
155
|
props: ZodObject<
|
|
84
156
|
{
|
|
@@ -96,6 +168,26 @@ const authCatalog: Catalog<
|
|
|
96
168
|
$strip
|
|
97
169
|
>;
|
|
98
170
|
};
|
|
171
|
+
Field: {
|
|
172
|
+
props: ZodObject<
|
|
173
|
+
{
|
|
174
|
+
checks: ZodOptional<ZodArray<ZodCustom<ValidationCheck, ValidationCheck>>>;
|
|
175
|
+
formErrors: ZodOptional<ZodRecord<ZodString, ZodArray<ZodString>>>;
|
|
176
|
+
inputType: ZodOptional<
|
|
177
|
+
ZodEnum<{
|
|
178
|
+
email: "email";
|
|
179
|
+
text: "text";
|
|
180
|
+
textarea: "textarea";
|
|
181
|
+
}>
|
|
182
|
+
>;
|
|
183
|
+
label: ZodString;
|
|
184
|
+
placeholder: ZodOptional<ZodString>;
|
|
185
|
+
testId: ZodOptional<ZodString>;
|
|
186
|
+
value: ZodOptional<ZodString>;
|
|
187
|
+
},
|
|
188
|
+
$strip
|
|
189
|
+
>;
|
|
190
|
+
};
|
|
99
191
|
Home: {
|
|
100
192
|
props: ZodObject<
|
|
101
193
|
{
|
|
@@ -139,6 +231,26 @@ const authCatalog: Catalog<
|
|
|
139
231
|
$strip
|
|
140
232
|
>;
|
|
141
233
|
};
|
|
234
|
+
Panel: {
|
|
235
|
+
props: ZodObject<
|
|
236
|
+
{
|
|
237
|
+
note: ZodOptional<
|
|
238
|
+
ZodUnion<readonly [ZodString, ZodNumber, ZodBoolean, ZodNull]>
|
|
239
|
+
>;
|
|
240
|
+
testId: ZodOptional<ZodString>;
|
|
241
|
+
title: ZodOptional<ZodUnion<readonly [ZodString, ZodNumber]>>;
|
|
242
|
+
tone: ZodOptional<
|
|
243
|
+
ZodEnum<{
|
|
244
|
+
danger: "danger";
|
|
245
|
+
default: "default";
|
|
246
|
+
muted: "muted";
|
|
247
|
+
success: "success";
|
|
248
|
+
}>
|
|
249
|
+
>;
|
|
250
|
+
},
|
|
251
|
+
$strip
|
|
252
|
+
>;
|
|
253
|
+
};
|
|
142
254
|
Profile: {
|
|
143
255
|
props: ZodObject<
|
|
144
256
|
{
|
|
@@ -169,4 +281,4 @@ const authCatalog: Catalog<
|
|
|
169
281
|
>;
|
|
170
282
|
```
|
|
171
283
|
|
|
172
|
-
Defined in: [packages/play-vue/examples/demo/src/catalog.ts:5](https://gitlab.com/xmachin-es/xmachines-js/-/blob/
|
|
284
|
+
Defined in: [packages/play-vue/examples/demo/src/catalog.ts:5](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-vue/examples/demo/src/catalog.ts#L5)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
[Examples](../../../README.md) / [@xmachines/play-vue-demo](../README.md) / demoComponents
|
|
2
|
+
|
|
3
|
+
# Variable: demoComponents
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
const demoComponents: ComponentsMap<typeof authCatalog>;
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Defined in: [packages/play-vue/examples/demo/src/components/demo-components.ts:22](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v5.0.1/packages/play-vue/examples/demo/src/components/demo-components.ts#L22)
|
|
10
|
+
|
|
11
|
+
demoComponents — the full catalog component map, shared with the router demos.
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
[Examples](../../README.md) / @xmachines/play-vue-router-demo
|
|
2
2
|
|
|
3
|
-
<!-- generated-by: gsd-doc-writer -->
|
|
4
|
-
|
|
5
3
|
# @xmachines/play-vue-router-demo
|
|
6
4
|
|
|
7
5
|
Vue Router integration demo for the XMachines Play architecture using Vue Composition API.
|
|
8
6
|
|
|
7
|
+
[](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
|
- `PlayRouterProvider` renderer-based integration with Vue Router
|
|
13
13
|
- Shell-driven rendering via `PlayRenderer` with actor-authoritative navigation
|
|
14
|
-
- Vue Composition API mapping to
|
|
14
|
+
- Vue Composition API mapping to atoms lifecycle
|
|
15
15
|
- Non-browser invariant tests plus browser E2E 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
|
|
16
17
|
|
|
17
18
|
## Running the Demo
|
|
18
19
|
|
|
@@ -33,7 +34,7 @@ Use this order to understand how the demo is wired:
|
|
|
33
34
|
2. `src/runtime.ts` creates the actor, starts it, builds the shared `registryResult`, and creates the `routeMap`.
|
|
34
35
|
3. `src/router.ts` installs a single catch-all route; `PlayRenderer` selects the actual view from actor state.
|
|
35
36
|
4. `src/App.vue` renders `<PlayRouterProvider>` with the shared actor, routeMap, router instance, and a `renderShell` renderer function.
|
|
36
|
-
5. The renderer function creates the shared `Shell` component with actor, router, and
|
|
37
|
+
5. The renderer function creates the shared `Shell` component with actor, router, registry, and inspector as props — the last of which drives the debug panel's **Show Inspector** button.
|
|
37
38
|
6. `PlayRouterProvider` waits for `router.isReady()` so direct URL loads are handled correctly.
|
|
38
39
|
7. Browser tests in `test/browser/` validate startup and auth route transitions.
|
|
39
40
|
|
|
@@ -55,7 +56,7 @@ export const routes = [{ path: "/:pathMatch(.*)*", name: "xmachines-play", compo
|
|
|
55
56
|
import { actor, routeMap, registryResult } from "./runtime.js";
|
|
56
57
|
|
|
57
58
|
const renderShell = (currentActor, currentRouter) =>
|
|
58
|
-
h(SharedShell, { actor: currentActor, router: currentRouter, registryResult });
|
|
59
|
+
h(SharedShell, { actor: currentActor, router: currentRouter, registryResult, inspector });
|
|
59
60
|
</script>
|
|
60
61
|
|
|
61
62
|
<template>
|
|
@@ -92,19 +93,17 @@ The demo utilizes XMachines architectural invariants:
|
|
|
92
93
|
|
|
93
94
|
1. **Actor Authority:** When a user navigates to a protected route via a link, Vue Router updates the location. The `PlayRouterProvider` intercepts this, translates it to a `play.route` event, and sends it to the actor. The actor evaluates guards (e.g. `isAuthenticated`) and transitions.
|
|
94
95
|
2. **Passive Infrastructure:** The router does not execute Vue route guards for business logic. The actor dictates whether navigation is permitted. The Vue application only renders the state.
|
|
95
|
-
3. **
|
|
96
|
+
3. **Atom-Only Reactivity:** The bridge leverages Vue's `watch` and `triggerRef` internally to react precisely when atoms update, without polluting the Vue component tree with reactive refs that hold business state.
|
|
96
97
|
|
|
97
98
|
## Watcher Lifecycle and Cleanup Contract
|
|
98
99
|
|
|
99
100
|
This demo follows the canonical watcher lifecycle:
|
|
100
101
|
|
|
101
|
-
1. `
|
|
102
|
-
2. `
|
|
103
|
-
3.
|
|
104
|
-
4. Read actor signals and sync Vue-local render state
|
|
105
|
-
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 syncs Vue-local render state
|
|
106
105
|
|
|
107
|
-
|
|
106
|
+
One subscription lives for the whole watch, and no caller arms a watcher again. Teardown is explicit: provider/bridge cleanup must flow through `disconnect` and watcher `unwatch`, not GC-only assumptions. The `PlayRouterProvider` wires this seamlessly into the component's `onUnmounted` hook.
|
|
108
107
|
|
|
109
108
|
## Adapter Boundaries
|
|
110
109
|
|
|
@@ -122,18 +121,8 @@ These commands are defined in `package.json`:
|
|
|
122
121
|
| `pnpm --filter @xmachines/play-vue-router-demo run test` | Run Vitest test suite |
|
|
123
122
|
| `pnpm --filter @xmachines/play-vue-router-demo run test:browser` | Run browser-focused Vitest suite |
|
|
124
123
|
|
|
125
|
-
## Verification
|
|
126
|
-
|
|
127
|
-
Use these checks to validate README claims against the current demo implementation:
|
|
128
|
-
|
|
129
|
-
```bash
|
|
130
|
-
pnpm --filter @xmachines/play-vue-router-demo run test
|
|
131
|
-
pnpm --filter @xmachines/play-vue-router-demo run test:browser
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
Expected result: reactivity integration tests and the browser shared-demo suite both pass, confirming login/logout transitions update both view and URL correctly.
|
|
135
|
-
|
|
136
124
|
## Learn More
|
|
137
125
|
|
|
138
126
|
- [Vue Router](../../../api/@xmachines/play-vue-router/README.md)
|
|
139
127
|
- [Vue](../../../api/@xmachines/play-vue/README.md)
|
|
128
|
+
- [Inspecting a Running Actor](../../../guides/inspector.md)
|
package/examples/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Practical code examples demonstrating current XMachines Play patterns and use ca
|
|
|
8
8
|
|
|
9
9
|
Start with the fundamental machine + actor pattern:
|
|
10
10
|
|
|
11
|
-
- **[Basic State Machine](basic-state-machine.md)** — `setup().createMachine()` + `definePlayer()` +
|
|
11
|
+
- **[Basic State Machine](basic-state-machine.md)** — `setup().createMachine()` + `definePlayer()` + atoms
|
|
12
12
|
- **[Traffic Light](traffic-light.md)** — Multi-state machine with `meta.route` and `formatPlayRouteTransitions`
|
|
13
13
|
- **[Form Validation](form-validation.md)** — Typed context mutations with `setup.assign`, guards, and `$bindState`
|
|
14
14
|
|
|
@@ -60,7 +60,7 @@ The conceptual examples in this directory are TypeScript snippets. To run them:
|
|
|
60
60
|
|
|
61
61
|
```bash
|
|
62
62
|
# Install dependencies (from the monorepo root)
|
|
63
|
-
pnpm add @xmachines/play-xstate @xmachines/play-actor @xmachines/play-
|
|
63
|
+
pnpm add @xmachines/play-xstate @xmachines/play-actor @xmachines/play-atom xstate
|
|
64
64
|
|
|
65
65
|
# Run with tsx
|
|
66
66
|
pnpm dlx tsx my-example.ts
|
|
@@ -81,7 +81,7 @@ pnpm --filter @xmachines/play-dom-router-demo run dev
|
|
|
81
81
|
| [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) | `definePlayer`, `formatPlayRouteTransitions`, `PlayerActor` |
|
|
82
82
|
| [`@xmachines/play-actor`](../api/@xmachines/play-actor/README.md) | `PlayActor` |
|
|
83
83
|
| [`@xmachines/play-view`](../api/@xmachines/play-view/README.md) | `Viewable`, `PlaySpec`, `typedSpec` |
|
|
84
|
-
| [`@xmachines/play-
|
|
84
|
+
| [`@xmachines/play-atom`](../api/@xmachines/play-atom/README.md) | The atom primitives, `watchAtom` |
|
|
85
85
|
| [`@xmachines/play-router`](../api/@xmachines/play-router/README.md) | `RouterBridgeBase`, `RouteMap`, `Routable` |
|
|
86
86
|
| [`@xmachines/play-router/xstate`](../api/@xmachines/play-router/README.md) | `extractMachineRoutes`, `getRoutableRoutes` |
|
|
87
87
|
|
|
@@ -63,7 +63,7 @@ actor.start();
|
|
|
63
63
|
console.log(actor.getSnapshot().value); // "off"
|
|
64
64
|
console.log(actor.getSnapshot().context.toggleCount); // 0
|
|
65
65
|
|
|
66
|
-
// 6. Read state
|
|
66
|
+
// 6. Read state from the atom
|
|
67
67
|
console.log(actor.state.get().value); // "off"
|
|
68
68
|
|
|
69
69
|
// 7. Send events
|
|
@@ -87,13 +87,13 @@ actor.stop();
|
|
|
87
87
|
|
|
88
88
|
3. **`toggleSetup.assign(...)`** — Assigns context mutations using the typed setup's `assign` helper. This provides full inference from the declared context type — no manual type assertions needed.
|
|
89
89
|
|
|
90
|
-
4. **`definePlayer({ machine })`** — Wraps the machine in a factory. Calling `createPlayer()` returns a `PlayerActor` — XMachines' actor type that extends XState's actor with
|
|
90
|
+
4. **`definePlayer({ machine })`** — Wraps the machine in a factory. Calling `createPlayer()` returns a `PlayerActor` — XMachines' actor type that extends XState's actor with atom reactivity and Play Architecture hooks.
|
|
91
91
|
|
|
92
92
|
5. **`actor.start()`** — Activates the machine. Always call `start()` before sending events.
|
|
93
93
|
|
|
94
94
|
6. **`actor.getSnapshot()`** — Returns the current XState snapshot synchronously. `.value` is the state name; `.context` is the typed context object.
|
|
95
95
|
|
|
96
|
-
7. **`actor.state.get()`** —
|
|
96
|
+
7. **`actor.state.get()`** — atom access to the current snapshot. Useful when wiring infrastructure that observes atoms (renderers, router bridges). Equivalent to `actor.getSnapshot()` for one-time reads.
|
|
97
97
|
|
|
98
98
|
8. **Event types use dot-separated lowercase** — `"toggle"` not `"TOGGLE"`. This matches the XMachines convention used throughout the codebase (e.g. `"auth.login"`, `"auth.logout"`, `"play.route"`).
|
|
99
99
|
|
|
@@ -101,7 +101,7 @@ actor.stop();
|
|
|
101
101
|
|
|
102
102
|
- **`setup({ types })`**: The XState v5 typed entry point. Declares context, event, and input shapes before machine creation.
|
|
103
103
|
- **`definePlayer({ machine })`**: Creates a factory function that returns `PlayerActor` instances.
|
|
104
|
-
- **`actor.state`**:
|
|
104
|
+
- **`actor.state`**: An `Atom<Snapshot>` — an atom-based reactive handle on the machine snapshot.
|
|
105
105
|
- **`actor.getSnapshot()`**: Synchronous snapshot access — use for one-time reads and TypeScript-typed context inspection.
|
|
106
106
|
- **Typed `assign`**: Always call `setup.assign(...)` (not the bare `assign` from xstate) for context mutations.
|
|
107
107
|
|
|
@@ -224,7 +224,7 @@ view: {
|
|
|
224
224
|
|
|
225
225
|
## Connecting the Renderer
|
|
226
226
|
|
|
227
|
-
The machine spec above defines view structure — but nothing renders until you wire a renderer. Use `createRenderer` from `@xmachines/play-dom
|
|
227
|
+
The machine spec above defines view structure — but nothing renders until you wire a renderer. Use `createRenderer` from [`@xmachines/play-dom`](../api/@xmachines/play-dom/README.md):
|
|
228
228
|
|
|
229
229
|
```typescript
|
|
230
230
|
import { createRenderer, schema } from "@xmachines/play-dom";
|
|
@@ -416,8 +416,8 @@ const disconnect = connectRouter({
|
|
|
416
416
|
```
|
|
417
417
|
|
|
418
418
|
The Svelte adapters take the same two prefix options. They need no `router`:
|
|
419
|
-
`@xmachines/play-svelte-spa-router` reads an optional `window`, and
|
|
420
|
-
`@xmachines/play-sveltekit-router` reads an optional `location`.
|
|
419
|
+
[`@xmachines/play-svelte-spa-router`](../api/@xmachines/play-svelte-spa-router/README.md) reads an optional `window`, and
|
|
420
|
+
[`@xmachines/play-sveltekit-router`](../api/@xmachines/play-sveltekit-router/README.md) reads an optional `location`.
|
|
421
421
|
|
|
422
422
|
### What the Prefix Changes
|
|
423
423
|
|
|
@@ -480,7 +480,7 @@ getRouteMappings(tree, { basePath: "/:machineId/play" });
|
|
|
480
480
|
// [{ stateId: "home", path: "/:machineId/play" }, ...]
|
|
481
481
|
```
|
|
482
482
|
|
|
483
|
-
> **Param note.** Under a mount, `@xmachines/play-vue-router` and `@xmachines/play-solid-router` resolve each param from the stripped path with `URLPattern`, and not from the pre-parsed params of their framework: under a prefix the framework matched a route of the **host**, so those params describe the route of the machine never — and a collision of names carries the value of the host. With no prefix, both keep the parse of their framework whenever it reports at least one
|
|
483
|
+
> **Param note.** Under a mount, [`@xmachines/play-vue-router`](../api/@xmachines/play-vue-router/README.md) and [`@xmachines/play-solid-router`](../api/@xmachines/play-solid-router/README.md) resolve each param from the stripped path with `URLPattern`, and not from the pre-parsed params of their framework: under a prefix the framework matched a route of the **host**, so those params describe the route of the machine never — and a collision of names carries the value of the host. With no prefix, both keep the parse of their framework whenever it reports at least one
|
|
484
484
|
> param the pattern declares, and every required one. A pattern whose params are ALL
|
|
485
485
|
> optional and a framework that reports none — `/settings/:section?` under a catch-all of
|
|
486
486
|
> the host — is settled by the PATH: `/settings` is the bare form of that pattern, so
|
|
@@ -489,7 +489,7 @@ getRouteMappings(tree, { basePath: "/:machineId/play" });
|
|
|
489
489
|
> extraction reads that value.
|
|
490
490
|
>
|
|
491
491
|
> These branches decide the CALLS of a navigation, and never the availability of the API.
|
|
492
|
-
> `@xmachines/play-router` carries `urlpattern-polyfill` as an ordinary dependency and it
|
|
492
|
+
> [`@xmachines/play-router`](../api/@xmachines/play-router/README.md) carries `urlpattern-polyfill` as an ordinary dependency and it
|
|
493
493
|
> uses the native `URLPattern` when the runtime has one, so you install no polyfill and
|
|
494
494
|
> you load none. A BAD pattern is a question of the route map: `RouteMap` compiles each
|
|
495
495
|
> parameterized route in its constructor and throws an `InvalidRoutePatternError` there.
|
|
@@ -497,28 +497,28 @@ getRouteMappings(tree, { basePath: "/:machineId/play" });
|
|
|
497
497
|
|
|
498
498
|
## Adapter Summary
|
|
499
499
|
|
|
500
|
-
| Package
|
|
501
|
-
|
|
|
502
|
-
| `@xmachines/play-dom-router`
|
|
503
|
-
| `@xmachines/play-react-router`
|
|
504
|
-
| `@xmachines/play-tanstack-react-router` | TanStack React Router | Provider | `PlayRouterProvider`, `createRouteMapFromTree` |
|
|
505
|
-
| `@xmachines/play-solid-router`
|
|
506
|
-
| `@xmachines/play-tanstack-solid-router` | TanStack Solid Router | Provider | `PlayRouterProvider`, `createRouteMap` |
|
|
507
|
-
| `@xmachines/play-vue-router`
|
|
508
|
-
| `@xmachines/play-sveltekit-router`
|
|
509
|
-
| `@xmachines/play-svelte-spa-router`
|
|
500
|
+
| Package | Framework | Pattern | Key Import |
|
|
501
|
+
| ------------------------------------------------------------------------------------------------- | --------------------- | --------------- | ------------------------------------------------------------------------- |
|
|
502
|
+
| [`@xmachines/play-dom-router`](../api/@xmachines/play-dom-router/README.md) | Vanilla DOM | `connectRouter` | `connectRouter`, `createRouteMap`, `createBrowserHistory`, `createRouter` |
|
|
503
|
+
| [`@xmachines/play-react-router`](../api/@xmachines/play-react-router/README.md) | React Router 7/8 | Provider | `PlayRouterProvider`, `createRouteMapFromTree` |
|
|
504
|
+
| [`@xmachines/play-tanstack-react-router`](../api/@xmachines/play-tanstack-react-router/README.md) | TanStack React Router | Provider | `PlayRouterProvider`, `createRouteMapFromTree` |
|
|
505
|
+
| [`@xmachines/play-solid-router`](../api/@xmachines/play-solid-router/README.md) | SolidJS Router | Provider | `PlayRouterProvider`, `createRouteMap` |
|
|
506
|
+
| [`@xmachines/play-tanstack-solid-router`](../api/@xmachines/play-tanstack-solid-router/README.md) | TanStack Solid Router | Provider | `PlayRouterProvider`, `createRouteMap` |
|
|
507
|
+
| [`@xmachines/play-vue-router`](../api/@xmachines/play-vue-router/README.md) | Vue Router | Provider | `PlayRouterProvider`, `createRouteMap` |
|
|
508
|
+
| [`@xmachines/play-sveltekit-router`](../api/@xmachines/play-sveltekit-router/README.md) | SvelteKit | `connectRouter` | `connectRouter`, `createRouteMap` |
|
|
509
|
+
| [`@xmachines/play-svelte-spa-router`](../api/@xmachines/play-svelte-spa-router/README.md) | Svelte SPA Router | `connectRouter` | `connectRouter`, `createRouteMap` |
|
|
510
510
|
|
|
511
511
|
## Renderer Packages
|
|
512
512
|
|
|
513
513
|
Each framework also has a companion renderer package for the view layer:
|
|
514
514
|
|
|
515
|
-
| Package
|
|
516
|
-
|
|
|
517
|
-
| `@xmachines/play-dom`
|
|
518
|
-
| `@xmachines/play-react`
|
|
519
|
-
| `@xmachines/play-solid`
|
|
520
|
-
| `@xmachines/play-vue`
|
|
521
|
-
| `@xmachines/play-svelte` | Svelte 5 | `PlayRenderer`, `defineRegistry` |
|
|
515
|
+
| Package | Framework | Key API |
|
|
516
|
+
| ------------------------------------------------------------------- | ----------- | -------------------------------------------------- |
|
|
517
|
+
| [`@xmachines/play-dom`](../api/@xmachines/play-dom/README.md) | Vanilla DOM | `createPlayUI`, `createRenderer`, `defineRegistry` |
|
|
518
|
+
| [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | React | `PlayRenderer`, `defineRegistry` |
|
|
519
|
+
| [`@xmachines/play-solid`](../api/@xmachines/play-solid/README.md) | SolidJS | `PlayRenderer`, `defineRegistry` |
|
|
520
|
+
| [`@xmachines/play-vue`](../api/@xmachines/play-vue/README.md) | Vue 3 | `PlayRenderer`, `defineRegistry` |
|
|
521
|
+
| [`@xmachines/play-svelte`](../api/@xmachines/play-svelte/README.md) | Svelte 5 | `PlayRenderer`, `defineRegistry` |
|
|
522
522
|
|
|
523
523
|
## Architectural Invariants
|
|
524
524
|
|
|
@@ -526,9 +526,9 @@ All adapters preserve the 5 architectural invariants:
|
|
|
526
526
|
|
|
527
527
|
1. **Actor Authority (INV-01):** Machine guards validate all navigation
|
|
528
528
|
2. **Strict Separation (INV-02):** Business logic (machine) has zero framework imports
|
|
529
|
-
3. **
|
|
529
|
+
3. **Atom-Only Reactivity (INV-03):** atoms work identically in all adapters
|
|
530
530
|
4. **Passive Infrastructure (INV-04):** Router observes actor, never decides
|
|
531
|
-
5. **
|
|
531
|
+
5. **State-Driven Reset (INV-05):** Browser back/forward sends `play.route` events to actor
|
|
532
532
|
|
|
533
533
|
## Next Steps
|
|
534
534
|
|
|
@@ -6,7 +6,7 @@ How the `authMachine` uses `meta.route`, `play.route` events, `formatPlayRouteTr
|
|
|
6
6
|
|
|
7
7
|
XMachines inverts the usual routing model. The **actor** owns navigation — its guards decide which states are valid. The **router** is passive infrastructure that observes `actor.currentRoute` and keeps the browser URL in sync. This is **Actor Authority (INV-01)**.
|
|
8
8
|
|
|
9
|
-
Every routing interaction starts with a `play.route` event sent to the actor. If the machine's guards allow the transition, the state changes and `actor.currentRoute` updates. The router bridge sees the new
|
|
9
|
+
Every routing interaction starts with a `play.route` event sent to the actor. If the machine's guards allow the transition, the state changes and `actor.currentRoute` updates. The router bridge sees the new atom value and pushes a history entry. The URL never changes unless the actor approves.
|
|
10
10
|
|
|
11
11
|
## Key Concepts
|
|
12
12
|
|
|
@@ -240,7 +240,7 @@ actor.stop();
|
|
|
240
240
|
|
|
241
241
|
## Vanilla Router Setup
|
|
242
242
|
|
|
243
|
-
To sync the browser URL with `actor.currentRoute`, use `@xmachines/play-dom-router
|
|
243
|
+
To sync the browser URL with `actor.currentRoute`, use [`@xmachines/play-dom-router`](../api/@xmachines/play-dom-router/README.md):
|
|
244
244
|
|
|
245
245
|
```typescript
|
|
246
246
|
import { createBrowserHistory, createRouter, connectRouter } from "@xmachines/play-dom-router";
|
|
@@ -252,7 +252,7 @@ const history = createBrowserHistory({ window });
|
|
|
252
252
|
const router = createRouter({ routeTree: authMachine, history });
|
|
253
253
|
|
|
254
254
|
// connectRouter handles all bidirectional sync:
|
|
255
|
-
// - actor.currentRoute
|
|
255
|
+
// - actor.currentRoute atom → browser URL (history.push)
|
|
256
256
|
// - browser URL changes → play.route event sent to actor
|
|
257
257
|
const disconnect = connectRouter({ actor, router, routeMap });
|
|
258
258
|
|
|
@@ -265,7 +265,7 @@ window.addEventListener("beforeunload", () => {
|
|
|
265
265
|
|
|
266
266
|
## React Router Setup
|
|
267
267
|
|
|
268
|
-
For React, use `@xmachines/play-react-router` or `@xmachines/play-tanstack-react-router
|
|
268
|
+
For React, use [`@xmachines/play-react-router`](../api/@xmachines/play-react-router/README.md) or [`@xmachines/play-tanstack-react-router`](../api/@xmachines/play-tanstack-react-router/README.md):
|
|
269
269
|
|
|
270
270
|
```tsx
|
|
271
271
|
import { PlayRouterProvider, createRouteMapFromTree } from "@xmachines/play-tanstack-react-router";
|
|
@@ -285,7 +285,7 @@ function App() {
|
|
|
285
285
|
| ----------------------------------- | ---------------------------------------------------------------------------------------------- |
|
|
286
286
|
| **Actor Authority (INV-01)** | Guards on the machine validate every navigation. The router cannot change state directly. |
|
|
287
287
|
| **Passive Infrastructure (INV-04)** | The router observes `actor.currentRoute` — it never decides where to go. |
|
|
288
|
-
| **State-Driven Reset (INV-
|
|
288
|
+
| **State-Driven Reset (INV-05)** | Browser back/forward sends `play.route` events to the actor. History is driven by actor state. |
|
|
289
289
|
| **Strict Separation (INV-02)** | The machine has zero framework imports. Guards, actions, and context are pure TypeScript. |
|
|
290
290
|
|
|
291
291
|
## Next Steps
|
|
@@ -81,7 +81,7 @@ const createPlayer = definePlayer({
|
|
|
81
81
|
const actor = createPlayer();
|
|
82
82
|
actor.start();
|
|
83
83
|
|
|
84
|
-
// 5. Read current route
|
|
84
|
+
// 5. Read current route from the atom
|
|
85
85
|
console.log(actor.currentRoute.get()); // "/red"
|
|
86
86
|
|
|
87
87
|
// 6. Advance with domain events
|
|
@@ -123,14 +123,14 @@ on: {
|
|
|
123
123
|
- The machine's context must include `params` and `query` fields (both `Record<string, string>`), because `formatPlayRouteTransitions` assigns them on every `play.route` transition.
|
|
124
124
|
- `reenter` comes from the object form of `meta.route`, and the default is `false`. Declare `meta: { route: { path: "/red", reenter: true } }` for a state that must re-enter its own domain.
|
|
125
125
|
|
|
126
|
-
## `actor.currentRoute`
|
|
126
|
+
## The `actor.currentRoute` atom
|
|
127
127
|
|
|
128
|
-
`actor.currentRoute` is a `
|
|
128
|
+
`actor.currentRoute` is a `ReadonlyAtom<string | null>` derived from the active state's `meta.route` template and `context.params`. A route atom lets a router bridge observe URL changes reactively without polling.
|
|
129
129
|
|
|
130
130
|
```typescript
|
|
131
|
-
import {
|
|
131
|
+
import { watchAtom } from "@xmachines/play-atom";
|
|
132
132
|
|
|
133
|
-
const unwatch =
|
|
133
|
+
const unwatch = watchAtom(actor.currentRoute, () => {
|
|
134
134
|
console.log("URL changed to:", actor.currentRoute.get());
|
|
135
135
|
});
|
|
136
136
|
|
|
@@ -142,7 +142,7 @@ unwatch();
|
|
|
142
142
|
|
|
143
143
|
- **`meta.route`**: Marks a state as routable. The value is a URL template (e.g. `"/profile/:username"`).
|
|
144
144
|
- **`formatPlayRouteTransitions`**: Utility that auto-generates `play.route` handlers from `id` + `meta.route` pairs. Wrap your machine config before passing to `createMachine`.
|
|
145
|
-
- **`actor.currentRoute`**:
|
|
145
|
+
- **`actor.currentRoute`**: a computed atom containing the resolved URL for the active state.
|
|
146
146
|
- **`play.route` events**: Navigation events with a `to: "#stateId"` target. Use `to: "#red"` (state ID), not `to: "/red"` (URL path).
|
|
147
147
|
|
|
148
148
|
## Next Steps
|
package/guides/README.md
CHANGED
|
@@ -13,7 +13,7 @@ Background reading that explains the _why_ behind XMachines design decisions.
|
|
|
13
13
|
- **[Understanding State Machines](state-machines.md)** — What finite state machines are, how `meta.route` and `meta.view` extend them, and why they replace boolean flags and component-level routing logic
|
|
14
14
|
- **[Understanding the Actor Model](actor-model.md)** — The actor/infrastructure split, why the machine has zero framework imports, and how the reset invariant works
|
|
15
15
|
- **[Understanding Routing](routing.md)** — The URLPattern grammar that a `meta.route` path declares, the prefix rule that decides every optional route, and the three invariants that every router adapter follows
|
|
16
|
-
- **[Understanding
|
|
16
|
+
- **[Understanding Atoms](atoms.md)** — The atom primitives (`createAtom`, `createWritableAtom`, `watchAtom`), why XMachines uses them instead of observables, and the architectural invariants they enforce
|
|
17
17
|
|
|
18
18
|
## Tooling
|
|
19
19
|
|
package/guides/actor-model.md
CHANGED
|
@@ -14,12 +14,12 @@ Every XMachines application has exactly two roles:
|
|
|
14
14
|
|
|
15
15
|
**Infrastructure** — the runtime environment. It reflects actor state into the world and forwards world events to the actor. It has no opinion on whether a transition is valid.
|
|
16
16
|
|
|
17
|
-
The boundary between them is enforced by the
|
|
17
|
+
The boundary between them is enforced by the atom protocol: the actor exposes `Atom` and `ReadonlyAtom` properties; infrastructure observes them. The actor never calls into infrastructure; infrastructure never mutates actor state directly.
|
|
18
18
|
|
|
19
19
|
```
|
|
20
20
|
Actor (business logic)
|
|
21
21
|
│
|
|
22
|
-
│ emits
|
|
22
|
+
│ emits atoms: state, and currentRoute / currentView from its capabilities
|
|
23
23
|
▼
|
|
24
24
|
Infrastructure (runtime adapters)
|
|
25
25
|
├── Router Bridge — reflects currentRoute into the URL bar
|
|
@@ -35,13 +35,22 @@ Infrastructure → actor: only via actor.send({ type: "..." })
|
|
|
35
35
|
|
|
36
36
|
An actor in XMachines is a [`PlayerActor`](../api/@xmachines/play-xstate/index/classes/PlayerActor.md) — a concrete class that extends XState's `Actor` class via [`PlayActor`](../api/@xmachines/play-actor/interfaces/PlayActor.md). It implements three reactive properties:
|
|
37
37
|
|
|
38
|
-
| Property | Type
|
|
39
|
-
| -------------------- |
|
|
40
|
-
| `actor.state` | `
|
|
41
|
-
| `actor.currentRoute` | `
|
|
42
|
-
| `actor.currentView` | `
|
|
38
|
+
| Property | Type | What it is |
|
|
39
|
+
| -------------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
40
|
+
| `actor.state` | `Atom<Snapshot>` | The ONE atom the actor writes. Updated on every XState transition, with the full machine snapshot. |
|
|
41
|
+
| `actor.currentRoute` | `ReadonlyAtom<string \| null>` | DERIVED from `state`, through the active state node's `meta.route`. Needs the routing capability. |
|
|
42
|
+
| `actor.currentView` | `ReadonlyAtom<PlaySpec \| null>` | DERIVED from `state`. Holds the [`PlaySpec`](../api/@xmachines/play-view/index/interfaces/PlaySpec.md) that drives renderers. Needs the view capability. |
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
Infrastructure reads all three and writes none of them.
|
|
45
|
+
|
|
46
|
+
**One write for each transition, and two derivations from it.** `state` receives the new
|
|
47
|
+
snapshot, and the engine then evaluates `currentRoute` and `currentView` from it in one
|
|
48
|
+
propagation. An observer that reads two of these atoms therefore never sees the new state
|
|
49
|
+
beside an old derivation, and the composition order of the capabilities decides nothing.
|
|
50
|
+
|
|
51
|
+
A derivation that fails reports through the `onError` option of the actor and keeps its
|
|
52
|
+
last good value. It throws never, because it runs inside the write and a throw would break
|
|
53
|
+
the transition for every other observer. See [Understanding Atoms](atoms.md).
|
|
45
54
|
|
|
46
55
|
The actor also owns:
|
|
47
56
|
|
|
@@ -58,7 +67,7 @@ Infrastructure owns everything that touches the environment:
|
|
|
58
67
|
- **Pushing URLs**: reading `actor.currentRoute` and calling `history.pushState()` or a router's navigation API.
|
|
59
68
|
- **Forwarding navigation events**: listening to `popstate`, `routeChange`, or equivalent, then calling `actor.send({ type: "play.route", to: path })`.
|
|
60
69
|
- **Rendering**: reading `actor.currentView` and projecting the spec through framework components.
|
|
61
|
-
- **Lifecycle**: connecting on mount, disconnecting on unmount, explicitly cleaning up
|
|
70
|
+
- **Lifecycle**: connecting on mount, disconnecting on unmount, explicitly cleaning up atom subscriptions.
|
|
62
71
|
|
|
63
72
|
Infrastructure does **not**:
|
|
64
73
|
|
|
@@ -77,7 +86,7 @@ If a user navigates directly to `/admin` in the browser but the actor's guards r
|
|
|
77
86
|
1. Receives `{ type: "play.route", to: "/admin" }` from the router bridge.
|
|
78
87
|
2. Evaluates its guards. The guard fails.
|
|
79
88
|
3. Does not transition. It remains in its current state (e.g., `/login`).
|
|
80
|
-
4. `actor.currentRoute` still
|
|
89
|
+
4. `actor.currentRoute` still holds `"/login"`.
|
|
81
90
|
5. The router bridge, watching `currentRoute`, calls its `navigateRouter("/login")` method.
|
|
82
91
|
6. The URL bar resets to `/login`.
|
|
83
92
|
|
|
@@ -97,7 +106,7 @@ An adapter extends the actor class of its own engine. [`PlayerActor`](../api/@xm
|
|
|
97
106
|
- XState DevTools attach to actors normally
|
|
98
107
|
- The full XState ecosystem (testing utilities, visualization) is compatible
|
|
99
108
|
|
|
100
|
-
[`PlayActor`](../api/@xmachines/play-actor/interfaces/PlayActor.md) asks for two members: a reactive `state` property of type `
|
|
109
|
+
[`PlayActor`](../api/@xmachines/play-actor/interfaces/PlayActor.md) asks for two members: a reactive `state` property of type `Atom<TSnapshot>`, and a typed `send`. `state` is the single point where the pull-based snapshot API of an engine is bridged to the push-based atom system.
|
|
101
110
|
|
|
102
111
|
The two optional capability interfaces — [`Routable`](../api/@xmachines/play-router/index/interfaces/Routable.md) and [`Viewable`](../api/@xmachines/play-view/index/interfaces/Viewable.md) — are deliberately separate:
|
|
103
112
|
|
|
@@ -109,7 +118,7 @@ An actor implements only the capabilities it actually uses:
|
|
|
109
118
|
```typescript
|
|
110
119
|
// Minimal actor: the contract alone, which is reactive state and send
|
|
111
120
|
class MinimalActor implements PlayActor<SomeSnapshot, SomeEvent> {
|
|
112
|
-
readonly state =
|
|
121
|
+
readonly state = createAtom<SomeSnapshot>(initial);
|
|
113
122
|
send(event: SomeEvent): void {
|
|
114
123
|
/* dispatch */
|
|
115
124
|
}
|
|
@@ -121,9 +130,9 @@ class PlayerActor
|
|
|
121
130
|
extends Actor<SomeMachine>
|
|
122
131
|
implements PlayActor<SomeSnapshot, SomeEvent>, Routable, Viewable
|
|
123
132
|
{
|
|
124
|
-
readonly state =
|
|
125
|
-
readonly currentRoute =
|
|
126
|
-
readonly currentView =
|
|
133
|
+
readonly state = createAtom(this.getSnapshot());
|
|
134
|
+
readonly currentRoute = createAtom(() => deriveRoute(this.state.get()));
|
|
135
|
+
readonly currentView = createAtom((): PlaySpec | null => deriveView(this.state.get()));
|
|
127
136
|
}
|
|
128
137
|
```
|
|
129
138
|
|
|
@@ -161,7 +170,7 @@ const actor = createPlayer(undefined, { snapshot }); // restored from snapshot
|
|
|
161
170
|
|
|
162
171
|
The machine definition — the `setup().createMachine(...)` call — is pure TypeScript with zero runtime dependencies on browsers, routers, or UI frameworks. This is not a convention; it is enforced by the dependency graph.
|
|
163
172
|
|
|
164
|
-
[`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) depends on `xstate` and [`@xmachines/play-
|
|
173
|
+
[`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) depends on `xstate` and [`@xmachines/play-atom`](../api/@xmachines/play-atom/README.md). It does not depend on React, Vue, any router library, or any browser API. Your machine file inherits those same boundaries.
|
|
165
174
|
|
|
166
175
|
This has concrete practical benefits:
|
|
167
176
|
|
|
@@ -181,7 +190,7 @@ The Play RFC captures the actor/infrastructure split in a single statement:
|
|
|
181
190
|
|
|
182
191
|
## See also
|
|
183
192
|
|
|
184
|
-
- [Understanding
|
|
193
|
+
- [Understanding Atoms](atoms.md) — how the actor communicates with infrastructure
|
|
185
194
|
- [Understanding State Machines](state-machines.md) — how the machine definition drives actor behavior
|
|
186
195
|
- [Getting Started](getting-started.md) — hands-on walkthrough creating and starting an actor
|
|
187
196
|
- [@xmachines/play-actor](../api/@xmachines/play-actor/README.md) — API reference for [`PlayActor`](../api/@xmachines/play-actor/interfaces/PlayActor.md)
|