{
    "source": "core/types/src/index.ts",
    "name": "NavigationFlow",
    "type": "object",
    "properties": {
        "startState": {
            "required": true,
            "node": {
                "type": "string",
                "title": "NavigationFlow.startState",
                "description": "The first state to kick off the state machine"
            }
        },
        "onStart": {
            "required": false,
            "node": {
                "type": "or",
                "or": [
                    {
                        "type": "ref",
                        "ref": "Expression",
                        "title": "NavigationFlow.onStart"
                    },
                    {
                        "source": "core/types/src/index.ts",
                        "name": "ExpressionObject",
                        "type": "object",
                        "properties": {
                            "exp": {
                                "required": false,
                                "node": {
                                    "type": "ref",
                                    "ref": "Expression",
                                    "title": "ExpressionObject.exp",
                                    "description": "The expression to run"
                                }
                            }
                        },
                        "additionalProperties": false,
                        "title": "ExpressionObject",
                        "description": "An object with an expression in it"
                    }
                ],
                "title": "NavigationFlow.onStart",
                "description": "An optional expression to run when this Flow starts"
            }
        },
        "onEnd": {
            "required": false,
            "node": {
                "type": "or",
                "or": [
                    {
                        "type": "ref",
                        "ref": "Expression",
                        "title": "NavigationFlow.onEnd"
                    },
                    {
                        "source": "core/types/src/index.ts",
                        "name": "ExpressionObject",
                        "type": "object",
                        "properties": {
                            "exp": {
                                "required": false,
                                "node": {
                                    "type": "ref",
                                    "ref": "Expression",
                                    "title": "ExpressionObject.exp",
                                    "description": "The expression to run"
                                }
                            }
                        },
                        "additionalProperties": false,
                        "title": "ExpressionObject",
                        "description": "An object with an expression in it"
                    }
                ],
                "title": "NavigationFlow.onEnd",
                "description": "An optional expression to run when this Flow ends"
            }
        }
    },
    "additionalProperties": {
        "type": "or",
        "or": [
            {
                "type": "undefined"
            },
            {
                "type": "string"
            },
            {
                "type": "ref",
                "ref": "Expression"
            },
            {
                "source": "core/types/src/index.ts",
                "name": "ExpressionObject",
                "type": "object",
                "properties": {
                    "exp": {
                        "required": false,
                        "node": {
                            "type": "ref",
                            "ref": "Expression",
                            "title": "ExpressionObject.exp",
                            "description": "The expression to run"
                        }
                    }
                },
                "additionalProperties": false,
                "title": "ExpressionObject",
                "description": "An object with an expression in it"
            },
            {
                "source": "core/types/src/index.ts",
                "name": "NavigationFlowState",
                "type": "or",
                "or": [
                    {
                        "source": "core/types/src/index.ts",
                        "name": "NavigationFlowViewState",
                        "type": "object",
                        "properties": {
                            "_comment": {
                                "required": false,
                                "node": {
                                    "type": "string",
                                    "title": "CommentBase._comment",
                                    "description": "Add comments that will not be processing, but are useful for code explanation"
                                }
                            },
                            "state_type": {
                                "required": true,
                                "node": {
                                    "type": "string",
                                    "const": "VIEW",
                                    "title": "NavigationBaseState.state_type",
                                    "description": "A property to determine the type of state this is"
                                }
                            },
                            "onStart": {
                                "required": false,
                                "node": {
                                    "type": "or",
                                    "or": [
                                        {
                                            "type": "ref",
                                            "ref": "Expression",
                                            "title": "NavigationBaseState.onStart"
                                        },
                                        {
                                            "source": "core/types/src/index.ts",
                                            "name": "ExpressionObject",
                                            "type": "object",
                                            "properties": {
                                                "exp": {
                                                    "required": false,
                                                    "node": {
                                                        "type": "ref",
                                                        "ref": "Expression",
                                                        "title": "ExpressionObject.exp",
                                                        "description": "The expression to run"
                                                    }
                                                }
                                            },
                                            "additionalProperties": false,
                                            "title": "ExpressionObject",
                                            "description": "An object with an expression in it"
                                        }
                                    ],
                                    "title": "NavigationBaseState.onStart",
                                    "description": "An optional expression to run when this view renders"
                                }
                            },
                            "onEnd": {
                                "required": false,
                                "node": {
                                    "type": "or",
                                    "or": [
                                        {
                                            "type": "ref",
                                            "ref": "Expression",
                                            "title": "NavigationBaseState.onEnd"
                                        },
                                        {
                                            "source": "core/types/src/index.ts",
                                            "name": "ExpressionObject",
                                            "type": "object",
                                            "properties": {
                                                "exp": {
                                                    "required": false,
                                                    "node": {
                                                        "type": "ref",
                                                        "ref": "Expression",
                                                        "title": "ExpressionObject.exp",
                                                        "description": "The expression to run"
                                                    }
                                                }
                                            },
                                            "additionalProperties": false,
                                            "title": "ExpressionObject",
                                            "description": "An object with an expression in it"
                                        }
                                    ],
                                    "title": "NavigationBaseState.onEnd",
                                    "description": "An optional expression to run before view transition"
                                }
                            },
                            "exp": {
                                "required": false,
                                "node": {
                                    "title": "NavigationBaseState.exp",
                                    "type": "never"
                                }
                            },
                            "transitions": {
                                "required": true,
                                "node": {
                                    "source": "core/types/src/index.ts",
                                    "name": "NavigationFlowTransition",
                                    "type": "record",
                                    "keyType": {
                                        "type": "string"
                                    },
                                    "valueType": {
                                        "type": "string"
                                    },
                                    "title": "NavigationFlowTransitionableState.transitions",
                                    "description": "A mapping of transition-name to FlowState name"
                                }
                            },
                            "ref": {
                                "required": true,
                                "node": {
                                    "type": "string",
                                    "title": "NavigationFlowViewState.ref",
                                    "description": "An id corresponding to a view from the 'views' array"
                                }
                            },
                            "attributes": {
                                "required": false,
                                "node": {
                                    "type": "object",
                                    "properties": {},
                                    "additionalProperties": {
                                        "type": "any"
                                    },
                                    "title": "NavigationFlowViewState.attributes",
                                    "description": "View meta-properties"
                                }
                            }
                        },
                        "additionalProperties": {
                            "type": "unknown"
                        },
                        "title": "NavigationFlowViewState",
                        "description": "A state representing a view"
                    },
                    {
                        "source": "core/types/src/index.ts",
                        "name": "NavigationFlowEndState",
                        "type": "object",
                        "properties": {
                            "_comment": {
                                "required": false,
                                "node": {
                                    "type": "string",
                                    "title": "CommentBase._comment",
                                    "description": "Add comments that will not be processing, but are useful for code explanation"
                                }
                            },
                            "state_type": {
                                "required": true,
                                "node": {
                                    "type": "string",
                                    "const": "END",
                                    "title": "NavigationBaseState.state_type",
                                    "description": "A property to determine the type of state this is"
                                }
                            },
                            "onStart": {
                                "required": false,
                                "node": {
                                    "type": "or",
                                    "or": [
                                        {
                                            "type": "ref",
                                            "ref": "Expression",
                                            "title": "NavigationBaseState.onStart"
                                        },
                                        {
                                            "source": "core/types/src/index.ts",
                                            "name": "ExpressionObject",
                                            "type": "object",
                                            "properties": {
                                                "exp": {
                                                    "required": false,
                                                    "node": {
                                                        "type": "ref",
                                                        "ref": "Expression",
                                                        "title": "ExpressionObject.exp",
                                                        "description": "The expression to run"
                                                    }
                                                }
                                            },
                                            "additionalProperties": false,
                                            "title": "ExpressionObject",
                                            "description": "An object with an expression in it"
                                        }
                                    ],
                                    "title": "NavigationBaseState.onStart",
                                    "description": "An optional expression to run when this view renders"
                                }
                            },
                            "onEnd": {
                                "required": false,
                                "node": {
                                    "type": "or",
                                    "or": [
                                        {
                                            "type": "ref",
                                            "ref": "Expression",
                                            "title": "NavigationBaseState.onEnd"
                                        },
                                        {
                                            "source": "core/types/src/index.ts",
                                            "name": "ExpressionObject",
                                            "type": "object",
                                            "properties": {
                                                "exp": {
                                                    "required": false,
                                                    "node": {
                                                        "type": "ref",
                                                        "ref": "Expression",
                                                        "title": "ExpressionObject.exp",
                                                        "description": "The expression to run"
                                                    }
                                                }
                                            },
                                            "additionalProperties": false,
                                            "title": "ExpressionObject",
                                            "description": "An object with an expression in it"
                                        }
                                    ],
                                    "title": "NavigationBaseState.onEnd",
                                    "description": "An optional expression to run before view transition"
                                }
                            },
                            "exp": {
                                "required": false,
                                "node": {
                                    "title": "NavigationBaseState.exp",
                                    "type": "never"
                                }
                            },
                            "outcome": {
                                "required": true,
                                "node": {
                                    "type": "string",
                                    "title": "NavigationFlowEndState.outcome",
                                    "description": "A description of _how_ the flow ended.\nIf this is a flow started from another flow, the outcome determines the flow transition"
                                }
                            }
                        },
                        "additionalProperties": {
                            "type": "unknown"
                        },
                        "title": "NavigationFlowEndState",
                        "description": "An END state of the flow."
                    },
                    {
                        "source": "core/types/src/index.ts",
                        "name": "NavigationFlowFlowState",
                        "type": "object",
                        "properties": {
                            "_comment": {
                                "required": false,
                                "node": {
                                    "type": "string",
                                    "title": "CommentBase._comment",
                                    "description": "Add comments that will not be processing, but are useful for code explanation"
                                }
                            },
                            "state_type": {
                                "required": true,
                                "node": {
                                    "type": "string",
                                    "const": "FLOW",
                                    "title": "NavigationBaseState.state_type",
                                    "description": "A property to determine the type of state this is"
                                }
                            },
                            "onStart": {
                                "required": false,
                                "node": {
                                    "type": "or",
                                    "or": [
                                        {
                                            "type": "ref",
                                            "ref": "Expression",
                                            "title": "NavigationBaseState.onStart"
                                        },
                                        {
                                            "source": "core/types/src/index.ts",
                                            "name": "ExpressionObject",
                                            "type": "object",
                                            "properties": {
                                                "exp": {
                                                    "required": false,
                                                    "node": {
                                                        "type": "ref",
                                                        "ref": "Expression",
                                                        "title": "ExpressionObject.exp",
                                                        "description": "The expression to run"
                                                    }
                                                }
                                            },
                                            "additionalProperties": false,
                                            "title": "ExpressionObject",
                                            "description": "An object with an expression in it"
                                        }
                                    ],
                                    "title": "NavigationBaseState.onStart",
                                    "description": "An optional expression to run when this view renders"
                                }
                            },
                            "onEnd": {
                                "required": false,
                                "node": {
                                    "type": "or",
                                    "or": [
                                        {
                                            "type": "ref",
                                            "ref": "Expression",
                                            "title": "NavigationBaseState.onEnd"
                                        },
                                        {
                                            "source": "core/types/src/index.ts",
                                            "name": "ExpressionObject",
                                            "type": "object",
                                            "properties": {
                                                "exp": {
                                                    "required": false,
                                                    "node": {
                                                        "type": "ref",
                                                        "ref": "Expression",
                                                        "title": "ExpressionObject.exp",
                                                        "description": "The expression to run"
                                                    }
                                                }
                                            },
                                            "additionalProperties": false,
                                            "title": "ExpressionObject",
                                            "description": "An object with an expression in it"
                                        }
                                    ],
                                    "title": "NavigationBaseState.onEnd",
                                    "description": "An optional expression to run before view transition"
                                }
                            },
                            "exp": {
                                "required": false,
                                "node": {
                                    "title": "NavigationBaseState.exp",
                                    "type": "never"
                                }
                            },
                            "transitions": {
                                "required": true,
                                "node": {
                                    "source": "core/types/src/index.ts",
                                    "name": "NavigationFlowTransition",
                                    "type": "record",
                                    "keyType": {
                                        "type": "string"
                                    },
                                    "valueType": {
                                        "type": "string"
                                    },
                                    "title": "NavigationFlowTransitionableState.transitions",
                                    "description": "A mapping of transition-name to FlowState name"
                                }
                            },
                            "ref": {
                                "required": true,
                                "node": {
                                    "type": "string",
                                    "title": "NavigationFlowFlowState.ref",
                                    "description": "A reference to a FLOW id state to run"
                                }
                            }
                        },
                        "additionalProperties": false,
                        "title": "NavigationFlowFlowState"
                    },
                    {
                        "source": "core/types/src/index.ts",
                        "name": "NavigationFlowActionState",
                        "type": "object",
                        "properties": {
                            "_comment": {
                                "required": false,
                                "node": {
                                    "type": "string",
                                    "title": "CommentBase._comment",
                                    "description": "Add comments that will not be processing, but are useful for code explanation"
                                }
                            },
                            "state_type": {
                                "required": true,
                                "node": {
                                    "type": "string",
                                    "const": "ACTION",
                                    "title": "NavigationBaseState.state_type",
                                    "description": "A property to determine the type of state this is"
                                }
                            },
                            "onStart": {
                                "required": false,
                                "node": {
                                    "type": "or",
                                    "or": [
                                        {
                                            "type": "ref",
                                            "ref": "Expression",
                                            "title": "NavigationBaseState.onStart"
                                        },
                                        {
                                            "source": "core/types/src/index.ts",
                                            "name": "ExpressionObject",
                                            "type": "object",
                                            "properties": {
                                                "exp": {
                                                    "required": false,
                                                    "node": {
                                                        "type": "ref",
                                                        "ref": "Expression",
                                                        "title": "ExpressionObject.exp",
                                                        "description": "The expression to run"
                                                    }
                                                }
                                            },
                                            "additionalProperties": false,
                                            "title": "ExpressionObject",
                                            "description": "An object with an expression in it"
                                        }
                                    ],
                                    "title": "NavigationBaseState.onStart",
                                    "description": "An optional expression to run when this view renders"
                                }
                            },
                            "onEnd": {
                                "required": false,
                                "node": {
                                    "type": "or",
                                    "or": [
                                        {
                                            "type": "ref",
                                            "ref": "Expression",
                                            "title": "NavigationBaseState.onEnd"
                                        },
                                        {
                                            "source": "core/types/src/index.ts",
                                            "name": "ExpressionObject",
                                            "type": "object",
                                            "properties": {
                                                "exp": {
                                                    "required": false,
                                                    "node": {
                                                        "type": "ref",
                                                        "ref": "Expression",
                                                        "title": "ExpressionObject.exp",
                                                        "description": "The expression to run"
                                                    }
                                                }
                                            },
                                            "additionalProperties": false,
                                            "title": "ExpressionObject",
                                            "description": "An object with an expression in it"
                                        }
                                    ],
                                    "title": "NavigationBaseState.onEnd",
                                    "description": "An optional expression to run before view transition"
                                }
                            },
                            "exp": {
                                "required": true,
                                "node": {
                                    "type": "ref",
                                    "ref": "Expression",
                                    "title": "NavigationFlowActionState.exp",
                                    "description": "An expression to execute.\nThe return value determines the transition to take"
                                }
                            },
                            "transitions": {
                                "required": true,
                                "node": {
                                    "source": "core/types/src/index.ts",
                                    "name": "NavigationFlowTransition",
                                    "type": "record",
                                    "keyType": {
                                        "type": "string"
                                    },
                                    "valueType": {
                                        "type": "string"
                                    },
                                    "title": "NavigationFlowTransitionableState.transitions",
                                    "description": "A mapping of transition-name to FlowState name"
                                }
                            }
                        },
                        "additionalProperties": false,
                        "title": "NavigationFlowActionState",
                        "description": "Action states execute an expression to determine the next state to transition to"
                    },
                    {
                        "source": "core/types/src/index.ts",
                        "name": "NavigationFlowAsyncActionState",
                        "type": "object",
                        "properties": {
                            "_comment": {
                                "required": false,
                                "node": {
                                    "type": "string",
                                    "title": "CommentBase._comment",
                                    "description": "Add comments that will not be processing, but are useful for code explanation"
                                }
                            },
                            "state_type": {
                                "required": true,
                                "node": {
                                    "type": "string",
                                    "const": "ASYNC_ACTION",
                                    "title": "NavigationBaseState.state_type",
                                    "description": "A property to determine the type of state this is"
                                }
                            },
                            "onStart": {
                                "required": false,
                                "node": {
                                    "type": "or",
                                    "or": [
                                        {
                                            "type": "ref",
                                            "ref": "Expression",
                                            "title": "NavigationBaseState.onStart"
                                        },
                                        {
                                            "source": "core/types/src/index.ts",
                                            "name": "ExpressionObject",
                                            "type": "object",
                                            "properties": {
                                                "exp": {
                                                    "required": false,
                                                    "node": {
                                                        "type": "ref",
                                                        "ref": "Expression",
                                                        "title": "ExpressionObject.exp",
                                                        "description": "The expression to run"
                                                    }
                                                }
                                            },
                                            "additionalProperties": false,
                                            "title": "ExpressionObject",
                                            "description": "An object with an expression in it"
                                        }
                                    ],
                                    "title": "NavigationBaseState.onStart",
                                    "description": "An optional expression to run when this view renders"
                                }
                            },
                            "onEnd": {
                                "required": false,
                                "node": {
                                    "type": "or",
                                    "or": [
                                        {
                                            "type": "ref",
                                            "ref": "Expression",
                                            "title": "NavigationBaseState.onEnd"
                                        },
                                        {
                                            "source": "core/types/src/index.ts",
                                            "name": "ExpressionObject",
                                            "type": "object",
                                            "properties": {
                                                "exp": {
                                                    "required": false,
                                                    "node": {
                                                        "type": "ref",
                                                        "ref": "Expression",
                                                        "title": "ExpressionObject.exp",
                                                        "description": "The expression to run"
                                                    }
                                                }
                                            },
                                            "additionalProperties": false,
                                            "title": "ExpressionObject",
                                            "description": "An object with an expression in it"
                                        }
                                    ],
                                    "title": "NavigationBaseState.onEnd",
                                    "description": "An optional expression to run before view transition"
                                }
                            },
                            "exp": {
                                "required": true,
                                "node": {
                                    "type": "ref",
                                    "ref": "Expression",
                                    "title": "NavigationFlowAsyncActionState.exp",
                                    "description": "An expression to execute.\nThe return value determines the transition to take"
                                }
                            },
                            "transitions": {
                                "required": true,
                                "node": {
                                    "source": "core/types/src/index.ts",
                                    "name": "NavigationFlowTransition",
                                    "type": "record",
                                    "keyType": {
                                        "type": "string"
                                    },
                                    "valueType": {
                                        "type": "string"
                                    },
                                    "title": "NavigationFlowTransitionableState.transitions",
                                    "description": "A mapping of transition-name to FlowState name"
                                }
                            },
                            "await": {
                                "required": true,
                                "node": {
                                    "type": "boolean",
                                    "title": "NavigationFlowAsyncActionState.await",
                                    "description": "Whether the expression(s) should be awaited before transitioning"
                                }
                            }
                        },
                        "additionalProperties": false,
                        "title": "NavigationFlowAsyncActionState",
                        "description": "Action states execute an expression to determine the next state to transition to"
                    },
                    {
                        "source": "core/types/src/index.ts",
                        "name": "NavigationFlowExternalState",
                        "type": "object",
                        "properties": {
                            "_comment": {
                                "required": false,
                                "node": {
                                    "type": "string",
                                    "title": "CommentBase._comment",
                                    "description": "Add comments that will not be processing, but are useful for code explanation"
                                }
                            },
                            "state_type": {
                                "required": true,
                                "node": {
                                    "type": "string",
                                    "const": "EXTERNAL",
                                    "title": "NavigationBaseState.state_type",
                                    "description": "A property to determine the type of state this is"
                                }
                            },
                            "onStart": {
                                "required": false,
                                "node": {
                                    "type": "or",
                                    "or": [
                                        {
                                            "type": "ref",
                                            "ref": "Expression",
                                            "title": "NavigationBaseState.onStart"
                                        },
                                        {
                                            "source": "core/types/src/index.ts",
                                            "name": "ExpressionObject",
                                            "type": "object",
                                            "properties": {
                                                "exp": {
                                                    "required": false,
                                                    "node": {
                                                        "type": "ref",
                                                        "ref": "Expression",
                                                        "title": "ExpressionObject.exp",
                                                        "description": "The expression to run"
                                                    }
                                                }
                                            },
                                            "additionalProperties": false,
                                            "title": "ExpressionObject",
                                            "description": "An object with an expression in it"
                                        }
                                    ],
                                    "title": "NavigationBaseState.onStart",
                                    "description": "An optional expression to run when this view renders"
                                }
                            },
                            "onEnd": {
                                "required": false,
                                "node": {
                                    "type": "or",
                                    "or": [
                                        {
                                            "type": "ref",
                                            "ref": "Expression",
                                            "title": "NavigationBaseState.onEnd"
                                        },
                                        {
                                            "source": "core/types/src/index.ts",
                                            "name": "ExpressionObject",
                                            "type": "object",
                                            "properties": {
                                                "exp": {
                                                    "required": false,
                                                    "node": {
                                                        "type": "ref",
                                                        "ref": "Expression",
                                                        "title": "ExpressionObject.exp",
                                                        "description": "The expression to run"
                                                    }
                                                }
                                            },
                                            "additionalProperties": false,
                                            "title": "ExpressionObject",
                                            "description": "An object with an expression in it"
                                        }
                                    ],
                                    "title": "NavigationBaseState.onEnd",
                                    "description": "An optional expression to run before view transition"
                                }
                            },
                            "exp": {
                                "required": false,
                                "node": {
                                    "title": "NavigationBaseState.exp",
                                    "type": "never"
                                }
                            },
                            "transitions": {
                                "required": true,
                                "node": {
                                    "source": "core/types/src/index.ts",
                                    "name": "NavigationFlowTransition",
                                    "type": "record",
                                    "keyType": {
                                        "type": "string"
                                    },
                                    "valueType": {
                                        "type": "string"
                                    },
                                    "title": "NavigationFlowTransitionableState.transitions",
                                    "description": "A mapping of transition-name to FlowState name"
                                }
                            },
                            "ref": {
                                "required": true,
                                "node": {
                                    "type": "string",
                                    "title": "NavigationFlowExternalState.ref",
                                    "description": "A reference for this external state"
                                }
                            }
                        },
                        "additionalProperties": {
                            "type": "unknown"
                        },
                        "title": "NavigationFlowExternalState",
                        "description": "External Flow states represent states in the FSM that can't be resolved internally in Player.\nThe flow will wait for the embedded application to manage moving to the next state via a transition"
                    }
                ],
                "title": "NavigationFlowState"
            }
        ]
    },
    "title": "NavigationFlow",
    "description": "A state machine in the navigation"
}