diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a002b790..19a26432 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,5 +1,13 @@ # Fallback -* @adierkens +* @KetanReddy # Language language/ @KetanReddy @adierkens +cli/ @KetanReddy @adierkens + +# XLR +xlr/ @KetanReddy +drag-and-drop/ @KetanReddy @adierkens + +# DevTools +devtools/ @sugarmanz \ No newline at end of file diff --git a/WORKSPACE b/WORKSPACE index 69ffa190..5082b3a4 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,15 +5,13 @@ workspace( }, ) -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") -http_archive( - name = "rules_player", - strip_prefix = "rules_player-0.10.0", - urls = ["https://github.com/player-ui/rules_player/archive/refs/tags/v0.10.0.tar.gz"], - sha256 = "73597c76a5ceb6c1f84735e0e086792e4695759c62c22f45e13041862c6b0c33" +git_repository( + name = "rules_player", + remote = "https://github.com/player-ui/rules_player.git", + branch = "esm-native-builds" ) - load("@rules_player//:workspace.bzl", "deps") deps() diff --git a/cli/src/commands/xlr/convert.ts b/cli/src/commands/xlr/convert.ts index 52b40c4d..357285d9 100644 --- a/cli/src/commands/xlr/convert.ts +++ b/cli/src/commands/xlr/convert.ts @@ -1,10 +1,14 @@ import { Flags } from '@oclif/core'; import path from 'path'; import fs from 'fs'; +import ts from 'typescript'; import chalk from 'chalk'; import type { ExportTypes } from '@player-tools/xlr-sdk'; import { XLRSDK } from '@player-tools/xlr-sdk'; import logSymbols from 'log-symbols'; +import type { NamedType } from '@player-tools/xlr'; +import type { TopLevelDeclaration } from '@player-tools/xlr-utils'; +import { TSWriter } from '@player-tools/xlr-converters'; import { BaseCommand } from '../../utils/base-command'; const PlayerImportMap = new Map([ @@ -39,6 +43,8 @@ export default class XLRConvert extends BaseCommand { }), }; + private tsWriter = new TSWriter(); + private async getOptions() { const { flags } = await this.parse(XLRConvert); @@ -51,7 +57,7 @@ export default class XLRConvert extends BaseCommand { const language = flags.lang as ExportTypes; if (!language) { - throw new Error(`Need to specifiy lanauge to export to`); + throw new Error(`Need to specify language to export to`); } return { @@ -61,6 +67,71 @@ export default class XLRConvert extends BaseCommand { }; } + private exportToTypeScript( + typesToExport: NamedType[], + importMap: Map + ): string { + const referencedImports: Set = new Set(); + const exportedTypes: Map = new Map(); + const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed }); + + let resultFile = ts.createSourceFile( + 'output.d.ts', + '', + ts.ScriptTarget.ES2017, + false, // setParentNodes + ts.ScriptKind.TS + ); + + typesToExport.forEach((typeNode) => { + const { type, referencedTypes, additionalTypes } = + this.tsWriter.convertNamedType(typeNode); + exportedTypes.set(typeNode.name, type); + additionalTypes?.forEach((additionalType, name) => + exportedTypes.set(name, additionalType) + ); + referencedTypes?.forEach((referencedType) => + referencedImports.add(referencedType) + ); + }); + + const typesToPrint: Array = []; + + exportedTypes.forEach((type) => + typesToPrint.push( + printer.printNode(ts.EmitHint.Unspecified, type, resultFile) + ) + ); + + importMap.forEach((imports, packageName) => { + const applicableImports = imports.filter((i) => referencedImports.has(i)); + resultFile = ts.factory.updateSourceFile(resultFile, [ + ts.factory.createImportDeclaration( + /* modifiers */ undefined, + ts.factory.createImportClause( + false, + undefined, + ts.factory.createNamedImports( + applicableImports.map((i) => + ts.factory.createImportSpecifier( + false, + undefined, + ts.factory.createIdentifier(i) + ) + ) + ) + ), + ts.factory.createStringLiteral(packageName) + ), + ...resultFile.statements, + ]); + }); + + const headerText = printer.printFile(resultFile); + const nodeText = typesToPrint.join('\n'); + return `${headerText}\n${nodeText}`; + } + async run(): Promise<{ /** the status code */ exitCode: number; @@ -73,8 +144,16 @@ export default class XLRConvert extends BaseCommand { const sdk = new XLRSDK(); sdk.loadDefinitionsFromDisk(inputPath); - const files = sdk.exportRegistry(language, PlayerImportMap); - files.forEach(([filename, fileContents]) => { + const types = sdk.exportRegistry(); + let writtenFiles; + if (language === 'TypeScript') { + const outputString = this.exportToTypeScript(types, PlayerImportMap); + writtenFiles = [['out.d.ts', outputString]]; + } else { + throw new Error(`Unknown export format ${language}`); + } + + writtenFiles.forEach(([filename, fileContents]) => { fs.writeFileSync(path.join(outputDir, filename), fileContents, {}); }); } catch (e: any) { diff --git a/drag-and-drop/README.md b/drag-and-drop/README.md new file mode 100644 index 00000000..8824cf0f --- /dev/null +++ b/drag-and-drop/README.md @@ -0,0 +1,4 @@ +# Drag and Drop + +This is a collection of utility libraries and reference integrations for constructing a drag-and-drop editor for Player content. + diff --git a/drag-and-drop/app/BUILD b/drag-and-drop/app/BUILD new file mode 100644 index 00000000..763f41d1 --- /dev/null +++ b/drag-and-drop/app/BUILD @@ -0,0 +1,52 @@ +load("@npm//next:index.bzl", "next") +load("@rules_player//javascript/next:next_build.bzl", "next_export") + +package(default_visibility = ["//visibility:public"]) + +srcs = glob([ + "public/**/*", + "pages/**/*", + "styles/*", + "components/**/*", + "plugins/*", + "utils/*", + "config/*", +]) + [ + "next.config.mjs", + "next-env.d.ts", + "tsconfig.json" +] + +data = [ + "//drag-and-drop/library:@player-tools/dnd-lib", + "@npm//@player-ui/types", + "@npm//typescript", + "@npm//@chakra-ui/react", + "@npm//@player-ui/reference-assets-plugin-react", + "@npm//@types/react", + "@npm//@types/node", + "@npm//timm", + "@npm//react-syntax-highlighter", + "@npm//react-docgen-typescript", + "@npm//react-files" +] + +next_export( + name = "site", + data = data, + srcs = srcs, + env = { + "NODE_ENV": "production", + # Need this b/c next will pull from env directly + # This just maps to a value we can stamp w/ later on + "NEXT_PUBLIC_GA_MEASUREMENT_ID": "NEXT_PUBLIC_GA_MEASUREMENT_ID", + }, +) + +next( + name = "start", + args = [ + "dev", './drag-and-drop/app' + ], + data = data + srcs, +) \ No newline at end of file diff --git a/drag-and-drop/app/components/AssetEditorPanel.tsx b/drag-and-drop/app/components/AssetEditorPanel.tsx new file mode 100644 index 00000000..1d549672 --- /dev/null +++ b/drag-and-drop/app/components/AssetEditorPanel.tsx @@ -0,0 +1,249 @@ +/* eslint-disable react/no-array-index-key */ +import React from 'react'; +import { + Box, + Button, + Card, + CardBody, + Input, + NumberDecrementStepper, + NumberIncrementStepper, + NumberInput, + NumberInputField, + NumberInputStepper, + Radio, + RadioGroup, + Stack, + Text, + Select, + StackDivider, + VStack, +} from '@chakra-ui/react'; +import type { NodeType, ObjectType } from '@player-tools/xlr'; +import type { Asset } from '@player-ui/types'; +import { UUIDSymbol } from '@player-tools/dnd-lib'; +import { useController, useProperties } from '../utils/context'; + +export interface AssetEditorPanelProps { + /** Current authored Asset */ + asset: Asset; + /** Backing XLR Asset */ + type: ObjectType; + /** Function to propagate updates with */ + onUpdate: (path: Array, value: any) => void; +} + +export interface ConstantPropertyBoxProps { + /** The constant value to render */ + value: string | boolean | number; +} + +export interface PropertyBoxProps { + /** Backing XLR type */ + type: NodeType; + /** Portion of an authored Asset */ + asset?: unknown; + /** Is the property required */ + required?: boolean; + /** The name of the parent property being rendered */ + path?: Array; + /** Should a title be displayed for the rendered element */ + title?: boolean; + /** Function to propagate updates with */ + onUpdate: (path: Array, value: any) => void; +} + +/** + * Renders a constant value of the type + */ +const ConstantPropertyBox = (props) => { + return ; +}; + +/** + * + */ +const AvailableAssetsDropDown = (props) => { + const { controller } = useController(); + const availableAssets = + controller?.getAvailableAssets().filter((c) => c.capability === 'Assets') ?? + []; + + return ( + + ); +}; + +/** + * + */ +const AssetLink = (props) => { + const properties = useProperties(); + + return ( + + ); +}; + +/** + * + */ +export const PropertyBox = (props: PropertyBoxProps) => { + const { + asset, + path = [], + type: node, + title = true, + required = false, + } = props; + + let renderedComponent; + + if (node.type === 'ref' && node.ref.includes('AssetWrapper')) { + if ((asset as any)?.asset.value) { + renderedComponent = ( + + ); + } else { + renderedComponent = ( + + ); + } + } else if ( + (node.type === 'string' || + node.type === 'number' || + node.type === 'boolean') && + node.const + ) { + renderedComponent = ( + + ); + } else if ( + node.type === 'string' || + (node.type === 'ref' && + (node.ref === 'Expression' || node.ref === 'Binding')) + ) { + renderedComponent = ( + { + props.onUpdate(path, event.target.value); + }} + /> + ); + } else if (node.type === 'number') { + renderedComponent = ( + + + + + + + + ); + } else if (node.type === 'boolean') { + renderedComponent = ( +
+ + + True + False + + +
+ ); + } else if (node.type === 'object') { + const elements = Object.keys(node.properties).map((property) => { + const { required: requiredProperty, node: propertyNode } = + node.properties[property]; + return ( + + ); + }); + + const filteredChildren = React.Children.toArray(elements); + + renderedComponent = ( + + + } + > + {filteredChildren} + + + + ); + } else if (node.type === 'or') { + renderedComponent = ( + + {node.or.map((element, index) => { + return ( + + {index !== 0 && or} + + + ); + })} + + ); + } + + // Catch unimplemented form controls during development + const parentProperty = path[path.length - 1]; + return ( + + {title && {parentProperty}} + {renderedComponent} + + ); +}; diff --git a/drag-and-drop/app/next-env.d.ts b/drag-and-drop/app/next-env.d.ts new file mode 100644 index 00000000..4f11a03d --- /dev/null +++ b/drag-and-drop/app/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/drag-and-drop/app/next.config.mjs b/drag-and-drop/app/next.config.mjs new file mode 100644 index 00000000..261ed7ec --- /dev/null +++ b/drag-and-drop/app/next.config.mjs @@ -0,0 +1,18 @@ +// This will be replaced during the build stamping +export const BASE_PREFIX = process.env.NODE_ENV === 'production' ? '/DOCS_BASE_PATH' : undefined; + +export default { + reactStrictMode: true, + env: { + NEXT_PUBLIC_BASE_PATH: BASE_PREFIX + }, + basePath: BASE_PREFIX, + assetPrefix: BASE_PREFIX, + pageExtensions: ['jsx', 'js', 'ts', 'tsx'], + webpack: (config) => { + // eslint-disable-next-line no-param-reassign + config.resolve.fallback = { fs: false }; + + return config; + }, +}; \ No newline at end of file diff --git a/drag-and-drop/app/pages/index.tsx b/drag-and-drop/app/pages/index.tsx new file mode 100644 index 00000000..8e7c5328 --- /dev/null +++ b/drag-and-drop/app/pages/index.tsx @@ -0,0 +1,641 @@ +import React, { Suspense, useEffect } from 'react'; +import { + ChakraProvider, + Box, + Card, + CardHeader, + CardBody, + Heading, + Flex, + Text, + CardFooter, + Button, + AccordionButton, + AccordionItem, + Accordion, + AccordionIcon, + AccordionPanel, + VStack, + Modal, + ModalContent, + ModalOverlay, + ButtonGroup, + Table, + TableContainer, + Tbody, + Td, + Th, + Thead, + Tr, + Spinner, +} from '@chakra-ui/react'; +import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; +import { setIn } from 'timm'; +import type { + DragAndDropControllerOptions, + ExtensionProviderAssetIdentifier, + TransformedDropTargetAssetType, +} from '@player-tools/dnd-lib'; +import { ReactAsset } from '@player-ui/react'; +import type { Asset } from '@player-ui/types'; +import { + DragAndDropController, + useDroppableAsset, + useDraggableAsset, +} from '@player-tools/dnd-lib'; +import { ReferenceAssetsPlugin } from '@player-ui/reference-assets-plugin-react'; +import type { NamedType, ObjectType, TSManifest } from '@player-tools/xlr'; + +import pluginManifest from '@player-ui/reference-assets-plugin-react/dist/xlr/manifest'; + +import typesManifest from '@player-ui/types/dist/xlr/manifest'; +import Files from 'react-files'; +import { PropertyBox } from '../components/AssetEditorPanel'; +import { covertXLRtoAssetDoc } from '../utils/converters'; +import { + ControllerContext, + PropertiesContext, + useController, + useProperties, +} from '../utils/context'; + +/** + * + */ +const AssetSlotExtension = ( + props: TransformedDropTargetAssetType & { + /** + * + */ + action: 'prepend' | 'append'; + } +) => { + const { action } = props; + const [{ isOver }, drop] = useDroppableAsset(props, action); + + return ( +
+ + {action} to {props.context?.propertyName ?? 'root'} + +
+ ); +}; + +/** + * Component that indicates that an Asset can be placed at this location + */ +const AssetDropTarget = (props: TransformedDropTargetAssetType) => { + const [{ isOver }, drop] = useDroppableAsset(props, 'replace'); + const propContext = React.useContext(PropertiesContext); + + if (!props.value && !props.context) { + return ( + + Place a component to start designing your screen. + + ); + } + + return ( + { + if (props.value) { + propContext.setDisplayedAssetID(props.assetSymbol); + propContext.setRightPanelState('edit'); + e.stopPropagation(); + } + }} + > + {props.value && ( + <> + {isOver && } + + {isOver && } + + )} + + {!props.value && !props.context?.isArrayElement && ( + + {props.context?.parent.assetName} - {props.context?.propertyName} + + )} + + {!props.value && props.context?.isArrayElement && ( + + Insert into {props.context?.parent.assetName} -{' '} + {props.context?.propertyName} List + + )} + + ); +}; + +/** + * Component that can be dropped onto the canvas to add an Asst/View + */ +const DroppableAsset = (props: ExtensionProviderAssetIdentifier) => { + const { setRightPanelState, setDisplayedXLRDocType } = + React.useContext(PropertiesContext); + const [, ref] = useDraggableAsset(props) ?? []; + return ( + + + + ); +}; + +export interface CapabilityPanelProps { + /** Title to show in the Accordion Item */ + displayName: string; + + /** Capabilities to render droppable items for */ + capabilities: ExtensionProviderAssetIdentifier[]; +} + +/** + * + */ +export const CapabilityPanel = (props: CapabilityPanelProps) => { + return ( + + + + {props.displayName} + + + + + + {props.capabilities.length > 0 ? ( + props.capabilities.map((asset) => { + return ( + + + + ); + }) + ) : ( + No Components Loaded + )} + + + + ); +}; + +/** + * Left panel for selecting Assets/Views + */ +const AssetSelectorPanel = () => { + const context = React.useContext(PropertiesContext); + const { controller } = useController() ?? {}; + const availableComponents = controller?.getAvailableAssets() ?? []; + const assets = availableComponents.filter((c) => c.capability === 'Assets'); + const views = availableComponents.filter((c) => c.capability === 'Views'); + + return ( + + + Available Components + + + + + + + + + Options + + + + + + + + { + const fileReader = new FileReader(); + fileReader.onload = () => { + controller.importView( + JSON.parse(fileReader.result as string).views[0] + ); + }; + + fileReader.readAsText(file[0]); + }} + > + + + + + + + + ); +}; + +/** + * Right panel for editing a dropped Asset/View + */ +const AssetDetailsPanel = () => { + const { controller } = useController() ?? {}; + const propContext = useProperties(); + const [sourceAssetID, setSourceAssetID] = React.useState( + propContext.displayedAssetID + ); + + const { asset, type } = controller.getAsset(sourceAssetID); + + const [localAsset, setLocalAsset] = React.useState(asset); + + const [localType, setLocalType] = React.useState( + type + ); + + useEffect(() => { + if (propContext.displayedAssetID !== sourceAssetID) { + setSourceAssetID(propContext.displayedAssetID); + const { asset: newAsset, type: newType } = controller.getAsset( + propContext.displayedAssetID + ); + + setLocalAsset(newAsset); + setLocalType(newType); + } + }, [controller, propContext.displayedAssetID, sourceAssetID]); + + useEffect(() => { + const id = controller.stateUpdateSubscription.add(() => { + const { asset: newAsset, type: newType } = + controller.getAsset(sourceAssetID); + + setLocalAsset(newAsset); + setLocalType(newType); + }); + + return () => { + controller.stateUpdateSubscription.remove(id); + }; + }, [sourceAssetID, controller]); + + if (!controller) { + return null; + } + + /** + * Updates the selected asset thats stored as a temporary value + */ + const updateObject = (path: Array, value: any) => { + setLocalAsset(setIn(localAsset, path, value) as Asset); + }; + + return ( + + + Properties for {localType.name} + + + + + + + + + + + + ); +}; + +/** + * Main editing canvas + */ +const Canvas = () => { + const { controller } = useController() ?? {}; + const [render, setRender] = React.useState(false); + + React.useEffect(() => { + if (controller) { + setRender(true); + } + }, [controller]); + + if (!render) { + return null; + } + + return ; +}; + +interface PendingPropertyResolution { + /** */ + asset: Asset; + /** */ + type: ObjectType; + + /** */ + onComplete: (asset: Asset) => void; +} + +/** Modal for filling in required properties on a dropped Asset */ +const PropertyResolver = (props: PendingPropertyResolution) => { + const [modifiedAsset, setModifiedAsset] = React.useState(props.asset); + + /** */ + const updateObject = (path: Array, value: any) => { + setModifiedAsset(setIn(modifiedAsset, path, value) as Asset); + }; + + return ( + {}}> + + + + + Resolve Required Properties + + + + + + + + + + + ); +}; + +/** Modal for showing the JSON version of the created flow */ +const ContentExportModal = () => { + const context = useProperties(); + const { controller } = useController() ?? {}; + const content = JSON.stringify(controller.exportContent()); + return ( + {}}> + + + + + Player Content + + + {content} + + + + + + + + ); +}; + +/** + * Panel to show the full docs for the selected asset + */ +const AssetDocsPanel = () => { + const { displayedXLRDocType } = React.useContext(PropertiesContext); + const { controller } = useController() ?? {}; + const type = controller.getAssetDetails(displayedXLRDocType); + const docs = covertXLRtoAssetDoc(type); + return ( + + + Docs for {type.name} + {docs.description} + + + + + + + + + + + + + + {Object.keys(docs.props).map((prop) => { + const propDetails = docs.props[prop]; + return ( + + + + + + + ); + })} + +
NameRequiredDescriptionType
{prop}{propDetails.required ? 'Yes' : 'No'}{propDetails.description} + {propDetails.type.value + ? `"${propDetails.type.value}` + : propDetails.type.name} +
+
+
+
+ ); +}; + +/** + * Asset to switch what is shown on the right panel + */ +const RightPanel = () => { + const { rightPanelState, displayedAssetID } = + React.useContext(PropertiesContext); + + if (rightPanelState === 'edit') { + if (displayedAssetID) { + return ; + } + + return ( + + Properties + Select an asset to begin editing + + ); + } + + return ; +}; + +/** + * Main Page + */ +const App = () => { + const [displayedAssetID, setDisplayedAssetID] = React.useState(); + const [displayedXLRDocType, setDisplayedXLRDocType] = + React.useState(); + const [exportOpen, setExportOpen] = React.useState(false); + const [rightPanelState, setRightPanelState] = React.useState<'docs' | 'edit'>( + 'edit' + ); + const [pendingPropertyResolutions, setPendingPropertyResolutions] = + React.useState(undefined); + + const controllerState = React.useMemo(() => { + const config: DragAndDropControllerOptions = { + Component: AssetDropTarget, + playerTypes: typesManifest as TSManifest, + manifests: [pluginManifest as TSManifest], + plugins: [ReferenceAssetsPlugin], + async resolveRequiredProperties( + asset: Asset, + type: ObjectType + ): Promise> { + const pending: PendingPropertyResolution = { + asset, + type, + onComplete: () => asset, + }; + + const prom = new Promise>((resolve) => { + pending.onComplete = resolve; + }); + + setPendingPropertyResolutions(pending); + return prom; + }, + resolveCollectionConversion(assets, XLRSDK) { + const collectionType = XLRSDK.getType('collection'); + return { + asset: { + id: `autogen-collection`, + type: 'collection', + values: assets, + } as Asset, + type: collectionType as NamedType, + }; + }, + }; + const controller = new DragAndDropController(config); + return { + controller, + }; + }, [setPendingPropertyResolutions]); + + const { controller } = controllerState; + + return ( + + ({ + displayedAssetID, + setDisplayedAssetID, + displayedXLRDocType, + setDisplayedXLRDocType, + exportOpen, + setExportOpen, + rightPanelState, + setRightPanelState, + }), + [displayedAssetID, displayedXLRDocType, exportOpen, rightPanelState] + )} + > + + + + + + + + }> + + + + + + + + {pendingPropertyResolutions && ( + { + setPendingPropertyResolutions(undefined); + return pendingPropertyResolutions.onComplete(asset); + }} + /> + )} + {exportOpen && } + + + + + ); +}; + +export default App; diff --git a/drag-and-drop/app/tsconfig.json b/drag-and-drop/app/tsconfig.json new file mode 100644 index 00000000..a160b879 --- /dev/null +++ b/drag-and-drop/app/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "incremental": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve" + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/drag-and-drop/app/utils/context.ts b/drag-and-drop/app/utils/context.ts new file mode 100644 index 00000000..abe7895e --- /dev/null +++ b/drag-and-drop/app/utils/context.ts @@ -0,0 +1,62 @@ +import React from 'react'; +import type { DragAndDropController } from '@player-tools/dnd-lib'; + +export const PropertiesContext = React.createContext<{ + /** + * Current Asset thats selected in the edit panel on the right + */ + displayedAssetID?: symbol; + /** + * Sets `displayedAssetID` + */ + setDisplayedAssetID: (id: symbol) => void; + + /** + * Current XLR Type thats selected in the docs panel on the right + */ + displayedXLRDocType?: string; + /** + * Sets `displayedAssetID` + */ + setDisplayedXLRDocType: (id: string) => void; + + /** + * If the export modal is open + */ + exportOpen: boolean; + + /** Sets `exportOpen` */ + setExportOpen: (state: boolean) => void; + + /** If the right panel is docs or edit */ + rightPanelState: 'docs' | 'edit'; + + /** Sets `rightPanelState` */ + setRightPanelState: (state: 'docs' | 'edit') => void; +}>({ + setDisplayedAssetID: () => {}, + setExportOpen: () => {}, + setRightPanelState: () => {}, + exportOpen: false, + rightPanelState: 'edit', + setDisplayedXLRDocType: () => {}, +}); + +export const ControllerContext = React.createContext< + | { + /** */ + controller: DragAndDropController; + } + | undefined +>(undefined); + +/** + * + */ +export function useController() { + return React.useContext(ControllerContext); +} + +export function useProperties() { + return React.useContext(PropertiesContext); +} diff --git a/drag-and-drop/app/utils/converters.ts b/drag-and-drop/app/utils/converters.ts new file mode 100644 index 00000000..4f10d57e --- /dev/null +++ b/drag-and-drop/app/utils/converters.ts @@ -0,0 +1,102 @@ +import type { PropItem, PropItemType } from 'react-docgen-typescript'; +import type { NamedType, NodeType, ObjectType } from '@player-tools/xlr'; +import { isPrimitiveTypeNode } from '@player-tools/xlr-utils'; + +export type Props = Record>; + +export interface AssetDoc { + /** name of the asset */ + name: string; + + /** description of the asset */ + description: string; + + /** prop info for the asset */ + props: Props; +} + +/** + * Converts a `NodeType` object to a descriptive `PropItemType` object + */ +function determinePropertyType(node: NodeType): PropItemType { + if (node.type === 'ref') { + return { name: node.ref }; + } + + if (node.type === 'or') { + return { + name: node.or + .map((subnode) => determinePropertyType(subnode).name) + .join(' | '), + }; + } + + if (node.type === 'and') { + return { + name: node.and + .map((subnode) => determinePropertyType(subnode).name) + .join(' & '), + }; + } + + if (node.type === 'array') { + return { name: `Array<${determinePropertyType(node.elementType).name}>` }; + } + + if (node.type === 'record') { + return { + name: `Record<${determinePropertyType(node.keyType).name}, ${ + determinePropertyType(node.valueType).name + }>`, + }; + } + + if (isPrimitiveTypeNode(node) && node.type !== 'null') { + return { name: node.type, value: node.const }; + } + + if (node.type === 'object' && node.name) { + return { name: node.name }; + } + + return { name: node.type }; +} + +/** processes an object to get the property docs */ +function processObject(object: ObjectType, path: string[] = []): Props { + let properties: Props = {}; + + Object.getOwnPropertyNames(object.properties).forEach((propertyName) => { + const propertyPath = [...path, propertyName].join('.'); + const propertyObject = object.properties[propertyName]; + properties[propertyPath] = { + name: propertyName, + required: propertyObject.required, + type: determinePropertyType(propertyObject.node), + description: propertyObject.node.description ?? '', + }; + + if (propertyObject.node.type === 'object') { + const subObjectProperties = processObject(propertyObject.node, [ + ...path, + propertyName, + ]); + properties = { ...properties, ...subObjectProperties }; + } + }); + + return properties; +} + +/** + * Coverts a XLR to a set of props + * + * - @param type the XLR to convert + */ +export function covertXLRtoAssetDoc(type: NamedType): AssetDoc { + return { + name: type.title ?? type.name, + description: type.description ?? type.comment ?? '', + props: processObject(type), + }; +} diff --git a/drag-and-drop/figma-widget/BUILD b/drag-and-drop/figma-widget/BUILD new file mode 100644 index 00000000..e69de29b diff --git a/drag-and-drop/library/BUILD b/drag-and-drop/library/BUILD new file mode 100644 index 00000000..75ef3f2c --- /dev/null +++ b/drag-and-drop/library/BUILD @@ -0,0 +1,21 @@ +load("//:index.bzl", "javascript_pipeline") + +javascript_pipeline( + name = "@player-tools/dnd-lib", + dependencies = [ + "//xlr/types:@player-tools/xlr", + "//language/json-language-service:@player-tools/json-language-service", + "@npm//@player-ui/react", + "@npm//@player-ui/react-subscribe", + "@npm//react-dnd", + "@npm//react-dnd-html5-backend", + ], + peer_dependencies = [ + "@npm//react", + "@npm//react-dom" + ], + esm_only = True, + test_data = [ + "//common:@player-tools/static-xlrs", + ] +) \ No newline at end of file diff --git a/drag-and-drop/library/src/__tests__/controller.test.tsx b/drag-and-drop/library/src/__tests__/controller.test.tsx new file mode 100644 index 00000000..1e8d2914 --- /dev/null +++ b/drag-and-drop/library/src/__tests__/controller.test.tsx @@ -0,0 +1,280 @@ +import { waitFor } from '@testing-library/react'; +import type { Asset, AssetWrapper, InProgressState } from '@player-ui/react'; +import pluginManifest from '@player-tools/static-xlrs/static_xlrs/plugin/xlr/manifest'; +import typesManifest from '@player-tools/static-xlrs/static_xlrs/core/xlr/manifest'; +import type { ObjectType } from '@player-tools/xlr'; +import { DragAndDropController } from '../controller'; +import type { DropTargetAsset, DropTargetAssetContext } from '../types'; +import { getAssetSymbol } from '../utils/helpers'; + +describe('drag-and-drop', () => { + it('Fills in placeholder assets when dropped', async () => { + const mockHandleStateChange = jest.fn(); + const dndController = new DragAndDropController({ + playerTypes: typesManifest, + manifests: [pluginManifest], + resolveRequiredProperties: async ( + asset: Asset, + type: ObjectType + ) => { + return asset; + }, + resolveCollectionConversion: (assets, XLRSDK) => { + return { + asset: { + id: 'generated-collection', + type: 'collection', + values: assets.map((asset) => asset.asset), + }, + type: { + name: 'CollectionAsset', + type: 'object', + source: '', + properties: { + label: { + required: false, + node: { + type: 'ref', + ref: 'AssetWrapper', + title: 'CollectionAsset.label', + description: 'An optional label to title the collection', + }, + }, + values: { + required: false, + node: { + type: 'array', + elementType: { + type: 'ref', + ref: 'AssetWrapper', + }, + title: 'CollectionAsset.values', + description: 'The string value to show', + }, + }, + }, + additionalProperties: false, + title: 'CollectionAsset', + extends: { + type: 'ref', + ref: "Asset<'collection'>", + genericArguments: [ + { + type: 'string', + const: 'collection', + }, + ], + }, + }, + }; + }, + handleDndStateChange: mockHandleStateChange, + }); + + const { player } = dndController.webPlayer; + /** + * + */ + const getView = () => + (player.getState() as InProgressState).controllers?.view.currentView + ?.lastUpdate; + + expect(getView()?.id).toBe('drag-and-drop-view'); + + getView()?.placeAsset({ + pluginName: 'BaseAssetsPlugin', + assetName: 'InfoAsset', + }); + + await waitFor(() => { + expect(getView()?.value?.asset.type).toBe('info'); + }); + + getView()?.value.asset.title.asset.placeAsset({ + pluginName: 'BaseAssetsPlugin', + assetName: 'TextAsset', + }); + + await waitFor(() => { + expect(getView()?.value?.asset.title.asset.value.asset.type).toBe('text'); + }); + + expect(dndController.exportContent()).toMatchInlineSnapshot(` + Object { + "actions": Array [], + "id": "drag-and-drop-view-info", + "title": Object { + "asset": Object { + "id": "drag-and-drop-view-title-text", + "type": "text", + }, + }, + "type": "info", + } + `); + + expect(mockHandleStateChange).toBeCalled(); + }); + + it('Import existing content into drag and drop', async () => { + // arrange + const content = { + id: 'drag-and-drop-view-collection-1', + type: 'collection', + label: { + asset: { + id: 'drag-and-drop-view-label-info-1', + type: 'info', + title: { + asset: { + id: 'drag-and-drop-view-label-title-test-1', + type: 'text', + value: 'title', + }, + }, + subTitle: { + asset: { + id: 'drag-and-drop-view-label-subTitle-test-1', + type: 'text', + value: 'subtitle', + }, + }, + primaryInfo: { + asset: { + id: 'drag-and-drop-view-label-primaryInfo-test-1', + type: 'text', + value: 'info', + }, + }, + }, + }, + values: [ + { + asset: { + id: 'drag-and-drop-view-collection-text-1', + type: 'text', + value: 'text 1', + }, + }, + { + asset: { + id: 'drag-and-drop-view-field-1', + type: 'input', + binding: 'field1', + note: { + asset: { + id: 'drag-and-drop-view-input-note-test-1', + type: 'text', + value: 'input note', + }, + }, + }, + }, + { + asset: { + id: 'drag-and-drop-view-action-1', + type: 'action', + exp: 'a > b', + }, + }, + ], + }; + const dndController = new DragAndDropController({ + playerTypes: typesManifest, + manifests: [pluginManifest], + resolveRequiredProperties: jest.fn(), + resolveCollectionConversion: jest.fn(), + handleDndStateChange: jest.fn(), + }); + const { player } = dndController.webPlayer; + + // act + dndController.importView(content); + /** + * + */ + const getView = () => + (player.getState() as InProgressState).controllers?.view.currentView + ?.lastUpdate; + + // assert + const dndView = getView() || {}; + expect(dndView.type).toStrictEqual('drop-target'); + expect(dndView.value.identifier.pluginName).toStrictEqual( + 'reference-assets-web-plugin' + ); + expect(dndView.value.identifier.assetName).toStrictEqual('CollectionAsset'); + expect(dndView.value.identifier.capability).toStrictEqual('Views'); + expect(dndView.value.type.name).toStrictEqual('CollectionAsset'); + expect(dndView.value.asset.id).toStrictEqual( + 'drag-and-drop-view-collection-1' + ); + expect(dndView.value.asset.type).toStrictEqual('collection'); + expect(dndView.value.asset.label.asset.type).toStrictEqual('drop-target'); + expect( + dndView.value.asset.label.asset.context.parent.assetName + ).toStrictEqual('collection'); + expect(dndView.value.asset.label.asset.context.propertyName).toStrictEqual( + 'label' + ); + const { primaryInfo } = dndView.value.asset.label.asset.value.asset; + expect(primaryInfo.asset.type).toStrictEqual('drop-target'); + expect(primaryInfo.asset.value.asset.value).toStrictEqual('info'); + const { values } = dndView.value.asset; + expect(values).toHaveLength(3); + const { note } = values[1].asset.value.asset; + expect(note.asset.type).toStrictEqual('drop-target'); + expect(note.asset.value.asset.value).toStrictEqual('input note'); + const state = dndController.exportState() as DropTargetAsset; + const label = state.value?.asset.label as AssetWrapper; + expect(label.asset.type).toStrictEqual('drop-target'); + const labelContext = label.asset.context as DropTargetAssetContext; + expect(labelContext.isArrayElement).toStrictEqual(false); + expect(labelContext.propertyName).toStrictEqual('label'); + expect(labelContext.parent.assetName).toStrictEqual('collection'); + const collectionAssetWrapper = state.value as AssetWrapper; + const collection = dndController.getAsset( + getAssetSymbol(collectionAssetWrapper.asset) + ); + expect(collection).not.toBeNull(); + expect(collection.type.name).toStrictEqual('CollectionAsset'); + }); + + it('Populates placeholder targets when importing existing content', async () => { + // arrange + const content = { + id: 'drag-and-drop-view-collection-1', + type: 'collection', + }; + const dndController = new DragAndDropController({ + playerTypes: typesManifest, + manifests: [pluginManifest], + plugins: [pluginManifest], + resolveRequiredProperties: jest.fn(), + resolveCollectionConversion: jest.fn(), + handleDndStateChange: jest.fn(), + }); + const { player } = dndController.webPlayer; + + // act + dndController.importView(content); + /** + * + */ + const getView = () => + (player.getState() as InProgressState).controllers?.view.currentView + ?.lastUpdate; + + // assert + const dndView = getView() || {}; + console.log(dndView); + const { label } = dndView.value.asset; + const { values } = dndView.value.asset; + expect(label.asset.type).toStrictEqual('drop-target'); + expect(label.asset.context.propertyName).toStrictEqual('label'); + expect(label.asset.context.isArrayElement).toStrictEqual(false); + expect(values[0].asset.type).toStrictEqual('drop-target'); + expect(values[0].asset.context.propertyName).toStrictEqual('values'); + expect(values[0].asset.context.isArrayElement).toStrictEqual(true); + }); +}); diff --git a/drag-and-drop/library/src/controller.tsx b/drag-and-drop/library/src/controller.tsx new file mode 100644 index 00000000..37283529 --- /dev/null +++ b/drag-and-drop/library/src/controller.tsx @@ -0,0 +1,301 @@ +import React from 'react'; +import type { Asset, AssetWrapper, ReactPlayer, View } from '@player-ui/react'; +import type { DataModel, Navigation, Schema } from '@player-ui/player'; +import { ConsoleLogger, WebPlayer } from '@player-ui/react'; +import { Subscribe } from '@player-ui/react-subscribe'; +import { DndProvider } from 'react-dnd'; +import { HTML5Backend } from 'react-dnd-html5-backend'; +import type { NamedType, ObjectType, TSManifest } from '@player-tools/xlr'; +import { + TRANSFORM_FUNCTIONS, + XLRService, +} from '@player-tools/json-language-service'; +import type { TypeMetadata } from '@player-tools/xlr-sdk'; +import type { XLRSDK } from '@player-tools/xlr-sdk'; +import { PlayerDndPlugin } from './utils'; +import type { + PluginProvider, + ExtensionProviderAssetIdentifier, + TransformedDropTargetAssetType, +} from './types'; +import { RuntimeFlowState } from './utils/runtime-flow-state'; +import { DropComponent } from './utils/drop-component'; +import { removeDndStateFromView } from './utils/helpers'; + +export interface DragAndDropControllerOptions { + /** Player plugins for adding assets and functionality */ + plugins?: Array; + + /** Manifest for extensions that have drag and drop assets */ + manifests?: Array; + + /** Manifest for the base Player types package to use */ + playerTypes: TSManifest; + + /** + * Function to call when a placed asset has required properties that need to be resolved before actually placing it. + */ + resolveRequiredProperties: ( + /** The basic Asset that could be generated */ + asset: Asset, + /** The XLR Type for the Asset being generated */ + type: NamedType + ) => Promise; + + /** + * Function that will be called when multiple assets are dropped onto the same target and a collection needs to be created + */ + resolveCollectionConversion: ( + /** The Assets to include in the collection */ + assets: Array, + /** An instance of the XLRSDK to perform any required type lookups */ + XLRSDK: XLRSDK + ) => { + /** The generated collection asset with the provided `assets` array as children */ + asset: Asset; + /** The corresponding type for the generated collection asset */ + type: NamedType; + }; + + /** A custom component to use for rendering droppable Assets */ + Component?: React.ComponentType; +} + +/** + * The DragAndDropController is the main entry point for the Drag and Drop library. + */ +export class DragAndDropController { + private readonly options: DragAndDropControllerOptions; + public readonly webPlayer: ReactPlayer; + public readonly stateUpdateSubscription = + new Subscribe(); + + private readonly dndWebPlayerPlugin: PlayerDndPlugin; + private readonly runtimeState: RuntimeFlowState; + private readonly XLRSDK: XLRSDK; + + public Context: React.ComponentType>; + + public get Canvas() { + return this.webPlayer.Component; + } + + public getPlayerNavigationSection(): Navigation { + return this.runtimeState.navigation; + } + + public setPlayerNavigationSection(navigation: Navigation) { + this.runtimeState.navigation = navigation; + } + + public getPlayerSchemaSection() { + return this.runtimeState.schema; + } + + public setPlayerSchemaSection(schema: Schema.Schema) { + this.runtimeState.schema = schema; + } + + public getPlayerDataSection() { + return this.runtimeState.data; + } + + public setPlayerDataSection(data: DataModel) { + this.runtimeState.data = data; + } + + constructor(options: DragAndDropControllerOptions) { + this.options = options ?? {}; + + this.XLRSDK = new XLRService().XLRSDK; + this.XLRSDK.loadDefinitionsFromModule(options.playerTypes); + options?.manifests?.forEach((manifest) => { + this.XLRSDK.loadDefinitionsFromModule(manifest, {}, TRANSFORM_FUNCTIONS); + }); + + this.runtimeState = new RuntimeFlowState({ + resolveRequiredProperties: options.resolveRequiredProperties, + resolveCollectionConversion: (assets: Array) => { + const { asset, type } = options.resolveCollectionConversion( + assets, + this.XLRSDK + ); + + const typeInfo = this.XLRSDK.getTypeInfo(type.name); + if (!typeInfo) { + throw new Error( + `SDK Error: Unable to get type info for collection type ${type.name}` + ); + } + + return { + asset, + identifier: { + assetName: type.name, + pluginName: typeInfo.plugin, + capability: typeInfo.capability, + }, + }; + }, + handleDndStateChange: () => { + this.stateUpdateSubscription.publish(this); + }, + }); + + this.dndWebPlayerPlugin = new PlayerDndPlugin({ + state: this.runtimeState, + Target: { + Component: this.options.Component ?? DropComponent, + }, + getXLRTypeForAsset: (identifier) => { + const asset = this.XLRSDK.getType(identifier.assetName); + if (!asset) { + throw new Error( + `SDK Error: Unable to get asset ${identifier.assetName}` + ); + } + + if (asset.type !== 'object') { + throw new Error( + `SDK Error: Type ${identifier.assetName} doesn't appear to be an Asset` + ); + } + + return asset; + }, + }); + + this.webPlayer = new WebPlayer({ + plugins: [ + this.dndWebPlayerPlugin, + ...(options?.plugins?.map((Plugin) => new Plugin()) ?? []), + ], + }); + + this.webPlayer.player.logger.addHandler(new ConsoleLogger('debug')); + + this.Context = (props: React.PropsWithChildren) => { + return {props.children}; + }; + + this.webPlayer.start(this.runtimeState.flow); + } + + /** + * Gets info on all XLRs that have been registered to the SDK + * This won't return anything that is registered as a Type or has "Transformed" in its named + */ + public getAvailableAssets(): Array { + const assets = this.XLRSDK.listTypes({ + capabilityFilter: 'Types', + typeFilter: 'Transformed', + }); + return assets.map((asset) => { + const assetName = asset.name; + const typeInfo = this.XLRSDK.getTypeInfo(assetName) as TypeMetadata; + return { + pluginName: typeInfo.plugin, + assetName, + capability: typeInfo.capability, + }; + }); + } + + /** + * Returns the XLR for an Asset/View + * + * @param assetName - Player 'type' string for the Asset/View to retrieve + */ + public getAssetDetails(assetName: string): NamedType { + return this.XLRSDK.getType(assetName) as NamedType; + } + + /** + * Returns the underlying Asset and XLR type for a dropped Asset in the tree + * + * @param assetSymbol - UUID Symbol attached to the Asset + */ + public getAsset(assetSymbol: symbol): { + /** The Asset that correlates to the given ID */ + asset: Asset; + /** The underlying XLR type for the Asset */ + type: ObjectType; + } { + const placedAsset = this.runtimeState.getAsset(assetSymbol); + const type = this.XLRSDK.getType(placedAsset?.identifier.assetName); + if (!type) { + throw new Error( + `Unable to find type for asset ${placedAsset?.identifier.assetName}` + ); + } + + return { + asset: placedAsset.asset, + type: type as ObjectType, + }; + } + + /** + * Updates a dropped asset with the provided properties + * **It is not recommended to update any AssetWrapper or Array properties** + * + * @param assetSymbol - UUID Symbol attached to the Asset + * @param newObject - The updates to apply to the dropped asset + */ + public updateAsset(assetSymbol: symbol, newObject: Asset) { + this.runtimeState.updateAsset(assetSymbol, newObject); + this.dndWebPlayerPlugin.refresh(this.webPlayer.player); + this.stateUpdateSubscription.publish(this); + } + + public async placeAsset( + dropTargetSymbol: symbol, + identifier: ExtensionProviderAssetIdentifier, + type: NamedType, + action: 'replace' | 'append' | 'prepend' = 'replace' + ) { + await this.runtimeState.placeAsset( + dropTargetSymbol, + { identifier, type }, + action + ); + this.dndWebPlayerPlugin.refresh(this.webPlayer.player); + this.stateUpdateSubscription.publish(this); + } + + /** + * Removes an Asset from the View + * + * @param assetSymbol - UUID Symbol attached to the Asset + */ + public removeAsset(assetSymbol: symbol) { + this.runtimeState.clearAsset(assetSymbol); + this.dndWebPlayerPlugin.refresh(this.webPlayer.player); + this.stateUpdateSubscription.publish(this); + } + + /** + * Exports the content that was built in the editor without any drag and drop specific assets. + * This content will be able to run in a player configured with the same plugins loaded into the editor + * */ + public exportContent(): View { + return removeDndStateFromView(this.runtimeState.view); + } + + /** + * Imports existing content and populates the state of drag and drop + * + * @param view - player content + */ + public importView(view: View) { + this.runtimeState.importView(view, this.XLRSDK); + this.dndWebPlayerPlugin.refresh(this.webPlayer.player); + } + + /** + * Exports the full state of the drag and drop editor that can be used to resume editing later + */ + public exportState(): View { + return this.runtimeState.view; + } +} diff --git a/drag-and-drop/library/src/hooks/index.ts b/drag-and-drop/library/src/hooks/index.ts new file mode 100644 index 00000000..f5ed1d66 --- /dev/null +++ b/drag-and-drop/library/src/hooks/index.ts @@ -0,0 +1,3 @@ +export * from './useDragAndDrop'; +export * from './useDraggableAsset'; +export * from './useDroppableAsset'; diff --git a/drag-and-drop/library/src/hooks/useDragAndDrop.tsx b/drag-and-drop/library/src/hooks/useDragAndDrop.tsx new file mode 100644 index 00000000..ea26956c --- /dev/null +++ b/drag-and-drop/library/src/hooks/useDragAndDrop.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import type { DragAndDropControllerOptions } from '../controller'; +import { DragAndDropController } from '../controller'; + +export const useDragAndDrop = (conf: DragAndDropControllerOptions) => { + const controller = React.useMemo(() => { + return new DragAndDropController(conf); + }, []); + + return controller; +}; diff --git a/drag-and-drop/library/src/hooks/useDraggableAsset.tsx b/drag-and-drop/library/src/hooks/useDraggableAsset.tsx new file mode 100644 index 00000000..88b2b8e2 --- /dev/null +++ b/drag-and-drop/library/src/hooks/useDraggableAsset.tsx @@ -0,0 +1,17 @@ +import { useDrag } from 'react-dnd'; +import { DroppedItemTypes } from '../types'; +import type { ExtensionProviderAssetIdentifier } from '../types'; + +export const useDraggableAsset = ( + identifier: ExtensionProviderAssetIdentifier +) => { + const [p, ref] = useDrag(() => ({ + type: DroppedItemTypes.ASSET, + item: identifier, + collect: (m) => ({ + isDragging: m.isDragging(), + }), + })); + + return [p, ref] as const; +}; diff --git a/drag-and-drop/library/src/hooks/useDroppableAsset.tsx b/drag-and-drop/library/src/hooks/useDroppableAsset.tsx new file mode 100644 index 00000000..ef4830ed --- /dev/null +++ b/drag-and-drop/library/src/hooks/useDroppableAsset.tsx @@ -0,0 +1,28 @@ +import { useDrop } from 'react-dnd'; +import type { + ExtensionProviderAssetIdentifier, + TransformedDropTargetAssetType, +} from '../types'; +import { DroppedItemTypes } from '../types'; + +export const useDroppableAsset = ( + props: TransformedDropTargetAssetType, + action: 'replace' | 'append' | 'prepend' +) => { + const [p, ref] = useDrop({ + accept: DroppedItemTypes.ASSET, + drop: (item: ExtensionProviderAssetIdentifier, monitor) => { + if (monitor.didDrop()) { + return; + } + + props.placeAsset(item, action); + }, + collect: (monitor) => ({ + isOver: monitor.isOver(), + canDrop: monitor.canDrop(), + }), + }); + + return [p, ref] as const; +}; diff --git a/drag-and-drop/library/src/index.tsx b/drag-and-drop/library/src/index.tsx new file mode 100644 index 00000000..31448df8 --- /dev/null +++ b/drag-and-drop/library/src/index.tsx @@ -0,0 +1,4 @@ +export * from './utils'; +export * from './hooks'; +export * from './controller'; +export * from './types'; diff --git a/drag-and-drop/library/src/types.ts b/drag-and-drop/library/src/types.ts new file mode 100644 index 00000000..6a20ea2f --- /dev/null +++ b/drag-and-drop/library/src/types.ts @@ -0,0 +1,120 @@ +import type { NamedType, ObjectType, TSManifest } from '@player-tools/xlr'; +import type { Asset, ReactPlayerPlugin, Flow, View } from '@player-ui/react'; + +export const DragAndDropAssetType = Symbol('drop-target'); +export const UUIDSymbol = Symbol('drag-and-drop-uuid'); + +export const DroppedItemTypes = { + ASSET: 'ASSET', +}; + +export type FlowWithOneView = Flow & { + /** Single flow to render */ + views: [View]; +}; + +export interface PluginProvider { + /** A constructor to create an instance of the plugin */ + new (): ReactPlayerPlugin; +} + +export interface ExtensionProviderAssetIdentifier { + /** The name of the plugin that supplied this type */ + pluginName: string; + + /** The asset type in the plugin */ + assetName: string; + + /** The capability the type belongs to */ + capability: string; +} + +export const isDropTargetAsset = (obj: unknown): obj is DropTargetAsset => { + return ( + typeof obj === 'object' && + obj !== null && + (obj as DropTargetAsset).__type === DragAndDropAssetType + ); +}; + +export interface PlacedAsset { + /** The identifier for where the populated asset is from */ + identifier: ExtensionProviderAssetIdentifier; + + /** A mapping of asset slot name to drop target handlers */ + asset: Asset; +} + +/** The `context` property of a DropTargetAsset */ +export interface DropTargetAssetContext { + /** The identifier for the parent asset type */ + parent: Omit; + + /** The name of the property that this asset fulfills */ + propertyName?: string; + + /** If the drop target is an element in an array */ + isArrayElement?: boolean; + + /** If the drop target is generated on the fly from a collection */ + isMockTarget?: boolean; +} + +export interface DropTargetAsset extends Asset<'drop-target'> { + /** An opaque identifier for the placeholder */ + __type: typeof DragAndDropAssetType; + + /** Shadow ID of drop target */ + [UUIDSymbol]: symbol; + + /** + * The context for what this value is in + * Used for determining if a value is allowed to be dropped in this slot or not + */ + context?: DropTargetAssetContext; + + /** The effective value that should be rendered. Generated from `.values` */ + value?: { + /** A mapping of asset slot name to drop target handlers */ + asset: Asset; + + /** The current descriptor for the value stored at this asset */ + identifier: ExtensionProviderAssetIdentifier; + }; + + /** + * The raw list of assets that currently populate this slot + * if not set, then this slot is empty and a placeholder will be shown instead + * if multiple assets are in the slot, they will be converted to a collection on the fly + */ + values?: Array; +} + +export interface TransformedDropTargetAssetType extends DropTargetAsset { + /** The effective value that should be rendered with XLR information. Generated from `.values` */ + value?: DropTargetAsset['value'] & { + /** The current descriptor for the value stored at this asset */ + type: NamedType; + }; + + /** Unique identifier to reference the asset within the drop target */ + assetSymbol?: symbol; + + /** The raw Drag and Drag state should not be made available to Player's runtime */ + values: never; + + /** Set the value of this slot to the replacement value */ + placeAsset: ( + identifier: ExtensionProviderAssetIdentifier, + action: 'replace' | 'append' | 'prepend' + ) => void; + + /** Append the asset to the slot */ + appendAsset: (identifier: ExtensionProviderAssetIdentifier) => void; + + /** + * Remove the value stored at this location + * If the parent slot is a collection we can automatically collapse it + */ + clearAsset: () => void; +} diff --git a/drag-and-drop/library/src/utils/drop-component.tsx b/drag-and-drop/library/src/utils/drop-component.tsx new file mode 100644 index 00000000..f3d66185 --- /dev/null +++ b/drag-and-drop/library/src/utils/drop-component.tsx @@ -0,0 +1,60 @@ +import React from 'react'; +import { ReactAsset } from '@player-ui/react'; +import type { TransformedDropTargetAssetType } from '../types'; +import { useDroppableAsset } from '../hooks/useDroppableAsset'; + +export const DropPrependComponent = ( + props: TransformedDropTargetAssetType & { + action: 'prepend' | 'append'; + } +) => { + const { action } = props; + const [{ isOver }, drop] = useDroppableAsset(props, action); + + return ( +
+ + {action} - {props.context?.parent.assetName} -{' '} + {props.context?.propertyName} + +
+ ); +}; + +export const DropComponent = (props: TransformedDropTargetAssetType) => { + const [{ isOver }, drop] = useDroppableAsset(props, 'replace'); + const isArrayInsertion = props.context?.isArrayElement ?? false; + + if (!props.value && !props.context) { + return ( +
+ Please Select an Asset +
+ ); + } + + return ( +
+ {props.value && ( + <> + {isOver && } + + {isOver && } + + )} + + {!props.value && !isArrayInsertion && ( + + {props.context?.parent.assetName} - {props.context?.propertyName} + + )} + + {!props.value && isArrayInsertion && ( + + Insert into {props.context?.parent.assetName} -{' '} + {props.context?.propertyName} List + + )} +
+ ); +}; diff --git a/drag-and-drop/library/src/utils/helpers.ts b/drag-and-drop/library/src/utils/helpers.ts new file mode 100644 index 00000000..84b9c468 --- /dev/null +++ b/drag-and-drop/library/src/utils/helpers.ts @@ -0,0 +1,74 @@ +import type { Asset, AssetWrapper, View } from '@player-ui/types'; +import type { DropTargetAsset, DropTargetAssetContext } from '../types'; +import { UUIDSymbol, DragAndDropAssetType, isDropTargetAsset } from '../types'; + +/** Creates a drop target asset */ +export const makeDropTarget = ( + id: string, + context?: DropTargetAssetContext +): DropTargetAsset => { + const symbol = Symbol(`${id}-drop-target`); + return { + __type: DragAndDropAssetType, + id, + type: 'drop-target', + [UUIDSymbol]: symbol, + context, + values: [], + }; +}; + +/** Returns the shadow ID for any given asset */ +export const getAssetSymbol = (asset: Asset): symbol => { + return (asset as any)[UUIDSymbol]; +}; + +/** remove the drag and drop state from the view */ +export const removeDndStateFromView = (baseView: View): View => { + /** Walks the drag and drop state to remove any drop target assets */ + const removeDndState = (obj: unknown): any => { + if (obj === baseView && isDropTargetAsset(obj)) { + if (obj.value?.asset) { + return removeDndState(obj.value.asset); + } + + return undefined; + } + + if (Array.isArray(obj)) { + return obj + .map((objectMember) => removeDndState(objectMember)) + .filter((n) => n !== null && n !== undefined); + } + + if (typeof obj === 'object' && obj !== null) { + if ('asset' in obj) { + const asWrapper: AssetWrapper = obj as any; + if ('asset' in obj && isDropTargetAsset(asWrapper.asset)) { + if (asWrapper.asset.value) { + const nestedValue = removeDndState(asWrapper.asset.value.asset); + + // eslint-disable-next-line max-depth + if (nestedValue) { + return { + asset: nestedValue, + }; + } + } + + return undefined; + } + } + + return Object.fromEntries( + Object.entries(obj).map(([key, value]) => [key, removeDndState(value)]) + ); + } + + return obj; + }; + + // remove any undefined values from the view + // we only want JSON compliant values + return JSON.parse(JSON.stringify(removeDndState(baseView))); +}; diff --git a/drag-and-drop/library/src/utils/index.ts b/drag-and-drop/library/src/utils/index.ts new file mode 100644 index 00000000..37e9d457 --- /dev/null +++ b/drag-and-drop/library/src/utils/index.ts @@ -0,0 +1 @@ +export * from './player-dnd-plugin'; diff --git a/drag-and-drop/library/src/utils/player-dnd-plugin.ts b/drag-and-drop/library/src/utils/player-dnd-plugin.ts new file mode 100644 index 00000000..cf696c0d --- /dev/null +++ b/drag-and-drop/library/src/utils/player-dnd-plugin.ts @@ -0,0 +1,167 @@ +import type { NamedType, ObjectType } from '@player-tools/xlr'; +import type { + ReactPlayer, + ReactPlayerPlugin, + Asset, + ViewController, + Player, +} from '@player-ui/react'; +import type { DropTargetAsset } from '../types'; +import { getAssetSymbol } from './helpers'; +import type { + ExtensionProviderAssetIdentifier, + TransformedDropTargetAssetType, +} from '../types'; +import type { RuntimeFlowState } from './runtime-flow-state'; + +/** Options for controlling the drag-and-drop functionality */ +export interface PlayerDndPluginOptions< + TargetPropsType extends Asset = TransformedDropTargetAssetType +> { + /** The Target component represents a drop-target */ + Target: { + /** The React component to use */ + Component: React.ComponentType; + + /** An optional override for the asset-type */ + type?: TargetPropsType['type']; + }; + + /** An optional override for the transition name when refreshing a flow */ + refreshTransition?: string; + + /** + * + */ + getXLRTypeForAsset: ( + identifier: ExtensionProviderAssetIdentifier + ) => NamedType; + + /** A manager for the current flow state */ + state: RuntimeFlowState; +} + +interface PlayerDndPluginState { + /** Re-render the view with updates from external updates */ + refreshView: () => void; +} + +/** + * A plugin that handles drag and drop integration + */ +export class PlayerDndPlugin implements ReactPlayerPlugin { + name = 'player-dnd-plugin'; + + private state: WeakMap = new WeakMap(); + private readonly options: PlayerDndPluginOptions; + + constructor(options: PlayerDndPluginOptions) { + this.options = options; + } + + refresh(p: Player) { + this.state.get(p)?.refreshView(); + } + + apply(player: Player) { + const match = { + type: this.options.Target.type ?? 'drop-target', + }; + + player.hooks.viewController.tap(this.name, (vc) => { + vc.transformRegistry.set(match, { + beforeResolve: (asset) => { + return { + ...asset, + children: asset.children?.filter((child) => { + if (child.path[0] === 'values') { + return false; + } + + if (child.path[0] === 'value' && child.path[1] === 'type') { + return false; + } + + return true; + }), + }; + }, + resolve: (asset: DropTargetAsset) => { + return { + ...asset, + values: [], + ...(asset.value + ? { + value: { + ...asset.value, + type: this.options.getXLRTypeForAsset( + asset.value.identifier as ExtensionProviderAssetIdentifier + ), + }, + } + : {}), + assetSymbol: asset.value?.asset + ? getAssetSymbol(asset.value.asset) + : undefined, + // Send back up to the runtime-state handler to compute the new view + placeAsset: ( + identifier: ExtensionProviderAssetIdentifier, + action: 'replace' | 'append' | 'prepend' = 'replace' + ) => { + console.log(`Placing asset at: ${asset.id}`); + const targetSymbol = getAssetSymbol(asset); + this.options.state + .placeAsset( + targetSymbol, + { + identifier, + type: this.options.getXLRTypeForAsset(identifier), + }, + action, + asset.context?.isMockTarget && asset.value?.asset + ? getAssetSymbol(asset.value?.asset) + : undefined + ) + .then(() => this.refresh(player)); + }, + clearAsset: (assetSymbol: symbol) => { + console.log(`Clearing asset at: ${asset.id}`); + + this.options.state.clearAsset(assetSymbol); + this.refresh(player); + }, + }; + }, + }); + }); + + player.hooks.resolveFlowContent.tap(this.name, () => { + return this.options.state.flow; + }); + + player.hooks.viewController.tap(this.name, (vc: ViewController) => { + vc.hooks.resolveView.tap(this.name, () => { + console.log(`Current View`, this.options.state.view); + return this.options.state.view; + }); + }); + + const state: PlayerDndPluginState = { + refreshView: () => { + const s = player.getState(); + if (s.status === 'in-progress') { + s.controllers.flow.transition( + this.options.refreshTransition ?? 'refresh' + ); + } + }, + }; + + this.state.set(player, state); + } + + applyReact(webPlayer: ReactPlayer) { + const match = { type: this.options.Target.type ?? 'drop-target' }; + webPlayer.assetRegistry.set(match, this.options.Target.Component); + } +} diff --git a/drag-and-drop/library/src/utils/runtime-flow-state.ts b/drag-and-drop/library/src/utils/runtime-flow-state.ts new file mode 100644 index 00000000..0a335185 --- /dev/null +++ b/drag-and-drop/library/src/utils/runtime-flow-state.ts @@ -0,0 +1,723 @@ +import type { NamedType, ObjectType } from '@player-tools/xlr'; +import type { TypeMetadata, XLRSDK } from '@player-tools/xlr-sdk'; +import type { + Asset, + AssetWrapper, + DataModel, + Flow, + View, + Schema, + Navigation, +} from '@player-ui/types'; +import type { + ExtensionProviderAssetIdentifier, + FlowWithOneView, + DropTargetAsset, + PlacedAsset, + DropTargetAssetContext, +} from '../types'; +import { UUIDSymbol } from '../types'; +import { makeDropTarget, getAssetSymbol } from './helpers'; +import { isDropTargetAsset } from '../types'; + +/** The type for exporting and restoring the flow state */ +export interface ExportedRuntimeFlowState { + /** + * The root node of the drag and drop view + */ + root: DropTargetAsset; +} + +export interface RuntimeFlowStateOptions { + /** + * Function to call when a placed asset has required properties that need to be resolved before actually placing it. + */ + resolveRequiredProperties: ( + /** The basic Asset that could be generated */ + asset: Asset, + /** The XLR Type for the Asset being generated */ + type: NamedType + ) => Promise; + + /** + * Function that will be called when multiple assets are dropped onto the same target and a collection needs to be created + */ + resolveCollectionConversion: (assets: Array) => { + /** The generated collection asset with the provided `assets` array as children */ + asset: Asset; + /** The corresponding type for the generated collection asset */ + identifier: ExtensionProviderAssetIdentifier; + }; + + /** + * Function that will be called when Drag and Drop state changes + */ + handleDndStateChange: () => void; + + /** + * The content to initialize the editing experience with + */ + restoreFrom?: + | { + /** + * The editor state to resume from + */ + state: ExportedRuntimeFlowState; + + /** + * The full Player flow to initialize with + */ + flow: never; + } + | { + /** + * The editor state to resume from + */ + flow: Flow; + /** + * The full Player flow to initialize with + */ + state: never; + }; +} + +/** + * Manages the translation between Drag and Drop state to Player state + */ +export class RuntimeFlowState { + /** The root drag and drop asset */ + private ROOT: DropTargetAsset; + /** The schema section of the content */ + public schema?: Schema.Schema; + /** The data section of the content */ + public data?: DataModel; + /** The navigation section of the content */ + public navigation: Navigation; + /** Symbol to Real Asset */ + private realAssetMappings: Map = new Map(); + /** Symbol to Drop Target Asset */ + private dropTargetAssets: Map = new Map(); + /** Asset Symbol to Drop Target Symbol */ + private assetsToTargets: Map = new Map(); + /** Drop Target Symbol to Asset Symbol */ + private targetsToAssets: Map = new Map(); + + private resolveRequiredProperties: ( + asset: Asset, + type: NamedType + ) => Promise; + + private resolveCollectionConversion: (assets: Array) => { + /** The generated collection asset with the provided `assets` array as children */ + asset: Asset; + /** The corresponding type for the generated collection asset */ + identifier: ExtensionProviderAssetIdentifier; + }; + + /** Called whenever drag and drop state changes */ + private handleDndStateChange: () => void; + + constructor(options: RuntimeFlowStateOptions) { + this.ROOT = makeDropTarget('drag-and-drop-view'); + this.navigation = { + BEGIN: 'FLOW_1', + FLOW_1: { + startState: 'VIEW_1', + VIEW_1: { + state_type: 'VIEW', + ref: this.view.id, + transitions: { + '*': 'VIEW_1', + }, + }, + }, + }; + + this.dropTargetAssets.set(getAssetSymbol(this.ROOT), this.ROOT); + this.resolveRequiredProperties = options.resolveRequiredProperties; + this.resolveCollectionConversion = options.resolveCollectionConversion; + this.handleDndStateChange = options.handleDndStateChange; + } + + public exportState(): ExportedRuntimeFlowState { + return { + root: this.ROOT, + }; + } + + private getContainingDropTarget(assetSymbol: symbol): DropTargetAsset { + const containingDropTargetSymbol = this.assetsToTargets.get(assetSymbol); + if (!containingDropTargetSymbol) { + throw new Error( + `Cannot get parent drop target symbol of ${assetSymbol.toString()}` + ); + } + + const containingDropTarget = this.dropTargetAssets.get( + containingDropTargetSymbol + ); + + if (!containingDropTarget) { + throw new Error( + `Cannot get drop target for symbol ${containingDropTargetSymbol.toString()}` + ); + } + + return containingDropTarget; + } + + private findAssetInDropTarget( + assetSymbol: symbol, + dropTarget: DropTargetAsset + ): number { + const index = dropTarget.values?.findIndex((value) => { + return getAssetSymbol(value.asset) === assetSymbol; + }); + + if (index === undefined || index === -1) { + throw new Error( + `Unable to find asset ${assetSymbol.toString()} in drop target ${ + dropTarget.id + }` + ); + } + + return index; + } + + private computeViewForDropTarget( + dropTarget: DropTargetAsset + ): DropTargetAsset['value'] | undefined { + if (!dropTarget.values || dropTarget.values.length === 0) { + return undefined; + } + + if (dropTarget.values.length === 1) { + return dropTarget.values[0]; + } + + const realDropTargetSymbol = getAssetSymbol(dropTarget); + const assetsWithPlaceholders = dropTarget.values.reduce( + (coll, placedAsset, index) => { + const prefixAsset = makeDropTarget( + `${dropTarget.id}-${index * 2 - 1}`, + dropTarget.context + ? { + ...dropTarget.context, + isArrayElement: true, + } + : undefined + ); + + if (index > 0) { + this.dropTargetAssets.set(getAssetSymbol(prefixAsset), prefixAsset); + } + + const mockDropTarget = makeDropTarget( + `${dropTarget.id}-${index * 2}`, + dropTarget.context + ? { + ...dropTarget.context, + isArrayElement: true, + isMockTarget: true, + } + : undefined + ); + + mockDropTarget[UUIDSymbol] = realDropTargetSymbol; + + mockDropTarget.value = { + ...placedAsset, + asset: { + ...placedAsset.asset, + id: `${dropTarget.id}-${index * 2}`, + }, + }; + + return [ + ...coll, + ...(index > 0 ? [{ asset: prefixAsset }] : []), + { asset: mockDropTarget }, + ]; + }, + [] + ); + + return this.resolveCollectionConversion(assetsWithPlaceholders); + } + + private updateArrayInParent( + containingDropTarget: DropTargetAsset, + dropTargetSymbol: symbol + ) { + if ( + containingDropTarget.context?.isArrayElement && + containingDropTarget.context.propertyName + ) { + const containingAssetSymbol = this.targetsToAssets.get(dropTargetSymbol); + if (!containingAssetSymbol) { + throw new Error( + `Error: can't get parent asset mapping of drop target ${dropTargetSymbol.toString()}` + ); + } + + const containingAsset = this.realAssetMappings.get(containingAssetSymbol); + if (!containingAsset) { + throw new Error( + `Error: can't get asset for symbol ${containingAssetSymbol.toString()}` + ); + } + + const arrayProperty = containingAsset.asset[ + containingDropTarget.context.propertyName + ] as Array>; + + const dropTargetIndex = arrayProperty.find((element) => { + return getAssetSymbol(element.asset) === dropTargetSymbol; + }); + + if (!dropTargetIndex) { + throw new Error('cant calculate array insertion'); + } + + const insertionIndex = arrayProperty.indexOf(dropTargetIndex); + // Check if drop targets around placed asset need to be updated + const leftNeighbor = arrayProperty[insertionIndex - 1]; + if (!leftNeighbor || leftNeighbor.asset.values?.length !== 0) { + const newLeftAsset = makeDropTarget(`${containingDropTarget.id}-left`, { + ...containingDropTarget.context, + }); + this.dropTargetAssets.set(getAssetSymbol(newLeftAsset), newLeftAsset); + this.targetsToAssets.set( + getAssetSymbol(newLeftAsset), + containingAssetSymbol + ); + arrayProperty.splice(insertionIndex, 0, { + asset: { + ...newLeftAsset, + }, + }); + } + + arrayProperty[insertionIndex + 1] = { asset: containingDropTarget }; + + const rightNeighbor = arrayProperty[insertionIndex + 2]; + if (!rightNeighbor || rightNeighbor.asset.values?.length !== 0) { + const newRightAsset = makeDropTarget( + `${containingDropTarget.id}-right`, + { + ...containingDropTarget.context, + } + ); + this.dropTargetAssets.set(getAssetSymbol(newRightAsset), newRightAsset); + this.targetsToAssets.set( + getAssetSymbol(newRightAsset), + containingAssetSymbol + ); + arrayProperty.splice(insertionIndex + 2, 0, { + asset: { + ...newRightAsset, + }, + }); + } + } + } + + private async createNewAsset( + idPrefix: string, + xlrType: NamedType + ): Promise { + const typeProp = + xlrType.properties.type.node.type === 'string' + ? xlrType.properties.type.node.const + : undefined; + + if (typeProp === undefined) { + throw new Error( + `'type' property of type ${xlrType.name} is not a constant. Are you sure this is a valid Asset?` + ); + } + + let asset: Asset = { + id: `${idPrefix}-${typeProp}`, + type: typeProp, + [UUIDSymbol]: Symbol(`${idPrefix}-${typeProp}`), + }; + + let hasRequiredProperties = false; + + Object.entries(xlrType.properties).forEach(([key, prop]) => { + if (prop.node.type === 'string' && prop.node.const !== undefined) { + asset[key] = prop.node.const; + } + + if (prop.required === true && !['type', 'id'].includes(key)) { + hasRequiredProperties = true; + } + + if ( + (prop.node.type === 'ref' && + prop.node.ref.startsWith('AssetWrapper')) || + (prop.node.type === 'array' && + prop.node.elementType.type === 'ref' && + prop.node.elementType.ref.startsWith('AssetWrapper')) + ) { + const isArray = prop.node.type === 'array'; + const context = { + propertyName: key, + parent: { + pluginName: 'player-dnd-plugin', + assetName: typeProp, + }, + isArrayElement: isArray, + }; + const id = isArray ? `${idPrefix}-${key}-0` : `${idPrefix}-${key}`; + const assetSlot = makeDropTarget(id, context); + + this.dropTargetAssets.set(getAssetSymbol(assetSlot), assetSlot); + this.targetsToAssets.set( + getAssetSymbol(assetSlot), + getAssetSymbol(asset) + ); + if (isArray) { + asset[key] = [{ asset: assetSlot }]; + } else { + asset[key] = { asset: assetSlot }; + } + } + }); + + if (hasRequiredProperties) { + asset = await this.resolveRequiredProperties(asset, xlrType); + } + + return asset; + } + + public updateAsset(assetSymbol: symbol, newAsset: Asset) { + let placedAsset = this.realAssetMappings.get(assetSymbol); + + if (!placedAsset) { + throw new Error( + `Cannot set asset value for unknown id: ${assetSymbol.toString()}` + ); + } + + if (!placedAsset.asset) { + throw new Error( + `Cannot update an asset that doesn't have an existing asset` + ); + } + + placedAsset = { + ...placedAsset, + asset: { + ...placedAsset.asset, + ...newAsset, + }, + }; + + const containingDropTarget = this.getContainingDropTarget(assetSymbol); + + if (!containingDropTarget.values) { + throw new Error( + `Mapped drop target ${containingDropTarget.id} as no assets` + ); + } + + this.realAssetMappings.set(assetSymbol, placedAsset); + + const updateIndex = this.findAssetInDropTarget( + assetSymbol, + containingDropTarget + ); + + containingDropTarget.values[updateIndex] = placedAsset; + + containingDropTarget.value = + this.computeViewForDropTarget(containingDropTarget); + + this.handleDndStateChange(); + } + + public async placeAsset( + /** The symbol for the drop target to place the asset in */ + dropTargetSymbol: symbol, + /** XLR Info about the asset being placed */ + replacement: { + /** The identifier for where the populated asset is from */ + identifier: ExtensionProviderAssetIdentifier; + + /** The current descriptor for the value stored at this asset */ + type: NamedType; + }, + action: 'replace' | 'append' | 'prepend', + /** The symbol for the asset to replace if the new asset is being dropped into a generated collection */ + assetSymbol?: symbol + ): Promise { + const dropTarget = this.dropTargetAssets.get(dropTargetSymbol); + if (!dropTarget) { + throw new Error( + `Cannot set asset value for unknown drop target: ${dropTargetSymbol.toString()}` + ); + } + + if (!isDropTargetAsset(dropTarget)) { + throw new Error(`Cannot drop asset onto non drop target asset`); + } + + const newAsset = await this.createNewAsset(dropTarget.id, replacement.type); + + const newWrappedAsset: PlacedAsset = { + asset: newAsset, + identifier: replacement.identifier, + }; + + this.realAssetMappings.set(getAssetSymbol(newAsset), newWrappedAsset); + + if (action === 'replace') { + if (assetSymbol && dropTarget.values) { + const updateIndex = this.findAssetInDropTarget(assetSymbol, dropTarget); + + dropTarget.values[updateIndex] = newWrappedAsset; + } else { + dropTarget.values = [newWrappedAsset]; + } + } else if (action === 'append') { + dropTarget.values = [...(dropTarget.values ?? []), newWrappedAsset]; + } else if (action === 'prepend') { + dropTarget.values = [newWrappedAsset, ...(dropTarget.values ?? [])]; + } + + dropTarget.value = this.computeViewForDropTarget(dropTarget); + + const newAssetSymbol = getAssetSymbol(newAsset); + this.assetsToTargets.set(newAssetSymbol, dropTargetSymbol); + + // Resolve Arrays in parent + this.updateArrayInParent(dropTarget, dropTargetSymbol); + + this.handleDndStateChange(); + } + + public getAsset(assetSymbol: symbol): PlacedAsset { + const placedAsset = this.realAssetMappings.get(assetSymbol); + if (!placedAsset) { + throw new Error( + `Cannot get asset value for unknown id: ${assetSymbol.toString()}` + ); + } + + return placedAsset; + } + + public clearAsset(assetSymbol: symbol) { + const parentDropTarget = this.getContainingDropTarget(assetSymbol); + + parentDropTarget.values = parentDropTarget.values?.filter( + (pa) => getAssetSymbol(pa.asset) !== assetSymbol + ); + + this.realAssetMappings.delete(assetSymbol); + parentDropTarget.value = this.computeViewForDropTarget(parentDropTarget); + + this.handleDndStateChange(); + } + + private makeDropTargetContext( + sdk: XLRSDK, + parent: Asset, + propertyName: string, + isArrayElement?: boolean + ): DropTargetAssetContext { + const { plugin: pluginName } = sdk.getTypeInfo(parent.type) as TypeMetadata; + return { + parent: { + pluginName, + assetName: parent.type, + }, + propertyName, + isArrayElement, + }; + } + + private createDropTarget( + sdk: XLRSDK, + targetAsset?: Asset, + dropTargetContext?: DropTargetAssetContext, + parentAsset?: Asset + ): DropTargetAsset { + const id = targetAsset + ? `${targetAsset.id}-dropTarget` + : `${parentAsset?.id}-dropTarget`; + const dropTarget = makeDropTarget(id, dropTargetContext); + const dropTargetSymbol = getAssetSymbol(dropTarget); + this.dropTargetAssets.set(dropTargetSymbol, dropTarget); + if (targetAsset) { + const targetAssetType = sdk.getType( + targetAsset.type + ) as NamedType; + const { plugin: pluginName } = sdk.getTypeInfo( + targetAsset.type + ) as TypeMetadata; + const wrappedTargetAsset: PlacedAsset = { + identifier: { + pluginName, + assetName: targetAssetType.name ?? '', + capability: dropTargetContext ? 'Assets' : 'Views', + }, + asset: targetAsset, + }; + const targetAssetSymbol = getAssetSymbol(targetAsset); + dropTarget.values?.push(wrappedTargetAsset); + this.realAssetMappings.set(targetAssetSymbol, wrappedTargetAsset); + this.assetsToTargets.set(targetAssetSymbol, dropTargetSymbol); + } + + if (parentAsset) { + this.targetsToAssets.set(dropTargetSymbol, getAssetSymbol(parentAsset)); + } + + dropTarget.value = this.computeViewForDropTarget(dropTarget); + + return dropTarget; + } + + private addDndStateToAsset( + obj: any, + sdk: XLRSDK, + dropTargetContext?: DropTargetAssetContext, + parentAsset?: Asset + ) { + if (obj === null) { + return obj; + } + + const newObj = { ...obj }; + const assetType = sdk.getType(obj.type) as ObjectType; + if (assetType) { + newObj[UUIDSymbol] = Symbol(`${newObj.id}-${newObj.type}`); + } + + const propsList = Object.keys(newObj); + + Object.keys(newObj).forEach((key) => { + let isAssetWrapper = false; + let isArrayElement = false; + if (assetType && key in assetType.properties) { + const { node } = assetType.properties[key]; + if ( + (node.type === 'ref' && node.ref.startsWith('AssetWrapper')) || + (node.type === 'array' && + node.elementType.type === 'ref' && + node.elementType.ref.startsWith('AssetWrapper')) + ) { + isAssetWrapper = true; + isArrayElement = node.type === 'array'; + } + } + + if ( + key === 'asset' && + dropTargetContext && + dropTargetContext?.parent.assetName.length > 0 + ) { + newObj[key] = this.createDropTarget( + sdk, + this.addDndStateToAsset( + obj[key], + sdk, + dropTargetContext, + parentAsset + ), + dropTargetContext, + parentAsset + ); + } else if (typeof obj[key] === 'object') { + const targetAsset = this.addDndStateToAsset( + obj[key], + sdk, + isAssetWrapper + ? this.makeDropTargetContext(sdk, newObj, key, isArrayElement) + : dropTargetContext, + isAssetWrapper ? newObj : parentAsset + ); + + if ( + targetAsset && + Array.isArray(targetAsset) && + targetAsset.length === 0 + ) { + propsList.splice(propsList.indexOf(key), 1); + } + + newObj[key] = targetAsset; + } else { + newObj[key] = obj[key]; + } + }); + + if (assetType) { + Object.keys(assetType.properties) + .filter((x) => !propsList.includes(x)) + .forEach((key) => { + const { node } = assetType.properties[key]; + if ( + (node.type === 'ref' && node.ref.startsWith('AssetWrapper')) || + (node.type === 'array' && + node.elementType.type === 'ref' && + node.elementType.ref.startsWith('AssetWrapper')) + ) { + const targetAsset = { + asset: this.createDropTarget( + sdk, + undefined, + this.makeDropTargetContext( + sdk, + newObj, + key, + node.type === 'array' + ), + newObj + ), + }; + newObj[key] = node.type === 'array' ? [targetAsset] : targetAsset; + } + }); + } + + if (Array.isArray(obj)) { + newObj.length = obj.length; + return Array.from(newObj); + } + + return newObj; + } + + public importView(view: View, xlrService: XLRSDK) { + this.realAssetMappings.clear(); + this.dropTargetAssets.clear(); + this.assetsToTargets.clear(); + this.targetsToAssets.clear(); + this.ROOT = this.createDropTarget( + xlrService, + this.addDndStateToAsset(view, xlrService) + ); + } + + get view(): View { + return this.ROOT; + } + + get flow(): FlowWithOneView { + const { view } = this; + + return { + id: 'dnd-controller', + views: [view], + schema: this.schema, + data: this.data, + navigation: this.navigation, + }; + } +} diff --git a/jest.config.js b/jest.config.js index b29d8cce..b35aaf58 100644 --- a/jest.config.js +++ b/jest.config.js @@ -33,6 +33,9 @@ module.exports = { 'test-utils', '_backup', ], + "transformIgnorePatterns": [ + "node_modules/(?!react-dnd|dnd-core|@react-dnd)" + ], collectCoverageFrom: [ '**/src/**', '!**/*.json', diff --git a/language/dsl/BUILD b/language/dsl/BUILD index 0831123f..cde756fc 100644 --- a/language/dsl/BUILD +++ b/language/dsl/BUILD @@ -24,9 +24,7 @@ javascript_pipeline( "@npm//dequal" ], peer_dependencies = [ - "@npm//react" - ], - test_data = [ + "@npm//react", "@npm//@types/react" - ], + ], ) diff --git a/language/dsl/src/compiler/schema.ts b/language/dsl/src/compiler/schema.ts index 925b9373..a2c8116b 100644 --- a/language/dsl/src/compiler/schema.ts +++ b/language/dsl/src/compiler/schema.ts @@ -2,7 +2,7 @@ import type { Schema, Language } from '@player-ui/types'; import signale from 'signale'; import { dequal } from 'dequal'; import { SyncWaterfallHook } from 'tapable-ts'; -import { binding as b } from '..'; +import { binding as b } from '../string-templates'; import type { BindingTemplateInstance } from '../string-templates'; const bindingSymbol = Symbol('binding'); diff --git a/language/dsl/src/switch.tsx b/language/dsl/src/switch.tsx index 522f41c7..b895e691 100644 --- a/language/dsl/src/switch.tsx +++ b/language/dsl/src/switch.tsx @@ -1,8 +1,8 @@ import type { PropsWithChildren } from 'react'; import React from 'react'; import type { ArrayNode, JsonNode, ObjectNode } from 'react-json-reconciler'; -import { flattenNodes, PropertyNode } from 'react-json-reconciler'; -import { SlotContext } from '.'; +import { flattenNodes } from 'react-json-reconciler'; +import { SlotContext } from './components'; import { IDSuffixProvider, OptionalIDSuffixProvider } from './auto-id'; import type { BindingTemplateInstance, diff --git a/language/dsl/src/template.tsx b/language/dsl/src/template.tsx index 793c6f26..d66d6ec3 100644 --- a/language/dsl/src/template.tsx +++ b/language/dsl/src/template.tsx @@ -1,3 +1,4 @@ +/* eslint-disable react/jsx-no-useless-fragment */ import React from 'react'; import type { ObjectNode, JsonNode } from 'react-json-reconciler'; import { @@ -163,24 +164,26 @@ export const Template = (props: TemplateProps) => { return ( - {createPortal( - - - - {props.data.toValue()} - {outputProp} - {props.children} - - - , - outputElement - )} - + <> + {createPortal( + + + + {props.data.toValue()} + {outputProp} + {props.children} + + + , + outputElement + )} + + ); }; diff --git a/language/dsl/src/utils.tsx b/language/dsl/src/utils.tsx index effc1b34..0962053e 100644 --- a/language/dsl/src/utils.tsx +++ b/language/dsl/src/utils.tsx @@ -56,7 +56,7 @@ export function normalizeText(options: { node: React.ReactNode; /** A component to render a text asset */ - TextComp?: React.ComponentType; + TextComp?: React.ComponentType; }): React.ReactNode { const { node, TextComp } = options; @@ -88,7 +88,7 @@ export function normalizeToCollection(options: { TextComp?: React.ComponentType; /** A collection asset */ - CollectionComp?: React.ComponentType; + CollectionComp?: React.ComponentType; }) { const { node, CollectionComp } = options; diff --git a/language/json-language-service/src/xlr/service.ts b/language/json-language-service/src/xlr/service.ts index 9ade3659..2b93d26f 100644 --- a/language/json-language-service/src/xlr/service.ts +++ b/language/json-language-service/src/xlr/service.ts @@ -17,7 +17,7 @@ export interface XLRContext { } /** - * XLRs Manager for + * XLRs Manager for abstracting away Player specific interactions with XLR */ export class XLRService { private baseTypes = [ diff --git a/package.json b/package.json index 48601daf..850a6ca7 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,9 @@ }, "dependencies": { "@auto-it/version-file": "^10.37.2", + "@chakra-ui/react": "^2.4.4", + "@emotion/react": "^11", + "@emotion/styled": "^11", "@babel/cli": "^7.15.7", "@babel/core": "^7.15.5", "@babel/eslint-parser": "^7.15.8", @@ -28,14 +31,12 @@ "@babel/register": "^7.17.7", "@babel/runtime": "7.15.4", "@bazel/typescript": "^4.4.2", - "@chakra-ui/react": "^1.0.0", "@devtools-ds/console": "^1.1.2", "@devtools-ds/icon": "^1.1.2", "@devtools-ds/navigation": "^1.1.2", "@devtools-ds/object-inspector": "^1.1.2", "@devtools-ds/table": "^1.1.2", "@devtools-ds/themes": "^1.1.2", - "@emotion/styled": "^11", "@kendallgassner/eslint-plugin-package-json": "^0.2.1", "@oclif/core": "1.9.0", "@oclif/plugin-legacy": "^1.2.7", @@ -43,6 +44,9 @@ "@player-ui/types": "0.4.0-next.7", "@reduxjs/toolkit": "^1.6.1", "@rollup/plugin-image": "^2.1.1", + "@player-ui/react": "0.4.0-next.7", + "@player-ui/react-subscribe": "0.4.0-next.7", + "@player-ui/reference-assets-plugin-react": "0.4.0-next.7", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^13.0.6", "@testing-library/dom": "^8.10.1", @@ -55,7 +59,7 @@ "@types/micromatch": "^4.0.2", "@types/mkdirp": "^1.0.2", "@types/node": "^16.11.12", - "@types/react": "^17.0.25", + "@types/react": "^18.0.27", "@types/signale": "^1.4.2", "@types/std-mocks": "^1.0.1", "@types/uuid": "^8.3.4", @@ -101,7 +105,7 @@ "figures": "^3.0.0", "flipper-pkg": "^0.173.0", "flipper-plugin": "^0.173.0", - "framer-motion": "^4", + "framer-motion": "^6", "fs-extra": "^10.0.0", "globby": "^11.0.1", "husky": "^7.0.2", @@ -117,13 +121,17 @@ "micromatch": "^4.0.2", "mkdirp": "^1.0.4", "modify-source-webpack-plugin": "^3.0.0", + "next": "^12.0.7", "oclif": "3.0.1", "patch-package": "^6.4.7", "prettier": "^2.4.1", - "react": "^17.0.2", + "react": "^18.2.0", + "react-dnd": "^16.0.1", + "react-dnd-html5-backend": "^16.0.1", "react-docgen-typescript": "^2.1.1", - "react-dom": "^17.0.2", + "react-dom": "^18.2.0", "react-error-boundary": "^3.1.3", + "react-files": "^3.0.0-alpha.3", "react-flame-graph": "^1.4.0", "react-flatten-children": "^1.1.2", "react-icons": "^4.3.1", @@ -158,6 +166,9 @@ "webpack-cli": "^3.3.0", "zip-folder": "^1.0.0" }, + "resolutions": { + "@types/react": "^18.0.27" + }, "volta": { "node": "16.14.0" } diff --git a/xlr/converters/BUILD b/xlr/converters/BUILD index f885e127..714a72c7 100644 --- a/xlr/converters/BUILD +++ b/xlr/converters/BUILD @@ -5,9 +5,12 @@ javascript_pipeline( name = "@player-tools/xlr-converters", dependencies = [ "//xlr/types:@player-tools/xlr", - "//xlr/utils:@player-tools/xlr-utils" + "//xlr/utils:@player-tools/xlr-utils", ], peer_dependencies = [ "@npm//typescript" + ], + test_data = [ + "//xlr/testing-utils:@player-tools/xlr-testing-utils" ] ) \ No newline at end of file diff --git a/xlr/converters/src/__tests__/player.test.ts b/xlr/converters/src/__tests__/player.test.ts index 3f98392f..59fb3c9e 100644 --- a/xlr/converters/src/__tests__/player.test.ts +++ b/xlr/converters/src/__tests__/player.test.ts @@ -1,4 +1,4 @@ -import { setupTestEnv } from '@player-tools/xlr-utils'; +import { setupTestEnv } from '@player-tools/xlr-testing-utils'; import { TsConverter } from '..'; it('Player Types Export', () => { diff --git a/xlr/converters/src/__tests__/ts-to-common.test.ts b/xlr/converters/src/__tests__/ts-to-common.test.ts index 10595714..00353533 100644 --- a/xlr/converters/src/__tests__/ts-to-common.test.ts +++ b/xlr/converters/src/__tests__/ts-to-common.test.ts @@ -1,5 +1,5 @@ /* eslint-disable no-template-curly-in-string */ -import { setupTestEnv } from '@player-tools/xlr-utils'; +import { setupTestEnv } from '@player-tools/xlr-testing-utils'; import { TsConverter } from '..'; describe('Type Exports', () => { diff --git a/xlr/sdk/BUILD b/xlr/sdk/BUILD index cce24a1b..8bba791a 100644 --- a/xlr/sdk/BUILD +++ b/xlr/sdk/BUILD @@ -12,9 +12,6 @@ javascript_pipeline( "@npm//@types/fs-extra", "@npm//fs-extra", ], - peer_dependencies = [ - "@npm//typescript" - ], test_data = [ "//common:@player-tools/static-xlrs", ] diff --git a/xlr/sdk/src/__tests__/__snapshots__/sdk.test.ts.snap b/xlr/sdk/src/__tests__/__snapshots__/sdk.test.ts.snap index f5c34310..bfa11247 100644 --- a/xlr/sdk/src/__tests__/__snapshots__/sdk.test.ts.snap +++ b/xlr/sdk/src/__tests__/__snapshots__/sdk.test.ts.snap @@ -917,1339 +917,14335 @@ Array [ `; exports[`Export Test Exports Typescript Types With Filters 1`] = ` -"import { Expression, Asset, Binding, AssetWrapper } from \\"@player-ui/types\\"; - -/** - * This is the most generic way of gathering data. The input is bound to a data model using the 'binding' property. - * Players can get field type information from the 'schema' definition, thus to decide the input controls for visual rendering. -*/ -export interface InputAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'input'; - /** Asset container for a field label. */ - label?: AssetWrapper; - /** Asset container for a note. */ - note?: AssetWrapper; - /** The location in the data-model to store the data */ - binding: Binding; - /** Optional additional data */ - metaData?: { - /** Additional data to beacon when this input changes */ - beacon?: string | Record; - }; - [key: string]: unknown; -} -export interface TextAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'text'; - /** The text to display */ - value: string; - /** Any modifiers on the text */ - modifiers?: Array<{ - /** The modifier type */ - type: string; - /** Modifiers can be named when used in strings */ - name?: string; - [key: string]: unknown; - } | { - /** The link type denotes this as a link */ - type: 'link'; - /** An optional expression to run before the link is opened */ - exp?: Expression; - /** metaData about the link's target */ - metaData: { - /** The location of the link to load */ - ref: string; - /** Used to indicate an application specific resolver to use */ - 'mime-type'?: string; - }; - }>; - [key: string]: unknown; -} -/** - * User actions can be represented in several places. - * Each view typically has one or more actions that allow the user to navigate away from that view. - * In addition, several asset types can have actions that apply to that asset only. -*/ -export interface ActionAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'action'; - /** The transition value of the action in the state machine */ - value?: string; - /** A text-like asset for the action's label */ - label?: AssetWrapper; - /** An optional expression to execute before transitioning */ - exp?: Expression; - /** An optional string that describes the action for screen-readers */ - accessibility?: string; - /** Additional optional data to assist with the action interactions on the page */ - metaData?: { - /** Additional data to beacon */ - beacon?: string | Record; - /** Force transition to the next view without checking for validation */ - skipValidation?: boolean; - }; - [key: string]: unknown; -} -export interface InfoAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'info'; - /** The string value to show */ - title?: AssetWrapper; - /** subtitle */ - subTitle?: AssetWrapper; - /** Primary place for info */ - primaryInfo?: AssetWrapper; - /** List of actions to show at the bottom of the page */ - actions?: Array; - [key: string]: unknown; -} -export interface CollectionAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'collection'; - /** An optional label to title the collection */ - label?: AssetWrapper; - /** The string value to show */ - values?: Array; - [key: string]: unknown; -}" +Array [ + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "This is the most generic way of gathering data. The input is bound to a data model using the 'binding' property. +Players can get field type information from the 'schema' definition, thus to decide the input controls for visual rendering.", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "AnyTextAsset", + }, + ], + "name": "InputAsset", + "properties": Object { + "binding": Object { + "node": Object { + "description": "The location in the data-model to store the data", + "genericArguments": undefined, + "ref": "Binding", + "title": "InputAsset.binding", + "type": "ref", + }, + "required": true, + }, + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "label": Object { + "node": Object { + "description": "Asset container for a field label.", + "genericArguments": Array [ + Object { + "genericArguments": undefined, + "ref": "AnyTextAsset", + "type": "ref", + }, + ], + "ref": "AssetWrapper", + "title": "InputAsset.label", + "type": "ref", + }, + "required": false, + }, + "metaData": Object { + "node": Object { + "additionalProperties": false, + "description": "Optional additional data", + "extends": undefined, + "properties": Object { + "beacon": Object { + "node": Object { + "description": "Additional data to beacon when this input changes", + "name": "BeaconDataType", + "or": Array [ + Object { + "title": "BeaconDataType", + "type": "string", + }, + Object { + "keyType": Object { + "type": "string", + }, + "title": "BeaconDataType", + "type": "record", + "valueType": Object { + "type": "any", + }, + }, + ], + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/beacon-plugin/dist/index.d.ts", + "title": "InputAsset.metaData.beacon", + "type": "or", + }, + "required": false, + }, + }, + "title": "InputAsset.metaData", + "type": "object", + }, + "required": false, + }, + "note": Object { + "node": Object { + "description": "Asset container for a note.", + "genericArguments": Array [ + Object { + "genericArguments": undefined, + "ref": "AnyTextAsset", + "type": "ref", + }, + ], + "ref": "AssetWrapper", + "title": "InputAsset.note", + "type": "ref", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "input", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": undefined, + "extends": undefined, + "genericTokens": Array [], + "name": "TextAsset", + "properties": Object { + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "modifiers": Object { + "node": Object { + "description": "Any modifiers on the text", + "elementType": Object { + "name": "TextModifier", + "or": Array [ + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "extends": undefined, + "name": "BasicTextModifier", + "properties": Object { + "name": Object { + "node": Object { + "description": "Modifiers can be named when used in strings", + "title": "BasicTextModifier.name", + "type": "string", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The modifier type", + "title": "BasicTextModifier.type", + "type": "string", + }, + "required": true, + }, + }, + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", + "title": "BasicTextModifier", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "A modifier to turn the text into a link", + "extends": undefined, + "name": "LinkModifier", + "properties": Object { + "exp": Object { + "node": Object { + "description": "An optional expression to run before the link is opened", + "genericArguments": undefined, + "ref": "Expression", + "title": "LinkModifier.exp", + "type": "ref", + }, + "required": false, + }, + "metaData": Object { + "node": Object { + "additionalProperties": false, + "description": "metaData about the link's target", + "extends": undefined, + "properties": Object { + "'mime-type'": Object { + "node": Object { + "description": "Used to indicate an application specific resolver to use", + "title": "LinkModifier.metaData.'mime-type'", + "type": "string", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "The location of the link to load", + "title": "LinkModifier.metaData.ref", + "type": "string", + }, + "required": true, + }, + }, + "title": "LinkModifier.metaData", + "type": "object", + }, + "required": true, + }, + "type": Object { + "node": Object { + "const": "link", + "description": "The link type denotes this as a link", + "title": "LinkModifier.type", + "type": "string", + }, + "required": true, + }, + }, + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", + "title": "LinkModifier", + "type": "object", + }, + ], + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", + "title": "TextModifier", + "type": "or", + }, + "title": "TextAsset.modifiers", + "type": "array", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "text", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + "value": Object { + "node": Object { + "description": "The text to display", + "title": "TextAsset.value", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "User actions can be represented in several places. +Each view typically has one or more actions that allow the user to navigate away from that view. +In addition, several asset types can have actions that apply to that asset only.", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "AnyTextAsset", + }, + ], + "name": "ActionAsset", + "properties": Object { + "accessibility": Object { + "node": Object { + "description": "An optional string that describes the action for screen-readers", + "title": "ActionAsset.accessibility", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "description": "An optional expression to execute before transitioning", + "genericArguments": undefined, + "ref": "Expression", + "title": "ActionAsset.exp", + "type": "ref", + }, + "required": false, + }, + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "label": Object { + "node": Object { + "description": "A text-like asset for the action's label", + "genericArguments": Array [ + Object { + "genericArguments": undefined, + "ref": "AnyTextAsset", + "type": "ref", + }, + ], + "ref": "AssetWrapper", + "title": "ActionAsset.label", + "type": "ref", + }, + "required": false, + }, + "metaData": Object { + "node": Object { + "additionalProperties": false, + "description": "Additional optional data to assist with the action interactions on the page", + "extends": undefined, + "properties": Object { + "beacon": Object { + "node": Object { + "description": "Additional data to beacon", + "name": "BeaconDataType", + "or": Array [ + Object { + "title": "BeaconDataType", + "type": "string", + }, + Object { + "keyType": Object { + "type": "string", + }, + "title": "BeaconDataType", + "type": "record", + "valueType": Object { + "type": "any", + }, + }, + ], + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/beacon-plugin/dist/index.d.ts", + "title": "ActionAsset.metaData.beacon", + "type": "or", + }, + "required": false, + }, + "skipValidation": Object { + "node": Object { + "description": "Force transition to the next view without checking for validation", + "title": "ActionAsset.metaData.skipValidation", + "type": "boolean", + }, + "required": false, + }, + }, + "title": "ActionAsset.metaData", + "type": "object", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "action", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + "value": Object { + "node": Object { + "description": "The transition value of the action in the state machine", + "title": "ActionAsset.value", + "type": "string", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": undefined, + "extends": undefined, + "genericTokens": Array [], + "name": "InfoAsset", + "properties": Object { + "actions": Object { + "node": Object { + "description": "List of actions to show at the bottom of the page", + "elementType": Object { + "genericArguments": undefined, + "ref": "AssetWrapper", + "type": "ref", + }, + "title": "InfoAsset.actions", + "type": "array", + }, + "required": false, + }, + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "primaryInfo": Object { + "node": Object { + "description": "Primary place for info", + "genericArguments": undefined, + "ref": "AssetWrapper", + "title": "InfoAsset.primaryInfo", + "type": "ref", + }, + "required": false, + }, + "subTitle": Object { + "node": Object { + "description": "subtitle", + "genericArguments": undefined, + "ref": "AssetWrapper", + "title": "InfoAsset.subTitle", + "type": "ref", + }, + "required": false, + }, + "title": Object { + "node": Object { + "description": "The string value to show", + "genericArguments": undefined, + "ref": "AssetWrapper", + "title": "InfoAsset.title", + "type": "ref", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "info", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": undefined, + "extends": undefined, + "genericTokens": Array [], + "name": "CollectionAsset", + "properties": Object { + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "label": Object { + "node": Object { + "description": "An optional label to title the collection", + "genericArguments": undefined, + "ref": "AssetWrapper", + "title": "CollectionAsset.label", + "type": "ref", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "collection", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + "values": Object { + "node": Object { + "description": "The string value to show", + "elementType": Object { + "genericArguments": undefined, + "ref": "AssetWrapper", + "type": "ref", + }, + "title": "CollectionAsset.values", + "type": "array", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, +] `; exports[`Export Test Exports Typescript Types With Transforms 1`] = ` -"import { Expression, Asset, Binding, AssetWrapper } from \\"@player-ui/types\\"; - -/** - * This is the most generic way of gathering data. The input is bound to a data model using the 'binding' property. - * Players can get field type information from the 'schema' definition, thus to decide the input controls for visual rendering. -*/ -export interface InputAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'input'; - /** Asset container for a field label. */ - label?: AssetWrapper; - /** Asset container for a note. */ - note?: AssetWrapper; - /** The location in the data-model to store the data */ - binding: Binding; - /** Optional additional data */ - metaData?: { - /** Additional data to beacon when this input changes */ - beacon?: string | Record; - }; - transformed?: true; - [key: string]: unknown; -} -export interface TextAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'text'; - /** The text to display */ - value: string; - /** Any modifiers on the text */ - modifiers?: Array<{ - /** The modifier type */ - type: string; - /** Modifiers can be named when used in strings */ - name?: string; - [key: string]: unknown; - } | { - /** The link type denotes this as a link */ - type: 'link'; - /** An optional expression to run before the link is opened */ - exp?: Expression; - /** metaData about the link's target */ - metaData: { - /** The location of the link to load */ - ref: string; - /** Used to indicate an application specific resolver to use */ - 'mime-type'?: string; - }; - }>; - transformed?: true; - [key: string]: unknown; -} -/** - * User actions can be represented in several places. - * Each view typically has one or more actions that allow the user to navigate away from that view. - * In addition, several asset types can have actions that apply to that asset only. -*/ -export interface ActionAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'action'; - /** The transition value of the action in the state machine */ - value?: string; - /** A text-like asset for the action's label */ - label?: AssetWrapper; - /** An optional expression to execute before transitioning */ - exp?: Expression; - /** An optional string that describes the action for screen-readers */ - accessibility?: string; - /** Additional optional data to assist with the action interactions on the page */ - metaData?: { - /** Additional data to beacon */ - beacon?: string | Record; - /** Force transition to the next view without checking for validation */ - skipValidation?: boolean; - }; - transformed?: true; - [key: string]: unknown; -} -export interface InfoAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'info'; - /** The string value to show */ - title?: AssetWrapper; - /** subtitle */ - subTitle?: AssetWrapper; - /** Primary place for info */ - primaryInfo?: AssetWrapper; - /** List of actions to show at the bottom of the page */ - actions?: Array; - transformed?: true; - [key: string]: unknown; -} -export interface CollectionAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'collection'; - /** An optional label to title the collection */ - label?: AssetWrapper; - /** The string value to show */ - values?: Array; - transformed?: true; - [key: string]: unknown; -}" -`; - -exports[`Export Test Exports Typescript types 1`] = ` -"import { Expression, Asset, Binding, AssetWrapper } from \\"@player-ui/types\\"; - -/** - * This is the most generic way of gathering data. The input is bound to a data model using the 'binding' property. - * Players can get field type information from the 'schema' definition, thus to decide the input controls for visual rendering. -*/ -export interface InputAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'input'; - /** Asset container for a field label. */ - label?: AssetWrapper; - /** Asset container for a note. */ - note?: AssetWrapper; - /** The location in the data-model to store the data */ - binding: Binding; - /** Optional additional data */ - metaData?: { - /** Additional data to beacon when this input changes */ - beacon?: string | Record; - }; - [key: string]: unknown; -} -export interface TextAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'text'; - /** The text to display */ - value: string; - /** Any modifiers on the text */ - modifiers?: Array<{ - /** The modifier type */ - type: string; - /** Modifiers can be named when used in strings */ - name?: string; - [key: string]: unknown; - } | { - /** The link type denotes this as a link */ - type: 'link'; - /** An optional expression to run before the link is opened */ - exp?: Expression; - /** metaData about the link's target */ - metaData: { - /** The location of the link to load */ - ref: string; - /** Used to indicate an application specific resolver to use */ - 'mime-type'?: string; - }; - }>; - [key: string]: unknown; -} -/** - * User actions can be represented in several places. - * Each view typically has one or more actions that allow the user to navigate away from that view. - * In addition, several asset types can have actions that apply to that asset only. -*/ -export interface ActionAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'action'; - /** The transition value of the action in the state machine */ - value?: string; - /** A text-like asset for the action's label */ - label?: AssetWrapper; - /** An optional expression to execute before transitioning */ - exp?: Expression; - /** An optional string that describes the action for screen-readers */ - accessibility?: string; - /** Additional optional data to assist with the action interactions on the page */ - metaData?: { - /** Additional data to beacon */ - beacon?: string | Record; - /** Force transition to the next view without checking for validation */ - skipValidation?: boolean; - }; - [key: string]: unknown; -} -export interface InfoAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'info'; - /** The string value to show */ - title?: AssetWrapper; - /** subtitle */ - subTitle?: AssetWrapper; - /** Primary place for info */ - primaryInfo?: AssetWrapper; - /** List of actions to show at the bottom of the page */ - actions?: Array; - [key: string]: unknown; -} -export interface CollectionAsset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: 'collection'; - /** An optional label to title the collection */ - label?: AssetWrapper; - /** The string value to show */ - values?: Array; - [key: string]: unknown; -} -/** An asset is the smallest unit of user interaction in a player view */ -export interface Asset { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: T; - [key: string]: unknown; -} -/** An asset that contains a Binding. */ -export interface AssetBinding { - /** Each asset requires a unique id per view */ - id: string; - /** The asset type determines the semantics of how a user interacts with a page */ - type: T; - /** A binding that points to somewhere in the data model */ - binding: Binding; - [key: string]: unknown; -} -/** A single case statement to use in a switch */ -export interface SwitchCase { - /** The Asset to use if this case is applicable */ - asset: T; - /** An expression to execute to determine if this case applies */ - case: Expression | true; -} -/** A switch can replace an asset with the applicable case on first render */ -export type Switch = Array<{ - /** The Asset to use if this case is applicable */ - asset: T; - /** An expression to execute to determine if this case applies */ - case: Expression | true; -}>; -/** An object that contains an asset */ -export interface AssetWrapper { - /** An asset instance */ - asset: T; - [key: string]: unknown; -} -export type AssetWrapperOrSwitch = (AssetWrapper & { - /** The dynamicSwitch property can't exist at the same time as 'asset' */ - dynamicSwitch?: never; - /** The staticSwitch property can't exist at the same time as 'asset' */ - staticSwitch?: never; -}) | ({ - /** A static switch only evaluates the applicable base on first render of the view */ - staticSwitch: Array<{ - /** The Asset to use if this case is applicable */ - asset: T; - /** An expression to execute to determine if this case applies */ - case: Expression | true; - }>; -} & { - /** The staticSwitch property can't exist at the same time as 'asset' */ - asset?: never; - /** The staticSwitch property can't exist at the same time as 'dynamicSwitch' */ - dynamicSwitch?: never; -}) | ({ - /** A dynamic switch re-evaluates the applicable case as data changes */ - dynamicSwitch: Array<{ - /** The Asset to use if this case is applicable */ - asset: T; - /** An expression to execute to determine if this case applies */ - case: Expression | true; - }>; -} & { - /** The dynamicSwitch property can't exist at the same time as 'asset' */ - asset?: never; - /** The dynamicSwitch property can't exist at the same time as 'staticSwitch' */ - staticSwitch?: never; -}); -export type AssetSwitch = { - /** A static switch only evaluates the applicable base on first render of the view */ - staticSwitch: Array<{ - /** The Asset to use if this case is applicable */ - asset: T; - /** An expression to execute to determine if this case applies */ - case: Expression | true; - }>; -} | { - /** A dynamic switch re-evaluates the applicable case as data changes */ - dynamicSwitch: Array<{ - /** The Asset to use if this case is applicable */ - asset: T; - /** An expression to execute to determine if this case applies */ - case: Expression | true; - }>; -}; -export interface StaticSwitch { - /** A static switch only evaluates the applicable base on first render of the view */ - staticSwitch: Array<{ - /** The Asset to use if this case is applicable */ - asset: T; - /** An expression to execute to determine if this case applies */ - case: Expression | true; - }>; -} -export interface DynamicSwitch { - /** A dynamic switch re-evaluates the applicable case as data changes */ - dynamicSwitch: Array<{ - /** The Asset to use if this case is applicable */ - asset: T; - /** An expression to execute to determine if this case applies */ - case: Expression | true; - }>; -} -/** - * Expressions are a specialized way of executing code. - * If the expression is a composite, the last expression executed is the return value -*/ -export type Expression = string | Array; -export type ExpressionRef = \`@[\${string}]@\`; -/** Bindings describe locations in the data model. */ -export type Binding = string; -export type BindingRef = \`{{\${string}}}\`; -/** The data-model is the location that all user data is stored */ -export type DataModel = Record; -/** The navigation section of the flow describes a State Machine for the user. */ -export type Navigation = { - /** The name of the Flow to begin on */ - BEGIN: string; -} & Record; - /** An id corresponding to a view from the 'views' array */ - ref: string; - /** View meta-properties */ - attributes?: { - [key: string]: any; - }; - } | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'END'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** - * A description of _how_ the flow ended. - * If this is a flow started from another flow, the outcome determines the flow transition - */ - outcome: string; - } | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'FLOW'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - /** A reference to a FLOW id state to run */ - ref: string; - } | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'ACTION'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** - * An expression to execute. - * The return value determines the transition to take - */ - exp: Expression; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - } | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'EXTERNAL'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - /** A reference for this external state */ - ref: string; - }); -}>; -/** An object with an expression in it */ -export interface ExpressionObject { - /** The expression to run */ - exp?: Expression; -} -/** A state machine in the navigation */ -export interface NavigationFlow { - /** The first state to kick off the state machine */ - startState: string; - /** An optional expression to run when this Flow starts */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run when this Flow ends */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - [key: string]: undefined | string | Expression | { - /** The expression to run */ - exp?: Expression; - } | ({ - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'VIEW'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - /** An id corresponding to a view from the 'views' array */ - ref: string; - /** View meta-properties */ - attributes?: { - [key: string]: any; - }; - } | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'END'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** - * A description of _how_ the flow ended. - * If this is a flow started from another flow, the outcome determines the flow transition - */ - outcome: string; - } | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'FLOW'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - /** A reference to a FLOW id state to run */ - ref: string; - } | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'ACTION'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** - * An expression to execute. - * The return value determines the transition to take - */ - exp: Expression; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - } | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'EXTERNAL'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - /** A reference for this external state */ - ref: string; - }); -} -export type NavigationFlowTransition = Record; -/** The base representation of a state within a Flow */ -export interface NavigationBaseState { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: T; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** - * TS gets really confused with both the ActionState and the onStart state both declaring the \`exp\` property - * So this explicity says there should never be an exp prop on a state node that's not of type 'ACTION' - */ - exp?: T extends T ? Expression : never; -} -/** A generic state that can transition to another state */ -export interface NavigationFlowTransitionableState { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: T; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** - * TS gets really confused with both the ActionState and the onStart state both declaring the \`exp\` property - * So this explicity says there should never be an exp prop on a state node that's not of type 'ACTION' - */ - exp?: T extends T ? Expression : never; - /** A mapping of transition-name to FlowState name */ - transitions: Record; -} -/** A state representing a view */ -export interface NavigationFlowViewState { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'VIEW'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - /** An id corresponding to a view from the 'views' array */ - ref: string; - /** View meta-properties */ - attributes?: { - [key: string]: any; - }; -} -/** An END state of the flow. */ -export interface NavigationFlowEndState { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'END'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** - * A description of _how_ the flow ended. - * If this is a flow started from another flow, the outcome determines the flow transition - */ - outcome: string; -} -/** Action states execute an expression to determine the next state to transition to */ -export interface NavigationFlowActionState { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'ACTION'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** - * An expression to execute. - * The return value determines the transition to take - */ - exp: Expression; - /** A mapping of transition-name to FlowState name */ - transitions: Record; -} -/** - * External Flow states represent states in the FSM that can't be resolved internally in Player. - * The flow will wait for the embedded application to manage moving to the next state via a transition -*/ -export interface NavigationFlowExternalState { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'EXTERNAL'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - /** A reference for this external state */ - ref: string; -} -export interface NavigationFlowFlowState { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'FLOW'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - /** A reference to a FLOW id state to run */ - ref: string; -} -export type NavigationFlowState = { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'VIEW'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - /** An id corresponding to a view from the 'views' array */ - ref: string; - /** View meta-properties */ - attributes?: { - [key: string]: any; - }; -} | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'END'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** - * A description of _how_ the flow ended. - * If this is a flow started from another flow, the outcome determines the flow transition - */ - outcome: string; -} | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'FLOW'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - /** A reference to a FLOW id state to run */ - ref: string; -} | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'ACTION'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** - * An expression to execute. - * The return value determines the transition to take - */ - exp: Expression; - /** A mapping of transition-name to FlowState name */ - transitions: Record; -} | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'EXTERNAL'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - /** A reference for this external state */ - ref: string; -}; -/** The data at the end of a flow */ -export interface FlowResult { - /** The outcome describes _how_ the flow ended (forwards, backwards, etc) */ - endState: { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'END'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** - * A description of _how_ the flow ended. - * If this is a flow started from another flow, the outcome determines the flow transition - */ - outcome: string; - }; - /** The serialized data-model */ - data?: any; -} -/** Any object that contains 1 or more templates */ -export interface Templatable { - /** A list of templates to process for this node */ - template?: Array<{ - /** A pointer to the data-model containing an array of elements to map over */ - data: Binding; - /** - * The template to iterate over using each value in the supplied template data. - * Any reference to _index_ is replaced with the current iteration index. - */ - value: ValueType; - /** should the template be recomputed when data changes */ - dynamic?: boolean; - /** - * A property on the parent object to store the new map under. - * If it already exists, values are appended to the end. - */ - output: Key; - }>; -} -/** A template describes a mapping from a data array -> array of objects */ -export interface Template { - /** A pointer to the data-model containing an array of elements to map over */ - data: Binding; - /** - * The template to iterate over using each value in the supplied template data. - * Any reference to _index_ is replaced with the current iteration index. - */ - value: ValueType; - /** should the template be recomputed when data changes */ - dynamic?: boolean; - /** - * A property on the parent object to store the new map under. - * If it already exists, values are appended to the end. - */ - output: Key; -} -export type View = unknown extends unknown ? T & { - /** Each view can optionally supply a list of validations to run against a particular view */ - validation?: Array<{ - /** - * The name of the referenced validation type - * This will be used to lookup the proper handler - */ - type: string; - /** An optional means of overriding the default message if the validation is triggered */ - message?: string; - /** An optional means of overriding the default severity of the validation if triggered */ - severity?: 'error' | 'warning'; - /** When to run this particular validation */ - trigger?: 'navigation' | 'change' | 'load'; - /** Cross-field references and validation must run against the default (deformatted) value */ - dataTarget?: never; - /** Where the error should be displayed */ - displayTarget?: 'page' | 'section' | 'field'; - /** The binding to associate this validation with */ - ref?: Binding; - [key: string]: unknown; - }>; -} : T; -/** The JSON payload for running Player */ -export interface Flow { - /** A unique identifier for the flow */ - id: string; - /** A list of views (each with an ID) that can be shown to a user */ - views?: Array; - } : T>; - /** - * The schema for the supplied (or referenced data). - * This is used for validation, formatting, etc - */ - schema?: { - /** The ROOT object is the top level object to use */ - ROOT: { - [key: string]: { - /** The reference of the base type to use */ - type: string; - /** The referenced object represents an array rather than an object */ - isArray?: boolean; - /** - * Any additional validations that are associated with this property - * These will add to any base validations associated with the \\"type\\" - */ - validation?: Array<{ - /** - * The name of the referenced validation type - * This will be used to lookup the proper handler - */ - type: string; - /** An optional means of overriding the default message if the validation is triggered */ - message?: string; - /** An optional means of overriding the default severity of the validation if triggered */ - severity?: 'error' | 'warning'; - /** When to run this particular validation */ - trigger?: 'navigation' | 'change' | 'load'; - /** - * Each validation is passed the value of the data to run it's validation against. - * By default, this is the value stored in the data-model (deformatted). - * In the off chance you'd like this validator to run against the formatted value (the one the user sees), set this option - */ - dataTarget?: 'formatted' | 'deformatted'; - /** Where the error should be displayed */ - displayTarget?: 'page' | 'section' | 'field'; - [key: string]: unknown; - }>; - /** - * A reference to a specific data format to use. - * If none is specified, will fallback to that of the base type - */ - format?: { - /** The name of the formatter (and de-formatter) to use */ - type: string; - [key: string]: unknown; - }; - /** - * A default value for this property. - * Any reads for this property will result in this default value being written to the model. - */ - default?: T; - [key: string]: unknown; - }; - }; - [key: string]: { - [key: string]: { - /** The reference of the base type to use */ - type: string; - /** The referenced object represents an array rather than an object */ - isArray?: boolean; - /** - * Any additional validations that are associated with this property - * These will add to any base validations associated with the \\"type\\" - */ - validation?: Array<{ - /** - * The name of the referenced validation type - * This will be used to lookup the proper handler - */ - type: string; - /** An optional means of overriding the default message if the validation is triggered */ - message?: string; - /** An optional means of overriding the default severity of the validation if triggered */ - severity?: 'error' | 'warning'; - /** When to run this particular validation */ - trigger?: 'navigation' | 'change' | 'load'; - /** - * Each validation is passed the value of the data to run it's validation against. - * By default, this is the value stored in the data-model (deformatted). - * In the off chance you'd like this validator to run against the formatted value (the one the user sees), set this option - */ - dataTarget?: 'formatted' | 'deformatted'; - /** Where the error should be displayed */ - displayTarget?: 'page' | 'section' | 'field'; - [key: string]: unknown; - }>; - /** - * A reference to a specific data format to use. - * If none is specified, will fallback to that of the base type - */ - format?: { - /** The name of the formatter (and de-formatter) to use */ - type: string; - [key: string]: unknown; - }; - /** - * A default value for this property. - * Any reads for this property will result in this default value being written to the model. - */ - default?: T; - [key: string]: unknown; - }; - }; - }; - /** Any initial data that the flow can use */ - data?: Record; - /** A state machine to drive a user through the experience */ - navigation: { - /** The name of the Flow to begin on */ - BEGIN: string; - } & Record; - /** An id corresponding to a view from the 'views' array */ - ref: string; - /** View meta-properties */ - attributes?: { - [key: string]: any; - }; - } | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'END'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** - * A description of _how_ the flow ended. - * If this is a flow started from another flow, the outcome determines the flow transition - */ - outcome: string; - } | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'FLOW'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - /** A reference to a FLOW id state to run */ - ref: string; - } | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'ACTION'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** - * An expression to execute. - * The return value determines the transition to take - */ - exp: Expression; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - } | { - /** Add comments that will not be processing, but are useful for code explanation */ - _comment?: string; - /** A property to determine the type of state this is */ - state_type: 'EXTERNAL'; - /** An optional expression to run when this view renders */ - onStart?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - /** An optional expression to run before view transition */ - onEnd?: Expression | { - /** The expression to run */ - exp?: Expression; - }; - exp?: never; - /** A mapping of transition-name to FlowState name */ - transitions: Record; - /** A reference for this external state */ - ref: string; - }); - }>; - [key: string]: unknown; -}" +Array [ + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "This is the most generic way of gathering data. The input is bound to a data model using the 'binding' property. +Players can get field type information from the 'schema' definition, thus to decide the input controls for visual rendering.", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "AnyTextAsset", + }, + ], + "name": "InputAsset", + "properties": Object { + "binding": Object { + "node": Object { + "description": "The location in the data-model to store the data", + "genericArguments": undefined, + "ref": "Binding", + "title": "InputAsset.binding", + "type": "ref", + }, + "required": true, + }, + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "label": Object { + "node": Object { + "description": "Asset container for a field label.", + "genericArguments": Array [ + Object { + "genericArguments": undefined, + "ref": "AnyTextAsset", + "type": "ref", + }, + ], + "ref": "AssetWrapper", + "title": "InputAsset.label", + "type": "ref", + }, + "required": false, + }, + "metaData": Object { + "node": Object { + "additionalProperties": false, + "description": "Optional additional data", + "extends": undefined, + "properties": Object { + "beacon": Object { + "node": Object { + "description": "Additional data to beacon when this input changes", + "name": "BeaconDataType", + "or": Array [ + Object { + "title": "BeaconDataType", + "type": "string", + }, + Object { + "keyType": Object { + "type": "string", + }, + "title": "BeaconDataType", + "type": "record", + "valueType": Object { + "type": "any", + }, + }, + ], + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/beacon-plugin/dist/index.d.ts", + "title": "InputAsset.metaData.beacon", + "type": "or", + }, + "required": false, + }, + }, + "title": "InputAsset.metaData", + "type": "object", + }, + "required": false, + }, + "note": Object { + "node": Object { + "description": "Asset container for a note.", + "genericArguments": Array [ + Object { + "genericArguments": undefined, + "ref": "AnyTextAsset", + "type": "ref", + }, + ], + "ref": "AssetWrapper", + "title": "InputAsset.note", + "type": "ref", + }, + "required": false, + }, + "transformed": Object { + "node": Object { + "const": true, + "type": "boolean", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "input", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": undefined, + "extends": undefined, + "genericTokens": Array [], + "name": "TextAsset", + "properties": Object { + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "modifiers": Object { + "node": Object { + "description": "Any modifiers on the text", + "elementType": Object { + "name": "TextModifier", + "or": Array [ + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "extends": undefined, + "name": "BasicTextModifier", + "properties": Object { + "name": Object { + "node": Object { + "description": "Modifiers can be named when used in strings", + "title": "BasicTextModifier.name", + "type": "string", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The modifier type", + "title": "BasicTextModifier.type", + "type": "string", + }, + "required": true, + }, + }, + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", + "title": "BasicTextModifier", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "A modifier to turn the text into a link", + "extends": undefined, + "name": "LinkModifier", + "properties": Object { + "exp": Object { + "node": Object { + "description": "An optional expression to run before the link is opened", + "genericArguments": undefined, + "ref": "Expression", + "title": "LinkModifier.exp", + "type": "ref", + }, + "required": false, + }, + "metaData": Object { + "node": Object { + "additionalProperties": false, + "description": "metaData about the link's target", + "extends": undefined, + "properties": Object { + "'mime-type'": Object { + "node": Object { + "description": "Used to indicate an application specific resolver to use", + "title": "LinkModifier.metaData.'mime-type'", + "type": "string", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "The location of the link to load", + "title": "LinkModifier.metaData.ref", + "type": "string", + }, + "required": true, + }, + }, + "title": "LinkModifier.metaData", + "type": "object", + }, + "required": true, + }, + "type": Object { + "node": Object { + "const": "link", + "description": "The link type denotes this as a link", + "title": "LinkModifier.type", + "type": "string", + }, + "required": true, + }, + }, + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", + "title": "LinkModifier", + "type": "object", + }, + ], + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", + "title": "TextModifier", + "type": "or", + }, + "title": "TextAsset.modifiers", + "type": "array", + }, + "required": false, + }, + "transformed": Object { + "node": Object { + "const": true, + "type": "boolean", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "text", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + "value": Object { + "node": Object { + "description": "The text to display", + "title": "TextAsset.value", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "User actions can be represented in several places. +Each view typically has one or more actions that allow the user to navigate away from that view. +In addition, several asset types can have actions that apply to that asset only.", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "AnyTextAsset", + }, + ], + "name": "ActionAsset", + "properties": Object { + "accessibility": Object { + "node": Object { + "description": "An optional string that describes the action for screen-readers", + "title": "ActionAsset.accessibility", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "description": "An optional expression to execute before transitioning", + "genericArguments": undefined, + "ref": "Expression", + "title": "ActionAsset.exp", + "type": "ref", + }, + "required": false, + }, + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "label": Object { + "node": Object { + "description": "A text-like asset for the action's label", + "genericArguments": Array [ + Object { + "genericArguments": undefined, + "ref": "AnyTextAsset", + "type": "ref", + }, + ], + "ref": "AssetWrapper", + "title": "ActionAsset.label", + "type": "ref", + }, + "required": false, + }, + "metaData": Object { + "node": Object { + "additionalProperties": false, + "description": "Additional optional data to assist with the action interactions on the page", + "extends": undefined, + "properties": Object { + "beacon": Object { + "node": Object { + "description": "Additional data to beacon", + "name": "BeaconDataType", + "or": Array [ + Object { + "title": "BeaconDataType", + "type": "string", + }, + Object { + "keyType": Object { + "type": "string", + }, + "title": "BeaconDataType", + "type": "record", + "valueType": Object { + "type": "any", + }, + }, + ], + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/beacon-plugin/dist/index.d.ts", + "title": "ActionAsset.metaData.beacon", + "type": "or", + }, + "required": false, + }, + "skipValidation": Object { + "node": Object { + "description": "Force transition to the next view without checking for validation", + "title": "ActionAsset.metaData.skipValidation", + "type": "boolean", + }, + "required": false, + }, + }, + "title": "ActionAsset.metaData", + "type": "object", + }, + "required": false, + }, + "transformed": Object { + "node": Object { + "const": true, + "type": "boolean", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "action", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + "value": Object { + "node": Object { + "description": "The transition value of the action in the state machine", + "title": "ActionAsset.value", + "type": "string", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": undefined, + "extends": undefined, + "genericTokens": Array [], + "name": "InfoAsset", + "properties": Object { + "actions": Object { + "node": Object { + "description": "List of actions to show at the bottom of the page", + "elementType": Object { + "genericArguments": undefined, + "ref": "AssetWrapper", + "type": "ref", + }, + "title": "InfoAsset.actions", + "type": "array", + }, + "required": false, + }, + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "primaryInfo": Object { + "node": Object { + "description": "Primary place for info", + "genericArguments": undefined, + "ref": "AssetWrapper", + "title": "InfoAsset.primaryInfo", + "type": "ref", + }, + "required": false, + }, + "subTitle": Object { + "node": Object { + "description": "subtitle", + "genericArguments": undefined, + "ref": "AssetWrapper", + "title": "InfoAsset.subTitle", + "type": "ref", + }, + "required": false, + }, + "title": Object { + "node": Object { + "description": "The string value to show", + "genericArguments": undefined, + "ref": "AssetWrapper", + "title": "InfoAsset.title", + "type": "ref", + }, + "required": false, + }, + "transformed": Object { + "node": Object { + "const": true, + "type": "boolean", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "info", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": undefined, + "extends": undefined, + "genericTokens": Array [], + "name": "CollectionAsset", + "properties": Object { + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "label": Object { + "node": Object { + "description": "An optional label to title the collection", + "genericArguments": undefined, + "ref": "AssetWrapper", + "title": "CollectionAsset.label", + "type": "ref", + }, + "required": false, + }, + "transformed": Object { + "node": Object { + "const": true, + "type": "boolean", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "collection", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + "values": Object { + "node": Object { + "description": "The string value to show", + "elementType": Object { + "genericArguments": undefined, + "ref": "AssetWrapper", + "type": "ref", + }, + "title": "CollectionAsset.values", + "type": "array", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "An asset is the smallest unit of user interaction in a player view", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "string", + }, + "default": Object { + "type": "string", + }, + "symbol": "T", + }, + ], + "name": "Asset", + "properties": Object { + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "type": Object { + "node": Object { + "description": "The asset type determines the semantics of how a user interacts with a page", + "genericArguments": undefined, + "ref": "T", + "title": "Asset.type", + "type": "ref", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "An asset that contains a Binding.", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "string", + }, + "default": Object { + "type": "string", + }, + "symbol": "T", + }, + ], + "name": "AssetBinding", + "properties": Object { + "binding": Object { + "node": Object { + "description": "A binding that points to somewhere in the data model", + "genericArguments": undefined, + "ref": "Binding", + "title": "AssetBinding.binding", + "type": "ref", + }, + "required": true, + }, + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "type": Object { + "node": Object { + "description": "The asset type determines the semantics of how a user interacts with a page", + "genericArguments": undefined, + "ref": "T", + "title": "Asset.type", + "type": "ref", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + Object { + "description": "A switch can replace an asset with the applicable case on first render", + "elementType": Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Switch", + "source": "src/index.ts", + "title": "Switch", + "type": "array", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "An object that contains an asset", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "AssetWrapper", + "properties": Object { + "asset": Object { + "node": Object { + "description": "An asset instance", + "genericArguments": undefined, + "ref": "T", + "title": "AssetWrapper.asset", + "type": "ref", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "AssetWrapper", + "type": "object", + }, + Object { + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "AssetWrapperOrSwitch", + "or": Array [ + Object { + "and": Array [ + Object { + "genericArguments": Array [ + Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + ], + "ref": "AssetWrapper", + "type": "ref", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "properties": Object { + "dynamicSwitch": Object { + "node": Object { + "description": "The dynamicSwitch property can't exist at the same time as 'asset'", + "title": "dynamicSwitch", + "type": "never", + }, + "required": false, + }, + "staticSwitch": Object { + "node": Object { + "description": "The staticSwitch property can't exist at the same time as 'asset'", + "title": "staticSwitch", + "type": "never", + }, + "required": false, + }, + }, + "type": "object", + }, + ], + "type": "and", + }, + Object { + "and": Array [ + Object { + "additionalProperties": false, + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "StaticSwitch", + "properties": Object { + "staticSwitch": Object { + "node": Object { + "description": "A static switch only evaluates the applicable base on first render of the view", + "elementType": Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Switch", + "source": "src/index.ts", + "title": "StaticSwitch.staticSwitch", + "type": "array", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "StaticSwitch", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "properties": Object { + "asset": Object { + "node": Object { + "description": "The staticSwitch property can't exist at the same time as 'asset'", + "title": "asset", + "type": "never", + }, + "required": false, + }, + "dynamicSwitch": Object { + "node": Object { + "description": "The staticSwitch property can't exist at the same time as 'dynamicSwitch'", + "title": "dynamicSwitch", + "type": "never", + }, + "required": false, + }, + }, + "type": "object", + }, + ], + "type": "and", + }, + Object { + "and": Array [ + Object { + "additionalProperties": false, + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "DynamicSwitch", + "properties": Object { + "dynamicSwitch": Object { + "node": Object { + "description": "A dynamic switch re-evaluates the applicable case as data changes", + "elementType": Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Switch", + "source": "src/index.ts", + "title": "DynamicSwitch.dynamicSwitch", + "type": "array", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "DynamicSwitch", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "properties": Object { + "asset": Object { + "node": Object { + "description": "The dynamicSwitch property can't exist at the same time as 'asset'", + "title": "asset", + "type": "never", + }, + "required": false, + }, + "staticSwitch": Object { + "node": Object { + "description": "The dynamicSwitch property can't exist at the same time as 'staticSwitch'", + "title": "staticSwitch", + "type": "never", + }, + "required": false, + }, + }, + "type": "object", + }, + ], + "type": "and", + }, + ], + "source": "src/index.ts", + "title": "AssetWrapperOrSwitch", + "type": "or", + }, + Object { + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "AssetSwitch", + "or": Array [ + Object { + "additionalProperties": false, + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "StaticSwitch", + "properties": Object { + "staticSwitch": Object { + "node": Object { + "description": "A static switch only evaluates the applicable base on first render of the view", + "elementType": Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Switch", + "source": "src/index.ts", + "title": "StaticSwitch.staticSwitch", + "type": "array", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "StaticSwitch", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "DynamicSwitch", + "properties": Object { + "dynamicSwitch": Object { + "node": Object { + "description": "A dynamic switch re-evaluates the applicable case as data changes", + "elementType": Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Switch", + "source": "src/index.ts", + "title": "DynamicSwitch.dynamicSwitch", + "type": "array", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "DynamicSwitch", + "type": "object", + }, + ], + "source": "src/index.ts", + "title": "AssetSwitch", + "type": "or", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "StaticSwitch", + "properties": Object { + "staticSwitch": Object { + "node": Object { + "description": "A static switch only evaluates the applicable base on first render of the view", + "elementType": Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Switch", + "source": "src/index.ts", + "title": "StaticSwitch.staticSwitch", + "type": "array", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "StaticSwitch", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "DynamicSwitch", + "properties": Object { + "dynamicSwitch": Object { + "node": Object { + "description": "A dynamic switch re-evaluates the applicable case as data changes", + "elementType": Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Switch", + "source": "src/index.ts", + "title": "DynamicSwitch.dynamicSwitch", + "type": "array", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "DynamicSwitch", + "type": "object", + }, + Object { + "description": "Expressions are a specialized way of executing code. +If the expression is a composite, the last expression executed is the return value", + "name": "Expression", + "or": Array [ + Object { + "title": "Expression", + "type": "string", + }, + Object { + "elementType": Object { + "title": "Expression.[]", + "type": "string", + }, + "title": "Expression.[]", + "type": "array", + }, + ], + "source": "src/index.ts", + "title": "Expression", + "type": "or", + }, + Object { + "format": "@[.*]@", + "name": "ExpressionRef", + "source": "src/index.ts", + "title": "ExpressionRef", + "type": "template", + }, + Object { + "description": "Bindings describe locations in the data model.", + "name": "Binding", + "source": "src/index.ts", + "title": "Binding", + "type": "string", + }, + Object { + "format": "{{.*}}", + "name": "BindingRef", + "source": "src/index.ts", + "title": "BindingRef", + "type": "template", + }, + Object { + "description": "The data-model is the location that all user data is stored", + "keyType": Object { + "type": "any", + }, + "name": "DataModel", + "source": "src/index.ts", + "title": "DataModel", + "type": "record", + "valueType": Object { + "type": "unknown", + }, + }, + Object { + "and": Array [ + Object { + "additionalProperties": false, + "extends": undefined, + "properties": Object { + "BEGIN": Object { + "node": Object { + "description": "The name of the Flow to begin on", + "title": "BEGIN", + "type": "string", + }, + "required": true, + }, + }, + "type": "object", + }, + Object { + "keyType": Object { + "type": "string", + }, + "type": "record", + "valueType": Object { + "or": Array [ + Object { + "type": "string", + }, + Object { + "additionalProperties": Object { + "or": Array [ + Object { + "type": "undefined", + }, + Object { + "type": "string", + }, + Object { + "genericArguments": undefined, + "ref": "Expression", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + Object { + "name": "NavigationFlowState", + "or": Array [ + Object { + "additionalProperties": false, + "description": "A state representing a view", + "extends": undefined, + "name": "NavigationFlowViewState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "attributes": Object { + "node": Object { + "additionalProperties": Object { + "type": "any", + }, + "description": "View meta-properties", + "extends": undefined, + "properties": Object {}, + "title": "NavigationFlowViewState.attributes", + "type": "object", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "An id corresponding to a view from the 'views' array", + "title": "NavigationFlowViewState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "VIEW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowViewState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "An END state of the flow.", + "extends": undefined, + "name": "NavigationFlowEndState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "outcome": Object { + "node": Object { + "description": "A description of _how_ the flow ended. +If this is a flow started from another flow, the outcome determines the flow transition", + "title": "NavigationFlowEndState.outcome", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "END", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowEndState", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "name": "NavigationFlowFlowState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference to a FLOW id state to run", + "title": "NavigationFlowFlowState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "FLOW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowFlowState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "Action states execute an expression to determine the next state to transition to", + "extends": undefined, + "name": "NavigationFlowActionState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "description": "An expression to execute. +The return value determines the transition to take", + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlowActionState.exp", + "type": "ref", + }, + "required": true, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "state_type": Object { + "node": Object { + "const": "ACTION", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowActionState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "External Flow states represent states in the FSM that can't be resolved internally in Player. +The flow will wait for the embedded application to manage moving to the next state via a transition", + "extends": undefined, + "name": "NavigationFlowExternalState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference for this external state", + "title": "NavigationFlowExternalState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "EXTERNAL", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowExternalState", + "type": "object", + }, + ], + "source": "src/index.ts", + "title": "NavigationFlowState", + "type": "or", + }, + ], + "type": "or", + }, + "description": "A state machine in the navigation", + "extends": undefined, + "name": "NavigationFlow", + "properties": Object { + "onEnd": Object { + "node": Object { + "description": "An optional expression to run when this Flow ends", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlow.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationFlow.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this Flow starts", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlow.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationFlow.onStart", + "type": "or", + }, + "required": false, + }, + "startState": Object { + "node": Object { + "description": "The first state to kick off the state machine", + "title": "NavigationFlow.startState", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlow", + "type": "object", + }, + ], + "type": "or", + }, + }, + ], + "description": "The navigation section of the flow describes a State Machine for the user.", + "name": "Navigation", + "source": "src/index.ts", + "title": "Navigation", + "type": "and", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + Object { + "additionalProperties": Object { + "or": Array [ + Object { + "type": "undefined", + }, + Object { + "type": "string", + }, + Object { + "genericArguments": undefined, + "ref": "Expression", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + Object { + "name": "NavigationFlowState", + "or": Array [ + Object { + "additionalProperties": false, + "description": "A state representing a view", + "extends": undefined, + "name": "NavigationFlowViewState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "attributes": Object { + "node": Object { + "additionalProperties": Object { + "type": "any", + }, + "description": "View meta-properties", + "extends": undefined, + "properties": Object {}, + "title": "NavigationFlowViewState.attributes", + "type": "object", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "An id corresponding to a view from the 'views' array", + "title": "NavigationFlowViewState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "VIEW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowViewState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "An END state of the flow.", + "extends": undefined, + "name": "NavigationFlowEndState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "outcome": Object { + "node": Object { + "description": "A description of _how_ the flow ended. +If this is a flow started from another flow, the outcome determines the flow transition", + "title": "NavigationFlowEndState.outcome", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "END", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowEndState", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "name": "NavigationFlowFlowState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference to a FLOW id state to run", + "title": "NavigationFlowFlowState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "FLOW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowFlowState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "Action states execute an expression to determine the next state to transition to", + "extends": undefined, + "name": "NavigationFlowActionState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "description": "An expression to execute. +The return value determines the transition to take", + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlowActionState.exp", + "type": "ref", + }, + "required": true, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "state_type": Object { + "node": Object { + "const": "ACTION", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowActionState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "External Flow states represent states in the FSM that can't be resolved internally in Player. +The flow will wait for the embedded application to manage moving to the next state via a transition", + "extends": undefined, + "name": "NavigationFlowExternalState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference for this external state", + "title": "NavigationFlowExternalState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "EXTERNAL", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowExternalState", + "type": "object", + }, + ], + "source": "src/index.ts", + "title": "NavigationFlowState", + "type": "or", + }, + ], + "type": "or", + }, + "description": "A state machine in the navigation", + "extends": undefined, + "name": "NavigationFlow", + "properties": Object { + "onEnd": Object { + "node": Object { + "description": "An optional expression to run when this Flow ends", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlow.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationFlow.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this Flow starts", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlow.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationFlow.onStart", + "type": "or", + }, + "required": false, + }, + "startState": Object { + "node": Object { + "description": "The first state to kick off the state machine", + "title": "NavigationFlow.startState", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlow", + "type": "object", + }, + Object { + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransition", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + Object { + "additionalProperties": false, + "description": "The base representation of a state within a Flow", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "string", + }, + "default": Object { + "type": "any", + }, + "symbol": "T", + }, + ], + "name": "NavigationBaseState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "check": Object { + "left": Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + "right": Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + }, + "description": "TS gets really confused with both the ActionState and the onStart state both declaring the \`exp\` property +So this explicity says there should never be an exp prop on a state node that's not of type 'ACTION'", + "title": "NavigationBaseState.exp", + "type": "conditional", + "value": Object { + "false": Object { + "type": "never", + }, + "true": Object { + "genericArguments": undefined, + "ref": "Expression", + "type": "ref", + }, + }, + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "state_type": Object { + "node": Object { + "description": "A property to determine the type of state this is", + "genericArguments": undefined, + "ref": "T", + "title": "NavigationBaseState.state_type", + "type": "ref", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationBaseState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "A generic state that can transition to another state", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "string", + }, + "default": Object { + "type": "any", + }, + "symbol": "T", + }, + ], + "name": "NavigationFlowTransitionableState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "check": Object { + "left": Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + "right": Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + }, + "description": "TS gets really confused with both the ActionState and the onStart state both declaring the \`exp\` property +So this explicity says there should never be an exp prop on a state node that's not of type 'ACTION'", + "title": "NavigationBaseState.exp", + "type": "conditional", + "value": Object { + "false": Object { + "type": "never", + }, + "true": Object { + "genericArguments": undefined, + "ref": "Expression", + "type": "ref", + }, + }, + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "state_type": Object { + "node": Object { + "description": "A property to determine the type of state this is", + "genericArguments": undefined, + "ref": "T", + "title": "NavigationBaseState.state_type", + "type": "ref", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "A state representing a view", + "extends": undefined, + "name": "NavigationFlowViewState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "attributes": Object { + "node": Object { + "additionalProperties": Object { + "type": "any", + }, + "description": "View meta-properties", + "extends": undefined, + "properties": Object {}, + "title": "NavigationFlowViewState.attributes", + "type": "object", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "An id corresponding to a view from the 'views' array", + "title": "NavigationFlowViewState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "VIEW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowViewState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "An END state of the flow.", + "extends": undefined, + "name": "NavigationFlowEndState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "outcome": Object { + "node": Object { + "description": "A description of _how_ the flow ended. +If this is a flow started from another flow, the outcome determines the flow transition", + "title": "NavigationFlowEndState.outcome", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "END", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowEndState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "Action states execute an expression to determine the next state to transition to", + "extends": undefined, + "name": "NavigationFlowActionState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "description": "An expression to execute. +The return value determines the transition to take", + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlowActionState.exp", + "type": "ref", + }, + "required": true, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "state_type": Object { + "node": Object { + "const": "ACTION", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowActionState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "External Flow states represent states in the FSM that can't be resolved internally in Player. +The flow will wait for the embedded application to manage moving to the next state via a transition", + "extends": undefined, + "name": "NavigationFlowExternalState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference for this external state", + "title": "NavigationFlowExternalState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "EXTERNAL", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowExternalState", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "name": "NavigationFlowFlowState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference to a FLOW id state to run", + "title": "NavigationFlowFlowState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "FLOW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowFlowState", + "type": "object", + }, + Object { + "name": "NavigationFlowState", + "or": Array [ + Object { + "additionalProperties": false, + "description": "A state representing a view", + "extends": undefined, + "name": "NavigationFlowViewState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "attributes": Object { + "node": Object { + "additionalProperties": Object { + "type": "any", + }, + "description": "View meta-properties", + "extends": undefined, + "properties": Object {}, + "title": "NavigationFlowViewState.attributes", + "type": "object", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "An id corresponding to a view from the 'views' array", + "title": "NavigationFlowViewState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "VIEW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowViewState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "An END state of the flow.", + "extends": undefined, + "name": "NavigationFlowEndState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "outcome": Object { + "node": Object { + "description": "A description of _how_ the flow ended. +If this is a flow started from another flow, the outcome determines the flow transition", + "title": "NavigationFlowEndState.outcome", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "END", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowEndState", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "name": "NavigationFlowFlowState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference to a FLOW id state to run", + "title": "NavigationFlowFlowState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "FLOW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowFlowState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "Action states execute an expression to determine the next state to transition to", + "extends": undefined, + "name": "NavigationFlowActionState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "description": "An expression to execute. +The return value determines the transition to take", + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlowActionState.exp", + "type": "ref", + }, + "required": true, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "state_type": Object { + "node": Object { + "const": "ACTION", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowActionState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "External Flow states represent states in the FSM that can't be resolved internally in Player. +The flow will wait for the embedded application to manage moving to the next state via a transition", + "extends": undefined, + "name": "NavigationFlowExternalState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference for this external state", + "title": "NavigationFlowExternalState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "EXTERNAL", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowExternalState", + "type": "object", + }, + ], + "source": "src/index.ts", + "title": "NavigationFlowState", + "type": "or", + }, + Object { + "additionalProperties": false, + "description": "The data at the end of a flow", + "extends": undefined, + "name": "FlowResult", + "properties": Object { + "data": Object { + "node": Object { + "description": "The serialized data-model", + "title": "FlowResult.data", + "type": "any", + }, + "required": false, + }, + "endState": Object { + "node": Object { + "additionalProperties": false, + "description": "The outcome describes _how_ the flow ended (forwards, backwards, etc)", + "extends": undefined, + "name": "NavigationFlowEndState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "outcome": Object { + "node": Object { + "description": "A description of _how_ the flow ended. +If this is a flow started from another flow, the outcome determines the flow transition", + "title": "NavigationFlowEndState.outcome", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "END", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "FlowResult.endState", + "type": "object", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "FlowResult", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "Any object that contains 1 or more templates", + "extends": undefined, + "name": "Templatable", + "properties": Object { + "template": Object { + "node": Object { + "description": "A list of templates to process for this node", + "elementType": Object { + "additionalProperties": false, + "description": "A template describes a mapping from a data array -> array of objects", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "any", + }, + "default": Object { + "type": "unknown", + }, + "symbol": "ValueType", + }, + Object { + "constraints": Object { + "type": "string", + }, + "default": Object { + "type": "string", + }, + "symbol": "Key", + }, + ], + "name": "Template", + "properties": Object { + "data": Object { + "node": Object { + "description": "A pointer to the data-model containing an array of elements to map over", + "genericArguments": undefined, + "ref": "Binding", + "title": "Template.data", + "type": "ref", + }, + "required": true, + }, + "dynamic": Object { + "node": Object { + "description": "should the template be recomputed when data changes", + "title": "Template.dynamic", + "type": "boolean", + }, + "required": false, + }, + "output": Object { + "node": Object { + "description": "A property on the parent object to store the new map under. +If it already exists, values are appended to the end.", + "genericArguments": undefined, + "ref": "Key", + "title": "Template.output", + "type": "ref", + }, + "required": true, + }, + "value": Object { + "node": Object { + "description": "The template to iterate over using each value in the supplied template data. +Any reference to _index_ is replaced with the current iteration index.", + "genericArguments": undefined, + "ref": "ValueType", + "title": "Template.value", + "type": "ref", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Template", + "type": "object", + }, + "title": "Templatable.template", + "type": "array", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "Templatable", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "A template describes a mapping from a data array -> array of objects", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "any", + }, + "default": Object { + "type": "unknown", + }, + "symbol": "ValueType", + }, + Object { + "constraints": Object { + "type": "string", + }, + "default": Object { + "type": "string", + }, + "symbol": "Key", + }, + ], + "name": "Template", + "properties": Object { + "data": Object { + "node": Object { + "description": "A pointer to the data-model containing an array of elements to map over", + "genericArguments": undefined, + "ref": "Binding", + "title": "Template.data", + "type": "ref", + }, + "required": true, + }, + "dynamic": Object { + "node": Object { + "description": "should the template be recomputed when data changes", + "title": "Template.dynamic", + "type": "boolean", + }, + "required": false, + }, + "output": Object { + "node": Object { + "description": "A property on the parent object to store the new map under. +If it already exists, values are appended to the end.", + "genericArguments": undefined, + "ref": "Key", + "title": "Template.output", + "type": "ref", + }, + "required": true, + }, + "value": Object { + "node": Object { + "description": "The template to iterate over using each value in the supplied template data. +Any reference to _index_ is replaced with the current iteration index.", + "genericArguments": undefined, + "ref": "ValueType", + "title": "Template.value", + "type": "ref", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Template", + "type": "object", + }, + Object { + "check": Object { + "left": Object { + "type": "unknown", + }, + "right": Object { + "type": "unknown", + }, + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "View", + "source": "src/index.ts", + "title": "View", + "type": "conditional", + "value": Object { + "false": Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + "true": Object { + "and": Array [ + Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "properties": Object { + "validation": Object { + "node": Object { + "description": "Each view can optionally supply a list of validations to run against a particular view", + "elementType": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "extends": undefined, + "name": "CrossfieldReference", + "properties": Object { + "dataTarget": Object { + "node": Object { + "description": "Cross-field references and validation must run against the default (deformatted) value", + "title": "CrossfieldReference.dataTarget", + "type": "never", + }, + "required": false, + }, + "displayTarget": Object { + "node": Object { + "description": "Where the error should be displayed", + "name": "DisplayTarget", + "or": Array [ + Object { + "const": "page", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "section", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "field", + "title": "DisplayTarget", + "type": "string", + }, + ], + "title": "Reference.displayTarget", + "type": "or", + }, + "required": false, + }, + "message": Object { + "node": Object { + "description": "An optional means of overriding the default message if the validation is triggered", + "title": "Reference.message", + "type": "string", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "The binding to associate this validation with", + "genericArguments": undefined, + "ref": "Binding", + "title": "CrossfieldReference.ref", + "type": "ref", + }, + "required": false, + }, + "severity": Object { + "node": Object { + "description": "An optional means of overriding the default severity of the validation if triggered", + "name": "Severity", + "or": Array [ + Object { + "const": "error", + "title": "Severity", + "type": "string", + }, + Object { + "const": "warning", + "title": "Severity", + "type": "string", + }, + ], + "title": "Reference.severity", + "type": "or", + }, + "required": false, + }, + "trigger": Object { + "node": Object { + "description": "When to run this particular validation", + "name": "Trigger", + "or": Array [ + Object { + "const": "navigation", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "change", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "load", + "title": "Trigger", + "type": "string", + }, + ], + "title": "Reference.trigger", + "type": "or", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The name of the referenced validation type +This will be used to lookup the proper handler", + "title": "Reference.type", + "type": "string", + }, + "required": true, + }, + }, + "title": "CrossfieldReference", + "type": "object", + }, + "title": "validation", + "type": "array", + }, + "required": false, + }, + }, + "type": "object", + }, + ], + "type": "and", + }, + }, + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "The JSON payload for running Player", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Flow", + "properties": Object { + "data": Object { + "node": Object { + "description": "Any initial data that the flow can use", + "keyType": Object { + "type": "any", + }, + "name": "DataModel", + "source": "src/index.ts", + "title": "Flow.data", + "type": "record", + "valueType": Object { + "type": "unknown", + }, + }, + "required": false, + }, + "id": Object { + "node": Object { + "description": "A unique identifier for the flow", + "title": "Flow.id", + "type": "string", + }, + "required": true, + }, + "navigation": Object { + "node": Object { + "and": Array [ + Object { + "additionalProperties": false, + "extends": undefined, + "properties": Object { + "BEGIN": Object { + "node": Object { + "description": "The name of the Flow to begin on", + "title": "BEGIN", + "type": "string", + }, + "required": true, + }, + }, + "type": "object", + }, + Object { + "keyType": Object { + "type": "string", + }, + "type": "record", + "valueType": Object { + "or": Array [ + Object { + "type": "string", + }, + Object { + "additionalProperties": Object { + "or": Array [ + Object { + "type": "undefined", + }, + Object { + "type": "string", + }, + Object { + "genericArguments": undefined, + "ref": "Expression", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + Object { + "name": "NavigationFlowState", + "or": Array [ + Object { + "additionalProperties": false, + "description": "A state representing a view", + "extends": undefined, + "name": "NavigationFlowViewState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "attributes": Object { + "node": Object { + "additionalProperties": Object { + "type": "any", + }, + "description": "View meta-properties", + "extends": undefined, + "properties": Object {}, + "title": "NavigationFlowViewState.attributes", + "type": "object", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "An id corresponding to a view from the 'views' array", + "title": "NavigationFlowViewState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "VIEW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowViewState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "An END state of the flow.", + "extends": undefined, + "name": "NavigationFlowEndState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "outcome": Object { + "node": Object { + "description": "A description of _how_ the flow ended. +If this is a flow started from another flow, the outcome determines the flow transition", + "title": "NavigationFlowEndState.outcome", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "END", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowEndState", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "name": "NavigationFlowFlowState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference to a FLOW id state to run", + "title": "NavigationFlowFlowState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "FLOW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowFlowState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "Action states execute an expression to determine the next state to transition to", + "extends": undefined, + "name": "NavigationFlowActionState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "description": "An expression to execute. +The return value determines the transition to take", + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlowActionState.exp", + "type": "ref", + }, + "required": true, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "state_type": Object { + "node": Object { + "const": "ACTION", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowActionState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "External Flow states represent states in the FSM that can't be resolved internally in Player. +The flow will wait for the embedded application to manage moving to the next state via a transition", + "extends": undefined, + "name": "NavigationFlowExternalState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference for this external state", + "title": "NavigationFlowExternalState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "EXTERNAL", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowExternalState", + "type": "object", + }, + ], + "source": "src/index.ts", + "title": "NavigationFlowState", + "type": "or", + }, + ], + "type": "or", + }, + "description": "A state machine in the navigation", + "extends": undefined, + "name": "NavigationFlow", + "properties": Object { + "onEnd": Object { + "node": Object { + "description": "An optional expression to run when this Flow ends", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlow.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationFlow.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this Flow starts", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlow.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationFlow.onStart", + "type": "or", + }, + "required": false, + }, + "startState": Object { + "node": Object { + "description": "The first state to kick off the state machine", + "title": "NavigationFlow.startState", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlow", + "type": "object", + }, + ], + "type": "or", + }, + }, + ], + "description": "A state machine to drive a user through the experience", + "name": "Navigation", + "source": "src/index.ts", + "title": "Flow.navigation", + "type": "and", + }, + "required": true, + }, + "schema": Object { + "node": Object { + "additionalProperties": Object { + "additionalProperties": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "Each prop in the object can have a specific DataType", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "any", + }, + "default": Object { + "type": "unknown", + }, + "symbol": "T", + }, + ], + "name": "DataType", + "properties": Object { + "default": Object { + "node": Object { + "description": "A default value for this property. +Any reads for this property will result in this default value being written to the model.", + "genericArguments": undefined, + "ref": "T", + "title": "DataType.default", + "type": "ref", + }, + "required": false, + }, + "format": Object { + "node": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "A reference to a specific data format to use. +If none is specified, will fallback to that of the base type", + "extends": undefined, + "name": "Reference", + "properties": Object { + "type": Object { + "node": Object { + "description": "The name of the formatter (and de-formatter) to use", + "title": "Reference.type", + "type": "string", + }, + "required": true, + }, + }, + "title": "DataType.format", + "type": "object", + }, + "required": false, + }, + "isArray": Object { + "node": Object { + "description": "The referenced object represents an array rather than an object", + "title": "DataType.isArray", + "type": "boolean", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The reference of the base type to use", + "title": "DataType.type", + "type": "string", + }, + "required": true, + }, + "validation": Object { + "node": Object { + "description": "Any additional validations that are associated with this property +These will add to any base validations associated with the \\"type\\"", + "elementType": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "A reference to a validation object", + "extends": undefined, + "name": "Reference", + "properties": Object { + "dataTarget": Object { + "node": Object { + "description": "Each validation is passed the value of the data to run it's validation against. +By default, this is the value stored in the data-model (deformatted). +In the off chance you'd like this validator to run against the formatted value (the one the user sees), set this option", + "or": Array [ + Object { + "const": "formatted", + "title": "Reference.dataTarget", + "type": "string", + }, + Object { + "const": "deformatted", + "title": "Reference.dataTarget", + "type": "string", + }, + ], + "title": "Reference.dataTarget", + "type": "or", + }, + "required": false, + }, + "displayTarget": Object { + "node": Object { + "description": "Where the error should be displayed", + "name": "DisplayTarget", + "or": Array [ + Object { + "const": "page", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "section", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "field", + "title": "DisplayTarget", + "type": "string", + }, + ], + "title": "Reference.displayTarget", + "type": "or", + }, + "required": false, + }, + "message": Object { + "node": Object { + "description": "An optional means of overriding the default message if the validation is triggered", + "title": "Reference.message", + "type": "string", + }, + "required": false, + }, + "severity": Object { + "node": Object { + "description": "An optional means of overriding the default severity of the validation if triggered", + "name": "Severity", + "or": Array [ + Object { + "const": "error", + "title": "Severity", + "type": "string", + }, + Object { + "const": "warning", + "title": "Severity", + "type": "string", + }, + ], + "title": "Reference.severity", + "type": "or", + }, + "required": false, + }, + "trigger": Object { + "node": Object { + "description": "When to run this particular validation", + "name": "Trigger", + "or": Array [ + Object { + "const": "navigation", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "change", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "load", + "title": "Trigger", + "type": "string", + }, + ], + "title": "Reference.trigger", + "type": "or", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The name of the referenced validation type +This will be used to lookup the proper handler", + "title": "Reference.type", + "type": "string", + }, + "required": true, + }, + }, + "title": "Reference", + "type": "object", + }, + "title": "DataType.validation", + "type": "array", + }, + "required": false, + }, + }, + "title": "DataType", + "type": "object", + }, + "description": "A Node describes a specific object in the tree", + "extends": undefined, + "name": "Node", + "properties": Object {}, + "title": "Node", + "type": "object", + }, + "description": "The schema for the supplied (or referenced data). +This is used for validation, formatting, etc", + "extends": undefined, + "name": "Schema", + "properties": Object { + "ROOT": Object { + "node": Object { + "additionalProperties": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "Each prop in the object can have a specific DataType", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "any", + }, + "default": Object { + "type": "unknown", + }, + "symbol": "T", + }, + ], + "name": "DataType", + "properties": Object { + "default": Object { + "node": Object { + "description": "A default value for this property. +Any reads for this property will result in this default value being written to the model.", + "genericArguments": undefined, + "ref": "T", + "title": "DataType.default", + "type": "ref", + }, + "required": false, + }, + "format": Object { + "node": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "A reference to a specific data format to use. +If none is specified, will fallback to that of the base type", + "extends": undefined, + "name": "Reference", + "properties": Object { + "type": Object { + "node": Object { + "description": "The name of the formatter (and de-formatter) to use", + "title": "Reference.type", + "type": "string", + }, + "required": true, + }, + }, + "title": "DataType.format", + "type": "object", + }, + "required": false, + }, + "isArray": Object { + "node": Object { + "description": "The referenced object represents an array rather than an object", + "title": "DataType.isArray", + "type": "boolean", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The reference of the base type to use", + "title": "DataType.type", + "type": "string", + }, + "required": true, + }, + "validation": Object { + "node": Object { + "description": "Any additional validations that are associated with this property +These will add to any base validations associated with the \\"type\\"", + "elementType": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "A reference to a validation object", + "extends": undefined, + "name": "Reference", + "properties": Object { + "dataTarget": Object { + "node": Object { + "description": "Each validation is passed the value of the data to run it's validation against. +By default, this is the value stored in the data-model (deformatted). +In the off chance you'd like this validator to run against the formatted value (the one the user sees), set this option", + "or": Array [ + Object { + "const": "formatted", + "title": "Reference.dataTarget", + "type": "string", + }, + Object { + "const": "deformatted", + "title": "Reference.dataTarget", + "type": "string", + }, + ], + "title": "Reference.dataTarget", + "type": "or", + }, + "required": false, + }, + "displayTarget": Object { + "node": Object { + "description": "Where the error should be displayed", + "name": "DisplayTarget", + "or": Array [ + Object { + "const": "page", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "section", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "field", + "title": "DisplayTarget", + "type": "string", + }, + ], + "title": "Reference.displayTarget", + "type": "or", + }, + "required": false, + }, + "message": Object { + "node": Object { + "description": "An optional means of overriding the default message if the validation is triggered", + "title": "Reference.message", + "type": "string", + }, + "required": false, + }, + "severity": Object { + "node": Object { + "description": "An optional means of overriding the default severity of the validation if triggered", + "name": "Severity", + "or": Array [ + Object { + "const": "error", + "title": "Severity", + "type": "string", + }, + Object { + "const": "warning", + "title": "Severity", + "type": "string", + }, + ], + "title": "Reference.severity", + "type": "or", + }, + "required": false, + }, + "trigger": Object { + "node": Object { + "description": "When to run this particular validation", + "name": "Trigger", + "or": Array [ + Object { + "const": "navigation", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "change", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "load", + "title": "Trigger", + "type": "string", + }, + ], + "title": "Reference.trigger", + "type": "or", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The name of the referenced validation type +This will be used to lookup the proper handler", + "title": "Reference.type", + "type": "string", + }, + "required": true, + }, + }, + "title": "Reference", + "type": "object", + }, + "title": "DataType.validation", + "type": "array", + }, + "required": false, + }, + }, + "title": "DataType", + "type": "object", + }, + "description": "The ROOT object is the top level object to use", + "extends": undefined, + "name": "Node", + "properties": Object {}, + "title": "Schema.ROOT", + "type": "object", + }, + "required": true, + }, + }, + "title": "Flow.schema", + "type": "object", + }, + "required": false, + }, + "views": Object { + "node": Object { + "description": "A list of views (each with an ID) that can be shown to a user", + "elementType": Object { + "check": Object { + "left": Object { + "type": "unknown", + }, + "right": Object { + "type": "unknown", + }, + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "View", + "source": "src/index.ts", + "title": "View", + "type": "conditional", + "value": Object { + "false": Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + "true": Object { + "and": Array [ + Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "properties": Object { + "validation": Object { + "node": Object { + "description": "Each view can optionally supply a list of validations to run against a particular view", + "elementType": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "extends": undefined, + "name": "CrossfieldReference", + "properties": Object { + "dataTarget": Object { + "node": Object { + "description": "Cross-field references and validation must run against the default (deformatted) value", + "title": "CrossfieldReference.dataTarget", + "type": "never", + }, + "required": false, + }, + "displayTarget": Object { + "node": Object { + "description": "Where the error should be displayed", + "name": "DisplayTarget", + "or": Array [ + Object { + "const": "page", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "section", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "field", + "title": "DisplayTarget", + "type": "string", + }, + ], + "title": "Reference.displayTarget", + "type": "or", + }, + "required": false, + }, + "message": Object { + "node": Object { + "description": "An optional means of overriding the default message if the validation is triggered", + "title": "Reference.message", + "type": "string", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "The binding to associate this validation with", + "genericArguments": undefined, + "ref": "Binding", + "title": "CrossfieldReference.ref", + "type": "ref", + }, + "required": false, + }, + "severity": Object { + "node": Object { + "description": "An optional means of overriding the default severity of the validation if triggered", + "name": "Severity", + "or": Array [ + Object { + "const": "error", + "title": "Severity", + "type": "string", + }, + Object { + "const": "warning", + "title": "Severity", + "type": "string", + }, + ], + "title": "Reference.severity", + "type": "or", + }, + "required": false, + }, + "trigger": Object { + "node": Object { + "description": "When to run this particular validation", + "name": "Trigger", + "or": Array [ + Object { + "const": "navigation", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "change", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "load", + "title": "Trigger", + "type": "string", + }, + ], + "title": "Reference.trigger", + "type": "or", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The name of the referenced validation type +This will be used to lookup the proper handler", + "title": "Reference.type", + "type": "string", + }, + "required": true, + }, + }, + "title": "CrossfieldReference", + "type": "object", + }, + "title": "validation", + "type": "array", + }, + "required": false, + }, + }, + "type": "object", + }, + ], + "type": "and", + }, + }, + }, + "title": "Flow.views", + "type": "array", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "Flow", + "type": "object", + }, +] +`; + +exports[`Export Test Exports Typescript types 1`] = ` +Array [ + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "This is the most generic way of gathering data. The input is bound to a data model using the 'binding' property. +Players can get field type information from the 'schema' definition, thus to decide the input controls for visual rendering.", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "AnyTextAsset", + }, + ], + "name": "InputAsset", + "properties": Object { + "binding": Object { + "node": Object { + "description": "The location in the data-model to store the data", + "genericArguments": undefined, + "ref": "Binding", + "title": "InputAsset.binding", + "type": "ref", + }, + "required": true, + }, + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "label": Object { + "node": Object { + "description": "Asset container for a field label.", + "genericArguments": Array [ + Object { + "genericArguments": undefined, + "ref": "AnyTextAsset", + "type": "ref", + }, + ], + "ref": "AssetWrapper", + "title": "InputAsset.label", + "type": "ref", + }, + "required": false, + }, + "metaData": Object { + "node": Object { + "additionalProperties": false, + "description": "Optional additional data", + "extends": undefined, + "properties": Object { + "beacon": Object { + "node": Object { + "description": "Additional data to beacon when this input changes", + "name": "BeaconDataType", + "or": Array [ + Object { + "title": "BeaconDataType", + "type": "string", + }, + Object { + "keyType": Object { + "type": "string", + }, + "title": "BeaconDataType", + "type": "record", + "valueType": Object { + "type": "any", + }, + }, + ], + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/beacon-plugin/dist/index.d.ts", + "title": "InputAsset.metaData.beacon", + "type": "or", + }, + "required": false, + }, + }, + "title": "InputAsset.metaData", + "type": "object", + }, + "required": false, + }, + "note": Object { + "node": Object { + "description": "Asset container for a note.", + "genericArguments": Array [ + Object { + "genericArguments": undefined, + "ref": "AnyTextAsset", + "type": "ref", + }, + ], + "ref": "AssetWrapper", + "title": "InputAsset.note", + "type": "ref", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "input", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": undefined, + "extends": undefined, + "genericTokens": Array [], + "name": "TextAsset", + "properties": Object { + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "modifiers": Object { + "node": Object { + "description": "Any modifiers on the text", + "elementType": Object { + "name": "TextModifier", + "or": Array [ + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "extends": undefined, + "name": "BasicTextModifier", + "properties": Object { + "name": Object { + "node": Object { + "description": "Modifiers can be named when used in strings", + "title": "BasicTextModifier.name", + "type": "string", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The modifier type", + "title": "BasicTextModifier.type", + "type": "string", + }, + "required": true, + }, + }, + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", + "title": "BasicTextModifier", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "A modifier to turn the text into a link", + "extends": undefined, + "name": "LinkModifier", + "properties": Object { + "exp": Object { + "node": Object { + "description": "An optional expression to run before the link is opened", + "genericArguments": undefined, + "ref": "Expression", + "title": "LinkModifier.exp", + "type": "ref", + }, + "required": false, + }, + "metaData": Object { + "node": Object { + "additionalProperties": false, + "description": "metaData about the link's target", + "extends": undefined, + "properties": Object { + "'mime-type'": Object { + "node": Object { + "description": "Used to indicate an application specific resolver to use", + "title": "LinkModifier.metaData.'mime-type'", + "type": "string", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "The location of the link to load", + "title": "LinkModifier.metaData.ref", + "type": "string", + }, + "required": true, + }, + }, + "title": "LinkModifier.metaData", + "type": "object", + }, + "required": true, + }, + "type": Object { + "node": Object { + "const": "link", + "description": "The link type denotes this as a link", + "title": "LinkModifier.type", + "type": "string", + }, + "required": true, + }, + }, + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", + "title": "LinkModifier", + "type": "object", + }, + ], + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/reference-assets-plugin/dist/index.d.ts", + "title": "TextModifier", + "type": "or", + }, + "title": "TextAsset.modifiers", + "type": "array", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "text", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + "value": Object { + "node": Object { + "description": "The text to display", + "title": "TextAsset.value", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "User actions can be represented in several places. +Each view typically has one or more actions that allow the user to navigate away from that view. +In addition, several asset types can have actions that apply to that asset only.", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "AnyTextAsset", + }, + ], + "name": "ActionAsset", + "properties": Object { + "accessibility": Object { + "node": Object { + "description": "An optional string that describes the action for screen-readers", + "title": "ActionAsset.accessibility", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "description": "An optional expression to execute before transitioning", + "genericArguments": undefined, + "ref": "Expression", + "title": "ActionAsset.exp", + "type": "ref", + }, + "required": false, + }, + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "label": Object { + "node": Object { + "description": "A text-like asset for the action's label", + "genericArguments": Array [ + Object { + "genericArguments": undefined, + "ref": "AnyTextAsset", + "type": "ref", + }, + ], + "ref": "AssetWrapper", + "title": "ActionAsset.label", + "type": "ref", + }, + "required": false, + }, + "metaData": Object { + "node": Object { + "additionalProperties": false, + "description": "Additional optional data to assist with the action interactions on the page", + "extends": undefined, + "properties": Object { + "beacon": Object { + "node": Object { + "description": "Additional data to beacon", + "name": "BeaconDataType", + "or": Array [ + Object { + "title": "BeaconDataType", + "type": "string", + }, + Object { + "keyType": Object { + "type": "string", + }, + "title": "BeaconDataType", + "type": "record", + "valueType": Object { + "type": "any", + }, + }, + ], + "source": "/private/var/tmp/_bazel_kreddy8/6fc13ccb395252816f0c23d8394e8532/sandbox/darwin-sandbox/134/execroot/player/node_modules/@player-ui/beacon-plugin/dist/index.d.ts", + "title": "ActionAsset.metaData.beacon", + "type": "or", + }, + "required": false, + }, + "skipValidation": Object { + "node": Object { + "description": "Force transition to the next view without checking for validation", + "title": "ActionAsset.metaData.skipValidation", + "type": "boolean", + }, + "required": false, + }, + }, + "title": "ActionAsset.metaData", + "type": "object", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "action", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + "value": Object { + "node": Object { + "description": "The transition value of the action in the state machine", + "title": "ActionAsset.value", + "type": "string", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": undefined, + "extends": undefined, + "genericTokens": Array [], + "name": "InfoAsset", + "properties": Object { + "actions": Object { + "node": Object { + "description": "List of actions to show at the bottom of the page", + "elementType": Object { + "genericArguments": undefined, + "ref": "AssetWrapper", + "type": "ref", + }, + "title": "InfoAsset.actions", + "type": "array", + }, + "required": false, + }, + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "primaryInfo": Object { + "node": Object { + "description": "Primary place for info", + "genericArguments": undefined, + "ref": "AssetWrapper", + "title": "InfoAsset.primaryInfo", + "type": "ref", + }, + "required": false, + }, + "subTitle": Object { + "node": Object { + "description": "subtitle", + "genericArguments": undefined, + "ref": "AssetWrapper", + "title": "InfoAsset.subTitle", + "type": "ref", + }, + "required": false, + }, + "title": Object { + "node": Object { + "description": "The string value to show", + "genericArguments": undefined, + "ref": "AssetWrapper", + "title": "InfoAsset.title", + "type": "ref", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "info", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": undefined, + "extends": undefined, + "genericTokens": Array [], + "name": "CollectionAsset", + "properties": Object { + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "label": Object { + "node": Object { + "description": "An optional label to title the collection", + "genericArguments": undefined, + "ref": "AssetWrapper", + "title": "CollectionAsset.label", + "type": "ref", + }, + "required": false, + }, + "type": Object { + "node": Object { + "const": "collection", + "description": "The asset type determines the semantics of how a user interacts with a page", + "title": "Asset.type", + "type": "string", + }, + "required": true, + }, + "values": Object { + "node": Object { + "description": "The string value to show", + "elementType": Object { + "genericArguments": undefined, + "ref": "AssetWrapper", + "type": "ref", + }, + "title": "CollectionAsset.values", + "type": "array", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "An asset is the smallest unit of user interaction in a player view", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "string", + }, + "default": Object { + "type": "string", + }, + "symbol": "T", + }, + ], + "name": "Asset", + "properties": Object { + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "type": Object { + "node": Object { + "description": "The asset type determines the semantics of how a user interacts with a page", + "genericArguments": undefined, + "ref": "T", + "title": "Asset.type", + "type": "ref", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "An asset that contains a Binding.", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "string", + }, + "default": Object { + "type": "string", + }, + "symbol": "T", + }, + ], + "name": "AssetBinding", + "properties": Object { + "binding": Object { + "node": Object { + "description": "A binding that points to somewhere in the data model", + "genericArguments": undefined, + "ref": "Binding", + "title": "AssetBinding.binding", + "type": "ref", + }, + "required": true, + }, + "id": Object { + "node": Object { + "description": "Each asset requires a unique id per view", + "title": "Asset.id", + "type": "string", + }, + "required": true, + }, + "type": Object { + "node": Object { + "description": "The asset type determines the semantics of how a user interacts with a page", + "genericArguments": undefined, + "ref": "T", + "title": "Asset.type", + "type": "ref", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Asset", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + Object { + "description": "A switch can replace an asset with the applicable case on first render", + "elementType": Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Switch", + "source": "src/index.ts", + "title": "Switch", + "type": "array", + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "An object that contains an asset", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "AssetWrapper", + "properties": Object { + "asset": Object { + "node": Object { + "description": "An asset instance", + "genericArguments": undefined, + "ref": "T", + "title": "AssetWrapper.asset", + "type": "ref", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "AssetWrapper", + "type": "object", + }, + Object { + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "AssetWrapperOrSwitch", + "or": Array [ + Object { + "and": Array [ + Object { + "genericArguments": Array [ + Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + ], + "ref": "AssetWrapper", + "type": "ref", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "properties": Object { + "dynamicSwitch": Object { + "node": Object { + "description": "The dynamicSwitch property can't exist at the same time as 'asset'", + "title": "dynamicSwitch", + "type": "never", + }, + "required": false, + }, + "staticSwitch": Object { + "node": Object { + "description": "The staticSwitch property can't exist at the same time as 'asset'", + "title": "staticSwitch", + "type": "never", + }, + "required": false, + }, + }, + "type": "object", + }, + ], + "type": "and", + }, + Object { + "and": Array [ + Object { + "additionalProperties": false, + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "StaticSwitch", + "properties": Object { + "staticSwitch": Object { + "node": Object { + "description": "A static switch only evaluates the applicable base on first render of the view", + "elementType": Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Switch", + "source": "src/index.ts", + "title": "StaticSwitch.staticSwitch", + "type": "array", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "StaticSwitch", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "properties": Object { + "asset": Object { + "node": Object { + "description": "The staticSwitch property can't exist at the same time as 'asset'", + "title": "asset", + "type": "never", + }, + "required": false, + }, + "dynamicSwitch": Object { + "node": Object { + "description": "The staticSwitch property can't exist at the same time as 'dynamicSwitch'", + "title": "dynamicSwitch", + "type": "never", + }, + "required": false, + }, + }, + "type": "object", + }, + ], + "type": "and", + }, + Object { + "and": Array [ + Object { + "additionalProperties": false, + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "DynamicSwitch", + "properties": Object { + "dynamicSwitch": Object { + "node": Object { + "description": "A dynamic switch re-evaluates the applicable case as data changes", + "elementType": Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Switch", + "source": "src/index.ts", + "title": "DynamicSwitch.dynamicSwitch", + "type": "array", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "DynamicSwitch", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "properties": Object { + "asset": Object { + "node": Object { + "description": "The dynamicSwitch property can't exist at the same time as 'asset'", + "title": "asset", + "type": "never", + }, + "required": false, + }, + "staticSwitch": Object { + "node": Object { + "description": "The dynamicSwitch property can't exist at the same time as 'staticSwitch'", + "title": "staticSwitch", + "type": "never", + }, + "required": false, + }, + }, + "type": "object", + }, + ], + "type": "and", + }, + ], + "source": "src/index.ts", + "title": "AssetWrapperOrSwitch", + "type": "or", + }, + Object { + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "AssetSwitch", + "or": Array [ + Object { + "additionalProperties": false, + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "StaticSwitch", + "properties": Object { + "staticSwitch": Object { + "node": Object { + "description": "A static switch only evaluates the applicable base on first render of the view", + "elementType": Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Switch", + "source": "src/index.ts", + "title": "StaticSwitch.staticSwitch", + "type": "array", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "StaticSwitch", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "DynamicSwitch", + "properties": Object { + "dynamicSwitch": Object { + "node": Object { + "description": "A dynamic switch re-evaluates the applicable case as data changes", + "elementType": Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Switch", + "source": "src/index.ts", + "title": "DynamicSwitch.dynamicSwitch", + "type": "array", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "DynamicSwitch", + "type": "object", + }, + ], + "source": "src/index.ts", + "title": "AssetSwitch", + "type": "or", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "StaticSwitch", + "properties": Object { + "staticSwitch": Object { + "node": Object { + "description": "A static switch only evaluates the applicable base on first render of the view", + "elementType": Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Switch", + "source": "src/index.ts", + "title": "StaticSwitch.staticSwitch", + "type": "array", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "StaticSwitch", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "DynamicSwitch", + "properties": Object { + "dynamicSwitch": Object { + "node": Object { + "description": "A dynamic switch re-evaluates the applicable case as data changes", + "elementType": Object { + "additionalProperties": false, + "description": "A single case statement to use in a switch", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "SwitchCase", + "properties": Object { + "asset": Object { + "node": Object { + "description": "The Asset to use if this case is applicable", + "genericArguments": undefined, + "ref": "T", + "title": "SwitchCase.asset", + "type": "ref", + }, + "required": true, + }, + "case": Object { + "node": Object { + "description": "An expression to execute to determine if this case applies", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "SwitchCase.case", + "type": "ref", + }, + Object { + "const": true, + "title": "SwitchCase.case", + "type": "boolean", + }, + ], + "title": "SwitchCase.case", + "type": "or", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "SwitchCase", + "type": "object", + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Switch", + "source": "src/index.ts", + "title": "DynamicSwitch.dynamicSwitch", + "type": "array", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "DynamicSwitch", + "type": "object", + }, + Object { + "description": "Expressions are a specialized way of executing code. +If the expression is a composite, the last expression executed is the return value", + "name": "Expression", + "or": Array [ + Object { + "title": "Expression", + "type": "string", + }, + Object { + "elementType": Object { + "title": "Expression.[]", + "type": "string", + }, + "title": "Expression.[]", + "type": "array", + }, + ], + "source": "src/index.ts", + "title": "Expression", + "type": "or", + }, + Object { + "format": "@[.*]@", + "name": "ExpressionRef", + "source": "src/index.ts", + "title": "ExpressionRef", + "type": "template", + }, + Object { + "description": "Bindings describe locations in the data model.", + "name": "Binding", + "source": "src/index.ts", + "title": "Binding", + "type": "string", + }, + Object { + "format": "{{.*}}", + "name": "BindingRef", + "source": "src/index.ts", + "title": "BindingRef", + "type": "template", + }, + Object { + "description": "The data-model is the location that all user data is stored", + "keyType": Object { + "type": "any", + }, + "name": "DataModel", + "source": "src/index.ts", + "title": "DataModel", + "type": "record", + "valueType": Object { + "type": "unknown", + }, + }, + Object { + "and": Array [ + Object { + "additionalProperties": false, + "extends": undefined, + "properties": Object { + "BEGIN": Object { + "node": Object { + "description": "The name of the Flow to begin on", + "title": "BEGIN", + "type": "string", + }, + "required": true, + }, + }, + "type": "object", + }, + Object { + "keyType": Object { + "type": "string", + }, + "type": "record", + "valueType": Object { + "or": Array [ + Object { + "type": "string", + }, + Object { + "additionalProperties": Object { + "or": Array [ + Object { + "type": "undefined", + }, + Object { + "type": "string", + }, + Object { + "genericArguments": undefined, + "ref": "Expression", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + Object { + "name": "NavigationFlowState", + "or": Array [ + Object { + "additionalProperties": false, + "description": "A state representing a view", + "extends": undefined, + "name": "NavigationFlowViewState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "attributes": Object { + "node": Object { + "additionalProperties": Object { + "type": "any", + }, + "description": "View meta-properties", + "extends": undefined, + "properties": Object {}, + "title": "NavigationFlowViewState.attributes", + "type": "object", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "An id corresponding to a view from the 'views' array", + "title": "NavigationFlowViewState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "VIEW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowViewState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "An END state of the flow.", + "extends": undefined, + "name": "NavigationFlowEndState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "outcome": Object { + "node": Object { + "description": "A description of _how_ the flow ended. +If this is a flow started from another flow, the outcome determines the flow transition", + "title": "NavigationFlowEndState.outcome", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "END", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowEndState", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "name": "NavigationFlowFlowState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference to a FLOW id state to run", + "title": "NavigationFlowFlowState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "FLOW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowFlowState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "Action states execute an expression to determine the next state to transition to", + "extends": undefined, + "name": "NavigationFlowActionState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "description": "An expression to execute. +The return value determines the transition to take", + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlowActionState.exp", + "type": "ref", + }, + "required": true, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "state_type": Object { + "node": Object { + "const": "ACTION", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowActionState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "External Flow states represent states in the FSM that can't be resolved internally in Player. +The flow will wait for the embedded application to manage moving to the next state via a transition", + "extends": undefined, + "name": "NavigationFlowExternalState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference for this external state", + "title": "NavigationFlowExternalState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "EXTERNAL", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowExternalState", + "type": "object", + }, + ], + "source": "src/index.ts", + "title": "NavigationFlowState", + "type": "or", + }, + ], + "type": "or", + }, + "description": "A state machine in the navigation", + "extends": undefined, + "name": "NavigationFlow", + "properties": Object { + "onEnd": Object { + "node": Object { + "description": "An optional expression to run when this Flow ends", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlow.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationFlow.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this Flow starts", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlow.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationFlow.onStart", + "type": "or", + }, + "required": false, + }, + "startState": Object { + "node": Object { + "description": "The first state to kick off the state machine", + "title": "NavigationFlow.startState", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlow", + "type": "object", + }, + ], + "type": "or", + }, + }, + ], + "description": "The navigation section of the flow describes a State Machine for the user.", + "name": "Navigation", + "source": "src/index.ts", + "title": "Navigation", + "type": "and", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + Object { + "additionalProperties": Object { + "or": Array [ + Object { + "type": "undefined", + }, + Object { + "type": "string", + }, + Object { + "genericArguments": undefined, + "ref": "Expression", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + Object { + "name": "NavigationFlowState", + "or": Array [ + Object { + "additionalProperties": false, + "description": "A state representing a view", + "extends": undefined, + "name": "NavigationFlowViewState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "attributes": Object { + "node": Object { + "additionalProperties": Object { + "type": "any", + }, + "description": "View meta-properties", + "extends": undefined, + "properties": Object {}, + "title": "NavigationFlowViewState.attributes", + "type": "object", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "An id corresponding to a view from the 'views' array", + "title": "NavigationFlowViewState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "VIEW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowViewState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "An END state of the flow.", + "extends": undefined, + "name": "NavigationFlowEndState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "outcome": Object { + "node": Object { + "description": "A description of _how_ the flow ended. +If this is a flow started from another flow, the outcome determines the flow transition", + "title": "NavigationFlowEndState.outcome", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "END", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowEndState", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "name": "NavigationFlowFlowState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference to a FLOW id state to run", + "title": "NavigationFlowFlowState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "FLOW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowFlowState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "Action states execute an expression to determine the next state to transition to", + "extends": undefined, + "name": "NavigationFlowActionState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "description": "An expression to execute. +The return value determines the transition to take", + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlowActionState.exp", + "type": "ref", + }, + "required": true, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "state_type": Object { + "node": Object { + "const": "ACTION", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowActionState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "External Flow states represent states in the FSM that can't be resolved internally in Player. +The flow will wait for the embedded application to manage moving to the next state via a transition", + "extends": undefined, + "name": "NavigationFlowExternalState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference for this external state", + "title": "NavigationFlowExternalState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "EXTERNAL", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowExternalState", + "type": "object", + }, + ], + "source": "src/index.ts", + "title": "NavigationFlowState", + "type": "or", + }, + ], + "type": "or", + }, + "description": "A state machine in the navigation", + "extends": undefined, + "name": "NavigationFlow", + "properties": Object { + "onEnd": Object { + "node": Object { + "description": "An optional expression to run when this Flow ends", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlow.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationFlow.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this Flow starts", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlow.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationFlow.onStart", + "type": "or", + }, + "required": false, + }, + "startState": Object { + "node": Object { + "description": "The first state to kick off the state machine", + "title": "NavigationFlow.startState", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlow", + "type": "object", + }, + Object { + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransition", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + Object { + "additionalProperties": false, + "description": "The base representation of a state within a Flow", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "string", + }, + "default": Object { + "type": "any", + }, + "symbol": "T", + }, + ], + "name": "NavigationBaseState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "check": Object { + "left": Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + "right": Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + }, + "description": "TS gets really confused with both the ActionState and the onStart state both declaring the \`exp\` property +So this explicity says there should never be an exp prop on a state node that's not of type 'ACTION'", + "title": "NavigationBaseState.exp", + "type": "conditional", + "value": Object { + "false": Object { + "type": "never", + }, + "true": Object { + "genericArguments": undefined, + "ref": "Expression", + "type": "ref", + }, + }, + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "state_type": Object { + "node": Object { + "description": "A property to determine the type of state this is", + "genericArguments": undefined, + "ref": "T", + "title": "NavigationBaseState.state_type", + "type": "ref", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationBaseState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "A generic state that can transition to another state", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "string", + }, + "default": Object { + "type": "any", + }, + "symbol": "T", + }, + ], + "name": "NavigationFlowTransitionableState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "check": Object { + "left": Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + "right": Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + }, + "description": "TS gets really confused with both the ActionState and the onStart state both declaring the \`exp\` property +So this explicity says there should never be an exp prop on a state node that's not of type 'ACTION'", + "title": "NavigationBaseState.exp", + "type": "conditional", + "value": Object { + "false": Object { + "type": "never", + }, + "true": Object { + "genericArguments": undefined, + "ref": "Expression", + "type": "ref", + }, + }, + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "state_type": Object { + "node": Object { + "description": "A property to determine the type of state this is", + "genericArguments": undefined, + "ref": "T", + "title": "NavigationBaseState.state_type", + "type": "ref", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "A state representing a view", + "extends": undefined, + "name": "NavigationFlowViewState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "attributes": Object { + "node": Object { + "additionalProperties": Object { + "type": "any", + }, + "description": "View meta-properties", + "extends": undefined, + "properties": Object {}, + "title": "NavigationFlowViewState.attributes", + "type": "object", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "An id corresponding to a view from the 'views' array", + "title": "NavigationFlowViewState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "VIEW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowViewState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "An END state of the flow.", + "extends": undefined, + "name": "NavigationFlowEndState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "outcome": Object { + "node": Object { + "description": "A description of _how_ the flow ended. +If this is a flow started from another flow, the outcome determines the flow transition", + "title": "NavigationFlowEndState.outcome", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "END", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowEndState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "Action states execute an expression to determine the next state to transition to", + "extends": undefined, + "name": "NavigationFlowActionState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "description": "An expression to execute. +The return value determines the transition to take", + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlowActionState.exp", + "type": "ref", + }, + "required": true, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "state_type": Object { + "node": Object { + "const": "ACTION", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowActionState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "External Flow states represent states in the FSM that can't be resolved internally in Player. +The flow will wait for the embedded application to manage moving to the next state via a transition", + "extends": undefined, + "name": "NavigationFlowExternalState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference for this external state", + "title": "NavigationFlowExternalState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "EXTERNAL", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowExternalState", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "name": "NavigationFlowFlowState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference to a FLOW id state to run", + "title": "NavigationFlowFlowState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "FLOW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowFlowState", + "type": "object", + }, + Object { + "name": "NavigationFlowState", + "or": Array [ + Object { + "additionalProperties": false, + "description": "A state representing a view", + "extends": undefined, + "name": "NavigationFlowViewState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "attributes": Object { + "node": Object { + "additionalProperties": Object { + "type": "any", + }, + "description": "View meta-properties", + "extends": undefined, + "properties": Object {}, + "title": "NavigationFlowViewState.attributes", + "type": "object", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "An id corresponding to a view from the 'views' array", + "title": "NavigationFlowViewState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "VIEW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowViewState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "An END state of the flow.", + "extends": undefined, + "name": "NavigationFlowEndState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "outcome": Object { + "node": Object { + "description": "A description of _how_ the flow ended. +If this is a flow started from another flow, the outcome determines the flow transition", + "title": "NavigationFlowEndState.outcome", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "END", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowEndState", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "name": "NavigationFlowFlowState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference to a FLOW id state to run", + "title": "NavigationFlowFlowState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "FLOW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowFlowState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "Action states execute an expression to determine the next state to transition to", + "extends": undefined, + "name": "NavigationFlowActionState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "description": "An expression to execute. +The return value determines the transition to take", + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlowActionState.exp", + "type": "ref", + }, + "required": true, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "state_type": Object { + "node": Object { + "const": "ACTION", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowActionState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "External Flow states represent states in the FSM that can't be resolved internally in Player. +The flow will wait for the embedded application to manage moving to the next state via a transition", + "extends": undefined, + "name": "NavigationFlowExternalState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference for this external state", + "title": "NavigationFlowExternalState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "EXTERNAL", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowExternalState", + "type": "object", + }, + ], + "source": "src/index.ts", + "title": "NavigationFlowState", + "type": "or", + }, + Object { + "additionalProperties": false, + "description": "The data at the end of a flow", + "extends": undefined, + "name": "FlowResult", + "properties": Object { + "data": Object { + "node": Object { + "description": "The serialized data-model", + "title": "FlowResult.data", + "type": "any", + }, + "required": false, + }, + "endState": Object { + "node": Object { + "additionalProperties": false, + "description": "The outcome describes _how_ the flow ended (forwards, backwards, etc)", + "extends": undefined, + "name": "NavigationFlowEndState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "outcome": Object { + "node": Object { + "description": "A description of _how_ the flow ended. +If this is a flow started from another flow, the outcome determines the flow transition", + "title": "NavigationFlowEndState.outcome", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "END", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "FlowResult.endState", + "type": "object", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "FlowResult", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "Any object that contains 1 or more templates", + "extends": undefined, + "name": "Templatable", + "properties": Object { + "template": Object { + "node": Object { + "description": "A list of templates to process for this node", + "elementType": Object { + "additionalProperties": false, + "description": "A template describes a mapping from a data array -> array of objects", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "any", + }, + "default": Object { + "type": "unknown", + }, + "symbol": "ValueType", + }, + Object { + "constraints": Object { + "type": "string", + }, + "default": Object { + "type": "string", + }, + "symbol": "Key", + }, + ], + "name": "Template", + "properties": Object { + "data": Object { + "node": Object { + "description": "A pointer to the data-model containing an array of elements to map over", + "genericArguments": undefined, + "ref": "Binding", + "title": "Template.data", + "type": "ref", + }, + "required": true, + }, + "dynamic": Object { + "node": Object { + "description": "should the template be recomputed when data changes", + "title": "Template.dynamic", + "type": "boolean", + }, + "required": false, + }, + "output": Object { + "node": Object { + "description": "A property on the parent object to store the new map under. +If it already exists, values are appended to the end.", + "genericArguments": undefined, + "ref": "Key", + "title": "Template.output", + "type": "ref", + }, + "required": true, + }, + "value": Object { + "node": Object { + "description": "The template to iterate over using each value in the supplied template data. +Any reference to _index_ is replaced with the current iteration index.", + "genericArguments": undefined, + "ref": "ValueType", + "title": "Template.value", + "type": "ref", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Template", + "type": "object", + }, + "title": "Templatable.template", + "type": "array", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "Templatable", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "A template describes a mapping from a data array -> array of objects", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "any", + }, + "default": Object { + "type": "unknown", + }, + "symbol": "ValueType", + }, + Object { + "constraints": Object { + "type": "string", + }, + "default": Object { + "type": "string", + }, + "symbol": "Key", + }, + ], + "name": "Template", + "properties": Object { + "data": Object { + "node": Object { + "description": "A pointer to the data-model containing an array of elements to map over", + "genericArguments": undefined, + "ref": "Binding", + "title": "Template.data", + "type": "ref", + }, + "required": true, + }, + "dynamic": Object { + "node": Object { + "description": "should the template be recomputed when data changes", + "title": "Template.dynamic", + "type": "boolean", + }, + "required": false, + }, + "output": Object { + "node": Object { + "description": "A property on the parent object to store the new map under. +If it already exists, values are appended to the end.", + "genericArguments": undefined, + "ref": "Key", + "title": "Template.output", + "type": "ref", + }, + "required": true, + }, + "value": Object { + "node": Object { + "description": "The template to iterate over using each value in the supplied template data. +Any reference to _index_ is replaced with the current iteration index.", + "genericArguments": undefined, + "ref": "ValueType", + "title": "Template.value", + "type": "ref", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "Template", + "type": "object", + }, + Object { + "check": Object { + "left": Object { + "type": "unknown", + }, + "right": Object { + "type": "unknown", + }, + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "View", + "source": "src/index.ts", + "title": "View", + "type": "conditional", + "value": Object { + "false": Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + "true": Object { + "and": Array [ + Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "properties": Object { + "validation": Object { + "node": Object { + "description": "Each view can optionally supply a list of validations to run against a particular view", + "elementType": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "extends": undefined, + "name": "CrossfieldReference", + "properties": Object { + "dataTarget": Object { + "node": Object { + "description": "Cross-field references and validation must run against the default (deformatted) value", + "title": "CrossfieldReference.dataTarget", + "type": "never", + }, + "required": false, + }, + "displayTarget": Object { + "node": Object { + "description": "Where the error should be displayed", + "name": "DisplayTarget", + "or": Array [ + Object { + "const": "page", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "section", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "field", + "title": "DisplayTarget", + "type": "string", + }, + ], + "title": "Reference.displayTarget", + "type": "or", + }, + "required": false, + }, + "message": Object { + "node": Object { + "description": "An optional means of overriding the default message if the validation is triggered", + "title": "Reference.message", + "type": "string", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "The binding to associate this validation with", + "genericArguments": undefined, + "ref": "Binding", + "title": "CrossfieldReference.ref", + "type": "ref", + }, + "required": false, + }, + "severity": Object { + "node": Object { + "description": "An optional means of overriding the default severity of the validation if triggered", + "name": "Severity", + "or": Array [ + Object { + "const": "error", + "title": "Severity", + "type": "string", + }, + Object { + "const": "warning", + "title": "Severity", + "type": "string", + }, + ], + "title": "Reference.severity", + "type": "or", + }, + "required": false, + }, + "trigger": Object { + "node": Object { + "description": "When to run this particular validation", + "name": "Trigger", + "or": Array [ + Object { + "const": "navigation", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "change", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "load", + "title": "Trigger", + "type": "string", + }, + ], + "title": "Reference.trigger", + "type": "or", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The name of the referenced validation type +This will be used to lookup the proper handler", + "title": "Reference.type", + "type": "string", + }, + "required": true, + }, + }, + "title": "CrossfieldReference", + "type": "object", + }, + "title": "validation", + "type": "array", + }, + "required": false, + }, + }, + "type": "object", + }, + ], + "type": "and", + }, + }, + }, + Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "The JSON payload for running Player", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "Flow", + "properties": Object { + "data": Object { + "node": Object { + "description": "Any initial data that the flow can use", + "keyType": Object { + "type": "any", + }, + "name": "DataModel", + "source": "src/index.ts", + "title": "Flow.data", + "type": "record", + "valueType": Object { + "type": "unknown", + }, + }, + "required": false, + }, + "id": Object { + "node": Object { + "description": "A unique identifier for the flow", + "title": "Flow.id", + "type": "string", + }, + "required": true, + }, + "navigation": Object { + "node": Object { + "and": Array [ + Object { + "additionalProperties": false, + "extends": undefined, + "properties": Object { + "BEGIN": Object { + "node": Object { + "description": "The name of the Flow to begin on", + "title": "BEGIN", + "type": "string", + }, + "required": true, + }, + }, + "type": "object", + }, + Object { + "keyType": Object { + "type": "string", + }, + "type": "record", + "valueType": Object { + "or": Array [ + Object { + "type": "string", + }, + Object { + "additionalProperties": Object { + "or": Array [ + Object { + "type": "undefined", + }, + Object { + "type": "string", + }, + Object { + "genericArguments": undefined, + "ref": "Expression", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + Object { + "name": "NavigationFlowState", + "or": Array [ + Object { + "additionalProperties": false, + "description": "A state representing a view", + "extends": undefined, + "name": "NavigationFlowViewState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "attributes": Object { + "node": Object { + "additionalProperties": Object { + "type": "any", + }, + "description": "View meta-properties", + "extends": undefined, + "properties": Object {}, + "title": "NavigationFlowViewState.attributes", + "type": "object", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "An id corresponding to a view from the 'views' array", + "title": "NavigationFlowViewState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "VIEW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowViewState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "An END state of the flow.", + "extends": undefined, + "name": "NavigationFlowEndState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "outcome": Object { + "node": Object { + "description": "A description of _how_ the flow ended. +If this is a flow started from another flow, the outcome determines the flow transition", + "title": "NavigationFlowEndState.outcome", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "END", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowEndState", + "type": "object", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "name": "NavigationFlowFlowState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference to a FLOW id state to run", + "title": "NavigationFlowFlowState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "FLOW", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowFlowState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "Action states execute an expression to determine the next state to transition to", + "extends": undefined, + "name": "NavigationFlowActionState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "description": "An expression to execute. +The return value determines the transition to take", + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlowActionState.exp", + "type": "ref", + }, + "required": true, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "state_type": Object { + "node": Object { + "const": "ACTION", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowActionState", + "type": "object", + }, + Object { + "additionalProperties": false, + "description": "External Flow states represent states in the FSM that can't be resolved internally in Player. +The flow will wait for the embedded application to manage moving to the next state via a transition", + "extends": undefined, + "name": "NavigationFlowExternalState", + "properties": Object { + "_comment": Object { + "node": Object { + "description": "Add comments that will not be processing, but are useful for code explanation", + "title": "CommentBase._comment", + "type": "string", + }, + "required": false, + }, + "exp": Object { + "node": Object { + "title": "NavigationBaseState.exp", + "type": "never", + }, + "required": false, + }, + "onEnd": Object { + "node": Object { + "description": "An optional expression to run before view transition", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this view renders", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationBaseState.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationBaseState.onStart", + "type": "or", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "A reference for this external state", + "title": "NavigationFlowExternalState.ref", + "type": "string", + }, + "required": true, + }, + "state_type": Object { + "node": Object { + "const": "EXTERNAL", + "description": "A property to determine the type of state this is", + "title": "NavigationBaseState.state_type", + "type": "string", + }, + "required": true, + }, + "transitions": Object { + "node": Object { + "description": "A mapping of transition-name to FlowState name", + "keyType": Object { + "type": "string", + }, + "name": "NavigationFlowTransition", + "source": "src/index.ts", + "title": "NavigationFlowTransitionableState.transitions", + "type": "record", + "valueType": Object { + "type": "string", + }, + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlowExternalState", + "type": "object", + }, + ], + "source": "src/index.ts", + "title": "NavigationFlowState", + "type": "or", + }, + ], + "type": "or", + }, + "description": "A state machine in the navigation", + "extends": undefined, + "name": "NavigationFlow", + "properties": Object { + "onEnd": Object { + "node": Object { + "description": "An optional expression to run when this Flow ends", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlow.onEnd", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationFlow.onEnd", + "type": "or", + }, + "required": false, + }, + "onStart": Object { + "node": Object { + "description": "An optional expression to run when this Flow starts", + "or": Array [ + Object { + "genericArguments": undefined, + "ref": "Expression", + "title": "NavigationFlow.onStart", + "type": "ref", + }, + Object { + "additionalProperties": false, + "description": "An object with an expression in it", + "extends": undefined, + "name": "ExpressionObject", + "properties": Object { + "exp": Object { + "node": Object { + "description": "The expression to run", + "genericArguments": undefined, + "ref": "Expression", + "title": "ExpressionObject.exp", + "type": "ref", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "ExpressionObject", + "type": "object", + }, + ], + "title": "NavigationFlow.onStart", + "type": "or", + }, + "required": false, + }, + "startState": Object { + "node": Object { + "description": "The first state to kick off the state machine", + "title": "NavigationFlow.startState", + "type": "string", + }, + "required": true, + }, + }, + "source": "src/index.ts", + "title": "NavigationFlow", + "type": "object", + }, + ], + "type": "or", + }, + }, + ], + "description": "A state machine to drive a user through the experience", + "name": "Navigation", + "source": "src/index.ts", + "title": "Flow.navigation", + "type": "and", + }, + "required": true, + }, + "schema": Object { + "node": Object { + "additionalProperties": Object { + "additionalProperties": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "Each prop in the object can have a specific DataType", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "any", + }, + "default": Object { + "type": "unknown", + }, + "symbol": "T", + }, + ], + "name": "DataType", + "properties": Object { + "default": Object { + "node": Object { + "description": "A default value for this property. +Any reads for this property will result in this default value being written to the model.", + "genericArguments": undefined, + "ref": "T", + "title": "DataType.default", + "type": "ref", + }, + "required": false, + }, + "format": Object { + "node": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "A reference to a specific data format to use. +If none is specified, will fallback to that of the base type", + "extends": undefined, + "name": "Reference", + "properties": Object { + "type": Object { + "node": Object { + "description": "The name of the formatter (and de-formatter) to use", + "title": "Reference.type", + "type": "string", + }, + "required": true, + }, + }, + "title": "DataType.format", + "type": "object", + }, + "required": false, + }, + "isArray": Object { + "node": Object { + "description": "The referenced object represents an array rather than an object", + "title": "DataType.isArray", + "type": "boolean", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The reference of the base type to use", + "title": "DataType.type", + "type": "string", + }, + "required": true, + }, + "validation": Object { + "node": Object { + "description": "Any additional validations that are associated with this property +These will add to any base validations associated with the \\"type\\"", + "elementType": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "A reference to a validation object", + "extends": undefined, + "name": "Reference", + "properties": Object { + "dataTarget": Object { + "node": Object { + "description": "Each validation is passed the value of the data to run it's validation against. +By default, this is the value stored in the data-model (deformatted). +In the off chance you'd like this validator to run against the formatted value (the one the user sees), set this option", + "or": Array [ + Object { + "const": "formatted", + "title": "Reference.dataTarget", + "type": "string", + }, + Object { + "const": "deformatted", + "title": "Reference.dataTarget", + "type": "string", + }, + ], + "title": "Reference.dataTarget", + "type": "or", + }, + "required": false, + }, + "displayTarget": Object { + "node": Object { + "description": "Where the error should be displayed", + "name": "DisplayTarget", + "or": Array [ + Object { + "const": "page", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "section", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "field", + "title": "DisplayTarget", + "type": "string", + }, + ], + "title": "Reference.displayTarget", + "type": "or", + }, + "required": false, + }, + "message": Object { + "node": Object { + "description": "An optional means of overriding the default message if the validation is triggered", + "title": "Reference.message", + "type": "string", + }, + "required": false, + }, + "severity": Object { + "node": Object { + "description": "An optional means of overriding the default severity of the validation if triggered", + "name": "Severity", + "or": Array [ + Object { + "const": "error", + "title": "Severity", + "type": "string", + }, + Object { + "const": "warning", + "title": "Severity", + "type": "string", + }, + ], + "title": "Reference.severity", + "type": "or", + }, + "required": false, + }, + "trigger": Object { + "node": Object { + "description": "When to run this particular validation", + "name": "Trigger", + "or": Array [ + Object { + "const": "navigation", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "change", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "load", + "title": "Trigger", + "type": "string", + }, + ], + "title": "Reference.trigger", + "type": "or", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The name of the referenced validation type +This will be used to lookup the proper handler", + "title": "Reference.type", + "type": "string", + }, + "required": true, + }, + }, + "title": "Reference", + "type": "object", + }, + "title": "DataType.validation", + "type": "array", + }, + "required": false, + }, + }, + "title": "DataType", + "type": "object", + }, + "description": "A Node describes a specific object in the tree", + "extends": undefined, + "name": "Node", + "properties": Object {}, + "title": "Node", + "type": "object", + }, + "description": "The schema for the supplied (or referenced data). +This is used for validation, formatting, etc", + "extends": undefined, + "name": "Schema", + "properties": Object { + "ROOT": Object { + "node": Object { + "additionalProperties": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "Each prop in the object can have a specific DataType", + "extends": undefined, + "genericTokens": Array [ + Object { + "constraints": Object { + "type": "any", + }, + "default": Object { + "type": "unknown", + }, + "symbol": "T", + }, + ], + "name": "DataType", + "properties": Object { + "default": Object { + "node": Object { + "description": "A default value for this property. +Any reads for this property will result in this default value being written to the model.", + "genericArguments": undefined, + "ref": "T", + "title": "DataType.default", + "type": "ref", + }, + "required": false, + }, + "format": Object { + "node": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "A reference to a specific data format to use. +If none is specified, will fallback to that of the base type", + "extends": undefined, + "name": "Reference", + "properties": Object { + "type": Object { + "node": Object { + "description": "The name of the formatter (and de-formatter) to use", + "title": "Reference.type", + "type": "string", + }, + "required": true, + }, + }, + "title": "DataType.format", + "type": "object", + }, + "required": false, + }, + "isArray": Object { + "node": Object { + "description": "The referenced object represents an array rather than an object", + "title": "DataType.isArray", + "type": "boolean", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The reference of the base type to use", + "title": "DataType.type", + "type": "string", + }, + "required": true, + }, + "validation": Object { + "node": Object { + "description": "Any additional validations that are associated with this property +These will add to any base validations associated with the \\"type\\"", + "elementType": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "description": "A reference to a validation object", + "extends": undefined, + "name": "Reference", + "properties": Object { + "dataTarget": Object { + "node": Object { + "description": "Each validation is passed the value of the data to run it's validation against. +By default, this is the value stored in the data-model (deformatted). +In the off chance you'd like this validator to run against the formatted value (the one the user sees), set this option", + "or": Array [ + Object { + "const": "formatted", + "title": "Reference.dataTarget", + "type": "string", + }, + Object { + "const": "deformatted", + "title": "Reference.dataTarget", + "type": "string", + }, + ], + "title": "Reference.dataTarget", + "type": "or", + }, + "required": false, + }, + "displayTarget": Object { + "node": Object { + "description": "Where the error should be displayed", + "name": "DisplayTarget", + "or": Array [ + Object { + "const": "page", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "section", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "field", + "title": "DisplayTarget", + "type": "string", + }, + ], + "title": "Reference.displayTarget", + "type": "or", + }, + "required": false, + }, + "message": Object { + "node": Object { + "description": "An optional means of overriding the default message if the validation is triggered", + "title": "Reference.message", + "type": "string", + }, + "required": false, + }, + "severity": Object { + "node": Object { + "description": "An optional means of overriding the default severity of the validation if triggered", + "name": "Severity", + "or": Array [ + Object { + "const": "error", + "title": "Severity", + "type": "string", + }, + Object { + "const": "warning", + "title": "Severity", + "type": "string", + }, + ], + "title": "Reference.severity", + "type": "or", + }, + "required": false, + }, + "trigger": Object { + "node": Object { + "description": "When to run this particular validation", + "name": "Trigger", + "or": Array [ + Object { + "const": "navigation", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "change", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "load", + "title": "Trigger", + "type": "string", + }, + ], + "title": "Reference.trigger", + "type": "or", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The name of the referenced validation type +This will be used to lookup the proper handler", + "title": "Reference.type", + "type": "string", + }, + "required": true, + }, + }, + "title": "Reference", + "type": "object", + }, + "title": "DataType.validation", + "type": "array", + }, + "required": false, + }, + }, + "title": "DataType", + "type": "object", + }, + "description": "The ROOT object is the top level object to use", + "extends": undefined, + "name": "Node", + "properties": Object {}, + "title": "Schema.ROOT", + "type": "object", + }, + "required": true, + }, + }, + "title": "Flow.schema", + "type": "object", + }, + "required": false, + }, + "views": Object { + "node": Object { + "description": "A list of views (each with an ID) that can be shown to a user", + "elementType": Object { + "check": Object { + "left": Object { + "type": "unknown", + }, + "right": Object { + "type": "unknown", + }, + }, + "genericTokens": Array [ + Object { + "constraints": Object { + "ref": "Asset", + "type": "ref", + }, + "default": Object { + "ref": "Asset", + "type": "ref", + }, + "symbol": "T", + }, + ], + "name": "View", + "source": "src/index.ts", + "title": "View", + "type": "conditional", + "value": Object { + "false": Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + "true": Object { + "and": Array [ + Object { + "genericArguments": undefined, + "ref": "T", + "type": "ref", + }, + Object { + "additionalProperties": false, + "extends": undefined, + "properties": Object { + "validation": Object { + "node": Object { + "description": "Each view can optionally supply a list of validations to run against a particular view", + "elementType": Object { + "additionalProperties": Object { + "type": "unknown", + }, + "extends": undefined, + "name": "CrossfieldReference", + "properties": Object { + "dataTarget": Object { + "node": Object { + "description": "Cross-field references and validation must run against the default (deformatted) value", + "title": "CrossfieldReference.dataTarget", + "type": "never", + }, + "required": false, + }, + "displayTarget": Object { + "node": Object { + "description": "Where the error should be displayed", + "name": "DisplayTarget", + "or": Array [ + Object { + "const": "page", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "section", + "title": "DisplayTarget", + "type": "string", + }, + Object { + "const": "field", + "title": "DisplayTarget", + "type": "string", + }, + ], + "title": "Reference.displayTarget", + "type": "or", + }, + "required": false, + }, + "message": Object { + "node": Object { + "description": "An optional means of overriding the default message if the validation is triggered", + "title": "Reference.message", + "type": "string", + }, + "required": false, + }, + "ref": Object { + "node": Object { + "description": "The binding to associate this validation with", + "genericArguments": undefined, + "ref": "Binding", + "title": "CrossfieldReference.ref", + "type": "ref", + }, + "required": false, + }, + "severity": Object { + "node": Object { + "description": "An optional means of overriding the default severity of the validation if triggered", + "name": "Severity", + "or": Array [ + Object { + "const": "error", + "title": "Severity", + "type": "string", + }, + Object { + "const": "warning", + "title": "Severity", + "type": "string", + }, + ], + "title": "Reference.severity", + "type": "or", + }, + "required": false, + }, + "trigger": Object { + "node": Object { + "description": "When to run this particular validation", + "name": "Trigger", + "or": Array [ + Object { + "const": "navigation", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "change", + "title": "Trigger", + "type": "string", + }, + Object { + "const": "load", + "title": "Trigger", + "type": "string", + }, + ], + "title": "Reference.trigger", + "type": "or", + }, + "required": false, + }, + "type": Object { + "node": Object { + "description": "The name of the referenced validation type +This will be used to lookup the proper handler", + "title": "Reference.type", + "type": "string", + }, + "required": true, + }, + }, + "title": "CrossfieldReference", + "type": "object", + }, + "title": "validation", + "type": "array", + }, + "required": false, + }, + }, + "type": "object", + }, + ], + "type": "and", + }, + }, + }, + "title": "Flow.views", + "type": "array", + }, + "required": false, + }, + }, + "source": "src/index.ts", + "title": "Flow", + "type": "object", + }, +] `; exports[`Object Recall Processed 1`] = ` diff --git a/xlr/sdk/src/__tests__/sdk.test.ts b/xlr/sdk/src/__tests__/sdk.test.ts index 37bee409..3f138dba 100644 --- a/xlr/sdk/src/__tests__/sdk.test.ts +++ b/xlr/sdk/src/__tests__/sdk.test.ts @@ -106,50 +106,27 @@ describe('Basic Validation', () => { describe('Export Test', () => { it('Exports Typescript types', () => { - const importMap = new Map([ - [ - '@player-ui/types', - ['Expression', 'Asset', 'Binding', 'AssetWrapper', 'Schema.DataType'], - ], - ]); - const sdk = new XLRSDK(); sdk.loadDefinitionsFromDisk('./common/static_xlrs/plugin', EXCLUDE); sdk.loadDefinitionsFromDisk('./common/static_xlrs/core', EXCLUDE); - const results = sdk.exportRegistry('TypeScript', importMap); - expect(results[0][0]).toBe('out.d.ts'); - expect(results[0][1]).toMatchSnapshot(); + const results = sdk.exportRegistry(); + expect(results).toMatchSnapshot(); }); it('Exports Typescript Types With Filters', () => { - const importMap = new Map([ - [ - '@player-ui/types', - ['Expression', 'Asset', 'Binding', 'AssetWrapper', 'Schema.DataType'], - ], - ]); - const sdk = new XLRSDK(); sdk.loadDefinitionsFromDisk('./common/static_xlrs/plugin'); sdk.loadDefinitionsFromDisk('./common/static_xlrs/core', EXCLUDE); - const results = sdk.exportRegistry('TypeScript', importMap, { + const results = sdk.exportRegistry({ typeFilter: 'Transformed', pluginFilter: 'Types', }); - expect(results[0][0]).toBe('out.d.ts'); - expect(results[0][1]).toMatchSnapshot(); + expect(results).toMatchSnapshot(); }); it('Exports Typescript Types With Transforms', () => { - const importMap = new Map([ - [ - '@player-ui/types', - ['Expression', 'Asset', 'Binding', 'AssetWrapper', 'Schema.DataType'], - ], - ]); - /** - * + * Sample transform */ const transformFunction: TransformFunction = (input, capability) => { if (capability === 'Assets') { @@ -170,15 +147,7 @@ describe('Export Test', () => { const sdk = new XLRSDK(); sdk.loadDefinitionsFromDisk('./common/static_xlrs/plugin', EXCLUDE); sdk.loadDefinitionsFromDisk('./common/static_xlrs/core', EXCLUDE); - const results = sdk.exportRegistry( - 'TypeScript', - importMap, - { - pluginFilter: 'Types', - }, - [transformFunction] - ); - expect(results[0][0]).toBe('out.d.ts'); - expect(results[0][1]).toMatchSnapshot(); + const results = sdk.exportRegistry({}, [transformFunction]); + expect(results).toMatchSnapshot(); }); }); diff --git a/xlr/sdk/src/sdk.ts b/xlr/sdk/src/sdk.ts index 0a36659c..16880902 100644 --- a/xlr/sdk/src/sdk.ts +++ b/xlr/sdk/src/sdk.ts @@ -6,7 +6,6 @@ import type { TransformFunction, TSManifest, } from '@player-tools/xlr'; -import type { TopLevelDeclaration } from '@player-tools/xlr-utils'; import { computeEffectiveObject, resolveReferenceNode, @@ -35,12 +34,10 @@ export interface GetTypeOptions { export class XLRSDK { private registry: XLRRegistry; private validator: XLRValidator; - private tsWriter: TSWriter; constructor(customRegistry?: XLRRegistry) { this.registry = customRegistry ?? new BasicXLRRegistry(); this.validator = new XLRValidator(this.getType.bind(this)); - this.tsWriter = new TSWriter(); } /** @@ -223,18 +220,14 @@ export class XLRSDK { /** * Exports the types loaded into the registry to the specified format * - * @param exportType - what format to export as - * @param importMap - a map of primitive packages to types exported from that package to add import statements * @param filters - filter out plugins/capabilities/types you don't want to export * @param transforms - transforms to apply to types before exporting them * @returns [filename, content][] - Tuples of filenames and content to write */ public exportRegistry( - exportType: ExportTypes, - importMap: Map, filters?: Filters, transforms?: Array - ): [string, string][] { + ): Array> { const typesToExport = this.registry.list(filters).map((type) => { const resolvedType = this.resolveType(type); const effectiveType = @@ -250,12 +243,7 @@ export class XLRSDK { return effectiveType; }); - if (exportType === 'TypeScript') { - const outputString = this.exportToTypeScript(typesToExport, importMap); - return [['out.d.ts', outputString]]; - } - - throw new Error(`Unknown export format ${exportType}`); + return typesToExport; } private resolveType(type: NodeType) { @@ -287,69 +275,4 @@ export class XLRSDK { return objectNode; })(type, 'any') as NamedType; } - - private exportToTypeScript( - typesToExport: NamedType[], - importMap: Map - ): string { - const referencedImports: Set = new Set(); - const exportedTypes: Map = new Map(); - const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed }); - - let resultFile = ts.createSourceFile( - 'output.d.ts', - '', - ts.ScriptTarget.ES2017, - false, // setParentNodes - ts.ScriptKind.TS - ); - - typesToExport.forEach((typeNode) => { - const { type, referencedTypes, additionalTypes } = - this.tsWriter.convertNamedType(typeNode); - exportedTypes.set(typeNode.name, type); - additionalTypes?.forEach((additionalType, name) => - exportedTypes.set(name, additionalType) - ); - referencedTypes?.forEach((referencedType) => - referencedImports.add(referencedType) - ); - }); - - const typesToPrint: Array = []; - - exportedTypes.forEach((type) => - typesToPrint.push( - printer.printNode(ts.EmitHint.Unspecified, type, resultFile) - ) - ); - - importMap.forEach((imports, packageName) => { - const applicableImports = imports.filter((i) => referencedImports.has(i)); - resultFile = ts.factory.updateSourceFile(resultFile, [ - ts.factory.createImportDeclaration( - /* modifiers */ undefined, - ts.factory.createImportClause( - false, - undefined, - ts.factory.createNamedImports( - applicableImports.map((i) => - ts.factory.createImportSpecifier( - false, - undefined, - ts.factory.createIdentifier(i) - ) - ) - ) - ), - ts.factory.createStringLiteral(packageName) - ), - ...resultFile.statements, - ]); - }); - - const headerText = printer.printFile(resultFile); - const nodeText = typesToPrint.join('\n'); - return `${headerText}\n${nodeText}`; - } } diff --git a/xlr/testing-utils/BUILD b/xlr/testing-utils/BUILD new file mode 100644 index 00000000..f77f0422 --- /dev/null +++ b/xlr/testing-utils/BUILD @@ -0,0 +1,13 @@ + +load("//:index.bzl", "javascript_pipeline") + +javascript_pipeline( + name = "@player-tools/xlr-testing-utils", + dependencies = [ + ], + peer_dependencies = [ + "@npm//typescript", + "@npm//@typescript/vfs" + ], + private = True +) \ No newline at end of file diff --git a/xlr/testing-utils/src/index.ts b/xlr/testing-utils/src/index.ts new file mode 100644 index 00000000..accd3a28 --- /dev/null +++ b/xlr/testing-utils/src/index.ts @@ -0,0 +1 @@ +export * from './test-helpers'; diff --git a/xlr/utils/src/test-helpers.ts b/xlr/testing-utils/src/test-helpers.ts similarity index 100% rename from xlr/utils/src/test-helpers.ts rename to xlr/testing-utils/src/test-helpers.ts diff --git a/xlr/utils/BUILD b/xlr/utils/BUILD index 403d1829..e664d26c 100644 --- a/xlr/utils/BUILD +++ b/xlr/utils/BUILD @@ -5,10 +5,13 @@ javascript_pipeline( name = "@player-tools/xlr-utils", dependencies = [ "//xlr/types:@player-tools/xlr", - "@npm//@typescript/vfs" + "@npm//@typescript/vfs", ], peer_dependencies = [ "@npm//typescript", "@npm//jsonc-parser" + ], + test_data = [ + "//xlr/testing-utils:@player-tools/xlr-testing-utils" ] ) \ No newline at end of file diff --git a/xlr/utils/src/__tests__/annotations.test.ts b/xlr/utils/src/__tests__/annotations.test.ts index 5b3d1a94..d4c8af01 100644 --- a/xlr/utils/src/__tests__/annotations.test.ts +++ b/xlr/utils/src/__tests__/annotations.test.ts @@ -1,4 +1,4 @@ -import { setupTestEnv } from '../test-helpers'; +import { setupTestEnv } from '@player-tools/xlr-testing-utils'; import { decorateNode } from '../annotations'; describe('Annotations', () => { diff --git a/xlr/utils/src/index.ts b/xlr/utils/src/index.ts index 8d23e8e3..34370abb 100644 --- a/xlr/utils/src/index.ts +++ b/xlr/utils/src/index.ts @@ -2,5 +2,4 @@ export * from './annotations'; export * from './ts-helpers'; export * from './type-checks'; export * from './validation-helpers'; -export * from './test-helpers'; export * from './documentation'; diff --git a/yarn.lock b/yarn.lock index 9ac68346..934ef5eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1334,7 +1334,7 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.18.3": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.18.3": version "7.19.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.4.tgz#a42f814502ee467d55b38dd1c256f53a7b885c78" integrity sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA== @@ -1348,6 +1348,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.11.2": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9" + integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg== + dependencies: + regenerator-runtime "^0.13.10" + "@babel/runtime@~7.5.4": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132" @@ -1454,6 +1461,19 @@ "@chakra-ui/transition" "1.4.8" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/accordion@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@chakra-ui/accordion/-/accordion-2.1.5.tgz#286f7ef6434a334d4b446bfef9abaee6be9c3901" + integrity sha512-mxpcbnrbraYGNu/tmYC/Y0BNqM8jGXYygl4wzttlMSm8pXrhXApyv0bNBsU6zbBWqeyQE64R14N1ONl4i8CMkQ== + dependencies: + "@chakra-ui/descendant" "3.0.12" + "@chakra-ui/icon" "3.0.14" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-use-controllable-state" "2.0.7" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/transition" "2.0.13" + "@chakra-ui/alert@1.3.7": version "1.3.7" resolved "https://registry.yarnpkg.com/@chakra-ui/alert/-/alert-1.3.7.tgz#f36020ffc3b2c26be67025c56bccbf0639a81a67" @@ -1463,6 +1483,16 @@ "@chakra-ui/react-utils" "1.2.3" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/alert@2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@chakra-ui/alert/-/alert-2.0.14.tgz#0c39c1727bdaec81068fe36077f068bfc30512ae" + integrity sha512-dG+tgfOT9LVsx+scvXdKBj3D8XRnZ1pTul4G6TSRK6A4FifSwSTvNnmjvNpoH0Vh1dSMRI0zxpV8PAfs9dS9KA== + dependencies: + "@chakra-ui/icon" "3.0.14" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/spinner" "2.0.12" + "@chakra-ui/anatomy@1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@chakra-ui/anatomy/-/anatomy-1.3.0.tgz#38a40dd6f2bb076fe8bebe8fb8e4769ea005e03d" @@ -1470,6 +1500,11 @@ dependencies: "@chakra-ui/theme-tools" "^1.3.6" +"@chakra-ui/anatomy@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/anatomy/-/anatomy-2.1.1.tgz#819a1458ff727157e5500a69fc26bfea6e944495" + integrity sha512-LUHAoqJAgxAqmyckG5bUpBrfEo1FleEyY+1A8hkWciy58gZ+h3GoY9oBpHcdo7XdHPpy3G+3hieK/7i9NLwxAw== + "@chakra-ui/avatar@1.3.11": version "1.3.11" resolved "https://registry.yarnpkg.com/@chakra-ui/avatar/-/avatar-1.3.11.tgz#abd8ffa9ad54756e549730f984fdae621ae51baa" @@ -1479,6 +1514,16 @@ "@chakra-ui/react-utils" "1.2.3" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/avatar@2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@chakra-ui/avatar/-/avatar-2.2.2.tgz#ac93579a499b2a87406f32a122efa41f825de785" + integrity sha512-wFDK1wT5kQxkpCAX6mPhx9kh0Pi2RnfN32bCRFio4Mmiq0ltfSEWi3/XxlawDr31Ch3T3qbtPVLqn355B4U9ZA== + dependencies: + "@chakra-ui/image" "2.0.13" + "@chakra-ui/react-children-utils" "2.0.5" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/breadcrumb@1.3.6": version "1.3.6" resolved "https://registry.yarnpkg.com/@chakra-ui/breadcrumb/-/breadcrumb-1.3.6.tgz#fe22e162c37add5830bd1292172bb11d859c6f35" @@ -1487,6 +1532,22 @@ "@chakra-ui/react-utils" "1.2.3" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/breadcrumb@2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@chakra-ui/breadcrumb/-/breadcrumb-2.1.2.tgz#72cc5a25d35dec7637a2135a2945e66317f6d723" + integrity sha512-NbWg9YKCxo6nbwORpfFkD6bIDvcDdCPPLx+tqIqVwoplpaSPeFV5lzPy4Lg/MS6x6Ko6a/GItGpDQGPuey+iWA== + dependencies: + "@chakra-ui/react-children-utils" "2.0.5" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + +"@chakra-ui/breakpoint-utils@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/breakpoint-utils/-/breakpoint-utils-2.0.6.tgz#ed31aeda21ff309eb0102ccd324b1d2096caa08a" + integrity sha512-aigYoZdHtV+PNFr/RTHjbIYK49PsMLvwtpZsowKWJ6xDyPKHtfhwZ2VOBTUyaQf4mXgaB9MNOF46zOTJN8RfLQ== + dependencies: + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/button@1.5.10": version "1.5.10" resolved "https://registry.yarnpkg.com/@chakra-ui/button/-/button-1.5.10.tgz#c339f78197b6bd63f109003177fd640ae6e6a632" @@ -1497,6 +1558,23 @@ "@chakra-ui/spinner" "1.2.6" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/button@2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@chakra-ui/button/-/button-2.0.14.tgz#9ffc852504a2a6150140e15e46866fd55660ce7e" + integrity sha512-XdP1sB67N2DujDXPWyyXMTjW7frcnbf3yN/3F/asQClZX7ppw8Y36a6uZ94+6Cv67BPc0CokN+m3oQZhINJ+vw== + dependencies: + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/spinner" "2.0.12" + +"@chakra-ui/card@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/card/-/card-2.1.4.tgz#731bea5cfe76d1768fa0b5bfbee5ca4e6eaac652" + integrity sha512-MO8tjFBX2OZJt+NOthDoKcGRMQW/43NePze8Sju7zXqv1ocq7VB0DvToPLkopgeKaPx6AyYhzRXQjYXLcjYgQw== + dependencies: + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/checkbox@1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@chakra-ui/checkbox/-/checkbox-1.7.1.tgz#cd733f177d88c477ae5ece228b81cddc67b70c0e" @@ -1508,6 +1586,23 @@ "@chakra-ui/utils" "1.10.4" "@chakra-ui/visually-hidden" "1.1.6" +"@chakra-ui/checkbox@2.2.7": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@chakra-ui/checkbox/-/checkbox-2.2.7.tgz#12abfb380838436f8ecf2039aef88f5df825d823" + integrity sha512-9p0U5xRE4OL5AbhZjV6Gw0iECLz8yd0cP43FabyBY8UfqrJPpAT22jxRmQ6Tv+HKbvAmgXOtxyIdwYTb1s1D+g== + dependencies: + "@chakra-ui/form-control" "2.0.14" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-types" "2.0.6" + "@chakra-ui/react-use-callback-ref" "2.0.6" + "@chakra-ui/react-use-controllable-state" "2.0.7" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/react-use-safe-layout-effect" "2.0.4" + "@chakra-ui/react-use-update-effect" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/visually-hidden" "2.0.14" + "@zag-js/focus-visible" "0.2.1" + "@chakra-ui/clickable@1.2.6": version "1.2.6" resolved "https://registry.yarnpkg.com/@chakra-ui/clickable/-/clickable-1.2.6.tgz#7f3deef71580acf47c2395cac2c1734f43418a3f" @@ -1516,6 +1611,14 @@ "@chakra-ui/react-utils" "1.2.3" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/clickable@2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@chakra-ui/clickable/-/clickable-2.0.12.tgz#479ed8fd2b1af079f6a630f8b2181b106112dd74" + integrity sha512-boZwlHZ1BdsC4P/1r+SRbKRMG+/UzOgc16Fmhl2QkZquVF6jS6QtJBS1/fL+1N8oijz87nuhBoetNECnfWYN+w== + dependencies: + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/close-button@1.2.7": version "1.2.7" resolved "https://registry.yarnpkg.com/@chakra-ui/close-button/-/close-button-1.2.7.tgz#6f3073618ae777d7e36a80fb17bc00aaa790e7a5" @@ -1524,6 +1627,13 @@ "@chakra-ui/icon" "2.0.5" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/close-button@2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@chakra-ui/close-button/-/close-button-2.0.14.tgz#ec83da9f83bfd8fc2fb3de1a76e58752bf7f1f0b" + integrity sha512-C/MR6EH+MUC49QCtKdoeAq/GYvs4CEvl0xjwri6qFYd8+UEkXPfl33Idw0c3kPbGe+aTrh4vMAYrRNwc4BveIg== + dependencies: + "@chakra-ui/icon" "3.0.14" + "@chakra-ui/color-mode@1.4.8": version "1.4.8" resolved "https://registry.yarnpkg.com/@chakra-ui/color-mode/-/color-mode-1.4.8.tgz#e5367b909f5b4c782b239f9d37d4cf1a44c28559" @@ -1533,6 +1643,13 @@ "@chakra-ui/react-env" "1.1.6" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/color-mode@2.1.11": + version "2.1.11" + resolved "https://registry.yarnpkg.com/@chakra-ui/color-mode/-/color-mode-2.1.11.tgz#9347c1b81a21b7d68bde1aa4a332f7060c8145d4" + integrity sha512-556wqI/MohJAqzP9AD+YsKGi982TzrsAaRGr7RCY5fChNe/wHraLPjMPNITPjjDQWiUmZYkaEos78/4u3qOdpA== + dependencies: + "@chakra-ui/react-use-safe-layout-effect" "2.0.4" + "@chakra-ui/control-box@1.1.6": version "1.1.6" resolved "https://registry.yarnpkg.com/@chakra-ui/control-box/-/control-box-1.1.6.tgz#15a40a2cab525799988ae53948b61eed81a7f177" @@ -1540,6 +1657,11 @@ dependencies: "@chakra-ui/utils" "1.10.4" +"@chakra-ui/control-box@2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@chakra-ui/control-box/-/control-box-2.0.12.tgz#d1109b3c28214421a5278c3776be499b8d843e83" + integrity sha512-SR2rG917ttCAda9Kh0eqr0X2AWQii2iRrgTks3fbDGi7seV7m3tkrpK2hr7rPz5zX0UoJi6CFO04Q6cSclFylw== + "@chakra-ui/counter@1.2.10": version "1.2.10" resolved "https://registry.yarnpkg.com/@chakra-ui/counter/-/counter-1.2.10.tgz#544de1f53b783e8577cc74208ae1b0ca74385834" @@ -1548,11 +1670,25 @@ "@chakra-ui/hooks" "1.9.1" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/counter@2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@chakra-ui/counter/-/counter-2.0.12.tgz#68007b194aed7e5e55e185fddd38c778d2467354" + integrity sha512-LselA3J2OvO1GxXo9pTvFEDEYXaSkelEGAOasUfME2ckQnznMOI96x7cLAujyMuhTAuGnz0n4mxAOp/iMHKL4Q== + dependencies: + "@chakra-ui/number-utils" "2.0.6" + "@chakra-ui/react-use-callback-ref" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/css-reset@1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@chakra-ui/css-reset/-/css-reset-1.1.3.tgz#da65507ea1d69ed309bc34619881e23b5004ec7d" integrity sha512-AgfrE7bRTJvNi/4zIfacI/kBHmHmHEIeQtHwCvk/0qM9V2gK1VM3ctYlnibf7BTh17F/UszweOGRb1lHSPfWjw== +"@chakra-ui/css-reset@2.0.11": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@chakra-ui/css-reset/-/css-reset-2.0.11.tgz#d2b65a543bac785c9788ce152a9eece157595289" + integrity sha512-TnydPIMYaQX8kJ8cKgbXfHaBKLr9wCqZS+UnqUxUo3YzMNRjOUPg4DWVO4n4s+GwuZy860DGsBoJaheLqrilVg== + "@chakra-ui/descendant@2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@chakra-ui/descendant/-/descendant-2.1.4.tgz#b85c52b0b429da0a08d0950b4f8bef61b94f43f6" @@ -1560,6 +1696,19 @@ dependencies: "@chakra-ui/react-utils" "^1.2.3" +"@chakra-ui/descendant@3.0.12": + version "3.0.12" + resolved "https://registry.yarnpkg.com/@chakra-ui/descendant/-/descendant-3.0.12.tgz#823eee949eb56e0045d3ee84bbfd614b4d9203e9" + integrity sha512-jx37SI6PYKMSgn+46Ou8LGa2nbEiBRmU4rzz+0/klVpCSd4yQLcm1c4nPv0D7SoQrhq/cQq4tUPfC2U4tXeovQ== + dependencies: + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-use-merge-refs" "2.0.6" + +"@chakra-ui/dom-utils@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@chakra-ui/dom-utils/-/dom-utils-2.0.5.tgz#cd34be7342f217a5fad42766a15d3cda1b99be21" + integrity sha512-cZsaji3ntRcJOqrc9xyS2JSGXr/VLPFTTvShLApxg5dCDWvrGrCJGQ+iSP6R2FGHo2D6cpAgMdPO9O65KUyZBA== + "@chakra-ui/editable@1.4.2": version "1.4.2" resolved "https://registry.yarnpkg.com/@chakra-ui/editable/-/editable-1.4.2.tgz#92d5266e737d52df1edc91c21a05c0a6048f881f" @@ -1569,6 +1718,26 @@ "@chakra-ui/react-utils" "1.2.3" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/editable@2.0.17": + version "2.0.17" + resolved "https://registry.yarnpkg.com/@chakra-ui/editable/-/editable-2.0.17.tgz#f77953dacb08350ac66251bb5504cc886768f654" + integrity sha512-1Yy2rfWPtRg/1qx2yv9ovTwrpuFHFLEB8LyizM44yvKnSEqTb2K6CTYhVHQBzI92bQUbGsorSflLvFFUzB55XQ== + dependencies: + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-types" "2.0.6" + "@chakra-ui/react-use-callback-ref" "2.0.6" + "@chakra-ui/react-use-controllable-state" "2.0.7" + "@chakra-ui/react-use-focus-on-pointer-down" "2.0.5" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/react-use-safe-layout-effect" "2.0.4" + "@chakra-ui/react-use-update-effect" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + +"@chakra-ui/event-utils@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@chakra-ui/event-utils/-/event-utils-2.0.7.tgz#358db8db4f628ae492eba110fe801b5087f09076" + integrity sha512-OBEIx7CIK5k3nYUGnh2WDhth1oGe26fwXMVQjVM9+2LBUYw2Y1Ufac4o7lMiD1CnyUP+Q70yjMV/mFacvP1EMw== + "@chakra-ui/focus-lock@1.2.6": version "1.2.6" resolved "https://registry.yarnpkg.com/@chakra-ui/focus-lock/-/focus-lock-1.2.6.tgz#ecdc9688651c55c67f9059720f0885ea7c02b979" @@ -1577,6 +1746,14 @@ "@chakra-ui/utils" "1.10.4" react-focus-lock "2.5.2" +"@chakra-ui/focus-lock@2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@chakra-ui/focus-lock/-/focus-lock-2.0.14.tgz#2137499570aad7df9404a40dfeb62311d52c3399" + integrity sha512-p4aieMBm4CG+uhfJ/W+2p3koGfPsHzdzSu2A8AYM5kGZ3rCx6IM97XYSneConw5WH7mSQR4lXzuEDjAyDozXFg== + dependencies: + "@chakra-ui/dom-utils" "2.0.5" + react-focus-lock "^2.9.1" + "@chakra-ui/form-control@1.6.0": version "1.6.0" resolved "https://registry.yarnpkg.com/@chakra-ui/form-control/-/form-control-1.6.0.tgz#a2a7b82a385f75fababf3947d39e227b4d073929" @@ -1587,6 +1764,17 @@ "@chakra-ui/react-utils" "1.2.3" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/form-control@2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@chakra-ui/form-control/-/form-control-2.0.14.tgz#186aa0c93421b698309c99f78d46d3f13125b92a" + integrity sha512-HPT65tNxQJ6E3AqhREa90aJOdJ1TUj+Y37fLqhIUOMrFX2eLjthE81XswjrUGbcaQk0DuCqMLMBFjeUNxo2Qhw== + dependencies: + "@chakra-ui/icon" "3.0.14" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-types" "2.0.6" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/hooks@1.9.1": version "1.9.1" resolved "https://registry.yarnpkg.com/@chakra-ui/hooks/-/hooks-1.9.1.tgz#7a00659e6bb4d56cf56022071eca0b77a7df1ac1" @@ -1597,6 +1785,16 @@ compute-scroll-into-view "1.0.14" copy-to-clipboard "3.3.1" +"@chakra-ui/hooks@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/hooks/-/hooks-2.1.4.tgz#b8fc1904fb5d1daa4d19d61ffb64c1f76a28b846" + integrity sha512-FOsBBMK2zl7qdBrBgmkMNMkkbkKzM0RwYoK7oV+ldUG1f7pvjPBmzRFZ3wiIh5FlbffZvlLAH22D3a2xldWDZw== + dependencies: + "@chakra-ui/react-utils" "2.0.11" + "@chakra-ui/utils" "2.0.14" + compute-scroll-into-view "1.0.14" + copy-to-clipboard "3.3.1" + "@chakra-ui/icon@2.0.5": version "2.0.5" resolved "https://registry.yarnpkg.com/@chakra-ui/icon/-/icon-2.0.5.tgz#d57f53e6a2c7ae1bae7292a1778fd466c02e2e29" @@ -1604,6 +1802,21 @@ dependencies: "@chakra-ui/utils" "1.10.4" +"@chakra-ui/icon@3.0.14": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@chakra-ui/icon/-/icon-3.0.14.tgz#aca6c998f2359ce937203f7463db299a6f8947ba" + integrity sha512-ksNDXSByoLFNec/7UANtiy/lHt2NO3/Xe5KIde3zh70yY1QcRQjO8TjvXgYwqLbR0D6OzMGggrZnJKafeZhjRQ== + dependencies: + "@chakra-ui/shared-utils" "2.0.4" + +"@chakra-ui/icons@^1.1.1": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@chakra-ui/icons/-/icons-1.1.7.tgz#f8c0c44a969c8654b90026b7d375b550c4bfbc49" + integrity sha512-YIHxey/B4M2PyFASlHXtAWFyW+tsAtGAChOJ8dsM2kpu1MbVUqm/6nMI1KIFd7Te5IWuNYA75rAHBdLI0Yu61A== + dependencies: + "@chakra-ui/icon" "2.0.5" + "@types/react" "^17.0.15" + "@chakra-ui/image@1.1.10": version "1.1.10" resolved "https://registry.yarnpkg.com/@chakra-ui/image/-/image-1.1.10.tgz#65bae4086559937d25c728660ae743bce9360cb2" @@ -1612,6 +1825,14 @@ "@chakra-ui/hooks" "1.9.1" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/image@2.0.13": + version "2.0.13" + resolved "https://registry.yarnpkg.com/@chakra-ui/image/-/image-2.0.13.tgz#adc8bc97a65ef15491d7abfa7e4aa31debb3e4c1" + integrity sha512-zcTN3DuhoLCkCgCwPGvy++F9jaCE2OQjoLKJSU2Rnc0c8WjCZZqXKuRdg3GhaYc80kaVSexMSc6h04Hki+JgVQ== + dependencies: + "@chakra-ui/react-use-safe-layout-effect" "2.0.4" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/input@1.4.6": version "1.4.6" resolved "https://registry.yarnpkg.com/@chakra-ui/input/-/input-1.4.6.tgz#455f24e7a3f401ef10b50b68d9b0537676fbfec5" @@ -1621,6 +1842,17 @@ "@chakra-ui/react-utils" "1.2.3" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/input@2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@chakra-ui/input/-/input-2.0.16.tgz#23110cdab6b619beaed1e9869aa6a74e3c01f295" + integrity sha512-4ybF7PQa8MQJm/QvD+UogYerB9/nZuNk+A9Eh9Djtg0EMiD/z+2jhZp2a4Te0HE8mq/DaEK7aNgw4s/EmAKnGA== + dependencies: + "@chakra-ui/form-control" "2.0.14" + "@chakra-ui/object-utils" "2.0.6" + "@chakra-ui/react-children-utils" "2.0.5" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/layout@1.8.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@chakra-ui/layout/-/layout-1.8.0.tgz#f95e78168644b45ac7327e4e0cfb1f0e6f7c3b4d" @@ -1630,6 +1862,23 @@ "@chakra-ui/react-utils" "1.2.3" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/layout@2.1.12": + version "2.1.12" + resolved "https://registry.yarnpkg.com/@chakra-ui/layout/-/layout-2.1.12.tgz#b75d45de693aabd4585e62e75d97a1718e0024ec" + integrity sha512-iIz9QiS0iB+8NUX5r9TtCbV2JbGzEbKVPiTTtnf48utu12lX4xcdpZJm6jgtgWjvwyo+N+FxyQ8oNff5OqN+Hw== + dependencies: + "@chakra-ui/breakpoint-utils" "2.0.6" + "@chakra-ui/icon" "3.0.14" + "@chakra-ui/object-utils" "2.0.6" + "@chakra-ui/react-children-utils" "2.0.5" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + +"@chakra-ui/lazy-utils@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/lazy-utils/-/lazy-utils-2.0.4.tgz#bd0e2f7118e3a8fe470db7666b08bb1f808205a9" + integrity sha512-HaVlEIlWNdk9vuubfc+EJkNkwP4pORXkPanP72KF8CxM4NN1hCSm+2gAvlCZCmWUIKIyhGMO1lXPY923o2Mnug== + "@chakra-ui/live-region@1.1.6": version "1.1.6" resolved "https://registry.yarnpkg.com/@chakra-ui/live-region/-/live-region-1.1.6.tgz#135461a19ae2d479eefb012376ffa0f500b83b16" @@ -1637,6 +1886,11 @@ dependencies: "@chakra-ui/utils" "1.10.4" +"@chakra-ui/live-region@2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@chakra-ui/live-region/-/live-region-2.0.12.tgz#932e94cf2c36eb3c004259d9a4cda5c2b6269887" + integrity sha512-hzCvqeYRtocLn0KmlEpVdYbt/7Tb5tBtsjMBfJb2lQkarQRwC9xzZ4arCcsDZAWiR3c3wvXdSob3vZ71biz46g== + "@chakra-ui/media-query@2.0.4": version "2.0.4" resolved "https://registry.yarnpkg.com/@chakra-ui/media-query/-/media-query-2.0.4.tgz#25e8074a19613d4ccce880a1f92c8e733708b079" @@ -1645,6 +1899,15 @@ "@chakra-ui/react-env" "1.1.6" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/media-query@3.2.9": + version "3.2.9" + resolved "https://registry.yarnpkg.com/@chakra-ui/media-query/-/media-query-3.2.9.tgz#204002fe04e56a1abfa0bd5e3ad05bad8c34ae3e" + integrity sha512-4vaf8YqgIs5zhaQTLAif+aiiixo9gpk1xiTn4oTiDZQFuTVhKyv4iI93NbAKif/Bls+8XghbMo0rF93DjqRRzg== + dependencies: + "@chakra-ui/breakpoint-utils" "2.0.6" + "@chakra-ui/react-env" "2.0.12" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/menu@1.8.12": version "1.8.12" resolved "https://registry.yarnpkg.com/@chakra-ui/menu/-/menu-1.8.12.tgz#98f9cbccfc8fbaaea1f19dcea16ffb96a25eb01f" @@ -1658,6 +1921,27 @@ "@chakra-ui/transition" "1.4.8" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/menu@2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/menu/-/menu-2.1.6.tgz#939a061bc0848528be8ddbcc03c33c35c2630de6" + integrity sha512-/ypgx+JmYgItoBq0bUMetnjDu3aS75lra4xVQeMEG8L7y8/q7B4uIIJeSVh7o8UQJCvV05doxnwsxV7zBW29bw== + dependencies: + "@chakra-ui/clickable" "2.0.12" + "@chakra-ui/descendant" "3.0.12" + "@chakra-ui/lazy-utils" "2.0.4" + "@chakra-ui/popper" "3.0.11" + "@chakra-ui/react-children-utils" "2.0.5" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-use-animation-state" "2.0.7" + "@chakra-ui/react-use-controllable-state" "2.0.7" + "@chakra-ui/react-use-disclosure" "2.0.7" + "@chakra-ui/react-use-focus-effect" "2.0.8" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/react-use-outside-click" "2.0.6" + "@chakra-ui/react-use-update-effect" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/transition" "2.0.13" + "@chakra-ui/modal@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@chakra-ui/modal/-/modal-1.11.1.tgz#fedd757726cbc7ec3b614e1b0c7b46c7244f988e" @@ -1673,6 +1957,22 @@ aria-hidden "^1.1.1" react-remove-scroll "2.4.1" +"@chakra-ui/modal@2.2.6": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/modal/-/modal-2.2.6.tgz#5ea5df74f19b4cd173bfa31f5de0378dadd44a9a" + integrity sha512-NyGovs3+MimltfCyqrpr20vtwNOaNykJGQFp7GfsfiInoMU7fOyDAc12JfgcVl3LCwk0bEo60hx1zxZ3GQvUxQ== + dependencies: + "@chakra-ui/close-button" "2.0.14" + "@chakra-ui/focus-lock" "2.0.14" + "@chakra-ui/portal" "2.0.13" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-types" "2.0.6" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/transition" "2.0.13" + aria-hidden "^1.1.1" + react-remove-scroll "^2.5.4" + "@chakra-ui/number-input@1.4.7": version "1.4.7" resolved "https://registry.yarnpkg.com/@chakra-ui/number-input/-/number-input-1.4.7.tgz#9d150c20a7d301e2ffe600251e68d9b6f70fcce0" @@ -1685,6 +1985,34 @@ "@chakra-ui/react-utils" "1.2.3" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/number-input@2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@chakra-ui/number-input/-/number-input-2.0.15.tgz#7b8eeac38b9dad188845b8e3cb294978e7c7cbb6" + integrity sha512-x04CqLPFF1bYiIiosB5xoWSoOKYBbrB5EMpm1382X11fdsdrkkR2/3Jqb3Hh0yVV63FtxXaYEeUENb6tJMcGmQ== + dependencies: + "@chakra-ui/counter" "2.0.12" + "@chakra-ui/form-control" "2.0.14" + "@chakra-ui/icon" "3.0.14" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-types" "2.0.6" + "@chakra-ui/react-use-callback-ref" "2.0.6" + "@chakra-ui/react-use-event-listener" "2.0.6" + "@chakra-ui/react-use-interval" "2.0.4" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/react-use-safe-layout-effect" "2.0.4" + "@chakra-ui/react-use-update-effect" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + +"@chakra-ui/number-utils@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/number-utils/-/number-utils-2.0.6.tgz#3db0e61dd542d5753b3db4702bf9fae6653ceb82" + integrity sha512-VLOyoiXGpZ+eCQSPqKdBCEpen9VAo6pc6FDFuf4BNdIVEfh6ee//Zl7XjyTAGr1G4HUANp8ZxVHHPvtQ10VP4w== + +"@chakra-ui/object-utils@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/object-utils/-/object-utils-2.0.6.tgz#6b6125dbb1d1f3a9e5d3faf008d6374a3c4d99f7" + integrity sha512-fw1AjQ4wdL8hqPGiE6ulXyugwh1m70YluG1yWGZDPi909zJj1/uL0DClgiNJY/8zWJrbMwDjGdYziXudLxahgA== + "@chakra-ui/pin-input@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@chakra-ui/pin-input/-/pin-input-1.7.11.tgz#d2bdfc29b10293efae35f6b35203d05b57ab29c3" @@ -1695,6 +2023,18 @@ "@chakra-ui/react-utils" "1.2.3" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/pin-input@2.0.17": + version "2.0.17" + resolved "https://registry.yarnpkg.com/@chakra-ui/pin-input/-/pin-input-2.0.17.tgz#d1151c010e2b1600d0d5b17bfe79543b838c3a5d" + integrity sha512-uDL8HIjuvvcEO9YBiAOewFtlrjPDqF+xPIWBh4hetDVt6Pd9XavvuyRJjsogjAZt0FsweUg5sF8g/iVLAihCAQ== + dependencies: + "@chakra-ui/descendant" "3.0.12" + "@chakra-ui/react-children-utils" "2.0.5" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-use-controllable-state" "2.0.7" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/popover@1.11.9": version "1.11.9" resolved "https://registry.yarnpkg.com/@chakra-ui/popover/-/popover-1.11.9.tgz#283a52c969f27ee7119774c255b786af6c9b2766" @@ -1706,6 +2046,23 @@ "@chakra-ui/react-utils" "1.2.3" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/popover@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@chakra-ui/popover/-/popover-2.1.5.tgz#435fe2e8f9bf2c2fd433334edaf5a98e9fefb0e8" + integrity sha512-ERM9312mJ1RbiRRdgn0E8jS10ZNBsACFkLhnEe++Ow27pjuIxL/MCpCatEGx9b97osHSsfPHekHjaLcOoCqVIw== + dependencies: + "@chakra-ui/close-button" "2.0.14" + "@chakra-ui/lazy-utils" "2.0.4" + "@chakra-ui/popper" "3.0.11" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-types" "2.0.6" + "@chakra-ui/react-use-animation-state" "2.0.7" + "@chakra-ui/react-use-disclosure" "2.0.7" + "@chakra-ui/react-use-focus-effect" "2.0.8" + "@chakra-ui/react-use-focus-on-pointer-down" "2.0.5" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/popper@2.4.3": version "2.4.3" resolved "https://registry.yarnpkg.com/@chakra-ui/popper/-/popper-2.4.3.tgz#fcdc917d13a56b9d44868c78a009e4dd692697a2" @@ -1714,6 +2071,15 @@ "@chakra-ui/react-utils" "1.2.3" "@popperjs/core" "^2.9.3" +"@chakra-ui/popper@3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@chakra-ui/popper/-/popper-3.0.11.tgz#00d412d408d4628d55491bd5d3b58e1e23e6c972" + integrity sha512-fsKwgq3E0S6FqCzTCQ7HQEr2BOHfHZZMiqvFpGyrIPQ/Esv7aE3Ipw4y4RHTztzJ+vUKK3XTbJzX1cU4RR4a8Q== + dependencies: + "@chakra-ui/react-types" "2.0.6" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@popperjs/core" "^2.9.3" + "@chakra-ui/portal@1.3.10": version "1.3.10" resolved "https://registry.yarnpkg.com/@chakra-ui/portal/-/portal-1.3.10.tgz#d85b2cf1a8b3e2eca260d8e3ad485da0ee29856b" @@ -1723,6 +2089,14 @@ "@chakra-ui/react-utils" "1.2.3" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/portal@2.0.13": + version "2.0.13" + resolved "https://registry.yarnpkg.com/@chakra-ui/portal/-/portal-2.0.13.tgz#ce556c1750bacf157f9f96755577dc9d59266ef6" + integrity sha512-EuzaYJuIXM5elqy0MmXe+nc2bHm72JpxkM/PX+LnRTlkA44Kj/iQP5gnx5KHLVG4RPbcG5p61W4KzIBPSRY0+g== + dependencies: + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-use-safe-layout-effect" "2.0.4" + "@chakra-ui/progress@1.2.6": version "1.2.6" resolved "https://registry.yarnpkg.com/@chakra-ui/progress/-/progress-1.2.6.tgz#4a3a40e826c8c72160d3c8ff411e86244e280ebc" @@ -1731,6 +2105,13 @@ "@chakra-ui/theme-tools" "1.3.6" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/progress@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/progress/-/progress-2.1.3.tgz#742ab674323dd504ba67e69ae379cbdabdadd421" + integrity sha512-RnVFvdWXrj06oVG0R0m/OunXJ9oxMrcI/UHGgTw74FbjZDSSv7+8j9397iu2Mop7v6iJi0Rhm8Nyi/wEqlO9lw== + dependencies: + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/provider@1.7.14": version "1.7.14" resolved "https://registry.yarnpkg.com/@chakra-ui/provider/-/provider-1.7.14.tgz#74d19e3066ab02f2c14fa32d22dc12f8367b56f7" @@ -1743,6 +2124,17 @@ "@chakra-ui/system" "1.12.1" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/provider@2.0.28": + version "2.0.28" + resolved "https://registry.yarnpkg.com/@chakra-ui/provider/-/provider-2.0.28.tgz#822b2680ccee7d574954917ca006e515c5ba6ce3" + integrity sha512-9Q6UTweW0Fbgqd1ifBeVJke0QLp6duZqiju+Ng9C16B31FcNCz8nFPWQLx5yhDnA4XoQ3vNREkrETfae4CfH1Q== + dependencies: + "@chakra-ui/css-reset" "2.0.11" + "@chakra-ui/portal" "2.0.13" + "@chakra-ui/react-env" "2.0.12" + "@chakra-ui/system" "2.3.7" + "@chakra-ui/utils" "2.0.14" + "@chakra-ui/radio@1.5.1": version "1.5.1" resolved "https://registry.yarnpkg.com/@chakra-ui/radio/-/radio-1.5.1.tgz#d2b691fde944c20eb594873f72eb61dfb84b15da" @@ -1754,6 +2146,28 @@ "@chakra-ui/utils" "1.10.4" "@chakra-ui/visually-hidden" "1.1.6" +"@chakra-ui/radio@2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@chakra-ui/radio/-/radio-2.0.16.tgz#d6bc26c635393077612055c65d70333244ca2e63" + integrity sha512-TQyHi88Jo6BNCNKXMpWxkoKufEOM2va+3ykuFK8RSqaAhRbHXBdnbS23Bq2HR7z7jrsnsOQOkZ9VA64XDDn1fw== + dependencies: + "@chakra-ui/form-control" "2.0.14" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-types" "2.0.6" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@zag-js/focus-visible" "0.2.1" + +"@chakra-ui/react-children-utils@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-children-utils/-/react-children-utils-2.0.5.tgz#300efb99130e8423333f7bddbbac23cdff624b5e" + integrity sha512-rP/1HFR9J6wohIzLe/gU+vpey27uey9pVa46VTZfApI6VdzDWiQT1pmrGQeMkba07KdU2MJS/60dhGM4NfvcQA== + +"@chakra-ui/react-context@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-context/-/react-context-2.0.6.tgz#77d61e4a2654e83a8cc5c6d6f0140ceedab87963" + integrity sha512-+Bk/lDBirj6KE3vbyyUVCqFGqAe+MOso+1NRHQ0m66/sXWFFnoL/lvuq4osdNp80DOVQ4EYYnHI0olSZZvuKEg== + "@chakra-ui/react-env@1.1.6": version "1.1.6" resolved "https://registry.yarnpkg.com/@chakra-ui/react-env/-/react-env-1.1.6.tgz#9915b02fd1f8ca62ccf578eaec793f1c4dea78b0" @@ -1761,6 +2175,129 @@ dependencies: "@chakra-ui/utils" "1.10.4" +"@chakra-ui/react-env@2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-env/-/react-env-2.0.12.tgz#f5f9fef0bd6fa9983457cb06413cf209acad48e8" + integrity sha512-BPTz2cxNKhNc1y5J9cCOYndbGiNulpMwihZLkybLRJ1qzZic4KuD3iGOkagJ81STKoPkKEZWfcjnrQTCJTq1fg== + +"@chakra-ui/react-types@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-types/-/react-types-2.0.6.tgz#96b4f8a082ab5244fe6b574e953b1b64ece9605a" + integrity sha512-aAq/nl//PneEfeaDb94zwfXor4OP/d5kc6dEXOZB2HJgCt3hu2+F/1u1QpPLPPTys5xexkQojuZQLnnD9lmQFw== + +"@chakra-ui/react-use-animation-state@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-animation-state/-/react-use-animation-state-2.0.7.tgz#5f7f6327130c7bc345477a46b31b30b81fa1e45a" + integrity sha512-v4p5jTopFvYah3vrRU7m6W+m1IEIqxfDco6ASeoEWEcKab4WBdQ1OQr1Oxgip+UIgmvLUnl+3BS+jPUuuKkdgg== + dependencies: + "@chakra-ui/dom-utils" "2.0.5" + "@chakra-ui/react-use-event-listener" "2.0.6" + +"@chakra-ui/react-use-callback-ref@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-callback-ref/-/react-use-callback-ref-2.0.6.tgz#e382cfa198a376804946f57fa564f17ea6efdccc" + integrity sha512-JKh0GJQvLonjSVQJjsBs2gE+Zix/DXfAo8kzNE+DzNf49CNomX59TkcJNXDjtzSktn6GfqDF8IOObJlGlbtG7g== + +"@chakra-ui/react-use-controllable-state@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-controllable-state/-/react-use-controllable-state-2.0.7.tgz#1f61659a42cc73227770201e6c631dc9c606f15f" + integrity sha512-vKGgMtZb/06KnIF0XUFjWvwfKs3x35M6FEc4FU/wgM5FDU9T6Vd1TG7kDHFMoYdcvRf2/fgzkOxgTN052+sMkw== + dependencies: + "@chakra-ui/react-use-callback-ref" "2.0.6" + +"@chakra-ui/react-use-disclosure@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-disclosure/-/react-use-disclosure-2.0.7.tgz#217ea956a1c2455c9b2647d59d1bbbe0e577d190" + integrity sha512-vQG8AxYq+BkaurCHdMA9pxJAfQDmErMzn9hn2elP0dVfKe2a0O7aCFzX2Ff9PeeBKWOFlUfKf79gRBnhXRa5xw== + dependencies: + "@chakra-ui/react-use-callback-ref" "2.0.6" + +"@chakra-ui/react-use-event-listener@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-event-listener/-/react-use-event-listener-2.0.6.tgz#15faf5873f6ee6a973d74d174fe2905a81647ccf" + integrity sha512-lDtccra2B/1ap6Z7NESS4QfZajfOLd/jafmVdiO0xc4YSs6VDhenipMCv9O47U5EXapG6jfTXs2nbFkc3jRKiA== + dependencies: + "@chakra-ui/react-use-callback-ref" "2.0.6" + +"@chakra-ui/react-use-focus-effect@2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-focus-effect/-/react-use-focus-effect-2.0.8.tgz#fdf43e129148c82ebad66ef970dd3f8b2394f251" + integrity sha512-Et6/97A/6ndPygj6CF8+T7RQH0gsW5fkWNi64R7OjuQSjWxGq1kcmyBGm4E2u2Hbmtf4Hm1dcjzilnYbG7M7IA== + dependencies: + "@chakra-ui/dom-utils" "2.0.5" + "@chakra-ui/react-use-event-listener" "2.0.6" + "@chakra-ui/react-use-safe-layout-effect" "2.0.4" + "@chakra-ui/react-use-update-effect" "2.0.6" + +"@chakra-ui/react-use-focus-on-pointer-down@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-focus-on-pointer-down/-/react-use-focus-on-pointer-down-2.0.5.tgz#81bf94ada866f3ddf3d72e50b6e4281a29e88196" + integrity sha512-xDQUp8s+a+0DgqOWdvKXgIZcyXH5RXKkC+qa0mbUJf54b9qLbrD6yw3o2jAvDEGa7vLBjaVY4jfOAdzt7+Na2g== + dependencies: + "@chakra-ui/react-use-event-listener" "2.0.6" + +"@chakra-ui/react-use-interval@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-interval/-/react-use-interval-2.0.4.tgz#c4358e5e631e18872bda061b8cde48b3385aa641" + integrity sha512-LCS0CijCBEJW1dz2WQThGn+wPSaA6YWPEWeS2WmobbQhkjLbzEy2z8CIG5MeUopX8v6kDDnCMmIpocmrIyGGbA== + dependencies: + "@chakra-ui/react-use-callback-ref" "2.0.6" + +"@chakra-ui/react-use-latest-ref@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-latest-ref/-/react-use-latest-ref-2.0.4.tgz#c35a3741f1ac2f9468bb3ea1333adce445e6068f" + integrity sha512-7xxQeu7PtFUEXbd+BZ+UMX9ASpJET02z9EgtqSfnMgB1ccgo/1i8CYI2/BcolwRf05EUD7kOUA+7eHyP4EI3Uw== + +"@chakra-ui/react-use-merge-refs@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-merge-refs/-/react-use-merge-refs-2.0.6.tgz#be0279ee6070480d5b2699c732a7cfa9690c589b" + integrity sha512-m4fQtm5cn3F39nLj5MhmKsAzdFaYMldR8a4VMtfC2Pnd+bqX8jx2q2yPCjpam9x/Wnh8ZRBMJ2KAjAiGnF3XXw== + +"@chakra-ui/react-use-outside-click@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-outside-click/-/react-use-outside-click-2.0.6.tgz#55f4d5dacc80c3c39fd7755fe7e142a841d99105" + integrity sha512-wbZI4zDwSiQ3jCZ++PKmv7uIU6oyEbaap8s6e3O9/JFAlPXxAG48DcSHmQZ8scyEu/wwd8A+/3go49T4VIvc7w== + dependencies: + "@chakra-ui/react-use-callback-ref" "2.0.6" + +"@chakra-ui/react-use-pan-event@2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-pan-event/-/react-use-pan-event-2.0.8.tgz#88bd69d55c71be7d261ad3a8abe15d31a6b11380" + integrity sha512-HUn7WR9IagtC3KdjmBlHibnFYisQ055IoWReIEWuDz/5KWSPeC2p2QcMc33vhN/ucS1XbWCt6uelHHBeCWWvfA== + dependencies: + "@chakra-ui/event-utils" "2.0.7" + "@chakra-ui/react-use-latest-ref" "2.0.4" + framesync "6.1.2" + +"@chakra-ui/react-use-previous@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-previous/-/react-use-previous-2.0.4.tgz#9b73efce8ab82060ca31c26bc6128f896ec3a9a8" + integrity sha512-ZzILmNAoRVPDRFhKUceksQGETQyne4ST7W7Y5NPkr/OAJuzc2njodY0GjGiJTF2YpOSelRn6KB8MDhwp4XR2mw== + +"@chakra-ui/react-use-safe-layout-effect@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-safe-layout-effect/-/react-use-safe-layout-effect-2.0.4.tgz#5924c94dbaa3765a5f80931a6cf2cf3af094cc39" + integrity sha512-GbQIdhiesXZ8DV+JxiERz3/zki6PELhYPz/7JxyFUk8xInJnUcuEz2L4bV7rXIm9/bd2kjf4gfV+lHOGfpJdLw== + +"@chakra-ui/react-use-size@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-size/-/react-use-size-2.0.7.tgz#52929bd292ff6c55471872eb0f32186d7cfe31d8" + integrity sha512-ggj8W0rer9oJ03xXrH4CUBNe6RZ/qtuU/32pMougeVWwZ3COGTODBtFlooIiy3iCvxrpHIgIDXy/hyrBWyvQSw== + dependencies: + "@zag-js/element-size" "0.3.0" + +"@chakra-ui/react-use-timeout@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-timeout/-/react-use-timeout-2.0.4.tgz#65e6e07f42f9c1c4165e5e8d6784215117f6b73a" + integrity sha512-7EqjJVRv61DmWb9UE4R9LPf3l1SDfawQ2/ax/e0lYpDBjaeV013wUH1uurRq8jn/vR1DhNzfRB5VtimE2f2Vsw== + dependencies: + "@chakra-ui/react-use-callback-ref" "2.0.6" + +"@chakra-ui/react-use-update-effect@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-update-effect/-/react-use-update-effect-2.0.6.tgz#8aacaab25fd181a52569336ca5ef797e8ae1026a" + integrity sha512-P6+0hocnasjl8xOrFH9BklyCNNzCBu/XAl5y7kZ82uVnS99SaC6cppO9/qWRZI9cYYheWfJ4lyLGeLOcNmI8/Q== + "@chakra-ui/react-utils@1.2.3", "@chakra-ui/react-utils@^1.2.3": version "1.2.3" resolved "https://registry.yarnpkg.com/@chakra-ui/react-utils/-/react-utils-1.2.3.tgz#3356c9299bc8faada8fac6c5886ca65ec95bb5be" @@ -1768,7 +2305,14 @@ dependencies: "@chakra-ui/utils" "^1.10.4" -"@chakra-ui/react@^1.0.0": +"@chakra-ui/react-utils@2.0.11": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-utils/-/react-utils-2.0.11.tgz#5e99b21759eadc9276709268cca94c502afeda56" + integrity sha512-LdE0Ay5Em2ew7fuux9MJAwaxoaU/QwVoH/t6uiUw/JCWpmiMGY6tw6t3eZTvZSRZNfyPWY0MmvOHR1UvIS9JIw== + dependencies: + "@chakra-ui/utils" "2.0.14" + +"@chakra-ui/react@^1.7.3": version "1.8.9" resolved "https://registry.yarnpkg.com/@chakra-ui/react/-/react-1.8.9.tgz#1d5a9ed2ce4958d1a006fb192f8a974440c89242" integrity sha512-NfR5XKVqEWhchFLiWaTWkWeYZJK1SNF2O6sQxFVrX6M+nAgJ3Q9tfMk6/I3II+xc4hXJUcYmUvmw37vT92yMaQ== @@ -1821,6 +2365,62 @@ "@chakra-ui/utils" "1.10.4" "@chakra-ui/visually-hidden" "1.1.6" +"@chakra-ui/react@^2.4.4": + version "2.4.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/react/-/react-2.4.6.tgz#c3baf75cd1e1c29cd42ae9f732251521df299a66" + integrity sha512-uz9QjjxJgf81fXcOWDiVo2rU/lWfThCDKW5UMlYX2OrrHko7OnwZ3r9oMlZFU/vAS71LWhKbjXicJmOwwls42g== + dependencies: + "@chakra-ui/accordion" "2.1.5" + "@chakra-ui/alert" "2.0.14" + "@chakra-ui/avatar" "2.2.2" + "@chakra-ui/breadcrumb" "2.1.2" + "@chakra-ui/button" "2.0.14" + "@chakra-ui/card" "2.1.4" + "@chakra-ui/checkbox" "2.2.7" + "@chakra-ui/close-button" "2.0.14" + "@chakra-ui/control-box" "2.0.12" + "@chakra-ui/counter" "2.0.12" + "@chakra-ui/css-reset" "2.0.11" + "@chakra-ui/editable" "2.0.17" + "@chakra-ui/form-control" "2.0.14" + "@chakra-ui/hooks" "2.1.4" + "@chakra-ui/icon" "3.0.14" + "@chakra-ui/image" "2.0.13" + "@chakra-ui/input" "2.0.16" + "@chakra-ui/layout" "2.1.12" + "@chakra-ui/live-region" "2.0.12" + "@chakra-ui/media-query" "3.2.9" + "@chakra-ui/menu" "2.1.6" + "@chakra-ui/modal" "2.2.6" + "@chakra-ui/number-input" "2.0.15" + "@chakra-ui/pin-input" "2.0.17" + "@chakra-ui/popover" "2.1.5" + "@chakra-ui/popper" "3.0.11" + "@chakra-ui/portal" "2.0.13" + "@chakra-ui/progress" "2.1.3" + "@chakra-ui/provider" "2.0.28" + "@chakra-ui/radio" "2.0.16" + "@chakra-ui/react-env" "2.0.12" + "@chakra-ui/select" "2.0.15" + "@chakra-ui/skeleton" "2.0.21" + "@chakra-ui/slider" "2.0.18" + "@chakra-ui/spinner" "2.0.12" + "@chakra-ui/stat" "2.0.14" + "@chakra-ui/styled-system" "2.5.1" + "@chakra-ui/switch" "2.0.19" + "@chakra-ui/system" "2.3.7" + "@chakra-ui/table" "2.0.14" + "@chakra-ui/tabs" "2.1.6" + "@chakra-ui/tag" "2.0.14" + "@chakra-ui/textarea" "2.0.15" + "@chakra-ui/theme" "2.2.4" + "@chakra-ui/theme-utils" "2.0.8" + "@chakra-ui/toast" "4.0.8" + "@chakra-ui/tooltip" "2.2.4" + "@chakra-ui/transition" "2.0.13" + "@chakra-ui/utils" "2.0.14" + "@chakra-ui/visually-hidden" "2.0.14" + "@chakra-ui/select@1.2.11": version "1.2.11" resolved "https://registry.yarnpkg.com/@chakra-ui/select/-/select-1.2.11.tgz#7762f2b7974a4587b4eb9536eb93b2295381aa9f" @@ -1829,6 +2429,19 @@ "@chakra-ui/form-control" "1.6.0" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/select@2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@chakra-ui/select/-/select-2.0.15.tgz#30b8035540843b325d172ddd4cf6343e52f1c3c1" + integrity sha512-TdrkZNMyyZu1H/J/hn4Rqz7WES6cTLZfTqSIi0FtnmFMCiOmfLT317A0d783uwU/YnDGogjfTQ4aAAY2PEsgGw== + dependencies: + "@chakra-ui/form-control" "2.0.14" + "@chakra-ui/shared-utils" "2.0.4" + +"@chakra-ui/shared-utils@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/shared-utils/-/shared-utils-2.0.4.tgz#8661f2b48dd93d04151b10a894a4290c9d9a080c" + integrity sha512-JGWr+BBj3PXGZQ2gxbKSD1wYjESbYsZjkCeE2nevyVk4rN3amV1wQzCnBAhsuJktMaZD6KC/lteo9ou9QUDzpA== + "@chakra-ui/skeleton@1.2.14": version "1.2.14" resolved "https://registry.yarnpkg.com/@chakra-ui/skeleton/-/skeleton-1.2.14.tgz#c2028b03a975c76b13aaecdbbe168872079177b8" @@ -1839,6 +2452,15 @@ "@chakra-ui/system" "1.12.1" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/skeleton@2.0.21": + version "2.0.21" + resolved "https://registry.yarnpkg.com/@chakra-ui/skeleton/-/skeleton-2.0.21.tgz#697bb66b9e7362f9f252717babc50c916903cc7b" + integrity sha512-ztHfV/6Mwl1Wl8H8fkAszMHnyobNZ4SjVD/rImBlKfqSh2VW8jzSwzqN77Oi6iZ7fsqdPN7w2QWS5EAtsUxTVw== + dependencies: + "@chakra-ui/media-query" "3.2.9" + "@chakra-ui/react-use-previous" "2.0.4" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/slider@1.5.11": version "1.5.11" resolved "https://registry.yarnpkg.com/@chakra-ui/slider/-/slider-1.5.11.tgz#e03585188547dad3dafdb4a4cbd64bfbf8a4025b" @@ -1848,6 +2470,22 @@ "@chakra-ui/react-utils" "1.2.3" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/slider@2.0.18": + version "2.0.18" + resolved "https://registry.yarnpkg.com/@chakra-ui/slider/-/slider-2.0.18.tgz#0f4847298698bb0c5888add7f1bacec1d831e486" + integrity sha512-wfkW9Xe3WVK1yUY0ELAPVLghknxqzPjqidQgbiMSNlKxTs70sFuACsbbwMV+LMcE+2aUYOGOaqTFI8nPfVdbOw== + dependencies: + "@chakra-ui/number-utils" "2.0.6" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-types" "2.0.6" + "@chakra-ui/react-use-callback-ref" "2.0.6" + "@chakra-ui/react-use-controllable-state" "2.0.7" + "@chakra-ui/react-use-latest-ref" "2.0.4" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/react-use-pan-event" "2.0.8" + "@chakra-ui/react-use-size" "2.0.7" + "@chakra-ui/react-use-update-effect" "2.0.6" + "@chakra-ui/spinner@1.2.6": version "1.2.6" resolved "https://registry.yarnpkg.com/@chakra-ui/spinner/-/spinner-1.2.6.tgz#d85fb3d763a69d40570b591507c5087dba38e6c4" @@ -1856,6 +2494,13 @@ "@chakra-ui/utils" "1.10.4" "@chakra-ui/visually-hidden" "1.1.6" +"@chakra-ui/spinner@2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@chakra-ui/spinner/-/spinner-2.0.12.tgz#275ba21dd2b4be29ecf31c64581167ac75f3b943" + integrity sha512-c9R0k7RUgff5g79Q5kX1mE4lsXqLKIskIbPksL7Qm3Zw/ZbDHyNILFFltPLt7350rC9mGzqzEZbizAFlksbdLw== + dependencies: + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/stat@1.2.7": version "1.2.7" resolved "https://registry.yarnpkg.com/@chakra-ui/stat/-/stat-1.2.7.tgz#e173171d80f9e756966604e620987bbd7590d291" @@ -1865,6 +2510,15 @@ "@chakra-ui/utils" "1.10.4" "@chakra-ui/visually-hidden" "1.1.6" +"@chakra-ui/stat@2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@chakra-ui/stat/-/stat-2.0.14.tgz#b20b78d345fbadb679cab218b5c75b7b56d4706e" + integrity sha512-VW92QvrRZDZAtUhPHWLhS0SzxVmElb6dRevVokzTm2sBQbkE1pkZnzoYuEkBx3t0QjxZj5YhqXR+CEkZFpM1rw== + dependencies: + "@chakra-ui/icon" "3.0.14" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/styled-system@1.19.0": version "1.19.0" resolved "https://registry.yarnpkg.com/@chakra-ui/styled-system/-/styled-system-1.19.0.tgz#102fadaefc1a2dfd8e0c4837eafa660531a08419" @@ -1873,6 +2527,15 @@ "@chakra-ui/utils" "1.10.4" csstype "3.0.9" +"@chakra-ui/styled-system@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/styled-system/-/styled-system-2.5.1.tgz#d76f0898d5036353947bc83afb2e1c3cad3d374a" + integrity sha512-HhaXR/r5eGlC7vkoOWQ31yZEj+Aq+kFee7ZZb0fBRGKQichn06S9Ugr8CsFyzb+jNexHdtBlIcTBm0ufJ8HsFA== + dependencies: + "@chakra-ui/shared-utils" "2.0.4" + csstype "^3.0.11" + lodash.mergewith "4.6.2" + "@chakra-ui/switch@1.3.10": version "1.3.10" resolved "https://registry.yarnpkg.com/@chakra-ui/switch/-/switch-1.3.10.tgz#6b0a3f199e6e654dbab6e01ccc762e1b29611c62" @@ -1881,6 +2544,14 @@ "@chakra-ui/checkbox" "1.7.1" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/switch@2.0.19": + version "2.0.19" + resolved "https://registry.yarnpkg.com/@chakra-ui/switch/-/switch-2.0.19.tgz#dd587b818d4adf2f2845532f3bd10f485ca5882a" + integrity sha512-mXEXrTQAfGnmgAeRcVvcgC98ZaB9/WBSpfVgVKLRVuLhv5XYwhffxxZb9Zqaa3eWb9iilxi3qQUtN0g/wu2G7w== + dependencies: + "@chakra-ui/checkbox" "2.2.7" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/system@1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@chakra-ui/system/-/system-1.12.1.tgz#608655ef3f7cb82eedd8f20d2546458d90d77cce" @@ -1892,6 +2563,18 @@ "@chakra-ui/utils" "1.10.4" react-fast-compare "3.2.0" +"@chakra-ui/system@2.3.7": + version "2.3.7" + resolved "https://registry.yarnpkg.com/@chakra-ui/system/-/system-2.3.7.tgz#31e8aade0ff43288c7dfe63dfce6be72cc049779" + integrity sha512-sUmLyo+zjv+Im56slRaQA5fw04y7JuVGKgGW8xcQan+jVtMI2gGBvnecOUeNNiEWglpW/pZ/AE9rgJX9dKkrkA== + dependencies: + "@chakra-ui/color-mode" "2.1.11" + "@chakra-ui/react-utils" "2.0.11" + "@chakra-ui/styled-system" "2.5.1" + "@chakra-ui/theme-utils" "2.0.8" + "@chakra-ui/utils" "2.0.14" + react-fast-compare "3.2.0" + "@chakra-ui/table@1.3.6": version "1.3.6" resolved "https://registry.yarnpkg.com/@chakra-ui/table/-/table-1.3.6.tgz#e271676dc03cd4c684e4041df2cf394d86a28510" @@ -1899,6 +2582,14 @@ dependencies: "@chakra-ui/utils" "1.10.4" +"@chakra-ui/table@2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@chakra-ui/table/-/table-2.0.14.tgz#f2d6a4e66e1c07ffa850050bc7ff15e7ea114bbd" + integrity sha512-tiRr//5GfFnpCz4PyVgEIWBMsePAM1SWfvAJJYG2wBXNULYB/5nYmch+cJzPqZtdgL2/RuKIJINAmqVZQVddrw== + dependencies: + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/tabs@1.6.11": version "1.6.11" resolved "https://registry.yarnpkg.com/@chakra-ui/tabs/-/tabs-1.6.11.tgz#9f3f04f764cec4033711719b1bba8545038ac386" @@ -1910,6 +2601,21 @@ "@chakra-ui/react-utils" "1.2.3" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/tabs@2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/tabs/-/tabs-2.1.6.tgz#f812b4f25c1a3a193e73c51da822b501d0b6e32f" + integrity sha512-9y+ZBRSBFOvsMY8R+nmlWXqMNwokttA1cwcnjp9djsXuN+vabN8nzPcdKsoBbYUhZJp01k2Qgg3jZ46KiD9n7w== + dependencies: + "@chakra-ui/clickable" "2.0.12" + "@chakra-ui/descendant" "3.0.12" + "@chakra-ui/lazy-utils" "2.0.4" + "@chakra-ui/react-children-utils" "2.0.5" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/react-use-controllable-state" "2.0.7" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/react-use-safe-layout-effect" "2.0.4" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/tag@1.2.7": version "1.2.7" resolved "https://registry.yarnpkg.com/@chakra-ui/tag/-/tag-1.2.7.tgz#5861a92e83e63825f6fe563921d2704e921b585f" @@ -1918,6 +2624,14 @@ "@chakra-ui/icon" "2.0.5" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/tag@2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@chakra-ui/tag/-/tag-2.0.14.tgz#39962486af69e2bb548a5678095762e67e41369d" + integrity sha512-f6XU7GwTJkPDXU66Qbq8sS2i4dNb1pmeW2T1AFnzDZLI3kNLjw5B6tgW1HGr26/oq9Xu8aGNqAp0yGy9bAfeAA== + dependencies: + "@chakra-ui/icon" "3.0.14" + "@chakra-ui/react-context" "2.0.6" + "@chakra-ui/textarea@1.2.11": version "1.2.11" resolved "https://registry.yarnpkg.com/@chakra-ui/textarea/-/textarea-1.2.11.tgz#24209862cf9227d79228222b7cff2c50f7ff0add" @@ -1926,6 +2640,14 @@ "@chakra-ui/form-control" "1.6.0" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/textarea@2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@chakra-ui/textarea/-/textarea-2.0.15.tgz#f63e17aaca54cac19148b219c33ec91d2133c60c" + integrity sha512-qARh+MgeP1HSOV4oEZK5JwvQIq3gMC3kU1giMGasjsLTDjNPZiVMGpj91Z+mYB0C3IdbJhIuQCo1eM5QAL/QHg== + dependencies: + "@chakra-ui/form-control" "2.0.14" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/theme-tools@1.3.6", "@chakra-ui/theme-tools@^1.3.6": version "1.3.6" resolved "https://registry.yarnpkg.com/@chakra-ui/theme-tools/-/theme-tools-1.3.6.tgz#2e5b5c192efd685c158e940a5cedcb0eb51f8602" @@ -1934,6 +2656,25 @@ "@chakra-ui/utils" "1.10.4" "@ctrl/tinycolor" "^3.4.0" +"@chakra-ui/theme-tools@2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@chakra-ui/theme-tools/-/theme-tools-2.0.16.tgz#17caae14a61f93759f072b16c7346489eb8be643" + integrity sha512-B/LD+2LNDeHYd/LVCHIJqckVZfhrycTUpNbhRVAiDRaS0AAcsPxKas7liTFkkMkM076YjiHlcla3KpVX+E9tzg== + dependencies: + "@chakra-ui/anatomy" "2.1.1" + "@chakra-ui/shared-utils" "2.0.4" + color2k "^2.0.0" + +"@chakra-ui/theme-utils@2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@chakra-ui/theme-utils/-/theme-utils-2.0.8.tgz#e0eb3f2fb888f11e060ad42a4b14f0ecea3f2f4d" + integrity sha512-E4GT1tT5JTwsxRCgopdkLWx6oxd1lrI7DBLiwW0WxvtPmHfy5I9CB4CVnYBNHQZNXiJZyUQpCwKyGg2npGxv5Q== + dependencies: + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/styled-system" "2.5.1" + "@chakra-ui/theme" "2.2.4" + lodash.mergewith "4.6.2" + "@chakra-ui/theme@1.14.1": version "1.14.1" resolved "https://registry.yarnpkg.com/@chakra-ui/theme/-/theme-1.14.1.tgz#84ce1643d4d7c89509e714ac989bcf8acd5578b8" @@ -1943,6 +2684,15 @@ "@chakra-ui/theme-tools" "1.3.6" "@chakra-ui/utils" "1.10.4" +"@chakra-ui/theme@2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/theme/-/theme-2.2.4.tgz#69948ebf19ae1387b9e5022aca1e58c881658b77" + integrity sha512-zo1FBfkJBsvpOGGByRB4aEvekdeT/9BB7Lz3rAluKkC+Wo8yce1tTSlvPMpf2f4lsEI8zVid5ATQ6u3+kIFg4w== + dependencies: + "@chakra-ui/anatomy" "2.1.1" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/theme-tools" "2.0.16" + "@chakra-ui/toast@1.5.9": version "1.5.9" resolved "https://registry.yarnpkg.com/@chakra-ui/toast/-/toast-1.5.9.tgz#45521dc521186ce88aad07a3796545d15a6f9697" @@ -1956,6 +2706,20 @@ "@chakra-ui/utils" "1.10.4" "@reach/alert" "0.13.2" +"@chakra-ui/toast@4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@chakra-ui/toast/-/toast-4.0.8.tgz#578b34a0916afa891ddde9317e4c2d83d1a4832d" + integrity sha512-g50kEZvrApkcNdm9ssccE9YYFsPMwTWz5IwUEFBJ2iSrEaTz5rikq/F2CP+oRu2vq22RPvczoOUnSaXE8GRzww== + dependencies: + "@chakra-ui/alert" "2.0.14" + "@chakra-ui/close-button" "2.0.14" + "@chakra-ui/portal" "2.0.13" + "@chakra-ui/react-use-timeout" "2.0.4" + "@chakra-ui/react-use-update-effect" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/styled-system" "2.5.1" + "@chakra-ui/theme" "2.2.4" + "@chakra-ui/tooltip@1.5.1": version "1.5.1" resolved "https://registry.yarnpkg.com/@chakra-ui/tooltip/-/tooltip-1.5.1.tgz#c338476aa0f00fc89f6357bc22725329f90d8d5d" @@ -1968,6 +2732,19 @@ "@chakra-ui/utils" "1.10.4" "@chakra-ui/visually-hidden" "1.1.6" +"@chakra-ui/tooltip@2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/tooltip/-/tooltip-2.2.4.tgz#41ac464d99da49c4a6217c02793f063c6d24152d" + integrity sha512-KUEsSjIwTyFvdixWg3jVUcpaiAfMddRxiuxnsKcFVv8H5dZF75tstaq8iAHY+pueh6CRmIvO2Oh7XWiAYA/LJA== + dependencies: + "@chakra-ui/popper" "3.0.11" + "@chakra-ui/portal" "2.0.13" + "@chakra-ui/react-types" "2.0.6" + "@chakra-ui/react-use-disclosure" "2.0.7" + "@chakra-ui/react-use-event-listener" "2.0.6" + "@chakra-ui/react-use-merge-refs" "2.0.6" + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/transition@1.4.8": version "1.4.8" resolved "https://registry.yarnpkg.com/@chakra-ui/transition/-/transition-1.4.8.tgz#ac0f4675da929ae69fc9d6db6a1edf61e982772c" @@ -1975,6 +2752,13 @@ dependencies: "@chakra-ui/utils" "1.10.4" +"@chakra-ui/transition@2.0.13": + version "2.0.13" + resolved "https://registry.yarnpkg.com/@chakra-ui/transition/-/transition-2.0.13.tgz#54da88debdd528c2d41f04809e3b9448106e274f" + integrity sha512-vpzK5HN91eDLkBEdaO6GTCJOYgJYHlmxCAym/tScBuWM2ALZ4mWu57qWgPptgGv+IpMfuvL1t+IVqPgyWwEQFw== + dependencies: + "@chakra-ui/shared-utils" "2.0.4" + "@chakra-ui/utils@1.10.4", "@chakra-ui/utils@^1.10.4": version "1.10.4" resolved "https://registry.yarnpkg.com/@chakra-ui/utils/-/utils-1.10.4.tgz#40a32d4efd8684b2e7432a40b285796383eacfd3" @@ -1985,6 +2769,16 @@ framesync "5.3.0" lodash.mergewith "4.6.2" +"@chakra-ui/utils@2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@chakra-ui/utils/-/utils-2.0.14.tgz#b6776c7a020ea46ed88a8048dfa2b512a1fe95f7" + integrity sha512-vYxtAUPY09Ex2Ae2ZvQKA1d2+lMKq/wUaRiqpwmeLfutEQuPQZc3qzQcAIMRQx3wLgXr9BUFDtHgBoOz0XKtZw== + dependencies: + "@types/lodash.mergewith" "4.6.6" + css-box-model "1.2.1" + framesync "6.1.2" + lodash.mergewith "4.6.2" + "@chakra-ui/visually-hidden@1.1.6": version "1.1.6" resolved "https://registry.yarnpkg.com/@chakra-ui/visually-hidden/-/visually-hidden-1.1.6.tgz#7a546a5aebe4779c8f18d65b1f0e56249720f28d" @@ -1992,6 +2786,11 @@ dependencies: "@chakra-ui/utils" "1.10.4" +"@chakra-ui/visually-hidden@2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@chakra-ui/visually-hidden/-/visually-hidden-2.0.14.tgz#c54feca28e8110a1d92ba2c718272931d0e181e2" + integrity sha512-/evqTuCeN3laukL1BPZO8HTzgs+dzq0v6gu/MJFgiSAKGLfInn0/IStKGK2vIluuCtJIgaHVdKcJzr+7sJhd0Q== + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -2111,6 +2910,24 @@ source-map "^0.5.7" stylis "4.0.13" +"@emotion/babel-plugin@^11.10.5": + version "11.10.5" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz#65fa6e1790ddc9e23cc22658a4c5dea423c55c3c" + integrity sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.17.12" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/serialize" "^1.1.1" + babel-plugin-macros "^3.1.0" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.1.3" + "@emotion/cache@^11.10.0": version "11.10.3" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.3.tgz#c4f67904fad10c945fea5165c3a5a0583c164b87" @@ -2122,15 +2939,26 @@ "@emotion/weak-memoize" "^0.3.0" stylis "4.0.13" -"@emotion/css@^11.7.1": - version "11.10.0" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-11.10.0.tgz#270b4fdf2419e59cb07081d0e9f7940d88b8b443" - integrity sha512-dH9f+kSCucc8ilMg0MUA1AemabcyzYpe5EKX24F528PJjD7HyIY/VBNJHxfUdc8l400h2ncAjR6yEDu+DBj2cg== +"@emotion/cache@^11.10.5": + version "11.10.5" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.5.tgz#c142da9351f94e47527ed458f7bbbbe40bb13c12" + integrity sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA== dependencies: - "@emotion/babel-plugin" "^11.10.0" - "@emotion/cache" "^11.10.0" - "@emotion/serialize" "^1.1.0" - "@emotion/sheet" "^1.2.0" + "@emotion/memoize" "^0.8.0" + "@emotion/sheet" "^1.2.1" + "@emotion/utils" "^1.2.0" + "@emotion/weak-memoize" "^0.3.0" + stylis "4.1.3" + +"@emotion/css@^11.7.1": + version "11.10.5" + resolved "https://registry.yarnpkg.com/@emotion/css/-/css-11.10.5.tgz#ca01bb83ce60517bc3a5c01d27ccf552fed84d9d" + integrity sha512-maJy0wG82hWsiwfJpc3WrYsyVwUbdu+sdIseKUB+/OLjB8zgc3tqkT6eO0Yt0AhIkJwGGnmMY/xmQwEAgQ4JHA== + dependencies: + "@emotion/babel-plugin" "^11.10.5" + "@emotion/cache" "^11.10.5" + "@emotion/serialize" "^1.1.1" + "@emotion/sheet" "^1.2.1" "@emotion/utils" "^1.2.0" "@emotion/hash@^0.9.0": @@ -2162,7 +2990,7 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== -"@emotion/react@^11.8.2": +"@emotion/react@^11": version "11.10.4" resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.4.tgz#9dc6bccbda5d70ff68fdb204746c0e8b13a79199" integrity sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA== @@ -2176,6 +3004,20 @@ "@emotion/weak-memoize" "^0.3.0" hoist-non-react-statics "^3.3.1" +"@emotion/react@^11.8.2": + version "11.10.5" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.5.tgz#95fff612a5de1efa9c0d535384d3cfa115fe175d" + integrity sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.10.5" + "@emotion/cache" "^11.10.5" + "@emotion/serialize" "^1.1.1" + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" + "@emotion/utils" "^1.2.0" + "@emotion/weak-memoize" "^0.3.0" + hoist-non-react-statics "^3.3.1" + "@emotion/serialize@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.0.tgz#b1f97b1011b09346a40e9796c37a3397b4ea8ea8" @@ -2187,11 +3029,27 @@ "@emotion/utils" "^1.2.0" csstype "^3.0.2" +"@emotion/serialize@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0" + integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA== + dependencies: + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/unitless" "^0.8.0" + "@emotion/utils" "^1.2.0" + csstype "^3.0.2" + "@emotion/sheet@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.0.tgz#771b1987855839e214fc1741bde43089397f7be5" integrity sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w== +"@emotion/sheet@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c" + integrity sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA== + "@emotion/styled@^11": version "11.10.4" resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.10.4.tgz#e93f84a4d54003c2acbde178c3f97b421fce1cd4" @@ -2621,6 +3479,129 @@ package-json-validator "^0.6.3" requireindex "^1.2.0" +"@motionone/animation@^10.12.0": + version "10.15.1" + resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.15.1.tgz#4a85596c31cbc5100ae8eb8b34c459fb0ccf6807" + integrity sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ== + dependencies: + "@motionone/easing" "^10.15.1" + "@motionone/types" "^10.15.1" + "@motionone/utils" "^10.15.1" + tslib "^2.3.1" + +"@motionone/dom@10.12.0": + version "10.12.0" + resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.12.0.tgz#ae30827fd53219efca4e1150a5ff2165c28351ed" + integrity sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw== + dependencies: + "@motionone/animation" "^10.12.0" + "@motionone/generators" "^10.12.0" + "@motionone/types" "^10.12.0" + "@motionone/utils" "^10.12.0" + hey-listen "^1.0.8" + tslib "^2.3.1" + +"@motionone/easing@^10.15.1": + version "10.15.1" + resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.15.1.tgz#95cf3adaef34da6deebb83940d8143ede3deb693" + integrity sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw== + dependencies: + "@motionone/utils" "^10.15.1" + tslib "^2.3.1" + +"@motionone/generators@^10.12.0": + version "10.15.1" + resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.15.1.tgz#dc6abb11139d1bafe758a41c134d4c753a9b871c" + integrity sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ== + dependencies: + "@motionone/types" "^10.15.1" + "@motionone/utils" "^10.15.1" + tslib "^2.3.1" + +"@motionone/types@^10.12.0", "@motionone/types@^10.15.1": + version "10.15.1" + resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.15.1.tgz#89441b54285012795cbba8612cbaa0fa420db3eb" + integrity sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA== + +"@motionone/utils@^10.12.0", "@motionone/utils@^10.15.1": + version "10.15.1" + resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.15.1.tgz#6b5f51bde75be88b5411e084310299050368a438" + integrity sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw== + dependencies: + "@motionone/types" "^10.15.1" + hey-listen "^1.0.8" + tslib "^2.3.1" + +"@next/env@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/env/-/env-12.3.1.tgz#18266bd92de3b4aa4037b1927aa59e6f11879260" + integrity sha512-9P9THmRFVKGKt9DYqeC2aKIxm8rlvkK38V1P1sRE7qyoPBIs8l9oo79QoSdPtOWfzkbDAVUqvbQGgTMsb8BtJg== + +"@next/swc-android-arm-eabi@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.1.tgz#b15ce8ad376102a3b8c0f3c017dde050a22bb1a3" + integrity sha512-i+BvKA8tB//srVPPQxIQN5lvfROcfv4OB23/L1nXznP+N/TyKL8lql3l7oo2LNhnH66zWhfoemg3Q4VJZSruzQ== + +"@next/swc-android-arm64@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.3.1.tgz#85d205f568a790a137cb3c3f720d961a2436ac9c" + integrity sha512-CmgU2ZNyBP0rkugOOqLnjl3+eRpXBzB/I2sjwcGZ7/Z6RcUJXK5Evz+N0ucOxqE4cZ3gkTeXtSzRrMK2mGYV8Q== + +"@next/swc-darwin-arm64@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.1.tgz#b105457d6760a7916b27e46c97cb1a40547114ae" + integrity sha512-hT/EBGNcu0ITiuWDYU9ur57Oa4LybD5DOQp4f22T6zLfpoBMfBibPtR8XktXmOyFHrL/6FC2p9ojdLZhWhvBHg== + +"@next/swc-darwin-x64@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.1.tgz#6947b39082271378896b095b6696a7791c6e32b1" + integrity sha512-9S6EVueCVCyGf2vuiLiGEHZCJcPAxglyckTZcEwLdJwozLqN0gtS0Eq0bQlGS3dH49Py/rQYpZ3KVWZ9BUf/WA== + +"@next/swc-freebsd-x64@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.1.tgz#2b6c36a4d84aae8b0ea0e0da9bafc696ae27085a" + integrity sha512-qcuUQkaBZWqzM0F1N4AkAh88lLzzpfE6ImOcI1P6YeyJSsBmpBIV8o70zV+Wxpc26yV9vpzb+e5gCyxNjKJg5Q== + +"@next/swc-linux-arm-gnueabihf@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.1.tgz#6e421c44285cfedac1f4631d5de330dd60b86298" + integrity sha512-diL9MSYrEI5nY2wc/h/DBewEDUzr/DqBjIgHJ3RUNtETAOB3spMNHvJk2XKUDjnQuluLmFMloet9tpEqU2TT9w== + +"@next/swc-linux-arm64-gnu@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.1.tgz#8863f08a81f422f910af126159d2cbb9552ef717" + integrity sha512-o/xB2nztoaC7jnXU3Q36vGgOolJpsGG8ETNjxM1VAPxRwM7FyGCPHOMk1XavG88QZSQf+1r+POBW0tLxQOJ9DQ== + +"@next/swc-linux-arm64-musl@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.1.tgz#0038f07cf0b259d70ae0c80890d826dfc775d9f3" + integrity sha512-2WEasRxJzgAmP43glFNhADpe8zB7kJofhEAVNbDJZANp+H4+wq+/cW1CdDi8DqjkShPEA6/ejJw+xnEyDID2jg== + +"@next/swc-linux-x64-gnu@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.1.tgz#c66468f5e8181ffb096c537f0dbfb589baa6a9c1" + integrity sha512-JWEaMyvNrXuM3dyy9Pp5cFPuSSvG82+yABqsWugjWlvfmnlnx9HOQZY23bFq3cNghy5V/t0iPb6cffzRWylgsA== + +"@next/swc-linux-x64-musl@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.1.tgz#c6269f3e96ac0395bc722ad97ce410ea5101d305" + integrity sha512-xoEWQQ71waWc4BZcOjmatuvPUXKTv6MbIFzpm4LFeCHsg2iwai0ILmNXf81rJR+L1Wb9ifEke2sQpZSPNz1Iyg== + +"@next/swc-win32-arm64-msvc@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.1.tgz#83c639ee969cee36ce247c3abd1d9df97b5ecade" + integrity sha512-hswVFYQYIeGHE2JYaBVtvqmBQ1CppplQbZJS/JgrVI3x2CurNhEkmds/yqvDONfwfbttTtH4+q9Dzf/WVl3Opw== + +"@next/swc-win32-ia32-msvc@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.1.tgz#52995748b92aa8ad053440301bc2c0d9fbcf27c2" + integrity sha512-Kny5JBehkTbKPmqulr5i+iKntO5YMP+bVM8Hf8UAmjSMVo3wehyLVc9IZkNmcbxi+vwETnQvJaT5ynYBkJ9dWA== + +"@next/swc-win32-x64-msvc@12.3.1": + version "12.3.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.1.tgz#27d71a95247a9eaee03d47adee7e3bd594514136" + integrity sha512-W1ijvzzg+kPEX6LAc+50EYYSEo0FVu7dmTE+t+DM4iOLqgGHoW9uYSz9wCVdkXOEEMP9xhXfGpcSxsfDucyPkA== + "@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": version "2.1.8-no-fsevents.3" resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" @@ -3204,6 +4185,48 @@ dependencies: "@octokit/openapi-types" "^12.11.0" +"@player-ui/asset-provider-plugin-react@0.4.0-next.7": + version "0.4.0-next.7" + resolved "https://registry.yarnpkg.com/@player-ui/asset-provider-plugin-react/-/asset-provider-plugin-react-0.4.0-next.7.tgz#acbfa00e7b7e18d0f4e8b7dd470c6062dc14b026" + integrity sha512-akVXnUz/BZCYA44/8AcXapk6dAmmpP42yI2kLqEWmmJzRkZuJCzFXAHJQtYW3Ze+VGAHTI6nOreMb1d/7pUHdQ== + dependencies: + "@babel/runtime" "7.15.4" + "@player-ui/react-subscribe" "0.4.0-next.7" + +"@player-ui/asset-transform-plugin@0.4.0-next.7": + version "0.4.0-next.7" + resolved "https://registry.yarnpkg.com/@player-ui/asset-transform-plugin/-/asset-transform-plugin-0.4.0-next.7.tgz#dd1b924090502455a19490e9044ff0fd15ded706" + integrity sha512-wnqOelWSHJ+wJI8EoNIKyNGc4KNQSBDLo1nXuyoxpDFPLOsorzKWLAkp+PIEMRjKiRd8q5AnQV9DNINaK8CaSA== + dependencies: + "@babel/runtime" "7.15.4" + "@player-ui/partial-match-registry" "0.4.0-next.7" + +"@player-ui/beacon-plugin-react@0.4.0-next.7": + version "0.4.0-next.7" + resolved "https://registry.yarnpkg.com/@player-ui/beacon-plugin-react/-/beacon-plugin-react-0.4.0-next.7.tgz#1978113a5b2ac588b6ba04c6f4268ca783c2c548" + integrity sha512-Yqk6WjQiOs0wCqSiJpbVT0keQ5xRdcXMW3ftShCijNJipjKb6/bVm01p+nYojmQkyeu5Hh4gMtL4v6Pw+7kgeg== + dependencies: + "@babel/runtime" "7.15.4" + "@player-ui/beacon-plugin" "0.4.0-next.7" + +"@player-ui/beacon-plugin@0.4.0-next.7": + version "0.4.0-next.7" + resolved "https://registry.yarnpkg.com/@player-ui/beacon-plugin/-/beacon-plugin-0.4.0-next.7.tgz#1ff27b0a0d61766ee2d338e40c193bcd76c70b25" + integrity sha512-X640KpKXNKAZmxeEMYDBKqdv+5jlcmndwShbUpcI6rDl8Ve7A0MDc5Fdzygk8P8qDOZNpd902zuJxqO77RFOAA== + dependencies: + "@babel/runtime" "7.15.4" + tapable-ts "^0.2.3" + timm "^1.6.2" + +"@player-ui/metrics-plugin@0.4.0-next.7": + version "0.4.0-next.7" + resolved "https://registry.yarnpkg.com/@player-ui/metrics-plugin/-/metrics-plugin-0.4.0-next.7.tgz#d72868e729d0fd3eeb4e53aac4d115dee3f088bc" + integrity sha512-elkqC0TAvacnCW8ASm822+rbUARIXsWu5eS2UUXFgThWGMvnB3uLP1YW6C8xN8iJKn+KACFoW9VgzMMvii8EuQ== + dependencies: + "@babel/runtime" "7.15.4" + "@player-ui/beacon-plugin" "0.4.0-next.7" + tapable-ts "^0.2.3" + "@player-ui/partial-match-registry@0.4.0-next.7": version "0.4.0-next.7" resolved "https://registry.yarnpkg.com/@player-ui/partial-match-registry/-/partial-match-registry-0.4.0-next.7.tgz#579710d4cee77c8a75dfda02b3c2f74652e56dfa" @@ -3235,6 +4258,50 @@ tapable-ts "^0.2.3" timm "^1.6.2" +"@player-ui/react-subscribe@0.4.0-next.7": + version "0.4.0-next.7" + resolved "https://registry.yarnpkg.com/@player-ui/react-subscribe/-/react-subscribe-0.4.0-next.7.tgz#0d8a970b36565c94b5ebe6ec7d5de7f39bd59110" + integrity sha512-Uj57GvUXTncjpWeeye17+nrtLi202lKUNrPUNbPGugR8lHrF9rG27IIJGhvy3yvKuOCnLhezFMwkqvrZ/Q2wMQ== + dependencies: + "@babel/runtime" "7.15.4" + p-defer "^3.0.0" + +"@player-ui/react@0.4.0-next.7": + version "0.4.0-next.7" + resolved "https://registry.yarnpkg.com/@player-ui/react/-/react-0.4.0-next.7.tgz#f6ebb04696b339c30fd91626b090f9948176cde0" + integrity sha512-2qydHYl/0UrA7UEm5dShGxGoSpvUuuiUbrOMff3Dy2fAeRvxvLEj1wWsDAatHZSCyHDhaEj/ejjx1HaeCifrMQ== + dependencies: + "@babel/runtime" "7.15.4" + "@player-ui/metrics-plugin" "0.4.0-next.7" + "@player-ui/partial-match-registry" "0.4.0-next.7" + "@player-ui/player" "0.4.0-next.7" + "@player-ui/react-subscribe" "0.4.0-next.7" + react-error-boundary "^3.1.3" + tapable-ts "^0.2.3" + +"@player-ui/reference-assets-plugin-react@0.4.0-next.7": + version "0.4.0-next.7" + resolved "https://registry.yarnpkg.com/@player-ui/reference-assets-plugin-react/-/reference-assets-plugin-react-0.4.0-next.7.tgz#01de5eb2a0931816e60a06e9ca9b0e7ce184ef9b" + integrity sha512-PZ4y/KEw5428SjFoKlGhGNYNMrJ+iwfsB+cPdI/lj30gv7urJ35oumgaI2WziejUdhmzLrIL3xq6nRMmLhYALQ== + dependencies: + "@babel/runtime" "7.15.4" + "@chakra-ui/icons" "^1.1.1" + "@chakra-ui/react" "^1.7.3" + "@player-ui/asset-provider-plugin-react" "0.4.0-next.7" + "@player-ui/beacon-plugin-react" "0.4.0-next.7" + "@player-ui/partial-match-registry" "0.4.0-next.7" + "@player-ui/reference-assets-plugin" "0.4.0-next.7" + clsx "^1.1.1" + +"@player-ui/reference-assets-plugin@0.4.0-next.7": + version "0.4.0-next.7" + resolved "https://registry.yarnpkg.com/@player-ui/reference-assets-plugin/-/reference-assets-plugin-0.4.0-next.7.tgz#0dd7c3973dc68deb3237fac148b06bd0df742d73" + integrity sha512-BFF/R3Fnr3SiiLdSHI/XqdTOoYsT1o5cgxHHaySSwRnw3IcDTKlwCHjW7S4FQPUoY++aV6A5uLG/ChDDdJETNA== + dependencies: + "@babel/runtime" "7.15.4" + "@player-ui/asset-transform-plugin" "0.4.0-next.7" + "@player-ui/beacon-plugin" "0.4.0-next.7" + "@player-ui/types@0.4.0-next.7": version "0.4.0-next.7" resolved "https://registry.yarnpkg.com/@player-ui/types/-/types-0.4.0-next.7.tgz#efe9daba706ca750b34680ca94a97d41bd3782c6" @@ -3368,15 +4435,30 @@ prop-types "^15.7.2" tslib "^2.1.0" +"@react-dnd/asap@^5.0.1": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@react-dnd/asap/-/asap-5.0.2.tgz#1f81f124c1cd6f39511c11a881cfb0f715343488" + integrity sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A== + +"@react-dnd/invariant@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@react-dnd/invariant/-/invariant-4.0.2.tgz#b92edffca10a26466643349fac7cdfb8799769df" + integrity sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw== + +"@react-dnd/shallowequal@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@react-dnd/shallowequal/-/shallowequal-4.0.2.tgz#d1b4befa423f692fa4abf1c79209702e7d8ae4b4" + integrity sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA== + "@reduxjs/toolkit@^1.6.1": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.8.6.tgz#147fb7957befcdb75bc9c1230db63628e30e4332" - integrity sha512-4Ia/Loc6WLmdSOzi7k5ff7dLK8CgG2b8aqpLsCAJhazAzGdp//YBUSaj0ceW6a3kDBDNRrq5CRwyCS0wBiL1ig== + version "1.9.0" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.0.tgz#76b264fcea677d256b18f86cc77e00743a9e02b0" + integrity sha512-ak11IrjYcUXRqlhNPwnz6AcvA2ynJTu8PzDbbqQw4a3xR4KZtgiqbNblQD+10CRbfK4+5C79SOyxnT9dhBqFnA== dependencies: - immer "^9.0.7" - redux "^4.1.2" - redux-thunk "^2.4.1" - reselect "^4.1.5" + immer "^9.0.16" + redux "^4.2.0" + redux-thunk "^2.4.2" + reselect "^4.1.7" "@rollup/plugin-image@^2.1.1": version "2.1.1" @@ -3441,6 +4523,13 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@swc/helpers@0.4.11": + version "0.4.11" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.11.tgz#db23a376761b3d31c26502122f349a21b592c8de" + integrity sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw== + dependencies: + tslib "^2.4.0" + "@testing-library/dom@^8.0.0", "@testing-library/dom@^8.10.1": version "8.18.1" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.18.1.tgz#80f91be02bc171fe5a3a7003f88207be31ac2cf3" @@ -3857,19 +4946,10 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@>=16.9.0", "@types/react@^17", "@types/react@^17.0.25": - version "17.0.50" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.50.tgz#39abb4f7098f546cfcd6b51207c90c4295ee81fc" - integrity sha512-ZCBHzpDb5skMnc1zFXAXnL3l1FAdi+xZvwxK+PkglMmBrwjpp9nKaWuEvrGnSifCJmBFGxZOOFuwC6KH/s0NuA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/react@17.0.39": - version "17.0.39" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.39.tgz#d0f4cde092502a6db00a1cded6e6bf2abb7633ce" - integrity sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug== +"@types/react@*", "@types/react@17.0.39", "@types/react@>=16.9.0", "@types/react@^17", "@types/react@^17.0.15", "@types/react@^18.0.27": + version "18.0.27" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.27.tgz#d9425abe187a00f8a5ec182b010d4fd9da703b71" + integrity sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -4307,6 +5387,16 @@ resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== +"@zag-js/element-size@0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@zag-js/element-size/-/element-size-0.3.0.tgz#1c0ab23c9ada453f5778c4baf1eed46218dc9e85" + integrity sha512-5/hEI+0c6ZNCx6KHlOS5/WeHsd6+I7gk7Y/b/zATp4Rp3tHirs/tu1frq+iy5BmfaG9hbQtfHfUJTjOcI5jnoQ== + +"@zag-js/focus-visible@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@zag-js/focus-visible/-/focus-visible-0.2.1.tgz#bf4f1009f4fd35a9728dfaa9214d8cb318fe8b1e" + integrity sha512-19uTjoZGP4/Ax7kSNhhay9JA83BirKzpqLkeEAilrpdI1hE5xuq6q+tzJOsrMOOqJrm7LkmZp5lbsTQzvK2pYg== + JSONStream@^1.2.1, JSONStream@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -5517,6 +6607,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001400: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz#5f1715e506e71860b4b07c50060ea6462217611e" integrity sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg== +caniuse-lite@^1.0.30001406: + version "1.0.30001458" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001458.tgz#871e35866b4654a7d25eccca86864f411825540c" + integrity sha512-lQ1VlUUq5q9ro9X+5gOEyH7i3vm+AYVT1WDCVB69XOZ17KZRhnZ9J0Sqz7wTHQaLBJccNCHq8/Ww5LlOIZbB0w== + capability@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/capability/-/capability-0.2.5.tgz#51ad87353f1936ffd77f2f21c74633a4dea88801" @@ -5923,7 +7018,7 @@ clsx@1.1.0: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.0.tgz#62937c6adfea771247c34b54d320fb99624f5702" integrity sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA== -clsx@^1.0.4: +clsx@^1.0.4, clsx@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== @@ -5987,6 +7082,11 @@ color-support@^1.1.2, color-support@^1.1.3: resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== +color2k@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/color2k/-/color2k-2.0.0.tgz#86992c82e248c29f524023ed0822bc152c4fa670" + integrity sha512-DWX9eXOC4fbJNiuvdH4QSHvvfLWyFo9TuFp7V9OzdsbPAdrWAuYc8qvFP2bIQ/LKh4LrAVnJ6vhiQYPvAHdtTg== + colord@^2.9.1: version "2.9.3" resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" @@ -6255,9 +7355,9 @@ copy-to-clipboard@3.3.1: toggle-selection "^1.0.6" copy-to-clipboard@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.2.tgz#5b263ec2366224b100181dded7ce0579b340c107" - integrity sha512-Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg== + version "3.3.3" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== dependencies: toggle-selection "^1.0.6" @@ -6552,7 +7652,7 @@ csstype@3.0.9: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.9.tgz#6410af31b26bd0520933d02cbc64fce9ce3fbf0b" integrity sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw== -csstype@^3.0.2: +csstype@^3.0.11, csstype@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== @@ -6891,6 +7991,15 @@ dlv@^1.1.3: resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== +dnd-core@^16.0.1: + version "16.0.1" + resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-16.0.1.tgz#a1c213ed08961f6bd1959a28bb76f1a868360d19" + integrity sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng== + dependencies: + "@react-dnd/asap" "^5.0.1" + "@react-dnd/invariant" "^4.0.1" + redux "^4.2.0" + doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -8445,6 +9554,13 @@ flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: inherits "^2.0.3" readable-stream "^2.3.6" +focus-lock@^0.11.2: + version "0.11.3" + resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.11.3.tgz#c094e8f109d780f56038abdeec79328fd56b627f" + integrity sha512-4n0pYcPTa/uI7Q66BZna61nRT7lDhnuJ9PJr6wiDjx4uStg491ks41y7uOG+s0umaaa+hulNKSldU9aTg9/yVg== + dependencies: + tslib "^2.0.3" + focus-lock@^0.8.0: version "0.8.1" resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.8.1.tgz#bb36968abf77a2063fa173cb6c47b12ac8599d33" @@ -8515,15 +9631,16 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -framer-motion@^4: - version "4.1.17" - resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-4.1.17.tgz#4029469252a62ea599902e5a92b537120cc89721" - integrity sha512-thx1wvKzblzbs0XaK2X0G1JuwIdARcoNOW7VVwjO8BUltzXPyONGAElLu6CiCScsOQRI7FIk/45YTFtJw5Yozw== +framer-motion@^6: + version "6.5.1" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-6.5.1.tgz#802448a16a6eb764124bf36d8cbdfa6dd6b931a7" + integrity sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw== dependencies: - framesync "5.3.0" + "@motionone/dom" "10.12.0" + framesync "6.0.1" hey-listen "^1.0.8" - popmotion "9.3.6" - style-value-types "4.1.4" + popmotion "11.0.3" + style-value-types "5.0.0" tslib "^2.1.0" optionalDependencies: "@emotion/is-prop-valid" "^0.8.2" @@ -8535,6 +9652,20 @@ framesync@5.3.0: dependencies: tslib "^2.1.0" +framesync@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/framesync/-/framesync-6.0.1.tgz#5e32fc01f1c42b39c654c35b16440e07a25d6f20" + integrity sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA== + dependencies: + tslib "^2.1.0" + +framesync@6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/framesync/-/framesync-6.1.2.tgz#755eff2fb5b8f3b4d2b266dd18121b300aefea27" + integrity sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g== + dependencies: + tslib "2.4.0" + fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -9356,11 +10487,16 @@ image-size@^0.6.0: resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" integrity sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA== -immer@^9.0.12, immer@^9.0.7: +immer@^9.0.12: version "9.0.15" resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.15.tgz#0b9169e5b1d22137aba7d43f8a81a495dd1b62dc" integrity sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ== +immer@^9.0.16: + version "9.0.16" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.16.tgz#8e7caab80118c2b54b37ad43e05758cdefad0198" + integrity sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ== + import-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" @@ -11995,6 +13131,32 @@ netrc-parser@^3.1.6: debug "^3.1.0" execa "^0.10.0" +next@^12.0.7: + version "12.3.1" + resolved "https://registry.yarnpkg.com/next/-/next-12.3.1.tgz#127b825ad2207faf869b33393ec8c75fe61e50f1" + integrity sha512-l7bvmSeIwX5lp07WtIiP9u2ytZMv7jIeB8iacR28PuUEFG5j0HGAPnMqyG5kbZNBG2H7tRsrQ4HCjuMOPnANZw== + dependencies: + "@next/env" "12.3.1" + "@swc/helpers" "0.4.11" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.0.7" + use-sync-external-store "1.2.0" + optionalDependencies: + "@next/swc-android-arm-eabi" "12.3.1" + "@next/swc-android-arm64" "12.3.1" + "@next/swc-darwin-arm64" "12.3.1" + "@next/swc-darwin-x64" "12.3.1" + "@next/swc-freebsd-x64" "12.3.1" + "@next/swc-linux-arm-gnueabihf" "12.3.1" + "@next/swc-linux-arm64-gnu" "12.3.1" + "@next/swc-linux-arm64-musl" "12.3.1" + "@next/swc-linux-x64-gnu" "12.3.1" + "@next/swc-linux-x64-musl" "12.3.1" + "@next/swc-win32-arm64-msvc" "12.3.1" + "@next/swc-win32-ia32-msvc" "12.3.1" + "@next/swc-win32-x64-msvc" "12.3.1" + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -13032,14 +14194,14 @@ please-upgrade-node@^3.2.0: dependencies: semver-compare "^1.0.0" -popmotion@9.3.6: - version "9.3.6" - resolved "https://registry.yarnpkg.com/popmotion/-/popmotion-9.3.6.tgz#b5236fa28f242aff3871b9e23721f093133248d1" - integrity sha512-ZTbXiu6zIggXzIliMi8LGxXBF5ST+wkpXGEjeTUDUOCdSQ356hij/xjeUdv0F8zCQNeqB1+PR5/BB+gC+QLAPw== +popmotion@11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/popmotion/-/popmotion-11.0.3.tgz#565c5f6590bbcddab7a33a074bb2ba97e24b0cc9" + integrity sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA== dependencies: - framesync "5.3.0" + framesync "6.0.1" hey-listen "^1.0.8" - style-value-types "4.1.4" + style-value-types "5.0.0" tslib "^2.1.0" posix-character-classes@^0.1.0: @@ -13318,6 +14480,15 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== +postcss@8.4.14: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + postcss@^7.0.14, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: version "7.0.39" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" @@ -13682,7 +14853,7 @@ rc@^1.2.7, rc@^1.2.8, rc@~1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-clientside-effect@^1.2.5: +react-clientside-effect@^1.2.5, react-clientside-effect@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz#29f9b14e944a376b03fb650eed2a754dd128ea3a" integrity sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg== @@ -13702,19 +14873,36 @@ react-color@^2.19.3: reactcss "^1.2.0" tinycolor2 "^1.4.1" +react-dnd-html5-backend@^16.0.1: + version "16.0.1" + resolved "https://registry.yarnpkg.com/react-dnd-html5-backend/-/react-dnd-html5-backend-16.0.1.tgz#87faef15845d512a23b3c08d29ecfd34871688b6" + integrity sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw== + dependencies: + dnd-core "^16.0.1" + +react-dnd@^16.0.1: + version "16.0.1" + resolved "https://registry.yarnpkg.com/react-dnd/-/react-dnd-16.0.1.tgz#2442a3ec67892c60d40a1559eef45498ba26fa37" + integrity sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q== + dependencies: + "@react-dnd/invariant" "^4.0.1" + "@react-dnd/shallowequal" "^4.0.1" + dnd-core "^16.0.1" + fast-deep-equal "^3.1.3" + hoist-non-react-statics "^3.3.2" + react-docgen-typescript@^2.1.1: version "2.2.2" resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz#4611055e569edc071204aadb20e1c93e1ab1659c" integrity sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg== -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + scheduler "^0.23.0" react-element-to-jsx-string@^14.3.4: version "14.3.4" @@ -13737,6 +14925,11 @@ react-fast-compare@3.2.0: resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== +react-files@^3.0.0-alpha.3: + version "3.0.0-alpha.3" + resolved "https://registry.yarnpkg.com/react-files/-/react-files-3.0.0-alpha.3.tgz#252cf1bc5809f21fd0f436d6d0cb423a9db12bcd" + integrity sha512-o5px0uPlktbgQlBXVP8cjOQIQI2N6mnhzlFosElb+J7ENI0hWbj+8R8c9siay1XRtRqIdN0UCvObdTkzkl8LKA== + react-flame-graph@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/react-flame-graph/-/react-flame-graph-1.4.0.tgz#52d118cc94348f630a812fc0ec530a5b73c30cdb" @@ -13763,6 +14956,18 @@ react-focus-lock@2.5.2: use-callback-ref "^1.2.5" use-sidecar "^1.0.5" +react-focus-lock@^2.9.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.9.1.tgz#094cfc19b4f334122c73bb0bff65d77a0c92dd16" + integrity sha512-pSWOQrUmiKLkffPO6BpMXN7SNKXMsuOakl652IBuALAu1esk+IcpJyM+ALcYzPTTFz1rD0R54aB9A4HuP5t1Wg== + dependencies: + "@babel/runtime" "^7.0.0" + focus-lock "^0.11.2" + prop-types "^15.6.2" + react-clientside-effect "^1.2.6" + use-callback-ref "^1.3.0" + use-sidecar "^1.1.2" + react-icons@^4.3.1: version "4.4.0" resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.4.0.tgz#a13a8a20c254854e1ec9aecef28a95cdf24ef703" @@ -13825,7 +15030,7 @@ react-refresh@^0.4.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53" integrity sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA== -react-remove-scroll-bar@^2.1.0: +react-remove-scroll-bar@^2.1.0, react-remove-scroll-bar@^2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz#53e272d7a5cb8242990c7f144c44d8bd8ab5afd9" integrity sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A== @@ -13844,6 +15049,17 @@ react-remove-scroll@2.4.1: use-callback-ref "^1.2.3" use-sidecar "^1.0.1" +react-remove-scroll@^2.5.4: + version "2.5.5" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz#1e31a1260df08887a8a0e46d09271b52b3a37e77" + integrity sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw== + dependencies: + react-remove-scroll-bar "^2.3.3" + react-style-singleton "^2.2.1" + tslib "^2.1.0" + use-callback-ref "^1.3.0" + use-sidecar "^1.1.2" + react-split@^2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/react-split/-/react-split-2.0.14.tgz#ef198259bf43264d605f792fb3384f15f5b34432" @@ -13880,20 +15096,19 @@ react-virtual@^2.10.4: "@reach/observe-rect" "^1.1.0" react-window@^1: - version "1.8.7" - resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.7.tgz#5e9fd0d23f48f432d7022cdb327219353a15f0d4" - integrity sha512-JHEZbPXBpKMmoNO1bNhoXOOLg/ujhL/BU4IqVU9r8eQPcy5KQnGHIHDRkJ0ns9IM5+Aq5LNwt3j8t3tIrePQzA== + version "1.8.8" + resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.8.tgz#1b52919f009ddf91970cbdb2050a6c7be44df243" + integrity sha512-D4IiBeRtGXziZ1n0XklnFGu7h9gU684zepqyKzgPNzrsrk7xOCxni+TCckjg2Nr/DiaEEGVVmnhYSlT2rB47dQ== dependencies: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" reactcss@^1.2.0: version "1.2.3" @@ -14043,12 +15258,12 @@ reduce-flatten@^2.0.0: resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== -redux-thunk@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714" - integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== +redux-thunk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.2.tgz#b9d05d11994b99f7a91ea223e8b04cf0afa5ef3b" + integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== -redux@^4.0.0, redux@^4.1.2: +redux@^4.0.0, redux@^4.1.2, redux@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13" integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA== @@ -14076,6 +15291,11 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +regenerator-runtime@^0.13.10: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + regenerator-runtime@^0.13.2: version "0.13.10" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz#ed07b19616bcbec5da6274ebc75ae95634bfc2ee" @@ -14222,10 +15442,10 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -reselect@^4.1.5: - version "4.1.6" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.6.tgz#19ca2d3d0b35373a74dc1c98692cdaffb6602656" - integrity sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ== +reselect@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.7.tgz#56480d9ff3d3188970ee2b76527bd94a95567a42" + integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== resize-observer-polyfill@^1.5.1: version "1.5.1" @@ -14525,6 +15745,13 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -15329,14 +16556,19 @@ style-loader@^1.3.0: loader-utils "^2.0.0" schema-utils "^2.7.0" -style-value-types@4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/style-value-types/-/style-value-types-4.1.4.tgz#80f37cb4fb024d6394087403dfb275e8bb627e75" - integrity sha512-LCJL6tB+vPSUoxgUBt9juXIlNJHtBMy8jkXzUJSBzeHWdBu6lhzHqCvLVkXFGsFIlNa2ln1sQHya/gzaFmB2Lg== +style-value-types@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/style-value-types/-/style-value-types-5.0.0.tgz#76c35f0e579843d523187989da866729411fc8ad" + integrity sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA== dependencies: hey-listen "^1.0.8" tslib "^2.1.0" +styled-jsx@5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.7.tgz#be44afc53771b983769ac654d355ca8d019dff48" + integrity sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA== + stylehacks@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520" @@ -15350,6 +16582,11 @@ stylis@4.0.13: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== +stylis@4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" + integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== + supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" @@ -15835,16 +17072,16 @@ tslib@2.1.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== +tslib@2.4.0, tslib@^2, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tslib@^1, tslib@^1.0.0, tslib@^1.14.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - tsutils@3.21.0, tsutils@^3.17.1, tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -16188,7 +17425,7 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" -use-callback-ref@^1.2.3, use-callback-ref@^1.2.5: +use-callback-ref@^1.2.3, use-callback-ref@^1.2.5, use-callback-ref@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.0.tgz#772199899b9c9a50526fedc4993fc7fa1f7e32d5" integrity sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w== @@ -16202,7 +17439,7 @@ use-resize-observer@6.1.0: dependencies: resize-observer-polyfill "^1.5.1" -use-sidecar@^1.0.1, use-sidecar@^1.0.5: +use-sidecar@^1.0.1, use-sidecar@^1.0.5, use-sidecar@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== @@ -16210,6 +17447,11 @@ use-sidecar@^1.0.1, use-sidecar@^1.0.5: detect-node-es "^1.1.0" tslib "^2.0.0" +use-sync-external-store@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"