@dreamboard-games/sdk 0.4.0-alpha.0 → 0.4.0-alpha.2

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.
Files changed (84) hide show
  1. package/README.md +8 -1
  2. package/REFERENCE.md +1849 -379
  3. package/dist/{ResourceCounter-BTXklCEZ.d.ts → ResourceCounter-BuiNstXs.d.ts} +5 -1
  4. package/dist/{ThemeProvider-DvMl17Ny.d.ts → ThemeProvider-B1sIoBlX.d.ts} +1 -1
  5. package/dist/attributes-DbvyMbXw.d.ts +68 -0
  6. package/dist/authoring/index.d.ts +66 -0
  7. package/dist/authoring/index.js +560 -0
  8. package/dist/authoring/index.js.map +1 -0
  9. package/dist/browser-interaction.d.ts +246 -44
  10. package/dist/browser-interaction.js +14 -1
  11. package/dist/{chunk-Q5O7GPVY.js → chunk-45FI6XII.js} +630 -375
  12. package/dist/chunk-45FI6XII.js.map +1 -0
  13. package/dist/{chunk-4G7552LO.js → chunk-6JQFGSLD.js} +216 -47
  14. package/dist/chunk-6JQFGSLD.js.map +1 -0
  15. package/dist/{chunk-NBAEEHAU.js → chunk-CP35NPPY.js} +5926 -5266
  16. package/dist/chunk-CP35NPPY.js.map +1 -0
  17. package/dist/{chunk-2LDZ5C3T.js → chunk-FWVV2X74.js} +2 -2
  18. package/dist/{chunk-MNKDSGIA.js → chunk-HWJS3VOJ.js} +6 -2
  19. package/dist/chunk-HWJS3VOJ.js.map +1 -0
  20. package/dist/chunk-K5ZRJTZZ.js +328 -0
  21. package/dist/chunk-K5ZRJTZZ.js.map +1 -0
  22. package/dist/{chunk-U5KBV2BA.js → chunk-N6ZDIMRB.js} +444 -223
  23. package/dist/chunk-N6ZDIMRB.js.map +1 -0
  24. package/dist/chunk-O6M6PN4E.js +1225 -0
  25. package/dist/chunk-O6M6PN4E.js.map +1 -0
  26. package/dist/chunk-PF7L4BMG.js +117 -0
  27. package/dist/chunk-PF7L4BMG.js.map +1 -0
  28. package/dist/{chunk-P7F4L2FF.js → chunk-WOWFONLZ.js} +609 -1287
  29. package/dist/chunk-WOWFONLZ.js.map +1 -0
  30. package/dist/{chunk-QLG6VEMW.js → chunk-WUIVY2KE.js} +318 -21
  31. package/dist/chunk-WUIVY2KE.js.map +1 -0
  32. package/dist/chunk-ZAS2SENW.js +12 -0
  33. package/dist/chunk-ZAS2SENW.js.map +1 -0
  34. package/dist/codegen.d.ts +11 -1
  35. package/dist/codegen.js +1 -1
  36. package/dist/{components-DaIqi9QM.d.ts → components-BbWPnZCF.d.ts} +37 -70
  37. package/dist/{hex-board-view-UCUjMALd.d.ts → hex-board-view-Kz9Q_zsv.d.ts} +1 -1
  38. package/dist/index.js +2 -1
  39. package/dist/package-set.d.ts +2 -2
  40. package/dist/package-set.js +2 -1
  41. package/dist/player-state-Cqpyeql0.d.ts +371 -0
  42. package/dist/protocol-BP193lva.d.ts +267 -0
  43. package/dist/reducer/advanced.d.ts +2 -2
  44. package/dist/reducer/advanced.js +1 -1
  45. package/dist/reducer-contract.js +1 -1
  46. package/dist/reducer.d.ts +7 -7
  47. package/dist/reducer.js +190 -183
  48. package/dist/reducer.js.map +1 -1
  49. package/dist/runtime/primitives.d.ts +10 -9
  50. package/dist/runtime/primitives.js +9 -6
  51. package/dist/runtime/runtime-api.d.ts +2 -2
  52. package/dist/runtime/workspace-contract.d.ts +28 -76
  53. package/dist/runtime/workspace-contract.js +7 -5
  54. package/dist/runtime-api-BJharVaj.d.ts +198 -0
  55. package/dist/runtime-api-C6aWo9c0.d.ts +95 -0
  56. package/dist/runtime-json-CQ9QbLZ5.d.ts +5 -0
  57. package/dist/runtime.d.ts +80 -11
  58. package/dist/runtime.js +89 -445
  59. package/dist/runtime.js.map +1 -1
  60. package/dist/testing.d.ts +643 -22
  61. package/dist/testing.js +1371 -76
  62. package/dist/testing.js.map +1 -1
  63. package/dist/types-CYeN0wLK.d.ts +29 -0
  64. package/dist/{attributes-BeRyboMS.d.ts → types-DJj5MJkl.d.ts} +32 -55
  65. package/dist/types.d.ts +14 -7
  66. package/dist/ui/components.d.ts +4 -5
  67. package/dist/ui/components.js +19 -1
  68. package/dist/ui/player-state.d.ts +2 -365
  69. package/dist/ui/plugin-styles.css +1 -1
  70. package/dist/{ui-contract-BUC6iS3s.d.ts → ui-contract-CY7cxsCC.d.ts} +17 -26
  71. package/dist/ui.d.ts +8 -13
  72. package/dist/ui.js +20 -2
  73. package/dist/{views-B0hlW6IT.d.ts → views-fn2RuXOx.d.ts} +59 -44
  74. package/package.json +28 -4
  75. package/dist/chunk-4G7552LO.js.map +0 -1
  76. package/dist/chunk-MNKDSGIA.js.map +0 -1
  77. package/dist/chunk-NBAEEHAU.js.map +0 -1
  78. package/dist/chunk-P7F4L2FF.js.map +0 -1
  79. package/dist/chunk-Q5O7GPVY.js.map +0 -1
  80. package/dist/chunk-QLG6VEMW.js.map +0 -1
  81. package/dist/chunk-U5KBV2BA.js.map +0 -1
  82. package/dist/hex-color-MhOyuY-o.d.ts +0 -8
  83. package/dist/runtime-api-BXd70c2e.d.ts +0 -490
  84. /package/dist/{chunk-2LDZ5C3T.js.map → chunk-FWVV2X74.js.map} +0 -0
