@xmachines/docs 6.1.0 → 7.0.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 +4 -4
- 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 +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 +10 -5
- 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 +9 -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 +16 -4
- 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 +131 -48
- 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 +3 -3
- 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 +41 -5
- 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 +57 -18
- 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 +6 -6
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +4 -4
- 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 +5 -5
- 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 +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 +73 -16
- 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 +5 -5
- 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 +6 -6
- 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 +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 +5 -5
- 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 +21 -5
- 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 +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 +18 -10
- 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 +5 -5
- 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 +9 -5
- 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 +65 -13
- 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 +3 -3
- package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +13 -16
- 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-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 +34 -16
- 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 +5 -3
- 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 +45 -11
- 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 +45 -19
- package/api/@xmachines/play-view/errors/README.md +1 -0
- package/api/@xmachines/play-view/errors/classes/InvalidViewOutletError.md +6 -6
- package/api/@xmachines/play-view/errors/classes/ReadOnlyContextError.md +5 -5
- 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 +5 -5
- package/api/@xmachines/play-view/index/interfaces/ComposedView.md +5 -5
- package/api/@xmachines/play-view/index/interfaces/HandlerFactory.md +19 -0
- package/api/@xmachines/play-view/index/interfaces/PlaySpec.md +3 -3
- 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 +2 -2
- package/api/@xmachines/play-view/index/interfaces/ViewMeta.md +2 -2
- package/api/@xmachines/play-view/index/interfaces/ViewOutlet.md +3 -3
- 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 +4 -4
- package/api/@xmachines/play-view/index/interfaces/ViewTreeChild.md +3 -3
- package/api/@xmachines/play-view/index/interfaces/Viewable.md +2 -2
- 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 +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/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 +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 +64 -12
- 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 +5 -5
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteData.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteDataResolver.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMachineConfig.md +4 -4
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteMetadata.md +1 -1
- package/api/@xmachines/play-xstate/with-routing/type-aliases/RouteStateNode.md +5 -5
- package/api/@xmachines/play-xstate/with-view/functions/withView.md +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 +2 -2
- 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 +4 -4
- package/contributing/architecture.md +88 -53
- package/contributing/configuration.md +20 -12
- package/contributing/deployment.md +3 -3
- package/contributing/development.md +28 -3
- package/contributing/migrating-to-play-atom.md +10 -4
- 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 +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-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 +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-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 +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 +1 -1
- package/examples/@xmachines/play-solid-demo/variables/demoComponents.md +15 -15
- 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 +9 -9
- 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 +15 -15
- 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 +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/@xmachines/play-vue-router-demo/README.md +3 -3
- package/examples/form-validation.md +17 -13
- package/examples/multi-router-integration.md +268 -147
- package/examples/routing-patterns.md +43 -8
- package/examples/traffic-light.md +6 -2
- package/guides/actor-model.md +37 -19
- package/guides/atoms.md +48 -8
- package/guides/getting-started.md +63 -13
- package/guides/inspector.md +71 -11
- package/guides/routing.md +4 -1
- package/guides/state-machines.md +35 -13
- package/guides/views.md +34 -14
- package/package.json +6 -6
- package/rfc/play.md +31 -13
- 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
package/guides/inspector.md
CHANGED
|
@@ -27,7 +27,9 @@ Create an inspector and hand its `inspect` observer to [`definePlayer`](../api/@
|
|
|
27
27
|
```typescript
|
|
28
28
|
import { createBrowserInspector } from "@statelyai/inspect";
|
|
29
29
|
import { definePlayer } from "@xmachines/play-xstate";
|
|
30
|
-
import {
|
|
30
|
+
import type { AnyStateMachine } from "xstate";
|
|
31
|
+
|
|
32
|
+
declare const appMachine: AnyStateMachine; // your machine
|
|
31
33
|
|
|
32
34
|
const { inspect } = createBrowserInspector();
|
|
33
35
|
|
|
@@ -45,6 +47,12 @@ actor.start();
|
|
|
45
47
|
That is the whole integration. [`PlayerOptions.inspect`](../api/@xmachines/play-xstate/index/interfaces/PlayerOptions.md) is forwarded verbatim to XState's `createActor`, so anything XState accepts there is accepted here — a function, or an observer object with a `next` method:
|
|
46
48
|
|
|
47
49
|
```typescript
|
|
50
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
51
|
+
import type { AnyStateMachine, InspectionEvent } from "xstate";
|
|
52
|
+
|
|
53
|
+
declare const machine: AnyStateMachine; // your machine
|
|
54
|
+
declare const sink: { write(event: InspectionEvent): void }; // your log
|
|
55
|
+
|
|
48
56
|
// Function form — the common case
|
|
49
57
|
definePlayer({ machine, options: { inspect: (event) => console.log(event.type) } });
|
|
50
58
|
|
|
@@ -61,6 +69,13 @@ Two properties of the attachment point matter in practice.
|
|
|
61
69
|
**It is configured on the factory, not on the instance.** `definePlayer({ machine, options })` returns a factory; `options.inspect` belongs to that configuration, and every actor the factory creates reports to the same observer. The factory's per-call options bag carries `snapshot` for restoring persisted state and nothing else — there is no per-instance `inspect` override. When one factory produces several live actors (multi-user scenarios, SSR, tests), demultiplex the stream by root instead:
|
|
62
70
|
|
|
63
71
|
```typescript
|
|
72
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
73
|
+
import type { AnyStateMachine, InspectionEvent } from "xstate";
|
|
74
|
+
|
|
75
|
+
declare const machine: AnyStateMachine; // your machine
|
|
76
|
+
|
|
77
|
+
const inspect = (event: InspectionEvent) => console.log(event.type);
|
|
78
|
+
|
|
64
79
|
const createPlayer = definePlayer({ machine, options: { inspect } });
|
|
65
80
|
|
|
66
81
|
const alice = createPlayer({ userId: "alice" });
|
|
@@ -87,7 +102,7 @@ The event types are XState's: `@xstate.actor` when an actor registers, `@xstate.
|
|
|
87
102
|
|
|
88
103
|
`@xstate.actor` fires from _inside_ the actor's constructor. The `actorRef` it carries is a real `PlayerActor`, but a mid-construction one: `state`, `currentRoute`, `currentView` and `initialRoute` do not exist yet, and reading them there throws — XState itself refuses to read a snapshot in that window.
|
|
89
104
|
|
|
90
|
-
```typescript
|
|
105
|
+
```typescript fragment
|
|
91
106
|
const inspect = (event: InspectionEvent) => {
|
|
92
107
|
if (event.type === "@xstate.actor") {
|
|
93
108
|
// ❌ throws — the atoms are not assigned yet
|
|
@@ -109,11 +124,17 @@ Capture the reference during construction if you need it, and read the atoms fro
|
|
|
109
124
|
An inspector that is only created when the user asks for it — a dev-tools toggle, a keyboard shortcut, a debug panel button — cannot be passed to `definePlayer`, which ran at module scope long before the click. Pass a forwarding function instead, so the attachment point is fixed at factory time while the destination stays swappable:
|
|
110
125
|
|
|
111
126
|
```typescript
|
|
112
|
-
|
|
127
|
+
import { createBrowserInspector } from "@statelyai/inspect";
|
|
128
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
129
|
+
import type { AnyStateMachine, InspectionEvent, Observer } from "xstate";
|
|
130
|
+
|
|
131
|
+
declare const appMachine: AnyStateMachine; // your machine
|
|
132
|
+
|
|
133
|
+
let current: Observer<InspectionEvent> | undefined;
|
|
113
134
|
|
|
114
135
|
const createPlayer = definePlayer({
|
|
115
136
|
machine: appMachine,
|
|
116
|
-
options: { inspect: (event) => current?.(event) },
|
|
137
|
+
options: { inspect: (event) => current?.next?.(event) },
|
|
117
138
|
});
|
|
118
139
|
|
|
119
140
|
// Later, from a click handler
|
|
@@ -135,6 +156,10 @@ There is a catch worth knowing before you ship it: events that arrive while `cur
|
|
|
135
156
|
|
|
136
157
|
```typescript
|
|
137
158
|
import { createWebSocketInspector } from "@statelyai/inspect";
|
|
159
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
160
|
+
import type { AnyStateMachine } from "xstate";
|
|
161
|
+
|
|
162
|
+
declare const appMachine: AnyStateMachine; // your machine
|
|
138
163
|
|
|
139
164
|
const { inspect } = createWebSocketInspector({ url: "ws://localhost:8080" });
|
|
140
165
|
|
|
@@ -155,22 +180,49 @@ pnpm --filter @xmachines/play-react-demo run dev
|
|
|
155
180
|
|
|
156
181
|
Click **Show Inspector** in the debug panel at the bottom of the page. The inspector opens in its own window with the machine already drawn and the session's history replayed, and it keeps updating as you log in, navigate, and log out.
|
|
157
182
|
|
|
158
|
-
The demos share one controller, `createDemoInspector()
|
|
183
|
+
The demos share one controller, `createDemoInspector()`, which each demo passes straight through to `definePlayer`. The controller lives in a private package of this repository, so you cannot install it. The block below shows the same wiring with the public API. It keeps each event from the creation of the actor, and it replays the events when the user opens the inspector:
|
|
159
184
|
|
|
160
185
|
```typescript
|
|
161
|
-
|
|
186
|
+
import { createBrowserInspector } from "@statelyai/inspect";
|
|
187
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
188
|
+
import type { AnyStateMachine, InspectionEvent, Observer } from "xstate";
|
|
189
|
+
|
|
190
|
+
declare const appMachine: AnyStateMachine; // your machine
|
|
191
|
+
|
|
192
|
+
const buffer: InspectionEvent[] = [];
|
|
193
|
+
let current: Observer<InspectionEvent> | undefined;
|
|
162
194
|
|
|
163
195
|
const actor = definePlayer({
|
|
164
|
-
machine:
|
|
165
|
-
options: {
|
|
196
|
+
machine: appMachine,
|
|
197
|
+
options: {
|
|
198
|
+
inspect: (event) => {
|
|
199
|
+
if (current) {
|
|
200
|
+
current.next?.(event);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
// Keep the last 500 events while nobody opens the inspector. A long session drops
|
|
204
|
+
// its oldest events, also the registration of the root actor, and the inspector
|
|
205
|
+
// then has no machine to draw. The demo controller pins each registration for
|
|
206
|
+
// that reason, and it costs more code.
|
|
207
|
+
buffer.push(event);
|
|
208
|
+
if (buffer.length > 500) buffer.shift();
|
|
209
|
+
},
|
|
210
|
+
},
|
|
166
211
|
})();
|
|
167
212
|
actor.start();
|
|
168
213
|
|
|
169
|
-
// The debug panel
|
|
170
|
-
|
|
214
|
+
// The click handler of the "Show Inspector" button of the debug panel
|
|
215
|
+
export function showInspector() {
|
|
216
|
+
if (current) return;
|
|
217
|
+
// The inspector holds these events until its window connects, and it drops the oldest
|
|
218
|
+
// past `maxDeferredEvents`. The limit leaves room for the events of the handshake, so
|
|
219
|
+
// the inspector keeps every event of the replay.
|
|
220
|
+
current = createBrowserInspector({ maxDeferredEvents: 1000 }).inspect;
|
|
221
|
+
for (const event of buffer.splice(0)) current.next?.(event);
|
|
222
|
+
}
|
|
171
223
|
```
|
|
172
224
|
|
|
173
|
-
The controller answers the late-opening problem from the previous section: it buffers serialized events from actor creation, pins the registration of every live root so it can never roll out of the bounded buffer, and flushes those buffers when the inspector window completes its handshake. Several machines can be alive together — one for each document a host has open — and the handshake replays each of them. That is a demo trade-off rather than a general recommendation — every transition pays serialization whether or not anyone ever opens the inspector — but it is what makes the button work at any point in a session. The shared package's own README, at `packages/play-actor/examples/shared/README.md` in this repository, documents the design in full.
|
|
225
|
+
The demo controller answers the late-opening problem from the previous section: it buffers serialized events from actor creation, pins the registration of every live root so it can never roll out of the bounded buffer, and flushes those buffers when the inspector window completes its handshake. Several machines can be alive together — one for each document a host has open — and the handshake replays each of them. That is a demo trade-off rather than a general recommendation — every transition pays serialization whether or not anyone ever opens the inspector — but it is what makes the button work at any point in a session. The shared package's own README, at `packages/play-actor/examples/shared/README.md` in this repository, documents the design in full.
|
|
174
226
|
|
|
175
227
|
---
|
|
176
228
|
|
|
@@ -179,6 +231,14 @@ The controller answers the late-opening problem from the previous section: it bu
|
|
|
179
231
|
**Cost.** Inspection serializes events. A `console.log` observer is cheap; a browser inspector posting every transition, and any buffering scheme layered on top, is not. Gate the inspector behind a development-only branch, and prefer letting the bundler drop it entirely:
|
|
180
232
|
|
|
181
233
|
```typescript
|
|
234
|
+
/// <reference types="vite/client" />
|
|
235
|
+
import { createBrowserInspector } from "@statelyai/inspect";
|
|
236
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
237
|
+
import type { AnyStateMachine } from "xstate";
|
|
238
|
+
|
|
239
|
+
declare const appMachine: AnyStateMachine; // your machine
|
|
240
|
+
|
|
241
|
+
// `import.meta.env.DEV` is the development flag of Vite
|
|
182
242
|
const options = import.meta.env.DEV ? { inspect: createBrowserInspector().inspect } : {};
|
|
183
243
|
|
|
184
244
|
const createPlayer = definePlayer({ machine: appMachine, options });
|
package/guides/routing.md
CHANGED
|
@@ -55,8 +55,11 @@ A **modifier** follows a param, a wildcard or a group:
|
|
|
55
55
|
| `*` | zero or more | matches |
|
|
56
56
|
|
|
57
57
|
```ts
|
|
58
|
+
import { createMachine } from "xstate";
|
|
59
|
+
|
|
58
60
|
const machine = createMachine({
|
|
59
61
|
id: "app",
|
|
62
|
+
initial: "home",
|
|
60
63
|
states: {
|
|
61
64
|
home: { meta: { route: "/" } },
|
|
62
65
|
profile: { meta: { route: "/profile/:userId" } },
|
|
@@ -184,7 +187,7 @@ CAUTION: a parallel state loses the position of its other regions when it is the
|
|
|
184
187
|
|
|
185
188
|
A state whose navigation must re-enter the domain too declares the flag for itself. Here the root runs its `exit` and `entry` actions on each navigation to `dashboard`:
|
|
186
189
|
|
|
187
|
-
```ts
|
|
190
|
+
```ts fragment
|
|
188
191
|
states: {
|
|
189
192
|
dashboard: { meta: { route: { path: "/dashboard", reenter: true } } },
|
|
190
193
|
},
|
package/guides/state-machines.md
CHANGED
|
@@ -33,7 +33,6 @@ const authSetup = setup({
|
|
|
33
33
|
types: {
|
|
34
34
|
context: {} as { username: string | null },
|
|
35
35
|
events: {} as { type: "auth.login"; username: string } | { type: "auth.logout" },
|
|
36
|
-
input: {} as undefined,
|
|
37
36
|
},
|
|
38
37
|
});
|
|
39
38
|
|
|
@@ -47,7 +46,8 @@ const authMachine = authSetup.createMachine({
|
|
|
47
46
|
"auth.login": {
|
|
48
47
|
target: "authenticated",
|
|
49
48
|
actions: authSetup.assign({
|
|
50
|
-
username: ({ event }) =>
|
|
49
|
+
username: ({ event }) =>
|
|
50
|
+
event.type === "auth.login" ? event.username : null,
|
|
51
51
|
}),
|
|
52
52
|
},
|
|
53
53
|
},
|
|
@@ -78,6 +78,7 @@ XMachines extends XState's `meta` field on each state node. This is where routin
|
|
|
78
78
|
|
|
79
79
|
```typescript
|
|
80
80
|
import { typedSpec } from "@xmachines/play-view";
|
|
81
|
+
import { setup } from "xstate";
|
|
81
82
|
|
|
82
83
|
const appMachine = setup({/* ... */}).createMachine({
|
|
83
84
|
id: "app",
|
|
@@ -126,6 +127,8 @@ const appMachine = setup({/* ... */}).createMachine({
|
|
|
126
127
|
|
|
127
128
|
The machine's whole context is available to every view through the **`/context` projection**: the derived spec's `state` carries `context: <machine context>`. Specs read it with ordinary state expressions — `{ $state: "/context/username" }` in props, `visible` conditions, or `repeat.statePath`. The subtree is **read-only**: context changes only through machine events, and a `$bindState`/`setState` write under `/context` throws. URL data lives at its own paths (`/context/params/…`, `/context/query/…`, written into context by `formatPlayRouteTransitions`), so a URL param can never shadow a machine-owned field. When validating specs with tools like `validateSpec`, validate the **derived** view (`actor.currentView.get()`) — its `state` honestly describes the store contents — not the raw `meta.view`. A context change re-emits the view with the same `viewKey`; providers respond by refreshing `/context` in the live store, not by remounting the UI.
|
|
128
129
|
|
|
130
|
+
**Give each state its own id, and do not use an array index as an id.** XState does not check that the ids of the states are unique, and a repeated id makes a `#id` target name two states. XMachines keys the route, the view and its store on the id of a state, so two states that share an id share one route entry, one store, and one key. An array index is a whole number from 0 to 2³² − 2 with no leading zero, such as `"42"`. JavaScript lists such a key first in every object that is keyed on ids, so the route of its state loses its place in the branch. [`@xmachines/play-xstate`](../api/@xmachines/play-xstate/README.md) writes one warning for each machine that breaks these rules.
|
|
131
|
+
|
|
129
132
|
**The machine is the single source of truth for both routing and views.** There is no separate route configuration file. There is no switch statement in a component deciding what to render based on the URL. The state machine encodes all of that.
|
|
130
133
|
|
|
131
134
|
### A layout and its pages: `outlets`
|
|
@@ -133,6 +136,11 @@ The machine's whole context is available to every view through the **`/context`
|
|
|
133
136
|
Without outlets, the deepest active state that declares a view wins, and a view on a parent state stays off the screen. Declare `outlets` in the view of the parent to show the parent view 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:
|
|
134
137
|
|
|
135
138
|
```typescript
|
|
139
|
+
import { typedSpec, type ViewMeta } from "@xmachines/play-view";
|
|
140
|
+
import { setup } from "xstate";
|
|
141
|
+
|
|
142
|
+
declare const menuView: ViewMeta, homeView: ViewMeta, searchView: ViewMeta; // your views
|
|
143
|
+
|
|
136
144
|
const shell = typedSpec({
|
|
137
145
|
root: "shell",
|
|
138
146
|
state: { collapsed: false },
|
|
@@ -166,11 +174,11 @@ const appMachine = setup({/* ... */}).createMachine({
|
|
|
166
174
|
- **The key of an outlet** is the key of a child state in `states`, or `"*"` for each active child that has no outlet of its own. A child with neither stays off the screen.
|
|
167
175
|
- **A compound state** fills one outlet with its active child. **A parallel state** fills one outlet for each region, in the order of `states`.
|
|
168
176
|
- **`slot`** names a named slot of the element. Omit it to append the child view to the `children` of the element. The component of the element renders the slot, as the renderer of your framework describes.
|
|
169
|
-
- **The view of a child** is the deepest view in its active subtree, and a child view can declare `outlets` of its own for a nested layout. A parallel state without outlets shows the region of the
|
|
177
|
+
- **The view of a child** is the deepest view in its active subtree, and a child view can declare `outlets` of its own for a nested layout. A parallel state without outlets shows the region of the routes when that region has a view, and its first region that has a view otherwise. The region of the routes keeps the screen while it sits in a state without a route of its own.
|
|
170
178
|
|
|
171
179
|
The derived spec holds the elements of every composed view. The keys of the outer view stay as you wrote them, and each key of a child view gets the id of its state as a prefix, for example `app.page.search/root`, so two views never collide.
|
|
172
180
|
|
|
173
|
-
The `viewKey` of a composed view is the id of the outermost state that declares `outlets`. A change of the page therefore keeps the store of the layout: the `collapsed` value in the example above does not change. The first time that a page shows, the provider writes the keys of its authored `state` that the store does not hold. A page that comes back finds the values that it left. All the pages of one layout share one store, so two pages that declare the same key share one value: give each page its own keys. When two composed views declare the same state key, the outer view wins
|
|
181
|
+
The `viewKey` of a composed view is the id of the outermost state that declares `outlets`. A change of the page therefore keeps the store of the layout: the `collapsed` value in the example above does not change. The first time that a page shows, the provider writes the keys of its authored `state` that the store does not hold. A page that comes back finds the values that it left. All the pages of one layout share one store, so two pages that declare the same key share one value: give each page its own keys. When two composed views declare the same state key, the outer view wins. The library writes one warning for each layout that names every key that two of its views declare, also for two pages that are never on the screen together.
|
|
174
182
|
|
|
175
183
|
An outlet that names an element that its view does not hold throws `InvalidViewOutletError`. The actor reports it through its `onError` option, and it keeps the last good view.
|
|
176
184
|
|
|
@@ -198,7 +206,7 @@ A URL path has one hierarchy, and it cannot hold the branches of two regions. Ke
|
|
|
198
206
|
|
|
199
207
|
For routing to work, the machine must respond to `play.route` events (sent by router bridges when the user navigates). Writing these transitions by hand is mechanical:
|
|
200
208
|
|
|
201
|
-
```typescript
|
|
209
|
+
```typescript fragment
|
|
202
210
|
// Without formatPlayRouteTransitions — verbose and repetitive
|
|
203
211
|
states: {
|
|
204
212
|
home: {
|
|
@@ -218,6 +226,7 @@ states: {
|
|
|
218
226
|
|
|
219
227
|
```typescript
|
|
220
228
|
import { formatPlayRouteTransitions } from "@xmachines/play-xstate/routing";
|
|
229
|
+
import { setup } from "xstate";
|
|
221
230
|
|
|
222
231
|
const appMachine = setup({/* ... */}).createMachine(
|
|
223
232
|
formatPlayRouteTransitions({
|
|
@@ -234,7 +243,7 @@ const appMachine = setup({/* ... */}).createMachine(
|
|
|
234
243
|
|
|
235
244
|
[`formatPlayRouteTransitions`](../api/@xmachines/play-xstate/with-routing/functions/formatPlayRouteTransitions.md) inspects all state nodes with a `meta.route` and generates the corresponding `play.route` guard transitions. The machine's context must include `params` and `query` fields (populated by the router bridge when params or query strings are present):
|
|
236
245
|
|
|
237
|
-
```typescript
|
|
246
|
+
```typescript fragment
|
|
238
247
|
types: {
|
|
239
248
|
context: {} as {
|
|
240
249
|
params: Record<string, string>;
|
|
@@ -252,7 +261,12 @@ types: {
|
|
|
252
261
|
Guards are the mechanism by which the actor controls whether a transition occurs. They are pure functions of `{ context, event }` that return a boolean.
|
|
253
262
|
|
|
254
263
|
```typescript
|
|
264
|
+
import { setup } from "xstate";
|
|
265
|
+
|
|
255
266
|
const authSetup = setup({
|
|
267
|
+
types: {
|
|
268
|
+
context: {} as { isAuthenticated: boolean; role: "user" | "admin" },
|
|
269
|
+
},
|
|
256
270
|
guards: {
|
|
257
271
|
isAuthenticated: ({ context }) => context.isAuthenticated,
|
|
258
272
|
isAdmin: ({ context }) => context.role === "admin",
|
|
@@ -280,7 +294,7 @@ Each combinator resolves a guard NAME against the `guards` of `setup()`, so a na
|
|
|
280
294
|
|
|
281
295
|
Context is the machine's persistent data store. It survives transitions and can be read and updated by actions:
|
|
282
296
|
|
|
283
|
-
```typescript
|
|
297
|
+
```typescript fragment
|
|
284
298
|
// Context is defined in setup({ types })
|
|
285
299
|
types: {
|
|
286
300
|
context: {} as {
|
|
@@ -307,22 +321,30 @@ Context is accessed in guards, actions, and when computing routes or views. It i
|
|
|
307
321
|
A snapshot is a point-in-time serialisation of the machine's current state and context. XState produces snapshots in a JSON-compatible format:
|
|
308
322
|
|
|
309
323
|
```typescript
|
|
324
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
325
|
+
import type { AnyStateMachine } from "xstate";
|
|
326
|
+
|
|
327
|
+
declare const machine: AnyStateMachine; // your machine
|
|
328
|
+
|
|
329
|
+
const createPlayer = definePlayer({ machine });
|
|
330
|
+
const actor = createPlayer();
|
|
331
|
+
actor.start();
|
|
332
|
+
|
|
310
333
|
const snapshot = actor.getSnapshot();
|
|
311
334
|
// snapshot.value → current state node name, e.g. "dashboard"
|
|
312
335
|
// snapshot.context → current context object
|
|
313
336
|
|
|
314
|
-
//
|
|
337
|
+
// Serialize and stop
|
|
338
|
+
const saved = JSON.stringify(actor.getPersistedSnapshot());
|
|
315
339
|
actor.stop();
|
|
316
|
-
const saved = JSON.stringify(snapshot);
|
|
317
340
|
|
|
318
341
|
// Restore
|
|
319
|
-
const restored = JSON.parse(saved);
|
|
320
|
-
|
|
321
|
-
actor.start();
|
|
342
|
+
const restored = createPlayer(undefined, { snapshot: JSON.parse(saved) });
|
|
343
|
+
restored.start();
|
|
322
344
|
// Actor resumes from where it left off
|
|
323
345
|
```
|
|
324
346
|
|
|
325
|
-
[`definePlayer`](../api/@xmachines/play-xstate/index/functions/definePlayer.md) accepts an optional
|
|
347
|
+
The factory that [`definePlayer`](../api/@xmachines/play-xstate/index/functions/definePlayer.md) returns accepts an optional second argument, `{ snapshot }`, for this purpose. Serialize the result of `getPersistedSnapshot()`, and not of `getSnapshot()`: XState restores from the persisted form. Restoration is useful for server-side rendering (hydrate with the server's snapshot), session persistence (resume after page reload), and testing (start from a known mid-flow state).
|
|
326
348
|
|
|
327
349
|
---
|
|
328
350
|
|
package/guides/views.md
CHANGED
|
@@ -68,6 +68,9 @@ The view is an OPTIONAL capability of the actor. Compose it with `withView` of [
|
|
|
68
68
|
```ts
|
|
69
69
|
import { definePlayer, compose, PlayerActor } from "@xmachines/play-xstate";
|
|
70
70
|
import { withView } from "@xmachines/play-xstate/view";
|
|
71
|
+
import type { AnyStateMachine } from "xstate";
|
|
72
|
+
|
|
73
|
+
declare const machine: AnyStateMachine; // your machine
|
|
71
74
|
|
|
72
75
|
const actor = definePlayer({ machine, actor: compose(PlayerActor, withView) })();
|
|
73
76
|
actor.start();
|
|
@@ -81,7 +84,7 @@ The actor then holds `currentView`, a `ReadonlyAtom<PlaySpec | null>`. An applic
|
|
|
81
84
|
|
|
82
85
|
**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
86
|
|
|
84
|
-
```ts
|
|
87
|
+
```ts fragment
|
|
85
88
|
states: {
|
|
86
89
|
dashboard: {
|
|
87
90
|
meta: { view: dashboardView }, // shows in dashboard.overview
|
|
@@ -96,13 +99,13 @@ states: {
|
|
|
96
99
|
|
|
97
100
|
When no active state declares a view, `currentView` holds `null`, and the renderer shows its `fallback` content.
|
|
98
101
|
|
|
99
|
-
A **parallel** state follows the same region as the route derivation: the first region whose active states declare a `meta.route`,
|
|
102
|
+
A **parallel** state follows the same region as the route derivation: the first region whose active states declare a `meta.route`, else the first region that declares a route in any state, else the first region. A region that owns the routes therefore keeps the screen while it sits in a state without a route, such as a load. 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
103
|
|
|
101
104
|
### A layout and its pages: `outlets`
|
|
102
105
|
|
|
103
106
|
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
107
|
|
|
105
|
-
```ts
|
|
108
|
+
```ts fragment
|
|
106
109
|
const shell = typedSpec({
|
|
107
110
|
root: "shell",
|
|
108
111
|
state: { collapsed: false },
|
|
@@ -130,6 +133,7 @@ states: {
|
|
|
130
133
|
- `slot` names a named slot of the element. Omit it, and the renderer appends the child view to the `children` of the element.
|
|
131
134
|
- 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
135
|
- 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.
|
|
136
|
+
- The keys of the outer view carry no prefix, and each key of a child view gets the id of its state and a `/` as a prefix. A key of the outer view such as `"page/root"` equals the key of the element `root` of the child state `page`, and the composition throws `ViewElementKeyCollisionError`. Do not start a key of the outer view with the id of a state and a `/`.
|
|
133
137
|
|
|
134
138
|
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
139
|
|
|
@@ -149,7 +153,7 @@ derived state = { ...meta.view.state, context: <the machine context> }
|
|
|
149
153
|
|
|
150
154
|
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
155
|
|
|
152
|
-
```ts
|
|
156
|
+
```ts fragment
|
|
153
157
|
elements: {
|
|
154
158
|
greeting: { type: "Text", props: { text: { $state: "/context/username" } }, children: [] },
|
|
155
159
|
tasks: {
|
|
@@ -189,7 +193,7 @@ Domain state is the state of the application. Each change of it is an event, so
|
|
|
189
193
|
|
|
190
194
|
This login form uses both. The field binds to `/username`, and the submit sends the value to the machine:
|
|
191
195
|
|
|
192
|
-
```ts
|
|
196
|
+
```ts fragment
|
|
193
197
|
view: typedSpec({
|
|
194
198
|
root: "form",
|
|
195
199
|
state: { username: "" },
|
|
@@ -215,10 +219,26 @@ Keep high-frequency data in the ephemeral state or in a child actor, and not in
|
|
|
215
219
|
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
220
|
|
|
217
221
|
```ts
|
|
222
|
+
import { defineCatalog } from "@xmachines/json-render-core";
|
|
223
|
+
import { defineRegistry, schema, type ComponentFn } from "@xmachines/play-dom";
|
|
224
|
+
import type { ViewActor } from "@xmachines/play-view";
|
|
225
|
+
import { z } from "zod";
|
|
226
|
+
|
|
227
|
+
declare const actor: ViewActor<unknown, { type: "auth.login"; username: string }>;
|
|
228
|
+
|
|
229
|
+
const catalog = defineCatalog(schema, {
|
|
230
|
+
components: { Login: { props: z.object({ username: z.string() }) } },
|
|
231
|
+
actions: { login: { params: z.object({ username: z.string() }) } },
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
declare const Login: ComponentFn<typeof catalog, "Login">; // your component
|
|
235
|
+
|
|
218
236
|
const registryResult = defineRegistry(catalog, {
|
|
219
237
|
components: { Login },
|
|
220
238
|
actions: {
|
|
221
|
-
login: async (
|
|
239
|
+
login: async (params) => {
|
|
240
|
+
if (params) actor.send({ type: "auth.login", username: params.username });
|
|
241
|
+
},
|
|
222
242
|
},
|
|
223
243
|
});
|
|
224
244
|
```
|
|
@@ -227,7 +247,7 @@ The guards of the machine then decide. The renderer changes no state of the mach
|
|
|
227
247
|
|
|
228
248
|
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
249
|
|
|
230
|
-
```ts
|
|
250
|
+
```ts fragment
|
|
231
251
|
on: {
|
|
232
252
|
press: [
|
|
233
253
|
{ action: "addTask", params: { title: { $state: "/newTaskTitle" } } },
|
|
@@ -255,18 +275,18 @@ A renderer holds one view store for each view, and the `viewKey` decides its lif
|
|
|
255
275
|
|
|
256
276
|
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
277
|
|
|
258
|
-
With a new `viewKey`, the ephemeral state starts again from `spec.state
|
|
278
|
+
With a new `viewKey`, the ephemeral state starts again from `spec.state`, and every renderer builds the view again. The state that a component keeps for itself, such as the text of an unbound input, goes with the old view. 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
279
|
|
|
260
280
|
A parent keeps the ephemeral state across a move between its children in one of two ways:
|
|
261
281
|
|
|
262
282
|
- **Declare the view on the parent**, and no view on the children. The `viewKey` stays the id of the parent.
|
|
263
283
|
- **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
284
|
|
|
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
|
|
285
|
+
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. play-xstate reads the states of the machine one time, and it writes one warning for each layout that names every key that two of its views declare.
|
|
266
286
|
|
|
267
287
|
`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
288
|
|
|
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.
|
|
289
|
+
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. The tree lives as long as its store, so a new `viewKey` keeps the tree in the controlled mode, and a new store builds it again.
|
|
270
290
|
|
|
271
291
|
---
|
|
272
292
|
|
|
@@ -274,16 +294,16 @@ In the **controlled mode**, you give the provider a `store`. The provider then i
|
|
|
274
294
|
|
|
275
295
|
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
296
|
|
|
277
|
-
A failure of the RENDER stays inside the provider. When a component throws,
|
|
297
|
+
A failure of the RENDER stays inside the provider. When a component throws, when the store does not resolve, or when the root of the view fails, the provider shows its `fallback` and it calls its own `onError` prop:
|
|
278
298
|
|
|
279
299
|
| Renderer | The `onError` prop of the provider |
|
|
280
300
|
| ----------------------------------------------------------------- | ---------------------------------- |
|
|
281
|
-
| [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | `(error,
|
|
301
|
+
| [`@xmachines/play-react`](../api/@xmachines/play-react/README.md) | `(error, reset, info) => void` |
|
|
282
302
|
| the four other renderers | `(error, reset) => void` |
|
|
283
303
|
|
|
284
304
|
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
305
|
|
|
286
|
-
`onRenderError` receives
|
|
306
|
+
`onRenderError` receives each failure that json-render reports, with `(error, name, info)`, and it replaces every handler of `defineRegistry`. `info.kind` names the failure: a catalog component that throws (`"element"`), a prop or a `visible` condition of a child (`"props"`, `"visible"`), an action chain or a watch chain (`"action"`, `"watch"`), or the root (`"root"`). A failure of the ROOT — its component, a prop, or its `visible` condition — leaves no view on the screen. json-render gives it to no error boundary of the host, so each of the five providers contains it as a failure of the view: it shows its `fallback`, it calls `onError` one time, and the next view renders again. `onRenderError` also receives it, with the kind `"root"`. A failure below the root reaches `onRenderError` alone, and the rest of the view stays. Without a handler of the host, the provider writes one console line for a failure of the root, and not two.
|
|
287
307
|
|
|
288
308
|
---
|
|
289
309
|
|
|
@@ -319,7 +339,7 @@ A provider takes a `ViewActor`: the actor contract and the `Viewable` capability
|
|
|
319
339
|
|
|
320
340
|
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
341
|
|
|
322
|
-
[`@xmachines/play-view`](../api/@xmachines/play-view/README.md) holds the part that the five share: the store
|
|
342
|
+
[`@xmachines/play-view`](../api/@xmachines/play-view/README.md) holds the part that the five share: the view session, which resolves the store of each view outside a render, the `/context` guard and the report guard. A shared contract suite runs the same scenarios against each renderer, so the five agree on what a viewer sees.
|
|
323
343
|
|
|
324
344
|
---
|
|
325
345
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xmachines/docs",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"description": "Documentation for XMachines",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"documentation",
|
|
@@ -56,13 +56,13 @@
|
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@testing-library/jest-dom": "^7.0.1",
|
|
59
|
-
"@types/node": "^26.6.
|
|
60
|
-
"oxfmt": "^0.
|
|
61
|
-
"oxlint": "^1.
|
|
59
|
+
"@types/node": "^26.6.4",
|
|
60
|
+
"oxfmt": "^0.71.0",
|
|
61
|
+
"oxlint": "^1.86.0",
|
|
62
62
|
"typedoc": "^0.28.20",
|
|
63
63
|
"typedoc-plugin-llms-txt": "^0.1.2",
|
|
64
|
-
"typedoc-plugin-markdown": "^4.13.
|
|
65
|
-
"vitest": "^5.0.
|
|
64
|
+
"typedoc-plugin-markdown": "^4.13.1",
|
|
65
|
+
"vitest": "^5.0.3"
|
|
66
66
|
},
|
|
67
67
|
"engines": {
|
|
68
68
|
"node": ">=24.0.0"
|
package/rfc/play.md
CHANGED
|
@@ -260,7 +260,7 @@ Wraps XState v5 to satisfy the `PlayActor` contract. Provides the primary API fo
|
|
|
260
260
|
- Support snapshot restore for resumable sessions
|
|
261
261
|
- Provide XState DevTools compatibility
|
|
262
262
|
|
|
263
|
-
```ts
|
|
263
|
+
```ts fragment
|
|
264
264
|
import type { AnyStateMachine, InputFrom } from "xstate";
|
|
265
265
|
|
|
266
266
|
interface PlayerConfig<TMachine extends AnyStateMachine> {
|
|
@@ -380,7 +380,7 @@ Each view renderer provides a `PlayRenderer` component that passively observes t
|
|
|
380
380
|
|
|
381
381
|
**[`@xmachines/play-react`](../api/@xmachines/play-react/README.md) exports (representative):**
|
|
382
382
|
|
|
383
|
-
```ts
|
|
383
|
+
```ts fragment
|
|
384
384
|
// Batteries-included composite — standard entry point
|
|
385
385
|
// Props: actor, registryResult, store?, fallback?, onError?, onRenderError?,
|
|
386
386
|
// validationFunctions?, navigate?, functions?
|
|
@@ -438,13 +438,18 @@ The original RFC proposed an `@xmachines/play-ui` package for this purpose. The
|
|
|
438
438
|
Defines the **UI vocabulary** — available components and their prop schemas. No framework code.
|
|
439
439
|
|
|
440
440
|
```ts
|
|
441
|
-
import { defineCatalog
|
|
441
|
+
import { defineCatalog } from "@xmachines/json-render-core";
|
|
442
|
+
import { schema } from "@xmachines/json-render-react/schema";
|
|
443
|
+
import { z } from "zod";
|
|
442
444
|
|
|
443
|
-
export const catalog = defineCatalog({
|
|
445
|
+
export const catalog = defineCatalog(schema, {
|
|
444
446
|
components: {
|
|
445
447
|
Dashboard: { props: z.object({ title: z.string() }) },
|
|
446
448
|
Metric: { props: z.object({ value: z.number(), label: z.string() }) },
|
|
447
449
|
},
|
|
450
|
+
actions: {
|
|
451
|
+
submit: { description: "Submit the form" },
|
|
452
|
+
},
|
|
448
453
|
});
|
|
449
454
|
```
|
|
450
455
|
|
|
@@ -454,12 +459,17 @@ Defines **Logic**. No framework code. No routing library imports.
|
|
|
454
459
|
|
|
455
460
|
```ts
|
|
456
461
|
import { setup } from "xstate";
|
|
457
|
-
import { definePlayer } from "@xmachines/play-xstate";
|
|
462
|
+
import { compose, definePlayer, PlayerActor } from "@xmachines/play-xstate";
|
|
463
|
+
import { withRouting } from "@xmachines/play-xstate/routing";
|
|
464
|
+
import { withView } from "@xmachines/play-xstate/view";
|
|
465
|
+
import { typedSpec } from "@xmachines/play-view";
|
|
458
466
|
|
|
459
467
|
export const machine = setup({/* types, guards, actions */}).createMachine({
|
|
468
|
+
id: "dashboard",
|
|
460
469
|
initial: "overview",
|
|
461
470
|
states: {
|
|
462
471
|
overview: {
|
|
472
|
+
id: "overview",
|
|
463
473
|
meta: {
|
|
464
474
|
route: "/dashboard",
|
|
465
475
|
view: typedSpec({
|
|
@@ -478,20 +488,27 @@ export const machine = setup({/* types, guards, actions */}).createMachine({
|
|
|
478
488
|
},
|
|
479
489
|
});
|
|
480
490
|
|
|
481
|
-
// definePlayer returns a factory function
|
|
482
|
-
export const createDashboard = definePlayer({
|
|
491
|
+
// definePlayer returns a factory function. The router and the renderer need both capabilities
|
|
492
|
+
export const createDashboard = definePlayer({
|
|
493
|
+
machine,
|
|
494
|
+
actor: compose(PlayerActor, withRouting, withView),
|
|
495
|
+
});
|
|
483
496
|
```
|
|
484
497
|
|
|
485
498
|
### 6.3 Application (`App.tsx`)
|
|
486
499
|
|
|
487
500
|
Binds Logic to a View Renderer and Router Adapter.
|
|
488
501
|
|
|
489
|
-
```tsx
|
|
490
|
-
import {
|
|
491
|
-
import {
|
|
502
|
+
```tsx fragment
|
|
503
|
+
import { createRootRoute, createRouter } from "@tanstack/react-router";
|
|
504
|
+
import { createDashboard, machine } from "./dashboard.player.js";
|
|
505
|
+
import { catalog } from "./catalog.js";
|
|
492
506
|
import { PlayUIProvider, PlayRenderer, defineRegistry } from "@xmachines/play-react";
|
|
493
|
-
import {
|
|
494
|
-
|
|
507
|
+
import {
|
|
508
|
+
createRouteMapFromTree,
|
|
509
|
+
TanStackReactRouterBridge,
|
|
510
|
+
} from "@xmachines/play-tanstack-react-router";
|
|
511
|
+
import { extractMachineRoutes } from "@xmachines/play-router/xstate";
|
|
495
512
|
|
|
496
513
|
// 1. Create the actor
|
|
497
514
|
const actor = createDashboard();
|
|
@@ -516,7 +533,8 @@ const routeTree = extractMachineRoutes(machine);
|
|
|
516
533
|
const routeMap = createRouteMapFromTree(routeTree);
|
|
517
534
|
|
|
518
535
|
// 4. Connect router adapter (router, actor, routeMap)
|
|
519
|
-
const
|
|
536
|
+
const router = createRouter({ routeTree: createRootRoute() });
|
|
537
|
+
const bridge = new TanStackReactRouterBridge(router, actor, routeMap);
|
|
520
538
|
bridge.connect();
|
|
521
539
|
|
|
522
540
|
// 5. Render — PlayUIProvider is the batteries-included composite; PlayRenderer is the zero-prop leaf
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
[API](../../../../README.md) / [@xmachines/play-view](../../README.md) / [index](../README.md) / createFailureLatch
|
|
2
|
-
|
|
3
|
-
# Function: createFailureLatch()
|
|
4
|
-
|
|
5
|
-
```ts
|
|
6
|
-
function createFailureLatch(): FailureLatch;
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
Defined in: [packages/play-view/src/failure-latch.ts:202](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v6.1.0/packages/play-view/src/failure-latch.ts#L202)
|
|
10
|
-
|
|
11
|
-
Makes a [FailureLatch](../interfaces/FailureLatch.md).
|
|
12
|
-
|
|
13
|
-
The latch holds the three inputs BESIDE the flag. Clearing on each emission would be
|
|
14
|
-
enough for a provider that can hook every emission, and the identity check covers the
|
|
15
|
-
one that cannot: a render that runs again with nothing changed reports nothing, whether
|
|
16
|
-
or not the provider noticed that it ran.
|
|
17
|
-
|
|
18
|
-
## Returns
|
|
19
|
-
|
|
20
|
-
[`FailureLatch`](../interfaces/FailureLatch.md)
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
[API](../../../../README.md) / [@xmachines/play-view](../../README.md) / [index](../README.md) / sameViewInputs
|
|
2
|
-
|
|
3
|
-
# Function: sameViewInputs()
|
|
4
|
-
|
|
5
|
-
```ts
|
|
6
|
-
function sameViewInputs(a, b): boolean;
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
Defined in: [packages/play-view/src/failure-latch.ts:45](https://gitlab.com/xmachin-es/xmachines-js/-/blob/v6.1.0/packages/play-view/src/failure-latch.ts#L45)
|
|
10
|
-
|
|
11
|
-
Answers whether two sets of inputs are the SAME attempt.
|
|
12
|
-
|
|
13
|
-
Identity, and not a deep compare: a provider holds the references that it rendered, and
|
|
14
|
-
a new spec object is a new attempt even when it holds equal fields.
|
|
15
|
-
|
|
16
|
-
## Parameters
|
|
17
|
-
|
|
18
|
-
| Parameter | Type |
|
|
19
|
-
| --------- | ------------------------------------------- |
|
|
20
|
-
| `a` | [`ViewInputs`](../interfaces/ViewInputs.md) |
|
|
21
|
-
| `b` | [`ViewInputs`](../interfaces/ViewInputs.md) |
|
|
22
|
-
|
|
23
|
-
## Returns
|
|
24
|
-
|
|
25
|
-
`boolean`
|