@xmachines/docs 6.0.0 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/api/@xmachines/core/README.md +1 -1
- 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 +4 -4
- package/api/@xmachines/core/errors/classes/DisposeConflictError.md +4 -4
- 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 +1 -1
- 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/functions/assertNonNullable.md +1 -1
- package/api/@xmachines/play/index/type-aliases/PlayEvent.md +2 -2
- package/api/@xmachines/play-actor/README.md +1 -1
- package/api/@xmachines/play-actor/interfaces/ActorEvent.md +2 -2
- package/api/@xmachines/play-actor/interfaces/PlayActor.md +3 -3
- package/api/@xmachines/play-atom/README.md +2 -2
- package/api/@xmachines/play-atom/functions/watchAtom.md +1 -1
- package/api/@xmachines/play-atom/interfaces/AsyncAtomOptions.md +2 -2
- package/api/@xmachines/play-atom/interfaces/Atom.md +6 -6
- package/api/@xmachines/play-atom/interfaces/AtomObserver.md +4 -4
- package/api/@xmachines/play-atom/interfaces/AtomOptions.md +2 -2
- 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 +9 -14
- package/api/@xmachines/play-dom/classes/PlayRenderer.md +4 -4
- 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 +11 -11
- package/api/@xmachines/play-dom/interfaces/DomRenderContext.md +2 -2
- package/api/@xmachines/play-dom/interfaces/MountOptions.md +3 -3
- package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +14 -14
- package/api/@xmachines/play-dom/type-aliases/MountFn.md +1 -1
- package/api/@xmachines/play-dom-router/README.md +1 -1
- 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 +3 -3
- package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +14 -14
- package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +14 -14
- package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +8 -8
- package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-dom-router/interfaces/RoutableActor.md +4 -4
- package/api/@xmachines/play-dom-router/interfaces/RouteLookupContract.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouteMapOptions.md +4 -4
- package/api/@xmachines/play-dom-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-dom-router/interfaces/RouterConnection.md +6 -6
- package/api/@xmachines/play-dom-router/interfaces/VanillaRouter.md +4 -4
- 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 +4 -4
- package/api/@xmachines/play-pattern/interfaces/KeyValueCache.md +3 -3
- package/api/@xmachines/play-pattern/interfaces/LiteralPart.md +3 -3
- package/api/@xmachines/play-pattern/interfaces/ParamPart.md +7 -7
- package/api/@xmachines/play-pattern/interfaces/ParseOptions.md +2 -2
- package/api/@xmachines/play-pattern/interfaces/ParsedPattern.md +12 -12
- package/api/@xmachines/play-pattern/interfaces/PatternParam.md +4 -4
- 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 +2 -2
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +7 -7
- package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +9 -9
- package/api/@xmachines/play-react-router/interfaces/RoutableActor.md +4 -4
- package/api/@xmachines/play-react-router/interfaces/RouteMapOptions.md +4 -4
- package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +3 -3
- 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 +7 -8
- 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/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 +3 -3
- 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 +3 -3
- package/api/@xmachines/play-router/index/interfaces/BuildPlayRouteEventOptions.md +4 -4
- package/api/@xmachines/play-router/index/interfaces/CompileOptions.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/FrameworkParamsSource.md +7 -7
- package/api/@xmachines/play-router/index/interfaces/KeyValueCache.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/LocationLike.md +3 -3
- package/api/@xmachines/play-router/index/interfaces/MountableRouterBridge.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/OpenProviderBridgeArgs.md +8 -8
- package/api/@xmachines/play-router/index/interfaces/ParseOptions.md +2 -2
- package/api/@xmachines/play-router/index/interfaces/ParsedPattern.md +12 -12
- package/api/@xmachines/play-router/index/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-router/index/interfaces/PlayRouterProviderBaseProps.md +9 -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 +3 -3
- package/api/@xmachines/play-router/index/interfaces/RoutableActor.md +4 -4
- package/api/@xmachines/play-router/index/interfaces/RouteInfo.md +8 -8
- package/api/@xmachines/play-router/index/interfaces/RouteMapOptions.md +4 -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 +12 -15
- package/api/@xmachines/play-router/index/interfaces/RouteTree.md +5 -5
- 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 +5 -5
- package/api/@xmachines/play-router/index/interfaces/RouterConnection.md +6 -6
- package/api/@xmachines/play-router/index/interfaces/SplitLocation.md +5 -5
- 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/functions/createRouteMap.md +1 -1
- package/api/@xmachines/play-router/xstate/functions/extractMachineRoutes.md +1 -1
- 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 +1 -4
- package/api/@xmachines/play-solid/functions/defineRegistry.md +5 -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/ComponentContext.md +9 -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 +1 -1
- 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/variables/schema.md +35 -54
- package/api/@xmachines/play-solid-router/README.md +2 -2
- package/api/@xmachines/play-solid-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +8 -8
- package/api/@xmachines/play-solid-router/functions/createPlayRouterProvider.md +1 -1
- package/api/@xmachines/play-solid-router/interfaces/PlayActor.md +3 -3
- package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +9 -9
- package/api/@xmachines/play-solid-router/interfaces/RoutableActor.md +4 -4
- package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +4 -4
- package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +3 -3
- 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 +2 -2
- 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/BaseComponentProps.md +10 -8
- package/api/@xmachines/play-svelte/interfaces/ComponentContext.md +10 -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 +1 -1
- 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 +3 -3
- package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +8 -8
- package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-svelte-spa-router/interfaces/RoutableActor.md +4 -4
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +4 -4
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterConnection.md +6 -6
- package/api/@xmachines/play-svelte-spa-router/interfaces/WindowLike.md +3 -3
- package/api/@xmachines/play-sveltekit-router/README.md +1 -1
- package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-sveltekit-router/classes/SvelteKitRouterBridge.md +7 -7
- package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-sveltekit-router/interfaces/BasePathOptions.md +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +8 -8
- 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 +4 -4
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +4 -4
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterConnection.md +6 -6
- package/api/@xmachines/play-tanstack-react-router/README.md +1 -1
- 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 +7 -7
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +9 -9
- package/api/@xmachines/play-tanstack-react-router/interfaces/RoutableActor.md +4 -4
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +4 -4
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +3 -3
- 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 +1 -1
- 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 +1 -1
- 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 +7 -7
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +9 -9
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RoutableActor.md +4 -4
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +4 -4
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +3 -3
- 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 +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/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 +3 -3
- package/api/@xmachines/play-url/index/interfaces/CompileOptions.md +3 -3
- package/api/@xmachines/play-url/index/interfaces/FrameworkParamsSource.md +7 -7
- package/api/@xmachines/play-url/index/interfaces/GroupPart.md +4 -4
- package/api/@xmachines/play-url/index/interfaces/KeyValueCache.md +3 -3
- package/api/@xmachines/play-url/index/interfaces/LiteralPart.md +3 -3
- package/api/@xmachines/play-url/index/interfaces/ParamPart.md +7 -7
- package/api/@xmachines/play-url/index/interfaces/ParseOptions.md +2 -2
- package/api/@xmachines/play-url/index/interfaces/ParsedPattern.md +12 -12
- package/api/@xmachines/play-url/index/interfaces/PatternParam.md +4 -4
- package/api/@xmachines/play-url/index/interfaces/ResolvedBasePath.md +3 -3
- package/api/@xmachines/play-url/index/interfaces/SplitLocation.md +5 -5
- 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 +53 -22
- package/api/@xmachines/play-view/errors/README.md +1 -0
- package/api/@xmachines/play-view/errors/classes/InvalidViewOutletError.md +204 -0
- package/api/@xmachines/play-view/errors/classes/ReadOnlyContextError.md +5 -5
- package/api/@xmachines/play-view/index/README.md +6 -0
- 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/composeViews.md +35 -0
- 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 +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/sameViewInputs.md +1 -1
- package/api/@xmachines/play-view/index/functions/toAtomState.md +1 -1
- package/api/@xmachines/play-view/index/functions/typedSpec.md +11 -11
- 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/ComposedView.md +16 -0
- package/api/@xmachines/play-view/index/interfaces/FailureLatch.md +3 -3
- package/api/@xmachines/play-view/index/interfaces/PlaySpec.md +12 -8
- 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/ViewMeta.md +25 -0
- package/api/@xmachines/play-view/index/interfaces/ViewOutlet.md +23 -0
- 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/ViewTree.md +15 -0
- package/api/@xmachines/play-view/index/interfaces/ViewTreeChild.md +14 -0
- package/api/@xmachines/play-view/index/interfaces/Viewable.md +4 -4
- 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 +3 -5
- 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 +8 -8
- package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +11 -11
- 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 +1 -1
- 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 +4 -4
- package/api/@xmachines/play-vue-router/index/classes/VueRouterBridge.md +7 -7
- package/api/@xmachines/play-vue-router/index/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-vue-router/index/interfaces/RoutableActor.md +4 -4
- package/api/@xmachines/play-vue-router/index/interfaces/RouteMapOptions.md +4 -4
- package/api/@xmachines/play-vue-router/index/interfaces/RouteMapping.md +3 -3
- 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 +24 -17
- 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 +7 -7
- 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/classes/PlayerActor.md +10 -10
- 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 +7 -7
- 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 +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 +12 -15
- 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 +2 -4
- package/api/@xmachines/shared/vite-aliases/README.md +7 -0
- package/api/@xmachines/shared/vite-aliases/functions/xmAliases.md +11 -5
- package/api/@xmachines/shared/vite-aliases/functions/xmBuildOutput.md +37 -0
- package/api/@xmachines/shared/vite-aliases/functions/xmBuildOutputFile.md +28 -0
- 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/vite-aliases/functions/xmTestTarget.md +26 -0
- package/api/@xmachines/shared/vite-aliases/type-aliases/XmTestTarget.md +15 -0
- package/api/@xmachines/shared/vitest/functions/defineXmBrowserConfig.md +1 -1
- package/api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md +5 -1
- package/api/@xmachines/shared/vitest/interfaces/XmBrowserConfigOptions.md +4 -4
- package/api/llms.txt +8 -4
- package/contributing/architecture.md +18 -8
- package/contributing/configuration.md +39 -6
- package/contributing/development.md +3 -1
- package/contributing/migrating-to-play-atom.md +1 -1
- package/contributing/testing.md +33 -4
- package/examples/@xmachines/play-dom-demo/functions/createAuthActionHandlers.md +9 -9
- 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 +15 -15
- package/examples/@xmachines/play-react-demo/functions/createAuthActionHandlers.md +9 -9
- 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 +15 -15
- package/examples/@xmachines/play-solid-demo/functions/createAuthActionHandlers.md +9 -9
- 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 +190 -277
- package/examples/@xmachines/play-solid-demo/variables/demoComponents.md +17 -17
- package/examples/@xmachines/play-svelte-demo/functions/createAuthActionHandlers.md +9 -9
- package/examples/@xmachines/play-svelte-demo/type-aliases/AuthCatalog.md +1 -1
- package/examples/@xmachines/play-svelte-demo/variables/authCatalog.md +190 -277
- package/examples/@xmachines/play-svelte-demo/variables/demoComponents.md +15 -15
- package/examples/@xmachines/play-vue-demo/functions/createAuthActionHandlers.md +9 -9
- 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/README.md +1 -1
- package/examples/multi-router-integration.md +1 -1
- package/examples/routing-patterns.md +1 -1
- package/examples/traffic-light.md +1 -1
- package/guides/README.md +5 -4
- package/guides/actor-model.md +4 -4
- package/guides/atoms.md +4 -4
- package/guides/getting-started.md +2 -6
- package/guides/inspector.md +1 -1
- package/guides/routing.md +41 -45
- package/guides/state-machines.md +69 -4
- package/guides/views.md +347 -0
- package/package.json +1 -1
- package/rfc/play.md +24 -8
package/guides/views.md
ADDED
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
# Views in XMachines
|
|
2
|
+
|
|
3
|
+
A view of XMachines is a fact about a STATE, and not a fact about a component tree. A state node declares `meta.view`, the actor derives the current view from the active states, and a renderer turns that description into the UI of one framework.
|
|
4
|
+
|
|
5
|
+
This guide tells which state supplies the view, how a parent view holds the views of its substates, how a view reads the machine context, and when a renderer keeps the UI and when it builds the UI again. It also names the four rules that every one of the five renderers follows.
|
|
6
|
+
|
|
7
|
+
After you read it, you know where to put a value that the screen shows, why a write to `/context` throws, and why a draft in a form survives one event and not another.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## What problem a view spec solves
|
|
12
|
+
|
|
13
|
+
An application without a machine decides the screen inside its components: `if (user && !loading) return <Dashboard />`. Each such condition is a second copy of a decision, and the copies disagree when one of them changes.
|
|
14
|
+
|
|
15
|
+
The machine knows the state already. XMachines therefore puts the view ON the state, as data. The component tree holds no condition that selects a screen, and the machine holds no import of a framework.
|
|
16
|
+
|
|
17
|
+
The data is a spec of `@xmachines/json-render-core`: a flat map of elements, each with a component type, props and children. One spec renders in React, in Vue, in SolidJS, in Svelte and in the plain DOM, because each renderer reads the same grammar.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## The three parts of a view
|
|
22
|
+
|
|
23
|
+
| Part | Where it lives | What it says |
|
|
24
|
+
| -------- | ---------------------------------------------- | ----------------------------------------------------- |
|
|
25
|
+
| catalog | `defineCatalog(schema, …)`, one for each app | the component types and the actions that exist |
|
|
26
|
+
| spec | `meta.view` of a state node | WHICH components show in that state, with which data |
|
|
27
|
+
| registry | `defineRegistry(catalog, …)`, one per renderer | HOW each component renders, and what each action does |
|
|
28
|
+
|
|
29
|
+
The catalog is the vocabulary. It holds Zod schemas and no framework code. The spec uses the vocabulary. The registry binds each word to a component of one framework and to a handler of each action.
|
|
30
|
+
|
|
31
|
+
A machine and its specs therefore change never when you change the framework. You write a second registry.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Declaring a view
|
|
36
|
+
|
|
37
|
+
A `meta.view` is a [`ViewMeta`](../api/@xmachines/play-view/index/interfaces/ViewMeta.md). `root` names the first element, and `elements` holds every element by its key:
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
import { setup } from "xstate";
|
|
41
|
+
import { typedSpec } from "@xmachines/play-view";
|
|
42
|
+
|
|
43
|
+
const machine = setup({}).createMachine({
|
|
44
|
+
id: "app",
|
|
45
|
+
initial: "home",
|
|
46
|
+
states: {
|
|
47
|
+
home: {
|
|
48
|
+
meta: {
|
|
49
|
+
view: typedSpec({
|
|
50
|
+
root: "page",
|
|
51
|
+
elements: {
|
|
52
|
+
page: { type: "Page", props: { title: "Welcome" }, children: ["intro"] },
|
|
53
|
+
intro: { type: "Text", props: { text: "Choose a task." }, children: [] },
|
|
54
|
+
},
|
|
55
|
+
}),
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
XState types `meta` as `Record<string, unknown>`, so TypeScript checks nothing that you write there. `typedSpec` of [`@xmachines/play-view`](../api/@xmachines/play-view/README.md) gives the literal the type `ViewMeta` where you write it, and it does nothing at run time. The check of an excess property works on an inline literal only. For a spec in a variable, write `satisfies ViewMeta` at the literal.
|
|
63
|
+
|
|
64
|
+
A `ViewMeta` is what you WRITE. A [`PlaySpec`](../api/@xmachines/play-view/index/interfaces/PlaySpec.md) is what the actor DERIVES from it, and what a renderer receives. The derivation consumes `outlets`, it adds the machine context, and it stamps `viewKey` and `viewParts`.
|
|
65
|
+
|
|
66
|
+
The view is an OPTIONAL capability of the actor. Compose it with `withView` of [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md), from its `view` subpath:
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
|
|
70
|
+
import { withView } from "@xmachines/play-xstate/view";
|
|
71
|
+
|
|
72
|
+
const actor = definePlayer({ machine, actor: compose(PlayerActor, withView) })();
|
|
73
|
+
actor.start();
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The actor then holds `currentView`, a `ReadonlyAtom<PlaySpec | null>`. An application that renders no view composes no `withView`, and it installs no json-render.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Which state supplies the view
|
|
81
|
+
|
|
82
|
+
**The deepest active state that declares a view supplies it**, unless a parent composes it. A state that declares no view shows the view of its nearest ancestor that declares one. An ancestor view without `outlets` does not show, because the view of its descendant replaces it:
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
states: {
|
|
86
|
+
dashboard: {
|
|
87
|
+
meta: { view: dashboardView }, // shows in dashboard.overview
|
|
88
|
+
initial: "overview",
|
|
89
|
+
states: {
|
|
90
|
+
overview: {},
|
|
91
|
+
settings: { meta: { view: settingsView } }, // replaces dashboardView
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
When no active state declares a view, `currentView` holds `null`, and the renderer shows its `fallback` content.
|
|
98
|
+
|
|
99
|
+
A **parallel** state follows the same region as the route derivation: the first region whose active states declare a `meta.route`, or the first region when no region does. The view on the screen therefore belongs to the region of the URL. When that region holds no view, the view comes from another active region, so one region can own the URL and another region can own the view. Keep the routes in one region: the [State Machines](state-machines.md#a-layout-and-its-pages-outlets) guide shows what a second routed region does to the URL.
|
|
100
|
+
|
|
101
|
+
### A layout and its pages: `outlets`
|
|
102
|
+
|
|
103
|
+
A parent view that declares `outlets` shows itself AND the view of its active child. Each outlet names an element of the parent view, and the view of the child goes into that element:
|
|
104
|
+
|
|
105
|
+
```ts
|
|
106
|
+
const shell = typedSpec({
|
|
107
|
+
root: "shell",
|
|
108
|
+
state: { collapsed: false },
|
|
109
|
+
elements: {
|
|
110
|
+
shell: { type: "Shell", props: {}, children: ["title"] },
|
|
111
|
+
title: { type: "Heading", props: { text: "App" }, children: [] },
|
|
112
|
+
},
|
|
113
|
+
outlets: { "*": { element: "shell" } },
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
states: {
|
|
117
|
+
app: {
|
|
118
|
+
meta: { view: shell },
|
|
119
|
+
initial: "home",
|
|
120
|
+
states: {
|
|
121
|
+
home: { meta: { route: "/", view: homeView } },
|
|
122
|
+
search: { meta: { route: "/search", view: searchView } },
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
- The key of an outlet is the key of a child in `states`, or `"*"` for each active child that has no outlet of its own. A child with neither stays off the screen.
|
|
129
|
+
- A compound state fills one outlet with its active child. A parallel state fills one outlet for each region, in the order of `states`.
|
|
130
|
+
- `slot` names a named slot of the element. Omit it, and the renderer appends the child view to the `children` of the element.
|
|
131
|
+
- The view of a child is the deepest view below it. A child view can declare `outlets` of its own, for a nested layout.
|
|
132
|
+
- An outlet that names an element that its view does not hold throws `InvalidViewOutletError`. The actor reports it through `onError`, and it keeps the last valid view.
|
|
133
|
+
|
|
134
|
+
The derived spec is ONE flat spec. The keys of the outer view stay as you wrote them. Each key of a child view gets the id of its state as a prefix: the `root` element of the view of the state `app.search` becomes `app.search/root`. Two views therefore never collide. The [State Machines](state-machines.md#a-layout-and-its-pages-outlets) guide shows a parallel layout with a named slot.
|
|
135
|
+
|
|
136
|
+
### The view key
|
|
137
|
+
|
|
138
|
+
The derivation stamps the identity of the view on the spec, as `viewKey`. For a view without outlets, it is the id of the state that declares the view. For a composed view, it is the id of the outermost state that declares `outlets`, and `viewParts` lists the id of each composed state. The [renderer section](#when-the-renderer-keeps-the-ui) tells why the key matters. Never write `viewKey` or `viewParts` yourself: `typedSpec` refuses both, and the derivation overwrites them.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Reading the machine context
|
|
143
|
+
|
|
144
|
+
Each derived view carries the whole machine context in its `state`, under the key `context`:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
derived state = { ...meta.view.state, context: <the machine context> }
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
A spec reads the context through the ordinary state grammar of json-render. The same path works in a prop, in a `visible` condition, and in `repeat.statePath`:
|
|
151
|
+
|
|
152
|
+
```ts
|
|
153
|
+
elements: {
|
|
154
|
+
greeting: { type: "Text", props: { text: { $state: "/context/username" } }, children: [] },
|
|
155
|
+
tasks: {
|
|
156
|
+
type: "List",
|
|
157
|
+
props: {},
|
|
158
|
+
repeat: { statePath: "/context/tasks", key: "id" },
|
|
159
|
+
children: ["task"],
|
|
160
|
+
},
|
|
161
|
+
task: { type: "Text", props: { text: { $item: "title" } }, children: [] },
|
|
162
|
+
},
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
The routing capability writes the URL into the context: the params go to `context.params`, and the query goes to `context.query`. A spec therefore reads `/context/params/userId` for a value of the URL and `/context/username` for a value of the machine. The path tells the origin of each value, and a param can hide no field of the machine.
|
|
166
|
+
|
|
167
|
+
**The `/context` subtree is read-only to the spec.** A `$bindState` write or a `setState` write under `/context` throws `ReadOnlyContextError`, and the message names the path. The context changes through a machine event only. A handler that writes the whole snapshot back, with the `context` key unchanged, does not throw: the store ignores a write of an identical value.
|
|
168
|
+
|
|
169
|
+
`context` is a reserved key. When `meta.view.state` declares a top-level `context` key of its own, the derivation skips the projection for that view, the authored value wins, and a warning in development names the conflict. Rename the field.
|
|
170
|
+
|
|
171
|
+
CAUTION: the projection shows the WHOLE context to the client. A debug panel, an inspector and a validator read the view store, and each one is a client-side tool. Keep a secret out of the context.
|
|
172
|
+
|
|
173
|
+
Validate the DERIVED view, `actor.currentView.get()`, and not the raw `meta.view`. The `state` of the derived view describes the store as it is, so a tool such as `validateSpec` sees a spec that agrees with itself.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Two kinds of state
|
|
178
|
+
|
|
179
|
+
A view store holds two kinds of state, at two places, with two owners.
|
|
180
|
+
|
|
181
|
+
| Kind | Where in the store | Written by | Lives for |
|
|
182
|
+
| --------------- | --------------------- | ------------------------------------------------------------ | ------------- |
|
|
183
|
+
| ephemeral state | the root: `/username` | `spec.state` seeds it; `$bindState` and `setState` change it | one `viewKey` |
|
|
184
|
+
| domain state | `/context/…` | the machine, through an event | the actor |
|
|
185
|
+
|
|
186
|
+
Ephemeral state is the state of the screen: a draft in a field, an open panel, a selected tab. The machine does not need it until the user commits it.
|
|
187
|
+
|
|
188
|
+
Domain state is the state of the application. Each change of it is an event, so the inspector shows each change with its cause.
|
|
189
|
+
|
|
190
|
+
This login form uses both. The field binds to `/username`, and the submit sends the value to the machine:
|
|
191
|
+
|
|
192
|
+
```ts
|
|
193
|
+
view: typedSpec({
|
|
194
|
+
root: "form",
|
|
195
|
+
state: { username: "" },
|
|
196
|
+
elements: {
|
|
197
|
+
form: {
|
|
198
|
+
type: "Login",
|
|
199
|
+
props: { username: { $bindState: "/username" } },
|
|
200
|
+
children: [],
|
|
201
|
+
on: {
|
|
202
|
+
submit: { action: "login", params: { username: { $state: "/username" } } },
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
}),
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Keep high-frequency data in the ephemeral state or in a child actor, and not in the context. Each change of a top-level field of the context emits the view again. A keystroke is not a fact of the domain.
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## How an interaction becomes an event
|
|
214
|
+
|
|
215
|
+
A component emits a named event of json-render, such as `submit` or `press`. The `on` field of its element maps that name to an ACTION, with params that the renderer resolves from the store. The registry holds the handler of each action, and a handler of a domain action sends a machine event:
|
|
216
|
+
|
|
217
|
+
```ts
|
|
218
|
+
const registryResult = defineRegistry(catalog, {
|
|
219
|
+
components: { Login },
|
|
220
|
+
actions: {
|
|
221
|
+
login: async ({ username }) => actor.send({ type: "auth.login", username }),
|
|
222
|
+
},
|
|
223
|
+
});
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
The guards of the machine then decide. The renderer changes no state of the machine, and it selects no view. It sends, and it shows what the actor derives next.
|
|
227
|
+
|
|
228
|
+
The renderer implements four built-in actions over the ephemeral state: `setState`, `pushState`, `removeState` and `validateForm`. They need no handler in the registry. An `on` entry can hold an array of bindings, and the renderer runs them in order. For example, it sends the event, and then it clears the draft:
|
|
229
|
+
|
|
230
|
+
```ts
|
|
231
|
+
on: {
|
|
232
|
+
press: [
|
|
233
|
+
{ action: "addTask", params: { title: { $state: "/newTaskTitle" } } },
|
|
234
|
+
{ action: "setState", params: { statePath: "/newTaskTitle", value: "" } },
|
|
235
|
+
],
|
|
236
|
+
},
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
In an action param, `{ $item: "id" }` resolves to the JSON pointer of the item field, such as `/context/tasks/0/id`, and not to its value. The built-ins need the pointer to address the entry. A handler that needs the value reads it from the state that it receives as its third argument.
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## When the renderer keeps the UI
|
|
244
|
+
|
|
245
|
+
A renderer holds one view store for each view, and the `viewKey` decides its lifetime.
|
|
246
|
+
|
|
247
|
+
| The emission | What the renderer does |
|
|
248
|
+
| ------------------------------------- | --------------------------------------------------------------- |
|
|
249
|
+
| a new `viewKey` | it seeds a NEW store from `spec.state` |
|
|
250
|
+
| the same `viewKey` | it replaces `/context` in the live store, and it keeps the rest |
|
|
251
|
+
| the same `viewKey`, new `viewParts` | as above, and it writes each authored key that the store lacks |
|
|
252
|
+
| no `viewKey`, from a hand-built actor | it seeds a new store for each emission |
|
|
253
|
+
| a different actor | it discards the store with the actor |
|
|
254
|
+
| `null` | it shows the fallback, and it resolves no store |
|
|
255
|
+
|
|
256
|
+
With the same `viewKey`, every renderer keeps the DOM nodes, the focus and the ephemeral state. A context change therefore updates a list under a field that has the focus, and the draft in the field stays.
|
|
257
|
+
|
|
258
|
+
With a new `viewKey`, the ephemeral state starts again from `spec.state`. Two sibling states that each declare a view therefore reset a draft on each transition between them, also when their two specs are equal.
|
|
259
|
+
|
|
260
|
+
A parent keeps the ephemeral state across a move between its children in one of two ways:
|
|
261
|
+
|
|
262
|
+
- **Declare the view on the parent**, and no view on the children. The `viewKey` stays the id of the parent.
|
|
263
|
+
- **Declare `outlets` on the parent.** The `viewKey` stays the id of the parent, and each child still shows its own view. A change of the page keeps the store of the layout, so the `collapsed` value of the [layout above](#a-layout-and-its-pages-outlets) does not change.
|
|
264
|
+
|
|
265
|
+
In a composed view, all the views of one layout share ONE store. The first time that a page shows, the renderer writes each key of its authored `state` that the store does not hold. A page that comes back finds the values that it left. Two pages that declare the same key therefore share one value: give each page its own keys. When two composed views declare the same key, the outer view wins, and a warning names the key.
|
|
266
|
+
|
|
267
|
+
`currentView` also emits only on a real change of the view on the screen. An event that changes no context field and moves to no other view keeps the previous reference, and no subscriber runs. The gate compares the top-level fields of the context. It does not enter a value, so a new object in a field emits again, also when its contents are equal.
|
|
268
|
+
|
|
269
|
+
In the **controlled mode**, you give the provider a `store`. The provider then ignores `spec.state`, and you own the seed and the lifetime of that store. The renderer still owns `/context`, and it refreshes the subtree in your store on each emission.
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## When a view fails
|
|
274
|
+
|
|
275
|
+
A failure of the DERIVATION stays inside the actor. `currentView` catches it, it keeps the last valid view, and it reports the error to the `onError` hook of the actor in a microtask. The transition continues for every other observer.
|
|
276
|
+
|
|
277
|
+
A failure of the RENDER stays inside the provider. When a component throws, or the store does not resolve, the provider shows its `fallback` and it calls its own `onError` prop:
|
|
278
|
+
|
|
279
|
+
| Renderer | The `onError` prop of the provider |
|
|
280
|
+
| ----------------------------------------------------------------- | ---------------------------------- |
|
|
281
|
+
| [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | `(error, info, reset) => void` |
|
|
282
|
+
| the four other renderers | `(error, reset) => void` |
|
|
283
|
+
|
|
284
|
+
The provider reports one failure one time for one set of inputs — the actor, the view and the store — and not one time for each render. A new emission, or a call of `reset`, makes the next failure report again. Without `onError`, the provider writes the failure to `console.error`, so that no failure is silent. A handler that throws does not break the containment: the provider writes that failure to `console.error` too.
|
|
285
|
+
|
|
286
|
+
`onRenderError` receives the failure of one catalog component, with the name of the component, and it replaces every handler of `defineRegistry`.
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## The view invariants
|
|
291
|
+
|
|
292
|
+
### 1. The machine selects the view. The renderer never does
|
|
293
|
+
|
|
294
|
+
The renderer reads `currentView` and shows it. No component decides which screen shows. A condition that selects a screen belongs in a state and its guards.
|
|
295
|
+
|
|
296
|
+
### 2. `/context` is read-only to the spec
|
|
297
|
+
|
|
298
|
+
A spec reads the machine context, and it writes it never. The store throws `ReadOnlyContextError` for a write, and the machine changes the context through an event. The renderer refreshes the subtree through a store below the guard, so the rule binds the spec and not the machinery.
|
|
299
|
+
|
|
300
|
+
### 3. The `viewKey` decides the life of the ephemeral state
|
|
301
|
+
|
|
302
|
+
The same key keeps the store, and a new key seeds a new one. Put a view, or a layout with `outlets`, on the state whose lifetime the ephemeral state must have.
|
|
303
|
+
|
|
304
|
+
### 4. A renderer reads `currentView` and `send`, and nothing else
|
|
305
|
+
|
|
306
|
+
A provider takes a `ViewActor`: the actor contract and the `Viewable` capability. It names no engine and no router. The five renderers read no router package, and the routers read no view package. The two halves meet in the application only.
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## Which renderer to use
|
|
311
|
+
|
|
312
|
+
| Renderer | Mount |
|
|
313
|
+
| ------------------------------------------------------------------- | ---------------------------------------------- |
|
|
314
|
+
| [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | `<PlayUIProvider>` around `<PlayRenderer />` |
|
|
315
|
+
| [`@xmachines/play-vue`](../api/@xmachines/play-vue/README.md) | `<PlayUIProvider>` around `<PlayRenderer />` |
|
|
316
|
+
| [`@xmachines/play-solid`](../api/@xmachines/play-solid/README.md) | `<PlayUIProvider>` around `<PlayRenderer />` |
|
|
317
|
+
| [`@xmachines/play-svelte`](../api/@xmachines/play-svelte/README.md) | `<PlayUIProvider>` around `<PlayRenderer />` |
|
|
318
|
+
| [`@xmachines/play-dom`](../api/@xmachines/play-dom/README.md) | `createPlayUI(registryResult)(actor, element)` |
|
|
319
|
+
|
|
320
|
+
Each one exports `schema` for `defineCatalog`, and `defineRegistry` for its own components. `PlayUIProvider` takes the `actor`, the `registryResult`, and the optional `store`, `fallback`, `onError` and `onRenderError`. The [Getting Started](getting-started.md#connecting-a-view-renderer) guide shows a complete mount for each framework.
|
|
321
|
+
|
|
322
|
+
[`@xmachines/play-view`](../api/@xmachines/play-view/README.md) holds the part that the five share: the store lifecycle, the `/context` guard and the report rules. A shared contract suite runs the same scenarios against each renderer, so the five agree on what a viewer sees.
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## Summary
|
|
327
|
+
|
|
328
|
+
| Question | Answer |
|
|
329
|
+
| ----------------------------------------- | ------------------------------------------------------------------- |
|
|
330
|
+
| Where does a view come from? | `meta.view` of the deepest active state that declares one |
|
|
331
|
+
| How does a layout show its page? | The layout declares `outlets`, and the page view goes into one |
|
|
332
|
+
| What shows when no state declares a view? | The `fallback` of the provider |
|
|
333
|
+
| How does a spec read the machine context? | `{ $state: "/context/…" }`, in a prop, a condition or a repeat |
|
|
334
|
+
| Can a spec write the context? | No. Send the actor an event |
|
|
335
|
+
| Where does a draft go? | In `spec.state`, at the root of the store, with `$bindState` |
|
|
336
|
+
| When does a draft reset? | When the `viewKey` changes: the outermost state of the view changes |
|
|
337
|
+
| Which side selects the screen? | The machine, in every renderer |
|
|
338
|
+
| Who reports a failure of a render? | The provider, one time, through its `onError` |
|
|
339
|
+
|
|
340
|
+
## See also
|
|
341
|
+
|
|
342
|
+
- [State Machines](state-machines.md) — how `meta.route` and `meta.view` sit on a state node
|
|
343
|
+
- [Routing](routing.md) — the other half, and the same rule of a single active branch
|
|
344
|
+
- [Atoms](atoms.md) — the primitive under `currentView`
|
|
345
|
+
- [The Actor Model](actor-model.md) — why the machine holds no framework import
|
|
346
|
+
- [Form validation](../examples/form-validation.md) — a worked login form, with `$bindState` and a guard
|
|
347
|
+
- [@xmachines/play-view](../api/@xmachines/play-view/README.md) — API reference
|
package/package.json
CHANGED
package/rfc/play.md
CHANGED
|
@@ -195,6 +195,20 @@ export interface PlaySpec extends Spec {
|
|
|
195
195
|
// authored): providers key their store lifecycle on it — changed key
|
|
196
196
|
// reseeds the store, unchanged key refreshes /context in place.
|
|
197
197
|
viewKey?: string;
|
|
198
|
+
|
|
199
|
+
// Stamped on a composed view: the ids of the composed states. viewKey
|
|
200
|
+
// stays the id of the outermost view, so a change of a substate keeps
|
|
201
|
+
// the store and seeds only the keys that it lacks.
|
|
202
|
+
viewParts?: readonly string[];
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// What an author writes in meta.view. The derivation turns it into a
|
|
206
|
+
// PlaySpec, so no renderer receives this type.
|
|
207
|
+
export interface ViewMeta extends Spec {
|
|
208
|
+
// The element (and the optional named slot) that receives the view of
|
|
209
|
+
// each active child, keyed by the child state key or "*". The derivation
|
|
210
|
+
// consumes it.
|
|
211
|
+
outlets?: Record<string, { element: string; slot?: string }>;
|
|
198
212
|
}
|
|
199
213
|
|
|
200
214
|
export interface Viewable {
|
|
@@ -241,6 +255,7 @@ Wraps XState v5 to satisfy the `PlayActor` contract. Provides the primary API fo
|
|
|
241
255
|
**Responsibilities:**
|
|
242
256
|
|
|
243
257
|
- Derive `currentRoute` and `currentView` from active state node metadata
|
|
258
|
+
- Compose the view of a parent state that declares `outlets` with the views of its active substates, so the state tree decides the layout
|
|
244
259
|
- Manage atom lifecycle (create on start, dispose on stop)
|
|
245
260
|
- Support snapshot restore for resumable sessions
|
|
246
261
|
- Provide XState DevTools compatibility
|
|
@@ -348,18 +363,19 @@ Each adapter extends `RouterBridgeBase` and implements the three abstract method
|
|
|
348
363
|
|
|
349
364
|
Each view renderer provides a `PlayRenderer` component that passively observes the actor's `currentView` atom and projects the JSON spec into framework-native components via `@json-render`.
|
|
350
365
|
|
|
351
|
-
| Package
|
|
352
|
-
|
|
|
353
|
-
| [`@xmachines/play-react`](../api/@xmachines/play-react/README.md)
|
|
354
|
-
| [`@xmachines/play-vue`](../api/@xmachines/play-vue/README.md)
|
|
355
|
-
| [`@xmachines/play-solid`](../api/@xmachines/play-solid/README.md)
|
|
356
|
-
| [`@xmachines/play-
|
|
366
|
+
| Package | Framework | JSON-Render Backend |
|
|
367
|
+
| ------------------------------------------------------------------- | ----------- | ------------------------------- |
|
|
368
|
+
| [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | React | `@xmachines/json-render-react` |
|
|
369
|
+
| [`@xmachines/play-vue`](../api/@xmachines/play-vue/README.md) | Vue 3 | `@xmachines/json-render-vue` |
|
|
370
|
+
| [`@xmachines/play-solid`](../api/@xmachines/play-solid/README.md) | SolidJS | `@xmachines/json-render-solid` |
|
|
371
|
+
| [`@xmachines/play-svelte`](../api/@xmachines/play-svelte/README.md) | Svelte 5 | `@xmachines/json-render-svelte` |
|
|
372
|
+
| [`@xmachines/play-dom`](../api/@xmachines/play-dom/README.md) | Vanilla DOM | `@xmachines/json-render-dom` |
|
|
357
373
|
|
|
358
374
|
**Shared Architecture (all renderers):**
|
|
359
375
|
|
|
360
376
|
1. Subscribe to `actor.currentView` atom
|
|
361
|
-
2. Resolve a `StateStore
|
|
362
|
-
3.
|
|
377
|
+
2. Resolve a `StateStore`: the external store of the caller, or a new `@xstate/store` store for each `viewKey`
|
|
378
|
+
3. Give the action handlers of the registry to the `ActionProvider`. A handler of `defineRegistry` sends the machine event with `actor.send()`
|
|
363
379
|
4. Render `spec` through the framework's `Renderer` with a `registry` (defined via `defineRegistry`)
|
|
364
380
|
|
|
365
381
|
**[`@xmachines/play-react`](../api/@xmachines/play-react/README.md) exports (representative):**
|