@xmachines/docs 1.0.0-beta.9 → 2.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -7
- package/api/@xmachines/play/README.md +160 -38
- package/api/@xmachines/play/classes/NonNullableError.md +189 -0
- package/api/@xmachines/play/classes/PlayError.md +251 -0
- package/api/@xmachines/play/functions/assertNonNullable.md +56 -0
- package/api/@xmachines/play/type-aliases/PlayEvent.md +6 -6
- package/api/@xmachines/play-actor/README.md +141 -160
- package/api/@xmachines/play-actor/classes/AbstractActor.md +96 -126
- package/api/@xmachines/play-actor/functions/attachRenderErrorHandler.md +40 -0
- package/api/@xmachines/play-actor/functions/toAtomState.md +33 -0
- package/api/@xmachines/play-actor/functions/typedSpec.md +54 -0
- package/api/@xmachines/play-actor/interfaces/BaseActorProviderProps.md +46 -0
- package/api/@xmachines/play-actor/interfaces/BaseViewContextValue.md +33 -0
- package/api/@xmachines/play-actor/interfaces/PlaySpec.md +28 -0
- package/api/@xmachines/play-actor/interfaces/Routable.md +6 -21
- package/api/@xmachines/play-actor/interfaces/Viewable.md +12 -6
- package/api/@xmachines/play-dom/README.md +384 -0
- package/api/@xmachines/play-dom/classes/PlayRenderer.md +115 -0
- package/api/@xmachines/play-dom/functions/createPlayUI.md +28 -0
- package/api/@xmachines/play-dom/functions/createRenderer.md +44 -0
- package/api/@xmachines/play-dom/functions/defineRegistry.md +26 -0
- package/api/@xmachines/play-dom/functions/renderSpec.md +67 -0
- package/api/@xmachines/play-dom/interfaces/ComponentContext.md +23 -0
- package/api/@xmachines/play-dom/interfaces/CreatePlayUIOptions.md +34 -0
- package/api/@xmachines/play-dom/interfaces/DefineRegistryResult.md +17 -0
- package/api/@xmachines/play-dom/interfaces/DomRenderContext.md +28 -0
- package/api/@xmachines/play-dom/interfaces/EventHandle.md +15 -0
- package/api/@xmachines/play-dom/interfaces/MountOptions.md +18 -0
- package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +30 -0
- package/api/@xmachines/play-dom/interfaces/RenderSpecOptions.md +26 -0
- package/api/@xmachines/play-dom/interfaces/UIProviderOptions.md +32 -0
- package/api/@xmachines/play-dom/type-aliases/ActionFn.md +46 -0
- package/api/@xmachines/play-dom/type-aliases/Actions.md +18 -0
- package/api/@xmachines/play-dom/type-aliases/BaseComponentProps.md +114 -0
- package/api/@xmachines/play-dom/type-aliases/CatalogHasActions.md +25 -0
- package/api/@xmachines/play-dom/type-aliases/ComponentFn.md +26 -0
- package/api/@xmachines/play-dom/type-aliases/ComponentRegistry.md +15 -0
- package/api/@xmachines/play-dom/type-aliases/ConfirmHandler.md +44 -0
- package/api/@xmachines/play-dom/type-aliases/DefineRegistryOptions.md +39 -0
- package/api/@xmachines/play-dom/type-aliases/DomComponentRenderer.md +20 -0
- package/api/@xmachines/play-dom/type-aliases/DomRegistry.md +9 -0
- package/api/@xmachines/play-dom/type-aliases/DomSchema.md +9 -0
- package/api/@xmachines/play-dom/type-aliases/MountFn.md +27 -0
- package/api/@xmachines/play-dom/type-aliases/RenderErrorHandler.md +23 -0
- package/api/@xmachines/play-dom/type-aliases/SetState.md +30 -0
- package/api/@xmachines/play-dom/variables/schema.md +62 -0
- package/api/@xmachines/play-dom-router/README.md +271 -0
- package/api/@xmachines/play-dom-router/functions/connectRouter.md +43 -0
- package/api/@xmachines/{play-router → play-dom-router}/functions/createBrowserHistory.md +10 -2
- package/api/@xmachines/play-dom-router/functions/createRouteMap.md +39 -0
- package/api/@xmachines/play-dom-router/functions/createRouter.md +54 -0
- package/api/@xmachines/play-dom-router/interfaces/BrowserHistory.md +176 -0
- package/api/@xmachines/play-dom-router/interfaces/BrowserWindow.md +69 -0
- package/api/@xmachines/play-dom-router/interfaces/ConnectRouterOptions.md +15 -0
- package/api/@xmachines/play-dom-router/interfaces/PlayRouteEvent.md +129 -0
- package/api/@xmachines/play-dom-router/interfaces/RoutableActor.md +68 -0
- package/api/@xmachines/play-dom-router/interfaces/RouteLookupContract.md +54 -0
- package/api/@xmachines/play-dom-router/interfaces/RouteMap.md +121 -0
- package/api/@xmachines/play-dom-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-dom-router/interfaces/RouteMapping.md +27 -0
- package/api/@xmachines/play-dom-router/interfaces/RouterBridge.md +104 -0
- package/api/@xmachines/play-dom-router/interfaces/VanillaRouter.md +28 -0
- package/api/@xmachines/play-react/README.md +185 -334
- package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +46 -42
- package/api/@xmachines/play-react/functions/ActionProvider.md +21 -0
- package/api/@xmachines/play-react/functions/JSONUIProvider.md +21 -0
- package/api/@xmachines/play-react/functions/Renderer.md +21 -0
- package/api/@xmachines/play-react/functions/StateProvider.md +27 -0
- package/api/@xmachines/play-react/functions/ValidationProvider.md +21 -0
- package/api/@xmachines/play-react/functions/VisibilityProvider.md +21 -0
- package/api/@xmachines/play-react/functions/defineRegistry.md +49 -0
- package/api/@xmachines/play-react/functions/useActor.md +13 -0
- package/api/@xmachines/play-react/functions/useBoundProp.md +45 -0
- package/api/@xmachines/play-react/functions/usePlayView.md +32 -0
- package/api/@xmachines/play-react/functions/useSignalEffect.md +29 -20
- package/api/@xmachines/play-react/interfaces/ActionProviderProps.md +15 -0
- package/api/@xmachines/play-react/interfaces/ActorProviderProps.md +27 -0
- package/api/@xmachines/play-react/interfaces/ComponentContext.md +37 -0
- package/api/@xmachines/play-react/interfaces/JSONUIProviderProps.md +22 -0
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +7 -7
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +6 -6
- package/api/@xmachines/play-react/interfaces/PlayUIProviderProps.md +26 -0
- package/api/@xmachines/play-react/interfaces/RendererProps.md +17 -0
- package/api/@xmachines/play-react/interfaces/StateProviderProps.md +16 -0
- package/api/@xmachines/play-react/interfaces/ValidationProviderProps.md +14 -0
- package/api/@xmachines/play-react/interfaces/ViewContextValue.md +20 -0
- package/api/@xmachines/play-react/interfaces/VisibilityProviderProps.md +13 -0
- package/api/@xmachines/play-react/type-aliases/AnyPlayActor.md +11 -0
- package/api/@xmachines/play-react/type-aliases/ComponentFn.md +36 -0
- package/api/@xmachines/play-react/type-aliases/RenderErrorHandler.md +23 -0
- package/api/@xmachines/play-react/variables/ActorProvider.md +33 -0
- package/api/@xmachines/play-react/variables/PlayRenderer.md +6 -56
- package/api/@xmachines/play-react/variables/PlayUIProvider.md +43 -0
- package/api/@xmachines/play-react-router/README.md +130 -114
- package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +19 -242
- package/api/@xmachines/play-react-router/classes/RouteMap.md +48 -36
- package/api/@xmachines/play-react-router/functions/createPlayRouterProvider.md +45 -0
- package/api/@xmachines/play-react-router/functions/createRouteMap.md +39 -0
- package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +23 -12
- package/api/@xmachines/play-react-router/interfaces/PlayActor.md +68 -0
- package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +22 -12
- package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderBaseProps.md +32 -0
- package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +25 -9
- package/api/@xmachines/play-react-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +19 -9
- package/api/@xmachines/play-react-router/interfaces/RouterBridge.md +8 -8
- package/api/@xmachines/play-react-router/type-aliases/PlayRouterBridgeConstructor.md +30 -0
- package/api/@xmachines/play-react-router/variables/PlayRouterProvider.md +32 -0
- package/api/@xmachines/play-router/README.md +285 -355
- package/api/@xmachines/play-router/classes/RouteMap.md +149 -0
- package/api/@xmachines/play-router/classes/RouterBridgeBase.md +21 -221
- package/api/@xmachines/play-router/functions/buildPlayRouteEvent.md +32 -0
- package/api/@xmachines/play-router/functions/buildRouteTree.md +12 -2
- package/api/@xmachines/play-router/functions/createRouteMap.md +22 -36
- package/api/@xmachines/play-router/functions/createRouteMapFromTree.md +46 -0
- package/api/@xmachines/play-router/functions/detectDuplicateRoutes.md +14 -7
- package/api/@xmachines/play-router/functions/extractMachineRoutes.md +10 -46
- package/api/@xmachines/play-router/functions/extractQuery.md +22 -0
- package/api/@xmachines/play-router/functions/extractRouteParams.md +54 -0
- package/api/@xmachines/play-router/functions/findRouteById.md +2 -2
- package/api/@xmachines/play-router/functions/findRouteByPath.md +2 -2
- package/api/@xmachines/play-router/functions/getNavigableRoutes.md +2 -2
- package/api/@xmachines/play-router/functions/getRoutableRoutes.md +2 -2
- package/api/@xmachines/play-router/functions/getTransitionReachableRoutes.md +43 -0
- package/api/@xmachines/play-router/functions/isRouteReachable.md +38 -0
- package/api/@xmachines/play-router/functions/machineToGraph.md +19 -0
- package/api/@xmachines/play-router/functions/routeExists.md +2 -2
- package/api/@xmachines/play-router/functions/sanitizePathname.md +40 -0
- package/api/@xmachines/play-router/functions/validateRouteFormat.md +10 -9
- package/api/@xmachines/play-router/functions/validateStateExists.md +9 -9
- package/api/@xmachines/play-router/interfaces/BuildPlayRouteEventOptions.md +13 -0
- package/api/@xmachines/play-router/interfaces/LocationLike.md +27 -0
- package/api/@xmachines/play-router/interfaces/MachineEdgeData.md +17 -0
- package/api/@xmachines/play-router/interfaces/MachineNodeData.md +17 -0
- package/api/@xmachines/play-router/interfaces/PlayActor.md +68 -0
- package/api/@xmachines/play-router/interfaces/PlayRouteEvent.md +22 -12
- package/api/@xmachines/play-router/interfaces/ResolvedRoutePath.md +17 -0
- package/api/@xmachines/play-router/interfaces/RoutableActor.md +64 -0
- package/api/@xmachines/play-router/interfaces/RouteInfo.md +11 -11
- package/api/@xmachines/play-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-router/interfaces/RouteMapping.md +27 -0
- package/api/@xmachines/play-router/interfaces/RouteMatch.md +12 -0
- package/api/@xmachines/play-router/interfaces/RouteNode.md +13 -13
- package/api/@xmachines/play-router/interfaces/RouteObject.md +5 -5
- package/api/@xmachines/play-router/interfaces/RouteTree.md +8 -7
- package/api/@xmachines/play-router/interfaces/RouteWatcherHandle.md +55 -0
- package/api/@xmachines/play-router/interfaces/RouterBridge.md +8 -8
- package/api/@xmachines/play-router/interfaces/WindowLike.md +65 -0
- package/api/@xmachines/play-router/type-aliases/MachineGraph.md +20 -0
- package/api/@xmachines/play-router/type-aliases/RouteMetadata.md +2 -2
- package/api/@xmachines/play-signals/README.md +116 -65
- package/api/@xmachines/play-signals/functions/watchSignal.md +42 -0
- package/api/@xmachines/play-signals/interfaces/ComputedOptions.md +7 -5
- package/api/@xmachines/play-signals/interfaces/SignalComputed.md +3 -3
- package/api/@xmachines/play-signals/interfaces/SignalOptions.md +7 -5
- package/api/@xmachines/play-signals/interfaces/SignalState.md +4 -4
- package/api/@xmachines/play-signals/interfaces/SignalWatcher.md +5 -5
- package/api/@xmachines/play-signals/namespaces/Signal/README.md +1 -1
- package/api/@xmachines/play-signals/namespaces/Signal/classes/Computed.md +7 -7
- package/api/@xmachines/play-signals/namespaces/Signal/classes/State.md +8 -8
- package/api/@xmachines/play-signals/namespaces/Signal/interfaces/Options.md +7 -7
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/README.md +1 -1
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/classes/Watcher.md +9 -9
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/currentComputed.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/hasSinks.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/hasSources.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/introspectSinks.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/introspectSources.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/functions/untrack.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/variables/unwatched.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/namespaces/subtle/variables/watched.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/variables/isComputed.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/variables/isState.md +2 -2
- package/api/@xmachines/play-signals/namespaces/Signal/variables/isWatcher.md +2 -2
- package/api/@xmachines/play-signals/type-aliases/WatcherNotify.md +2 -2
- package/api/@xmachines/play-solid/README.md +196 -234
- package/api/@xmachines/play-solid/functions/ActionProvider.md +19 -0
- package/api/@xmachines/play-solid/functions/JSONUIProvider.md +21 -0
- package/api/@xmachines/play-solid/functions/Renderer.md +21 -0
- package/api/@xmachines/play-solid/functions/StateProvider.md +19 -0
- package/api/@xmachines/play-solid/functions/ValidationProvider.md +19 -0
- package/api/@xmachines/play-solid/functions/VisibilityProvider.md +20 -0
- package/api/@xmachines/play-solid/functions/defineRegistry.md +49 -0
- package/api/@xmachines/play-solid/functions/useAction.md +24 -0
- package/api/@xmachines/play-solid/functions/useActions.md +13 -0
- package/api/@xmachines/play-solid/functions/useActor.md +13 -0
- package/api/@xmachines/play-solid/functions/useBoundProp.md +45 -0
- package/api/@xmachines/play-solid/functions/useFieldValidation.md +29 -0
- package/api/@xmachines/play-solid/functions/useIsVisible.md +19 -0
- package/api/@xmachines/play-solid/functions/useOptionalValidation.md +13 -0
- package/api/@xmachines/play-solid/functions/usePlayView.md +30 -0
- package/api/@xmachines/play-solid/functions/useStateBinding.md +25 -0
- package/api/@xmachines/play-solid/functions/useStateStore.md +13 -0
- package/api/@xmachines/play-solid/functions/useStateValue.md +25 -0
- package/api/@xmachines/play-solid/functions/useVisibility.md +13 -0
- package/api/@xmachines/play-solid/interfaces/ActionProviderProps.md +12 -0
- package/api/@xmachines/play-solid/interfaces/ActorProviderProps.md +30 -0
- package/api/@xmachines/play-solid/interfaces/ComponentContext.md +37 -0
- package/api/@xmachines/play-solid/interfaces/DefineRegistryResult.md +15 -0
- package/api/@xmachines/play-solid/interfaces/JSONUIProviderProps.md +22 -0
- package/api/@xmachines/play-solid/interfaces/PlayUIProviderProps.md +26 -0
- package/api/@xmachines/play-solid/interfaces/RendererProps.md +17 -0
- package/api/@xmachines/play-solid/interfaces/StateProviderProps.md +13 -0
- package/api/@xmachines/play-solid/interfaces/ValidationProviderProps.md +11 -0
- package/api/@xmachines/play-solid/interfaces/ViewContextValue.md +21 -0
- package/api/@xmachines/play-solid/type-aliases/AnyPlayActor.md +11 -0
- package/api/@xmachines/play-solid/type-aliases/ComponentFn.md +36 -0
- package/api/@xmachines/play-solid/type-aliases/ComponentRegistry.md +11 -0
- package/api/@xmachines/play-solid/type-aliases/RenderErrorHandler.md +23 -0
- package/api/@xmachines/play-solid/type-aliases/SetState.md +21 -0
- package/api/@xmachines/play-solid/type-aliases/VisibilityProviderProps.md +9 -0
- package/api/@xmachines/play-solid/variables/ActorContext.md +13 -0
- package/api/@xmachines/play-solid/variables/ActorProvider.md +27 -0
- package/api/@xmachines/play-solid/variables/PlayRenderer.md +6 -62
- package/api/@xmachines/play-solid/variables/PlayUIProvider.md +26 -0
- package/api/@xmachines/play-solid-router/README.md +153 -562
- package/api/@xmachines/play-solid-router/classes/RouteMap.md +31 -32
- package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +27 -242
- package/api/@xmachines/play-solid-router/functions/createPlayRouterProvider.md +44 -0
- package/api/@xmachines/play-solid-router/functions/createRouteMap.md +18 -11
- package/api/@xmachines/play-solid-router/interfaces/AbstractActor.md +89 -119
- package/api/@xmachines/play-solid-router/interfaces/PlayActor.md +68 -0
- package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +22 -12
- package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderBaseProps.md +30 -0
- package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +25 -9
- package/api/@xmachines/play-solid-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +20 -7
- package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +8 -8
- package/api/@xmachines/play-solid-router/type-aliases/PlayRouterBridgeConstructor.md +34 -0
- package/api/@xmachines/play-solid-router/type-aliases/RoutableActor.md +8 -4
- package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +22 -19
- package/api/@xmachines/play-solid-router/variables/PlayRouterProvider.md +52 -0
- package/api/@xmachines/play-svelte/README.md +269 -0
- package/api/@xmachines/play-svelte/functions/defineRegistry.md +31 -0
- package/api/@xmachines/play-svelte/functions/getActorContext.md +21 -0
- package/api/@xmachines/play-svelte/functions/getPlayViewContext.md +19 -0
- package/api/@xmachines/play-svelte/functions/setActorContext.md +19 -0
- package/api/@xmachines/play-svelte/interfaces/ActorProviderProps.md +44 -0
- package/api/@xmachines/play-svelte/interfaces/BaseComponentProps.md +29 -0
- package/api/@xmachines/play-svelte/interfaces/ComponentContext.md +29 -0
- package/api/@xmachines/play-svelte/interfaces/DefineRegistryOptions.md +24 -0
- package/api/@xmachines/play-svelte/interfaces/PlayUIProviderProps.md +43 -0
- package/api/@xmachines/play-svelte/interfaces/ViewContextValue.md +24 -0
- package/api/@xmachines/play-svelte/type-aliases/ActionFn.md +30 -0
- package/api/@xmachines/play-svelte/type-aliases/Actions.md +17 -0
- package/api/@xmachines/play-svelte/type-aliases/AnyPlayActor.md +11 -0
- package/api/@xmachines/play-svelte/type-aliases/ComponentFn.md +18 -0
- package/api/@xmachines/play-svelte/type-aliases/JSONUIProviderProps.md +7 -0
- package/api/@xmachines/play-svelte/type-aliases/PlayRenderer.md +9 -0
- package/api/@xmachines/play-svelte/type-aliases/RenderErrorHandler.md +23 -0
- package/api/@xmachines/play-svelte/type-aliases/SetState.md +21 -0
- package/api/@xmachines/play-svelte/variables/PlayRenderer.md +9 -0
- package/api/@xmachines/play-svelte-spa-router/README.md +205 -0
- package/api/@xmachines/play-svelte-spa-router/classes/RouteMap.md +149 -0
- package/api/@xmachines/play-svelte-spa-router/functions/connectRouter.md +32 -0
- package/api/@xmachines/play-svelte-spa-router/functions/createRouteMap.md +39 -0
- package/api/@xmachines/play-svelte-spa-router/interfaces/ConnectRouterOptions.md +17 -0
- package/api/@xmachines/play-svelte-spa-router/interfaces/PlayRouteEvent.md +129 -0
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouteMapping.md +27 -0
- package/api/@xmachines/play-svelte-spa-router/interfaces/RouterBridge.md +104 -0
- package/api/@xmachines/play-svelte-spa-router/interfaces/WindowLike.md +65 -0
- package/api/@xmachines/play-svelte-spa-router/type-aliases/RoutableActor.md +9 -0
- package/api/@xmachines/play-sveltekit-router/README.md +211 -0
- package/api/@xmachines/play-sveltekit-router/classes/RouteMap.md +149 -0
- package/api/@xmachines/play-sveltekit-router/functions/connectRouter.md +32 -0
- package/api/@xmachines/play-sveltekit-router/functions/createRouteMap.md +39 -0
- package/api/@xmachines/play-sveltekit-router/interfaces/ConnectRouterOptions.md +13 -0
- package/api/@xmachines/play-sveltekit-router/interfaces/LocationLike.md +27 -0
- package/api/@xmachines/play-sveltekit-router/interfaces/PlayRouteEvent.md +129 -0
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-sveltekit-router/interfaces/RouteMapping.md +27 -0
- package/api/@xmachines/play-sveltekit-router/interfaces/RouterBridge.md +104 -0
- package/api/@xmachines/play-sveltekit-router/type-aliases/RoutableActor.md +9 -0
- package/api/@xmachines/play-tanstack-react-router/README.md +155 -126
- package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +48 -36
- package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +31 -252
- package/api/@xmachines/play-tanstack-react-router/functions/createPlayRouterProvider.md +45 -0
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMap.md +22 -36
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +23 -12
- package/api/@xmachines/play-tanstack-react-router/functions/extractMachineRoutes.md +28 -0
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayActor.md +68 -0
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +22 -12
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderBaseProps.md +32 -0
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +25 -9
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +19 -9
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteNavigateEvent.md +6 -6
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +8 -8
- package/api/@xmachines/play-tanstack-react-router/type-aliases/PlayRouterBridgeConstructor.md +30 -0
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterInstance.md +2 -2
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterLike.md +40 -18
- package/api/@xmachines/play-tanstack-react-router/variables/PlayRouterProvider.md +34 -0
- package/api/@xmachines/play-tanstack-router/README.md +58 -0
- package/api/@xmachines/play-tanstack-router/classes/TanStackRouterBridgeBase.md +131 -0
- package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouteMapLike.md +57 -0
- package/api/@xmachines/play-tanstack-router/type-aliases/TanStackRouterLike.md +100 -0
- package/api/@xmachines/play-tanstack-solid-router/README.md +215 -175
- package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +31 -32
- package/api/@xmachines/play-tanstack-solid-router/classes/TanStackSolidRouterBridge.md +121 -0
- package/api/@xmachines/play-tanstack-solid-router/functions/createPlayRouterProvider.md +44 -0
- package/api/@xmachines/play-tanstack-solid-router/functions/createRouteMap.md +18 -11
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayActor.md +68 -0
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +22 -12
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderBaseProps.md +31 -0
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +23 -9
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +14 -10
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +8 -8
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/PlayRouterBridgeConstructor.md +30 -0
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/RoutableActor.md +8 -4
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterInstance.md +3 -3
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterLike.md +40 -18
- package/api/@xmachines/play-tanstack-solid-router/variables/PlayRouterProvider.md +33 -0
- package/api/@xmachines/play-vue/README.md +192 -210
- package/api/@xmachines/play-vue/functions/defineRegistry.md +32 -0
- package/api/@xmachines/play-vue/functions/getPlayViewContext.md +28 -0
- package/api/@xmachines/play-vue/functions/useActor.md +13 -0
- package/api/@xmachines/play-vue/functions/useBoundProp.md +45 -0
- package/api/@xmachines/play-vue/interfaces/ActionProviderProps.md +12 -0
- package/api/@xmachines/play-vue/interfaces/ActorProviderProps.md +25 -0
- package/api/@xmachines/play-vue/interfaces/ComponentContext.md +37 -0
- package/api/@xmachines/play-vue/interfaces/DefineRegistryResult.md +15 -0
- package/api/@xmachines/play-vue/interfaces/JSONUIProviderProps.md +21 -0
- package/api/@xmachines/play-vue/interfaces/PlayUIProviderProps.md +24 -0
- package/api/@xmachines/play-vue/interfaces/RendererProps.md +17 -0
- package/api/@xmachines/play-vue/interfaces/StateProviderProps.md +15 -0
- package/api/@xmachines/play-vue/interfaces/ValidationProviderProps.md +11 -0
- package/api/@xmachines/play-vue/interfaces/ViewContextValue.md +21 -0
- package/api/@xmachines/play-vue/interfaces/VisibilityProviderProps.md +5 -0
- package/api/@xmachines/play-vue/type-aliases/AnyPlayActor.md +11 -0
- package/api/@xmachines/play-vue/type-aliases/ComponentEntry.md +16 -0
- package/api/@xmachines/play-vue/type-aliases/ComponentFn.md +35 -0
- package/api/@xmachines/play-vue/type-aliases/ComponentsMap.md +15 -0
- package/api/@xmachines/play-vue/type-aliases/DefineRegistryOptions.md +22 -0
- package/api/@xmachines/play-vue/type-aliases/RenderErrorHandler.md +23 -0
- package/api/@xmachines/play-vue/variables/ActionProvider.md +64 -0
- package/api/@xmachines/play-vue/variables/JSONUIProvider.md +105 -0
- package/api/@xmachines/play-vue/variables/PlayRenderer.md +2 -2
- package/api/@xmachines/play-vue/variables/Renderer.md +88 -0
- package/api/@xmachines/play-vue/variables/StateProvider.md +79 -0
- package/api/@xmachines/play-vue/variables/ValidationProvider.md +55 -0
- package/api/@xmachines/play-vue/variables/VisibilityProvider.md +40 -0
- package/api/@xmachines/play-vue-router/README.md +173 -487
- package/api/@xmachines/play-vue-router/classes/RouteMap.md +56 -116
- package/api/@xmachines/play-vue-router/classes/VueRouterBridge.md +23 -271
- package/api/@xmachines/play-vue-router/functions/createRouteMap.md +26 -6
- package/api/@xmachines/play-vue-router/interfaces/PlayActor.md +68 -0
- package/api/@xmachines/play-vue-router/interfaces/PlayRouteEvent.md +22 -12
- package/api/@xmachines/play-vue-router/interfaces/RouteMapOptions.md +13 -0
- package/api/@xmachines/play-vue-router/interfaces/RouteMapping.md +20 -8
- package/api/@xmachines/play-vue-router/interfaces/RouterBridge.md +8 -8
- package/api/@xmachines/play-vue-router/type-aliases/RoutableActor.md +8 -4
- package/api/@xmachines/play-vue-router/variables/PlayRouterProvider.md +12 -6
- package/api/@xmachines/play-xstate/README.md +234 -340
- package/api/@xmachines/play-xstate/classes/PlayerActor.md +166 -195
- package/api/@xmachines/play-xstate/functions/buildRouteUrl.md +31 -20
- package/api/@xmachines/play-xstate/functions/composeGuards.md +24 -18
- package/api/@xmachines/play-xstate/functions/composeGuardsOr.md +17 -17
- package/api/@xmachines/play-xstate/functions/contextFieldMatches.md +38 -0
- package/api/@xmachines/play-xstate/functions/createRoutedMachine.md +87 -0
- package/api/@xmachines/play-xstate/functions/definePlayer.md +14 -63
- package/api/@xmachines/play-xstate/functions/deriveRoute.md +3 -3
- package/api/@xmachines/play-xstate/functions/eventMatches.md +2 -2
- package/api/@xmachines/play-xstate/functions/formatPlayRouteTransitions.md +46 -12
- package/api/@xmachines/play-xstate/functions/hasContext.md +2 -2
- package/api/@xmachines/play-xstate/functions/isAbsoluteRoute.md +2 -2
- package/api/@xmachines/play-xstate/functions/negateGuard.md +16 -16
- package/api/@xmachines/play-xstate/interfaces/PlayerConfig.md +10 -14
- package/api/@xmachines/play-xstate/interfaces/PlayerFactoryResumeOptions.md +22 -0
- package/api/@xmachines/play-xstate/interfaces/PlayerOptions.md +12 -13
- package/api/@xmachines/play-xstate/interfaces/RouteContext.md +15 -13
- package/api/@xmachines/play-xstate/interfaces/RouteObject.md +17 -0
- package/api/@xmachines/play-xstate/type-aliases/ComposedGuard.md +27 -6
- package/api/@xmachines/play-xstate/type-aliases/Guard.md +2 -2
- package/api/@xmachines/play-xstate/type-aliases/GuardArray.md +3 -3
- package/api/@xmachines/play-xstate/type-aliases/PlayRoutePayload.md +30 -0
- package/api/@xmachines/play-xstate/type-aliases/PlayerFactory.md +10 -9
- package/api/@xmachines/play-xstate/type-aliases/RouteMachineConfig.md +22 -5
- package/api/@xmachines/play-xstate/type-aliases/RouteMetadata.md +9 -0
- package/api/@xmachines/play-xstate/type-aliases/RouteStateNode.md +34 -6
- package/api/@xmachines/play-xstate/type-aliases/SetupLike.md +33 -0
- package/api/@xmachines/play-xstate/type-aliases/WithOptional.md +31 -0
- package/api/@xmachines/play-xstate/variables/emptyEventSchema.md +37 -0
- package/api/@xmachines/play-xstate/variables/playMetaSchema.md +40 -0
- package/api/@xmachines/play-xstate/variables/playRouteEventSchema.md +9 -0
- package/api/@xmachines/shared/README.md +95 -295
- package/api/@xmachines/shared/vite-aliases/README.md +11 -0
- package/api/@xmachines/shared/vite-aliases/functions/xmAliases.md +38 -0
- package/api/@xmachines/shared/vite-aliases/functions/xmCacheDir.md +27 -0
- package/api/@xmachines/shared/vite-aliases/functions/xmOptimizeDeps.md +30 -0
- package/api/@xmachines/shared/vite-aliases/functions/xmResolve.md +42 -0
- package/api/@xmachines/shared/vite-aliases/functions/xmSvelteRunes.md +33 -0
- package/api/@xmachines/shared/vitest/README.md +12 -0
- package/api/@xmachines/shared/vitest/functions/defineXmBrowserConfig.md +42 -0
- package/api/@xmachines/shared/vitest/functions/defineXmVitestConfig.md +34 -0
- package/api/@xmachines/shared/vitest/interfaces/XmBrowserConfigOptions.md +16 -0
- package/api/README.md +6 -7
- package/api/llms.txt +72 -23
- package/contributing/README.md +10 -0
- package/contributing/architecture.md +602 -0
- package/contributing/configuration.md +368 -0
- package/contributing/deployment.md +312 -0
- package/contributing/development.md +464 -0
- package/contributing/testing.md +453 -0
- package/examples/@xmachines/play-dom-demo/README.md +181 -0
- package/examples/@xmachines/play-dom-demo/functions/createNavBar.md +24 -0
- package/examples/@xmachines/play-dom-demo/functions/initShell.md +24 -0
- package/examples/@xmachines/play-dom-demo/type-aliases/AuthCatalog.md +9 -0
- package/examples/@xmachines/play-dom-demo/variables/About.md +12 -0
- package/examples/@xmachines/play-dom-demo/variables/Contact.md +12 -0
- package/examples/@xmachines/play-dom-demo/variables/Dashboard.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/Home.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/Login.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/NavBarView.md +16 -0
- package/examples/@xmachines/play-dom-demo/variables/Navigation.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/Overview.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/Profile.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/Settings.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/Stats.md +13 -0
- package/examples/@xmachines/play-dom-demo/variables/authCatalog.md +172 -0
- package/examples/@xmachines/play-dom-router-demo/README.md +145 -0
- package/examples/@xmachines/play-react-demo/README.md +187 -0
- package/examples/@xmachines/play-react-demo/functions/App.md +13 -0
- package/examples/@xmachines/play-react-demo/functions/DebugPanel.md +20 -0
- package/examples/@xmachines/play-react-demo/functions/HeaderNav.md +20 -0
- package/examples/@xmachines/play-react-demo/functions/Shell.md +22 -0
- package/examples/@xmachines/play-react-demo/type-aliases/AuthCatalog.md +9 -0
- package/examples/@xmachines/play-react-demo/variables/About.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/Contact.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/Dashboard.md +15 -0
- package/examples/@xmachines/play-react-demo/variables/DebugPanel.md +15 -0
- package/examples/@xmachines/play-react-demo/variables/Home.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/Login.md +16 -0
- package/examples/@xmachines/play-react-demo/variables/NavBar.md +16 -0
- package/examples/@xmachines/play-react-demo/variables/NavBarView.md +15 -0
- package/examples/@xmachines/play-react-demo/variables/Navigation.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/Overview.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/Profile.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/Settings.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/Shell.md +18 -0
- package/examples/@xmachines/play-react-demo/variables/Stats.md +14 -0
- package/examples/@xmachines/play-react-demo/variables/authCatalog.md +172 -0
- package/examples/@xmachines/play-react-router-demo/README.md +151 -0
- package/examples/@xmachines/play-solid-demo/README.md +187 -0
- package/examples/@xmachines/play-solid-demo/functions/App.md +13 -0
- package/examples/@xmachines/play-solid-demo/functions/DebugPanel.md +20 -0
- package/examples/@xmachines/play-solid-demo/functions/HeaderNav.md +20 -0
- package/examples/@xmachines/play-solid-demo/functions/Shell.md +22 -0
- package/examples/@xmachines/play-solid-demo/type-aliases/AuthCatalog.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/About.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/Contact.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/Dashboard.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/DebugPanel.md +15 -0
- package/examples/@xmachines/play-solid-demo/variables/Home.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/Login.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/NavBar.md +11 -0
- package/examples/@xmachines/play-solid-demo/variables/NavBarView.md +15 -0
- package/examples/@xmachines/play-solid-demo/variables/Navigation.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/Overview.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/Profile.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/Settings.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/Shell.md +17 -0
- package/examples/@xmachines/play-solid-demo/variables/Stats.md +9 -0
- package/examples/@xmachines/play-solid-demo/variables/authCatalog.md +172 -0
- package/examples/@xmachines/play-solid-router-demo/README.md +137 -0
- package/examples/@xmachines/play-svelte-demo/README.md +143 -0
- package/examples/@xmachines/play-svelte-demo/type-aliases/App.md +9 -0
- package/examples/@xmachines/play-svelte-demo/type-aliases/AuthCatalog.md +9 -0
- package/examples/@xmachines/play-svelte-demo/variables/App.md +9 -0
- package/examples/@xmachines/play-svelte-demo/variables/authCatalog.md +172 -0
- package/examples/@xmachines/play-svelte-spa-router-demo/README.md +129 -0
- package/examples/@xmachines/play-sveltekit-router-demo/README.md +133 -0
- package/examples/@xmachines/play-tanstack-react-router-demo/README.md +156 -0
- package/examples/@xmachines/play-tanstack-solid-router-demo/README.md +139 -0
- package/examples/@xmachines/play-vue-demo/README.md +183 -0
- package/examples/@xmachines/play-vue-demo/type-aliases/AuthCatalog.md +9 -0
- package/examples/@xmachines/play-vue-demo/variables/App.md +9 -0
- package/examples/@xmachines/play-vue-demo/variables/authCatalog.md +172 -0
- package/examples/@xmachines/play-vue-router-demo/README.md +139 -0
- package/examples/README.md +78 -30
- package/examples/basic-state-machine.md +73 -31
- package/examples/form-validation.md +267 -115
- package/examples/multi-router-integration.md +314 -194
- package/examples/routing-patterns.md +260 -187
- package/examples/traffic-light.md +96 -58
- package/guides/README.md +9 -21
- package/guides/actor-model.md +180 -0
- package/guides/getting-started.md +630 -137
- package/guides/signals.md +166 -0
- package/guides/state-machines.md +300 -0
- package/package.json +18 -7
- package/rfc/broker.md +100 -0
- package/rfc/browser.md +44 -0
- package/rfc/cli.md +118 -0
- package/rfc/git.md +61 -0
- package/rfc/mcp.md +43 -0
- package/rfc/node.md +36 -0
- package/rfc/play.md +472 -0
- package/rfc/rest.md +102 -0
- package/rfc/run.md +159 -0
- package/rfc/streams.md +168 -0
- package/api/@xmachines/play-actor/interfaces/ViewMetadata.md +0 -17
- package/api/@xmachines/play-catalog/README.md +0 -331
- package/api/@xmachines/play-catalog/functions/defineCatalog.md +0 -98
- package/api/@xmachines/play-catalog/functions/defineComponents.md +0 -134
- package/api/@xmachines/play-catalog/type-aliases/Catalog.md +0 -48
- package/api/@xmachines/play-catalog/type-aliases/ComponentsFor.md +0 -20
- package/api/@xmachines/play-catalog/type-aliases/InferComponentProps.md +0 -65
- package/api/@xmachines/play-catalog/type-aliases/NoExtraKeys.md +0 -17
- package/api/@xmachines/play-react/interfaces/PlayRendererProps.md +0 -15
- package/api/@xmachines/play-react-router/functions/PlayRouterProvider.md +0 -19
- package/api/@xmachines/play-react-router-demo/README.md +0 -137
- package/api/@xmachines/play-router/classes/BaseRouteMap.md +0 -142
- package/api/@xmachines/play-router/functions/connectRouter.md +0 -67
- package/api/@xmachines/play-router/functions/crawlMachine.md +0 -92
- package/api/@xmachines/play-router/functions/createRouter.md +0 -76
- package/api/@xmachines/play-router/functions/extractRoute.md +0 -45
- package/api/@xmachines/play-router/interfaces/BaseRouteMapping.md +0 -27
- package/api/@xmachines/play-router/interfaces/BrowserHistory.md +0 -172
- package/api/@xmachines/play-router/interfaces/BrowserWindow.md +0 -69
- package/api/@xmachines/play-router/interfaces/ConnectRouterOptions.md +0 -13
- package/api/@xmachines/play-router/interfaces/RouteMap.md +0 -56
- package/api/@xmachines/play-router/interfaces/StateVisit.md +0 -15
- package/api/@xmachines/play-router/interfaces/VanillaRouter.md +0 -28
- package/api/@xmachines/play-router-demo/README.md +0 -137
- package/api/@xmachines/play-solid/interfaces/PlayRendererProps.md +0 -15
- package/api/@xmachines/play-solid-router/functions/PlayRouterProvider.md +0 -19
- package/api/@xmachines/play-solid-router-demo/README.md +0 -127
- package/api/@xmachines/play-tanstack-react-router/functions/PlayRouterProvider.md +0 -19
- package/api/@xmachines/play-tanstack-react-router/functions/extractParams.md +0 -38
- package/api/@xmachines/play-tanstack-react-router/functions/extractQueryParams.md +0 -33
- package/api/@xmachines/play-tanstack-react-router/variables/extractMachineRoutes.md +0 -64
- package/api/@xmachines/play-tanstack-react-router-demo/README.md +0 -126
- package/api/@xmachines/play-tanstack-solid-router/classes/SolidRouterBridge.md +0 -343
- package/api/@xmachines/play-tanstack-solid-router/functions/PlayRouterProvider.md +0 -19
- package/api/@xmachines/play-tanstack-solid-router-demo/README.md +0 -126
- package/api/@xmachines/play-vue/interfaces/PlayRendererProps.md +0 -14
- package/api/@xmachines/play-vue-router/classes/VueBaseRouteMap.md +0 -201
- package/api/@xmachines/play-vue-router-demo/README.md +0 -133
- package/api/@xmachines/play-xstate/functions/mergeViewProps.md +0 -26
- package/api/@xmachines/play-xstate/functions/stateMatches.md +0 -25
- package/api/@xmachines/play-xstate/functions/validateComponentBinding.md +0 -39
- package/api/@xmachines/play-xstate/functions/validateViewProps.md +0 -80
- package/api/@xmachines/play-xstate/interfaces/CatalogEntry.md +0 -16
- package/api/@xmachines/play-xstate/type-aliases/Catalog.md +0 -21
- package/api/@xmachines/play-xstate/type-aliases/ValidationResult.md +0 -17
- package/api/@xmachines/play-xstate/type-aliases/ViewMergeContext.md +0 -35
- package/api/@xmachines/shared/functions/defineXmVitestConfig.md +0 -29
- package/api/@xmachines/shared/functions/xmAliases.md +0 -24
- package/guides/installation.md +0 -323
|
@@ -1,646 +1,229 @@
|
|
|
1
|
-
[
|
|
1
|
+
[API](../../README.md) / @xmachines/play-solid-router
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
**SolidJS Router adapter for XMachines Universal Player Architecture**
|
|
6
|
-
|
|
7
|
-
SolidJS Router adapter using `RouterBridgeBase` for consistent actor↔router sync.
|
|
8
|
-
|
|
9
|
-
## Overview
|
|
10
|
-
|
|
11
|
-
`@xmachines/play-solid-router` provides seamless integration between SolidJS Router and XMachines state machines. Built on Solid's reactive primitives, it enables zero-adaptation signals synchronization.
|
|
12
|
-
|
|
13
|
-
Per [RFC Play v1](https://gitlab.com/xmachin-es/rfc/-/blob/main/src/play-v1.md), this package implements:
|
|
14
|
-
|
|
15
|
-
- **Actor Authority (INV-01):** State machine controls navigation, router reflects decisions
|
|
16
|
-
- **Passive Infrastructure (INV-04):** Router observes `actor.currentRoute` signal
|
|
17
|
-
- **Signal-Only Reactivity (INV-05):** TC39 watcher lifecycle + Solid reactive owner integration
|
|
18
|
-
|
|
19
|
-
**Key Benefits:**
|
|
3
|
+
<!-- generated-by: gsd-doc-writer -->
|
|
20
4
|
|
|
21
|
-
|
|
22
|
-
- **Automatic tracking:** Uses Solid reactivity for router→actor while base class handles actor→router watcher lifecycle
|
|
23
|
-
- **Fine-grained reactivity:** Updates only affected components
|
|
24
|
-
- **Logic-driven navigation:** Business logic in state machines, not components
|
|
25
|
-
- **Type-safe parameters:** Route params flow through state machine context
|
|
5
|
+
# @xmachines/play-solid-router
|
|
26
6
|
|
|
27
|
-
|
|
7
|
+
SolidJS Router adapter for the XMachines Universal Player Architecture. Provides bidirectional synchronisation between a `PlayerActor`'s state machine routes and the browser URL via `@solidjs/router`.
|
|
28
8
|
|
|
29
|
-
|
|
30
|
-
- @solidjs/router 0.13.0+ (modern routing primitives)
|
|
31
|
-
- TC39 Signals polyfill integration
|
|
9
|
+
Part of the [xmachines-js monorepo](../../README.md).
|
|
32
10
|
|
|
33
11
|
## Installation
|
|
34
12
|
|
|
35
13
|
```bash
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
**Peer dependencies:**
|
|
40
|
-
|
|
41
|
-
- `@solidjs/router` ^0.13.0 — SolidJS Router library
|
|
42
|
-
- `solid-js` ^1.8.0 — SolidJS runtime
|
|
43
|
-
- `@xmachines/play-solid` — Solid renderer (`PlayRenderer`)
|
|
44
|
-
- `@xmachines/play-actor` — Actor base
|
|
45
|
-
- `@xmachines/play-router` — Route extraction
|
|
46
|
-
- `@xmachines/play-signals` — TC39 Signals primitives
|
|
47
|
-
|
|
48
|
-
## Quick Start
|
|
49
|
-
|
|
50
|
-
```typescript
|
|
51
|
-
import { Router, Route, useNavigate, useLocation, useParams } from '@solidjs/router';
|
|
52
|
-
import { onCleanup } from 'solid-js';
|
|
53
|
-
import { SolidRouterBridge, createRouteMap } from '@xmachines/play-solid-router';
|
|
54
|
-
import { definePlayer } from '@xmachines/play-xstate';
|
|
55
|
-
|
|
56
|
-
function App() {
|
|
57
|
-
// 1. Get SolidJS Router hooks (MUST be inside component)
|
|
58
|
-
const navigate = useNavigate();
|
|
59
|
-
const location = useLocation();
|
|
60
|
-
const params = useParams();
|
|
61
|
-
|
|
62
|
-
// 2. Create route mapping from machine routes
|
|
63
|
-
const routeMap = createRouteMap(authMachine);
|
|
64
|
-
|
|
65
|
-
// 3. Create player with state machine
|
|
66
|
-
const createPlayer = definePlayer({
|
|
67
|
-
machine: authMachine,
|
|
68
|
-
catalog: componentCatalog
|
|
69
|
-
});
|
|
70
|
-
const actor = createPlayer();
|
|
71
|
-
actor.start();
|
|
72
|
-
|
|
73
|
-
// 4. Create bridge to sync actor and router
|
|
74
|
-
const bridge = new SolidRouterBridge(
|
|
75
|
-
navigate,
|
|
76
|
-
location,
|
|
77
|
-
params,
|
|
78
|
-
actor,
|
|
79
|
-
routeMap
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
// 5. Start synchronization
|
|
83
|
-
bridge.connect();
|
|
84
|
-
|
|
85
|
-
// 6. Cleanup on component disposal
|
|
86
|
-
onCleanup(() => {
|
|
87
|
-
bridge.disconnect();
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
return (
|
|
91
|
-
<Router>
|
|
92
|
-
<Route path="/" component={HomeView} />
|
|
93
|
-
<Route path="/profile/:userId" component={ProfileView} />
|
|
94
|
-
<Route path="/settings/:section?" component={SettingsView} />
|
|
95
|
-
</Router>
|
|
96
|
-
);
|
|
97
|
-
}
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
## API Reference
|
|
101
|
-
|
|
102
|
-
### `SolidRouterBridge`
|
|
103
|
-
|
|
104
|
-
Router adapter implementing the `RouterBridge` protocol for SolidJS Router.
|
|
105
|
-
|
|
106
|
-
**Type Signature:**
|
|
107
|
-
|
|
108
|
-
```typescript
|
|
109
|
-
class SolidRouterBridge {
|
|
110
|
-
constructor(
|
|
111
|
-
navigate: ReturnType<typeof useNavigate>,
|
|
112
|
-
location: ReturnType<typeof useLocation>,
|
|
113
|
-
params: ReturnType<typeof useParams>,
|
|
114
|
-
actor: AbstractActor<any>,
|
|
115
|
-
routeMap: RouteMap,
|
|
116
|
-
);
|
|
117
|
-
dispose(): void;
|
|
118
|
-
}
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
**Constructor Parameters:**
|
|
122
|
-
|
|
123
|
-
- `navigate` - Function from `useNavigate()` hook (signals-aware navigation)
|
|
124
|
-
- `location` - Object from `useLocation()` hook (reactive pathname, search, hash)
|
|
125
|
-
- `params` - Object from `useParams()` hook (reactive route parameters)
|
|
126
|
-
- `actor` - XMachines actor instance (from `definePlayer().actor`)
|
|
127
|
-
- `routeMap` - Bidirectional state ID ↔ path mapping
|
|
128
|
-
|
|
129
|
-
**Methods:**
|
|
130
|
-
|
|
131
|
-
- `connect()` - Start bidirectional synchronization.
|
|
132
|
-
- `disconnect()` - Stop synchronization and cleanup bridge resources.
|
|
133
|
-
- `dispose()` - Alias of `disconnect()`.
|
|
134
|
-
|
|
135
|
-
**Internal Behavior:**
|
|
136
|
-
|
|
137
|
-
- Uses `RouterBridgeBase` TC39 watcher lifecycle for actor→router synchronization
|
|
138
|
-
- Updates SolidJS Router via `navigate(path)` when actor state changes
|
|
139
|
-
- Uses `createEffect(on(...))` to watch `location.pathname` signal
|
|
140
|
-
- Sends `play.route` events to actor when user navigates
|
|
141
|
-
- Prevents circular updates with path tracking and processing flags
|
|
142
|
-
|
|
143
|
-
### `RouteMap`
|
|
144
|
-
|
|
145
|
-
Bidirectional mapping between XMachines state IDs and SolidJS Router paths with pattern matching support.
|
|
146
|
-
|
|
147
|
-
`RouteMap` extends `BaseRouteMap` from `@xmachines/play-router`, inheriting bucket-indexed
|
|
148
|
-
bidirectional route matching. No routing logic lives in the adapter itself.
|
|
149
|
-
|
|
150
|
-
```typescript
|
|
151
|
-
interface RouteMapping {
|
|
152
|
-
readonly stateId: string;
|
|
153
|
-
readonly path: string;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// RouteMap is a thin subclass of BaseRouteMap — no extra methods
|
|
157
|
-
class RouteMap extends BaseRouteMap {}
|
|
158
|
-
|
|
159
|
-
// Inherited API:
|
|
160
|
-
routeMap.getStateIdByPath(path: string): string | null
|
|
161
|
-
routeMap.getPathByStateId(stateId: string): string | null
|
|
14
|
+
pnpm add @xmachines/play-solid-router
|
|
162
15
|
```
|
|
163
16
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
**Constructor Parameters:**
|
|
167
|
-
|
|
168
|
-
- `mappings` - Array of `{ stateId, path }` entries:
|
|
169
|
-
- `stateId` — State machine state ID (e.g., `'#profile'`)
|
|
170
|
-
- `path` — SolidJS Router path pattern (e.g., `'/profile/:userId'`)
|
|
171
|
-
|
|
172
|
-
**Methods:**
|
|
173
|
-
|
|
174
|
-
- `getPathByStateId(stateId)` — Find path pattern from state ID
|
|
175
|
-
- `getStateIdByPath(path)` — Find state ID from path with pattern matching (supports `:param` and `:param?` syntax)
|
|
176
|
-
|
|
177
|
-
**Pattern Matching:**
|
|
178
|
-
|
|
179
|
-
Uses bucket-indexed RegExp matching for dynamic routes:
|
|
180
|
-
|
|
181
|
-
```typescript
|
|
182
|
-
const routeMap = new RouteMap([{ stateId: "#settings", path: "/settings/:section?" }]);
|
|
17
|
+
**Peer dependencies** (must be installed separately):
|
|
183
18
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
routeMap.getStateIdByPath("/settings/privacy"); // '#settings'
|
|
187
|
-
routeMap.getStateIdByPath("/other"); // null
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
## Examples
|
|
191
|
-
|
|
192
|
-
### Basic Usage: Simple 2-3 Route Setup
|
|
193
|
-
|
|
194
|
-
```typescript
|
|
195
|
-
import { Router, Route } from '@solidjs/router';
|
|
196
|
-
import { createSignal } from 'solid-js';
|
|
197
|
-
import { defineCatalog } from '@xmachines/play-catalog';
|
|
198
|
-
|
|
199
|
-
// State machine with 3 states
|
|
200
|
-
const appMachine = setup({
|
|
201
|
-
types: {
|
|
202
|
-
events: {} as PlayRouteEvent
|
|
203
|
-
}
|
|
204
|
-
}).createMachine({
|
|
205
|
-
id: 'app',
|
|
206
|
-
initial: 'home',
|
|
207
|
-
states: {
|
|
208
|
-
home: {
|
|
209
|
-
meta: { route: '/', view: { component: 'Home' } }
|
|
210
|
-
},
|
|
211
|
-
about: {
|
|
212
|
-
meta: { route: '/about', view: { component: 'About' } }
|
|
213
|
-
},
|
|
214
|
-
contact: {
|
|
215
|
-
meta: { route: '/contact', view: { component: 'Contact' } }
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
const catalog = defineCatalog({
|
|
221
|
-
Home,
|
|
222
|
-
About,
|
|
223
|
-
Contact,
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
// Component setup
|
|
227
|
-
function App() {
|
|
228
|
-
const navigate = useNavigate();
|
|
229
|
-
const location = useLocation();
|
|
230
|
-
const params = useParams();
|
|
231
|
-
|
|
232
|
-
const routeMap = createRouteMap(appMachine);
|
|
233
|
-
|
|
234
|
-
const createPlayer = definePlayer({ machine: appMachine, catalog });
|
|
235
|
-
const actor = createPlayer();
|
|
236
|
-
actor.start();
|
|
237
|
-
const bridge = new SolidRouterBridge(navigate, location, params, actor, routeMap);
|
|
238
|
-
|
|
239
|
-
onCleanup(() => bridge.dispose());
|
|
240
|
-
|
|
241
|
-
return (
|
|
242
|
-
<Router>
|
|
243
|
-
<Route path="/" component={Home} />
|
|
244
|
-
<Route path="/about" component={About} />
|
|
245
|
-
<Route path="/contact" component={Contact} />
|
|
246
|
-
</Router>
|
|
247
|
-
);
|
|
248
|
-
}
|
|
19
|
+
```bash
|
|
20
|
+
pnpm add solid-js @solidjs/router xstate
|
|
249
21
|
```
|
|
250
22
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
// State machine with parameter routes
|
|
255
|
-
import { formatPlayRouteTransitions } from "@xmachines/play-xstate";
|
|
256
|
-
import { defineCatalog } from "@xmachines/play-catalog";
|
|
257
|
-
|
|
258
|
-
const machineConfig = {
|
|
259
|
-
id: 'app',
|
|
260
|
-
context: {},
|
|
261
|
-
states: {
|
|
262
|
-
profile: {
|
|
263
|
-
meta: {
|
|
264
|
-
route: '/profile/:userId',
|
|
265
|
-
view: { component: 'Profile' },
|
|
266
|
-
},
|
|
267
|
-
},
|
|
268
|
-
settings: {
|
|
269
|
-
meta: {
|
|
270
|
-
route: '/settings/:section?',
|
|
271
|
-
view: { component: 'Settings' },
|
|
272
|
-
},
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
};
|
|
276
|
-
|
|
277
|
-
const appMachine = setup({
|
|
278
|
-
types: {
|
|
279
|
-
context: {} as { userId?: string; section?: string },
|
|
280
|
-
events: {} as PlayRouteEvent
|
|
281
|
-
}
|
|
282
|
-
}).createMachine(formatPlayRouteTransitions(machineConfig));
|
|
23
|
+
- `solid-js` `^1.8.0`
|
|
24
|
+
- `@solidjs/router` `^0.16.1`
|
|
25
|
+
- `xstate` `^6.0.0-alpha.19`
|
|
283
26
|
|
|
284
|
-
|
|
285
|
-
Profile,
|
|
286
|
-
Settings,
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
// Router with dynamic routes
|
|
290
|
-
function App() {
|
|
291
|
-
const navigate = useNavigate();
|
|
292
|
-
const location = useLocation();
|
|
293
|
-
const params = useParams();
|
|
27
|
+
## Quick Start
|
|
294
28
|
|
|
295
|
-
|
|
29
|
+
```tsx
|
|
30
|
+
import { Router, Route, useNavigate, useLocation, useParams } from "@solidjs/router";
|
|
31
|
+
import { onCleanup, type ParentComponent } from "solid-js";
|
|
32
|
+
import { PlayRouterProvider, createRouteMap } from "@xmachines/play-solid-router";
|
|
33
|
+
import { definePlayer } from "@xmachines/play-xstate";
|
|
34
|
+
import { myMachine } from "./machine.js";
|
|
296
35
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
actor.start();
|
|
300
|
-
const bridge = new SolidRouterBridge(navigate, location, params, actor, routeMap);
|
|
36
|
+
const actor = definePlayer({ machine: myMachine })();
|
|
37
|
+
actor.start();
|
|
301
38
|
|
|
302
|
-
|
|
39
|
+
const routeMap = createRouteMap(myMachine);
|
|
303
40
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
</Router>
|
|
309
|
-
);
|
|
310
|
-
}
|
|
311
|
-
```
|
|
41
|
+
const Layout: ParentComponent = () => {
|
|
42
|
+
const navigate = useNavigate();
|
|
43
|
+
const location = useLocation();
|
|
44
|
+
const params = useParams();
|
|
312
45
|
|
|
313
|
-
|
|
46
|
+
onCleanup(() => actor.stop());
|
|
314
47
|
|
|
315
|
-
```tsx
|
|
316
|
-
function ProfileButton(props: { userId: string }) {
|
|
317
48
|
return (
|
|
318
|
-
<
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
})
|
|
325
|
-
}
|
|
326
|
-
>
|
|
327
|
-
View Profile
|
|
328
|
-
</button>
|
|
49
|
+
<PlayRouterProvider
|
|
50
|
+
actor={actor}
|
|
51
|
+
routeMap={routeMap}
|
|
52
|
+
router={{ navigate, location, params }}
|
|
53
|
+
renderer={(a, router) => <MyApp actor={a} />}
|
|
54
|
+
/>
|
|
329
55
|
);
|
|
330
|
-
}
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
### Query Parameters: Search/Filters via Query Strings
|
|
334
|
-
|
|
335
|
-
```typescript
|
|
336
|
-
// State machine with query param handling
|
|
337
|
-
import { formatPlayRouteTransitions } from "@xmachines/play-xstate";
|
|
338
|
-
import { defineCatalog } from "@xmachines/play-catalog";
|
|
339
|
-
|
|
340
|
-
const machineConfig = {
|
|
341
|
-
context: { query: '', filters: {} },
|
|
342
|
-
states: {
|
|
343
|
-
search: {
|
|
344
|
-
meta: {
|
|
345
|
-
route: '/search',
|
|
346
|
-
view: { component: 'Search' },
|
|
347
|
-
},
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
56
|
};
|
|
351
57
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
context: {} as { query: string; filters: Record<string, string> },
|
|
355
|
-
events: {} as PlayRouteEvent
|
|
356
|
-
}
|
|
357
|
-
}).createMachine(formatPlayRouteTransitions(machineConfig));
|
|
358
|
-
|
|
359
|
-
const catalog = defineCatalog({
|
|
360
|
-
Search,
|
|
361
|
-
});
|
|
362
|
-
|
|
363
|
-
const player = definePlayer({ machine: searchMachine, catalog });
|
|
364
|
-
|
|
365
|
-
// Component sends query params
|
|
366
|
-
function SearchBar(props) {
|
|
367
|
-
const [searchTerm, setSearchTerm] = createSignal('');
|
|
368
|
-
|
|
369
|
-
function handleSearch() {
|
|
370
|
-
props.actor.send({
|
|
371
|
-
type: 'play.route',
|
|
372
|
-
to: '#search',
|
|
373
|
-
query: { q: searchTerm(), tag: 'typescript' }
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
return (
|
|
378
|
-
<div>
|
|
379
|
-
<input
|
|
380
|
-
value={searchTerm()}
|
|
381
|
-
onInput={(e) => setSearchTerm(e.target.value)}
|
|
382
|
-
/>
|
|
383
|
-
<button onClick={handleSearch}>Search</button>
|
|
384
|
-
</div>
|
|
385
|
-
);
|
|
58
|
+
export default function App() {
|
|
59
|
+
return <Router root={Layout}>{/* one <Route> per routable state */}</Router>;
|
|
386
60
|
}
|
|
387
61
|
```
|
|
388
62
|
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
- `/search?q=xmachines&tag=typescript`
|
|
392
|
-
|
|
393
|
-
### Protected Routes: Authentication Guards
|
|
63
|
+
## API Summary
|
|
394
64
|
|
|
395
|
-
|
|
396
|
-
// State machine with auth guards
|
|
397
|
-
import { defineCatalog } from "@xmachines/play-catalog";
|
|
398
|
-
|
|
399
|
-
const authMachine = setup({
|
|
400
|
-
types: {
|
|
401
|
-
context: {} as { isAuthenticated: boolean },
|
|
402
|
-
events: {} as PlayRouteEvent | { type: "login" } | { type: "logout" },
|
|
403
|
-
},
|
|
404
|
-
}).createMachine({
|
|
405
|
-
context: { isAuthenticated: false },
|
|
406
|
-
initial: "home",
|
|
407
|
-
states: {
|
|
408
|
-
home: {
|
|
409
|
-
meta: { route: "/", view: { component: "Home" } },
|
|
410
|
-
},
|
|
411
|
-
login: {
|
|
412
|
-
meta: { route: "/login", view: { component: "Login" } },
|
|
413
|
-
on: {
|
|
414
|
-
login: {
|
|
415
|
-
target: "dashboard",
|
|
416
|
-
actions: assign({ isAuthenticated: true }),
|
|
417
|
-
},
|
|
418
|
-
},
|
|
419
|
-
},
|
|
420
|
-
dashboard: {
|
|
421
|
-
meta: { route: "/dashboard", view: { component: "Dashboard" } },
|
|
422
|
-
always: {
|
|
423
|
-
guard: ({ context }) => !context.isAuthenticated,
|
|
424
|
-
target: "login",
|
|
425
|
-
},
|
|
426
|
-
},
|
|
427
|
-
},
|
|
428
|
-
});
|
|
65
|
+
### `PlayRouterProvider`
|
|
429
66
|
|
|
430
|
-
|
|
431
|
-
Home,
|
|
432
|
-
Login,
|
|
433
|
-
Dashboard,
|
|
434
|
-
});
|
|
67
|
+
A SolidJS component that wires a `PlayerActor` to Solid Router. It creates and connects a `SolidRouterBridge` on mount and disconnects it via `onCleanup` on unmount.
|
|
435
68
|
|
|
436
|
-
|
|
69
|
+
```tsx
|
|
70
|
+
interface PlayRouterProviderProps<TActor extends PlayActor> {
|
|
71
|
+
/** The actor to sync with Solid Router. */
|
|
72
|
+
actor: TActor;
|
|
73
|
+
/** Bidirectional route map for state ID ↔ URL path lookups. */
|
|
74
|
+
routeMap: RouteMap;
|
|
75
|
+
/**
|
|
76
|
+
* The three Solid Router hook results that drive bidirectional sync.
|
|
77
|
+
* Must be obtained via useNavigate(), useLocation(), and useParams()
|
|
78
|
+
* inside a router context.
|
|
79
|
+
*/
|
|
80
|
+
router: SolidRouterHooks;
|
|
81
|
+
/** Render callback — receives the concrete actor type and router hooks. */
|
|
82
|
+
renderer: (actor: TActor, router: SolidRouterHooks) => JSX.Element;
|
|
83
|
+
}
|
|
437
84
|
```
|
|
438
85
|
|
|
439
|
-
|
|
86
|
+
### `SolidRouterBridge`
|
|
440
87
|
|
|
441
|
-
-
|
|
442
|
-
- Bridge sends `play.route` event to actor
|
|
443
|
-
- Actor's `always` guard checks `isAuthenticated`
|
|
444
|
-
- If `false`, actor transitions to `login` state
|
|
445
|
-
- Bridge detects state change via `createEffect`, redirects to `/login`
|
|
446
|
-
- Actor Authority principle enforced
|
|
88
|
+
Low-level class for manual integration. Extends `RouterBridgeBase` from `@xmachines/play-router` and uses Solid's `createEffect` for reactive router→actor sync.
|
|
447
89
|
|
|
448
|
-
|
|
90
|
+
> **Important:** `connect()` must be called inside a Solid reactive owner (component or `createRoot`). Cleanup is not automatic — call `disconnect()` (or `dispose()`) explicitly, typically in `onCleanup()`.
|
|
449
91
|
|
|
450
92
|
```tsx
|
|
451
|
-
import { onCleanup } from "
|
|
452
|
-
import { SolidRouterBridge } from "@xmachines/play-solid-router";
|
|
93
|
+
import { useNavigate, useLocation, useParams, onCleanup } from "@solidjs/router";
|
|
94
|
+
import { SolidRouterBridge, RouteMap } from "@xmachines/play-solid-router";
|
|
453
95
|
|
|
454
96
|
function App() {
|
|
455
97
|
const navigate = useNavigate();
|
|
456
98
|
const location = useLocation();
|
|
457
99
|
const params = useParams();
|
|
458
|
-
const actor = useContext(ActorContext);
|
|
459
|
-
const routeMap = useContext(RouteMapContext);
|
|
460
100
|
|
|
461
|
-
const
|
|
101
|
+
const routeMap = new RouteMap([
|
|
102
|
+
{ stateId: "#home", path: "/" },
|
|
103
|
+
{ stateId: "#profile", path: "/profile/:userId" },
|
|
104
|
+
]);
|
|
462
105
|
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
});
|
|
106
|
+
const bridge = new SolidRouterBridge(navigate, location, params, actor, routeMap);
|
|
107
|
+
bridge.connect();
|
|
108
|
+
onCleanup(() => bridge.disconnect());
|
|
467
109
|
|
|
468
|
-
return <
|
|
110
|
+
return <div>...</div>;
|
|
469
111
|
}
|
|
470
112
|
```
|
|
471
113
|
|
|
472
|
-
|
|
114
|
+
### `createRouteMap(machine)`
|
|
473
115
|
|
|
474
|
-
|
|
475
|
-
- Multiple bridge instances send duplicate events
|
|
476
|
-
- Tests fail with "Cannot send to stopped actor" errors
|
|
477
|
-
- Solid's fine-grained reactivity tracks disposed components
|
|
116
|
+
Factory that builds a `RouteMap` directly from an XState machine definition. Re-exported from `@xmachines/play-router`.
|
|
478
117
|
|
|
479
|
-
|
|
118
|
+
```ts
|
|
119
|
+
import { createRouteMap } from "@xmachines/play-solid-router";
|
|
480
120
|
|
|
481
|
-
|
|
121
|
+
const routeMap = createRouteMap(myMachine);
|
|
122
|
+
```
|
|
482
123
|
|
|
483
|
-
|
|
124
|
+
### `RouteMap` / `RouteMapping`
|
|
484
125
|
|
|
485
|
-
|
|
486
|
-
2. `actor.currentRoute` signal updates
|
|
487
|
-
3. `createEffect(on(...))` fires with new route value
|
|
488
|
-
4. Bridge extracts state ID from signal
|
|
489
|
-
5. Bridge looks up path via `routeMap.getPathByStateId(stateId)`
|
|
490
|
-
6. Bridge calls `navigate(path)`
|
|
491
|
-
7. SolidJS Router updates URL and renders component
|
|
126
|
+
Bidirectional state ID ↔ URL path mapping. Re-exported from `@xmachines/play-router`.
|
|
492
127
|
|
|
493
|
-
|
|
128
|
+
```ts
|
|
129
|
+
import { RouteMap } from "@xmachines/play-solid-router";
|
|
494
130
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
7. Actor validates navigation (guards, transitions)
|
|
502
|
-
8. If accepted: Actor transitions, signal updates, URL stays
|
|
503
|
-
9. If rejected: Actor redirects, bridge corrects URL via `navigate()`
|
|
131
|
+
const routeMap = new RouteMap([
|
|
132
|
+
{ stateId: "#home", path: "/" },
|
|
133
|
+
{ stateId: "#profile", path: "/profile/:userId" },
|
|
134
|
+
{ stateId: "#settings", path: "/settings/:section?" },
|
|
135
|
+
]);
|
|
136
|
+
```
|
|
504
137
|
|
|
505
|
-
###
|
|
138
|
+
### Types
|
|
506
139
|
|
|
507
|
-
|
|
140
|
+
| Export | Description |
|
|
141
|
+
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
142
|
+
| `PlayActor` | `AbstractActor & Routable & Viewable` — canonical actor shape from `@xmachines/play-router`. Required by `PlayRouterProvider`, which renders the current view spec in addition to synchronizing routes. |
|
|
143
|
+
| `RoutableActor` | Deprecated alias for `PlayActor`. Use `PlayActor` from `@xmachines/play-router` in new code. |
|
|
144
|
+
| `AbstractActor` | Re-exported from `@xmachines/play-actor` for convenience when typing renderer callbacks. |
|
|
145
|
+
| `SolidRouterHooks` | Shape of the `router` prop: `{ navigate, location, params }` |
|
|
146
|
+
| `PlayRouterProviderProps` | Full props interface for `PlayRouterProvider` |
|
|
147
|
+
| `PlayRouteEvent` | Event type sent to the actor on URL change (`play.route`) |
|
|
148
|
+
| `RouterBridge` | Interface implemented by `SolidRouterBridge` |
|
|
149
|
+
| `RouteMapOptions` | Options bag for `RouteMap` construction. Re-exported from `@xmachines/play-router`. |
|
|
508
150
|
|
|
509
|
-
|
|
510
|
-
2. **`isProcessingNavigation` flag:** Set during navigation processing, prevents concurrent syncs
|
|
511
|
-
3. **Effect timing:** Solid's batched updates and `defer: true` option prevent rapid cycles
|
|
151
|
+
## Usage Patterns
|
|
512
152
|
|
|
513
|
-
|
|
153
|
+
### Protected Routes and Guards
|
|
514
154
|
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
},
|
|
527
|
-
{ defer: true },
|
|
528
|
-
),
|
|
529
|
-
);
|
|
530
|
-
|
|
531
|
-
// Router → Actor
|
|
532
|
-
createEffect(
|
|
533
|
-
on(
|
|
534
|
-
() => this.location.pathname,
|
|
535
|
-
(pathname) => {
|
|
536
|
-
if (pathname === this.lastSyncedPath || this.isProcessingNavigation) {
|
|
537
|
-
return;
|
|
538
|
-
}
|
|
539
|
-
this.isProcessingNavigation = true;
|
|
540
|
-
this.actor.send({ type: "play.route", to: stateId, params });
|
|
541
|
-
this.isProcessingNavigation = false;
|
|
155
|
+
Auth guards live entirely inside the state machine, preventing flashes of unauthorized content:
|
|
156
|
+
|
|
157
|
+
```ts
|
|
158
|
+
const machineConfig = {
|
|
159
|
+
states: {
|
|
160
|
+
dashboard: {
|
|
161
|
+
meta: { route: "/dashboard" },
|
|
162
|
+
always: ({ context }) => {
|
|
163
|
+
if (context.isAuthenticated) return;
|
|
164
|
+
return { target: "login" };
|
|
165
|
+
},
|
|
542
166
|
},
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
);
|
|
167
|
+
},
|
|
168
|
+
};
|
|
546
169
|
```
|
|
547
170
|
|
|
548
|
-
|
|
171
|
+
When a user navigates to `/dashboard` while unauthenticated:
|
|
549
172
|
|
|
550
|
-
|
|
173
|
+
1. Solid Router updates the URL.
|
|
174
|
+
2. Bridge intercepts and sends `play.route` to the actor.
|
|
175
|
+
3. Actor evaluates the guard — denies transition, moves to `login` instead.
|
|
176
|
+
4. Bridge observes new actor route (`/login`) via TC39 Signal.
|
|
177
|
+
5. Bridge calls `navigate("/login")`.
|
|
551
178
|
|
|
552
|
-
|
|
553
|
-
- `@xmachines/play-actor` - Actor base class with signal protocol
|
|
554
|
-
- `@xmachines/play-router` - Route extraction and pattern matching
|
|
555
|
-
- `@xmachines/play-signals` - TC39 Signals polyfill for reactivity
|
|
556
|
-
- `@xmachines/play-xstate` - XState integration via `definePlayer()`
|
|
179
|
+
### Dynamic Routes with Parameters
|
|
557
180
|
|
|
558
|
-
|
|
181
|
+
```ts
|
|
182
|
+
const routeMap = new RouteMap([
|
|
183
|
+
{ stateId: "#post", path: "/users/:userId/posts/:postId" },
|
|
184
|
+
{ stateId: "#settings", path: "/settings/:section?" },
|
|
185
|
+
]);
|
|
559
186
|
|
|
187
|
+
// Params are extracted from Solid's useParams() and forwarded in the play.route event:
|
|
188
|
+
// { type: "play.route", to: "#post", params: { userId: "123", postId: "456" }, query: {} }
|
|
560
189
|
```
|
|
561
|
-
┌─────────────────────────────────────┐
|
|
562
|
-
│ Solid Components (View Layer) │
|
|
563
|
-
│ - Props include actor reference │
|
|
564
|
-
│ - Sends play.route events │
|
|
565
|
-
└─────────────────────────────────────┘
|
|
566
|
-
↕
|
|
567
|
-
┌─────────────────────────────────────┐
|
|
568
|
-
│ SolidRouterBridge (Adapter) │
|
|
569
|
-
│ - createEffect(actor.currentRoute) │
|
|
570
|
-
│ - createEffect(location.pathname) │
|
|
571
|
-
└─────────────────────────────────────┘
|
|
572
|
-
↕ ↕
|
|
573
|
-
┌─────────────┐ ┌──────────────────┐
|
|
574
|
-
│ SolidJS │ │ XMachines Actor │
|
|
575
|
-
│ Router │ │ (Business Logic) │
|
|
576
|
-
│ (Infra) │ │ │
|
|
577
|
-
└─────────────┘ └──────────────────┘
|
|
578
|
-
```
|
|
579
|
-
|
|
580
|
-
### Signals Integration (SolidJS-Specific)
|
|
581
190
|
|
|
582
|
-
|
|
191
|
+
Path parameters are extracted from Solid's reactive `useParams()` proxy — no URLPattern polyfill is needed for parameterized routes.
|
|
583
192
|
|
|
584
|
-
|
|
585
|
-
- **Automatic tracking:** `createEffect(on(...))` tracks dependencies without manual Watcher setup
|
|
586
|
-
- **Fine-grained updates:** Only affected components re-render (not full tree)
|
|
587
|
-
- **Batched updates:** Solid batches multiple signal changes in single render cycle
|
|
193
|
+
## Testing
|
|
588
194
|
|
|
589
|
-
|
|
195
|
+
Run tests for this package in isolation:
|
|
590
196
|
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
// ❌ WRONG: Bridge created outside component
|
|
595
|
-
const navigate = useNavigate(); // ERROR: No reactive context
|
|
596
|
-
const bridge = new SolidRouterBridge(navigate, ...);
|
|
197
|
+
```bash
|
|
198
|
+
# From the monorepo root
|
|
199
|
+
pnpm --filter @xmachines/play-solid-router test
|
|
597
200
|
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
const navigate = useNavigate();
|
|
601
|
-
const location = useLocation();
|
|
602
|
-
const params = useParams();
|
|
603
|
-
const bridge = new SolidRouterBridge(navigate, location, params, actor, routeMap);
|
|
604
|
-
onCleanup(() => bridge.dispose());
|
|
605
|
-
return <Router>...</Router>;
|
|
606
|
-
}
|
|
201
|
+
# Or from this package directory
|
|
202
|
+
pnpm test
|
|
607
203
|
```
|
|
608
204
|
|
|
609
|
-
**
|
|
205
|
+
**Browser tests** (`test/browser/**/*.browser.test.ts`) run against real Chromium via Playwright, covering async sequencing that jsdom cannot faithfully reproduce:
|
|
610
206
|
|
|
611
|
-
|
|
207
|
+
```bash
|
|
208
|
+
pnpm exec vitest --config vitest.browser.config.ts --project play-solid-router-browser
|
|
209
|
+
```
|
|
612
210
|
|
|
613
|
-
**
|
|
211
|
+
Coverage thresholds: **80%** lines, functions, branches, and statements.
|
|
614
212
|
|
|
615
|
-
|
|
616
|
-
relevant bucket (plus the wildcard `*` bucket for `:param`-first routes) is scanned —
|
|
617
|
-
typically far fewer than all registered routes.
|
|
213
|
+
## Related Packages
|
|
618
214
|
|
|
619
|
-
|
|
215
|
+
- [@xmachines/play-router](../play-router/README.md) — core router primitives and `RouterBridgeBase`
|
|
216
|
+
- [@xmachines/play-tanstack-solid-router](../play-tanstack-solid-router/README.md) — TanStack Solid Router adapter
|
|
217
|
+
- [@xmachines/play-solid](../play-solid/README.md) — SolidJS view renderer
|
|
218
|
+
- [@xmachines/play-xstate](../play-xstate/README.md) — XState v6 player factory
|
|
620
219
|
|
|
621
|
-
|
|
622
|
-
- `:param?` - Optional parameter (e.g., `/settings/:section?` matches `/settings` and `/settings/account`)
|
|
623
|
-
- Wildcards via `*` (future enhancement)
|
|
220
|
+
## Learn More
|
|
624
221
|
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
```typescript
|
|
628
|
-
const routeMap = new RouteMap([
|
|
629
|
-
{ stateId: "#profile", path: "/profile/:userId" },
|
|
630
|
-
{ stateId: "#settings", path: "/settings/:section?" },
|
|
631
|
-
]);
|
|
632
|
-
|
|
633
|
-
routeMap.getStateIdByPath("/profile/123"); // '#profile'
|
|
634
|
-
routeMap.getStateIdByPath("/settings"); // '#settings'
|
|
635
|
-
routeMap.getStateIdByPath("/settings/privacy"); // '#settings'
|
|
636
|
-
```
|
|
222
|
+
- [Demo](../../../examples/@xmachines/play-solid-router-demo/README.md)
|
|
637
223
|
|
|
638
224
|
## License
|
|
639
225
|
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
This work is licensed under the terms of the MIT license.
|
|
643
|
-
For a copy, see <https://opensource.org/licenses/MIT>.
|
|
226
|
+
MIT — see [LICENSE](LICENSE).
|
|
644
227
|
|
|
645
228
|
## Classes
|
|
646
229
|
|
|
@@ -650,17 +233,25 @@ For a copy, see <https://opensource.org/licenses/MIT>.
|
|
|
650
233
|
## Interfaces
|
|
651
234
|
|
|
652
235
|
- [AbstractActor](interfaces/AbstractActor.md)
|
|
236
|
+
- [PlayActor](interfaces/PlayActor.md)
|
|
653
237
|
- [PlayRouteEvent](interfaces/PlayRouteEvent.md)
|
|
238
|
+
- [PlayRouterProviderBaseProps](interfaces/PlayRouterProviderBaseProps.md)
|
|
654
239
|
- [PlayRouterProviderProps](interfaces/PlayRouterProviderProps.md)
|
|
240
|
+
- [RouteMapOptions](interfaces/RouteMapOptions.md)
|
|
655
241
|
- [RouteMapping](interfaces/RouteMapping.md)
|
|
656
242
|
- [RouterBridge](interfaces/RouterBridge.md)
|
|
657
243
|
|
|
658
244
|
## Type Aliases
|
|
659
245
|
|
|
660
|
-
- [
|
|
246
|
+
- [PlayRouterBridgeConstructor](type-aliases/PlayRouterBridgeConstructor.md)
|
|
247
|
+
- [~~RoutableActor~~](type-aliases/RoutableActor.md)
|
|
661
248
|
- [SolidRouterHooks](type-aliases/SolidRouterHooks.md)
|
|
662
249
|
|
|
250
|
+
## Variables
|
|
251
|
+
|
|
252
|
+
- [PlayRouterProvider](variables/PlayRouterProvider.md)
|
|
253
|
+
|
|
663
254
|
## Functions
|
|
664
255
|
|
|
256
|
+
- [createPlayRouterProvider](functions/createPlayRouterProvider.md)
|
|
665
257
|
- [createRouteMap](functions/createRouteMap.md)
|
|
666
|
-
- [PlayRouterProvider](functions/PlayRouterProvider.md)
|