@@ -0,0 +1 @@
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"]}
@@ -0,0 +1,12 @@
1
+ // src/authoring/generated-metadata.ts
2
+ var GENERATED_AUTHORING_METADATA = {
3
+ sdkVersion: "0.4.0-alpha.2",
4
+ codegenVersion: "0.3.0-alpha.0",
5
+ manifestSchemaVersion: 2,
6
+ generatedArtifactSchemaVersion: 1
7
+ };
8
+
9
+ export {
10
+ GENERATED_AUTHORING_METADATA
11
+ };
12
+ //# sourceMappingURL=chunk-ZAS2SENW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/authoring/generated-metadata.ts"],"sourcesContent":["// Generated by scripts/generate-authoring-metadata.mjs. Do not edit by hand.\nimport type { GeneratedAuthoringMetadataV1 } from \"./types.js\";\n\nexport const GENERATED_AUTHORING_METADATA = {\n sdkVersion: \"0.4.0-alpha.2\",\n codegenVersion: \"0.3.0-alpha.0\",\n manifestSchemaVersion: 2,\n generatedArtifactSchemaVersion: 1,\n} as const satisfies GeneratedAuthoringMetadataV1;\n"],"mappings":";AAGO,IAAM,+BAA+B;AAAA,EAC1C,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,uBAAuB;AAAA,EACvB,gCAAgC;AAClC;","names":[]}
package/dist/codegen.d.ts CHANGED
@@ -23,6 +23,10 @@ type PresetCardSetDefinition = {
23
23
  * Type of card set source
24
24
  */
25
25
  type: "preset";
26
+ /**
27
+ * Default initial home for cards materialized from the preset.
28
+ */
29
+ defaultHome: ComponentHomeSpec;
26
30
  };
27
31
  /**
28
32
  * Arbitrary authored JSON value.
@@ -204,7 +208,9 @@ type BoardCard = {
204
208
  */
205
209
  cardType?: string;
206
210
  /**
207
- * Optional authored home for this card inventory. When omitted, cards start detached until reducer setup places them.
211
+ * Optional per-card initial home. Omitted cards use their manual card set's
212
+ * defaultHome. Compatibility declarations such as allowedCardSetIds never
213
+ * imply placement. Player-scoped distribution belongs in reducer setup.
208
214
  */
