@dreamboard-games/sdk 0.4.0-alpha.5 → 0.4.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/REFERENCE.md +1493 -127
- package/dist/{HandView-x8MhbhFl.d.ts → HandView-Bi2lxzQP.d.ts} +3 -3
- package/dist/{ThemeProvider-DRalAWzY.d.ts → ThemeProvider-CElaL2ik.d.ts} +1 -1
- package/dist/authoring/index.d.ts +5 -4
- package/dist/authoring/index.js +4 -4
- package/dist/authoring/index.js.map +1 -1
- package/dist/browser-interaction.js +1 -1
- package/dist/{chunk-E3X552YM.js → chunk-2TRZSZGD.js} +1061 -425
- package/dist/chunk-2TRZSZGD.js.map +1 -0
- package/dist/{chunk-K5ZRJTZZ.js → chunk-3QIZKXJ2.js} +10 -5
- package/dist/chunk-3QIZKXJ2.js.map +1 -0
- package/dist/{chunk-KHY3RJLT.js → chunk-52DH7VQF.js} +62 -13
- package/dist/chunk-52DH7VQF.js.map +1 -0
- package/dist/chunk-5IHU5CUK.js +575 -0
- package/dist/chunk-5IHU5CUK.js.map +1 -0
- package/dist/{chunk-N6ZDIMRB.js → chunk-B2YBS3SG.js} +1 -1
- package/dist/chunk-B2YBS3SG.js.map +1 -0
- package/dist/chunk-IU6KGPY7.js +659 -0
- package/dist/chunk-IU6KGPY7.js.map +1 -0
- package/dist/{chunk-FXQPZZXC.js → chunk-KYEWGZ2Y.js} +2 -2
- package/dist/{chunk-FXQPZZXC.js.map → chunk-KYEWGZ2Y.js.map} +1 -1
- package/dist/{chunk-AQMEN3AT.js → chunk-NO537WSS.js} +2 -2
- package/dist/{chunk-TTISZQNI.js → chunk-Q322XCY2.js} +47 -31
- package/dist/chunk-Q322XCY2.js.map +1 -0
- package/dist/{chunk-QOFFRHZR.js → chunk-RKGJ64UN.js} +81 -41
- package/dist/chunk-RKGJ64UN.js.map +1 -0
- package/dist/{chunk-Y6Y2YABD.js → chunk-TGMXBRKY.js} +22 -6
- package/dist/chunk-TGMXBRKY.js.map +1 -0
- package/dist/{chunk-XZ667T4K.js → chunk-UC2UXAC6.js} +2 -2
- package/dist/chunk-VLG4YST5.js +564 -0
- package/dist/chunk-VLG4YST5.js.map +1 -0
- package/dist/{chunk-WUIVY2KE.js → chunk-WHR5UW3F.js} +1 -1
- package/dist/chunk-WHR5UW3F.js.map +1 -0
- package/dist/codegen.d.ts +13 -0
- package/dist/codegen.js +1 -1
- package/dist/{components-B7hFaEn_.d.ts → components-BTwSIjXj.d.ts} +77 -206
- package/dist/{stale-contract-artifact-error-BelRiIDR.d.ts → diagnostics-1BWjRo6-.d.ts} +1 -18
- package/dist/{hex-board-view-BFlWDb9k.d.ts → hex-board-view-aKkblDp6.d.ts} +180 -1
- package/dist/{index-gjxQichK.d.ts → index-CFTjJIXd.d.ts} +5 -4
- package/dist/{index.d-BL3bT5lt.d.ts → index.d-DMASeF6M.d.ts} +294 -27
- package/dist/index.js +2 -2
- package/dist/package-set.d.ts +2 -2
- package/dist/package-set.js +2 -2
- package/dist/{runtime-api-BJharVaj.d.ts → plugin-state-BRH3UiUp.d.ts} +19 -3
- package/dist/{protocol-BP193lva.d.ts → protocol-835hEGne.d.ts} +42 -1
- package/dist/reducer/advanced.d.ts +4 -2
- package/dist/reducer/advanced.js +1 -1
- package/dist/reducer-contract.d.ts +1 -1
- package/dist/reducer-contract.js +2 -2
- package/dist/reducer.d.ts +13 -6
- package/dist/reducer.js +322 -20
- package/dist/reducer.js.map +1 -1
- package/dist/reference-games/index.d.ts +223 -0
- package/dist/reference-games/index.js +230 -0
- package/dist/reference-games/index.js.map +1 -0
- package/dist/runtime/primitives.d.ts +32 -7
- package/dist/runtime/primitives.js +10 -5
- package/dist/runtime/runtime-api.d.ts +1 -1
- package/dist/runtime/workspace-contract.d.ts +7 -7
- package/dist/runtime/workspace-contract.js +7 -6
- package/dist/runtime-Dkfm1x2r.d.ts +1670 -0
- package/dist/runtime.d.ts +10 -9
- package/dist/runtime.js +53 -19
- package/dist/runtime.js.map +1 -1
- package/dist/stale-contract-artifact-error-C5AaZPJ8.d.ts +18 -0
- package/dist/testing-runtime.d.ts +42 -0
- package/dist/testing-runtime.js +153 -0
- package/dist/testing-runtime.js.map +1 -0
- package/dist/testing.d.ts +82 -205
- package/dist/testing.js +83 -640
- package/dist/testing.js.map +1 -1
- package/dist/types-DcADVHe9.d.ts +192 -0
- package/dist/{types-CYeN0wLK.d.ts → types-aI4V9CWe.d.ts} +5 -5
- package/dist/types.d.ts +13 -0
- package/dist/ui/components.d.ts +6 -3
- package/dist/ui/components.js +15 -3
- package/dist/ui/plugin-styles.css +2 -2
- package/dist/{ui-contract-B4NjRlvC.d.ts → ui-contract-Ue6SywvO.d.ts} +24 -10
- package/dist/ui.d.ts +9 -6
- package/dist/ui.js +16 -4
- package/dist/views-32rSsfeU.d.ts +1559 -0
- package/package.json +33 -21
- package/dist/chunk-E3X552YM.js.map +0 -1
- package/dist/chunk-K5ZRJTZZ.js.map +0 -1
- package/dist/chunk-KHY3RJLT.js.map +0 -1
- package/dist/chunk-N6ZDIMRB.js.map +0 -1
- package/dist/chunk-O6M6PN4E.js +0 -1225
- package/dist/chunk-O6M6PN4E.js.map +0 -1
- package/dist/chunk-QOFFRHZR.js.map +0 -1
- package/dist/chunk-TTISZQNI.js.map +0 -1
- package/dist/chunk-WUIVY2KE.js.map +0 -1
- package/dist/chunk-Y6Y2YABD.js.map +0 -1
- package/dist/views-fn2RuXOx.d.ts +0 -3168
- /package/dist/{chunk-AQMEN3AT.js.map → chunk-NO537WSS.js.map} +0 -0
- /package/dist/{chunk-XZ667T4K.js.map → chunk-UC2UXAC6.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/workspace-contract/index.ts","../src/runtime/ui-contract.ts","../src/runtime/workspace-contract/board.ts","../src/runtime/workspace-contract/slots.ts","../src/runtime/workspace-contract/forms.ts","../src/runtime/workspace-contract/surfaces.ts","../src/runtime/workspace-contract/zones.ts","../src/runtime/workspace-contract/hand.ts"],"sourcesContent":["import { Fragment, createElement } from \"react\";\nimport type { ComponentType, ReactNode } from \"react\";\nimport {\n ClientParamSchemaProvider,\n type ClientParamSchemaMap,\n} from \"../context/ClientParamSchemaContext.js\";\nimport {\n createResourceCounter,\n type ResourceCounterComponents,\n type ResourceDisplayConfig,\n} from \"../../ui.js\";\nimport { MobileHandTrayProvider } from \"../../ui/components.js\";\nimport { ToastProvider } from \"../../ui.js\";\nimport {\n createDreamboardUI,\n type DreamboardUI,\n type TypedGame,\n type UIContract,\n} from \"../ui-contract.js\";\nimport type {\n BoardHexGridProps,\n BoardHexViewProps,\n InteractionDialogProps,\n InteractionFormPrimitiveProps,\n InteractionStateProps,\n InteractionSubmitProps,\n InteractionTriggerProps,\n GameMeState,\n GamePlayersState,\n GameRenderState,\n GameTurnState,\n UIRootProps,\n ZoneCardRenderItem,\n} from \"../primitives/index.js\";\nimport type { ZoneListProps } from \"../primitives/zone.js\";\nimport type {\n RuntimeBoard,\n RuntimeInteraction,\n RuntimeZone,\n WorkspaceContractContext,\n WorkspaceContractOptions,\n} from \"./types.js\";\nimport { createBoardNamespace } from \"./board.js\";\nimport { createInteractionForms } from \"./forms.js\";\nexport type { WorkspaceInteractionFormDialogProps } from \"./forms.js\";\nimport { createSurfaceResolvers } from \"./surfaces.js\";\nimport { createZoneNamespace } from \"./zones.js\";\n\nexport type { BoardSpaceTargetProps } from \"../primitives/board.js\";\nexport type { HandRole } from \"../../ui/components.js\";\nexport type {\n WorkspaceInteractionSlotComponent,\n WorkspaceFormInputSlot,\n WorkspaceCardInputSlot,\n WorkspaceBoardTargetInputSlot,\n WorkspaceBoardSurface,\n WorkspaceZoneCardsComponent,\n WorkspaceZoneCardComponent,\n WorkspaceZoneStagingComponent,\n WorkspaceHandSurface,\n WorkspaceHandOptions,\n WorkspacePileSurface,\n WorkspaceCardCollectionSurface,\n WorkspaceBoardSurfaceDescriptor,\n WorkspaceHandSurfaceDescriptor,\n WorkspacePileSurfaceDescriptor,\n WorkspacePilesSurfaceDescriptor,\n WorkspaceCardCollectionSurfaceDescriptor,\n WorkspaceInteractionFormsDescriptor,\n WorkspaceInteractionFormDescriptor,\n WorkspaceSurfaceDescriptor,\n WorkspaceSurfaceSpec,\n WorkspaceContractOptions,\n} from \"./types.js\";\n\nexport interface DefineGameUIConfig<GameState, Surfaces> {\n useSurfaces: () => Surfaces;\n interactionRoutes?: (context: {\n game: GameState;\n surfaces: Surfaces;\n }) => Record<string, { collect: Record<string, unknown> }>;\n phases: Record<\n string,\n (context: { game: GameState; surfaces: Surfaces }) => ReactNode\n >;\n renderInteractions?: (context: {\n game: GameState;\n surfaces: Surfaces;\n }) => ReactNode;\n fallback?: ReactNode | ((phase: string | null) => ReactNode);\n includeUnavailableInteractions?: boolean | null;\n}\n\nexport function createWorkspaceUIContract<\n WorkspaceUI,\n Contract extends UIContract,\n Resource extends string,\n Card,\n HexBoards extends Record<string, unknown>,\n>(\n options: WorkspaceContractOptions<Contract, Resource, Card, HexBoards>,\n): WorkspaceUI {\n const baseUI = createDreamboardUI(options.uiContract);\n const runtimeInteraction = baseUI.Interaction as RuntimeInteraction;\n const runtimeBoard = baseUI.Board as RuntimeBoard;\n const runtimeZone = baseUI.Zone as RuntimeZone<Card>;\n const runtimeGameRoot = baseUI.Game.Root as ComponentType<{\n children: (game: unknown) => ReactNode;\n }>;\n const runtimePhaseSwitch = baseUI.Phase.Switch as ComponentType<{\n routes: Record<string, () => ReactNode>;\n fallback?: ReactNode | ((phase: string | null) => ReactNode);\n }>;\n\n const ctx: WorkspaceContractContext<Card> = {\n options,\n // The context carries the contract-erased view of the UI: every consumer\n // already neutralizes key genericity (`as never` inputs/zones), exactly as\n // the original single-file factory did with its `Runtime*` casts.\n baseUI: baseUI as unknown as DreamboardUI,\n runtimeInteraction,\n runtimeBoard,\n runtimeZone,\n withInteractionRoot: (interaction: string, children: ReactNode) =>\n createElement(runtimeInteraction.Root, {\n interaction,\n children,\n }),\n };\n\n const resourceDisplayConfig = options.resourceIds.map((resource) => {\n const presentation = options.resourcePresentationById?.[resource];\n return {\n type: resource,\n label: presentation?.label ?? resource,\n icon: presentation?.icon ?? resource,\n };\n }) satisfies ReadonlyArray<ResourceDisplayConfig<Resource>>;\n const resourceCounter = createResourceCounter<Resource>(\n resourceDisplayConfig,\n );\n\n const { Interaction, useInteractionFormSurface } =\n createInteractionForms(ctx);\n const Board = createBoardNamespace(ctx);\n const Zone = createZoneNamespace(ctx);\n const { defineSurfaces } = createSurfaceResolvers({\n Board,\n Zone,\n useInteractionFormSurface,\n });\n\n const UI = {\n ...baseUI,\n Root: ({ children, ...props }: UIRootProps) =>\n createElement(ClientParamSchemaProvider, {\n schemas: options.clientParamSchemasByPhase,\n children: createElement(ToastProvider, {\n children: createElement(MobileHandTrayProvider, {\n children: createElement(baseUI.Root, { ...props, children }),\n }),\n }),\n }),\n defineSurfaces,\n defineGameUI<GameState, Surfaces>({\n useSurfaces,\n interactionRoutes,\n phases,\n renderInteractions,\n fallback,\n includeUnavailableInteractions,\n }: DefineGameUIConfig<GameState, Surfaces>) {\n return function DefinedGameUI(props: Omit<UIRootProps, \"children\">) {\n return createElement(UI.Root, {\n ...props,\n children: createElement(runtimeGameRoot, {\n children: (rawGame: unknown) => {\n const game = rawGame as GameState;\n const surfaces = useSurfaces();\n const phaseRoutes = Object.fromEntries(\n Object.entries(phases).map(([phase, render]) => [\n phase,\n () => render({ game, surfaces }),\n ]),\n );\n const routeMap = interactionRoutes?.({ game, surfaces });\n return createElement(\n Fragment,\n null,\n routeMap\n ? createElement(runtimeInteraction.Routes, {\n routes: routeMap,\n includeUnavailable: includeUnavailableInteractions,\n })\n : null,\n createElement(runtimePhaseSwitch, {\n routes: phaseRoutes,\n fallback,\n }),\n renderInteractions?.({ game, surfaces }) ?? null,\n );\n },\n }),\n });\n };\n },\n Interaction,\n Board,\n Zone,\n ResourceCounter: resourceCounter,\n };\n\n return UI as WorkspaceUI;\n}\n\nexport type {\n BoardHexGridProps,\n BoardHexViewProps,\n ClientParamSchemaMap,\n DreamboardUI,\n GameMeState,\n GamePlayersState,\n GameRenderState,\n GameTurnState,\n InteractionDialogProps,\n InteractionFormPrimitiveProps,\n InteractionStateProps,\n InteractionSubmitProps,\n InteractionTriggerProps,\n ResourceCounterComponents,\n TypedGame,\n UIContract,\n UIRootProps,\n ZoneCardRenderItem,\n ZoneListProps,\n};\n","import type {\n ButtonHTMLAttributes,\n ComponentType,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport {\n Board as BoardPrimitive,\n Dice as DicePrimitive,\n Game as GamePrimitive,\n Interaction as InteractionPrimitive,\n Phase as PhasePrimitive,\n PlayerRoster as PlayerRosterPrimitive,\n Prompt as PromptPrimitive,\n PromptInbox as PromptInboxPrimitive,\n UI as UIPrimitive,\n Zone as ZonePrimitive,\n type BoardHexGridProps,\n type BoardHexGridInteractionFilter,\n type BoardTargetProps,\n type BoardSpaceTargetProps,\n type BoardEdgeTargetProps,\n type BoardVertexTargetProps,\n type GameChromeProps,\n type DiceComponents,\n type GameRootProps,\n type InteractionCardInputProps,\n type InteractionDialogProps,\n type InteractionFieldPrimitiveProps,\n type InteractionFormPrimitiveProps,\n type InteractionRoutesMap,\n type InteractionRoutesProps,\n type InteractionRootProps,\n type InteractionSwitchRouteMap,\n type InteractionSwitchProps,\n type PhaseSwitchProps,\n type PlayerRosterComponents,\n type PlayerRosterBadge,\n type PlayerRosterEntry,\n type PlayerRosterListProps,\n type PlayerRosterPartProps,\n type PlayerRosterRootProps,\n type PromptDialogProps,\n type PromptInboxItemsProps,\n type PromptOptionRenderItem,\n type PromptOptionProps,\n type PromptOptionsProps,\n type PromptRootProps,\n type UIRootProps,\n type ZoneItemProps,\n type ZoneCardAtProps,\n type ZoneCardActionProps,\n type ZoneCardRenderItem,\n type ZoneListProps,\n type ZonePileCardsProps,\n type ZonePileRootProps,\n type ZoneRootProps,\n} from \"./primitives/index.js\";\nimport type { InteractionDescriptor } from \"./types/plugin-state.js\";\nimport type { AnyHexBoardInput, BoardSpaceIdOf } from \"../ui.js\";\n\n/**\n * Workspace-aware UI typing extension point.\n *\n * Generated workspaces will augment this interface with their concrete UI\n * contract. The unregistered SDK keeps all public keys string-compatible so\n * package-local tests and generic consumers can still import ui-sdk directly.\n */\nexport interface DreamboardUIRegister {\n readonly __dreamboardUIRegister?: never;\n}\n\nexport type UIContractBucket = Record<string, unknown>;\n\nexport interface UIContract {\n interactions?: UIContractBucket;\n inputs?: UIContractBucket;\n prompts?: UIContractBucket;\n promptOptions?: UIContractBucket;\n players?: UIContractBucket;\n zones?: UIContractBucket;\n cards?: UIContractBucket;\n phases?: UIContractBucket;\n boardTargets?: UIContractBucket;\n}\n\ntype RegisteredUIContract = DreamboardUIRegister extends {\n ui: infer Registered extends UIContract;\n}\n ? Registered\n : UIContract;\n\ntype BucketOf<Contract extends UIContract, Key extends keyof UIContract> =\n NonNullable<Contract[Key]> extends UIContractBucket\n ? NonNullable<Contract[Key]>\n : UIContractBucket;\n\ntype StringKeyOf<Bucket extends UIContractBucket> = Extract<\n keyof Bucket,\n string\n>;\n\ntype StringKeysOrFallback<Bucket extends UIContractBucket> = [\n StringKeyOf<Bucket>,\n] extends [never]\n ? string\n : string extends StringKeyOf<Bucket>\n ? string\n : StringKeyOf<Bucket>;\n\nexport type RegisteredUI = RegisteredUIContract;\n\nexport type InteractionKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"interactions\">>;\n\nexport type InteractionInputKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"inputs\">>;\n\nexport type PromptKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"prompts\">>;\n\nexport type PromptOptionKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"promptOptions\">>;\n\nexport type PlayerKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"players\">>;\n\nexport type ZoneKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"zones\">>;\n\nexport type CardKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"cards\">>;\n\nexport type PhaseKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"phases\">>;\n\nexport type BoardTargetKey<Contract extends UIContract = RegisteredUI> =\n StringKeysOrFallback<BucketOf<Contract, \"boardTargets\">>;\n\ntype TypedZoneCardRenderItem<Contract extends UIContract> =\n ZoneCardRenderItem<CardKey<Contract> & string> extends infer Item\n ? Item extends { id: string; zone: string }\n ? Omit<Item, \"id\" | \"zone\"> & {\n id: CardKey<Contract>;\n zone: ZoneKey<Contract>;\n }\n : never\n : never;\n\nexport type TypedInteraction<Contract extends UIContract> = Omit<\n typeof InteractionPrimitive,\n \"Root\" | \"CardInput\" | \"Dialog\" | \"Field\" | \"Form\" | \"Switch\"\n> & {\n Root<Interaction extends InteractionKey<Contract>>(\n props: InteractionRootProps<Interaction>,\n ): ReactElement | null;\n Switch(\n props: Omit<InteractionSwitchProps<InteractionKey<Contract>>, \"routes\"> & {\n routes: InteractionSwitchRouteMap<InteractionKey<Contract>>;\n },\n ): ReactElement;\n Routes(\n props: Omit<InteractionRoutesProps<InteractionKey<Contract>>, \"routes\"> & {\n routes: InteractionRoutesMap<InteractionKey<Contract>>;\n },\n ): ReactElement;\n CardInput<Input extends InteractionInputKey<Contract>>(\n props: Omit<InteractionCardInputProps, \"input\" | \"unsafeCardId\"> & {\n input: Input;\n unsafeCardId?: CardKey<Contract>;\n },\n ): ReactElement;\n Dialog<Interaction extends InteractionKey<Contract>>(\n props: InteractionDialogProps<Interaction>,\n ): ReactElement;\n Field<Input extends InteractionInputKey<Contract>>(\n props: Omit<InteractionFieldPrimitiveProps, \"input\"> & { input: Input },\n ): ReactElement | null;\n Form(props: InteractionFormPrimitiveProps): ReactElement | null;\n};\n\nexport type InteractionSlotComponent<Props = object> = ComponentType<\n Props extends { children: unknown } ? Props : Props & { children?: ReactNode }\n>;\n\nexport interface InteractionDefaultInputSlot {\n readonly Default: InteractionSlotComponent;\n}\n\nexport interface InteractionValueInputSlot<Value = unknown> {\n readonly Value: InteractionSlotComponent<{\n children: (value: Value | undefined) => ReactNode;\n }>;\n}\n\nexport interface InteractionChoiceInputSlot<Value = unknown> {\n readonly Field: InteractionSlotComponent;\n readonly Options: InteractionSlotComponent<{\n children: (option: { value: Value; label: string }) => ReactNode;\n }>;\n}\n\nexport interface InteractionChoiceListInputSlot<Value = unknown> {\n readonly Field: InteractionSlotComponent;\n readonly Options: InteractionSlotComponent<{\n children: (option: { value: Value; label: string }) => ReactNode;\n }>;\n}\n\nexport interface InteractionNumberInputSlot {\n readonly Field: InteractionSlotComponent;\n}\n\nexport interface InteractionResourceMapInputSlot<\n Resource extends string = string,\n> {\n readonly Field: InteractionSlotComponent;\n readonly Resource: InteractionSlotComponent<{ value: Resource }>;\n}\n\nexport type InteractionFormInputSlot<Value = unknown> =\n | InteractionChoiceInputSlot<Value>\n | InteractionChoiceListInputSlot<Value>\n | InteractionNumberInputSlot\n | InteractionResourceMapInputSlot;\n\nexport interface InteractionCardTargetInputSlot<Card extends string = string> {\n readonly Card: InteractionSlotComponent<\n { value: Card } & Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n | \"children\"\n | \"disabled\"\n | \"aria-disabled\"\n | \"aria-pressed\"\n | \"onClick\"\n | \"type\"\n | \"value\"\n >\n >;\n readonly Cards: InteractionSlotComponent<{\n children: (card: { id: Card }) => ReactNode;\n }>;\n}\n\nexport interface InteractionBoardTargetInputSlot<\n Target extends string = string,\n> {\n readonly Target: InteractionSlotComponent<\n { value: Target } & Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n | \"children\"\n | \"disabled\"\n | \"aria-disabled\"\n | \"aria-pressed\"\n | \"onClick\"\n | \"type\"\n | \"value\"\n >\n >;\n}\n\nexport type InteractionBoardSpaceTargetInputSlot<\n Space extends string = string,\n> = InteractionBoardTargetInputSlot<Space>;\n\nexport type InteractionBoardEdgeTargetInputSlot<Edge extends string = string> =\n InteractionBoardTargetInputSlot<Edge>;\n\nexport type InteractionBoardVertexTargetInputSlot<\n Vertex extends string = string,\n> = InteractionBoardTargetInputSlot<Vertex>;\n\nexport type InteractionBoardTileTargetInputSlot<Tile extends string = string> =\n InteractionBoardTargetInputSlot<Tile>;\n\nexport interface InteractionSubmitSlot {\n readonly Button: InteractionSlotComponent<\n Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"disabled\" | \"type\" | \"value\"\n >\n >;\n}\n\nexport type TypedPrompt<Contract extends UIContract> = Omit<\n typeof PromptPrimitive,\n \"Root\" | \"Option\" | \"Options\" | \"Dialog\"\n> & {\n Root<Prompt extends PromptKey<Contract>>(\n props: PromptRootProps<Prompt>,\n ): ReactElement | null;\n Option<Option extends PromptOptionKey<Contract>>(\n props: Omit<PromptOptionProps, \"value\"> & { value: Option },\n ): ReactElement;\n Options(\n props: Omit<PromptOptionsProps, \"children\"> & {\n children: (\n option: Omit<PromptOptionRenderItem, \"id\"> & {\n id: PromptOptionKey<Contract>;\n },\n ) => ReactNode;\n },\n ): ReactElement;\n Dialog<Prompt extends PromptKey<Contract>>(\n props: PromptDialogProps<Prompt>,\n ): ReactElement;\n};\n\nexport type TypedPromptInbox<Contract extends UIContract> = Omit<\n typeof PromptInboxPrimitive,\n \"Items\"\n> & {\n Items(\n props: Omit<PromptInboxItemsProps, \"children\"> & {\n children: (\n prompt: Omit<InteractionDescriptor, \"interactionKey\"> & {\n interactionKey: PromptKey<Contract>;\n },\n ) => ReactNode;\n },\n ): ReactElement;\n};\n\ntype TypedPlayerRosterEntry<Player extends string> = Omit<\n PlayerRosterEntry,\n \"playerId\"\n> & {\n playerId: Player;\n};\n\ntype TypedPlayerRosterRootProps<Player extends string> = Omit<\n PlayerRosterRootProps,\n \"score\" | \"scoreLabel\" | \"badges\" | \"metadata\"\n> & {\n score?: (playerId: Player) => number | undefined;\n scoreLabel?: string | ((playerId: Player) => string | undefined);\n badges?: (\n playerId: Player,\n ) => ReadonlyArray<PlayerRosterBadge | null | false | undefined>;\n metadata?: (playerId: Player) => Record<string, unknown> | undefined;\n};\n\ntype TypedPlayerRosterListProps<Player extends string> = Omit<\n PlayerRosterListProps,\n \"children\"\n> & {\n children?: (player: TypedPlayerRosterEntry<Player>) => ReactNode;\n};\n\ntype TypedPlayerRosterPartProps<Player extends string> = Omit<\n PlayerRosterPartProps,\n \"player\"\n> & {\n player: TypedPlayerRosterEntry<Player>;\n};\n\nexport type TypedPlayerRoster<Contract extends UIContract> = Omit<\n PlayerRosterComponents,\n \"Root\" | \"List\" | \"Name\" | \"Score\" | \"Badges\"\n> & {\n Root(\n props: TypedPlayerRosterRootProps<PlayerKey<Contract>>,\n ): ReactElement | null;\n List(props: TypedPlayerRosterListProps<PlayerKey<Contract>>): ReactElement;\n Name(props: TypedPlayerRosterPartProps<PlayerKey<Contract>>): ReactElement;\n Score(\n props: TypedPlayerRosterPartProps<PlayerKey<Contract>>,\n ): ReactElement | null;\n Badges(\n props: TypedPlayerRosterPartProps<PlayerKey<Contract>>,\n ): ReactElement | null;\n};\n\nexport type TypedPhase<Contract extends UIContract> = Omit<\n typeof PhasePrimitive,\n \"Switch\"\n> & {\n Switch(props: PhaseSwitchProps<PhaseKey<Contract>>): ReactElement | null;\n};\n\nexport type TypedZone<Contract extends UIContract> = Omit<\n typeof ZonePrimitive,\n | \"Root\"\n | \"Item\"\n | \"CardAt\"\n | \"TopCard\"\n | \"CardAction\"\n | \"List\"\n | \"PileRoot\"\n | \"PileCards\"\n> & {\n Root<Zone extends ZoneKey<Contract>>(\n props: Omit<ZoneRootProps, \"zone\"> & { zone: Zone },\n ): ReactElement;\n Item<Card extends CardKey<Contract>>(\n props: Omit<ZoneItemProps, \"card\"> & { card: Card },\n ): ReactElement;\n CardAction<Card extends CardKey<Contract>>(\n props: Omit<ZoneCardActionProps, \"card\"> & { card?: Card },\n ): ReactElement;\n CardAt<Zone extends ZoneKey<Contract>>(\n props: Omit<ZoneCardAtProps<Zone>, \"zone\" | \"children\"> & {\n zone?: Zone;\n children?:\n | ReactNode\n | ((card: TypedZoneCardRenderItem<Contract>) => ReactNode);\n },\n ): ReactElement | null;\n TopCard<Zone extends ZoneKey<Contract>>(\n props: Omit<ZoneCardAtProps<Zone>, \"zone\" | \"index\" | \"children\"> & {\n zone?: Zone;\n children?:\n | ReactNode\n | ((card: TypedZoneCardRenderItem<Contract>) => ReactNode);\n },\n ): ReactElement | null;\n List(\n props: Omit<ZoneListProps, \"children\"> & {\n children?:\n | ReactNode\n | ((card: TypedZoneCardRenderItem<Contract>) => ReactNode);\n },\n ): ReactElement;\n PileRoot<Zone extends ZoneKey<Contract>>(\n props: Omit<ZonePileRootProps<Zone>, \"zone\"> & {\n zone: Zone;\n },\n ): ReactElement;\n PileCards(\n props: Omit<ZonePileCardsProps, \"renderCard\"> & {\n renderCard: (card: TypedZoneCardRenderItem<Contract>) => ReactNode;\n },\n ): ReactElement | null;\n};\n\nexport type TypedBoard<Contract extends UIContract> = Omit<\n typeof BoardPrimitive,\n \"Target\" | \"SpaceTarget\" | \"EdgeTarget\" | \"VertexTarget\" | \"HexGrid\"\n> & {\n Target<Target extends BoardTargetKey<Contract>>(\n props: Omit<BoardTargetProps, \"value\"> & { value: Target },\n ): ReactElement;\n SpaceTarget<Target extends BoardTargetKey<Contract>>(\n props: Omit<BoardSpaceTargetProps, \"value\"> & { value: Target },\n ): ReactElement;\n EdgeTarget<Target extends BoardTargetKey<Contract>>(\n props: Omit<BoardEdgeTargetProps, \"value\"> & { value: Target },\n ): ReactElement;\n VertexTarget<Target extends BoardTargetKey<Contract>>(\n props: Omit<BoardVertexTargetProps, \"value\"> & { value: Target },\n ): ReactElement;\n HexGrid<\n TBoard extends AnyHexBoardInput,\n TSpaceView extends { id: BoardSpaceIdOf<TBoard> },\n >(\n props: Omit<BoardHexGridProps<TBoard, TSpaceView>, \"interactions\"> & {\n interactions?:\n | Exclude<BoardHexGridInteractionFilter, object>\n | {\n edge?: ReadonlyArray<InteractionKey<Contract>>;\n vertex?: ReadonlyArray<InteractionKey<Contract>>;\n space?: ReadonlyArray<InteractionKey<Contract>>;\n };\n },\n ): ReactElement;\n};\n\nexport type TypedGame<\n _Contract extends UIContract,\n View = unknown,\n Player extends string = PlayerKey<_Contract>,\n Phase extends string = PhaseKey<_Contract>,\n> = Omit<typeof GamePrimitive, \"Root\"> & {\n Root(props: GameRootProps<View, Player, Phase>): ReactElement;\n Chrome(\n props: GameChromeProps<View, Player, Phase, InteractionKey<_Contract>>,\n ): ReactElement;\n};\n\nexport interface DreamboardUI<Contract extends UIContract = RegisteredUI> {\n readonly contract: Contract;\n Root(props: UIRootProps): ReactElement;\n readonly Game: TypedGame<Contract>;\n readonly Interaction: TypedInteraction<Contract>;\n readonly Prompt: TypedPrompt<Contract>;\n readonly PromptInbox: TypedPromptInbox<Contract>;\n readonly PlayerRoster: TypedPlayerRoster<Contract>;\n readonly Dice: DiceComponents;\n readonly Phase: TypedPhase<Contract>;\n readonly Zone: TypedZone<Contract>;\n readonly Board: TypedBoard<Contract>;\n}\n\nexport function createDreamboardUI<const Contract extends UIContract>(\n contract: Contract,\n): DreamboardUI<Contract> {\n return {\n contract,\n Root: UIPrimitive.Root,\n Game: GamePrimitive,\n Interaction: InteractionPrimitive,\n Prompt: PromptPrimitive,\n PromptInbox: PromptInboxPrimitive,\n PlayerRoster: PlayerRosterPrimitive,\n Dice: DicePrimitive,\n Phase: PhasePrimitive,\n Zone: ZonePrimitive,\n Board: BoardPrimitive,\n } as DreamboardUI<Contract>;\n}\n","import type { ReactElement, ReactNode } from \"react\";\nimport { createElement } from \"react\";\nimport type {\n BoardHexGridProps,\n BoardHexViewProps,\n} from \"../primitives/index.js\";\nimport type { BoardSpaceTargetProps } from \"../primitives/board.js\";\nimport { createBoardTargetInputSlot } from \"./slots.js\";\nimport type {\n WorkspaceBoardSurfaceDescriptor,\n WorkspaceContractContext,\n} from \"./types.js\";\n\nexport function createUseBoardSurface<Card>(\n ctx: WorkspaceContractContext<Card>,\n) {\n const { baseUI, runtimeBoard } = ctx;\n return function useBoardSurface() {\n return {\n Root: ({ children }: { children?: ReactNode }) =>\n createElement(baseUI.Board.Root, { children }),\n Space: (props: BoardSpaceTargetProps<string>) =>\n createElement(runtimeBoard.SpaceTarget, props),\n slot: {\n space: createBoardTargetInputSlot(ctx, \"space\"),\n playerSpace: createBoardTargetInputSlot(ctx, \"space\"),\n edge: createBoardTargetInputSlot(ctx, \"edge\"),\n vertex: createBoardTargetInputSlot(ctx, \"vertex\"),\n tile: createBoardTargetInputSlot(ctx, \"tile\"),\n },\n };\n };\n}\n\n/**\n * Assembles the `Board` namespace for one workspace contract. Called once per\n * `createWorkspaceUIContract` invocation so `HexView`/`HexGrid` keep stable\n * component identities.\n */\nexport function createBoardNamespace<Card>(\n ctx: WorkspaceContractContext<Card>,\n) {\n const { options, baseUI } = ctx;\n const useBoardSurface = createUseBoardSurface(ctx);\n\n return {\n surface<Board extends string>(\n board: Board,\n ): WorkspaceBoardSurfaceDescriptor<Board> {\n return { kind: \"board\", board };\n },\n useSurface: useBoardSurface,\n HexView({ board: boardId, ...props }: { board: string }) {\n return createElement(\n baseUI.Board.HexView as never,\n {\n ...props,\n board: options.hexStaticBoards[boardId],\n } as BoardHexViewProps<never, never>,\n ) as ReactElement;\n },\n HexGrid({ board: boardId, ...props }: { board: string }) {\n return createElement(\n baseUI.Board.HexGrid as never,\n {\n ...props,\n board: options.hexStaticBoards[boardId],\n } as BoardHexGridProps<never, never>,\n ) as ReactElement;\n },\n };\n}\n","import type { ReactElement, ReactNode } from \"react\";\nimport { Fragment as ReactFragment, createElement } from \"react\";\nimport { useResolvedCardTargetValue } from \"../primitives/index.js\";\nimport type {\n WorkspaceBoardTargetInputSlot,\n WorkspaceCardInputSlot,\n WorkspaceContractContext,\n WorkspaceFormInputSlot,\n} from \"./types.js\";\n\n/**\n * Render-prop body for the card surface `slot.card.Value`. Surfaces the live\n * draft value for the active interaction's card-target input — the selected\n * card-id array for `selection: \"many\"` collectors, or the single id for\n * `selection: \"one\"`. Renders nothing meaningful (`undefined`) outside an\n * `<Interaction.Root>`.\n */\nfunction CardSlotValue({\n children,\n}: {\n children: (value: unknown | undefined) => ReactNode;\n}): ReactElement {\n const value = useResolvedCardTargetValue();\n return createElement(ReactFragment, null, children(value));\n}\n\nexport function createFormInputSlot<Card>(\n ctx: WorkspaceContractContext<Card>,\n input: string,\n interaction?: string,\n): WorkspaceFormInputSlot {\n const { baseUI, withInteractionRoot } = ctx;\n return {\n Field: (props: { children?: ReactNode }) => {\n const field = createElement(baseUI.Interaction.Field, {\n ...props,\n input: input as never,\n });\n return interaction ? withInteractionRoot(interaction, field) : field;\n },\n Options: () => null,\n Value: ({\n children,\n }: {\n children: (value: unknown | undefined) => ReactNode;\n }) => createElement(ReactFragment, null, children(undefined)),\n Default: ({ children }: { children?: ReactNode }) =>\n createElement(ReactFragment, null, children),\n };\n}\n\nexport function createCardInputSlot<Card>(\n ctx: WorkspaceContractContext<Card>,\n): WorkspaceCardInputSlot {\n const { runtimeInteraction } = ctx;\n return {\n Card: ({ value, ...props }: { value: string; children?: ReactNode }) =>\n createElement(runtimeInteraction.CardInput, {\n ...props,\n input: \"cardId\",\n unsafeCardId: value,\n }),\n Cards: () => null,\n Value: ({\n children,\n }: {\n children: (value: unknown | undefined) => ReactNode;\n }) => createElement(CardSlotValue, { children }),\n Default: ({ children }: { children?: ReactNode }) =>\n createElement(ReactFragment, null, children),\n };\n}\n\nexport function createBoardTargetInputSlot<Card>(\n ctx: WorkspaceContractContext<Card>,\n kind: \"space\" | \"edge\" | \"vertex\" | \"tile\",\n): WorkspaceBoardTargetInputSlot<typeof kind> {\n const { runtimeBoard } = ctx;\n const Target = ({\n value,\n ...props\n }: {\n value: string;\n children?: ReactNode;\n }) => {\n if (kind === \"edge\") {\n return createElement(runtimeBoard.EdgeTarget, { ...props, value });\n }\n if (kind === \"vertex\") {\n return createElement(runtimeBoard.VertexTarget, { ...props, value });\n }\n return createElement(runtimeBoard.SpaceTarget, { ...props, value });\n };\n return {\n Target,\n Value: ({\n children,\n }: {\n children: (value: unknown | undefined) => ReactNode;\n }) => createElement(ReactFragment, null, children(undefined)),\n Default: ({ children }: { children?: ReactNode }) =>\n createElement(ReactFragment, null, children),\n };\n}\n","import type { ReactElement, ReactNode } from \"react\";\nimport { createElement } from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../../ui/components.js\";\nimport type {\n InteractionDialogProps,\n InteractionFormPrimitiveProps,\n InteractionStateProps,\n InteractionSubmitProps,\n InteractionTriggerProps,\n} from \"../primitives/index.js\";\nimport { createFormInputSlot } from \"./slots.js\";\nimport type {\n WorkspaceContractContext,\n WorkspaceInteractionFormDescriptor,\n WorkspaceInteractionFormsDescriptor,\n} from \"./types.js\";\n\nexport interface WorkspaceInteractionFormDialogProps extends Omit<\n InteractionDialogProps,\n \"children\"\n> {\n title: ReactNode;\n description?: ReactNode;\n trigger?: ReactNode;\n children: ReactNode;\n contentClassName?: string;\n overlayClassName?: string;\n showCloseButton?: boolean;\n}\n\n/**\n * Builds the interaction-form surface pieces and the `Interaction` namespace\n * for one workspace contract. Called once per `createWorkspaceUIContract`\n * invocation so `InteractionRoutes` keeps a stable component identity.\n */\nexport function createInteractionForms<Card>(\n ctx: WorkspaceContractContext<Card>,\n) {\n const { options, baseUI, runtimeInteraction, withInteractionRoot } = ctx;\n\n function InteractionRoutes({\n routes,\n fallback,\n includeUnavailable,\n }: {\n routes: Record<\n string,\n {\n collect: Record<string, unknown>;\n }\n >;\n fallback?: ReactNode;\n includeUnavailable?: boolean | null;\n }): ReactElement {\n return createElement(runtimeInteraction.Routes, {\n routes,\n fallback,\n includeUnavailable,\n });\n }\n\n function GeneratedFormDialog({\n title,\n description,\n trigger,\n children,\n contentClassName,\n overlayClassName,\n showCloseButton,\n defaultOpen,\n onStateChange,\n }: WorkspaceInteractionFormDialogProps) {\n return createElement(baseUI.Interaction.Dialog, {\n defaultOpen,\n onStateChange,\n children: (state) =>\n createElement(\n Dialog,\n { open: state.open, onOpenChange: state.setOpen },\n trigger\n ? createElement(DialogTrigger, {\n asChild: true,\n children: trigger,\n })\n : null,\n createElement(\n DialogContent,\n {\n className: contentClassName,\n overlayClassName,\n showCloseButton,\n },\n createElement(\n DialogHeader,\n null,\n createElement(DialogTitle, null, title),\n description\n ? createElement(DialogDescription, null, description)\n : null,\n ),\n children,\n ),\n ),\n });\n }\n\n function useInteractionFormSurface(interaction: string) {\n const validInputs = options.formInputKeysForInteraction(interaction);\n const slot = Object.fromEntries(\n [...validInputs].map((input) => [\n input,\n createFormInputSlot(ctx, input, interaction),\n ]),\n );\n return {\n Root: ({ children }: { children?: ReactNode }) =>\n withInteractionRoot(interaction, children),\n Form: (props: InteractionFormPrimitiveProps) =>\n withInteractionRoot(\n interaction,\n createElement(baseUI.Interaction.Form, props),\n ),\n Dialog: (props: WorkspaceInteractionFormDialogProps) =>\n withInteractionRoot(\n interaction,\n createElement(GeneratedFormDialog, props),\n ),\n State: (props: InteractionStateProps) =>\n withInteractionRoot(\n interaction,\n createElement(baseUI.Interaction.State, props),\n ),\n Arm: (props: InteractionTriggerProps) =>\n withInteractionRoot(\n interaction,\n createElement(baseUI.Interaction.Trigger, props),\n ),\n Submit: (props: InteractionSubmitProps) =>\n withInteractionRoot(\n interaction,\n createElement(baseUI.Interaction.Submit, props),\n ),\n Field: ({ input, ...props }: { input: string; children?: ReactNode }) =>\n withInteractionRoot(\n interaction,\n createElement(baseUI.Interaction.Field, {\n ...props,\n input: input as never,\n }),\n ),\n slot,\n };\n }\n\n const Interaction = {\n State: baseUI.Interaction.State,\n Dialog: baseUI.Interaction.Dialog,\n useForm: useInteractionFormSurface,\n form<const Interaction extends string>(\n interaction: Interaction,\n ): WorkspaceInteractionFormDescriptor<Interaction> {\n return { kind: \"form\", interaction };\n },\n forms<const Interactions extends Readonly<Record<string, string>>>(\n interactions: Interactions,\n ): WorkspaceInteractionFormsDescriptor<Interactions> {\n return { kind: \"forms\", interactions };\n },\n Routes: InteractionRoutes,\n };\n\n return { Interaction, useInteractionFormSurface };\n}\n","import type {\n WorkspaceHandOptions,\n WorkspaceSurfaceDescriptor,\n WorkspaceSurfaceSpec,\n} from \"./types.js\";\n\ninterface SurfaceResolverDeps {\n readonly Board: {\n useSurface(name: string): unknown;\n };\n readonly Zone: {\n useHand(name: string, zoneOptions: WorkspaceHandOptions): unknown;\n usePile(name: string, zoneOptions: { zone: string }): unknown;\n useCardCollection(\n name: string,\n zoneOptions: { zones: readonly string[]; mode?: \"all\" | \"top-card\" },\n ): unknown;\n };\n readonly useInteractionFormSurface: (interaction: string) => unknown;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isSurfaceDescriptor(\n value: unknown,\n): value is WorkspaceSurfaceDescriptor {\n return (\n isPlainObject(value) &&\n typeof (value as { kind?: unknown }).kind === \"string\"\n );\n}\n\n/**\n * Builds the surface-spec resolvers for one workspace contract.\n */\nexport function createSurfaceResolvers({\n Board,\n Zone,\n useInteractionFormSurface,\n}: SurfaceResolverDeps) {\n const boardSurface = Board.useSurface;\n const zoneHandSurface = Zone.useHand;\n const zonePileSurface = Zone.usePile;\n const zoneCardCollectionSurface = Zone.useCardCollection;\n const interactionFormSurface = useInteractionFormSurface;\n\n function resolveSurfaceDescriptor(\n name: string,\n descriptor: WorkspaceSurfaceDescriptor,\n ): unknown {\n switch (descriptor.kind) {\n case \"board\":\n return boardSurface(name);\n case \"hand\":\n return zoneHandSurface(name, {\n zone: descriptor.zone,\n role: descriptor.role,\n label: descriptor.label,\n order: descriptor.order,\n });\n case \"pile\":\n return zonePileSurface(name, { zone: descriptor.zone });\n case \"piles\":\n return Object.fromEntries(\n descriptor.zones.map((zone) => [\n zone,\n zonePileSurface(String(zone), { zone }),\n ]),\n );\n case \"cardCollection\":\n return zoneCardCollectionSurface(name, {\n zones: descriptor.zones,\n mode: descriptor.mode,\n });\n case \"form\":\n return interactionFormSurface(descriptor.interaction);\n case \"forms\":\n return Object.fromEntries(\n Object.entries(descriptor.interactions).map(([key, interaction]) => [\n key,\n interactionFormSurface(interaction),\n ]),\n );\n }\n }\n\n function resolveSurfaceSpec(spec: WorkspaceSurfaceSpec): unknown {\n return Object.fromEntries(\n Object.entries(spec).map(([key, value]) => [\n key,\n isSurfaceDescriptor(value)\n ? resolveSurfaceDescriptor(key, value)\n : resolveSurfaceSpec(value as WorkspaceSurfaceSpec),\n ]),\n );\n }\n\n function defineSurfaces<const Spec extends WorkspaceSurfaceSpec>(spec: Spec) {\n return function useDefinedSurfaces() {\n return resolveSurfaceSpec(spec);\n };\n }\n\n return { defineSurfaces, resolveSurfaceSpec, resolveSurfaceDescriptor };\n}\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { Fragment as ReactFragment, createElement } from \"react\";\nimport { clsx } from \"clsx\";\nimport { useAuthoredPluginGameplayFrameSelector } from \"../context/PluginGameplayFrameContext.js\";\nimport { CardFace, type ViewCard } from \"../../ui.js\";\nimport type { InteractionCardInputRenderState } from \"../primitives/index.js\";\nimport type { ZoneListProps } from \"../primitives/zone.js\";\nimport { createHandPieces } from \"./hand.js\";\nimport { createCardInputSlot } from \"./slots.js\";\nimport type {\n WorkspaceCardCollectionSurfaceDescriptor,\n WorkspaceContractContext,\n WorkspaceHandOptions,\n WorkspaceHandSurfaceDescriptor,\n WorkspacePileSurfaceDescriptor,\n WorkspacePilesSurfaceDescriptor,\n} from \"./types.js\";\n\nconst DEFAULT_ZONE_CARD_CLASS =\n \"group relative border-0 bg-transparent p-0 transition-transform enabled:cursor-pointer enabled:hover:-translate-y-2 data-[selected=true]:-translate-y-3 disabled:cursor-not-allowed data-[eligible=false]:opacity-45 data-[eligible=false]:grayscale data-[eligible=false]:hover:translate-y-0 data-[card-available=false]:opacity-45 data-[card-available=false]:grayscale\";\n\nfunction cardRenderItemToViewCard(card: unknown, cardId: string): ViewCard {\n if (\n card &&\n typeof card === \"object\" &&\n \"hidden\" in card &&\n (card as { hidden?: unknown }).hidden === false\n ) {\n return card as unknown as ViewCard;\n }\n return {\n id: cardId,\n cardType: \"hidden\",\n name: \"Hidden card\",\n properties: {},\n };\n}\n\nexport function createZoneCardsComponent<Card>(\n ctx: WorkspaceContractContext<Card>,\n zones: readonly string[],\n) {\n const { baseUI, runtimeZone } = ctx;\n return ({\n empty,\n children,\n ...props\n }: {\n empty?: ReactNode;\n children: (card: Card) => ReactNode;\n } & Omit<ZoneListProps, \"children\" | \"empty\">) =>\n createElement(\n ReactFragment,\n null,\n ...zones.map((zone) =>\n createElement(baseUI.Zone.Root, {\n key: zone,\n zone: zone as never,\n children: createElement(runtimeZone.List, {\n ...props,\n empty,\n children,\n }),\n }),\n ),\n );\n}\n\nexport function createZoneCardComponent<Card>(\n ctx: WorkspaceContractContext<Card>,\n) {\n const { options, baseUI, runtimeInteraction } = ctx;\n return ({\n card,\n children,\n className,\n ...props\n }: {\n card: Card;\n children?: ReactNode;\n } & Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"type\" | \"value\">) => {\n const cardId = options.cardIdFromZoneCard(card);\n const zone = options.zoneIdFromZoneCard(card);\n const viewCard = cardRenderItemToViewCard(card, cardId);\n const faceDown =\n !!card &&\n typeof card === \"object\" &&\n \"hidden\" in card &&\n (card as { hidden?: unknown }).hidden === true;\n const renderCardFace = (state: InteractionCardInputRenderState) =>\n createElement(CardFace, {\n card: viewCard,\n selected: state.selected,\n disabled: state.disabled || !state.eligible,\n faceDown,\n size: \"sm\",\n children,\n });\n const match = useAuthoredPluginGameplayFrameSelector((frame) => {\n const candidates = frame.zones[zone]?.playableByCardId[cardId] ?? [];\n for (const descriptor of candidates) {\n const input = descriptor.inputs.find(\n (candidateInput) =>\n candidateInput.domain.type === \"cardTarget\" &&\n candidateInput.domain.projection === \"resolved\" &&\n candidateInput.domain.eligibleTargets.includes(cardId),\n );\n if (input) return { descriptor, input };\n }\n return null;\n });\n if (!match) {\n return createElement(\n \"div\",\n {\n ...props,\n className: clsx(\"relative inline-flex\", className),\n \"data-dreamboard-zone-card\": \"\",\n \"data-card-id\": cardId,\n \"data-zone\": zone,\n \"data-interactive\": false,\n },\n createElement(CardFace, {\n card: viewCard,\n faceDown,\n size: \"sm\",\n children,\n }),\n );\n }\n return createElement(baseUI.Zone.Root, {\n zone: zone as never,\n children: createElement(runtimeInteraction.Root, {\n interaction: match.descriptor.interactionKey,\n children: createElement(runtimeInteraction.CardInput, {\n ...props,\n className: clsx(DEFAULT_ZONE_CARD_CLASS, className),\n input: match.input.key,\n unsafeCardId: cardId,\n children: renderCardFace,\n }),\n }),\n });\n };\n}\n\n/**\n * Assembles the `Zone` namespace for one workspace contract. Called once per\n * `createWorkspaceUIContract` invocation.\n */\nexport function createZoneNamespace<Card>(ctx: WorkspaceContractContext<Card>) {\n const {\n createHandCardsComponent,\n createStagingComponent,\n HandCardsSlot,\n HandSummarySlot,\n HandActionsSlot,\n } = createHandPieces(ctx);\n\n return {\n hand<Zone extends string>(\n zone: Zone,\n options: Omit<WorkspaceHandSurfaceDescriptor<Zone>, \"kind\" | \"zone\">,\n ): WorkspaceHandSurfaceDescriptor<Zone> {\n return { kind: \"hand\", zone, ...options };\n },\n pile<Zone extends string>(\n zone: Zone,\n ): WorkspacePileSurfaceDescriptor<Zone> {\n return { kind: \"pile\", zone };\n },\n piles<const Zones extends readonly string[]>(\n zones: Zones,\n ): WorkspacePilesSurfaceDescriptor<Zones> {\n return { kind: \"piles\", zones };\n },\n collection<const Zones extends readonly string[]>(\n zones: Zones,\n options: { mode?: \"all\" | \"top-card\" } = {},\n ): WorkspaceCardCollectionSurfaceDescriptor<Zones> {\n return { kind: \"cardCollection\", zones, mode: options.mode };\n },\n useHand(_name: string, zoneOptions: WorkspaceHandOptions) {\n const handComponentOptions = {\n name: _name,\n zone: zoneOptions.zone,\n role: zoneOptions.role,\n label: zoneOptions.label,\n order: zoneOptions.order,\n };\n return {\n Hand: createHandCardsComponent(handComponentOptions),\n Cards: HandCardsSlot,\n Summary: HandSummarySlot,\n Actions: HandActionsSlot,\n Card: createZoneCardComponent(ctx),\n Staging: createStagingComponent(handComponentOptions),\n slot: { card: createCardInputSlot(ctx) },\n };\n },\n usePile(_name: string, zoneOptions: { zone: string }) {\n return {\n Pile: createZoneCardsComponent(ctx, [zoneOptions.zone]),\n Card: createZoneCardComponent(ctx),\n };\n },\n useCardCollection(\n _name: string,\n zoneOptions: { zones: readonly string[]; mode?: \"all\" | \"top-card\" },\n ) {\n void zoneOptions.mode;\n return {\n Collection: createZoneCardsComponent(ctx, zoneOptions.zones),\n Card: createZoneCardComponent(ctx),\n slot: { card: createCardInputSlot(ctx) },\n };\n },\n };\n}\n","import type { ReactNode } from \"react\";\nimport { Children, createElement, isValidElement, useMemo } from \"react\";\nimport { clsx } from \"clsx\";\nimport { useIsMobile } from \"../../ui.js\";\nimport { useRegisterMobileHand } from \"../../ui/components.js\";\nimport { useZoneCards } from \"../primitives/index.js\";\nimport {\n HandSurfaceView,\n HandStagingView,\n dropTargetIdFor,\n type HandSelectionSummary,\n type HandSurfaceViewProps,\n type RuntimeDropTarget,\n} from \"../primitives/hand-surface.js\";\nimport type { AuthoredCardIntent } from \"../primitives/hand-intent-adapter.js\";\nimport type {\n CardDropTargetVisualState,\n HandInteractionPolicy,\n HandLayoutKind,\n HandLayoutPolicy,\n InteractionVisualState,\n} from \"../../ui.js\";\nimport type { ZoneListProps } from \"../primitives/zone.js\";\nimport { isInteractionAvailable } from \"../utils/interaction-status.js\";\nimport type {\n WorkspaceContractContext,\n WorkspaceHandComponentOptions,\n} from \"./types.js\";\n\n/**\n * Builds the hand-surface pieces for one workspace contract. Called once per\n * `createWorkspaceUIContract` invocation so `GeneratedHandCards` keeps a\n * single stable component identity per contract (its `useRegisterMobileHand`\n * registration depends on this).\n */\nexport function createHandPieces<Card>(ctx: WorkspaceContractContext<Card>) {\n const { baseUI } = ctx;\n\n function HandCardsSlot({\n children,\n }: {\n children: (card: Card, state: InteractionVisualState) => ReactNode;\n }) {\n void children;\n return createElement(\"template\", { \"data-dreamboard-hand-cards-slot\": \"\" });\n }\n\n function HandSummarySlot({\n children,\n }: {\n children: ReactNode | ((summary: HandSelectionSummary) => ReactNode);\n }) {\n void children;\n return createElement(\"template\", {\n \"data-dreamboard-hand-summary-slot\": \"\",\n });\n }\n\n function HandActionsSlot({\n children,\n }: {\n children: ReactNode | ((summary: HandSelectionSummary) => ReactNode);\n }) {\n void children;\n return createElement(\"template\", {\n \"data-dreamboard-hand-actions-slot\": \"\",\n });\n }\n\n function renderHandSlot(\n slot: ReactNode | ((summary: HandSelectionSummary) => ReactNode),\n summary: HandSelectionSummary,\n ): ReactNode {\n return typeof slot === \"function\" ? slot(summary) : slot;\n }\n\n function createHandCardsComponent(options: WorkspaceHandComponentOptions) {\n return ({\n empty,\n children,\n className,\n layout,\n mobileInteraction,\n cardSize,\n ariaLabel,\n dropTargets,\n renderDropTargets,\n onCardIntent,\n onSelectionSummary,\n ...props\n }: {\n empty?: ReactNode;\n children:\n | ReactNode\n | ((card: Card, state: InteractionVisualState) => ReactNode);\n className?: string;\n layout?: HandLayoutKind | HandLayoutPolicy;\n mobileInteraction?: HandInteractionPolicy;\n cardSize?: \"sm\" | \"md\" | \"lg\";\n ariaLabel?: string;\n dropTargets?: ReadonlyArray<{\n target:\n | { kind: \"card\"; card: string }\n | { kind: \"space\"; target: string }\n | { kind: \"edge\"; target: string }\n | { kind: \"vertex\"; target: string }\n | { kind: \"tile\"; target: string };\n label: string;\n render: (state: CardDropTargetVisualState) => ReactNode;\n className?: string;\n role?: string;\n order?: number;\n }>;\n renderDropTargets?: (children: ReactNode) => ReactNode;\n onCardIntent?: (intent: AuthoredCardIntent) => void;\n onSelectionSummary?: (summary: HandSelectionSummary) => void;\n } & Omit<ZoneListProps, \"children\" | \"empty\">) => {\n const slots = collectHandSlots(children);\n const renderCard =\n typeof children === \"function\" ? children : slots.cards?.children;\n if (!renderCard) {\n throw new Error(\n \"Generated hand surfaces require exactly one <hand.Cards> slot.\",\n );\n }\n const summaryRenderer = slots.summary\n ? (summary: HandSelectionSummary) =>\n renderHandSlot(slots.summary!.children, summary)\n : undefined;\n const actionsRenderer = slots.actions\n ? (summary: HandSelectionSummary) =>\n renderHandSlot(slots.actions!.children, summary)\n : undefined;\n return createElement(baseUI.Zone.Root, {\n zone: options.zone as never,\n // Fill the author's container instead of shrink-wrapping to the fan's\n // own measured width. Without a definite width here, a centering parent\n // sizes to the cards row, the hand measures that, recomputes a new fan\n // width, and the layout chases itself (a ResizeObserver loop). `w-full`\n // pins the outermost hand element to the available width and breaks the\n // cycle for every author layout.\n className: \"w-full min-w-0\",\n children: createElement(GeneratedHandCards, {\n ...props,\n hand: options,\n className,\n empty,\n children: renderCard,\n layout,\n mobileInteraction,\n cardSize,\n ariaLabel,\n dropTargets,\n renderDropTargets,\n onCardIntent,\n summarySlot: summaryRenderer,\n actionsSlot: actionsRenderer,\n onSelectionSummary,\n }),\n });\n };\n }\n\n function collectHandSlots(\n children:\n | ReactNode\n | ((card: Card, state: InteractionVisualState) => ReactNode),\n ): {\n cards?: {\n children: (card: Card, state: InteractionVisualState) => ReactNode;\n };\n summary?: {\n children: ReactNode | ((summary: HandSelectionSummary) => ReactNode);\n };\n actions?: {\n children: ReactNode | ((summary: HandSelectionSummary) => ReactNode);\n };\n } {\n const slots: {\n cards?: {\n children: (card: Card, state: InteractionVisualState) => ReactNode;\n };\n summary?: {\n children: ReactNode | ((summary: HandSelectionSummary) => ReactNode);\n };\n actions?: {\n children: ReactNode | ((summary: HandSelectionSummary) => ReactNode);\n };\n } = {};\n if (typeof children === \"function\") return slots;\n for (const child of Children.toArray(children)) {\n if (!isValidElement(child)) continue;\n if (child.type === HandCardsSlot) {\n if (slots.cards) {\n throw new Error(\"Only one <hand.Cards> slot may be rendered.\");\n }\n slots.cards = child.props as {\n children: (card: Card, state: InteractionVisualState) => ReactNode;\n };\n } else if (child.type === HandSummarySlot) {\n if (slots.summary) {\n throw new Error(\"Only one <hand.Summary> slot may be rendered.\");\n }\n slots.summary = child.props as {\n children: ReactNode | ((summary: HandSelectionSummary) => ReactNode);\n };\n } else if (child.type === HandActionsSlot) {\n if (slots.actions) {\n throw new Error(\"Only one <hand.Actions> slot may be rendered.\");\n }\n slots.actions = child.props as {\n children: ReactNode | ((summary: HandSelectionSummary) => ReactNode);\n };\n }\n }\n return slots;\n }\n\n function GeneratedHandCards({\n hand,\n empty,\n children,\n className,\n sort,\n layout,\n mobileInteraction,\n cardSize,\n ariaLabel,\n dropTargets,\n renderDropTargets,\n onCardIntent,\n summarySlot,\n actionsSlot,\n onSelectionSummary,\n }: {\n hand: WorkspaceHandComponentOptions;\n empty?: ReactNode;\n children: (card: Card, state: InteractionVisualState) => ReactNode;\n className?: string;\n layout?: HandLayoutKind | HandLayoutPolicy;\n mobileInteraction?: HandInteractionPolicy;\n cardSize?: \"sm\" | \"md\" | \"lg\";\n ariaLabel?: string;\n dropTargets?: ReadonlyArray<{\n target:\n | { kind: \"card\"; card: string }\n | { kind: \"space\"; target: string }\n | { kind: \"edge\"; target: string }\n | { kind: \"vertex\"; target: string }\n | { kind: \"tile\"; target: string };\n label: string;\n render: (state: CardDropTargetVisualState) => ReactNode;\n className?: string;\n role?: string;\n order?: number;\n }>;\n renderDropTargets?: (children: ReactNode) => ReactNode;\n onCardIntent?: (intent: AuthoredCardIntent) => void;\n summarySlot?: (summary: HandSelectionSummary) => ReactNode;\n actionsSlot?: (summary: HandSelectionSummary) => ReactNode;\n onSelectionSummary?: (summary: HandSelectionSummary) => void;\n } & Omit<ZoneListProps, \"children\" | \"empty\">) {\n const isMobile = useIsMobile();\n const { items, count } = useZoneCards({ sort });\n // One predictable presentation for every hand: the projected surface\n // (fan on desktop, tray on mobile by default). Authors choose other shapes\n // explicitly with `layout` (e.g. layout=\"strip\"). We no longer fall back to\n // a bare scroll strip when no interaction props are passed, so the layout —\n // and the eligible/selected projection — stays consistent across phases.\n const handClassName = clsx(\"min-h-[112px]\", className);\n const resolvedDropTargets = useMemo<RuntimeDropTarget[] | undefined>(() => {\n if (!dropTargets || dropTargets.length === 0) return undefined;\n return dropTargets.map((dt) => {\n const value =\n dt.target.kind === \"card\" ? dt.target.card : dt.target.target;\n return {\n targetId: dropTargetIdFor(dt.target.kind, value),\n label: dt.label,\n render: dt.render,\n className: dt.className,\n role: dt.role,\n order: dt.order,\n };\n });\n }, [dropTargets]);\n const content = useMemo(\n () =>\n createElement(HandSurfaceView, {\n zone: hand.zone,\n cards: items,\n renderCard: (card, state) => children(card as Card, state),\n layout,\n mobileInteraction,\n dropTargets: resolvedDropTargets,\n renderDropTargets,\n cardSize,\n renderEmpty: empty !== undefined ? () => empty : undefined,\n ariaLabel,\n onIntentRouted: onCardIntent\n ? (intent) => onCardIntent(intent)\n : undefined,\n summarySlot,\n actionsSlot,\n onSelectionSummary,\n className: handClassName,\n } satisfies HandSurfaceViewProps<(typeof items)[number]>),\n [\n ariaLabel,\n cardSize,\n children,\n empty,\n hand.zone,\n handClassName,\n items,\n layout,\n mobileInteraction,\n onCardIntent,\n onSelectionSummary,\n actionsSlot,\n renderDropTargets,\n summarySlot,\n resolvedDropTargets,\n ],\n );\n const active = items.some(\n (item) =>\n !item.hidden &&\n item.interactions.some((descriptor) =>\n isInteractionAvailable(descriptor),\n ),\n );\n const autoOpen = items.some(\n (item) =>\n !item.hidden &&\n item.interactions.some(\n (descriptor) =>\n isInteractionAvailable(descriptor) &&\n descriptor.inputs.some(\n (input) =>\n input.domain.type === \"cardTarget\" &&\n input.domain.selection?.mode === \"many\",\n ),\n ),\n );\n const version = items\n .map((item) =>\n item.hidden\n ? `${item.id}:hidden`\n : `${item.id}:${item.cardType}:${JSON.stringify(item.properties)}`,\n )\n .join(\"|\");\n const registration = useMemo(\n () => ({\n id: `${hand.name}:${hand.zone}`,\n zone: hand.zone,\n label: hand.label,\n role: hand.role,\n order: hand.order,\n version,\n count,\n active,\n autoOpen,\n content: createElement(baseUI.Zone.Root, {\n zone: hand.zone as never,\n children: content,\n }),\n }),\n [\n active,\n autoOpen,\n content,\n count,\n hand.label,\n hand.name,\n hand.order,\n hand.role,\n hand.zone,\n version,\n ],\n );\n useRegisterMobileHand(registration);\n\n return isMobile ? null : content;\n }\n\n function createStagingComponent(options: WorkspaceHandComponentOptions) {\n return ({\n children,\n label,\n renderEmptySlot,\n cardSize,\n ariaLabel,\n className,\n }: {\n children: (card: Card) => ReactNode;\n label?: ReactNode;\n renderEmptySlot?: (index: number) => ReactNode;\n cardSize?: \"sm\" | \"md\" | \"lg\";\n ariaLabel?: string;\n className?: string;\n }) =>\n createElement(HandStagingView, {\n zone: options.zone,\n renderCard: (card) => children(card as Card),\n renderEmptySlot,\n label,\n cardSize,\n ariaLabel,\n className,\n });\n }\n\n return {\n createHandCardsComponent,\n createStagingComponent,\n HandCardsSlot,\n HandSummarySlot,\n HandActionsSlot,\n };\n}\n"],"mappings":"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","names":["createElement","createElement","createElement","createElement","createElement","Interaction","Board","Zone","ReactFragment","createElement","clsx","createElement","createElement","createElement","ReactFragment","clsx","createElement","Interaction","Board","Zone","UI"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/browser-interaction/constants.ts","../src/browser-interaction/canonical.ts","../src/browser-interaction/effects.ts","../src/browser-interaction/attributes.ts","../src/browser-interaction/registry.ts","../src/browser-interaction/normalize.ts","../src/browser-interaction/resolve.ts","../src/browser-interaction/dom.ts","../src/browser-interaction/schemas.ts"],"sourcesContent":["export const DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_NAME =\n \"dreamboard-browser-interaction\" as const;\n\nexport const DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_VERSION = \"3.0.0\" as const;\n\nexport const BROWSER_INTERACTION_ATTRIBUTES = {\n protocol: \"data-dreamboard-browser-protocol\",\n surface: \"data-dreamboard-browser-surface\",\n scope: \"data-dreamboard-browser-scope\",\n role: \"data-dreamboard-browser-role\",\n intent: \"data-dreamboard-browser-intent\",\n interactionKey: \"data-dreamboard-interaction-key\",\n interactionId: \"data-dreamboard-interaction-id\",\n descriptorDigest: \"data-dreamboard-descriptor-digest\",\n draftDigest: \"data-dreamboard-draft-digest\",\n readiness: \"data-dreamboard-readiness\",\n inputKey: \"data-dreamboard-input-key\",\n candidateValue: \"data-dreamboard-candidate-value\",\n candidateState: \"data-dreamboard-candidate-state\",\n actuatorKind: \"data-dreamboard-actuator-kind\",\n enabled: \"data-dreamboard-actuator-enabled\",\n actuatorId: \"data-dreamboard-actuator-id\",\n pointerTargetId: \"data-dreamboard-pointer-target-id\",\n pointerTargetEnabled: \"data-dreamboard-pointer-target-enabled\",\n semanticEffects: \"data-dreamboard-semantic-effects\",\n acceptedEffectPatterns: \"data-dreamboard-accepted-effect-patterns\",\n preparationPatterns: \"data-dreamboard-preparation-patterns\",\n preparesIntent: \"data-dreamboard-prepares-intent\",\n preparesInputKey: \"data-dreamboard-prepares-input-key\",\n preparesCandidateValue: \"data-dreamboard-prepares-candidate-value\",\n preparesActuatorKind: \"data-dreamboard-prepares-actuator-kind\",\n diagnostic: \"data-dreamboard-browser-diagnostic\",\n} as const;\n\nexport const BROWSER_INTERACTION_RECORD_ROLES = [\n \"interaction\",\n \"actuator\",\n \"pointer-target\",\n] as const;\n\nexport const GAMEPLAY_BROWSER_INTERACTION_SURFACE = \"gameplay\" as const;\n\nexport const GAMEPLAY_BROWSER_INTERACTION_INTENTS = [\n \"arm\",\n \"reveal\",\n \"invoke\",\n \"select\",\n \"toggle\",\n \"increment\",\n \"decrement\",\n \"fill\",\n \"submit\",\n] as const;\n\nexport const GAMEPLAY_BROWSER_INTERACTION_EFFECT_KINDS = [\n \"setCandidate\",\n \"adjustResource\",\n \"setScalar\",\n \"commit\",\n \"invoke\",\n] as const;\n\nexport const BROWSER_INTERACTION_READINESS_VALUES = [\n \"ready\",\n \"blocked\",\n \"unavailable\",\n] as const;\n\nexport const BROWSER_INTERACTION_CANDIDATE_STATES = [\n \"selected\",\n \"unselected\",\n \"mixed\",\n] as const;\n\nexport const BROWSER_INTERACTION_ACTUATOR_KINDS = [\n \"click\",\n \"fill\",\n \"keyboard\",\n \"pointer\",\n] as const;\n","import { parseBrowserAttributeJson } from \"../runtime-json.js\";\n\nexport type CanonicalBrowserInteractionValue =\n | null\n | boolean\n | number\n | string\n | readonly CanonicalBrowserInteractionValue[]\n | { readonly [key: string]: CanonicalBrowserInteractionValue };\n\nfunction assertCanonicalValue(\n value: unknown,\n): asserts value is CanonicalBrowserInteractionValue {\n if (value === null) return;\n switch (typeof value) {\n case \"boolean\":\n case \"string\":\n return;\n case \"number\":\n if (Number.isFinite(value)) return;\n break;\n case \"object\":\n if (Array.isArray(value)) {\n value.forEach(assertCanonicalValue);\n return;\n }\n if (Object.getPrototypeOf(value) !== Object.prototype) break;\n for (const [key, item] of Object.entries(value)) {\n if (item === undefined) {\n throw new Error(\n `Browser interaction candidate '${key}' cannot be undefined.`,\n );\n }\n assertCanonicalValue(item);\n }\n return;\n }\n throw new Error(\n `Browser interaction candidates must be JSON-serializable primitives, arrays or plain objects. Received ${typeof value}.`,\n );\n}\n\nfunction canonicalizeValue(\n value: CanonicalBrowserInteractionValue,\n): CanonicalBrowserInteractionValue {\n if (Array.isArray(value)) {\n return value.map(canonicalizeValue);\n }\n if (value && typeof value === \"object\") {\n const objectValue = value as {\n readonly [key: string]: CanonicalBrowserInteractionValue;\n };\n return Object.fromEntries(\n Object.keys(objectValue)\n .sort()\n .map((key) => [key, canonicalizeValue(objectValue[key])]),\n );\n }\n return value;\n}\n\nexport function encodeCanonicalCandidateValue(value: unknown): string {\n parseBrowserAttributeJson(value);\n assertCanonicalValue(value);\n return JSON.stringify(canonicalizeValue(value));\n}\n\nexport function decodeCanonicalCandidateValue(\n encoded: string,\n): CanonicalBrowserInteractionValue {\n const parsed = JSON.parse(encoded) as unknown;\n parseBrowserAttributeJson(parsed);\n assertCanonicalValue(parsed);\n return canonicalizeValue(parsed);\n}\n\nexport function compareStableJson(a: unknown, b: unknown): number {\n const encodedA = encodeCanonicalCandidateValue(a);\n const encodedB = encodeCanonicalCandidateValue(b);\n return encodedA.localeCompare(encodedB);\n}\n","import {\n decodeCanonicalCandidateValue,\n encodeCanonicalCandidateValue,\n type CanonicalBrowserInteractionValue,\n} from \"./canonical.js\";\nimport type {\n BrowserInteractionEffectPattern,\n BrowserInteractionSurfaceEffect,\n GameplaySemanticEffect,\n} from \"./types.js\";\n\nexport function encodeBrowserInteractionEffect(\n effect: BrowserInteractionSurfaceEffect,\n): string {\n return encodeCanonicalCandidateValue(effect);\n}\n\nexport function decodeBrowserInteractionEffect(\n encoded: string,\n): BrowserInteractionSurfaceEffect {\n const decoded = decodeCanonicalCandidateValue(encoded);\n if (!decoded || typeof decoded !== \"object\" || Array.isArray(decoded)) {\n throw new Error(\"Browser interaction effect must be a canonical object.\");\n }\n const decodedObject = decoded as {\n readonly [key: string]: CanonicalBrowserInteractionValue;\n };\n const kind = decodedObject.kind;\n if (typeof kind !== \"string\" || kind.length === 0) {\n throw new Error(\"Browser interaction effect requires a string kind.\");\n }\n return decodedObject as BrowserInteractionSurfaceEffect;\n}\n\nexport function encodeBrowserInteractionEffectPattern(\n pattern: BrowserInteractionEffectPattern,\n): string {\n return encodeCanonicalCandidateValue(pattern);\n}\n\nexport function decodeBrowserInteractionEffectPattern(\n encoded: string,\n): BrowserInteractionEffectPattern {\n const decoded = decodeCanonicalCandidateValue(encoded);\n assertBrowserInteractionEffectPattern(decoded);\n return decoded;\n}\n\nexport function browserInteractionEffectPatternMatches(\n pattern: BrowserInteractionEffectPattern,\n effect: BrowserInteractionSurfaceEffect,\n): boolean {\n switch (pattern.kind) {\n case \"exact\":\n return (\n encodeBrowserInteractionEffect(pattern.effect) ===\n encodeBrowserInteractionEffect(effect)\n );\n case \"match\": {\n if (effect.kind !== pattern.effectKind) return false;\n for (const [field, expected] of Object.entries(pattern.fields ?? {})) {\n const actual = effect[field];\n if (actual === undefined) return false;\n if (\n encodeCanonicalCandidateValue(actual) !==\n encodeCanonicalCandidateValue(expected)\n ) {\n return false;\n }\n }\n const scalar = pattern.scalar;\n if (scalar) {\n const actual = effect[scalar.field];\n if (typeof actual !== \"number\" || !Number.isFinite(actual)) {\n return false;\n }\n if (scalar.integer === true && !Number.isInteger(actual)) {\n return false;\n }\n if (scalar.min !== undefined && actual < scalar.min) {\n return false;\n }\n if (scalar.max !== undefined && actual > scalar.max) {\n return false;\n }\n }\n return true;\n }\n }\n}\n\nexport function assertBrowserInteractionEffectPattern(\n value: unknown,\n): asserts value is BrowserInteractionEffectPattern {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"Browser interaction effect pattern must be an object.\");\n }\n const pattern = value as {\n readonly [key: string]: unknown;\n };\n if (pattern.kind === \"exact\") {\n decodeBrowserInteractionEffect(\n encodeCanonicalCandidateValue(pattern.effect),\n );\n return;\n }\n if (pattern.kind === \"match\") {\n if (\n typeof pattern.effectKind !== \"string\" ||\n pattern.effectKind.length === 0\n ) {\n throw new Error(\n \"Browser interaction match pattern requires an effectKind.\",\n );\n }\n if (pattern.fields !== undefined) {\n if (\n !pattern.fields ||\n typeof pattern.fields !== \"object\" ||\n Array.isArray(pattern.fields)\n ) {\n throw new Error(\n \"Browser interaction match pattern fields must be an object.\",\n );\n }\n }\n if (pattern.scalar !== undefined) {\n if (\n !pattern.scalar ||\n typeof pattern.scalar !== \"object\" ||\n Array.isArray(pattern.scalar) ||\n typeof (pattern.scalar as { readonly field?: unknown }).field !==\n \"string\" ||\n (pattern.scalar as { readonly field: string }).field.length === 0\n ) {\n throw new Error(\n \"Browser interaction scalar pattern requires a scalar field.\",\n );\n }\n }\n return;\n }\n throw new Error(\"Unknown browser interaction effect pattern kind.\");\n}\n\nexport function gameplaySetCandidateEffect(input: {\n readonly inputKey: string;\n readonly candidateValue: CanonicalBrowserInteractionValue;\n readonly beforeSelected: boolean;\n readonly afterSelected: boolean;\n}): GameplaySemanticEffect {\n return { kind: \"setCandidate\", ...input };\n}\n\nexport function gameplayAdjustResourceEffect(input: {\n readonly inputKey: string;\n readonly resourceKey: CanonicalBrowserInteractionValue;\n readonly delta: -1 | 1;\n}): GameplaySemanticEffect {\n return { kind: \"adjustResource\", ...input };\n}\n\nexport function gameplaySetScalarEffect(input: {\n readonly inputKey: string;\n readonly value: number;\n}): GameplaySemanticEffect {\n return { kind: \"setScalar\", ...input };\n}\n\nexport function gameplayCommitEffect(): GameplaySemanticEffect {\n return { kind: \"commit\" };\n}\n\nexport function gameplayInvokeEffect(): GameplaySemanticEffect {\n return { kind: \"invoke\" };\n}\n","import {\n BROWSER_INTERACTION_ATTRIBUTES,\n DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_VERSION,\n GAMEPLAY_BROWSER_INTERACTION_SURFACE,\n} from \"./constants.js\";\nimport { encodeCanonicalCandidateValue } from \"./canonical.js\";\nimport {\n encodeBrowserInteractionEffect,\n encodeBrowserInteractionEffectPattern,\n} from \"./effects.js\";\nimport type {\n BrowserInteractionActuatorKind,\n BrowserInteractionCandidateState,\n BrowserInteractionEffectPattern,\n BrowserInteractionIntent,\n BrowserInteractionPreparationTarget,\n BrowserInteractionReadiness,\n BrowserInteractionSurfaceEffect,\n GameplayBrowserInteractionIntent,\n GameplaySemanticEffect,\n GameplaySemanticEffectPattern,\n} from \"./types.js\";\n\nexport type BrowserInteractionAttributeMap = Record<string, string | boolean>;\n\nexport interface BrowserInteractionRootAttributesInput {\n readonly surface: string;\n readonly scopeId: string;\n readonly interactionKey: string;\n readonly interactionId: string;\n readonly descriptorDigest?: string;\n readonly draftDigest?: string;\n readonly readiness: BrowserInteractionReadiness;\n}\n\nexport interface BrowserInteractionActuatorAttributesInput {\n readonly surface: string;\n readonly scopeId: string;\n readonly interactionKey: string;\n readonly interactionId: string;\n readonly descriptorDigest?: string;\n readonly draftDigest?: string;\n readonly intent: BrowserInteractionIntent;\n readonly inputKey?: string;\n readonly candidateValue?: unknown;\n readonly candidateState?: BrowserInteractionCandidateState;\n readonly enabled?: boolean;\n readonly actuatorKind: BrowserInteractionActuatorKind;\n readonly actuatorId?: string;\n readonly semanticEffects?: readonly BrowserInteractionSurfaceEffect[];\n readonly acceptedEffectPatterns?: readonly BrowserInteractionEffectPattern[];\n readonly preparationPatterns?: readonly BrowserInteractionEffectPattern[];\n readonly prepares?: BrowserInteractionPreparationTarget;\n}\n\nexport interface BrowserInteractionPointerTargetAttributesInput {\n readonly surface: string;\n readonly scopeId: string;\n readonly interactionKey: string;\n readonly interactionId: string;\n readonly descriptorDigest?: string;\n readonly targetId: string;\n readonly enabled?: boolean;\n readonly acceptedEffectPatterns: readonly BrowserInteractionEffectPattern[];\n}\n\nfunction baseGameplayAttributes(\n input: Pick<\n BrowserInteractionRootAttributesInput,\n \"surface\" | \"scopeId\" | \"interactionKey\" | \"interactionId\"\n >,\n): BrowserInteractionAttributeMap {\n return {\n [BROWSER_INTERACTION_ATTRIBUTES.protocol]:\n DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_VERSION,\n [BROWSER_INTERACTION_ATTRIBUTES.surface]: input.surface,\n [BROWSER_INTERACTION_ATTRIBUTES.scope]: input.scopeId,\n [BROWSER_INTERACTION_ATTRIBUTES.interactionKey]: input.interactionKey,\n [BROWSER_INTERACTION_ATTRIBUTES.interactionId]: input.interactionId,\n };\n}\n\nexport function createBrowserInteractionRootAttributes(\n input: BrowserInteractionRootAttributesInput,\n): BrowserInteractionAttributeMap {\n return {\n ...baseGameplayAttributes(input),\n [BROWSER_INTERACTION_ATTRIBUTES.role]: \"interaction\",\n [BROWSER_INTERACTION_ATTRIBUTES.descriptorDigest]:\n input.descriptorDigest ?? \"\",\n [BROWSER_INTERACTION_ATTRIBUTES.draftDigest]: input.draftDigest ?? \"\",\n [BROWSER_INTERACTION_ATTRIBUTES.readiness]: input.readiness,\n };\n}\n\nexport function createBrowserInteractionActuatorAttributes(\n input: BrowserInteractionActuatorAttributesInput,\n): BrowserInteractionAttributeMap {\n const attrs: BrowserInteractionAttributeMap = {\n ...baseGameplayAttributes(input),\n [BROWSER_INTERACTION_ATTRIBUTES.role]: \"actuator\",\n [BROWSER_INTERACTION_ATTRIBUTES.intent]: input.intent,\n [BROWSER_INTERACTION_ATTRIBUTES.actuatorKind]: input.actuatorKind,\n [BROWSER_INTERACTION_ATTRIBUTES.enabled]:\n input.enabled === false ? \"false\" : \"true\",\n };\n if (input.descriptorDigest) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.descriptorDigest] =\n input.descriptorDigest;\n }\n if (input.draftDigest) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.draftDigest] = input.draftDigest;\n }\n if (input.actuatorId) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.actuatorId] = input.actuatorId;\n }\n if (input.inputKey) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.inputKey] = input.inputKey;\n }\n if (\"candidateValue\" in input) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.candidateValue] =\n encodeCanonicalCandidateValue(input.candidateValue);\n }\n if (input.candidateState) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.candidateState] = input.candidateState;\n }\n if (input.semanticEffects && input.semanticEffects.length > 0) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.semanticEffects] = JSON.stringify(\n input.semanticEffects.map(encodeBrowserInteractionEffect),\n );\n }\n if (input.acceptedEffectPatterns && input.acceptedEffectPatterns.length > 0) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.acceptedEffectPatterns] =\n JSON.stringify(\n input.acceptedEffectPatterns.map(encodeBrowserInteractionEffectPattern),\n );\n }\n if (input.preparationPatterns && input.preparationPatterns.length > 0) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.preparationPatterns] = JSON.stringify(\n input.preparationPatterns.map(encodeBrowserInteractionEffectPattern),\n );\n }\n if (input.prepares) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.preparesIntent] =\n input.prepares.intent;\n if (input.prepares.inputKey) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.preparesInputKey] =\n input.prepares.inputKey;\n }\n if (input.prepares.candidateValueKey) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.preparesCandidateValue] =\n input.prepares.candidateValueKey;\n } else if (\"candidateValue\" in input.prepares) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.preparesCandidateValue] =\n encodeCanonicalCandidateValue(input.prepares.candidateValue);\n }\n if (input.prepares.actuatorKind) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.preparesActuatorKind] =\n input.prepares.actuatorKind;\n }\n }\n return attrs;\n}\n\nexport function createBrowserInteractionPointerTargetAttributes(\n input: BrowserInteractionPointerTargetAttributesInput,\n): BrowserInteractionAttributeMap {\n const attrs: BrowserInteractionAttributeMap = {\n ...baseGameplayAttributes(input),\n [BROWSER_INTERACTION_ATTRIBUTES.role]: \"pointer-target\",\n [BROWSER_INTERACTION_ATTRIBUTES.pointerTargetId]: input.targetId,\n [BROWSER_INTERACTION_ATTRIBUTES.pointerTargetEnabled]:\n input.enabled === false ? \"false\" : \"true\",\n };\n if (input.descriptorDigest) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.descriptorDigest] =\n input.descriptorDigest;\n }\n if (input.acceptedEffectPatterns.length > 0) {\n attrs[BROWSER_INTERACTION_ATTRIBUTES.acceptedEffectPatterns] =\n JSON.stringify(\n input.acceptedEffectPatterns.map(encodeBrowserInteractionEffectPattern),\n );\n }\n return attrs;\n}\n\nexport type GameplayInteractionRootAttributesInput = Omit<\n BrowserInteractionRootAttributesInput,\n \"surface\"\n>;\n\nexport type GameplayActuatorAttributesInput = Omit<\n BrowserInteractionActuatorAttributesInput,\n | \"surface\"\n | \"intent\"\n | \"semanticEffects\"\n | \"acceptedEffectPatterns\"\n | \"preparationPatterns\"\n> & {\n readonly intent: GameplayBrowserInteractionIntent;\n readonly semanticEffects?: readonly GameplaySemanticEffect[];\n readonly acceptedEffectPatterns?: readonly GameplaySemanticEffectPattern[];\n readonly preparationPatterns?: readonly GameplaySemanticEffectPattern[];\n};\n\nexport type GameplayPointerTargetAttributesInput = Omit<\n BrowserInteractionPointerTargetAttributesInput,\n \"surface\" | \"acceptedEffectPatterns\"\n> & {\n readonly acceptedEffectPatterns: readonly GameplaySemanticEffectPattern[];\n};\n\nexport function createGameplayInteractionRootAttributes(\n input: GameplayInteractionRootAttributesInput,\n): BrowserInteractionAttributeMap {\n return createBrowserInteractionRootAttributes({\n ...input,\n surface: GAMEPLAY_BROWSER_INTERACTION_SURFACE,\n });\n}\n\nexport function createGameplayActuatorAttributes(\n input: GameplayActuatorAttributesInput,\n): BrowserInteractionAttributeMap {\n return createBrowserInteractionActuatorAttributes({\n ...input,\n surface: GAMEPLAY_BROWSER_INTERACTION_SURFACE,\n });\n}\n\nexport function createGameplayPointerTargetAttributes(\n input: GameplayPointerTargetAttributesInput,\n): BrowserInteractionAttributeMap {\n return createBrowserInteractionPointerTargetAttributes({\n ...input,\n surface: GAMEPLAY_BROWSER_INTERACTION_SURFACE,\n });\n}\n\nexport function createBrowserInteractionActuatorKey(input: {\n readonly surface: string;\n readonly scopeId: string;\n readonly interactionKey: string;\n readonly intent: BrowserInteractionIntent;\n readonly inputKey?: string;\n readonly candidateValueKey?: string;\n readonly actuatorKind: BrowserInteractionActuatorKind;\n}): string {\n return [\n input.surface,\n input.scopeId,\n input.interactionKey,\n input.intent,\n input.inputKey ?? \"\",\n input.candidateValueKey ?? \"\",\n input.actuatorKind,\n ]\n .map((part) => encodeURIComponent(part))\n .join(\"|\");\n}\n","import {\n GAMEPLAY_BROWSER_INTERACTION_EFFECT_KINDS,\n GAMEPLAY_BROWSER_INTERACTION_INTENTS,\n GAMEPLAY_BROWSER_INTERACTION_SURFACE,\n} from \"./constants.js\";\nimport type {\n BrowserInteractionIntent,\n BrowserInteractionRegistry,\n BrowserInteractionSurface,\n BrowserInteractionSurfaceDefinition,\n} from \"./types.js\";\n\nexport function defineBrowserInteractionSurface<\n Surface extends BrowserInteractionSurface,\n Intent extends BrowserInteractionIntent,\n>(\n definition: BrowserInteractionSurfaceDefinition<Surface, Intent>,\n): BrowserInteractionSurfaceDefinition<Surface, Intent> {\n const seen = new Set<string>();\n for (const intent of definition.intents) {\n if (seen.has(intent)) {\n throw new Error(\n `Browser interaction surface '${definition.surface}' declares duplicate intent '${intent}'.`,\n );\n }\n seen.add(intent);\n }\n return definition;\n}\n\nexport const gameplayBrowserInteractionSurface =\n defineBrowserInteractionSurface({\n surface: GAMEPLAY_BROWSER_INTERACTION_SURFACE,\n intents: GAMEPLAY_BROWSER_INTERACTION_INTENTS,\n effectKinds: GAMEPLAY_BROWSER_INTERACTION_EFFECT_KINDS,\n });\n\nexport function createBrowserInteractionRegistry(\n definitions: readonly BrowserInteractionSurfaceDefinition[] = [\n gameplayBrowserInteractionSurface,\n ],\n): BrowserInteractionRegistry {\n const surfaces = new Map<\n BrowserInteractionSurface,\n BrowserInteractionSurfaceDefinition\n >();\n for (const definition of definitions) {\n const existing = surfaces.get(definition.surface);\n if (existing) {\n const existingIntents = existing.intents.join(\",\");\n const nextIntents = definition.intents.join(\",\");\n const existingEffectKinds = (existing.effectKinds ?? []).join(\",\");\n const nextEffectKinds = (definition.effectKinds ?? []).join(\",\");\n if (\n existingIntents !== nextIntents ||\n existingEffectKinds !== nextEffectKinds\n ) {\n throw new Error(\n `Browser interaction surface '${definition.surface}' is already registered with a different intent vocabulary or effect vocabulary.`,\n );\n }\n continue;\n }\n surfaces.set(definition.surface, definition);\n }\n return { surfaces };\n}\n\nexport const defaultBrowserInteractionRegistry =\n createBrowserInteractionRegistry();\n","import {\n BROWSER_INTERACTION_ACTUATOR_KINDS,\n BROWSER_INTERACTION_ATTRIBUTES,\n BROWSER_INTERACTION_CANDIDATE_STATES,\n BROWSER_INTERACTION_READINESS_VALUES,\n DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_NAME,\n DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_VERSION,\n GAMEPLAY_BROWSER_INTERACTION_SURFACE,\n} from \"./constants.js\";\nimport {\n decodeCanonicalCandidateValue,\n encodeCanonicalCandidateValue,\n} from \"./canonical.js\";\nimport {\n browserInteractionEffectPatternMatches,\n decodeBrowserInteractionEffect,\n decodeBrowserInteractionEffectPattern,\n encodeBrowserInteractionEffect,\n encodeBrowserInteractionEffectPattern,\n} from \"./effects.js\";\nimport { createBrowserInteractionActuatorKey } from \"./attributes.js\";\nimport { defaultBrowserInteractionRegistry } from \"./registry.js\";\nimport type {\n BrowserInteractionActuator,\n BrowserInteractionActuatorKind,\n BrowserInteractionCandidateState,\n BrowserInteractionDiagnostic,\n BrowserInteractionEffectPattern,\n BrowserInteractionEntity,\n BrowserInteractionPointerTarget,\n BrowserInteractionRawRecord,\n BrowserInteractionReadiness,\n BrowserInteractionRegistry,\n BrowserInteractionSemanticSurfaceSnapshot,\n BrowserInteractionSnapshot,\n BrowserInteractionSurfaceEffect,\n BrowserInteractionSurface,\n BrowserInteractionSurfaceSnapshot,\n} from \"./types.js\";\n\ninterface PendingInteraction {\n interactionKey: string;\n interactionId: string;\n descriptorDigest?: string;\n draftDigest?: string;\n readiness: BrowserInteractionReadiness;\n rootSeen: boolean;\n actuators: BrowserInteractionActuator[];\n pointerTargets: BrowserInteractionPointerTarget[];\n diagnostics: BrowserInteractionDiagnostic[];\n}\n\ninterface PendingSemanticSurface {\n kind: \"semantic\";\n surface: BrowserInteractionSurface;\n scopeId: string;\n interactions: Map<string, PendingInteraction>;\n diagnostics: BrowserInteractionDiagnostic[];\n}\n\ninterface PendingUnknownSurface {\n kind: \"unknown\";\n surface: BrowserInteractionSurface;\n scopeId: string;\n diagnostics: BrowserInteractionDiagnostic[];\n}\n\ntype PendingSurface = PendingSemanticSurface | PendingUnknownSurface;\n\nexport interface NormalizeBrowserInteractionRecordsOptions {\n readonly registry?: BrowserInteractionRegistry;\n}\n\nexport function normalizeBrowserInteractionRecords(\n records: readonly BrowserInteractionRawRecord[],\n options: NormalizeBrowserInteractionRecordsOptions = {},\n): BrowserInteractionSnapshot {\n const registry = options.registry ?? defaultBrowserInteractionRegistry;\n const diagnostics: BrowserInteractionDiagnostic[] = [];\n const surfaces = new Map<string, PendingSurface>();\n\n const getSurface = (\n surface: string,\n scopeId: string,\n ): PendingSurface | null => {\n const registered = registry.surfaces.get(surface);\n const key = `${surface}\\0${scopeId}`;\n const existing = surfaces.get(key);\n if (existing) return existing;\n if (!registered) {\n const diagnostic = diagnosticFor({\n code: \"unknown-surface\",\n message: `Unknown browser interaction surface '${surface}'.`,\n surface,\n scopeId,\n });\n diagnostics.push(diagnostic);\n const pending: PendingUnknownSurface = {\n kind: \"unknown\",\n surface,\n scopeId,\n diagnostics: [diagnostic],\n };\n surfaces.set(key, pending);\n return pending;\n }\n const pending: PendingSemanticSurface = {\n kind: \"semantic\",\n surface,\n scopeId,\n interactions: new Map(),\n diagnostics: [],\n };\n surfaces.set(key, pending);\n return pending;\n };\n\n for (const record of records) {\n const attributes = record.attributes;\n const protocol = text(attributes, BROWSER_INTERACTION_ATTRIBUTES.protocol);\n const surface = text(attributes, BROWSER_INTERACTION_ATTRIBUTES.surface);\n const scopeId = text(attributes, BROWSER_INTERACTION_ATTRIBUTES.scope);\n const role = text(attributes, BROWSER_INTERACTION_ATTRIBUTES.role);\n\n if (protocol !== DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_VERSION) {\n diagnostics.push(\n diagnosticFor({\n code: \"invalid-protocol\",\n message: `Expected browser interaction protocol ${DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_VERSION}.`,\n surface,\n scopeId,\n }),\n );\n continue;\n }\n if (\n !surface ||\n !scopeId ||\n (role !== \"interaction\" &&\n role !== \"actuator\" &&\n role !== \"pointer-target\")\n ) {\n diagnostics.push(\n diagnosticFor({\n code: \"invalid-record\",\n message:\n \"Browser interaction records require protocol, surface, scope and role.\",\n surface,\n scopeId,\n }),\n );\n continue;\n }\n\n const pendingSurface = getSurface(surface, scopeId);\n if (!pendingSurface || pendingSurface.kind !== \"semantic\") {\n continue;\n }\n const interactionKey = text(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.interactionKey,\n );\n const interactionId = text(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.interactionId,\n );\n if (!interactionKey || !interactionId) {\n pushSurfaceDiagnostic(\n pendingSurface,\n diagnostics,\n diagnosticFor({\n code: \"invalid-record\",\n message:\n \"Browser interaction records require interaction key and id.\",\n surface,\n scopeId,\n }),\n );\n continue;\n }\n const interaction = getInteraction(\n pendingSurface,\n interactionKey,\n interactionId,\n );\n\n if (role === \"interaction\") {\n interaction.rootSeen = true;\n interaction.descriptorDigest = optionalText(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.descriptorDigest,\n );\n interaction.draftDigest = optionalText(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.draftDigest,\n );\n interaction.readiness = parseReadiness(\n text(attributes, BROWSER_INTERACTION_ATTRIBUTES.readiness),\n );\n continue;\n }\n\n if (role === \"pointer-target\") {\n const pointerTarget = parseGameplayPointerTarget(attributes, {\n surface,\n scopeId,\n interactionKey,\n interactionId,\n });\n if (pointerTarget.diagnostics.length > 0) {\n interaction.diagnostics.push(...pointerTarget.diagnostics);\n diagnostics.push(...pointerTarget.diagnostics);\n }\n const registered = registry.surfaces.get(surface);\n if (registered?.effectKinds) {\n for (const pattern of pointerTarget.acceptedEffectPatterns) {\n const effectKind =\n pattern.kind === \"exact\" ? pattern.effect.kind : pattern.effectKind;\n if (!registered.effectKinds.includes(effectKind)) {\n const diagnostic = diagnosticFor({\n code: \"unknown-surface-effect\",\n message: `Unknown browser interaction effect '${effectKind}' for surface '${surface}'.`,\n surface,\n scopeId,\n interactionKey,\n targetId: pointerTarget.targetId,\n });\n interaction.diagnostics.push(diagnostic);\n diagnostics.push(diagnostic);\n }\n }\n }\n interaction.pointerTargets.push(pointerTarget);\n continue;\n }\n\n const actuator = parseGameplayActuator(attributes, {\n surface,\n scopeId,\n interactionKey,\n interactionId,\n });\n if (actuator.diagnostics.length > 0) {\n interaction.diagnostics.push(...actuator.diagnostics);\n diagnostics.push(...actuator.diagnostics);\n }\n const registered = registry.surfaces.get(surface);\n if (registered && !registered.intents.includes(actuator.intent)) {\n const diagnostic = diagnosticFor({\n code: \"unknown-intent\",\n message: `Unknown browser interaction intent '${actuator.intent}' for surface '${surface}'.`,\n surface,\n scopeId,\n interactionKey,\n intent: actuator.intent,\n actuatorId: actuator.actuatorId,\n });\n interaction.diagnostics.push(diagnostic);\n diagnostics.push(diagnostic);\n }\n if (registered?.effectKinds) {\n for (const effect of actuator.semanticEffects) {\n if (!registered.effectKinds.includes(effect.kind)) {\n const diagnostic = diagnosticFor({\n code: \"unknown-surface-effect\",\n message: `Unknown browser interaction effect '${effect.kind}' for surface '${surface}'.`,\n surface,\n scopeId,\n interactionKey,\n intent: actuator.intent,\n actuatorId: actuator.actuatorId,\n });\n interaction.diagnostics.push(diagnostic);\n diagnostics.push(diagnostic);\n }\n }\n for (const pattern of [\n ...actuator.acceptedEffectPatterns,\n ...actuator.preparationPatterns,\n ]) {\n const effectKind =\n pattern.kind === \"exact\" ? pattern.effect.kind : pattern.effectKind;\n if (!registered.effectKinds.includes(effectKind)) {\n const diagnostic = diagnosticFor({\n code: \"unknown-surface-effect\",\n message: `Unknown browser interaction effect '${effectKind}' for surface '${surface}'.`,\n surface,\n scopeId,\n interactionKey,\n intent: actuator.intent,\n actuatorId: actuator.actuatorId,\n });\n interaction.diagnostics.push(diagnostic);\n diagnostics.push(diagnostic);\n }\n }\n }\n interaction.actuators.push(actuator);\n }\n\n for (const surface of surfaces.values()) {\n if (surface.kind !== \"semantic\") continue;\n for (const interaction of surface.interactions.values()) {\n if (\n interaction.rootSeen ||\n (interaction.actuators.length === 0 &&\n interaction.pointerTargets.length === 0)\n ) {\n continue;\n }\n const diagnostic = diagnosticFor({\n code: \"orphan-actuator\",\n message:\n \"Browser interaction actuators and pointer targets require a rendered semantic root.\",\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n });\n interaction.diagnostics.push(diagnostic);\n diagnostics.push(diagnostic);\n }\n }\n\n const snapshot: BrowserInteractionSnapshot = {\n protocol: {\n name: DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_NAME,\n version: DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_VERSION,\n },\n surfaces: [...surfaces.values()].map(finalizeSurface).sort(compareSurface),\n diagnostics: [],\n };\n const validationDiagnostics = validateBrowserInteractionSnapshot(snapshot);\n return {\n ...snapshot,\n diagnostics: [...diagnostics, ...validationDiagnostics].sort(\n compareDiagnostic,\n ),\n };\n}\n\nexport function validateBrowserInteractionSnapshot(\n snapshot: BrowserInteractionSnapshot,\n): readonly BrowserInteractionDiagnostic[] {\n const diagnostics: BrowserInteractionDiagnostic[] = [];\n for (const surface of snapshot.surfaces) {\n if (!isSemanticSurfaceSnapshot(surface)) continue;\n for (const interaction of surface.interactions) {\n const enabledByKey = new Map<string, BrowserInteractionActuator[]>();\n const enabledTargetsByKey = new Map<\n string,\n BrowserInteractionPointerTarget[]\n >();\n for (const actuator of interaction.actuators) {\n if (!actuator.enabled) continue;\n const key = actuatorIdentityKey({\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n actuator,\n });\n const group = enabledByKey.get(key) ?? [];\n group.push(actuator);\n enabledByKey.set(key, group);\n }\n for (const pointerTarget of interaction.pointerTargets) {\n if (!pointerTarget.enabled) continue;\n const key = pointerTargetIdentityKey({\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n pointerTarget,\n });\n const group = enabledTargetsByKey.get(key) ?? [];\n group.push(pointerTarget);\n enabledTargetsByKey.set(key, group);\n }\n for (const [key, actuators] of enabledByKey) {\n if (actuators.length > 1) {\n diagnostics.push(\n diagnosticFor({\n code: \"duplicate-enabled-actuator\",\n message: `Duplicate enabled actuator for '${key}'.`,\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n intent: actuators[0]?.intent,\n actuatorId: actuators[0]?.actuatorId,\n }),\n );\n }\n }\n for (const [key, pointerTargets] of enabledTargetsByKey) {\n if (pointerTargets.length > 1) {\n diagnostics.push(\n diagnosticFor({\n code: \"duplicate-enabled-pointer-target\",\n message: `Duplicate enabled pointer target for '${key}'.`,\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n targetId: pointerTargets[0]?.targetId,\n }),\n );\n }\n }\n diagnostics.push(\n ...diagnosticsForPreparationCycles(surface, interaction),\n ...diagnosticsForPreparationPatternAmbiguity(surface, interaction),\n ...diagnosticsForInvalidAcceptedPatterns(surface, interaction),\n ...diagnosticsForGameplayEffectCompatibility(surface, interaction),\n );\n }\n }\n return diagnostics.sort(compareDiagnostic);\n}\n\nfunction diagnosticsForInvalidAcceptedPatterns(\n surface: BrowserInteractionSemanticSurfaceSnapshot,\n interaction: BrowserInteractionEntity,\n): BrowserInteractionDiagnostic[] {\n const diagnostics: BrowserInteractionDiagnostic[] = [];\n for (const record of [\n ...interaction.actuators.map((actuator) => ({\n patterns: actuator.acceptedEffectPatterns,\n intent: actuator.intent,\n actuatorId: actuator.actuatorId,\n targetId: undefined,\n })),\n ...interaction.pointerTargets.map((pointerTarget) => ({\n patterns: pointerTarget.acceptedEffectPatterns,\n intent: undefined,\n actuatorId: undefined,\n targetId: pointerTarget.targetId,\n })),\n ]) {\n for (const pattern of record.patterns) {\n if (\n pattern.kind === \"match\" &&\n Object.keys(pattern.fields ?? {}).length === 0 &&\n pattern.scalar === undefined\n ) {\n diagnostics.push(\n diagnosticFor({\n code: \"invalid-effect-pattern\",\n message:\n \"Accepted-effect match patterns must be bounded by fields or scalar constraints.\",\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n intent: record.intent,\n actuatorId: record.actuatorId,\n targetId: record.targetId,\n }),\n );\n }\n }\n }\n return diagnostics;\n}\n\nfunction diagnosticsForGameplayEffectCompatibility(\n surface: BrowserInteractionSemanticSurfaceSnapshot,\n interaction: BrowserInteractionEntity,\n): BrowserInteractionDiagnostic[] {\n if (surface.surface !== GAMEPLAY_BROWSER_INTERACTION_SURFACE) return [];\n const diagnostics: BrowserInteractionDiagnostic[] = [];\n for (const actuator of interaction.actuators) {\n for (const effect of actuator.semanticEffects) {\n if (!gameplayIntentCanPerformEffect(actuator.intent, effect.kind)) {\n diagnostics.push(\n diagnosticFor({\n code: \"effect-intent-incompatibility\",\n message:\n \"Gameplay browser interaction intent is incompatible with its semantic effect.\",\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n intent: actuator.intent,\n actuatorId: actuator.actuatorId,\n }),\n );\n }\n }\n }\n return diagnostics;\n}\n\nfunction gameplayIntentCanPerformEffect(intent: string, effectKind: string) {\n switch (effectKind) {\n case \"setCandidate\":\n return intent === \"select\" || intent === \"toggle\";\n case \"adjustResource\":\n return intent === \"increment\" || intent === \"decrement\";\n case \"setScalar\":\n return (\n intent === \"fill\" || intent === \"increment\" || intent === \"decrement\"\n );\n case \"commit\":\n return intent === \"submit\" || intent === \"invoke\";\n case \"invoke\":\n return intent === \"invoke\" || intent === \"select\" || intent === \"toggle\";\n default:\n return true;\n }\n}\n\nfunction parseGameplayActuator(\n attributes: Readonly<Record<string, string | boolean | null | undefined>>,\n context: {\n surface: string;\n scopeId: string;\n interactionKey: string;\n interactionId: string;\n },\n): BrowserInteractionActuator {\n const diagnostics: BrowserInteractionDiagnostic[] = [];\n const intent = text(attributes, BROWSER_INTERACTION_ATTRIBUTES.intent);\n const actuatorKind = parseActuatorKind(\n text(attributes, BROWSER_INTERACTION_ATTRIBUTES.actuatorKind),\n );\n const inputKey = optionalText(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.inputKey,\n );\n const candidate = parseCandidate(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.candidateValue,\n context,\n intent,\n diagnostics,\n );\n const candidateState = parseCandidateState(\n optionalText(attributes, BROWSER_INTERACTION_ATTRIBUTES.candidateState),\n );\n const explicitId = optionalText(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.actuatorId,\n );\n const enabled = parseEnabled(\n attributes[BROWSER_INTERACTION_ATTRIBUTES.enabled],\n );\n const actuatorId =\n explicitId ??\n createBrowserInteractionActuatorKey({\n surface: context.surface,\n scopeId: context.scopeId,\n interactionKey: context.interactionKey,\n intent,\n inputKey,\n candidateValueKey: candidate?.candidateValueKey,\n actuatorKind,\n });\n const preparesIntent = optionalText(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.preparesIntent,\n );\n const preparesCandidate = parseCandidate(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.preparesCandidateValue,\n context,\n preparesIntent ?? intent,\n diagnostics,\n );\n const prepares =\n preparesIntent === undefined\n ? undefined\n : {\n intent: preparesIntent,\n inputKey: optionalText(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.preparesInputKey,\n ),\n candidateValue: preparesCandidate?.candidateValue,\n candidateValueKey: preparesCandidate?.candidateValueKey,\n actuatorKind: parseOptionalActuatorKind(\n optionalText(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.preparesActuatorKind,\n ),\n ),\n };\n const semanticEffects = parseEffectList(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.semanticEffects,\n context,\n intent,\n diagnostics,\n );\n const acceptedEffectPatterns = parseEffectPatternList(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.acceptedEffectPatterns,\n context,\n intent,\n diagnostics,\n );\n const preparationPatterns = parseEffectPatternList(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.preparationPatterns,\n context,\n intent,\n diagnostics,\n );\n\n if (!intent) {\n diagnostics.push(\n diagnosticFor({\n code: \"invalid-record\",\n message: \"Browser interaction actuator records require an intent.\",\n ...context,\n }),\n );\n }\n\n return {\n actuatorId,\n intent,\n descriptorDigest: optionalText(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.descriptorDigest,\n ),\n draftDigest: optionalText(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.draftDigest,\n ),\n inputKey,\n candidateValue: candidate?.candidateValue,\n candidateValueKey: candidate?.candidateValueKey,\n candidateState,\n enabled,\n actuatorKind,\n semanticEffects,\n acceptedEffectPatterns,\n preparationPatterns,\n prepares,\n diagnostics: diagnostics.sort(compareDiagnostic),\n };\n}\n\nfunction parseGameplayPointerTarget(\n attributes: Readonly<Record<string, string | boolean | null | undefined>>,\n context: {\n surface: string;\n scopeId: string;\n interactionKey: string;\n interactionId: string;\n },\n): BrowserInteractionPointerTarget {\n const diagnostics: BrowserInteractionDiagnostic[] = [];\n const targetId = text(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.pointerTargetId,\n );\n const enabled = parseEnabled(\n attributes[BROWSER_INTERACTION_ATTRIBUTES.pointerTargetEnabled],\n );\n const acceptedEffectPatterns = parseEffectPatternList(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.acceptedEffectPatterns,\n context,\n \"pointer-target\",\n diagnostics,\n );\n\n if (!targetId) {\n diagnostics.push(\n diagnosticFor({\n code: \"invalid-record\",\n message:\n \"Browser interaction pointer target records require a target id.\",\n ...context,\n }),\n );\n }\n\n return {\n targetId,\n descriptorDigest: optionalText(\n attributes,\n BROWSER_INTERACTION_ATTRIBUTES.descriptorDigest,\n ),\n enabled,\n acceptedEffectPatterns,\n diagnostics: diagnostics.sort(compareDiagnostic),\n };\n}\n\nfunction parseEffectList(\n attributes: Readonly<Record<string, string | boolean | null | undefined>>,\n attribute: string,\n context: {\n surface: string;\n scopeId: string;\n interactionKey: string;\n },\n intent: string,\n diagnostics: BrowserInteractionDiagnostic[],\n): BrowserInteractionSurfaceEffect[] {\n const encodedList = optionalText(attributes, attribute);\n if (encodedList === undefined) return [];\n try {\n const raw = JSON.parse(encodedList) as unknown;\n if (!Array.isArray(raw) || raw.some((item) => typeof item !== \"string\")) {\n throw new Error(\"Expected encoded effect array.\");\n }\n return raw\n .map((encoded) => decodeBrowserInteractionEffect(encoded))\n .sort((a, b) =>\n encodeBrowserInteractionEffect(a).localeCompare(\n encodeBrowserInteractionEffect(b),\n ),\n );\n } catch {\n diagnostics.push(\n diagnosticFor({\n code: \"invalid-effect-payload\",\n message: \"Invalid browser interaction semantic effect payload.\",\n ...context,\n intent,\n }),\n );\n return [];\n }\n}\n\nfunction parseEffectPatternList(\n attributes: Readonly<Record<string, string | boolean | null | undefined>>,\n attribute: string,\n context: {\n surface: string;\n scopeId: string;\n interactionKey: string;\n },\n intent: string,\n diagnostics: BrowserInteractionDiagnostic[],\n): BrowserInteractionEffectPattern[] {\n const encodedList = optionalText(attributes, attribute);\n if (encodedList === undefined) return [];\n try {\n const raw = JSON.parse(encodedList) as unknown;\n if (!Array.isArray(raw) || raw.some((item) => typeof item !== \"string\")) {\n throw new Error(\"Expected encoded effect pattern array.\");\n }\n return raw\n .map((encoded) => decodeBrowserInteractionEffectPattern(encoded))\n .sort((a, b) =>\n encodeBrowserInteractionEffectPattern(a).localeCompare(\n encodeBrowserInteractionEffectPattern(b),\n ),\n );\n } catch {\n diagnostics.push(\n diagnosticFor({\n code: \"invalid-effect-pattern\",\n message: \"Invalid browser interaction semantic effect pattern.\",\n ...context,\n intent,\n }),\n );\n return [];\n }\n}\n\nfunction parseCandidate(\n attributes: Readonly<Record<string, string | boolean | null | undefined>>,\n attribute: string,\n context: {\n surface: string;\n scopeId: string;\n interactionKey: string;\n },\n intent: string,\n diagnostics: BrowserInteractionDiagnostic[],\n) {\n const encoded = optionalText(attributes, attribute);\n if (encoded === undefined) return undefined;\n try {\n const candidateValue = decodeCanonicalCandidateValue(encoded);\n return {\n candidateValue,\n candidateValueKey: encodeCanonicalCandidateValue(candidateValue),\n };\n } catch {\n diagnostics.push(\n diagnosticFor({\n code: \"invalid-candidate\",\n message: `Invalid canonical browser interaction candidate '${encoded}'.`,\n ...context,\n intent,\n }),\n );\n return undefined;\n }\n}\n\nfunction getInteraction(\n surface: PendingSemanticSurface,\n interactionKey: string,\n interactionId: string,\n): PendingInteraction {\n const existing = surface.interactions.get(interactionKey);\n if (existing) return existing;\n const next: PendingInteraction = {\n interactionKey,\n interactionId,\n readiness: \"ready\",\n rootSeen: false,\n actuators: [],\n pointerTargets: [],\n diagnostics: [],\n };\n surface.interactions.set(interactionKey, next);\n return next;\n}\n\nfunction finalizeSurface(\n surface: PendingSurface,\n): BrowserInteractionSurfaceSnapshot {\n if (surface.kind !== \"semantic\") {\n return {\n surface: surface.surface,\n scopeId: surface.scopeId,\n diagnostics: surface.diagnostics.sort(compareDiagnostic),\n };\n }\n const interactions: BrowserInteractionEntity[] = [\n ...surface.interactions.values(),\n ]\n .map((interaction) => ({\n interactionKey: interaction.interactionKey,\n interactionId: interaction.interactionId,\n descriptorDigest: interaction.descriptorDigest,\n draftDigest: interaction.draftDigest,\n readiness: interaction.readiness,\n actuators: interaction.actuators.sort(compareActuator),\n pointerTargets: interaction.pointerTargets.sort(comparePointerTarget),\n diagnostics: interaction.diagnostics.sort(compareDiagnostic),\n }))\n .sort((a, b) => a.interactionKey.localeCompare(b.interactionKey));\n return {\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactions,\n diagnostics: surface.diagnostics.sort(compareDiagnostic),\n };\n}\n\nfunction diagnosticsForPreparationCycles(\n surface: BrowserInteractionSemanticSurfaceSnapshot,\n interaction: BrowserInteractionEntity,\n): BrowserInteractionDiagnostic[] {\n const diagnostics: BrowserInteractionDiagnostic[] = [];\n diagnostics.push(\n ...diagnosticsForEffectPreparationCycles(surface, interaction),\n );\n const actuators = new Map<string, BrowserInteractionActuator>();\n for (const actuator of interaction.actuators) {\n actuators.set(\n actuatorIdentityKey({\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n actuator,\n }),\n actuator,\n );\n }\n for (const actuator of interaction.actuators) {\n const visited = new Set<string>();\n let current: BrowserInteractionActuator | undefined = actuator;\n while (current?.prepares) {\n const key = actuatorIdentityKey({\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n actuator: current,\n });\n if (visited.has(key)) {\n diagnostics.push(\n diagnosticFor({\n code: \"preparation-cycle\",\n message: `Preparation cycle detected for actuator '${current.actuatorId}'.`,\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n intent: current.intent,\n actuatorId: current.actuatorId,\n }),\n );\n break;\n }\n visited.add(key);\n current = actuators.get(\n targetIdentityKey({\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n target: current.prepares,\n }),\n );\n }\n }\n return diagnostics;\n}\n\nfunction diagnosticsForEffectPreparationCycles(\n surface: BrowserInteractionSemanticSurfaceSnapshot,\n interaction: BrowserInteractionEntity,\n): BrowserInteractionDiagnostic[] {\n const diagnostics: BrowserInteractionDiagnostic[] = [];\n const actuatorKeys = new Map<BrowserInteractionActuator, string>();\n interaction.actuators.forEach((actuator, index) => {\n actuatorKeys.set(actuator, `${actuator.actuatorId}\\0${index}`);\n });\n for (const actuator of interaction.actuators) {\n const visited = new Set<string>();\n let current: BrowserInteractionActuator | undefined = actuator;\n while (current) {\n const key = actuatorKeys.get(current);\n if (!key) break;\n if (visited.has(key)) {\n diagnostics.push(\n diagnosticFor({\n code: \"preparation-cycle\",\n message: `Semantic preparation cycle detected for actuator '${current.actuatorId}'.`,\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n intent: current.intent,\n actuatorId: current.actuatorId,\n }),\n );\n break;\n }\n visited.add(key);\n current = interaction.actuators.find((candidate) =>\n current?.preparationPatterns.some((pattern) =>\n candidate.semanticEffects.some((effect) =>\n browserInteractionEffectPatternMatches(pattern, effect),\n ),\n ),\n );\n }\n }\n return diagnostics;\n}\n\nfunction diagnosticsForPreparationPatternAmbiguity(\n surface: BrowserInteractionSemanticSurfaceSnapshot,\n interaction: BrowserInteractionEntity,\n): BrowserInteractionDiagnostic[] {\n const diagnostics: BrowserInteractionDiagnostic[] = [];\n for (const target of interaction.actuators) {\n for (const effect of target.semanticEffects) {\n const matches = interaction.actuators.filter((actuator) =>\n actuator.preparationPatterns.some((pattern) =>\n browserInteractionEffectPatternMatches(pattern, effect),\n ),\n );\n const uniqueActuatorIds = new Set(\n matches.map((match) => match.actuatorId),\n );\n if (uniqueActuatorIds.size > 1) {\n diagnostics.push(\n diagnosticFor({\n code: \"ambiguous-preparation-pattern\",\n message:\n \"Multiple preparation patterns can prepare the same semantic effect.\",\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n intent: target.intent,\n actuatorId: target.actuatorId,\n }),\n );\n }\n }\n }\n return diagnostics;\n}\n\nexport function actuatorIdentityKey(input: {\n readonly surface: string;\n readonly scopeId: string;\n readonly interactionKey: string;\n readonly actuator: Pick<\n BrowserInteractionActuator,\n \"intent\" | \"inputKey\" | \"candidateValueKey\" | \"actuatorKind\"\n >;\n}): string {\n return createBrowserInteractionActuatorKey({\n surface: input.surface,\n scopeId: input.scopeId,\n interactionKey: input.interactionKey,\n intent: input.actuator.intent,\n inputKey: input.actuator.inputKey,\n candidateValueKey: input.actuator.candidateValueKey,\n actuatorKind: input.actuator.actuatorKind,\n });\n}\n\nexport function pointerTargetIdentityKey(input: {\n readonly surface: string;\n readonly scopeId: string;\n readonly interactionKey: string;\n readonly pointerTarget: Pick<BrowserInteractionPointerTarget, \"targetId\">;\n}): string {\n return [\n input.surface,\n input.scopeId,\n input.interactionKey,\n input.pointerTarget.targetId,\n ]\n .map((part) => encodeURIComponent(part))\n .join(\"|\");\n}\n\nexport function isGameplaySurfaceSnapshot(\n surface: BrowserInteractionSurfaceSnapshot,\n): surface is BrowserInteractionSemanticSurfaceSnapshot<\n typeof GAMEPLAY_BROWSER_INTERACTION_SURFACE\n> {\n return surface.surface === GAMEPLAY_BROWSER_INTERACTION_SURFACE;\n}\n\nexport function isSemanticSurfaceSnapshot(\n surface: BrowserInteractionSurfaceSnapshot,\n): surface is BrowserInteractionSemanticSurfaceSnapshot {\n return \"interactions\" in surface;\n}\n\nexport function targetIdentityKey(input: {\n readonly surface: string;\n readonly scopeId: string;\n readonly interactionKey: string;\n readonly target: {\n readonly intent: string;\n readonly inputKey?: string;\n readonly candidateValueKey?: string;\n readonly actuatorKind?: BrowserInteractionActuatorKind;\n };\n}): string {\n return createBrowserInteractionActuatorKey({\n surface: input.surface,\n scopeId: input.scopeId,\n interactionKey: input.interactionKey,\n intent: input.target.intent,\n inputKey: input.target.inputKey,\n candidateValueKey: input.target.candidateValueKey,\n actuatorKind: input.target.actuatorKind ?? \"click\",\n });\n}\n\nfunction pushSurfaceDiagnostic(\n surface: PendingSemanticSurface,\n all: BrowserInteractionDiagnostic[],\n diagnostic: BrowserInteractionDiagnostic,\n) {\n surface.diagnostics.push(diagnostic);\n all.push(diagnostic);\n}\n\nfunction diagnosticFor(\n input: Omit<BrowserInteractionDiagnostic, \"severity\">,\n): BrowserInteractionDiagnostic {\n return { severity: \"error\", ...input };\n}\n\nfunction text(\n attributes: Readonly<Record<string, string | boolean | null | undefined>>,\n key: string,\n): string {\n const value = attributes[key];\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n return value ?? \"\";\n}\n\nfunction optionalText(\n attributes: Readonly<Record<string, string | boolean | null | undefined>>,\n key: string,\n): string | undefined {\n const value = text(attributes, key);\n return value === \"\" ? undefined : value;\n}\n\nfunction parseReadiness(value: string): BrowserInteractionReadiness {\n return BROWSER_INTERACTION_READINESS_VALUES.includes(\n value as BrowserInteractionReadiness,\n )\n ? (value as BrowserInteractionReadiness)\n : \"blocked\";\n}\n\nfunction parseCandidateState(\n value: string | undefined,\n): BrowserInteractionCandidateState | undefined {\n return BROWSER_INTERACTION_CANDIDATE_STATES.includes(\n value as BrowserInteractionCandidateState,\n )\n ? (value as BrowserInteractionCandidateState)\n : undefined;\n}\n\nfunction parseActuatorKind(value: string): BrowserInteractionActuatorKind {\n return parseOptionalActuatorKind(value) ?? \"click\";\n}\n\nfunction parseOptionalActuatorKind(\n value: string | undefined,\n): BrowserInteractionActuatorKind | undefined {\n return BROWSER_INTERACTION_ACTUATOR_KINDS.includes(\n value as BrowserInteractionActuatorKind,\n )\n ? (value as BrowserInteractionActuatorKind)\n : undefined;\n}\n\nfunction parseEnabled(value: string | boolean | null | undefined): boolean {\n if (value === false || value === \"false\") return false;\n return true;\n}\n\nfunction compareSurface(\n a: BrowserInteractionSurfaceSnapshot,\n b: BrowserInteractionSurfaceSnapshot,\n): number {\n return (\n a.surface.localeCompare(b.surface) || a.scopeId.localeCompare(b.scopeId)\n );\n}\n\nfunction compareActuator(\n a: BrowserInteractionActuator,\n b: BrowserInteractionActuator,\n): number {\n return a.actuatorId.localeCompare(b.actuatorId);\n}\n\nfunction comparePointerTarget(\n a: BrowserInteractionPointerTarget,\n b: BrowserInteractionPointerTarget,\n): number {\n return a.targetId.localeCompare(b.targetId);\n}\n\nfunction compareDiagnostic(\n a: BrowserInteractionDiagnostic,\n b: BrowserInteractionDiagnostic,\n): number {\n return (\n a.code.localeCompare(b.code) ||\n (a.surface ?? \"\").localeCompare(b.surface ?? \"\") ||\n (a.scopeId ?? \"\").localeCompare(b.scopeId ?? \"\") ||\n (a.interactionKey ?? \"\").localeCompare(b.interactionKey ?? \"\") ||\n (a.intent ?? \"\").localeCompare(b.intent ?? \"\") ||\n (a.actuatorId ?? \"\").localeCompare(b.actuatorId ?? \"\") ||\n a.message.localeCompare(b.message)\n );\n}\n","import { encodeCanonicalCandidateValue } from \"./canonical.js\";\nimport {\n browserInteractionEffectPatternMatches,\n encodeBrowserInteractionEffect,\n} from \"./effects.js\";\nimport {\n actuatorIdentityKey,\n isSemanticSurfaceSnapshot,\n targetIdentityKey,\n validateBrowserInteractionSnapshot,\n} from \"./normalize.js\";\nimport type {\n BrowserInteractionActuator,\n BrowserInteractionDiagnostic,\n BrowserInteractionEffectRequest,\n BrowserInteractionEffectResolution,\n BrowserInteractionEntity,\n BrowserInteractionIntentRequest,\n BrowserInteractionPointerTarget,\n BrowserInteractionPointerTargetResolution,\n BrowserInteractionResolution,\n BrowserInteractionSemanticSurfaceSnapshot,\n BrowserInteractionSnapshot,\n BrowserInteractionSurfaceEffect,\n} from \"./types.js\";\n\nexport function resolveBrowserInteractionIntent(\n snapshot: BrowserInteractionSnapshot,\n request: BrowserInteractionIntentRequest,\n): BrowserInteractionResolution {\n const snapshotDiagnostics = [\n ...snapshot.diagnostics,\n ...validateBrowserInteractionSnapshot(snapshot),\n ];\n if (\n snapshotDiagnostics.some((diagnostic) => diagnostic.severity === \"error\")\n ) {\n return {\n ok: false,\n code: \"invalid-snapshot\",\n diagnostics: snapshotDiagnostics,\n };\n }\n\n const candidateValueKey =\n request.candidateValueKey ??\n (\"candidateValue\" in request\n ? encodeCanonicalCandidateValue(request.candidateValue)\n : undefined);\n const surfaces = snapshot.surfaces.filter(\n (surface): surface is BrowserInteractionSemanticSurfaceSnapshot =>\n isSemanticSurfaceSnapshot(surface) &&\n surface.surface === request.surface &&\n (request.scopeId === undefined || surface.scopeId === request.scopeId),\n );\n const matches = surfaces.flatMap((surface) =>\n surface.interactions.flatMap((interaction) => {\n if (\n request.interactionKey !== undefined &&\n interaction.interactionKey !== request.interactionKey\n ) {\n return [];\n }\n if (\n request.interactionId !== undefined &&\n interaction.interactionId !== request.interactionId\n ) {\n return [];\n }\n return interaction.actuators\n .filter((actuator) =>\n actuatorMatchesRequest(actuator, request, candidateValueKey),\n )\n .map((actuator) => ({ surface, interaction, actuator }));\n }),\n );\n const enabledMatches = matches.filter((match) => match.actuator.enabled);\n const actionable = request.allowDisabled === true ? matches : enabledMatches;\n\n if (actionable.length === 1) {\n const match = actionable[0];\n if (!match) throw new Error(\"unreachable browser interaction match\");\n return {\n ok: true,\n actuator: match.actuator,\n surface: match.surface.surface,\n scopeId: match.surface.scopeId,\n interactionKey: match.interaction.interactionKey,\n diagnostics: [],\n };\n }\n\n if (actionable.length > 1) {\n return {\n ok: false,\n code: \"ambiguous\",\n diagnostics: actionable.map((match) =>\n diagnosticFor({\n code: \"ambiguous-actuator\",\n message: \"Browser interaction intent resolved to multiple actuators.\",\n surface: match.surface.surface,\n scopeId: match.surface.scopeId,\n interactionKey: match.interaction.interactionKey,\n intent: match.actuator.intent,\n actuatorId: match.actuator.actuatorId,\n }),\n ),\n };\n }\n\n const preparation = findPreparationChain(\n surfaces,\n request,\n candidateValueKey,\n );\n if (preparation.length > 0) {\n return {\n ok: false,\n code: \"preparation-required\",\n diagnostics: [\n diagnosticFor({\n code: \"unavailable-actuator\",\n message:\n \"Requested browser interaction intent requires preparation before its actuator is available.\",\n surface: request.surface,\n scopeId: request.scopeId,\n interactionKey: request.interactionKey,\n intent: request.intent,\n }),\n ],\n preparation,\n };\n }\n\n return {\n ok: false,\n code: matches.length > 0 ? \"unavailable\" : \"not-found\",\n diagnostics: [\n diagnosticFor({\n code: \"unavailable-actuator\",\n message:\n matches.length > 0\n ? \"Browser interaction intent exists but has no enabled actuator.\"\n : \"Browser interaction intent is not present in the current snapshot.\",\n surface: request.surface,\n scopeId: request.scopeId,\n interactionKey: request.interactionKey,\n intent: request.intent,\n }),\n ],\n };\n}\n\nexport function resolveBrowserInteractionEffect(\n snapshot: BrowserInteractionSnapshot,\n request: BrowserInteractionEffectRequest,\n): BrowserInteractionEffectResolution {\n const snapshotDiagnostics = [\n ...snapshot.diagnostics,\n ...validateBrowserInteractionSnapshot(snapshot),\n ];\n if (\n snapshotDiagnostics.some((diagnostic) => diagnostic.severity === \"error\")\n ) {\n return {\n ok: false,\n code: \"invalid-snapshot\",\n diagnostics: snapshotDiagnostics,\n };\n }\n\n const effectDiagnostics = validateEffectRequest(request.effect, request);\n if (effectDiagnostics.length > 0) {\n return {\n ok: false,\n code: \"invalid-effect\",\n diagnostics: effectDiagnostics,\n };\n }\n\n const surfaces = matchingSurfaces(snapshot, request);\n const matches = collectInteractionMatches(surfaces, request);\n const exactMatches = matches.filter((match) =>\n match.actuator.semanticEffects.some(\n (effect) =>\n encodeBrowserInteractionEffect(effect) ===\n encodeBrowserInteractionEffect(request.effect),\n ),\n );\n const enabledExactMatches = exactMatches.filter(\n (match) => match.actuator.enabled,\n );\n const actionableExactMatches =\n request.allowDisabled === true ? exactMatches : enabledExactMatches;\n\n if (actionableExactMatches.length === 1) {\n const match = actionableExactMatches[0];\n if (!match) throw new Error(\"unreachable browser effect match\");\n return effectSuccess(match, request.effect, \"exact\");\n }\n\n if (actionableExactMatches.length > 1) {\n return effectAmbiguous(\n actionableExactMatches,\n \"duplicate-enabled-effect-actuator\",\n \"Browser interaction effect resolved to multiple exact actuators.\",\n );\n }\n\n if (exactMatches.length > 0 && enabledExactMatches.length === 0) {\n return effectUnavailable(\n request,\n \"disabled-effect-actuator\",\n \"Browser interaction effect exists but has no enabled actuator.\",\n );\n }\n\n const acceptedMatches = matches.filter((match) =>\n match.actuator.acceptedEffectPatterns.some((pattern) =>\n browserInteractionEffectPatternMatches(pattern, request.effect),\n ),\n );\n const enabledAcceptedMatches = acceptedMatches.filter(\n (match) => match.actuator.enabled,\n );\n const actionableAcceptedMatches =\n request.allowDisabled === true ? acceptedMatches : enabledAcceptedMatches;\n\n if (actionableAcceptedMatches.length === 1) {\n const match = actionableAcceptedMatches[0];\n if (!match) throw new Error(\"unreachable browser accepted effect match\");\n return effectSuccess(match, request.effect, \"accepted-pattern\");\n }\n\n if (actionableAcceptedMatches.length > 1) {\n return effectAmbiguous(\n actionableAcceptedMatches,\n \"duplicate-accepted-effect-pattern-match\",\n \"Browser interaction effect matched multiple accepted-effect patterns.\",\n );\n }\n\n if (acceptedMatches.length > 0 && enabledAcceptedMatches.length === 0) {\n return effectUnavailable(\n request,\n \"disabled-effect-actuator\",\n \"Browser interaction effect pattern exists but has no enabled actuator.\",\n );\n }\n\n const preparation = findEffectPreparationChain(surfaces, request);\n if (preparation.ok) {\n return {\n ok: false,\n code: \"preparation-required\",\n diagnostics: [\n diagnosticFor({\n code: \"unavailable-actuator\",\n message:\n \"Requested browser interaction effect requires preparation before its actuator is available.\",\n surface: request.surface,\n scopeId: request.scopeId,\n interactionKey: request.interactionKey,\n }),\n ],\n preparation: preparation.preparation,\n };\n }\n if (preparation.diagnostics.length > 0) {\n return {\n ok: false,\n code: \"ambiguous\",\n diagnostics: preparation.diagnostics,\n };\n }\n\n return {\n ok: false,\n code: \"not-found\",\n diagnostics: [\n diagnosticFor({\n code: \"missing-effect\",\n message:\n \"Browser interaction effect is not present in the current snapshot.\",\n surface: request.surface,\n scopeId: request.scopeId,\n interactionKey: request.interactionKey,\n }),\n ],\n };\n}\n\nexport function resolveBrowserPointerTarget(\n snapshot: BrowserInteractionSnapshot,\n request: BrowserInteractionEffectRequest,\n): BrowserInteractionPointerTargetResolution {\n const snapshotDiagnostics = [\n ...snapshot.diagnostics,\n ...validateBrowserInteractionSnapshot(snapshot),\n ];\n if (\n snapshotDiagnostics.some((diagnostic) => diagnostic.severity === \"error\")\n ) {\n return {\n ok: false,\n code: \"invalid-snapshot\",\n diagnostics: snapshotDiagnostics,\n };\n }\n\n const effectDiagnostics = validateEffectRequest(request.effect, request);\n if (effectDiagnostics.length > 0) {\n return {\n ok: false,\n code: \"invalid-effect\",\n diagnostics: effectDiagnostics,\n };\n }\n\n const surfaces = matchingSurfaces(snapshot, request);\n const matches = collectPointerTargetMatches(surfaces, request).filter(\n (match) =>\n match.pointerTarget.acceptedEffectPatterns.some((pattern) =>\n browserInteractionEffectPatternMatches(pattern, request.effect),\n ),\n );\n const enabledMatches = matches.filter((match) => match.pointerTarget.enabled);\n const actionableMatches =\n request.allowDisabled === true ? matches : enabledMatches;\n\n if (actionableMatches.length === 1) {\n const match = actionableMatches[0];\n if (!match) throw new Error(\"unreachable browser pointer target match\");\n return {\n ok: true,\n pointerTarget: match.pointerTarget,\n surface: match.surface.surface,\n scopeId: match.surface.scopeId,\n interactionKey: match.interaction.interactionKey,\n match: \"accepted-pattern\",\n effect: request.effect,\n diagnostics: [],\n };\n }\n\n if (actionableMatches.length > 1) {\n return {\n ok: false,\n code: \"ambiguous\",\n diagnostics: actionableMatches.map((match) =>\n diagnosticFor({\n code: \"ambiguous-pointer-target\",\n message:\n \"Browser interaction effect matched multiple pointer targets.\",\n surface: match.surface.surface,\n scopeId: match.surface.scopeId,\n interactionKey: match.interaction.interactionKey,\n targetId: match.pointerTarget.targetId,\n }),\n ),\n };\n }\n\n if (matches.length > 0 && enabledMatches.length === 0) {\n return {\n ok: false,\n code: \"unavailable\",\n diagnostics: [\n diagnosticFor({\n code: \"disabled-pointer-target\",\n message:\n \"Browser interaction pointer target exists but is not enabled.\",\n surface: request.surface,\n scopeId: request.scopeId,\n interactionKey: request.interactionKey,\n }),\n ],\n };\n }\n\n return {\n ok: false,\n code: \"not-found\",\n diagnostics: [\n diagnosticFor({\n code: \"missing-effect\",\n message:\n \"Browser interaction effect is not accepted by any pointer target.\",\n surface: request.surface,\n scopeId: request.scopeId,\n interactionKey: request.interactionKey,\n }),\n ],\n };\n}\n\nfunction actuatorMatchesRequest(\n actuator: BrowserInteractionActuator,\n request: BrowserInteractionIntentRequest,\n candidateValueKey: string | undefined,\n): boolean {\n return (\n actuator.intent === request.intent &&\n (request.inputKey === undefined ||\n actuator.inputKey === request.inputKey) &&\n (candidateValueKey === undefined ||\n actuator.candidateValueKey === candidateValueKey) &&\n (request.actuatorKind === undefined ||\n actuator.actuatorKind === request.actuatorKind)\n );\n}\n\nfunction findPreparationChain(\n surfaces: readonly BrowserInteractionSemanticSurfaceSnapshot[],\n request: BrowserInteractionIntentRequest,\n candidateValueKey: string | undefined,\n): BrowserInteractionActuator[] {\n const targetRequest = {\n ...request,\n candidateValueKey,\n };\n const preparationMatches = surfaces.flatMap((surface) =>\n surface.interactions.flatMap((interaction) => {\n if (!interactionMatchesRequest(interaction, request)) return [];\n return interaction.actuators\n .filter(\n (actuator) =>\n actuator.enabled &&\n actuator.prepares &&\n actuator.prepares.intent === targetRequest.intent &&\n (targetRequest.inputKey === undefined ||\n actuator.prepares.inputKey === targetRequest.inputKey) &&\n (targetRequest.candidateValueKey === undefined ||\n actuator.prepares.candidateValueKey ===\n targetRequest.candidateValueKey) &&\n (targetRequest.actuatorKind === undefined ||\n actuator.prepares.actuatorKind === targetRequest.actuatorKind),\n )\n .map((actuator) => ({ surface, interaction, actuator }));\n }),\n );\n if (preparationMatches.length !== 1) return [];\n const match = preparationMatches[0];\n if (!match) return [];\n return expandPreparationChain(\n match.surface,\n match.interaction,\n match.actuator,\n );\n}\n\nfunction expandPreparationChain(\n surface: BrowserInteractionSemanticSurfaceSnapshot,\n interaction: BrowserInteractionEntity,\n actuator: BrowserInteractionActuator,\n): BrowserInteractionActuator[] {\n const byKey = new Map<string, BrowserInteractionActuator>();\n for (const candidate of interaction.actuators) {\n byKey.set(\n actuatorIdentityKey({\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n actuator: candidate,\n }),\n candidate,\n );\n }\n const chain: BrowserInteractionActuator[] = [];\n const visited = new Set<string>();\n let current: BrowserInteractionActuator | undefined = actuator;\n while (current) {\n const key = actuatorIdentityKey({\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n actuator: current,\n });\n if (visited.has(key)) return [];\n visited.add(key);\n chain.push(current);\n current = current.prepares\n ? byKey.get(\n targetIdentityKey({\n surface: surface.surface,\n scopeId: surface.scopeId,\n interactionKey: interaction.interactionKey,\n target: current.prepares,\n }),\n )\n : undefined;\n }\n return chain;\n}\n\nfunction interactionMatchesRequest(\n interaction: BrowserInteractionEntity,\n request: BrowserInteractionIntentRequest,\n): boolean {\n return (\n (request.interactionKey === undefined ||\n interaction.interactionKey === request.interactionKey) &&\n (request.interactionId === undefined ||\n interaction.interactionId === request.interactionId)\n );\n}\n\nfunction matchingSurfaces(\n snapshot: BrowserInteractionSnapshot,\n request: Pick<BrowserInteractionEffectRequest, \"surface\" | \"scopeId\">,\n): BrowserInteractionSemanticSurfaceSnapshot[] {\n return snapshot.surfaces.filter(\n (surface): surface is BrowserInteractionSemanticSurfaceSnapshot =>\n isSemanticSurfaceSnapshot(surface) &&\n surface.surface === request.surface &&\n (request.scopeId === undefined || surface.scopeId === request.scopeId),\n );\n}\n\nfunction collectInteractionMatches(\n surfaces: readonly BrowserInteractionSemanticSurfaceSnapshot[],\n request: Pick<\n BrowserInteractionEffectRequest,\n \"interactionKey\" | \"interactionId\"\n >,\n) {\n return surfaces.flatMap((surface) =>\n surface.interactions.flatMap((interaction) => {\n if (\n request.interactionKey !== undefined &&\n interaction.interactionKey !== request.interactionKey\n ) {\n return [];\n }\n if (\n request.interactionId !== undefined &&\n interaction.interactionId !== request.interactionId\n ) {\n return [];\n }\n return interaction.actuators.map((actuator) => ({\n surface,\n interaction,\n actuator,\n }));\n }),\n );\n}\n\nfunction collectPointerTargetMatches(\n surfaces: readonly BrowserInteractionSemanticSurfaceSnapshot[],\n request: Pick<\n BrowserInteractionEffectRequest,\n \"interactionKey\" | \"interactionId\"\n >,\n) {\n return surfaces.flatMap((surface) =>\n surface.interactions.flatMap((interaction) => {\n if (\n request.interactionKey !== undefined &&\n interaction.interactionKey !== request.interactionKey\n ) {\n return [];\n }\n if (\n request.interactionId !== undefined &&\n interaction.interactionId !== request.interactionId\n ) {\n return [];\n }\n return interaction.pointerTargets.map((pointerTarget) => ({\n surface,\n interaction,\n pointerTarget,\n }));\n }),\n );\n}\n\nfunction effectSuccess(\n match: {\n readonly surface: BrowserInteractionSemanticSurfaceSnapshot;\n readonly interaction: BrowserInteractionEntity;\n readonly actuator: BrowserInteractionActuator;\n },\n effect: BrowserInteractionSurfaceEffect,\n kind: \"exact\" | \"accepted-pattern\",\n): BrowserInteractionEffectResolution {\n return {\n ok: true,\n actuator: match.actuator,\n surface: match.surface.surface,\n scopeId: match.surface.scopeId,\n interactionKey: match.interaction.interactionKey,\n match: kind,\n effect,\n diagnostics: [],\n };\n}\n\nfunction effectAmbiguous(\n matches: readonly {\n readonly surface: BrowserInteractionSemanticSurfaceSnapshot;\n readonly interaction: BrowserInteractionEntity;\n readonly actuator: BrowserInteractionActuator;\n }[],\n code:\n | \"duplicate-enabled-effect-actuator\"\n | \"duplicate-accepted-effect-pattern-match\",\n message: string,\n): BrowserInteractionEffectResolution {\n return {\n ok: false,\n code: \"ambiguous\",\n diagnostics: matches.map((match) =>\n diagnosticFor({\n code,\n message,\n surface: match.surface.surface,\n scopeId: match.surface.scopeId,\n interactionKey: match.interaction.interactionKey,\n intent: match.actuator.intent,\n actuatorId: match.actuator.actuatorId,\n }),\n ),\n };\n}\n\nfunction effectUnavailable(\n request: BrowserInteractionEffectRequest,\n code: \"disabled-effect-actuator\",\n message: string,\n): BrowserInteractionEffectResolution {\n return {\n ok: false,\n code: \"unavailable\",\n diagnostics: [\n diagnosticFor({\n code,\n message,\n surface: request.surface,\n scopeId: request.scopeId,\n interactionKey: request.interactionKey,\n }),\n ],\n };\n}\n\nfunction findEffectPreparationChain(\n surfaces: readonly BrowserInteractionSemanticSurfaceSnapshot[],\n request: BrowserInteractionEffectRequest,\n):\n | {\n readonly ok: true;\n readonly preparation: readonly BrowserInteractionActuator[];\n }\n | {\n readonly ok: false;\n readonly diagnostics: readonly BrowserInteractionDiagnostic[];\n } {\n const matches = collectInteractionMatches(surfaces, request).filter((match) =>\n match.actuator.preparationPatterns.some((pattern) =>\n browserInteractionEffectPatternMatches(pattern, request.effect),\n ),\n );\n const enabledMatches = matches.filter((match) => match.actuator.enabled);\n if (enabledMatches.length === 1) {\n const match = enabledMatches[0];\n if (!match) return { ok: false, diagnostics: [] };\n return { ok: true, preparation: [match.actuator] };\n }\n if (enabledMatches.length > 1) {\n return {\n ok: false,\n diagnostics: enabledMatches.map((match) =>\n diagnosticFor({\n code: \"ambiguous-preparation-pattern\",\n message:\n \"Browser interaction effect resolved to multiple preparation actuators.\",\n surface: match.surface.surface,\n scopeId: match.surface.scopeId,\n interactionKey: match.interaction.interactionKey,\n intent: match.actuator.intent,\n actuatorId: match.actuator.actuatorId,\n }),\n ),\n };\n }\n return { ok: false, diagnostics: [] };\n}\n\nfunction validateEffectRequest(\n effect: BrowserInteractionSurfaceEffect,\n request: Pick<\n BrowserInteractionEffectRequest,\n \"surface\" | \"scopeId\" | \"interactionKey\"\n >,\n): readonly BrowserInteractionDiagnostic[] {\n if (!effect || typeof effect.kind !== \"string\" || effect.kind.length === 0) {\n return [\n diagnosticFor({\n code: \"invalid-effect-payload\",\n message: \"Browser interaction effect requires a string kind.\",\n surface: request.surface,\n scopeId: request.scopeId,\n interactionKey: request.interactionKey,\n }),\n ];\n }\n if (effect.kind === \"setScalar\") {\n const value = effect.value;\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return [\n diagnosticFor({\n code: \"invalid-scalar-argument\",\n message:\n \"setScalar browser interaction effects require a finite value.\",\n surface: request.surface,\n scopeId: request.scopeId,\n interactionKey: request.interactionKey,\n }),\n ];\n }\n }\n return [];\n}\n\nfunction diagnosticFor(\n input: Omit<BrowserInteractionDiagnostic, \"severity\">,\n): BrowserInteractionDiagnostic {\n return { severity: \"error\", ...input };\n}\n","import {\n BROWSER_INTERACTION_ATTRIBUTES,\n DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_VERSION,\n} from \"./constants.js\";\nimport { normalizeBrowserInteractionRecords } from \"./normalize.js\";\nimport type { BrowserInteractionSnapshot } from \"./types.js\";\n\nexport function readBrowserInteractionSnapshot(\n root: ParentNode,\n): BrowserInteractionSnapshot {\n const protocol = BROWSER_INTERACTION_ATTRIBUTES.protocol;\n const role = BROWSER_INTERACTION_ATTRIBUTES.role;\n const selector = [\n `[${protocol}=\"${DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_VERSION}\"][${role}=\"interaction\"]`,\n `[${protocol}=\"${DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_VERSION}\"][${role}=\"actuator\"]`,\n `[${protocol}=\"${DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_VERSION}\"][${role}=\"pointer-target\"]`,\n ].join(\",\");\n const records = [...root.querySelectorAll(selector)].map((element) => ({\n attributes: Object.fromEntries(\n [...element.attributes].map((attribute) => [\n attribute.name,\n attribute.value,\n ]),\n ),\n }));\n return normalizeBrowserInteractionRecords(records);\n}\n","import { z } from \"zod\";\nimport {\n BROWSER_ATTRIBUTE_JSON_LIMITS,\n RuntimeJsonSchema,\n assertJsonWithinLimits,\n} from \"../runtime-json.js\";\nimport {\n BROWSER_INTERACTION_ACTUATOR_KINDS,\n BROWSER_INTERACTION_CANDIDATE_STATES,\n BROWSER_INTERACTION_READINESS_VALUES,\n DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_NAME,\n DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_VERSION,\n GAMEPLAY_BROWSER_INTERACTION_SURFACE,\n} from \"./constants.js\";\n\nconst jsonValueSchema = z.preprocess((value) => {\n if (value === undefined) return value;\n assertJsonWithinLimits(\n value,\n BROWSER_ATTRIBUTE_JSON_LIMITS,\n \"Browser interaction attribute\",\n );\n return value;\n}, RuntimeJsonSchema);\n\nexport const browserInteractionEffectSchema = z\n .object({\n kind: z.string().min(1),\n })\n .catchall(jsonValueSchema);\n\nexport const browserInteractionEffectPatternSchema = z.union([\n z.object({\n kind: z.literal(\"exact\"),\n effect: browserInteractionEffectSchema,\n }),\n z.object({\n kind: z.literal(\"match\"),\n effectKind: z.string().min(1),\n fields: z.record(z.string(), jsonValueSchema).optional(),\n scalar: z\n .object({\n field: z.string().min(1),\n min: z.number().finite().optional(),\n max: z.number().finite().optional(),\n integer: z.boolean().optional(),\n })\n .optional(),\n }),\n]);\n\nexport const gameplaySemanticEffectSchema = z.union([\n z.object({\n kind: z.literal(\"setCandidate\"),\n inputKey: z.string(),\n candidateValue: jsonValueSchema,\n beforeSelected: z.boolean(),\n afterSelected: z.boolean(),\n }),\n z.object({\n kind: z.literal(\"adjustResource\"),\n inputKey: z.string(),\n resourceKey: jsonValueSchema,\n delta: z.union([z.literal(-1), z.literal(1)]),\n }),\n z.object({\n kind: z.literal(\"setScalar\"),\n inputKey: z.string(),\n value: z.number().finite(),\n }),\n z.object({\n kind: z.literal(\"commit\"),\n }),\n z.object({\n kind: z.literal(\"invoke\"),\n }),\n]);\n\nexport const browserInteractionDiagnosticSchema = z.object({\n code: z.string(),\n severity: z.enum([\"error\", \"warning\"]),\n message: z.string(),\n surface: z.string().optional(),\n scopeId: z.string().optional(),\n interactionKey: z.string().optional(),\n intent: z.string().optional(),\n actuatorId: z.string().optional(),\n targetId: z.string().optional(),\n});\n\nexport const browserInteractionActuatorSchema = z.object({\n actuatorId: z.string(),\n intent: z.string(),\n inputKey: z.string().optional(),\n candidateValue: jsonValueSchema.optional(),\n candidateValueKey: z.string().optional(),\n candidateState: z.enum(BROWSER_INTERACTION_CANDIDATE_STATES).optional(),\n enabled: z.boolean(),\n actuatorKind: z.enum(BROWSER_INTERACTION_ACTUATOR_KINDS),\n semanticEffects: z.array(browserInteractionEffectSchema),\n acceptedEffectPatterns: z.array(browserInteractionEffectPatternSchema),\n preparationPatterns: z.array(browserInteractionEffectPatternSchema),\n prepares: z\n .object({\n intent: z.string(),\n inputKey: z.string().optional(),\n candidateValue: jsonValueSchema.optional(),\n candidateValueKey: z.string().optional(),\n actuatorKind: z.enum(BROWSER_INTERACTION_ACTUATOR_KINDS).optional(),\n })\n .optional(),\n diagnostics: z.array(browserInteractionDiagnosticSchema),\n});\n\nexport const browserInteractionPointerTargetSchema = z.object({\n targetId: z.string(),\n enabled: z.boolean(),\n acceptedEffectPatterns: z.array(browserInteractionEffectPatternSchema),\n descriptorDigest: z.string().optional(),\n diagnostics: z.array(browserInteractionDiagnosticSchema),\n});\n\nexport const browserGameplayInteractionSchema = z.object({\n interactionKey: z.string(),\n interactionId: z.string(),\n descriptorDigest: z.string().optional(),\n draftDigest: z.string().optional(),\n readiness: z.enum(BROWSER_INTERACTION_READINESS_VALUES),\n actuators: z.array(browserInteractionActuatorSchema),\n pointerTargets: z.array(browserInteractionPointerTargetSchema),\n diagnostics: z.array(browserInteractionDiagnosticSchema),\n});\n\nexport const browserGameplaySurfaceSnapshotSchema = z.object({\n surface: z.literal(GAMEPLAY_BROWSER_INTERACTION_SURFACE),\n scopeId: z.string(),\n interactions: z.array(browserGameplayInteractionSchema),\n diagnostics: z.array(browserInteractionDiagnosticSchema),\n});\n\nexport const browserSemanticSurfaceSnapshotSchema = z.object({\n surface: z.string(),\n scopeId: z.string(),\n interactions: z.array(browserGameplayInteractionSchema),\n diagnostics: z.array(browserInteractionDiagnosticSchema),\n});\n\nexport const browserUnknownSurfaceSnapshotSchema = z.object({\n surface: z.string(),\n scopeId: z.string(),\n diagnostics: z.array(browserInteractionDiagnosticSchema),\n});\n\nexport const browserInteractionSnapshotSchema = z.object({\n protocol: z.object({\n name: z.literal(DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_NAME),\n version: z.literal(DREAMBOARD_BROWSER_INTERACTION_PROTOCOL_VERSION),\n }),\n surfaces: z.array(\n z.union([\n browserSemanticSurfaceSnapshotSchema,\n browserUnknownSurfaceSnapshotSchema,\n ]),\n ),\n diagnostics: z.array(browserInteractionDiagnosticSchema),\n});\n"],"mappings":"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","names":["pending","registered","diagnosticFor"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../reducer-contract/generated/zod.ts","../../reducer-contract/generated/version.ts","../../reducer-contract/generated/builders.ts"],"sourcesContent":["// @generated by packages/reducer-contract/scripts/generate-ts.mjs\n// DO NOT EDIT BY HAND. Edit schema/reducer-runtime.schema.json and rerun `pnpm generate`.\n\n/* eslint-disable */\nimport { z } from \"zod\";\n\nexport const ReducerContractVersionSchema = z.string().regex(new RegExp(\"^[0-9]+\\\\.[0-9]+\\\\.[0-9]+$\"));\n\nexport const EffectIdSchema = z.string().min(1);\n\nlet JsonValueSchemaInternal: z.ZodType<unknown>;\nJsonValueSchemaInternal = z.lazy(() => z.union([z.record(z.string(), JsonValueSchemaInternal), z.array(JsonValueSchemaInternal), z.string(), z.number(), z.boolean(), z.null()]));\nexport const JsonValueSchema = JsonValueSchemaInternal;\n\nexport const ContinuationTokenSchema = z.object({ \"id\": z.string().min(1), \"data\": JsonValueSchema }).strict();\n\nexport const ContinuationMapSchema = z.record(z.string(), ContinuationTokenSchema);\n\nexport const ReducerSetupSelectionSchema = z.object({ \"profileId\": z.string().min(1), \"optionValues\": z.record(z.string(), z.union([z.string(), z.null()])) }).strict();\n\nexport const RngStateSchema = z.object({ \"seed\": z.union([z.number().refine(Number.isInteger, { message: \"Expected integer\" }), z.null()]), \"cursor\": z.number().int(), \"trace\": z.array(z.string()) }).strict();\n\nexport const ReducerFlowStateSchema = z.object({ \"currentPhase\": z.string().min(1), \"turn\": z.number().int(), \"round\": z.number().int(), \"activePlayers\": z.array(z.string().min(1)) }).strict();\n\nexport const RuntimeSimultaneousSubmissionSchema = z.object({ \"interactionId\": z.string().min(1), \"params\": JsonValueSchema }).strict();\n\nexport const RuntimeSimultaneousCurrentSchema = z.object({ \"phaseName\": z.string().min(1), \"actors\": z.array(z.string().min(1)), \"submissions\": z.record(z.string(), RuntimeSimultaneousSubmissionSchema) }).strict();\n\nexport const RuntimeSimultaneousStateSchema = z.object({ \"current\": z.union([RuntimeSimultaneousCurrentSchema, z.null()]) }).strict();\n\nexport const TransitionRecordSchema = z.object({ \"from\": z.string().min(1), \"to\": z.string().min(1) }).strict();\n\nexport const ReducerRuntimeStateSchema = z.object({ \"rng\": RngStateSchema, \"setup\": z.union([ReducerSetupSelectionSchema, z.null()]), \"simultaneous\": RuntimeSimultaneousStateSchema, \"lastTransition\": z.union([TransitionRecordSchema, z.null()]) }).strict();\n\nexport const ReducerDomainStateSchema = z.object({ \"table\": JsonValueSchema, \"publicState\": JsonValueSchema, \"privateState\": z.record(z.string(), JsonValueSchema), \"hiddenState\": JsonValueSchema, \"flow\": ReducerFlowStateSchema, \"phase\": JsonValueSchema }).strict();\n\nexport const ReducerSessionMetaSchema = z.object({ \"contractFingerprint\": z.string().regex(new RegExp(\"^cfp[0-9]+:[a-f0-9]{16}$\")) }).strict();\n\nexport const ReducerSessionStateSchema = z.object({ \"meta\": ReducerSessionMetaSchema.optional(), \"domain\": ReducerDomainStateSchema, \"runtime\": ReducerRuntimeStateSchema }).strict();\n\nexport const GameInputInteractionSchema = z.object({ \"kind\": z.literal(\"interaction\"), \"playerId\": z.string().min(1), \"interactionId\": z.string().min(1), \"params\": JsonValueSchema }).strict();\n\nexport const GameInputSchema = z.discriminatedUnion(\"kind\", [GameInputInteractionSchema]);\n\nexport const EffectTransitionSchema = z.object({ \"effectId\": EffectIdSchema, \"type\": z.literal(\"transition\"), \"to\": z.string().min(1) }).strict();\n\nexport const EffectRollDieSchema = z.object({ \"effectId\": EffectIdSchema, \"type\": z.literal(\"rollDie\"), \"dieId\": z.string().min(1) }).strict();\n\nexport const EffectShuffleSharedZoneSchema = z.object({ \"effectId\": EffectIdSchema, \"type\": z.literal(\"shuffleSharedZone\"), \"zoneId\": z.string().min(1) }).strict();\n\nexport const EffectShufflePlayerZoneSchema = z.object({ \"effectId\": EffectIdSchema, \"type\": z.literal(\"shufflePlayerZone\"), \"zoneId\": z.string().min(1), \"playerId\": z.string().min(1) }).strict();\n\nexport const EffectSchema = z.discriminatedUnion(\"type\", [EffectTransitionSchema, EffectRollDieSchema, EffectShuffleSharedZoneSchema, EffectShufflePlayerZoneSchema]);\n\nexport const ReducerInputValidationResultSchema = z.object({ \"valid\": z.boolean(), \"errorCode\": z.string().optional(), \"message\": z.string().optional() }).strict();\n\nexport const InitializeRequestSchema = z.object({ \"table\": JsonValueSchema, \"playerIds\": z.array(z.string().min(1)), \"rngSeed\": z.union([z.number().refine(Number.isInteger, { message: \"Expected integer\" }), z.null()]).optional(), \"setup\": z.union([ReducerSetupSelectionSchema, z.null()]).optional() }).strict();\n\nexport const InitializePhaseRequestSchema = z.object({ \"state\": ReducerSessionStateSchema, \"to\": z.string().min(1) }).strict();\n\nexport const ValidateInputRequestSchema = z.object({ \"state\": ReducerSessionStateSchema, \"input\": GameInputSchema }).strict();\n\nexport const ReduceRequestSchema = z.object({ \"state\": ReducerSessionStateSchema, \"input\": GameInputSchema }).strict();\n\nexport const DispatchRequestSchema = z.object({ \"state\": ReducerSessionStateSchema, \"input\": GameInputSchema }).strict();\n\nexport const ReduceResultRejectSchema = z.object({ \"kind\": z.literal(\"reject\"), \"errorCode\": z.string().min(1), \"message\": z.string().optional() }).strict();\n\nexport const TerminalOutcomeSchema = z.object({ \"winnerPlayerId\": z.string().min(1).optional(), \"finalScores\": z.record(z.string(), z.number().int()).optional(), \"reason\": z.string().min(1) }).strict();\n\nexport const ReduceResultAcceptSchema = z.object({ \"kind\": z.literal(\"accept\"), \"state\": ReducerSessionStateSchema, \"terminal\": TerminalOutcomeSchema.optional(), \"effects\": z.array(EffectSchema), \"continuations\": ContinuationMapSchema }).strict();\n\nexport const ReduceResultSchema = z.discriminatedUnion(\"kind\", [ReduceResultRejectSchema, ReduceResultAcceptSchema]);\n\nexport const DispatchTraceAcceptedClientInputSchema = z.object({ \"kind\": z.literal(\"acceptedClientInput\"), \"input\": GameInputSchema }).strict();\n\nexport const DispatchTraceAppliedEffectSchema = z.object({ \"kind\": z.literal(\"appliedEffect\"), \"effect\": EffectSchema, \"continuation\": ContinuationTokenSchema.optional() }).strict();\n\nexport const DispatchTraceRngConsumptionSchema = z.object({ \"kind\": z.literal(\"rngConsumption\"), \"operation\": z.string().min(1), \"traceEntry\": z.string() }).strict();\n\nexport const DispatchTraceSchema = z.discriminatedUnion(\"kind\", [DispatchTraceAcceptedClientInputSchema, DispatchTraceAppliedEffectSchema, DispatchTraceRngConsumptionSchema]);\n\nexport const DispatchResultRejectSchema = z.object({ \"kind\": z.literal(\"reject\"), \"errorCode\": z.string().min(1), \"message\": z.string().optional() }).strict();\n\nexport const DispatchResultAcceptSchema = z.object({ \"kind\": z.literal(\"accept\"), \"state\": ReducerSessionStateSchema, \"terminal\": TerminalOutcomeSchema.optional(), \"trace\": z.array(DispatchTraceSchema) }).strict();\n\nexport const DispatchResultSchema = z.discriminatedUnion(\"kind\", [DispatchResultRejectSchema, DispatchResultAcceptSchema]);\n\nexport const ReducerRuntimeLogEntryAcceptedClientInputSchema = z.object({ \"kind\": z.literal(\"acceptedClientInput\"), \"version\": z.number().int(), \"input\": GameInputSchema }).strict();\n\nexport const ReducerRuntimeLogEntryAppliedEffectSchema = z.object({ \"kind\": z.literal(\"appliedEffect\"), \"version\": z.number().int(), \"effect\": EffectSchema, \"continuation\": z.union([ContinuationTokenSchema, z.null()]) }).strict();\n\nexport const ReducerRuntimeLogEntryRngConsumptionSchema = z.object({ \"kind\": z.literal(\"rngConsumption\"), \"version\": z.number().int(), \"operation\": z.string().min(1), \"traceEntry\": z.string() }).strict();\n\nexport const ReducerRuntimeLogEntryStateCommitSchema = z.object({ \"kind\": z.literal(\"stateCommit\"), \"version\": z.number().int(), \"state\": ReducerSessionStateSchema }).strict();\n\nexport const ReducerRuntimeLogEntrySchema = z.discriminatedUnion(\"kind\", [ReducerRuntimeLogEntryAcceptedClientInputSchema, ReducerRuntimeLogEntryAppliedEffectSchema, ReducerRuntimeLogEntryRngConsumptionSchema, ReducerRuntimeLogEntryStateCommitSchema]);\n\nexport const SeatProjectionSchema = z.object({ \"view\": JsonValueSchema.optional(), \"availableInteractionRefs\": JsonValueSchema.optional(), \"zones\": JsonValueSchema.optional() }).strict();\n\nexport const SimultaneousPhaseProjectionSchema = z.object({ \"phaseName\": z.string().min(1), \"interactionId\": z.string().min(1), \"actorIds\": z.array(z.string().min(1)), \"sealedPlayerIds\": z.array(z.string().min(1)), \"pendingPlayerIds\": z.array(z.string().min(1)) }).strict();\n\nexport const SeatProjectionBundleSchema = z.object({ \"currentStage\": z.union([z.string().min(1), z.null()]).optional(), \"stageSeats\": z.array(z.string().min(1)).optional(), \"simultaneousPhase\": z.union([SimultaneousPhaseProjectionSchema, z.null()]).optional(), \"interactionsByRef\": JsonValueSchema.optional(), \"seats\": z.record(z.string(), SeatProjectionSchema) }).strict();\n\nexport const ProjectSeatsDynamicRequestSchema = z.object({ \"state\": ReducerSessionStateSchema, \"playerIds\": z.array(z.string().min(1)), \"viewId\": z.string().min(1).optional(), \"projectionMode\": z.union([z.enum([\"full\", \"actionsOnly\"]), z.null()]).optional() }).strict();\n\nexport const BoardStaticProjectionSchema = z.object({ \"view\": JsonValueSchema, \"hash\": z.string().min(1), \"manifestVersion\": z.string() }).strict();\n","// @generated by packages/reducer-contract/scripts/generate-ts.mjs\n// DO NOT EDIT BY HAND. Edit schema/reducer-runtime.schema.json and rerun `pnpm generate`.\n\n/**\n * The wire-protocol version this package implements. Bumped in lockstep with\n * any breaking change to schema/reducer-runtime.schema.json. At bundle load\n * time hosts refuse bundles whose major version differs.\n */\nexport const REDUCER_CONTRACT_VERSION = \"0.2.1\" as const;\n","// @generated by packages/reducer-contract/scripts/generate-ts.mjs\n// DO NOT EDIT BY HAND. Edit schema/reducer-runtime.schema.json and rerun `pnpm generate`.\n\n/* eslint-disable */\nimport type * as Wire from \"./wire\";\n\n/**\n * Typed effect constructors. Authors MUST go through these; hand-constructing\n * Wire.Effect objects is banned by convention because it's how wire drift\n * re-enters the codebase.\n *\n * The `effectId` is minted by the runtime (see createEffectIdMinter below),\n * not by the author. Each builder returns a `PendingEffect` that carries\n * the optional continuation; the reducer bundle's accept materializer splits\n * pending effects into the wire's `effects[]` + `continuations` map.\n */\n\nexport type PendingEffect = Wire.Effect & {\n readonly __continuation?: Wire.ContinuationToken;\n};\n\nexport type EffectIdMinter = () => Wire.EffectId;\n\n/**\n * Produces sequential, deterministic effect ids scoped to a single accept\n * payload: \"ef0\", \"ef1\", ... . Uniqueness only needs to be local to the\n * payload because the host consumes and discards them per dispatch.\n */\nexport function createEffectIdMinter(): EffectIdMinter {\n let i = 0;\n return () => `ef${i++}` as Wire.EffectId;\n}\n\nexport type EffectBuilders = {\n transition(args: { to: string }, continuation?: Wire.ContinuationToken): PendingEffect;\n rollDie(args: { dieId: string }, continuation?: Wire.ContinuationToken): PendingEffect;\n shuffleSharedZone(args: { zoneId: string }, continuation?: Wire.ContinuationToken): PendingEffect;\n shufflePlayerZone(args: { zoneId: string; playerId: string }, continuation?: Wire.ContinuationToken): PendingEffect;\n};\n\nexport function createEffectBuilders(mint: EffectIdMinter): EffectBuilders {\n return {\n transition(args, continuation) {\n const effect = { effectId: mint(), type: \"transition\" as const, to: args.to };\n return continuation === undefined\n ? (effect as PendingEffect)\n : Object.assign(effect, { __continuation: continuation });\n },\n rollDie(args, continuation) {\n const effect = { effectId: mint(), type: \"rollDie\" as const, dieId: args.dieId };\n return continuation === undefined\n ? (effect as PendingEffect)\n : Object.assign(effect, { __continuation: continuation });\n },\n shuffleSharedZone(args, continuation) {\n const effect = { effectId: mint(), type: \"shuffleSharedZone\" as const, zoneId: args.zoneId };\n return continuation === undefined\n ? (effect as PendingEffect)\n : Object.assign(effect, { __continuation: continuation });\n },\n shufflePlayerZone(args, continuation) {\n const effect = { effectId: mint(), type: \"shufflePlayerZone\" as const, zoneId: args.zoneId, playerId: args.playerId };\n return continuation === undefined\n ? (effect as PendingEffect)\n : Object.assign(effect, { __continuation: continuation });\n },\n };\n}\n\n/**\n * Takes a list of PendingEffects and splits them into the canonical wire\n * shape: `effects[]` (stripped of `__continuation`) + `continuations` map\n * keyed by effectId. Use at the boundary where reduce/dispatch results leave\n * author code and enter the wire.\n */\nexport function materializeAccept(pending: ReadonlyArray<PendingEffect>): {\n effects: Wire.Effect[];\n continuations: Wire.ContinuationMap;\n} {\n const effects: Wire.Effect[] = [];\n const continuations: Wire.ContinuationMap = {};\n for (const pe of pending) {\n const { __continuation, ...effect } = pe as PendingEffect & { __continuation?: Wire.ContinuationToken };\n effects.push(effect as Wire.Effect);\n if (__continuation !== undefined) {\n continuations[(effect as Wire.Effect).effectId] = __continuation;\n }\n }\n return { effects, continuations };\n}\n"],"mappings":"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","names":[]}
|