@xmachines/docs 6.1.0 → 8.0.0-next.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 +5 -5
- package/api/@xmachines/core/README.md +7 -2
- package/api/@xmachines/core/cache/functions/createLruCache.md +1 -1
- package/api/@xmachines/core/cache/interfaces/KeyValueCache.md +3 -3
- package/api/@xmachines/core/errors/classes/BaseError.md +11 -11
- package/api/@xmachines/core/errors/classes/DisposeConflictError.md +11 -11
- package/api/@xmachines/core/utils/functions/asDisposable.md +2 -2
- package/api/@xmachines/core/utils/functions/createNullRecord.md +1 -1
- package/api/@xmachines/core/utils/functions/createWarnOnce.md +1 -1
- package/api/@xmachines/core/utils/functions/describeValue.md +1 -1
- package/api/@xmachines/core/utils/functions/isError.md +1 -1
- package/api/@xmachines/core/utils/functions/isThenable.md +1 -1
- package/api/@xmachines/core/utils/functions/releaseQuietly.md +1 -1
- package/api/@xmachines/core/utils/functions/rethrowLater.md +1 -1
- package/api/@xmachines/core/utils/functions/safeString.md +1 -1
- package/api/@xmachines/core/utils/functions/shallowEqualExcept.md +1 -1
- package/api/@xmachines/core/utils/type-aliases/DisposeKey.md +1 -1
- package/api/@xmachines/core/utils/type-aliases/DisposeMember.md +1 -1
- package/api/@xmachines/core/utils/variables/DISPOSE.md +1 -1
- package/api/@xmachines/play/README.md +10 -5
- package/api/@xmachines/play/errors/classes/NonNullableError.md +11 -11
- package/api/@xmachines/play/errors/classes/PlayError.md +12 -11
- package/api/@xmachines/play/index/functions/assertNonNullable.md +1 -1
- package/api/@xmachines/play/index/type-aliases/PlayEvent.md +4 -4
- package/api/@xmachines/play-actor/README.md +11 -3
- package/api/@xmachines/play-actor/interfaces/ActorEvent.md +4 -4
- package/api/@xmachines/play-actor/interfaces/PlayActor.md +6 -6
- package/api/@xmachines/play-atom/README.md +21 -7
- package/api/@xmachines/play-atom/functions/watchAtom.md +1 -1
- package/api/@xmachines/play-atom/interfaces/AsyncAtomOptions.md +4 -4
- package/api/@xmachines/play-atom/interfaces/Atom.md +6 -6
- package/api/@xmachines/play-atom/interfaces/AtomObserver.md +6 -6
- package/api/@xmachines/play-atom/interfaces/AtomOptions.md +4 -4
- package/api/@xmachines/play-atom/interfaces/AtomSubscription.md +2 -2
- package/api/@xmachines/play-atom/interfaces/BaseAtom.md +4 -4
- package/api/@xmachines/play-atom/interfaces/CreateAtom.md +3 -3
- package/api/@xmachines/play-atom/interfaces/Readable.md +4 -4
- package/api/@xmachines/play-atom/interfaces/ReadonlyAtom.md +4 -4
- package/api/@xmachines/play-atom/type-aliases/AnyAtom.md +1 -1
- package/api/@xmachines/play-atom/type-aliases/AsyncAtomState.md +1 -1
- package/api/@xmachines/play-atom/variables/createAsyncAtom.md +1 -1
- package/api/@xmachines/play-atom/variables/createAtom.md +1 -1
- package/api/@xmachines/play-atom/variables/createWritableAtom.md +1 -1
- package/api/@xmachines/play-dom/README.md +136 -50
- package/api/@xmachines/play-dom/classes/PlayRenderer.md +12 -12
- package/api/@xmachines/play-dom/functions/createPlayUI.md +5 -5
- package/api/@xmachines/play-dom/functions/createRenderer.md +1 -1
- package/api/@xmachines/play-dom/functions/renderSpec.md +3 -2
- package/api/@xmachines/play-dom/interfaces/ComponentContext.md +9 -9
- package/api/@xmachines/play-dom/interfaces/CreatePlayUIOptions.md +15 -14
- package/api/@xmachines/play-dom/interfaces/DomRenderContext.md +26 -20
- package/api/@xmachines/play-dom/interfaces/MountOptions.md +5 -5
- package/api/@xmachines/play-dom/interfaces/PassOptions.md +14 -0
- package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +18 -17
- package/api/@xmachines/play-dom/interfaces/RenderErrorInfo.md +16 -0
- package/api/@xmachines/play-dom/interfaces/RenderSpecOptions.md +17 -15
- package/api/@xmachines/play-dom/interfaces/UIProviderOptions.md +9 -8
- package/api/@xmachines/play-dom/interfaces/ValidationRegistry.md +14 -11
- package/api/@xmachines/play-dom/type-aliases/ConfirmHandler.md +9 -10
- package/api/@xmachines/play-dom/type-aliases/DefineRegistryOptions.md +4 -3
- package/api/@xmachines/play-dom/type-aliases/MountFn.md +1 -1
- package/api/@xmachines/play-dom/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-dom/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-dom-router/README.md +44 -6
- package/api/@xmachines/play-dom-router/classes/DomRouterBridge.md +7 -7
- package/api/@xmachines/play-dom-router/classes/RouteMap.md +4 -4
- 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 +5 -5
- package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +16 -16
- package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +16 -16
- package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +10 -10
- package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +9 -9
- 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 +6 -6
- package/api/@xmachines/play-dom-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-dom-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouterConnection.md +8 -8
- package/api/@xmachines/play-dom-router/interfaces/VanillaRouter.md +6 -6
- package/api/@xmachines/play-pattern/README.md +1 -1
- package/api/@xmachines/play-pattern/functions/buildPath.md +1 -1
- package/api/@xmachines/play-pattern/functions/createLruCache.md +1 -1
- package/api/@xmachines/play-pattern/functions/getIndexKey.md +1 -1
- package/api/@xmachines/play-pattern/functions/isDotSegment.md +1 -1
- package/api/@xmachines/play-pattern/functions/parsePattern.md +1 -1
- package/api/@xmachines/play-pattern/interfaces/GroupPart.md +6 -6
- package/api/@xmachines/play-pattern/interfaces/KeyValueCache.md +3 -3
- package/api/@xmachines/play-pattern/interfaces/LiteralPart.md +5 -5
- package/api/@xmachines/play-pattern/interfaces/ParamPart.md +9 -9
- package/api/@xmachines/play-pattern/interfaces/ParseOptions.md +4 -4
- package/api/@xmachines/play-pattern/interfaces/ParsedPattern.md +14 -14
- package/api/@xmachines/play-pattern/interfaces/PatternParam.md +6 -6
- package/api/@xmachines/play-pattern/type-aliases/PathBuildResult.md +1 -1
- package/api/@xmachines/play-pattern/type-aliases/PathParams.md +1 -1
- package/api/@xmachines/play-pattern/type-aliases/PatternModifier.md +1 -1
- package/api/@xmachines/play-pattern/type-aliases/PatternPart.md +1 -1
- package/api/@xmachines/play-react/README.md +58 -19
- package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +6 -6
- package/api/@xmachines/play-react/functions/defineRegistry.md +1 -1
- package/api/@xmachines/play-react/functions/useActor.md +1 -1
- package/api/@xmachines/play-react/functions/useAtomEffect.md +1 -1
- package/api/@xmachines/play-react/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-react/interfaces/ActionProviderProps.md +5 -5
- package/api/@xmachines/play-react/interfaces/ActorProviderProps.md +11 -11
- package/api/@xmachines/play-react/interfaces/DefineRegistryResult.md +15 -0
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +8 -8
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +6 -6
- package/api/@xmachines/play-react/interfaces/PlayUIProviderProps.md +13 -13
- package/api/@xmachines/play-react/interfaces/RenderErrorInfo.md +16 -0
- package/api/@xmachines/play-react/interfaces/RendererProps.md +7 -7
- package/api/@xmachines/play-react/interfaces/ViewContextValue.md +7 -7
- package/api/@xmachines/play-react/type-aliases/AnyPlayActor.md +1 -1
- package/api/@xmachines/play-react/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-react/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-react/variables/ActorProvider.md +14 -4
- 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 +26 -5
- package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +7 -7
- package/api/@xmachines/play-react-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-react-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +1 -1
- package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +11 -11
- package/api/@xmachines/play-react-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-react-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-react-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-react-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- 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 +87 -29
- package/api/@xmachines/play-router/errors/classes/DuplicateBridgeError.md +11 -11
- package/api/@xmachines/play-router/errors/classes/DuplicateRoutePathError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/EmptyRoutePathError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/InvalidBasePathError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/InvalidRoutePatternError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/InvalidStateIdError.md +12 -12
- package/api/@xmachines/play-router/errors/classes/MissingBasePathParamError.md +13 -13
- package/api/@xmachines/play-router/errors/classes/RouterSyncError.md +11 -11
- package/api/@xmachines/play-router/errors/classes/UnknownStateTypeError.md +13 -13
- package/api/@xmachines/play-router/index/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-router/index/classes/RouterBridgeBase.md +7 -7
- 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/createLruCache.md +1 -1
- package/api/@xmachines/play-router/index/functions/createRouteMapFromTree.md +1 -1
- 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 +1 -1
- package/api/@xmachines/play-router/index/functions/findRouteById.md +1 -1
- package/api/@xmachines/play-router/index/functions/findRouteByPath.md +1 -1
- package/api/@xmachines/play-router/index/functions/isMountableBridge.md +1 -1
- package/api/@xmachines/play-router/index/functions/joinBasePath.md +1 -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 +5 -5
- package/api/@xmachines/play-router/index/functions/parsePattern.md +1 -1
- 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 +1 -1
- package/api/@xmachines/play-router/index/functions/sanitizePathname.md +1 -1
- package/api/@xmachines/play-router/index/functions/splitLocation.md +1 -1
- 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 +5 -5
- package/api/@xmachines/play-router/index/interfaces/BuildPlayRouteEventOptions.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/CompileOptions.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/FrameworkParamsSource.md +9 -9
- package/api/@xmachines/play-router/index/interfaces/KeyValueCache.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/LocationLike.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/MountableRouterBridge.md +8 -8
- package/api/@xmachines/play-router/index/interfaces/OpenProviderBridgeArgs.md +10 -10
- package/api/@xmachines/play-router/index/interfaces/ParseOptions.md +4 -4
- package/api/@xmachines/play-router/index/interfaces/ParsedPattern.md +14 -14
- package/api/@xmachines/play-router/index/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-router/index/interfaces/PlayRouterProviderBaseProps.md +11 -11
- package/api/@xmachines/play-router/index/interfaces/ResolvedBasePath.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/ResolvedRoutePath.md +5 -5
- 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 +10 -10
- package/api/@xmachines/play-router/index/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/RouteMatch.md +5 -5
- package/api/@xmachines/play-router/index/interfaces/RouteNode.md +12 -12
- package/api/@xmachines/play-router/index/interfaces/RouteObject.md +7 -7
- package/api/@xmachines/play-router/index/interfaces/RouteTree.md +7 -7
- package/api/@xmachines/play-router/index/interfaces/RouteWatcherHandle.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/RouterBridgeOptions.md +8 -8
- package/api/@xmachines/play-router/index/interfaces/RouterConnection.md +8 -8
- package/api/@xmachines/play-router/index/interfaces/SplitLocation.md +7 -7
- package/api/@xmachines/play-router/index/interfaces/WindowLike.md +3 -3
- package/api/@xmachines/play-router/index/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- 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 +3 -3
- 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/README.md +5 -2
- package/api/@xmachines/play-router/xstate/functions/createRouteMap.md +2 -2
- package/api/@xmachines/play-router/xstate/functions/extractMachineRoutes.md +5 -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 +7 -8
- package/api/@xmachines/play-router/xstate/functions/isRouteReachable.md +8 -9
- 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/Graph.md +26 -0
- package/api/@xmachines/play-router/xstate/interfaces/GraphEdge.md +22 -0
- package/api/@xmachines/play-router/xstate/interfaces/GraphNode.md +21 -0
- package/api/@xmachines/play-router/xstate/interfaces/MachineEdgeData.md +6 -6
- package/api/@xmachines/play-router/xstate/interfaces/MachineNodeData.md +7 -7
- package/api/@xmachines/play-router/xstate/type-aliases/MachineGraph.md +4 -6
- package/api/@xmachines/play-solid/README.md +35 -11
- package/api/@xmachines/play-solid/functions/useActor.md +1 -1
- package/api/@xmachines/play-solid/functions/useBoundProp.md +8 -5
- package/api/@xmachines/play-solid/functions/useFieldValidation.md +6 -4
- package/api/@xmachines/play-solid/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-solid/functions/useStateBinding.md +5 -3
- package/api/@xmachines/play-solid/functions/useStateValue.md +5 -3
- package/api/@xmachines/play-solid/interfaces/ActorProviderProps.md +10 -10
- package/api/@xmachines/play-solid/interfaces/PlayUIProviderProps.md +13 -13
- package/api/@xmachines/play-solid/interfaces/RenderErrorInfo.md +16 -0
- package/api/@xmachines/play-solid/interfaces/RendererProps.md +7 -7
- package/api/@xmachines/play-solid/interfaces/ViewContextValue.md +7 -7
- package/api/@xmachines/play-solid/type-aliases/AnyPlayActor.md +1 -1
- package/api/@xmachines/play-solid/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-solid/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-solid/variables/ActorContext.md +1 -1
- package/api/@xmachines/play-solid/variables/ActorProvider.md +17 -3
- 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 +24 -10
- package/api/@xmachines/play-solid-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +7 -7
- 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 +9 -9
- package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +11 -11
- package/api/@xmachines/play-solid-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-solid-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- 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 +19 -11
- package/api/@xmachines/play-svelte/functions/defineRegistry.md +3 -4
- 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 +12 -12
- package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +8 -8
- package/api/@xmachines/play-svelte/interfaces/DefineRegistryResult.md +15 -0
- package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +14 -14
- package/api/@xmachines/play-svelte/interfaces/RenderErrorInfo.md +16 -0
- package/api/@xmachines/play-svelte/interfaces/ViewContextValue.md +7 -7
- package/api/@xmachines/play-svelte/type-aliases/AnyPlayActor.md +1 -1
- package/api/@xmachines/play-svelte/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-svelte/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-svelte-spa-router/README.md +14 -7
- package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-svelte-spa-router/classes/SvelteSpaRouterBridge.md +7 -7
- package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-svelte-spa-router/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +10 -10
- package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-svelte-spa-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterConnection.md +8 -8
- package/api/@xmachines/play-svelte-spa-router/interfaces/WindowLike.md +3 -3
- package/api/@xmachines/play-sveltekit-router/README.md +67 -14
- package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-sveltekit-router/classes/SvelteKitRouterBridge.md +29 -19
- package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-sveltekit-router/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +13 -16
- package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +5 -5
- package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-sveltekit-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterConnection.md +8 -8
- package/api/@xmachines/play-sveltekit-router/interfaces/SvelteKitRouterBridgeOptions.md +25 -0
- package/api/@xmachines/play-sveltekit-router/type-aliases/ShallowNavigation.md +21 -0
- package/api/@xmachines/play-tanstack-react-router/README.md +36 -17
- package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +7 -7
- package/api/@xmachines/play-tanstack-react-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +11 -11
- package/api/@xmachines/play-tanstack-react-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- 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 +7 -4
- package/api/@xmachines/play-tanstack-router/classes/TanStackRouterBridgeBase.md +7 -7
- 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 +50 -17
- package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-tanstack-solid-router/classes/TanStackSolidRouterBridge.md +7 -7
- package/api/@xmachines/play-tanstack-solid-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +11 -11
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterBridgeConstructor.md +1 -1
- 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 +1 -1
- package/api/@xmachines/play-url/errors/classes/InvalidBasePathError.md +12 -12
- package/api/@xmachines/play-url/errors/classes/InvalidRoutePatternError.md +12 -12
- package/api/@xmachines/play-url/errors/classes/MissingBasePathParamError.md +13 -13
- package/api/@xmachines/play-url/index/functions/buildPath.md +1 -1
- package/api/@xmachines/play-url/index/functions/cleanFrameworkParams.md +1 -1
- package/api/@xmachines/play-url/index/functions/createLruCache.md +1 -1
- package/api/@xmachines/play-url/index/functions/getCandidates.md +1 -1
- package/api/@xmachines/play-url/index/functions/getCompiledPattern.md +1 -1
- package/api/@xmachines/play-url/index/functions/getIndexKey.md +1 -1
- package/api/@xmachines/play-url/index/functions/holdsUnsubstitutedParam.md +1 -1
- package/api/@xmachines/play-url/index/functions/isDotSegment.md +1 -1
- package/api/@xmachines/play-url/index/functions/joinBasePath.md +1 -1
- package/api/@xmachines/play-url/index/functions/normalizeBasePath.md +1 -1
- package/api/@xmachines/play-url/index/functions/parsePattern.md +1 -1
- 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 +1 -1
- package/api/@xmachines/play-url/index/functions/sanitizePathname.md +1 -1
- package/api/@xmachines/play-url/index/functions/splitLocation.md +1 -1
- package/api/@xmachines/play-url/index/functions/stripBasePath.md +1 -1
- package/api/@xmachines/play-url/index/interfaces/BasePathOptions.md +5 -5
- package/api/@xmachines/play-url/index/interfaces/CompileOptions.md +5 -5
- package/api/@xmachines/play-url/index/interfaces/FrameworkParamsSource.md +9 -9
- package/api/@xmachines/play-url/index/interfaces/GroupPart.md +6 -6
- package/api/@xmachines/play-url/index/interfaces/KeyValueCache.md +3 -3
- 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 +4 -4
- package/api/@xmachines/play-url/index/interfaces/ParsedPattern.md +14 -14
- package/api/@xmachines/play-url/index/interfaces/PatternParam.md +6 -6
- package/api/@xmachines/play-url/index/interfaces/ResolvedBasePath.md +5 -5
- package/api/@xmachines/play-url/index/interfaces/SplitLocation.md +7 -7
- package/api/@xmachines/play-url/index/type-aliases/PathBuildResult.md +1 -1
- package/api/@xmachines/play-url/index/type-aliases/PathParams.md +1 -1
- 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 +45 -19
- package/api/@xmachines/play-view/errors/README.md +1 -0
- package/api/@xmachines/play-view/errors/classes/InvalidViewOutletError.md +13 -13
- package/api/@xmachines/play-view/errors/classes/ReadOnlyContextError.md +12 -12
- package/api/@xmachines/play-view/errors/classes/ViewElementKeyCollisionError.md +181 -0
- package/api/@xmachines/play-view/index/README.md +10 -4
- package/api/@xmachines/play-view/index/functions/attachRenderErrorHandler.md +10 -9
- package/api/@xmachines/play-view/index/functions/bindStoreHandlers.md +34 -0
- package/api/@xmachines/play-view/index/functions/composePlayState.md +1 -1
- package/api/@xmachines/play-view/index/functions/composeViews.md +8 -2
- package/api/@xmachines/play-view/index/functions/createActorProxy.md +39 -0
- package/api/@xmachines/play-view/index/functions/createRenderErrorBinding.md +35 -0
- package/api/@xmachines/play-view/index/functions/createReportGuard.md +1 -1
- package/api/@xmachines/play-view/index/functions/createViewSession.md +29 -0
- package/api/@xmachines/play-view/index/functions/createViewStoreLifecycle.md +1 -1
- package/api/@xmachines/play-view/index/functions/forwardRenderError.md +45 -0
- package/api/@xmachines/play-view/index/functions/guardContextWrites.md +1 -1
- 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/toAtomState.md +1 -1
- package/api/@xmachines/play-view/index/functions/typedSpec.md +1 -1
- package/api/@xmachines/play-view/index/interfaces/BaseActorProviderProps.md +8 -8
- package/api/@xmachines/play-view/index/interfaces/BaseViewContextValue.md +7 -7
- package/api/@xmachines/play-view/index/interfaces/ComposedView.md +7 -7
- package/api/@xmachines/play-view/index/interfaces/HandlerFactory.md +19 -0
- package/api/@xmachines/play-view/index/interfaces/PlaySpec.md +8 -8
- package/api/@xmachines/play-view/index/interfaces/ReportGuard.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/ReportGuardMessages.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/ResolveViewStoreOptions.md +4 -4
- package/api/@xmachines/play-view/index/interfaces/ViewMeta.md +7 -7
- package/api/@xmachines/play-view/index/interfaces/ViewOutlet.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/ViewSession.md +155 -0
- package/api/@xmachines/play-view/index/interfaces/ViewSessionOptions.md +12 -0
- package/api/@xmachines/play-view/index/interfaces/ViewSessionSnapshot.md +23 -0
- package/api/@xmachines/play-view/index/interfaces/ViewStoreLifecycle.md +22 -3
- package/api/@xmachines/play-view/index/interfaces/ViewStoreResolution.md +7 -6
- package/api/@xmachines/play-view/index/interfaces/ViewTree.md +6 -6
- package/api/@xmachines/play-view/index/interfaces/ViewTreeChild.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/Viewable.md +4 -4
- package/api/@xmachines/play-view/index/type-aliases/StateUpdater.md +21 -0
- 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 +20 -15
- 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/useBoundProp.md +10 -4
- package/api/@xmachines/play-vue/functions/useFieldValidation.md +12 -5
- package/api/@xmachines/play-vue/functions/usePlayView.md +1 -1
- package/api/@xmachines/play-vue/interfaces/ActorProviderProps.md +8 -8
- package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +11 -11
- package/api/@xmachines/play-vue/interfaces/RenderErrorInfo.md +16 -0
- package/api/@xmachines/play-vue/interfaces/RendererProps.md +7 -7
- package/api/@xmachines/play-vue/interfaces/ViewContextValue.md +7 -7
- 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 +4 -4
- package/api/@xmachines/play-vue/type-aliases/OnRenderError.md +27 -0
- package/api/@xmachines/play-vue/type-aliases/RenderErrorKind.md +21 -0
- package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-vue/variables/Renderer.md +3 -3
- package/api/@xmachines/play-vue-router/README.md +18 -11
- package/api/@xmachines/play-vue-router/errors/classes/VueRouterNavigationError.md +11 -11
- package/api/@xmachines/play-vue-router/errors/classes/VueRouterSendError.md +11 -11
- package/api/@xmachines/play-vue-router/index/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-vue-router/index/classes/VueRouterBridge.md +7 -7
- package/api/@xmachines/play-vue-router/index/interfaces/PlayRouteEvent.md +9 -9
- package/api/@xmachines/play-vue-router/index/interfaces/RoutableActor.md +6 -6
- package/api/@xmachines/play-vue-router/index/interfaces/RouteMapOptions.md +6 -6
- package/api/@xmachines/play-vue-router/index/interfaces/RouteMapping.md +5 -5
- package/api/@xmachines/play-vue-router/index/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-vue-router/index/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-xstate/README.md +120 -57
- package/api/@xmachines/play-xstate/errors/classes/ActorThrewNonErrorError.md +11 -11
- package/api/@xmachines/play-xstate/errors/classes/InvalidEventError.md +12 -12
- package/api/@xmachines/play-xstate/errors/classes/InvalidMachineError.md +11 -11
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteHandlerError.md +12 -12
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteMetadataError.md +12 -12
- package/api/@xmachines/play-xstate/errors/classes/InvalidRouteParamError.md +14 -14
- package/api/@xmachines/play-xstate/errors/classes/MissingRouteParamError.md +13 -13
- package/api/@xmachines/play-xstate/errors/classes/MissingStateIdError.md +15 -15
- package/api/@xmachines/play-xstate/index/README.md +1 -1
- package/api/@xmachines/play-xstate/index/classes/PlayerActor.md +201 -124
- package/api/@xmachines/play-xstate/index/functions/compose.md +4 -4
- package/api/@xmachines/play-xstate/index/functions/definePlayer.md +14 -10
- package/api/@xmachines/play-xstate/index/interfaces/PlayerConfig.md +6 -6
- package/api/@xmachines/play-xstate/index/interfaces/PlayerFactoryResumeOptions.md +4 -4
- 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/with-routing/functions/buildRouteUrl.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/functions/deriveRoute.md +13 -5
- package/api/@xmachines/play-xstate/with-routing/functions/formatPlayRouteTransitions.md +26 -13
- 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 +8 -8
- package/api/@xmachines/play-xstate/with-routing/interfaces/RouteObject.md +7 -7
- 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 +1 -1
- package/api/@xmachines/shared/README.md +1 -0
- package/api/@xmachines/shared/vite-aliases/functions/xmAliases.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmBuildOutput.md +1 -1
- package/api/@xmachines/shared/vite-aliases/functions/xmBuildOutputFile.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 +4 -4
- package/api/@xmachines/shared/vite-aliases/functions/xmTestTarget.md +1 -1
- package/api/@xmachines/shared/vite-aliases/type-aliases/XmTestTarget.md +1 -1
- 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 +6 -6
- package/contributing/architecture.md +100 -61
- package/contributing/configuration.md +44 -62
- package/contributing/deployment.md +131 -161
- package/contributing/development.md +34 -9
- package/contributing/migrating-to-play-atom.md +23 -5
- package/contributing/testing.md +64 -33
- package/examples/@xmachines/play-dom-demo/README.md +2 -2
- package/examples/@xmachines/play-dom-demo/functions/createAuthActionHandlers.md +11 -11
- package/examples/@xmachines/play-dom-demo/functions/createConfirmDialog.md +1 -1
- package/examples/@xmachines/play-dom-demo/functions/createNavBar.md +1 -1
- package/examples/@xmachines/play-dom-demo/functions/initShell.md +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/examples/@xmachines/play-dom-demo/variables/demoComponents.md +17 -17
- package/examples/@xmachines/play-dom-router-demo/README.md +4 -3
- package/examples/@xmachines/play-react-demo/README.md +2 -2
- package/examples/@xmachines/play-react-demo/functions/createAuthActionHandlers.md +11 -11
- 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 +1 -1
- 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 +1 -1
- package/examples/@xmachines/play-react-demo/variables/Field.md +1 -1
- 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 +1 -1
- 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 +1 -1
- package/examples/@xmachines/play-react-demo/variables/Stats.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/authCatalog.md +1 -1
- package/examples/@xmachines/play-react-demo/variables/demoComponents.md +17 -17
- package/examples/@xmachines/play-react-router-demo/README.md +4 -3
- package/examples/@xmachines/play-solid-demo/README.md +3 -3
- package/examples/@xmachines/play-solid-demo/functions/createAuthActionHandlers.md +11 -11
- 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 +1 -1
- 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 +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Field.md +1 -1
- 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 +1 -1
- 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 +1 -1
- package/examples/@xmachines/play-solid-demo/variables/Stats.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/authCatalog.md +1 -1
- package/examples/@xmachines/play-solid-demo/variables/demoComponents.md +17 -17
- package/examples/@xmachines/play-solid-router-demo/README.md +9 -3
- package/examples/@xmachines/play-svelte-demo/README.md +1 -1
- package/examples/@xmachines/play-svelte-demo/functions/createAuthActionHandlers.md +11 -11
- package/examples/@xmachines/play-svelte-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-svelte-demo/variables/authCatalog.md +1 -1
- package/examples/@xmachines/play-svelte-demo/variables/demoComponents.md +17 -17
- package/examples/@xmachines/play-svelte-spa-router-demo/README.md +1 -1
- package/examples/@xmachines/play-sveltekit-router-demo/README.md +1 -1
- package/examples/@xmachines/play-tanstack-react-router-demo/README.md +3 -2
- package/examples/@xmachines/play-tanstack-solid-router-demo/README.md +9 -8
- package/examples/@xmachines/play-vue-demo/README.md +2 -2
- package/examples/@xmachines/play-vue-demo/functions/createAuthActionHandlers.md +11 -11
- 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 +1 -1
- package/examples/@xmachines/play-vue-demo/variables/demoComponents.md +1 -1
- package/examples/@xmachines/play-vue-router-demo/README.md +3 -3
- package/examples/README.md +1 -1
- package/examples/basic-state-machine.md +19 -23
- package/examples/form-validation.md +60 -61
- package/examples/multi-router-integration.md +268 -147
- package/examples/routing-patterns.md +73 -43
- package/examples/traffic-light.md +24 -22
- package/guides/actor-model.md +38 -21
- package/guides/atoms.md +48 -8
- package/guides/getting-started.md +106 -62
- package/guides/inspector.md +103 -37
- package/guides/routing.md +7 -2
- package/guides/state-machines.md +106 -68
- package/guides/views.md +40 -18
- package/package.json +6 -6
- package/rfc/git.md +13 -5
- package/rfc/play.md +53 -31
- package/rfc/run.md +7 -4
- package/api/@xmachines/play-view/index/functions/createFailureLatch.md +0 -20
- package/api/@xmachines/play-view/index/functions/sameViewInputs.md +0 -25
- package/api/@xmachines/play-view/index/interfaces/FailureLatch.md +0 -60
- package/api/@xmachines/play-view/index/interfaces/ViewInputs.md +0 -19
|
@@ -14,7 +14,7 @@ Every routing interaction starts with a `play.route` event sent to the actor. If
|
|
|
14
14
|
|
|
15
15
|
Add a `meta.route` URL template to any state to make it routable:
|
|
16
16
|
|
|
17
|
-
```typescript
|
|
17
|
+
```typescript fragment
|
|
18
18
|
states: {
|
|
19
19
|
home: {
|
|
20
20
|
id: "home", // required: used as the play.route target ("#home")
|
|
@@ -63,10 +63,10 @@ states: {
|
|
|
63
63
|
Instead of hand-writing `play.route` event handlers for every routable state, wrap your machine config with `formatPlayRouteTransitions`:
|
|
64
64
|
|
|
65
65
|
```typescript
|
|
66
|
-
import { setup } from "xstate";
|
|
66
|
+
import { setup, types } from "xstate";
|
|
67
67
|
import { definePlayer } from "@xmachines/play-xstate";
|
|
68
68
|
import { formatPlayRouteTransitions } from "@xmachines/play-xstate/routing";
|
|
69
|
-
import type { PlayRouteEvent } from "@xmachines/play-router";
|
|
69
|
+
import type { PlayRouteEvent, RouteMetadata } from "@xmachines/play-router";
|
|
70
70
|
|
|
71
71
|
interface AuthContext {
|
|
72
72
|
isAuthenticated: boolean;
|
|
@@ -76,11 +76,15 @@ interface AuthContext {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
const authSetup = setup({
|
|
79
|
-
|
|
80
|
-
context:
|
|
81
|
-
events: {
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
schemas: {
|
|
80
|
+
context: types<AuthContext>(),
|
|
81
|
+
events: {
|
|
82
|
+
"play.route": types<Omit<PlayRouteEvent, "type">>(),
|
|
83
|
+
"auth.login": types<{ username: string }>(),
|
|
84
|
+
"auth.logout": types<void>(),
|
|
85
|
+
},
|
|
86
|
+
input: types<Partial<AuthContext> | undefined>(),
|
|
87
|
+
meta: types<{ route?: RouteMetadata }>(),
|
|
84
88
|
},
|
|
85
89
|
});
|
|
86
90
|
|
|
@@ -106,17 +110,19 @@ const authMachine = authSetup.createMachine(
|
|
|
106
110
|
|
|
107
111
|
`formatPlayRouteTransitions` generates root-level handlers equivalent to:
|
|
108
112
|
|
|
109
|
-
```typescript
|
|
113
|
+
```typescript fragment
|
|
110
114
|
on: {
|
|
111
115
|
"play.route": [
|
|
112
|
-
{ target: ".home",
|
|
113
|
-
{ target: ".about",
|
|
114
|
-
{ target: ".login",
|
|
115
|
-
{ target: ".profile",
|
|
116
|
+
{ target: ".home", matches: { to: "#home" }, reenter: false, context: ({ context, event }) => ({ params, query }) },
|
|
117
|
+
{ target: ".about", matches: { to: "#about" }, reenter: false, context: ({ context, event }) => ({ params, query }) },
|
|
118
|
+
{ target: ".login", matches: { to: "#login" }, reenter: false, context: ({ context, event }) => ({ params, query }) },
|
|
119
|
+
{ target: ".profile", matches: { to: "#profile" }, reenter: false, context: ({ context, event }) => ({ params, query }) },
|
|
116
120
|
],
|
|
117
121
|
}
|
|
118
122
|
```
|
|
119
123
|
|
|
124
|
+
Each generated transition is a config object. `matches` selects the event by its `to` field, and `context` returns the patch that XState merges into the context. A `play.route` transition of your own comes after the generated ones, as the fallback.
|
|
125
|
+
|
|
120
126
|
`reenter` comes from the object form of `meta.route`, and the default is `false`. Declare `meta: { route: { path: "/about", reenter: true } }` for a state whose route must also re-enter the domain of the transition. See [Re-entry on a navigation](../guides/routing.md#re-entry-on-a-navigation).
|
|
121
127
|
|
|
122
128
|
### `play.route` Events — Navigation
|
|
@@ -124,6 +130,10 @@ on: {
|
|
|
124
130
|
To navigate, send a `play.route` event with `to: "#stateId"`:
|
|
125
131
|
|
|
126
132
|
```typescript
|
|
133
|
+
import type { RoutableActor } from "@xmachines/play-router";
|
|
134
|
+
|
|
135
|
+
declare const actor: RoutableActor; // the started actor of "Complete Actor Usage" below
|
|
136
|
+
|
|
127
137
|
// Navigate to home
|
|
128
138
|
actor.send({ type: "play.route", to: "#home" });
|
|
129
139
|
|
|
@@ -149,25 +159,19 @@ actor.send({
|
|
|
149
159
|
|
|
150
160
|
### `always` Guards — Protected Routes
|
|
151
161
|
|
|
152
|
-
Use XState `always` transitions to protect states. If the
|
|
162
|
+
Use XState `always` transitions to protect states. If the function returns a target, the machine redirects _before_ the state is fully entered:
|
|
153
163
|
|
|
154
|
-
```typescript
|
|
164
|
+
```typescript fragment
|
|
155
165
|
dashboard: {
|
|
156
166
|
id: "dashboard",
|
|
157
167
|
meta: { route: "/dashboard" },
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
guard: ({ context }) => !context.isAuthenticated,
|
|
161
|
-
target: "login",
|
|
162
|
-
},
|
|
168
|
+
// If not authenticated, redirect to login immediately
|
|
169
|
+
always: ({ context }) => (context.isAuthenticated ? undefined : { target: "login" }),
|
|
163
170
|
},
|
|
164
171
|
profile: {
|
|
165
172
|
id: "profile",
|
|
166
173
|
meta: { route: "/profile/:username" },
|
|
167
|
-
always: {
|
|
168
|
-
guard: ({ context }) => !context.isAuthenticated,
|
|
169
|
-
target: "login",
|
|
170
|
-
},
|
|
174
|
+
always: ({ context }) => (context.isAuthenticated ? undefined : { target: "login" }),
|
|
171
175
|
},
|
|
172
176
|
```
|
|
173
177
|
|
|
@@ -177,26 +181,21 @@ profile: {
|
|
|
177
181
|
|
|
178
182
|
Domain events placed at the root `on:` level are handled from any state:
|
|
179
183
|
|
|
180
|
-
```typescript
|
|
184
|
+
```typescript fragment
|
|
181
185
|
const authMachine = authSetup.createMachine(
|
|
182
186
|
formatPlayRouteTransitions({
|
|
183
187
|
// ...
|
|
184
188
|
on: {
|
|
185
|
-
"auth.login": {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
isAuthenticated: true,
|
|
190
|
-
|
|
191
|
-
}),
|
|
189
|
+
"auth.login": ({ context, event }) => {
|
|
190
|
+
if (context.isAuthenticated) return;
|
|
191
|
+
return {
|
|
192
|
+
target: ".dashboard",
|
|
193
|
+
context: { isAuthenticated: true, username: event.username },
|
|
194
|
+
};
|
|
192
195
|
},
|
|
193
|
-
"auth.logout": {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
actions: authSetup.assign({
|
|
197
|
-
isAuthenticated: false,
|
|
198
|
-
username: null,
|
|
199
|
-
}),
|
|
196
|
+
"auth.logout": ({ context }) => {
|
|
197
|
+
if (!context.isAuthenticated) return;
|
|
198
|
+
return { target: ".home", context: { isAuthenticated: false, username: null } };
|
|
200
199
|
},
|
|
201
200
|
},
|
|
202
201
|
states: {/* ... */},
|
|
@@ -207,6 +206,12 @@ const authMachine = authSetup.createMachine(
|
|
|
207
206
|
## Complete Actor Usage
|
|
208
207
|
|
|
209
208
|
```typescript
|
|
209
|
+
import type { AnyStateMachine } from "xstate";
|
|
210
|
+
import { compose, definePlayer, PlayerActor } from "@xmachines/play-xstate";
|
|
211
|
+
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
212
|
+
|
|
213
|
+
declare const authMachine: AnyStateMachine; // the machine of the sections above
|
|
214
|
+
|
|
210
215
|
const createPlayer = definePlayer({
|
|
211
216
|
machine: authMachine,
|
|
212
217
|
actor: compose(PlayerActor, withRouting),
|
|
@@ -244,12 +249,18 @@ To sync the browser URL with `actor.currentRoute`, use [`@xmachines/play-dom-rou
|
|
|
244
249
|
|
|
245
250
|
```typescript
|
|
246
251
|
import { createBrowserHistory, createRouter, connectRouter } from "@xmachines/play-dom-router";
|
|
247
|
-
import { createRouteMap } from "@xmachines/play-router/xstate";
|
|
252
|
+
import { createRouteMap, extractMachineRoutes } from "@xmachines/play-router/xstate";
|
|
253
|
+
import type { RoutableActor } from "@xmachines/play-router";
|
|
254
|
+
import type { AnyStateMachine } from "xstate";
|
|
255
|
+
|
|
256
|
+
declare const authMachine: AnyStateMachine; // the machine of the sections above
|
|
257
|
+
declare const actor: RoutableActor; // the started actor of "Complete Actor Usage"
|
|
258
|
+
|
|
248
259
|
// createRouteMap extracts meta.route declarations from the machine
|
|
249
260
|
const routeMap = createRouteMap(authMachine);
|
|
250
261
|
|
|
251
262
|
const history = createBrowserHistory({ window });
|
|
252
|
-
const router = createRouter({ routeTree: authMachine, history });
|
|
263
|
+
const router = createRouter({ routeTree: extractMachineRoutes(authMachine), history });
|
|
253
264
|
|
|
254
265
|
// connectRouter handles all bidirectional sync:
|
|
255
266
|
// - actor.currentRoute atom → browser URL (history.push)
|
|
@@ -271,14 +282,33 @@ function teardown(): void {
|
|
|
271
282
|
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):
|
|
272
283
|
|
|
273
284
|
```tsx
|
|
274
|
-
import {
|
|
285
|
+
import type { ReactNode } from "react";
|
|
286
|
+
import {
|
|
287
|
+
PlayRouterProvider,
|
|
288
|
+
createRouteMapFromTree,
|
|
289
|
+
type RoutableActor,
|
|
290
|
+
type TanStackRouterInstance,
|
|
291
|
+
} from "@xmachines/play-tanstack-react-router";
|
|
275
292
|
import { extractMachineRoutes } from "@xmachines/play-router/xstate";
|
|
293
|
+
import type { AnyStateMachine } from "xstate";
|
|
294
|
+
|
|
295
|
+
declare const authMachine: AnyStateMachine; // the machine of the sections above
|
|
296
|
+
declare const actor: RoutableActor; // the started actor of "Complete Actor Usage"
|
|
297
|
+
declare const router: TanStackRouterInstance; // your TanStack Router instance
|
|
298
|
+
declare function Shell(props: { actor: RoutableActor }): ReactNode; // your layout component
|
|
276
299
|
|
|
277
300
|
const routeTree = extractMachineRoutes(authMachine);
|
|
278
301
|
const routeMap = createRouteMapFromTree(routeTree);
|
|
279
302
|
|
|
280
303
|
function App() {
|
|
281
|
-
return
|
|
304
|
+
return (
|
|
305
|
+
<PlayRouterProvider
|
|
306
|
+
actor={actor}
|
|
307
|
+
router={router}
|
|
308
|
+
routeMap={routeMap}
|
|
309
|
+
renderer={(currentActor) => <Shell actor={currentActor} />}
|
|
310
|
+
/>
|
|
311
|
+
);
|
|
282
312
|
}
|
|
283
313
|
```
|
|
284
314
|
|
|
@@ -16,27 +16,24 @@ Applicable patterns:
|
|
|
16
16
|
## Complete Code
|
|
17
17
|
|
|
18
18
|
```typescript
|
|
19
|
-
import { setup } from "xstate";
|
|
19
|
+
import { setup, types } from "xstate";
|
|
20
20
|
import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
|
|
21
21
|
import { formatPlayRouteTransitions } from "@xmachines/play-xstate/routing";
|
|
22
22
|
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
23
|
+
import type { PlayRouteEvent } from "@xmachines/play-router";
|
|
23
24
|
|
|
24
|
-
// 1. Typed setup
|
|
25
|
+
// 1. Typed setup. The events are a map from the type of each event to its payload.
|
|
25
26
|
const trafficSetup = setup({
|
|
26
|
-
|
|
27
|
-
context: {
|
|
27
|
+
schemas: {
|
|
28
|
+
context: types<{
|
|
28
29
|
params: Record<string, string>;
|
|
29
30
|
query: Record<string, string>;
|
|
31
|
+
}>(),
|
|
32
|
+
events: {
|
|
33
|
+
timer: types<void>(),
|
|
34
|
+
"play.route": types<Omit<PlayRouteEvent, "type">>(),
|
|
30
35
|
},
|
|
31
|
-
|
|
32
|
-
| { type: "timer" }
|
|
33
|
-
| {
|
|
34
|
-
type: "play.route";
|
|
35
|
-
to: string;
|
|
36
|
-
params?: Record<string, string>;
|
|
37
|
-
query?: Record<string, string>;
|
|
38
|
-
},
|
|
39
|
-
input: {} as undefined,
|
|
36
|
+
meta: types<{ route?: string }>(),
|
|
40
37
|
},
|
|
41
38
|
});
|
|
42
39
|
|
|
@@ -55,17 +52,17 @@ const trafficMachine = trafficSetup.createMachine(
|
|
|
55
52
|
red: {
|
|
56
53
|
id: "red",
|
|
57
54
|
meta: { route: "/red" },
|
|
58
|
-
on: { timer: "green" },
|
|
55
|
+
on: { timer: { target: "green" } },
|
|
59
56
|
},
|
|
60
57
|
green: {
|
|
61
58
|
id: "green",
|
|
62
59
|
meta: { route: "/green" },
|
|
63
|
-
on: { timer: "yellow" },
|
|
60
|
+
on: { timer: { target: "yellow" } },
|
|
64
61
|
},
|
|
65
62
|
yellow: {
|
|
66
63
|
id: "yellow",
|
|
67
64
|
meta: { route: "/yellow" },
|
|
68
|
-
on: { timer: "red" },
|
|
65
|
+
on: { timer: { target: "red" } },
|
|
69
66
|
},
|
|
70
67
|
},
|
|
71
68
|
}),
|
|
@@ -106,13 +103,13 @@ actor.stop();
|
|
|
106
103
|
|
|
107
104
|
`formatPlayRouteTransitions` crawls every state that has **both** an `id` and a `meta.route`, then generates root-level `play.route` event handlers of the form:
|
|
108
105
|
|
|
109
|
-
```typescript
|
|
106
|
+
```typescript fragment
|
|
110
107
|
// Auto-generated by formatPlayRouteTransitions — you don't write this manually:
|
|
111
108
|
on: {
|
|
112
109
|
"play.route": [
|
|
113
|
-
{ target: ".red",
|
|
114
|
-
{ target: ".green",
|
|
115
|
-
{ target: ".yellow",
|
|
110
|
+
{ target: ".red", matches: { to: "#red" }, reenter: false, context: ({ context, event }) => ({ params, query }) },
|
|
111
|
+
{ target: ".green", matches: { to: "#green" }, reenter: false, context: ({ context, event }) => ({ params, query }) },
|
|
112
|
+
{ target: ".yellow", matches: { to: "#yellow" }, reenter: false, context: ({ context, event }) => ({ params, query }) },
|
|
116
113
|
],
|
|
117
114
|
}
|
|
118
115
|
```
|
|
@@ -120,7 +117,8 @@ on: {
|
|
|
120
117
|
**Requirements:**
|
|
121
118
|
|
|
122
119
|
- Every routable state must have both `id` (the `#id` navigation target) and `meta.route` (the URL template).
|
|
123
|
-
- The machine's context must include `params` and `query` fields (both `Record<string, string>`), because `formatPlayRouteTransitions`
|
|
120
|
+
- The machine's context must include `params` and `query` fields (both `Record<string, string>`), because `formatPlayRouteTransitions` writes them on every `play.route` transition.
|
|
121
|
+
- Each generated transition is a config object: `matches` selects the event by its `to` field, and `context` returns the patch that XState merges into the context. The list holds the generated transitions first, and a `play.route` transition of your own last, as the fallback. The config types of XState 6 declare one transition for each event, and its runtime reads a list in its order.
|
|
124
122
|
- `reenter` comes from the object form of `meta.route`, and the default is `false`. Declare `meta: { route: { path: "/red", reenter: true } }` for a state whose route must also re-enter the domain of the transition. See [Re-entry on a navigation](../guides/routing.md#re-entry-on-a-navigation).
|
|
125
123
|
|
|
126
124
|
## The `actor.currentRoute` atom
|
|
@@ -129,6 +127,10 @@ on: {
|
|
|
129
127
|
|
|
130
128
|
```typescript
|
|
131
129
|
import { watchAtom } from "@xmachines/play-atom";
|
|
130
|
+
import type { Routable } from "@xmachines/play-router";
|
|
131
|
+
|
|
132
|
+
// The actor of the complete code above.
|
|
133
|
+
declare const actor: Routable;
|
|
132
134
|
|
|
133
135
|
const unwatch = watchAtom(actor.currentRoute, () => {
|
|
134
136
|
console.log("URL changed to:", actor.currentRoute.get());
|
|
@@ -147,6 +149,6 @@ unwatch();
|
|
|
147
149
|
|
|
148
150
|
## Next Steps
|
|
149
151
|
|
|
150
|
-
- **[Form Validation Example](form-validation.md)** — Context
|
|
152
|
+
- **[Form Validation Example](form-validation.md)** — Context patches and guards in transition functions
|
|
151
153
|
- **[Routing Patterns](routing-patterns.md)** — Parameter routes, relative routes, and `always` auth guards
|
|
152
154
|
- **[Play RFC](../rfc/play.md)** — Complete architectural specification
|
package/guides/actor-model.md
CHANGED
|
@@ -33,7 +33,7 @@ Infrastructure → actor: only via actor.send({ type: "..." })
|
|
|
33
33
|
|
|
34
34
|
## What the actor owns
|
|
35
35
|
|
|
36
|
-
An actor in XMachines is a [`PlayerActor`](../api/@xmachines/play-xstate/index/classes/PlayerActor.md) — a concrete class that extends
|
|
36
|
+
An actor in XMachines is a [`PlayerActor`](../api/@xmachines/play-xstate/index/classes/PlayerActor.md) — a concrete class that extends the `Actor` class of XState and implements the [`PlayActor`](../api/@xmachines/play-actor/interfaces/PlayActor.md) interface. With its capabilities, it holds three reactive properties:
|
|
37
37
|
|
|
38
38
|
| Property | Type | What it is |
|
|
39
39
|
| -------------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -102,8 +102,7 @@ This is why the invariant is called **State-Driven Reset** in the Play RFC.
|
|
|
102
102
|
|
|
103
103
|
An adapter extends the actor class of its own engine. [`PlayerActor`](../api/@xmachines/play-xstate/index/classes/PlayerActor.md) of [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) extends `Actor` of XState, which means:
|
|
104
104
|
|
|
105
|
-
-
|
|
106
|
-
- XState DevTools attach to actors normally
|
|
105
|
+
- The inspection API of XState works: the `inspect` option receives the `@xstate.actor` and `@xstate.transition` events of the actor — see [Inspecting a Running Actor](inspector.md)
|
|
107
106
|
- The full XState ecosystem (testing utilities, visualization) is compatible
|
|
108
107
|
|
|
109
108
|
[`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.
|
|
@@ -116,27 +115,30 @@ The two optional capability interfaces — [`Routable`](../api/@xmachines/play-r
|
|
|
116
115
|
An actor implements only the capabilities it actually uses:
|
|
117
116
|
|
|
118
117
|
```typescript
|
|
118
|
+
import type { PlayActor } from "@xmachines/play-actor";
|
|
119
|
+
import { createAtom } from "@xmachines/play-atom";
|
|
120
|
+
import { compose, PlayerActor } from "@xmachines/play-xstate";
|
|
121
|
+
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
122
|
+
import { withView } from "@xmachines/play-xstate/view";
|
|
123
|
+
import type { AnyStateMachine } from "xstate";
|
|
124
|
+
|
|
125
|
+
type CounterEvent = { type: "increment" };
|
|
126
|
+
|
|
119
127
|
// Minimal actor: the contract alone, which is reactive state and send
|
|
120
|
-
class
|
|
121
|
-
readonly state = createAtom
|
|
122
|
-
|
|
123
|
-
|
|
128
|
+
class CounterActor implements PlayActor<{ count: number }, CounterEvent> {
|
|
129
|
+
readonly state = createAtom({ count: 0 });
|
|
130
|
+
|
|
131
|
+
send(event: CounterEvent): void {
|
|
132
|
+
if (event.type === "increment") this.state.set(({ count }) => ({ count: count + 1 }));
|
|
124
133
|
}
|
|
125
134
|
}
|
|
126
135
|
|
|
127
|
-
// Full actor:
|
|
128
|
-
//
|
|
129
|
-
|
|
130
|
-
extends Actor<SomeMachine>
|
|
131
|
-
implements PlayActor<SomeSnapshot, SomeEvent>, Routable, Viewable
|
|
132
|
-
{
|
|
133
|
-
readonly state = createAtom(this.getSnapshot());
|
|
134
|
-
readonly currentRoute = createAtom(() => deriveRoute(this.state.get()));
|
|
135
|
-
readonly currentView = createAtom((): PlaySpec | null => deriveView(this.state.get()));
|
|
136
|
-
}
|
|
136
|
+
// Full actor: `PlayerActor` extends the `Actor` class of XState, and it implements
|
|
137
|
+
// `PlayActor`. `withRouting` adds `Routable`, and `withView` adds `Viewable`.
|
|
138
|
+
const FullActor = compose(PlayerActor<AnyStateMachine>, withRouting, withView);
|
|
137
139
|
```
|
|
138
140
|
|
|
139
|
-
In practice you never write
|
|
141
|
+
In practice you never write the actor class yourself — [`definePlayer`](../api/@xmachines/play-xstate/index/functions/definePlayer.md) from [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) creates the actor from your machine definition and from the class that `compose` returns.
|
|
140
142
|
|
|
141
143
|
---
|
|
142
144
|
|
|
@@ -146,7 +148,9 @@ In practice you never write [`PlayerActor`](../api/@xmachines/play-xstate/index/
|
|
|
146
148
|
|
|
147
149
|
```typescript
|
|
148
150
|
import { definePlayer } from "@xmachines/play-xstate";
|
|
149
|
-
import {
|
|
151
|
+
import { setup } from "xstate";
|
|
152
|
+
|
|
153
|
+
const myMachine = setup({}).createMachine({ id: "app", initial: "idle", states: { idle: {} } });
|
|
150
154
|
|
|
151
155
|
const createPlayer = definePlayer({ machine: myMachine });
|
|
152
156
|
|
|
@@ -157,11 +161,24 @@ actor.start();
|
|
|
157
161
|
|
|
158
162
|
[`definePlayer`](../api/@xmachines/play-xstate/index/functions/definePlayer.md) returns a **factory function**, not an actor. This is intentional: it lets you create multiple independent instances (e.g., one per test, one per user session) without re-processing the machine definition each time.
|
|
159
163
|
|
|
160
|
-
The factory accepts optional `input` (initial context overrides) and
|
|
164
|
+
The factory accepts an optional `input` (initial context overrides) and an optional second argument `{ snapshot }` (a persisted snapshot, for resumable sessions):
|
|
161
165
|
|
|
162
166
|
```typescript
|
|
167
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
168
|
+
import { setup, types } from "xstate";
|
|
169
|
+
|
|
170
|
+
const machine = setup({
|
|
171
|
+
schemas: {
|
|
172
|
+
input: types<{ userId: string } | undefined>(),
|
|
173
|
+
context: types<{ userId: string | null }>(),
|
|
174
|
+
},
|
|
175
|
+
}).createMachine({ context: ({ input }) => ({ userId: input?.userId ?? null }) });
|
|
176
|
+
|
|
177
|
+
const createPlayer = definePlayer({ machine });
|
|
178
|
+
|
|
163
179
|
const actor = createPlayer({ userId: "abc" }); // with input
|
|
164
|
-
const
|
|
180
|
+
const snapshot = actor.getPersistedSnapshot();
|
|
181
|
+
const restored = createPlayer(undefined, { snapshot }); // restored from snapshot
|
|
165
182
|
```
|
|
166
183
|
|
|
167
184
|
---
|
package/guides/atoms.md
CHANGED
|
@@ -48,6 +48,8 @@ In XMachines, `actor.state` is an `Atom<Snapshot>`. The actor updates it on ever
|
|
|
48
48
|
An atom notifies nobody when the new value compares equal to the old one. The default comparison is `Object.is`, and the `compare` option replaces it:
|
|
49
49
|
|
|
50
50
|
```typescript
|
|
51
|
+
import { createAtom } from "@xmachines/play-atom";
|
|
52
|
+
|
|
51
53
|
const point = createAtom(
|
|
52
54
|
{ x: 0, y: 0 },
|
|
53
55
|
{ compare: (previous, next) => previous.x === next.x && previous.y === next.y },
|
|
@@ -59,13 +61,18 @@ const point = createAtom(
|
|
|
59
61
|
`ReadonlyAtom<T>` derives a value from one or more other atoms. It recomputes only when its dependencies change, and it memoizes the result. The atom tracks each dependency for you: read another atom inside the function, and the edge exists.
|
|
60
62
|
|
|
61
63
|
```typescript
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
import { createAtom } from "@xmachines/play-atom";
|
|
65
|
+
import type { PlayerActor } from "@xmachines/play-xstate";
|
|
66
|
+
import type { AnyStateMachine } from "xstate";
|
|
67
|
+
|
|
68
|
+
declare const actor: PlayerActor<AnyStateMachine>;
|
|
69
|
+
|
|
70
|
+
// Whether the machine is in a state that shows the dashboard. The atom reads actor.state,
|
|
71
|
+
// so it recomputes on each snapshot, and it notifies only when the answer changes.
|
|
72
|
+
const onDashboard = createAtom(() => actor.state.get().matches("dashboard"));
|
|
66
73
|
```
|
|
67
74
|
|
|
68
|
-
In XMachines, `actor.currentRoute` is a `ReadonlyAtom<string | null>`. Router adapters read it to know which URL to push — they do not compute the route themselves. Route derivation stays in the actor where the business logic lives.
|
|
75
|
+
In XMachines, `actor.currentRoute` is such a derived `ReadonlyAtom<string | null>`. It derives the route template of the active branch from `actor.state`, and it then fills the params from the context. Router adapters read it to know which URL to push — they do not compute the route themselves. Route derivation stays in the actor where the business logic lives.
|
|
69
76
|
|
|
70
77
|
> **A computed atom with a subscriber is EAGER.** `@xstate/store` builds a subscription on an effect that READS the atom, so a write to a dependency evaluates the derivation at once, inside that write. A computed atom that nobody subscribes to stays lazy, and it computes on a read. Keep a derivation cheap and free of a side effect.
|
|
71
78
|
|
|
@@ -80,11 +87,15 @@ The actor writes exactly one atom for each transition — `state` — and `curre
|
|
|
80
87
|
A subscriber makes a computed atom eager, so the derivation runs inside the `set` of its dependency — before any observer sees anything. No subscriber can wrap that, so a derivation that something may watch must not throw:
|
|
81
88
|
|
|
82
89
|
```typescript
|
|
83
|
-
|
|
90
|
+
import { createAtom } from "@xmachines/play-atom";
|
|
91
|
+
|
|
92
|
+
const source = createAtom('{ "count": 0 }');
|
|
93
|
+
|
|
94
|
+
const derived = createAtom((previous?: unknown) => {
|
|
84
95
|
try {
|
|
85
|
-
return
|
|
96
|
+
return JSON.parse(source.get()) as unknown;
|
|
86
97
|
} catch (error) {
|
|
87
|
-
|
|
98
|
+
console.error(error);
|
|
88
99
|
return previous ?? null; // keep the last good value
|
|
89
100
|
}
|
|
90
101
|
});
|
|
@@ -97,6 +108,8 @@ const derived = createAtom((previous) => {
|
|
|
97
108
|
`createAtom` carries two signatures, and TypeScript must prove the argument is not a function before it reaches the writable one. For a concrete type it proves that at once. For a type parameter, or a conditional type over one, it cannot, so it picks the computed signature and returns a `ReadonlyAtom` that carries no `set`.
|
|
98
109
|
|
|
99
110
|
```typescript
|
|
111
|
+
import { createWritableAtom, type Atom } from "@xmachines/play-atom";
|
|
112
|
+
|
|
100
113
|
class Holder<T extends { value: unknown }> {
|
|
101
114
|
public readonly state: Atom<T["value"]>;
|
|
102
115
|
|
|
@@ -114,6 +127,10 @@ Use `createAtom` everywhere else.
|
|
|
114
127
|
Every atom carries `subscribe`. The observer runs **synchronously**, inside the `set` of the atom that changed, and it returns a subscription with `unsubscribe()`.
|
|
115
128
|
|
|
116
129
|
```typescript
|
|
130
|
+
import type { Routable } from "@xmachines/play-router";
|
|
131
|
+
|
|
132
|
+
declare const actor: Routable;
|
|
133
|
+
|
|
117
134
|
const subscription = actor.currentRoute.subscribe((route) => {
|
|
118
135
|
console.log("Route is now:", route);
|
|
119
136
|
});
|
|
@@ -124,6 +141,12 @@ subscription.unsubscribe();
|
|
|
124
141
|
The subscription is a plain object. To hold it with `using`, publish it with `asDisposable` of [`@xmachines/core/utils`](../api/@xmachines/core/README.md), and name `unsubscribe` as the release:
|
|
125
142
|
|
|
126
143
|
```typescript
|
|
144
|
+
import { asDisposable } from "@xmachines/core/utils";
|
|
145
|
+
import type { Routable } from "@xmachines/play-router";
|
|
146
|
+
|
|
147
|
+
declare const actor: Routable;
|
|
148
|
+
declare function render(route: string | null): void;
|
|
149
|
+
|
|
127
150
|
{
|
|
128
151
|
const plain = actor.currentRoute.subscribe((route) => render(route));
|
|
129
152
|
using subscription = asDisposable(plain, () => plain.unsubscribe());
|
|
@@ -145,6 +168,11 @@ For both reasons, application code should use [`watchAtom()`](../api/@xmachines/
|
|
|
145
168
|
[`@xmachines/play-atom`](../api/@xmachines/play-atom/README.md) exports [`watchAtom(atom, onValue)`](../api/@xmachines/play-atom/functions/watchAtom.md) as a lifecycle-safe wrapper around `subscribe`. It returns a cleanup function:
|
|
146
169
|
|
|
147
170
|
```typescript
|
|
171
|
+
import { watchAtom } from "@xmachines/play-atom";
|
|
172
|
+
import type { Routable } from "@xmachines/play-router";
|
|
173
|
+
|
|
174
|
+
declare const actor: Routable;
|
|
175
|
+
|
|
148
176
|
const stop = watchAtom(actor.currentRoute, (route) => {
|
|
149
177
|
console.log("Route is now:", route);
|
|
150
178
|
});
|
|
@@ -175,6 +203,13 @@ Keep the explicit call where the release outlives the scope that made it — a f
|
|
|
175
203
|
teardown reads, an entry in a `Set` of releases:
|
|
176
204
|
|
|
177
205
|
```typescript
|
|
206
|
+
import { watchAtom } from "@xmachines/play-atom";
|
|
207
|
+
import type { Routable } from "@xmachines/play-router";
|
|
208
|
+
|
|
209
|
+
declare const actor: Routable;
|
|
210
|
+
declare function render(route: string | null): void;
|
|
211
|
+
declare function onUnmount(teardown: () => void): void; // the hook of your framework
|
|
212
|
+
|
|
178
213
|
const stop = watchAtom(actor.currentRoute, render);
|
|
179
214
|
onUnmount(() => stop());
|
|
180
215
|
```
|
|
@@ -185,6 +220,11 @@ it, an exception releases it too, and the code carries no teardown:
|
|
|
185
220
|
|
|
186
221
|
```typescript
|
|
187
222
|
import { asDisposable } from "@xmachines/core/utils";
|
|
223
|
+
import { watchAtom } from "@xmachines/play-atom";
|
|
224
|
+
import type { Routable } from "@xmachines/play-router";
|
|
225
|
+
|
|
226
|
+
declare const actor: Routable;
|
|
227
|
+
declare function render(route: string | null): void;
|
|
188
228
|
|
|
189
229
|
{
|
|
190
230
|
using stop = asDisposable(watchAtom(actor.currentRoute, render));
|