209
215
  home?: ComponentHomeSpec;
210
216
  /**
@@ -235,6 +241,10 @@ type ManualCardSetDefinition = {
235
241
  * Schema definition for authored card properties in this card set
236
242
  */
237
243
  cardSchema: CardPropertySchema;
244
+ /**
245
+ * Default initial home for cards that do not declare a per-card home.
246
+ */
247
+ defaultHome: ComponentHomeSpec;
238
248
  /**
239
249
  * List of authored cards in this card set
240
250
  */
package/dist/codegen.js CHANGED
@@ -18,7 +18,7 @@ import {
18
18
  materializeManifestTable,
19
19
  materializePresetCardSet,
20
20
  validateManifestAuthoring
21
- } from "./chunk-NBAEEHAU.js";
21
+ } from "./chunk-CP35NPPY.js";
22
22
  import "./chunk-PZ5AY32C.js";
23
23
  export {
24
24
  AUTHORITATIVE_GENERATED_FILES,
@@ -2,15 +2,15 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ViewCard, ViewSlotOccupant } from './types.js';
3
3
  import { I as InteractionVisualState, a as CardIntent, C as CardDropTargetVisualState } from './HandView-PYDmehVD.js';
4
4
  import * as react from 'react';
5
- import { ReactNode, CSSProperties, RefObject, Component, ErrorInfo, ComponentType, ButtonHTMLAttributes, ElementType, ComponentProps } from 'react';
5
+ import { ReactNode, CSSProperties, RefObject, Component, ErrorInfo, ComponentType, ButtonHTMLAttributes, ElementType, ComponentProps, HTMLAttributes } from 'react';
6
6
  import { Transition } from 'framer-motion';
7
- import './ResourceCounter-BTXklCEZ.js';
7
+ import './ResourceCounter-BuiNstXs.js';
8
8
  import { Drawer as Drawer$1 } from 'vaul';
9
9
  import * as DialogPrimitive from '@radix-ui/react-dialog';
10
10
  import * as LabelPrimitive from '@radix-ui/react-label';
11
11
  import * as SelectPrimitive from '@radix-ui/react-select';
12
- import { $ as Theme, I as IntentColor, W as PlayerColor, a as AnySquareBoardInput, T as NormalizedSquareEdgeOf, V as NormalizedSquareVertexOf, U as NormalizedSquarePieceOf, J as InteractiveTargetLayer, S as NormalizedSquareCellOf, K as InteractiveTargetRenderState, n as GeneratedSquareBoardInput, c as AuthoredSquareBoardInput } from './hex-board-view-UCUjMALd.js';
13
- import { SquarePieceState } from './ui/player-state.js';
12
+ import { $ as Theme, I as IntentColor, W as PlayerColor, a as AnySquareBoardInput, T as NormalizedSquareEdgeOf, V as NormalizedSquareVertexOf, U as NormalizedSquarePieceOf, J as InteractiveTargetLayer, S as NormalizedSquareCellOf, K as InteractiveTargetRenderState, n as GeneratedSquareBoardInput, c as AuthoredSquareBoardInput } from './hex-board-view-Kz9Q_zsv.js';
13
+ import { A as SquarePieceState } from './player-state-Cqpyeql0.js';
14
14
 
15
15
  interface TrackSpace<SpaceIdValue extends string = string, Data = unknown> {
16
16
  id: SpaceIdValue;
@@ -251,70 +251,6 @@ interface UseHandLayoutReturn {
251
251
  /** Get position props for a card at the given index */
252
252
  getCardPosition: (index: number, isHovered: boolean, isSelected: boolean) => CardPositionProps;
253
253
  }
254
- /**
255
- * Hook for managing hand layout calculations and interactions.
256
- *
257
- * Provides container measurement, overlap calculations, drawer mode detection,
258
- * and hover state management for card hand displays.
259
- *
260
- * @example
261
- * ```tsx
262
- * function MyHand({ cards, selectedIds }) {
263
- * const {
264
- * containerRef,
265
- * cardsContainerRef,
266
- * totalWidth,
267
- * useDrawerMode,
268
- * cardDimensions,
269
- * hoveredIndex,
270
- * handleMouseMove,
271
- * handleMouseLeave,
272
- * getCardPosition,
273
- * constants,
274
- * } = useHandLayout({
275
- * cardCount: cards.length,
276
- * cardSize: "md",
277
- * layout: "overlap",
278
- * });
279
- *
280
- * if (useDrawerMode) {
281
- * return <MyDrawerUI cards={cards} />;
282
- * }
283
- *
284
- * return (
285
- * <div ref={containerRef}>
286
- * <div
287
- * ref={cardsContainerRef}
288
- * style={{ width: totalWidth, height: cardDimensions.height + constants.hoverLift }}
289
- * onMouseMove={handleMouseMove}
290
- * onMouseLeave={handleMouseLeave}
291
- * >
292
- * {cards.map((card, index) => {
293
- * const isHovered = hoveredIndex === index;
294
- * const isSelected = selectedIds.includes(card.id);
295
- * const position = getCardPosition(index, isHovered, isSelected);
296
- *
297
- * return (
298
- * <div
299
- * key={card.id}
300
- * style={{
301
- * position: "absolute",
302
- * left: position.x,
303
- * transform: `translateY(${position.y}px)`,
304
- * zIndex: position.zIndex,
305
- * }}
306
- * >
307
- * <MyCard card={card} />
308
- * </div>
309
- * );
310
- * })}
311
- * </div>
312
- * </div>
313
- * );
314
- * }
315
- * ```
316
- */
317
- declare function useHandLayout({ cardCount, cardSize, layout, containerPadding, }: UseHandLayoutOptions): UseHandLayoutReturn;
318
254
 
319
255
  interface HandCardRenderProps<CardData extends ViewCard = ViewCard> {
320
256
  card: CardData;
@@ -460,8 +396,10 @@ interface CardDropTargetViewProps {
460
396
  order?: number;
461
397
  /** ARIA role override; defaults to `button`. */
462
398
  role?: string;
399
+ /** SDK browser-interaction protocol attributes for runtime drag targets. */
400
+ browserInteractionAttributes?: Record<string, string | boolean>;
463
401
  }
464
- declare function CardDropTargetView({ targetId, state, label, renderTarget, className, style, order, role, }: CardDropTargetViewProps): react_jsx_runtime.JSX.Element;
402
+ declare function CardDropTargetView({ targetId, state, label, renderTarget, className, style, order, role, browserInteractionAttributes, }: CardDropTargetViewProps): react_jsx_runtime.JSX.Element;
465
403
 
466
404
  /**
467
405
  * Shared types for the card drag surface modules.
@@ -822,6 +760,35 @@ interface ThemedButtonProps extends Omit<ShadcnButtonProps, "variant" | "size">,
822
760
  }
823
761
  declare function ThemedButton({ variant, size, pressed, loading, eligible, selected, disabled, invalid, submitted, previewing, intentProgress, className, style, ...props }: ThemedButtonProps): react_jsx_runtime.JSX.Element;
824
762
 
763
+ type PanelTone = "card" | "hud" | "inset";
764
+ interface PanelRootProps extends HTMLAttributes<HTMLDivElement> {
765
+ tone?: PanelTone;
766
+ children: ReactNode;
767
+ }
768
+ interface PanelPartProps extends HTMLAttributes<HTMLDivElement> {
769
+ children?: ReactNode;
770
+ }
771
+ interface PanelTitleProps extends HTMLAttributes<HTMLHeadingElement> {
772
+ children?: ReactNode;
773
+ }
774
+ interface PanelDescriptionProps extends HTMLAttributes<HTMLParagraphElement> {
775
+ children?: ReactNode;
776
+ }
777
+ declare function PanelRoot({ tone, className, children, style, ...props }: PanelRootProps): react_jsx_runtime.JSX.Element;
778
+ declare function PanelHeader({ className, style, children, ...props }: PanelPartProps): react_jsx_runtime.JSX.Element;
779
+ declare function PanelTitle({ className, style, children, ...props }: PanelTitleProps): react_jsx_runtime.JSX.Element;
780
+ declare function PanelDescription({ className, style, children, ...props }: PanelDescriptionProps): react_jsx_runtime.JSX.Element;
781
+ declare function PanelBody({ className, style, children, ...props }: PanelPartProps): react_jsx_runtime.JSX.Element;
782
+ declare function PanelActions({ className, style, children, ...props }: PanelPartProps): react_jsx_runtime.JSX.Element;
783
+ declare const Panel: {
784
+ Root: typeof PanelRoot;
785
+ Header: typeof PanelHeader;
786
+ Title: typeof PanelTitle;
787
+ Description: typeof PanelDescription;
788
+ Body: typeof PanelBody;
789
+ Actions: typeof PanelActions;
790
+ };
791
+
825
792
  /** Attention-pulse policy for the trailing halo. */
826
793
  type PrimaryActionAttention = "auto" | "always" | "off";
827
794
  interface SubmittedActionConfig {
@@ -1459,4 +1426,4 @@ interface SquareGridComponent {
1459
1426
  }
1460
1427
  declare const SquareGrid: SquareGridComponent;
1461
1428
 
1462
- export { Dialog as $, ActionButton as A, type ButtonSize$1 as B, CardDragSurface as C, DefaultChessPiece as D, type DefaultNetworkEdgeProps as E, DefaultNetworkNode as F, type DefaultNetworkNodeProps as G, DefaultNetworkPiece as H, type DefaultNetworkPieceProps as I, DefaultSlotItem as J, type DefaultSlotItemProps as K, DefaultSlotOccupant as L, type DefaultSlotOccupantProps as M, DefaultTrackConnection as N, type DefaultTrackConnectionProps as O, DefaultTrackJump as P, type DefaultTrackJumpProps as Q, DefaultTrackPiece as R, type DefaultTrackPieceProps as S, DefaultTrackSpace as T, type DefaultTrackSpaceProps as U, DefaultZone as V, DefaultZonePiece as W, type DefaultZonePieceProps as X, DefaultZonePieces as Y, type DefaultZonePiecesProps as Z, type DefaultZoneProps as _, type ActionButtonProps as a, type SlotDefinition as a$, DialogClose as a0, DialogContent as a1, DialogDescription as a2, DialogFooter as a3, DialogHeader as a4, DialogOverlay as a5, DialogPortal as a6, DialogTitle as a7, DialogTrigger as a8, DiceRoller as a9, type HandProps as aA, Input as aB, type InteractiveSquareEdge as aC, type InteractiveSquareVertex as aD, Label as aE, MoreActions as aF, type MoreActionsProps as aG, type NetworkEdge as aH, NetworkGraph as aI, type NetworkGraphProps as aJ, type NetworkNode as aK, type NetworkPiece as aL, PhaseIndicator as aM, type PhaseIndicatorProps as aN, PlayArea as aO, type PlayAreaProps as aP, type PlayerScore as aQ, type PrimaryActionAttention as aR, PrimaryActionButton as aS, type PrimaryActionButtonProps as aT, PrimaryButton as aU, type PrimaryButtonProps as aV, type ResourceDefinition as aW, Select as aX, SelectContent as aY, SelectItem as aZ, SelectTrigger as a_, type DiceRollerProps as aa, type DragPhase as ab, Drawer as ac, DrawerClose as ad, DrawerContent as ae, DrawerDescription as af, DrawerFooter as ag, DrawerHeader as ah, DrawerOverlay as ai, DrawerPortal as aj, DrawerTitle as ak, DrawerTrigger as al, ErrorBoundary as am, type ErrorBoundaryProps as an, GameEndDisplay as ao, type GameEndDisplayProps as ap, GameSkeleton as aq, type GameSkeletonProps as ar, Hand as as, HandDock as at, type HandDockMode as au, type HandDockPlacement as av, type HandDockPresentation as aw, type HandDockProps as ax, type HandDockToggleContext as ay, type HandLayout as az, ActionGroup as b, type SlotOccupant as b0, SlotSystem as b1, type SlotSystemProps as b2, type SquareEdgePosition as b3, SquareGrid as b4, type SquareGridBoardProps as b5, type SquareGridProps as b6, type SquareVertexPosition as b7, StagingZone as b8, type StagingZoneProps as b9, surfaceStyle as bA, toAlgebraic as bB, toNumeric as bC, useCardDragSurface as bD, useChromeSuppression as bE, useHandLayout as bF, ThemedButton as ba, type ThemedButtonProps as bb, Toast as bc, ToastActions as bd, type ToastActionsProps as be, type ToastActionsValue as bf, type ToastNotification as bg, ToastProvider as bh, type ToastType as bi, TrackBoard as bj, type TrackBoardProps as bk, type TrackPiece as bl, type TrackSpace as bm, type UseHandLayoutOptions as bn, type UseHandLayoutReturn as bo, type ZoneDefinition as bp, type ZoneHighlightType as bq, ZoneMap as br, type ZoneMapProps as bs, type ZonePiece as bt, type ZoneShape as bu, buttonStyle as bv, chipStyle as bw, intentForVariant as bx, motionDuration as by, playerColor as bz, type ActionGroupProps as c, ActionPanel as d, type ActionPanelProps as e, type ButtonVariant$1 as f, type CardDragSurfaceContextValue as g, type CardDragSurfaceController as h, type CardDragSurfaceProps as i, CardDropTargetView as j, type CardDropTargetViewProps as k, CardFace as l, type CardFaceProps as m, type CardPositionProps as n, type CardSize as o, ChromeSuppressionProvider as p, CostDisplay as q, type CostDisplayProps as r, type DefaultChessPieceProps as s, DefaultEmptySlot as t, type DefaultEmptySlotProps as u, DefaultGridCell as v, type DefaultGridCellProps as w, DefaultGridPiece as x, type DefaultGridPieceProps as y, DefaultNetworkEdge as z };
1429
+ export { Dialog as $, ActionButton as A, type ButtonSize$1 as B, CardDragSurface as C, DefaultChessPiece as D, type DefaultNetworkEdgeProps as E, DefaultNetworkNode as F, type DefaultNetworkNodeProps as G, DefaultNetworkPiece as H, type DefaultNetworkPieceProps as I, DefaultSlotItem as J, type DefaultSlotItemProps as K, DefaultSlotOccupant as L, type DefaultSlotOccupantProps as M, DefaultTrackConnection as N, type DefaultTrackConnectionProps as O, DefaultTrackJump as P, type DefaultTrackJumpProps as Q, DefaultTrackPiece as R, type DefaultTrackPieceProps as S, DefaultTrackSpace as T, type DefaultTrackSpaceProps as U, DefaultZone as V, DefaultZonePiece as W, type DefaultZonePieceProps as X, DefaultZonePieces as Y, type DefaultZonePiecesProps as Z, type DefaultZoneProps as _, type ActionButtonProps as a, type PlayAreaProps as a$, DialogClose as a0, DialogContent as a1, DialogDescription as a2, DialogFooter as a3, DialogHeader as a4, DialogOverlay as a5, DialogPortal as a6, DialogTitle as a7, DialogTrigger as a8, DiceRoller as a9, type HandProps as aA, Input as aB, type InteractiveSquareEdge as aC, type InteractiveSquareVertex as aD, Label as aE, MoreActions as aF, type MoreActionsProps as aG, type NetworkEdge as aH, NetworkGraph as aI, type NetworkGraphProps as aJ, type NetworkNode as aK, type NetworkPiece as aL, Panel as aM, PanelActions as aN, PanelBody as aO, PanelDescription as aP, type PanelDescriptionProps as aQ, PanelHeader as aR, type PanelPartProps as aS, PanelRoot as aT, type PanelRootProps as aU, PanelTitle as aV, type PanelTitleProps as aW, type PanelTone as aX, PhaseIndicator as aY, type PhaseIndicatorProps as aZ, PlayArea as a_, type DiceRollerProps as aa, type DragPhase as ab, Drawer as ac, DrawerClose as ad, DrawerContent as ae, DrawerDescription as af, DrawerFooter as ag, DrawerHeader as ah, DrawerOverlay as ai, DrawerPortal as aj, DrawerTitle as ak, DrawerTrigger as al, ErrorBoundary as am, type ErrorBoundaryProps as an, GameEndDisplay as ao, type GameEndDisplayProps as ap, GameSkeleton as aq, type GameSkeletonProps as ar, Hand as as, HandDock as at, type HandDockMode as au, type HandDockPlacement as av, type HandDockPresentation as aw, type HandDockProps as ax, type HandDockToggleContext as ay, type HandLayout as az, ActionGroup as b, type PlayerScore as b0, type PrimaryActionAttention as b1, PrimaryActionButton as b2, type PrimaryActionButtonProps as b3, PrimaryButton as b4, type PrimaryButtonProps as b5, type ResourceDefinition as b6, Select as b7, SelectContent as b8, SelectItem as b9, type UseHandLayoutReturn as bA, type ZoneDefinition as bB, type ZoneHighlightType as bC, ZoneMap as bD, type ZoneMapProps as bE, type ZonePiece as bF, type ZoneShape as bG, buttonStyle as bH, chipStyle as bI, intentForVariant as bJ, motionDuration as bK, playerColor as bL, surfaceStyle as bM, toAlgebraic as bN, toNumeric as bO, useCardDragSurface as bP, useChromeSuppression as bQ, SelectTrigger as ba, type SlotDefinition as bb, type SlotOccupant as bc, SlotSystem as bd, type SlotSystemProps as be, type SquareEdgePosition as bf, SquareGrid as bg, type SquareGridBoardProps as bh, type SquareGridProps as bi, type SquareVertexPosition as bj, StagingZone as bk, type StagingZoneProps as bl, ThemedButton as bm, type ThemedButtonProps as bn, Toast as bo, ToastActions as bp, type ToastActionsProps as bq, type ToastActionsValue as br, type ToastNotification as bs, ToastProvider as bt, type ToastType as bu, TrackBoard as bv, type TrackBoardProps as bw, type TrackPiece as bx, type TrackSpace as by, type UseHandLayoutOptions as bz, type ActionGroupProps as c, ActionPanel as d, type ActionPanelProps as e, type ButtonVariant$1 as f, type CardDragSurfaceContextValue as g, type CardDragSurfaceController as h, type CardDragSurfaceProps as i, CardDropTargetView as j, type CardDropTargetViewProps as k, CardFace as l, type CardFaceProps as m, type CardPositionProps as n, type CardSize as o, ChromeSuppressionProvider as p, CostDisplay as q, type CostDisplayProps as r, type DefaultChessPieceProps as s, DefaultEmptySlot as t, type DefaultEmptySlotProps as u, DefaultGridCell as v, type DefaultGridCellProps as w, DefaultGridPiece as x, type DefaultGridPieceProps as y, DefaultNetworkEdge as z };
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { BoardId, HexTileState, HexEdgeState, EdgeTypeId, PlayerId, HexVertexState, VertexTypeId, SpaceTypeId, SquareCellState, SquareEdgeState, SquareVertexState, SquarePieceState, HexBoardState, SquareBoardState } from './ui/player-state.js';
3
+ import { a as BoardId, l as HexTileState, k as HexEdgeState, E as EdgeTypeId, u as PlayerId, m as HexVertexState, V as VertexTypeId, w as SpaceTypeId, y as SquareCellState, z as SquareEdgeState, F as SquareVertexState, A as SquarePieceState, H as HexBoardState, x as SquareBoardState } from './player-state-Cqpyeql0.js';
4
4
 
5
5
  /**
6
6
  * Token contract for `@dreamboard-games/sdk/ui`.
package/dist/index.js CHANGED
@@ -2,7 +2,8 @@ import {
2
2
  DREAMBOARD_SDK_PACKAGES,
3
3
  DREAMBOARD_SDK_PACKAGE_SET,
4
4
  DREAMBOARD_SDK_VERSION
5
- } from "./chunk-MNKDSGIA.js";
5
+ } from "./chunk-HWJS3VOJ.js";
6
+ import "./chunk-ZAS2SENW.js";
6
7
  import "./chunk-PZ5AY32C.js";
7
8
  export {
8
9
  DREAMBOARD_SDK_PACKAGES,
@@ -1,6 +1,6 @@
1
- declare const DREAMBOARD_SDK_VERSION = "0.4.0-alpha.0";
1
+ declare const DREAMBOARD_SDK_VERSION: "0.4.0-alpha.2";
2
2
  declare const DREAMBOARD_SDK_PACKAGES: {
3
- readonly "@dreamboard-games/sdk": "0.4.0-alpha.0";
3
+ readonly "@dreamboard-games/sdk": "0.4.0-alpha.2";
4
4
  };
5
5
  type DreamboardSdkPackageName = keyof typeof DREAMBOARD_SDK_PACKAGES;
6
6
  type DreamboardSdkPackageSet = {
@@ -2,7 +2,8 @@ import {
2
2
  DREAMBOARD_SDK_PACKAGES,
3
3
  DREAMBOARD_SDK_PACKAGE_SET,
4
4
  DREAMBOARD_SDK_VERSION
5
- } from "./chunk-MNKDSGIA.js";
5
+ } from "./chunk-HWJS3VOJ.js";
6
+ import "./chunk-ZAS2SENW.js";
6
7
  import "./chunk-PZ5AY32C.js";
7
8
  export {
8
9
  DREAMBOARD_SDK_PACKAGES,