@plasius/player-system-interface 0.1.6 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -95,7 +95,7 @@ console.log(
95
95
 
96
96
  ## Interface NFR Contract
97
97
 
98
- The inherited feature flag for this work is `isekai.player-system.interface.enabled`.
98
+ The inherited feature flag for this work is `harmony.player-system.interface.enabled`.
99
99
 
100
100
  `defaultPlayerSystemInterfaceContract` and `createPlayerSystemInterfaceContract()` make these host expectations explicit:
101
101
 
@@ -107,7 +107,7 @@ The inherited feature flag for this work is `isekai.player-system.interface.enab
107
107
 
108
108
  ## Interface Portability Contract
109
109
 
110
- The inherited feature flag for this work is `isekai.player-system.interface.enabled`.
110
+ The inherited feature flag for this work is `harmony.player-system.interface.enabled`.
111
111
 
112
112
  `defaultPlayerSystemInterfacePortabilityContract`,
113
113
  `createPlayerSystemInterfacePortabilityContract()`, and
@@ -132,7 +132,7 @@ The inherited feature flag for this work is `isekai.player-system.interface.enab
132
132
 
133
133
  `createIdentityStatusOverlayDefinition()` represents the Identity System's
134
134
  self-state and explicit external target projections. The inherited feature
135
- flag is `isekai.player-system.identity.enabled`.
135
+ flag is `harmony.player-system.identity.enabled`.
136
136
 
137
137
  - Self-state overlays use the `self-state` invocation and never require line of
138
138
  sight.
@@ -146,6 +146,24 @@ flag is `isekai.player-system.identity.enabled`.
146
146
  `assessIdentityStatusOverlayDefinition()` / `assessInterfaceShellDefinition()`
147
147
  before rendering.
148
148
 
149
+ ## Project Harmony namespace migration
150
+
151
+ The Project Harmony cutover is a breaking public-contract change. Consumers
152
+ moving to the next major release must replace these rollout values before
153
+ enabling `harmony.namespace-cutover.enabled`:
154
+
155
+ | Previous key | Harmony key |
156
+ | --- | --- |
157
+ | `isekai.player-system.interface.enabled` | `harmony.player-system.interface.enabled` |
158
+ | `isekai.player-system.identity.enabled` | `harmony.player-system.identity.enabled` |
159
+ | `isekai.player-system.packages.enabled` | `harmony.player-system.packages.enabled` |
160
+ | `isekai.player-system.runtime-nfr.enabled` | `harmony.player-system.runtime-nfr.enabled` |
161
+ | `isekai.player-system.runtime-portability.enabled` | `harmony.player-system.runtime-portability.enabled` |
162
+
163
+ The package publishes only Harmony values. It provides no aliases, dual-read
164
+ parsing, environment fallback, or runtime translation for the previous product
165
+ namespace. Caller-supplied interface overrides must also use `harmony.*` keys.
166
+
149
167
  ## Shell State, 3D Panes, and Ambient Alerts
150
168
 
151
169
  `createInterfaceShellState()` represents ambient, focused, and combat-safe
@@ -168,7 +186,8 @@ map with an explicit live-region mode. Resolve the best available copy with
168
186
  - ADRs: [docs/adrs](./docs/adrs)
169
187
  - TDRs: [docs/tdrs](./docs/tdrs)
170
188
  - Design notes: [docs/design](./docs/design)
171
- - Parent feature flag: `isekai.player-system.interface.enabled`
189
+ - Parent feature flag: `harmony.player-system.interface.enabled`
172
190
  - Capability: not required for package bootstrap; interface adoption remains feature-flag led
173
- - Rollback: disable `isekai.player-system.interface.enabled` to halt package-family adoption without changing package code
174
- - Identity rollback: disable `isekai.player-system.identity.enabled` to stop identity projection adoption without changing package code
191
+ - Rollback: disable `harmony.player-system.interface.enabled` to halt package-family adoption without changing package code
192
+ - Identity rollback: disable `harmony.player-system.identity.enabled` to stop identity projection adoption without changing package code
193
+ - Namespace rollback: disable `harmony.namespace-cutover.enabled`, restore the previous coordinated package majors, and complete the approved reverse stored-value migration before re-enabling consumers
package/dist/index.cjs CHANGED
@@ -52,11 +52,11 @@ __export(index_exports, {
52
52
  module.exports = __toCommonJS(index_exports);
53
53
  var PLAYER_SYSTEM_INTERFACE_PACKAGE = "@plasius/player-system-interface";
54
54
  var PLAYER_SYSTEM_INTERFACE_ENV_PREFIX = "PLAYER_SYSTEM_INTERFACE";
55
- var PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID = "isekai.player-system.interface.enabled";
55
+ var PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID = "harmony.player-system.interface.enabled";
56
56
  var PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID = PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;
57
57
  var PLAYER_SYSTEM_RUNTIME_NFR_FEATURE_FLAG_ID = PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;
58
58
  var PLAYER_SYSTEM_RUNTIME_PORTABILITY_FEATURE_FLAG_ID = PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;
59
- var PLAYER_SYSTEM_IDENTITY_FEATURE_FLAG_ID = "isekai.player-system.identity.enabled";
59
+ var PLAYER_SYSTEM_IDENTITY_FEATURE_FLAG_ID = "harmony.player-system.identity.enabled";
60
60
  var packageDescriptor = Object.freeze({
61
61
  packageName: PLAYER_SYSTEM_INTERFACE_PACKAGE,
62
62
  featureFlagId: PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export interface PackageDescriptor {\n readonly packageName: string;\n readonly featureFlagId: string;\n readonly envPrefix: string;\n readonly summary: string;\n}\n\nexport type OverlayKeyboardPath = \"sequential\" | \"direct-hotkey\" | \"read-only\";\n\nexport interface OverlayAccessibilityContract {\n readonly keyboardPath: OverlayKeyboardPath;\n readonly focusRestorationTarget: \"trigger\" | \"pane-heading\" | \"nearest-anchor\";\n readonly liveRegionMode: \"polite\" | \"assertive\" | \"off\";\n readonly requiresAccessibleName: boolean;\n}\n\nexport interface InterfaceFrameBudget {\n readonly targetFps: number;\n readonly maxFrameMs: number;\n readonly maxInteractivePanelsPerFrame: number;\n}\n\nexport type OverlayHostKind =\n | \"dom-overlay\"\n | \"native-overlay\"\n | \"headless-snapshot\";\n\nexport type OverlayAdapterCapability =\n | \"focus-restoration\"\n | \"live-region\"\n | \"anchor-registry\";\n\nexport interface OverlayHostAdapterContract {\n readonly supportedHosts: readonly OverlayHostKind[];\n readonly requiredCapabilities: readonly OverlayAdapterCapability[];\n readonly forbiddenAssumptions: readonly string[];\n}\n\nexport interface OverlayCompositionScaleContract {\n readonly maxWorldPanels: number;\n readonly maxFocusPanes: number;\n readonly maxAlertMarkers: number;\n readonly maxInteractivePanelsPerFrame: number;\n}\n\nexport interface PlayerSystemInterfaceContract {\n readonly featureFlagId: string;\n readonly accessibility: OverlayAccessibilityContract;\n readonly frameBudget: InterfaceFrameBudget;\n}\n\nexport interface PlayerSystemInterfacePortabilityContract {\n readonly featureFlagId: string;\n readonly hostAdapters: OverlayHostAdapterContract;\n readonly compositionScale: OverlayCompositionScaleContract;\n}\n\nexport interface PlayerSystemInterfaceContractInput {\n readonly featureFlagId?: string;\n readonly accessibility?: Partial<OverlayAccessibilityContract>;\n readonly frameBudget?: Partial<InterfaceFrameBudget>;\n}\n\nexport interface PlayerSystemInterfacePortabilityContractInput {\n readonly featureFlagId?: string;\n readonly hostAdapters?: Partial<OverlayHostAdapterContract>;\n readonly compositionScale?: Partial<OverlayCompositionScaleContract>;\n}\n\nexport type PlayerSystemInterfaceMode = \"ambient\" | \"focused\" | \"combat-safe\";\n\nexport type PlayerSystemPaneId =\n | \"identity\"\n | \"missions\"\n | \"guild-quests\"\n | \"logs\"\n | \"mcc\"\n | \"tutorial\"\n | \"points-store\";\n\nexport type InterfaceShellOwner = \"player-system\" | \"party-system\";\nexport type InterfaceShellSurfaceKind =\n | \"world-panel\"\n | \"focus-pane\"\n | \"target-popup\"\n | \"alert-marker\"\n | \"identity-overlay\";\nexport type InterfaceCombatBehavior = \"persist\" | \"reduce\" | \"suspend\";\n\nexport type IdentityProjectionRelation =\n | \"self\"\n | \"allied\"\n | \"neutral\"\n | \"unknown\"\n | \"unfriendly\";\nexport type IdentityProjectionInvocation =\n | \"self-state\"\n | \"identity-sweep\"\n | \"spell-targeting\";\nexport type IdentityProjectionReadConfidence =\n | \"complete\"\n | \"partial\"\n | \"fuzzy\"\n | \"withheld\";\nexport type IdentityProjectionPresentation = \"full\" | \"condensed\";\nexport type IdentityProjectionFact =\n | \"display-name\"\n | \"relation\"\n | \"health-band\"\n | \"status-summary\"\n | \"threat-band\"\n | \"targeting-affordance\";\n\nexport interface IdentityStatusOverlayBaseDefinition {\n readonly overlayId: string;\n readonly surfaceId: string;\n readonly readConfidence: IdentityProjectionReadConfidence;\n readonly perceivableFacts: readonly IdentityProjectionFact[];\n readonly readableFacts: readonly IdentityProjectionFact[];\n readonly presentation: IdentityProjectionPresentation;\n}\n\nexport interface IdentitySelfStateOverlayDefinition\n extends IdentityStatusOverlayBaseDefinition {\n readonly targetKind: \"self\";\n readonly relation: \"self\";\n readonly invocation: \"self-state\";\n readonly requiresLineOfSight: false;\n readonly targetId?: never;\n}\n\nexport interface IdentityTargetProjectionOverlayDefinition\n extends IdentityStatusOverlayBaseDefinition {\n readonly targetKind: \"external\";\n readonly targetId: string;\n readonly relation: Exclude<IdentityProjectionRelation, \"self\">;\n readonly invocation: Exclude<IdentityProjectionInvocation, \"self-state\">;\n readonly requiresLineOfSight: true;\n}\n\nexport type IdentityStatusOverlayDefinition =\n | IdentitySelfStateOverlayDefinition\n | IdentityTargetProjectionOverlayDefinition;\n\nexport interface InterfaceShellSurfaceDefinition {\n readonly surfaceId: string;\n readonly owner: InterfaceShellOwner;\n readonly kind: InterfaceShellSurfaceKind;\n readonly anchorId: string;\n readonly interactive: boolean;\n readonly priority: number;\n readonly combatBehavior: InterfaceCombatBehavior;\n}\n\nexport interface FocusPaneShellDefinition {\n readonly panelId: string;\n readonly owner: InterfaceShellOwner;\n readonly pane: PlayerSystemPaneId;\n readonly anchorId: string;\n readonly heading: string;\n readonly interactive: boolean;\n readonly combatBehavior: InterfaceCombatBehavior;\n}\n\nexport interface LineOfSightTargetPopupDefinition {\n readonly popupId: string;\n readonly owner: InterfaceShellOwner;\n readonly anchorId: string;\n readonly targetId: string;\n readonly summary: string;\n readonly requiresLineOfSight: boolean;\n readonly actionLabel?: string;\n}\n\nexport interface ReducedCombatOverlayPolicy {\n readonly featureFlagId: string;\n readonly mode: \"combat-safe\";\n readonly retainedSurfaceKinds: readonly InterfaceShellSurfaceKind[];\n readonly maxInteractiveSurfaces: number;\n}\n\nexport interface InterfaceShellDefinition {\n readonly featureFlagId: string;\n readonly surfaces: readonly InterfaceShellSurfaceDefinition[];\n readonly focusPane?: FocusPaneShellDefinition;\n readonly targetPopups: readonly LineOfSightTargetPopupDefinition[];\n readonly identityOverlays: readonly IdentityStatusOverlayDefinition[];\n readonly paneHosts: readonly ThreeDPaneHostDefinition[];\n readonly ambientAlerts: readonly LocalizedAmbientAlertDefinition[];\n readonly reducedCombat: ReducedCombatOverlayPolicy;\n}\n\nexport interface InterfaceShellDefinitionInput {\n readonly featureFlagId?: string;\n readonly surfaces?: readonly InterfaceShellSurfaceDefinition[];\n readonly focusPane?: FocusPaneShellDefinition;\n readonly targetPopups?: readonly LineOfSightTargetPopupDefinition[];\n readonly identityOverlays?: readonly IdentityStatusOverlayDefinition[];\n readonly paneHosts?: readonly ThreeDPaneHostDefinition[];\n readonly ambientAlerts?: readonly LocalizedAmbientAlertDefinition[];\n readonly reducedCombat?: Partial<ReducedCombatOverlayPolicy>;\n}\n\nexport type InterfaceFocusShiftReason =\n | \"keyboard\"\n | \"direct-hotkey\"\n | \"restore\"\n | \"system\";\n\nexport interface InterfaceFocusShift {\n readonly fromSurfaceId?: string;\n readonly toSurfaceId: string;\n readonly reason: InterfaceFocusShiftReason;\n}\n\nexport interface InterfaceShellStateDefinition {\n readonly featureFlagId: string;\n readonly mode: PlayerSystemInterfaceMode;\n readonly focusedSurfaceId?: string;\n readonly visibleSurfaceIds: readonly string[];\n readonly focusShift?: InterfaceFocusShift;\n}\n\nexport interface InterfaceShellStateInput {\n readonly mode: PlayerSystemInterfaceMode;\n readonly focusedSurfaceId?: string;\n}\n\nexport interface ThreeDPaneHostDefinition {\n readonly hostId: string;\n readonly owner: InterfaceShellOwner;\n readonly pane: PlayerSystemPaneId;\n readonly surfaceId: string;\n readonly anchorId: string;\n readonly supportedHosts: readonly OverlayHostKind[];\n}\n\nexport type AmbientAlertSeverity = \"info\" | \"warning\" | \"danger\";\n\nexport interface LocalizedAmbientAlertDefinition {\n readonly alertId: string;\n readonly owner: InterfaceShellOwner;\n readonly severity: AmbientAlertSeverity;\n readonly anchorId: string;\n readonly messageKey: string;\n readonly localizedMessages: Readonly<Record<string, string>>;\n readonly liveRegionMode: \"polite\" | \"assertive\";\n}\n\nexport interface WorldSpacePanelDefinition {\n readonly panelId: string;\n readonly pane: PlayerSystemPaneId;\n readonly anchorId: string;\n readonly interactive: boolean;\n readonly accessibilityLabel?: string;\n readonly focusOrder?: number;\n}\n\nexport interface OverlayAlertMarker {\n readonly markerId: string;\n readonly severity: AmbientAlertSeverity;\n readonly anchorId: string;\n}\n\nexport interface WorldSpaceCompositionSample {\n readonly panelCount: number;\n readonly focusPaneCount: number;\n readonly alertMarkerCount: number;\n readonly interactivePanelCount: number;\n}\n\nexport interface InterfaceContractAssessment {\n readonly accepted: boolean;\n readonly violations: readonly string[];\n}\n\nexport const PLAYER_SYSTEM_INTERFACE_PACKAGE = \"@plasius/player-system-interface\";\nexport const PLAYER_SYSTEM_INTERFACE_ENV_PREFIX = \"PLAYER_SYSTEM_INTERFACE\";\nexport const PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID =\n \"isekai.player-system.interface.enabled\";\nexport const PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID =\n PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;\nexport const PLAYER_SYSTEM_RUNTIME_NFR_FEATURE_FLAG_ID =\n PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;\nexport const PLAYER_SYSTEM_RUNTIME_PORTABILITY_FEATURE_FLAG_ID =\n PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;\nexport const PLAYER_SYSTEM_IDENTITY_FEATURE_FLAG_ID =\n \"isekai.player-system.identity.enabled\";\n\nexport const packageDescriptor: PackageDescriptor = Object.freeze({\n packageName: PLAYER_SYSTEM_INTERFACE_PACKAGE,\n featureFlagId: PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID,\n envPrefix: PLAYER_SYSTEM_INTERFACE_ENV_PREFIX,\n summary:\n \"World-space Player System overlays, focus panes, and target-surface contracts for Plasius game experiences.\",\n});\n\nexport const defaultPlayerSystemInterfaceContract: PlayerSystemInterfaceContract =\n Object.freeze({\n featureFlagId: PLAYER_SYSTEM_RUNTIME_NFR_FEATURE_FLAG_ID,\n accessibility: Object.freeze({\n keyboardPath: \"sequential\",\n focusRestorationTarget: \"trigger\",\n liveRegionMode: \"polite\",\n requiresAccessibleName: true,\n }),\n frameBudget: Object.freeze({\n targetFps: 60,\n maxFrameMs: 16,\n maxInteractivePanelsPerFrame: 2,\n }),\n });\n\nexport const defaultPlayerSystemInterfacePortabilityContract: PlayerSystemInterfacePortabilityContract =\n Object.freeze({\n featureFlagId: PLAYER_SYSTEM_RUNTIME_PORTABILITY_FEATURE_FLAG_ID,\n hostAdapters: Object.freeze({\n supportedHosts: Object.freeze([\n \"dom-overlay\",\n \"native-overlay\",\n \"headless-snapshot\",\n ] satisfies OverlayHostKind[]),\n requiredCapabilities: Object.freeze([\n \"focus-restoration\",\n \"live-region\",\n \"anchor-registry\",\n ] satisfies OverlayAdapterCapability[]),\n forbiddenAssumptions: Object.freeze([\n \"window-global\",\n \"single-pane-layout\",\n \"absolute-scene-coordinates\",\n ]),\n }),\n compositionScale: Object.freeze({\n maxWorldPanels: 6,\n maxFocusPanes: 3,\n maxAlertMarkers: 8,\n maxInteractivePanelsPerFrame: 2,\n }),\n });\n\nexport const defaultReducedCombatOverlayPolicy: ReducedCombatOverlayPolicy =\n Object.freeze({\n featureFlagId: PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID,\n mode: \"combat-safe\",\n retainedSurfaceKinds: Object.freeze([\n \"alert-marker\",\n \"target-popup\",\n \"focus-pane\",\n \"identity-overlay\",\n ] satisfies InterfaceShellSurfaceKind[]),\n maxInteractiveSurfaces: 1,\n });\n\nexport function isPlayerSystemInterfaceMode(\n value: string\n): value is PlayerSystemInterfaceMode {\n return value === \"ambient\" || value === \"focused\" || value === \"combat-safe\";\n}\n\nexport function createWorldSpacePanelDefinition(\n input: WorldSpacePanelDefinition\n): WorldSpacePanelDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createPlayerSystemInterfaceContract(\n input: PlayerSystemInterfaceContractInput = {}\n): PlayerSystemInterfaceContract {\n return Object.freeze({\n featureFlagId:\n input.featureFlagId ?? defaultPlayerSystemInterfaceContract.featureFlagId,\n accessibility: Object.freeze({\n ...defaultPlayerSystemInterfaceContract.accessibility,\n ...input.accessibility,\n }),\n frameBudget: Object.freeze({\n ...defaultPlayerSystemInterfaceContract.frameBudget,\n ...input.frameBudget,\n }),\n });\n}\n\nexport function createPlayerSystemInterfacePortabilityContract(\n input: PlayerSystemInterfacePortabilityContractInput = {}\n): PlayerSystemInterfacePortabilityContract {\n return Object.freeze({\n featureFlagId:\n input.featureFlagId ??\n defaultPlayerSystemInterfacePortabilityContract.featureFlagId,\n hostAdapters: Object.freeze({\n ...defaultPlayerSystemInterfacePortabilityContract.hostAdapters,\n ...input.hostAdapters,\n supportedHosts: Object.freeze([\n ...(input.hostAdapters?.supportedHosts ??\n defaultPlayerSystemInterfacePortabilityContract.hostAdapters\n .supportedHosts),\n ]),\n requiredCapabilities: Object.freeze([\n ...(input.hostAdapters?.requiredCapabilities ??\n defaultPlayerSystemInterfacePortabilityContract.hostAdapters\n .requiredCapabilities),\n ]),\n forbiddenAssumptions: Object.freeze([\n ...(input.hostAdapters?.forbiddenAssumptions ??\n defaultPlayerSystemInterfacePortabilityContract.hostAdapters\n .forbiddenAssumptions),\n ]),\n }),\n compositionScale: Object.freeze({\n ...defaultPlayerSystemInterfacePortabilityContract.compositionScale,\n ...input.compositionScale,\n }),\n });\n}\n\nexport function createInterfaceShellSurfaceDefinition(\n input: InterfaceShellSurfaceDefinition\n): InterfaceShellSurfaceDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createFocusPaneShellDefinition(\n input: FocusPaneShellDefinition\n): FocusPaneShellDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createLineOfSightTargetPopupDefinition(\n input: LineOfSightTargetPopupDefinition\n): LineOfSightTargetPopupDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createIdentityStatusOverlayDefinition(\n input: IdentityStatusOverlayDefinition\n): IdentityStatusOverlayDefinition {\n return Object.freeze({\n ...input,\n perceivableFacts: Object.freeze([...input.perceivableFacts]),\n readableFacts: Object.freeze([...input.readableFacts]),\n });\n}\n\nexport function createThreeDPaneHostDefinition(\n input: ThreeDPaneHostDefinition\n): ThreeDPaneHostDefinition {\n return Object.freeze({\n ...input,\n supportedHosts: Object.freeze([...input.supportedHosts]),\n });\n}\n\nexport function createLocalizedAmbientAlertDefinition(\n input: LocalizedAmbientAlertDefinition\n): LocalizedAmbientAlertDefinition {\n return Object.freeze({\n ...input,\n localizedMessages: Object.freeze({ ...input.localizedMessages }),\n });\n}\n\nexport function createInterfaceShellDefinition(\n input: InterfaceShellDefinitionInput = {}\n): InterfaceShellDefinition {\n return Object.freeze({\n featureFlagId: input.featureFlagId ?? PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID,\n surfaces: Object.freeze([...(input.surfaces ?? [])]),\n focusPane: input.focusPane ? Object.freeze({ ...input.focusPane }) : undefined,\n targetPopups: Object.freeze([...(input.targetPopups ?? [])]),\n identityOverlays: Object.freeze([...(input.identityOverlays ?? [])]),\n paneHosts: Object.freeze([...(input.paneHosts ?? [])]),\n ambientAlerts: Object.freeze([...(input.ambientAlerts ?? [])]),\n reducedCombat: Object.freeze({\n ...defaultReducedCombatOverlayPolicy,\n ...input.reducedCombat,\n retainedSurfaceKinds: Object.freeze([\n ...(input.reducedCombat?.retainedSurfaceKinds ??\n defaultReducedCombatOverlayPolicy.retainedSurfaceKinds),\n ]),\n }),\n });\n}\n\nexport function createInterfaceShellState(\n shell: InterfaceShellDefinition,\n input: InterfaceShellStateInput\n): InterfaceShellStateDefinition {\n const retainedSurfaceKinds = new Set(\n shell.reducedCombat.retainedSurfaceKinds\n );\n const visibleSurfaceIds = shell.surfaces\n .filter(\n (surface) =>\n input.mode !== \"combat-safe\" ||\n (surface.combatBehavior !== \"suspend\" &&\n retainedSurfaceKinds.has(surface.kind))\n )\n .map((surface) => surface.surfaceId);\n\n if (\n input.focusedSurfaceId &&\n !visibleSurfaceIds.includes(input.focusedSurfaceId)\n ) {\n throw new RangeError(\n `Focused surface '${input.focusedSurfaceId}' is not visible in ${input.mode} mode`\n );\n }\n\n return Object.freeze({\n featureFlagId: shell.featureFlagId,\n mode: input.mode,\n focusedSurfaceId:\n input.mode === \"focused\" ? input.focusedSurfaceId : undefined,\n visibleSurfaceIds: Object.freeze(visibleSurfaceIds),\n });\n}\n\nexport function applyInterfaceShellFocusShift(\n state: InterfaceShellStateDefinition,\n focusShift: InterfaceFocusShift\n): InterfaceShellStateDefinition {\n if (!state.visibleSurfaceIds.includes(focusShift.toSurfaceId)) {\n throw new RangeError(\n `Focused surface '${focusShift.toSurfaceId}' is not visible in ${state.mode} mode`\n );\n }\n\n return Object.freeze({\n ...state,\n mode: \"focused\",\n focusedSurfaceId: focusShift.toSurfaceId,\n focusShift: Object.freeze({ ...focusShift }),\n });\n}\n\nexport function resolveLocalizedAmbientAlertMessage(\n alert: LocalizedAmbientAlertDefinition,\n locale: string,\n fallbackLocale = \"en-GB\"\n): string | undefined {\n return alert.localizedMessages[locale] ?? alert.localizedMessages[fallbackLocale];\n}\n\nexport function assessIdentityStatusOverlayDefinition(\n overlay: IdentityStatusOverlayDefinition\n): InterfaceContractAssessment {\n const violations: string[] = [];\n const perceivableFacts = new Set(overlay.perceivableFacts);\n\n if (overlay.readableFacts.some((fact) => !perceivableFacts.has(fact))) {\n violations.push(\"readableFacts\");\n }\n\n if (overlay.readConfidence === \"withheld\" && overlay.readableFacts.length > 0) {\n violations.push(\"withheldRead\");\n }\n\n if (overlay.targetKind === \"self\") {\n if (overlay.relation !== \"self\") {\n violations.push(\"selfRelation\");\n }\n if (overlay.invocation !== \"self-state\") {\n violations.push(\"selfInvocation\");\n }\n if (overlay.requiresLineOfSight) {\n violations.push(\"selfLineOfSight\");\n }\n } else {\n if (overlay.targetId.length === 0) {\n violations.push(\"targetId\");\n }\n if (!overlay.requiresLineOfSight) {\n violations.push(\"lineOfSight\");\n }\n }\n\n return Object.freeze({\n accepted: violations.length === 0,\n violations: Object.freeze(violations),\n });\n}\n\nexport function assessPlayerSystemInterfaceComposition(\n sample: WorldSpaceCompositionSample,\n contract: PlayerSystemInterfacePortabilityContract = defaultPlayerSystemInterfacePortabilityContract\n): InterfaceContractAssessment {\n const violations: string[] = [];\n\n if (sample.panelCount > contract.compositionScale.maxWorldPanels) {\n violations.push(\"panelCount\");\n }\n\n if (sample.focusPaneCount > contract.compositionScale.maxFocusPanes) {\n violations.push(\"focusPaneCount\");\n }\n\n if (sample.alertMarkerCount > contract.compositionScale.maxAlertMarkers) {\n violations.push(\"alertMarkerCount\");\n }\n\n if (\n sample.interactivePanelCount >\n contract.compositionScale.maxInteractivePanelsPerFrame\n ) {\n violations.push(\"interactivePanelCount\");\n }\n\n return Object.freeze({\n accepted: violations.length === 0,\n violations: Object.freeze(violations),\n });\n}\n\nexport function assessInterfaceShellDefinition(\n shell: InterfaceShellDefinition\n): InterfaceContractAssessment {\n const violations: string[] = [];\n const ownerSet = new Set(shell.surfaces.map((surface) => surface.owner));\n const retainedSurfaceKinds = new Set(shell.reducedCombat.retainedSurfaceKinds);\n const interactiveSurfaceCount = shell.surfaces.filter(\n (surface) => surface.interactive && retainedSurfaceKinds.has(surface.kind)\n ).length;\n const focusPane = shell.focusPane;\n\n if (shell.surfaces.length === 0) {\n violations.push(\"surfaces\");\n }\n\n if (focusPane && !ownerSet.has(focusPane.owner)) {\n violations.push(\"focusPaneOwner\");\n }\n\n if (focusPane) {\n const matchingSurface = shell.surfaces.find(\n (surface) =>\n surface.kind === \"focus-pane\" &&\n surface.anchorId === focusPane.anchorId &&\n surface.owner === focusPane.owner\n );\n if (!matchingSurface) {\n violations.push(\"focusPaneSurface\");\n }\n }\n\n if (\n interactiveSurfaceCount > shell.reducedCombat.maxInteractiveSurfaces\n ) {\n violations.push(\"interactiveSurfaceCount\");\n }\n\n for (const popup of shell.targetPopups) {\n if (popup.requiresLineOfSight && popup.anchorId.length === 0) {\n violations.push(`popup:${popup.popupId}`);\n }\n }\n\n for (const overlay of shell.identityOverlays) {\n const identityAssessment = assessIdentityStatusOverlayDefinition(overlay);\n for (const violation of identityAssessment.violations) {\n violations.push(`identityOverlay:${overlay.overlayId}:${violation}`);\n }\n\n const matchingSurface = shell.surfaces.find(\n (surface) =>\n surface.surfaceId === overlay.surfaceId &&\n surface.kind === \"identity-overlay\"\n );\n if (!matchingSurface) {\n violations.push(`identityOverlaySurface:${overlay.overlayId}`);\n }\n }\n\n for (const paneHost of shell.paneHosts) {\n const matchingSurface = shell.surfaces.find(\n (surface) =>\n surface.surfaceId === paneHost.surfaceId &&\n surface.owner === paneHost.owner &&\n surface.anchorId === paneHost.anchorId\n );\n if (!matchingSurface) {\n violations.push(`paneHost:${paneHost.hostId}`);\n }\n }\n\n for (const alert of shell.ambientAlerts) {\n if (Object.keys(alert.localizedMessages).length === 0) {\n violations.push(`alert:${alert.alertId}`);\n }\n }\n\n if (\n ownerSet.has(\"player-system\") &&\n ownerSet.has(\"party-system\") &&\n shell.reducedCombat.retainedSurfaceKinds.length === 0\n ) {\n violations.push(\"reducedCombat\");\n }\n\n return Object.freeze({\n accepted: violations.length === 0,\n violations: Object.freeze(violations),\n });\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export interface PackageDescriptor {\n readonly packageName: string;\n readonly featureFlagId: string;\n readonly envPrefix: string;\n readonly summary: string;\n}\n\nexport type OverlayKeyboardPath = \"sequential\" | \"direct-hotkey\" | \"read-only\";\n\nexport interface OverlayAccessibilityContract {\n readonly keyboardPath: OverlayKeyboardPath;\n readonly focusRestorationTarget: \"trigger\" | \"pane-heading\" | \"nearest-anchor\";\n readonly liveRegionMode: \"polite\" | \"assertive\" | \"off\";\n readonly requiresAccessibleName: boolean;\n}\n\nexport interface InterfaceFrameBudget {\n readonly targetFps: number;\n readonly maxFrameMs: number;\n readonly maxInteractivePanelsPerFrame: number;\n}\n\nexport type OverlayHostKind =\n | \"dom-overlay\"\n | \"native-overlay\"\n | \"headless-snapshot\";\n\nexport type OverlayAdapterCapability =\n | \"focus-restoration\"\n | \"live-region\"\n | \"anchor-registry\";\n\nexport interface OverlayHostAdapterContract {\n readonly supportedHosts: readonly OverlayHostKind[];\n readonly requiredCapabilities: readonly OverlayAdapterCapability[];\n readonly forbiddenAssumptions: readonly string[];\n}\n\nexport interface OverlayCompositionScaleContract {\n readonly maxWorldPanels: number;\n readonly maxFocusPanes: number;\n readonly maxAlertMarkers: number;\n readonly maxInteractivePanelsPerFrame: number;\n}\n\nexport interface PlayerSystemInterfaceContract {\n readonly featureFlagId: string;\n readonly accessibility: OverlayAccessibilityContract;\n readonly frameBudget: InterfaceFrameBudget;\n}\n\nexport interface PlayerSystemInterfacePortabilityContract {\n readonly featureFlagId: string;\n readonly hostAdapters: OverlayHostAdapterContract;\n readonly compositionScale: OverlayCompositionScaleContract;\n}\n\nexport interface PlayerSystemInterfaceContractInput {\n readonly featureFlagId?: string;\n readonly accessibility?: Partial<OverlayAccessibilityContract>;\n readonly frameBudget?: Partial<InterfaceFrameBudget>;\n}\n\nexport interface PlayerSystemInterfacePortabilityContractInput {\n readonly featureFlagId?: string;\n readonly hostAdapters?: Partial<OverlayHostAdapterContract>;\n readonly compositionScale?: Partial<OverlayCompositionScaleContract>;\n}\n\nexport type PlayerSystemInterfaceMode = \"ambient\" | \"focused\" | \"combat-safe\";\n\nexport type PlayerSystemPaneId =\n | \"identity\"\n | \"missions\"\n | \"guild-quests\"\n | \"logs\"\n | \"mcc\"\n | \"tutorial\"\n | \"points-store\";\n\nexport type InterfaceShellOwner = \"player-system\" | \"party-system\";\nexport type InterfaceShellSurfaceKind =\n | \"world-panel\"\n | \"focus-pane\"\n | \"target-popup\"\n | \"alert-marker\"\n | \"identity-overlay\";\nexport type InterfaceCombatBehavior = \"persist\" | \"reduce\" | \"suspend\";\n\nexport type IdentityProjectionRelation =\n | \"self\"\n | \"allied\"\n | \"neutral\"\n | \"unknown\"\n | \"unfriendly\";\nexport type IdentityProjectionInvocation =\n | \"self-state\"\n | \"identity-sweep\"\n | \"spell-targeting\";\nexport type IdentityProjectionReadConfidence =\n | \"complete\"\n | \"partial\"\n | \"fuzzy\"\n | \"withheld\";\nexport type IdentityProjectionPresentation = \"full\" | \"condensed\";\nexport type IdentityProjectionFact =\n | \"display-name\"\n | \"relation\"\n | \"health-band\"\n | \"status-summary\"\n | \"threat-band\"\n | \"targeting-affordance\";\n\nexport interface IdentityStatusOverlayBaseDefinition {\n readonly overlayId: string;\n readonly surfaceId: string;\n readonly readConfidence: IdentityProjectionReadConfidence;\n readonly perceivableFacts: readonly IdentityProjectionFact[];\n readonly readableFacts: readonly IdentityProjectionFact[];\n readonly presentation: IdentityProjectionPresentation;\n}\n\nexport interface IdentitySelfStateOverlayDefinition\n extends IdentityStatusOverlayBaseDefinition {\n readonly targetKind: \"self\";\n readonly relation: \"self\";\n readonly invocation: \"self-state\";\n readonly requiresLineOfSight: false;\n readonly targetId?: never;\n}\n\nexport interface IdentityTargetProjectionOverlayDefinition\n extends IdentityStatusOverlayBaseDefinition {\n readonly targetKind: \"external\";\n readonly targetId: string;\n readonly relation: Exclude<IdentityProjectionRelation, \"self\">;\n readonly invocation: Exclude<IdentityProjectionInvocation, \"self-state\">;\n readonly requiresLineOfSight: true;\n}\n\nexport type IdentityStatusOverlayDefinition =\n | IdentitySelfStateOverlayDefinition\n | IdentityTargetProjectionOverlayDefinition;\n\nexport interface InterfaceShellSurfaceDefinition {\n readonly surfaceId: string;\n readonly owner: InterfaceShellOwner;\n readonly kind: InterfaceShellSurfaceKind;\n readonly anchorId: string;\n readonly interactive: boolean;\n readonly priority: number;\n readonly combatBehavior: InterfaceCombatBehavior;\n}\n\nexport interface FocusPaneShellDefinition {\n readonly panelId: string;\n readonly owner: InterfaceShellOwner;\n readonly pane: PlayerSystemPaneId;\n readonly anchorId: string;\n readonly heading: string;\n readonly interactive: boolean;\n readonly combatBehavior: InterfaceCombatBehavior;\n}\n\nexport interface LineOfSightTargetPopupDefinition {\n readonly popupId: string;\n readonly owner: InterfaceShellOwner;\n readonly anchorId: string;\n readonly targetId: string;\n readonly summary: string;\n readonly requiresLineOfSight: boolean;\n readonly actionLabel?: string;\n}\n\nexport interface ReducedCombatOverlayPolicy {\n readonly featureFlagId: string;\n readonly mode: \"combat-safe\";\n readonly retainedSurfaceKinds: readonly InterfaceShellSurfaceKind[];\n readonly maxInteractiveSurfaces: number;\n}\n\nexport interface InterfaceShellDefinition {\n readonly featureFlagId: string;\n readonly surfaces: readonly InterfaceShellSurfaceDefinition[];\n readonly focusPane?: FocusPaneShellDefinition;\n readonly targetPopups: readonly LineOfSightTargetPopupDefinition[];\n readonly identityOverlays: readonly IdentityStatusOverlayDefinition[];\n readonly paneHosts: readonly ThreeDPaneHostDefinition[];\n readonly ambientAlerts: readonly LocalizedAmbientAlertDefinition[];\n readonly reducedCombat: ReducedCombatOverlayPolicy;\n}\n\nexport interface InterfaceShellDefinitionInput {\n readonly featureFlagId?: string;\n readonly surfaces?: readonly InterfaceShellSurfaceDefinition[];\n readonly focusPane?: FocusPaneShellDefinition;\n readonly targetPopups?: readonly LineOfSightTargetPopupDefinition[];\n readonly identityOverlays?: readonly IdentityStatusOverlayDefinition[];\n readonly paneHosts?: readonly ThreeDPaneHostDefinition[];\n readonly ambientAlerts?: readonly LocalizedAmbientAlertDefinition[];\n readonly reducedCombat?: Partial<ReducedCombatOverlayPolicy>;\n}\n\nexport type InterfaceFocusShiftReason =\n | \"keyboard\"\n | \"direct-hotkey\"\n | \"restore\"\n | \"system\";\n\nexport interface InterfaceFocusShift {\n readonly fromSurfaceId?: string;\n readonly toSurfaceId: string;\n readonly reason: InterfaceFocusShiftReason;\n}\n\nexport interface InterfaceShellStateDefinition {\n readonly featureFlagId: string;\n readonly mode: PlayerSystemInterfaceMode;\n readonly focusedSurfaceId?: string;\n readonly visibleSurfaceIds: readonly string[];\n readonly focusShift?: InterfaceFocusShift;\n}\n\nexport interface InterfaceShellStateInput {\n readonly mode: PlayerSystemInterfaceMode;\n readonly focusedSurfaceId?: string;\n}\n\nexport interface ThreeDPaneHostDefinition {\n readonly hostId: string;\n readonly owner: InterfaceShellOwner;\n readonly pane: PlayerSystemPaneId;\n readonly surfaceId: string;\n readonly anchorId: string;\n readonly supportedHosts: readonly OverlayHostKind[];\n}\n\nexport type AmbientAlertSeverity = \"info\" | \"warning\" | \"danger\";\n\nexport interface LocalizedAmbientAlertDefinition {\n readonly alertId: string;\n readonly owner: InterfaceShellOwner;\n readonly severity: AmbientAlertSeverity;\n readonly anchorId: string;\n readonly messageKey: string;\n readonly localizedMessages: Readonly<Record<string, string>>;\n readonly liveRegionMode: \"polite\" | \"assertive\";\n}\n\nexport interface WorldSpacePanelDefinition {\n readonly panelId: string;\n readonly pane: PlayerSystemPaneId;\n readonly anchorId: string;\n readonly interactive: boolean;\n readonly accessibilityLabel?: string;\n readonly focusOrder?: number;\n}\n\nexport interface OverlayAlertMarker {\n readonly markerId: string;\n readonly severity: AmbientAlertSeverity;\n readonly anchorId: string;\n}\n\nexport interface WorldSpaceCompositionSample {\n readonly panelCount: number;\n readonly focusPaneCount: number;\n readonly alertMarkerCount: number;\n readonly interactivePanelCount: number;\n}\n\nexport interface InterfaceContractAssessment {\n readonly accepted: boolean;\n readonly violations: readonly string[];\n}\n\nexport const PLAYER_SYSTEM_INTERFACE_PACKAGE = \"@plasius/player-system-interface\";\nexport const PLAYER_SYSTEM_INTERFACE_ENV_PREFIX = \"PLAYER_SYSTEM_INTERFACE\";\nexport const PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID =\n \"harmony.player-system.interface.enabled\";\nexport const PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID =\n PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;\nexport const PLAYER_SYSTEM_RUNTIME_NFR_FEATURE_FLAG_ID =\n PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;\nexport const PLAYER_SYSTEM_RUNTIME_PORTABILITY_FEATURE_FLAG_ID =\n PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;\nexport const PLAYER_SYSTEM_IDENTITY_FEATURE_FLAG_ID =\n \"harmony.player-system.identity.enabled\";\n\nexport const packageDescriptor: PackageDescriptor = Object.freeze({\n packageName: PLAYER_SYSTEM_INTERFACE_PACKAGE,\n featureFlagId: PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID,\n envPrefix: PLAYER_SYSTEM_INTERFACE_ENV_PREFIX,\n summary:\n \"World-space Player System overlays, focus panes, and target-surface contracts for Plasius game experiences.\",\n});\n\nexport const defaultPlayerSystemInterfaceContract: PlayerSystemInterfaceContract =\n Object.freeze({\n featureFlagId: PLAYER_SYSTEM_RUNTIME_NFR_FEATURE_FLAG_ID,\n accessibility: Object.freeze({\n keyboardPath: \"sequential\",\n focusRestorationTarget: \"trigger\",\n liveRegionMode: \"polite\",\n requiresAccessibleName: true,\n }),\n frameBudget: Object.freeze({\n targetFps: 60,\n maxFrameMs: 16,\n maxInteractivePanelsPerFrame: 2,\n }),\n });\n\nexport const defaultPlayerSystemInterfacePortabilityContract: PlayerSystemInterfacePortabilityContract =\n Object.freeze({\n featureFlagId: PLAYER_SYSTEM_RUNTIME_PORTABILITY_FEATURE_FLAG_ID,\n hostAdapters: Object.freeze({\n supportedHosts: Object.freeze([\n \"dom-overlay\",\n \"native-overlay\",\n \"headless-snapshot\",\n ] satisfies OverlayHostKind[]),\n requiredCapabilities: Object.freeze([\n \"focus-restoration\",\n \"live-region\",\n \"anchor-registry\",\n ] satisfies OverlayAdapterCapability[]),\n forbiddenAssumptions: Object.freeze([\n \"window-global\",\n \"single-pane-layout\",\n \"absolute-scene-coordinates\",\n ]),\n }),\n compositionScale: Object.freeze({\n maxWorldPanels: 6,\n maxFocusPanes: 3,\n maxAlertMarkers: 8,\n maxInteractivePanelsPerFrame: 2,\n }),\n });\n\nexport const defaultReducedCombatOverlayPolicy: ReducedCombatOverlayPolicy =\n Object.freeze({\n featureFlagId: PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID,\n mode: \"combat-safe\",\n retainedSurfaceKinds: Object.freeze([\n \"alert-marker\",\n \"target-popup\",\n \"focus-pane\",\n \"identity-overlay\",\n ] satisfies InterfaceShellSurfaceKind[]),\n maxInteractiveSurfaces: 1,\n });\n\nexport function isPlayerSystemInterfaceMode(\n value: string\n): value is PlayerSystemInterfaceMode {\n return value === \"ambient\" || value === \"focused\" || value === \"combat-safe\";\n}\n\nexport function createWorldSpacePanelDefinition(\n input: WorldSpacePanelDefinition\n): WorldSpacePanelDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createPlayerSystemInterfaceContract(\n input: PlayerSystemInterfaceContractInput = {}\n): PlayerSystemInterfaceContract {\n return Object.freeze({\n featureFlagId:\n input.featureFlagId ?? defaultPlayerSystemInterfaceContract.featureFlagId,\n accessibility: Object.freeze({\n ...defaultPlayerSystemInterfaceContract.accessibility,\n ...input.accessibility,\n }),\n frameBudget: Object.freeze({\n ...defaultPlayerSystemInterfaceContract.frameBudget,\n ...input.frameBudget,\n }),\n });\n}\n\nexport function createPlayerSystemInterfacePortabilityContract(\n input: PlayerSystemInterfacePortabilityContractInput = {}\n): PlayerSystemInterfacePortabilityContract {\n return Object.freeze({\n featureFlagId:\n input.featureFlagId ??\n defaultPlayerSystemInterfacePortabilityContract.featureFlagId,\n hostAdapters: Object.freeze({\n ...defaultPlayerSystemInterfacePortabilityContract.hostAdapters,\n ...input.hostAdapters,\n supportedHosts: Object.freeze([\n ...(input.hostAdapters?.supportedHosts ??\n defaultPlayerSystemInterfacePortabilityContract.hostAdapters\n .supportedHosts),\n ]),\n requiredCapabilities: Object.freeze([\n ...(input.hostAdapters?.requiredCapabilities ??\n defaultPlayerSystemInterfacePortabilityContract.hostAdapters\n .requiredCapabilities),\n ]),\n forbiddenAssumptions: Object.freeze([\n ...(input.hostAdapters?.forbiddenAssumptions ??\n defaultPlayerSystemInterfacePortabilityContract.hostAdapters\n .forbiddenAssumptions),\n ]),\n }),\n compositionScale: Object.freeze({\n ...defaultPlayerSystemInterfacePortabilityContract.compositionScale,\n ...input.compositionScale,\n }),\n });\n}\n\nexport function createInterfaceShellSurfaceDefinition(\n input: InterfaceShellSurfaceDefinition\n): InterfaceShellSurfaceDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createFocusPaneShellDefinition(\n input: FocusPaneShellDefinition\n): FocusPaneShellDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createLineOfSightTargetPopupDefinition(\n input: LineOfSightTargetPopupDefinition\n): LineOfSightTargetPopupDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createIdentityStatusOverlayDefinition(\n input: IdentityStatusOverlayDefinition\n): IdentityStatusOverlayDefinition {\n return Object.freeze({\n ...input,\n perceivableFacts: Object.freeze([...input.perceivableFacts]),\n readableFacts: Object.freeze([...input.readableFacts]),\n });\n}\n\nexport function createThreeDPaneHostDefinition(\n input: ThreeDPaneHostDefinition\n): ThreeDPaneHostDefinition {\n return Object.freeze({\n ...input,\n supportedHosts: Object.freeze([...input.supportedHosts]),\n });\n}\n\nexport function createLocalizedAmbientAlertDefinition(\n input: LocalizedAmbientAlertDefinition\n): LocalizedAmbientAlertDefinition {\n return Object.freeze({\n ...input,\n localizedMessages: Object.freeze({ ...input.localizedMessages }),\n });\n}\n\nexport function createInterfaceShellDefinition(\n input: InterfaceShellDefinitionInput = {}\n): InterfaceShellDefinition {\n return Object.freeze({\n featureFlagId: input.featureFlagId ?? PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID,\n surfaces: Object.freeze([...(input.surfaces ?? [])]),\n focusPane: input.focusPane ? Object.freeze({ ...input.focusPane }) : undefined,\n targetPopups: Object.freeze([...(input.targetPopups ?? [])]),\n identityOverlays: Object.freeze([...(input.identityOverlays ?? [])]),\n paneHosts: Object.freeze([...(input.paneHosts ?? [])]),\n ambientAlerts: Object.freeze([...(input.ambientAlerts ?? [])]),\n reducedCombat: Object.freeze({\n ...defaultReducedCombatOverlayPolicy,\n ...input.reducedCombat,\n retainedSurfaceKinds: Object.freeze([\n ...(input.reducedCombat?.retainedSurfaceKinds ??\n defaultReducedCombatOverlayPolicy.retainedSurfaceKinds),\n ]),\n }),\n });\n}\n\nexport function createInterfaceShellState(\n shell: InterfaceShellDefinition,\n input: InterfaceShellStateInput\n): InterfaceShellStateDefinition {\n const retainedSurfaceKinds = new Set(\n shell.reducedCombat.retainedSurfaceKinds\n );\n const visibleSurfaceIds = shell.surfaces\n .filter(\n (surface) =>\n input.mode !== \"combat-safe\" ||\n (surface.combatBehavior !== \"suspend\" &&\n retainedSurfaceKinds.has(surface.kind))\n )\n .map((surface) => surface.surfaceId);\n\n if (\n input.focusedSurfaceId &&\n !visibleSurfaceIds.includes(input.focusedSurfaceId)\n ) {\n throw new RangeError(\n `Focused surface '${input.focusedSurfaceId}' is not visible in ${input.mode} mode`\n );\n }\n\n return Object.freeze({\n featureFlagId: shell.featureFlagId,\n mode: input.mode,\n focusedSurfaceId:\n input.mode === \"focused\" ? input.focusedSurfaceId : undefined,\n visibleSurfaceIds: Object.freeze(visibleSurfaceIds),\n });\n}\n\nexport function applyInterfaceShellFocusShift(\n state: InterfaceShellStateDefinition,\n focusShift: InterfaceFocusShift\n): InterfaceShellStateDefinition {\n if (!state.visibleSurfaceIds.includes(focusShift.toSurfaceId)) {\n throw new RangeError(\n `Focused surface '${focusShift.toSurfaceId}' is not visible in ${state.mode} mode`\n );\n }\n\n return Object.freeze({\n ...state,\n mode: \"focused\",\n focusedSurfaceId: focusShift.toSurfaceId,\n focusShift: Object.freeze({ ...focusShift }),\n });\n}\n\nexport function resolveLocalizedAmbientAlertMessage(\n alert: LocalizedAmbientAlertDefinition,\n locale: string,\n fallbackLocale = \"en-GB\"\n): string | undefined {\n return alert.localizedMessages[locale] ?? alert.localizedMessages[fallbackLocale];\n}\n\nexport function assessIdentityStatusOverlayDefinition(\n overlay: IdentityStatusOverlayDefinition\n): InterfaceContractAssessment {\n const violations: string[] = [];\n const perceivableFacts = new Set(overlay.perceivableFacts);\n\n if (overlay.readableFacts.some((fact) => !perceivableFacts.has(fact))) {\n violations.push(\"readableFacts\");\n }\n\n if (overlay.readConfidence === \"withheld\" && overlay.readableFacts.length > 0) {\n violations.push(\"withheldRead\");\n }\n\n if (overlay.targetKind === \"self\") {\n if (overlay.relation !== \"self\") {\n violations.push(\"selfRelation\");\n }\n if (overlay.invocation !== \"self-state\") {\n violations.push(\"selfInvocation\");\n }\n if (overlay.requiresLineOfSight) {\n violations.push(\"selfLineOfSight\");\n }\n } else {\n if (overlay.targetId.length === 0) {\n violations.push(\"targetId\");\n }\n if (!overlay.requiresLineOfSight) {\n violations.push(\"lineOfSight\");\n }\n }\n\n return Object.freeze({\n accepted: violations.length === 0,\n violations: Object.freeze(violations),\n });\n}\n\nexport function assessPlayerSystemInterfaceComposition(\n sample: WorldSpaceCompositionSample,\n contract: PlayerSystemInterfacePortabilityContract = defaultPlayerSystemInterfacePortabilityContract\n): InterfaceContractAssessment {\n const violations: string[] = [];\n\n if (sample.panelCount > contract.compositionScale.maxWorldPanels) {\n violations.push(\"panelCount\");\n }\n\n if (sample.focusPaneCount > contract.compositionScale.maxFocusPanes) {\n violations.push(\"focusPaneCount\");\n }\n\n if (sample.alertMarkerCount > contract.compositionScale.maxAlertMarkers) {\n violations.push(\"alertMarkerCount\");\n }\n\n if (\n sample.interactivePanelCount >\n contract.compositionScale.maxInteractivePanelsPerFrame\n ) {\n violations.push(\"interactivePanelCount\");\n }\n\n return Object.freeze({\n accepted: violations.length === 0,\n violations: Object.freeze(violations),\n });\n}\n\nexport function assessInterfaceShellDefinition(\n shell: InterfaceShellDefinition\n): InterfaceContractAssessment {\n const violations: string[] = [];\n const ownerSet = new Set(shell.surfaces.map((surface) => surface.owner));\n const retainedSurfaceKinds = new Set(shell.reducedCombat.retainedSurfaceKinds);\n const interactiveSurfaceCount = shell.surfaces.filter(\n (surface) => surface.interactive && retainedSurfaceKinds.has(surface.kind)\n ).length;\n const focusPane = shell.focusPane;\n\n if (shell.surfaces.length === 0) {\n violations.push(\"surfaces\");\n }\n\n if (focusPane && !ownerSet.has(focusPane.owner)) {\n violations.push(\"focusPaneOwner\");\n }\n\n if (focusPane) {\n const matchingSurface = shell.surfaces.find(\n (surface) =>\n surface.kind === \"focus-pane\" &&\n surface.anchorId === focusPane.anchorId &&\n surface.owner === focusPane.owner\n );\n if (!matchingSurface) {\n violations.push(\"focusPaneSurface\");\n }\n }\n\n if (\n interactiveSurfaceCount > shell.reducedCombat.maxInteractiveSurfaces\n ) {\n violations.push(\"interactiveSurfaceCount\");\n }\n\n for (const popup of shell.targetPopups) {\n if (popup.requiresLineOfSight && popup.anchorId.length === 0) {\n violations.push(`popup:${popup.popupId}`);\n }\n }\n\n for (const overlay of shell.identityOverlays) {\n const identityAssessment = assessIdentityStatusOverlayDefinition(overlay);\n for (const violation of identityAssessment.violations) {\n violations.push(`identityOverlay:${overlay.overlayId}:${violation}`);\n }\n\n const matchingSurface = shell.surfaces.find(\n (surface) =>\n surface.surfaceId === overlay.surfaceId &&\n surface.kind === \"identity-overlay\"\n );\n if (!matchingSurface) {\n violations.push(`identityOverlaySurface:${overlay.overlayId}`);\n }\n }\n\n for (const paneHost of shell.paneHosts) {\n const matchingSurface = shell.surfaces.find(\n (surface) =>\n surface.surfaceId === paneHost.surfaceId &&\n surface.owner === paneHost.owner &&\n surface.anchorId === paneHost.anchorId\n );\n if (!matchingSurface) {\n violations.push(`paneHost:${paneHost.hostId}`);\n }\n }\n\n for (const alert of shell.ambientAlerts) {\n if (Object.keys(alert.localizedMessages).length === 0) {\n violations.push(`alert:${alert.alertId}`);\n }\n }\n\n if (\n ownerSet.has(\"player-system\") &&\n ownerSet.has(\"party-system\") &&\n shell.reducedCombat.retainedSurfaceKinds.length === 0\n ) {\n violations.push(\"reducedCombat\");\n }\n\n return Object.freeze({\n accepted: violations.length === 0,\n violations: Object.freeze(violations),\n });\n}\n"],"mappings":"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","names":[]}
package/dist/index.d.cts CHANGED
@@ -195,11 +195,11 @@ interface InterfaceContractAssessment {
195
195
  }
196
196
  declare const PLAYER_SYSTEM_INTERFACE_PACKAGE = "@plasius/player-system-interface";
197
197
  declare const PLAYER_SYSTEM_INTERFACE_ENV_PREFIX = "PLAYER_SYSTEM_INTERFACE";
198
- declare const PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID = "isekai.player-system.interface.enabled";
199
- declare const PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID = "isekai.player-system.interface.enabled";
200
- declare const PLAYER_SYSTEM_RUNTIME_NFR_FEATURE_FLAG_ID = "isekai.player-system.interface.enabled";
201
- declare const PLAYER_SYSTEM_RUNTIME_PORTABILITY_FEATURE_FLAG_ID = "isekai.player-system.interface.enabled";
202
- declare const PLAYER_SYSTEM_IDENTITY_FEATURE_FLAG_ID = "isekai.player-system.identity.enabled";
198
+ declare const PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID = "harmony.player-system.interface.enabled";
199
+ declare const PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID = "harmony.player-system.interface.enabled";
200
+ declare const PLAYER_SYSTEM_RUNTIME_NFR_FEATURE_FLAG_ID = "harmony.player-system.interface.enabled";
201
+ declare const PLAYER_SYSTEM_RUNTIME_PORTABILITY_FEATURE_FLAG_ID = "harmony.player-system.interface.enabled";
202
+ declare const PLAYER_SYSTEM_IDENTITY_FEATURE_FLAG_ID = "harmony.player-system.identity.enabled";
203
203
  declare const packageDescriptor: PackageDescriptor;
204
204
  declare const defaultPlayerSystemInterfaceContract: PlayerSystemInterfaceContract;
205
205
  declare const defaultPlayerSystemInterfacePortabilityContract: PlayerSystemInterfacePortabilityContract;
package/dist/index.d.ts CHANGED
@@ -195,11 +195,11 @@ interface InterfaceContractAssessment {
195
195
  }
196
196
  declare const PLAYER_SYSTEM_INTERFACE_PACKAGE = "@plasius/player-system-interface";
197
197
  declare const PLAYER_SYSTEM_INTERFACE_ENV_PREFIX = "PLAYER_SYSTEM_INTERFACE";
198
- declare const PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID = "isekai.player-system.interface.enabled";
199
- declare const PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID = "isekai.player-system.interface.enabled";
200
- declare const PLAYER_SYSTEM_RUNTIME_NFR_FEATURE_FLAG_ID = "isekai.player-system.interface.enabled";
201
- declare const PLAYER_SYSTEM_RUNTIME_PORTABILITY_FEATURE_FLAG_ID = "isekai.player-system.interface.enabled";
202
- declare const PLAYER_SYSTEM_IDENTITY_FEATURE_FLAG_ID = "isekai.player-system.identity.enabled";
198
+ declare const PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID = "harmony.player-system.interface.enabled";
199
+ declare const PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID = "harmony.player-system.interface.enabled";
200
+ declare const PLAYER_SYSTEM_RUNTIME_NFR_FEATURE_FLAG_ID = "harmony.player-system.interface.enabled";
201
+ declare const PLAYER_SYSTEM_RUNTIME_PORTABILITY_FEATURE_FLAG_ID = "harmony.player-system.interface.enabled";
202
+ declare const PLAYER_SYSTEM_IDENTITY_FEATURE_FLAG_ID = "harmony.player-system.identity.enabled";
203
203
  declare const packageDescriptor: PackageDescriptor;
204
204
  declare const defaultPlayerSystemInterfaceContract: PlayerSystemInterfaceContract;
205
205
  declare const defaultPlayerSystemInterfacePortabilityContract: PlayerSystemInterfacePortabilityContract;
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  // src/index.ts
2
2
  var PLAYER_SYSTEM_INTERFACE_PACKAGE = "@plasius/player-system-interface";
3
3
  var PLAYER_SYSTEM_INTERFACE_ENV_PREFIX = "PLAYER_SYSTEM_INTERFACE";
4
- var PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID = "isekai.player-system.interface.enabled";
4
+ var PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID = "harmony.player-system.interface.enabled";
5
5
  var PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID = PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;
6
6
  var PLAYER_SYSTEM_RUNTIME_NFR_FEATURE_FLAG_ID = PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;
7
7
  var PLAYER_SYSTEM_RUNTIME_PORTABILITY_FEATURE_FLAG_ID = PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;
8
- var PLAYER_SYSTEM_IDENTITY_FEATURE_FLAG_ID = "isekai.player-system.identity.enabled";
8
+ var PLAYER_SYSTEM_IDENTITY_FEATURE_FLAG_ID = "harmony.player-system.identity.enabled";
9
9
  var packageDescriptor = Object.freeze({
10
10
  packageName: PLAYER_SYSTEM_INTERFACE_PACKAGE,
11
11
  featureFlagId: PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export interface PackageDescriptor {\n readonly packageName: string;\n readonly featureFlagId: string;\n readonly envPrefix: string;\n readonly summary: string;\n}\n\nexport type OverlayKeyboardPath = \"sequential\" | \"direct-hotkey\" | \"read-only\";\n\nexport interface OverlayAccessibilityContract {\n readonly keyboardPath: OverlayKeyboardPath;\n readonly focusRestorationTarget: \"trigger\" | \"pane-heading\" | \"nearest-anchor\";\n readonly liveRegionMode: \"polite\" | \"assertive\" | \"off\";\n readonly requiresAccessibleName: boolean;\n}\n\nexport interface InterfaceFrameBudget {\n readonly targetFps: number;\n readonly maxFrameMs: number;\n readonly maxInteractivePanelsPerFrame: number;\n}\n\nexport type OverlayHostKind =\n | \"dom-overlay\"\n | \"native-overlay\"\n | \"headless-snapshot\";\n\nexport type OverlayAdapterCapability =\n | \"focus-restoration\"\n | \"live-region\"\n | \"anchor-registry\";\n\nexport interface OverlayHostAdapterContract {\n readonly supportedHosts: readonly OverlayHostKind[];\n readonly requiredCapabilities: readonly OverlayAdapterCapability[];\n readonly forbiddenAssumptions: readonly string[];\n}\n\nexport interface OverlayCompositionScaleContract {\n readonly maxWorldPanels: number;\n readonly maxFocusPanes: number;\n readonly maxAlertMarkers: number;\n readonly maxInteractivePanelsPerFrame: number;\n}\n\nexport interface PlayerSystemInterfaceContract {\n readonly featureFlagId: string;\n readonly accessibility: OverlayAccessibilityContract;\n readonly frameBudget: InterfaceFrameBudget;\n}\n\nexport interface PlayerSystemInterfacePortabilityContract {\n readonly featureFlagId: string;\n readonly hostAdapters: OverlayHostAdapterContract;\n readonly compositionScale: OverlayCompositionScaleContract;\n}\n\nexport interface PlayerSystemInterfaceContractInput {\n readonly featureFlagId?: string;\n readonly accessibility?: Partial<OverlayAccessibilityContract>;\n readonly frameBudget?: Partial<InterfaceFrameBudget>;\n}\n\nexport interface PlayerSystemInterfacePortabilityContractInput {\n readonly featureFlagId?: string;\n readonly hostAdapters?: Partial<OverlayHostAdapterContract>;\n readonly compositionScale?: Partial<OverlayCompositionScaleContract>;\n}\n\nexport type PlayerSystemInterfaceMode = \"ambient\" | \"focused\" | \"combat-safe\";\n\nexport type PlayerSystemPaneId =\n | \"identity\"\n | \"missions\"\n | \"guild-quests\"\n | \"logs\"\n | \"mcc\"\n | \"tutorial\"\n | \"points-store\";\n\nexport type InterfaceShellOwner = \"player-system\" | \"party-system\";\nexport type InterfaceShellSurfaceKind =\n | \"world-panel\"\n | \"focus-pane\"\n | \"target-popup\"\n | \"alert-marker\"\n | \"identity-overlay\";\nexport type InterfaceCombatBehavior = \"persist\" | \"reduce\" | \"suspend\";\n\nexport type IdentityProjectionRelation =\n | \"self\"\n | \"allied\"\n | \"neutral\"\n | \"unknown\"\n | \"unfriendly\";\nexport type IdentityProjectionInvocation =\n | \"self-state\"\n | \"identity-sweep\"\n | \"spell-targeting\";\nexport type IdentityProjectionReadConfidence =\n | \"complete\"\n | \"partial\"\n | \"fuzzy\"\n | \"withheld\";\nexport type IdentityProjectionPresentation = \"full\" | \"condensed\";\nexport type IdentityProjectionFact =\n | \"display-name\"\n | \"relation\"\n | \"health-band\"\n | \"status-summary\"\n | \"threat-band\"\n | \"targeting-affordance\";\n\nexport interface IdentityStatusOverlayBaseDefinition {\n readonly overlayId: string;\n readonly surfaceId: string;\n readonly readConfidence: IdentityProjectionReadConfidence;\n readonly perceivableFacts: readonly IdentityProjectionFact[];\n readonly readableFacts: readonly IdentityProjectionFact[];\n readonly presentation: IdentityProjectionPresentation;\n}\n\nexport interface IdentitySelfStateOverlayDefinition\n extends IdentityStatusOverlayBaseDefinition {\n readonly targetKind: \"self\";\n readonly relation: \"self\";\n readonly invocation: \"self-state\";\n readonly requiresLineOfSight: false;\n readonly targetId?: never;\n}\n\nexport interface IdentityTargetProjectionOverlayDefinition\n extends IdentityStatusOverlayBaseDefinition {\n readonly targetKind: \"external\";\n readonly targetId: string;\n readonly relation: Exclude<IdentityProjectionRelation, \"self\">;\n readonly invocation: Exclude<IdentityProjectionInvocation, \"self-state\">;\n readonly requiresLineOfSight: true;\n}\n\nexport type IdentityStatusOverlayDefinition =\n | IdentitySelfStateOverlayDefinition\n | IdentityTargetProjectionOverlayDefinition;\n\nexport interface InterfaceShellSurfaceDefinition {\n readonly surfaceId: string;\n readonly owner: InterfaceShellOwner;\n readonly kind: InterfaceShellSurfaceKind;\n readonly anchorId: string;\n readonly interactive: boolean;\n readonly priority: number;\n readonly combatBehavior: InterfaceCombatBehavior;\n}\n\nexport interface FocusPaneShellDefinition {\n readonly panelId: string;\n readonly owner: InterfaceShellOwner;\n readonly pane: PlayerSystemPaneId;\n readonly anchorId: string;\n readonly heading: string;\n readonly interactive: boolean;\n readonly combatBehavior: InterfaceCombatBehavior;\n}\n\nexport interface LineOfSightTargetPopupDefinition {\n readonly popupId: string;\n readonly owner: InterfaceShellOwner;\n readonly anchorId: string;\n readonly targetId: string;\n readonly summary: string;\n readonly requiresLineOfSight: boolean;\n readonly actionLabel?: string;\n}\n\nexport interface ReducedCombatOverlayPolicy {\n readonly featureFlagId: string;\n readonly mode: \"combat-safe\";\n readonly retainedSurfaceKinds: readonly InterfaceShellSurfaceKind[];\n readonly maxInteractiveSurfaces: number;\n}\n\nexport interface InterfaceShellDefinition {\n readonly featureFlagId: string;\n readonly surfaces: readonly InterfaceShellSurfaceDefinition[];\n readonly focusPane?: FocusPaneShellDefinition;\n readonly targetPopups: readonly LineOfSightTargetPopupDefinition[];\n readonly identityOverlays: readonly IdentityStatusOverlayDefinition[];\n readonly paneHosts: readonly ThreeDPaneHostDefinition[];\n readonly ambientAlerts: readonly LocalizedAmbientAlertDefinition[];\n readonly reducedCombat: ReducedCombatOverlayPolicy;\n}\n\nexport interface InterfaceShellDefinitionInput {\n readonly featureFlagId?: string;\n readonly surfaces?: readonly InterfaceShellSurfaceDefinition[];\n readonly focusPane?: FocusPaneShellDefinition;\n readonly targetPopups?: readonly LineOfSightTargetPopupDefinition[];\n readonly identityOverlays?: readonly IdentityStatusOverlayDefinition[];\n readonly paneHosts?: readonly ThreeDPaneHostDefinition[];\n readonly ambientAlerts?: readonly LocalizedAmbientAlertDefinition[];\n readonly reducedCombat?: Partial<ReducedCombatOverlayPolicy>;\n}\n\nexport type InterfaceFocusShiftReason =\n | \"keyboard\"\n | \"direct-hotkey\"\n | \"restore\"\n | \"system\";\n\nexport interface InterfaceFocusShift {\n readonly fromSurfaceId?: string;\n readonly toSurfaceId: string;\n readonly reason: InterfaceFocusShiftReason;\n}\n\nexport interface InterfaceShellStateDefinition {\n readonly featureFlagId: string;\n readonly mode: PlayerSystemInterfaceMode;\n readonly focusedSurfaceId?: string;\n readonly visibleSurfaceIds: readonly string[];\n readonly focusShift?: InterfaceFocusShift;\n}\n\nexport interface InterfaceShellStateInput {\n readonly mode: PlayerSystemInterfaceMode;\n readonly focusedSurfaceId?: string;\n}\n\nexport interface ThreeDPaneHostDefinition {\n readonly hostId: string;\n readonly owner: InterfaceShellOwner;\n readonly pane: PlayerSystemPaneId;\n readonly surfaceId: string;\n readonly anchorId: string;\n readonly supportedHosts: readonly OverlayHostKind[];\n}\n\nexport type AmbientAlertSeverity = \"info\" | \"warning\" | \"danger\";\n\nexport interface LocalizedAmbientAlertDefinition {\n readonly alertId: string;\n readonly owner: InterfaceShellOwner;\n readonly severity: AmbientAlertSeverity;\n readonly anchorId: string;\n readonly messageKey: string;\n readonly localizedMessages: Readonly<Record<string, string>>;\n readonly liveRegionMode: \"polite\" | \"assertive\";\n}\n\nexport interface WorldSpacePanelDefinition {\n readonly panelId: string;\n readonly pane: PlayerSystemPaneId;\n readonly anchorId: string;\n readonly interactive: boolean;\n readonly accessibilityLabel?: string;\n readonly focusOrder?: number;\n}\n\nexport interface OverlayAlertMarker {\n readonly markerId: string;\n readonly severity: AmbientAlertSeverity;\n readonly anchorId: string;\n}\n\nexport interface WorldSpaceCompositionSample {\n readonly panelCount: number;\n readonly focusPaneCount: number;\n readonly alertMarkerCount: number;\n readonly interactivePanelCount: number;\n}\n\nexport interface InterfaceContractAssessment {\n readonly accepted: boolean;\n readonly violations: readonly string[];\n}\n\nexport const PLAYER_SYSTEM_INTERFACE_PACKAGE = \"@plasius/player-system-interface\";\nexport const PLAYER_SYSTEM_INTERFACE_ENV_PREFIX = \"PLAYER_SYSTEM_INTERFACE\";\nexport const PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID =\n \"isekai.player-system.interface.enabled\";\nexport const PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID =\n PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;\nexport const PLAYER_SYSTEM_RUNTIME_NFR_FEATURE_FLAG_ID =\n PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;\nexport const PLAYER_SYSTEM_RUNTIME_PORTABILITY_FEATURE_FLAG_ID =\n PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;\nexport const PLAYER_SYSTEM_IDENTITY_FEATURE_FLAG_ID =\n \"isekai.player-system.identity.enabled\";\n\nexport const packageDescriptor: PackageDescriptor = Object.freeze({\n packageName: PLAYER_SYSTEM_INTERFACE_PACKAGE,\n featureFlagId: PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID,\n envPrefix: PLAYER_SYSTEM_INTERFACE_ENV_PREFIX,\n summary:\n \"World-space Player System overlays, focus panes, and target-surface contracts for Plasius game experiences.\",\n});\n\nexport const defaultPlayerSystemInterfaceContract: PlayerSystemInterfaceContract =\n Object.freeze({\n featureFlagId: PLAYER_SYSTEM_RUNTIME_NFR_FEATURE_FLAG_ID,\n accessibility: Object.freeze({\n keyboardPath: \"sequential\",\n focusRestorationTarget: \"trigger\",\n liveRegionMode: \"polite\",\n requiresAccessibleName: true,\n }),\n frameBudget: Object.freeze({\n targetFps: 60,\n maxFrameMs: 16,\n maxInteractivePanelsPerFrame: 2,\n }),\n });\n\nexport const defaultPlayerSystemInterfacePortabilityContract: PlayerSystemInterfacePortabilityContract =\n Object.freeze({\n featureFlagId: PLAYER_SYSTEM_RUNTIME_PORTABILITY_FEATURE_FLAG_ID,\n hostAdapters: Object.freeze({\n supportedHosts: Object.freeze([\n \"dom-overlay\",\n \"native-overlay\",\n \"headless-snapshot\",\n ] satisfies OverlayHostKind[]),\n requiredCapabilities: Object.freeze([\n \"focus-restoration\",\n \"live-region\",\n \"anchor-registry\",\n ] satisfies OverlayAdapterCapability[]),\n forbiddenAssumptions: Object.freeze([\n \"window-global\",\n \"single-pane-layout\",\n \"absolute-scene-coordinates\",\n ]),\n }),\n compositionScale: Object.freeze({\n maxWorldPanels: 6,\n maxFocusPanes: 3,\n maxAlertMarkers: 8,\n maxInteractivePanelsPerFrame: 2,\n }),\n });\n\nexport const defaultReducedCombatOverlayPolicy: ReducedCombatOverlayPolicy =\n Object.freeze({\n featureFlagId: PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID,\n mode: \"combat-safe\",\n retainedSurfaceKinds: Object.freeze([\n \"alert-marker\",\n \"target-popup\",\n \"focus-pane\",\n \"identity-overlay\",\n ] satisfies InterfaceShellSurfaceKind[]),\n maxInteractiveSurfaces: 1,\n });\n\nexport function isPlayerSystemInterfaceMode(\n value: string\n): value is PlayerSystemInterfaceMode {\n return value === \"ambient\" || value === \"focused\" || value === \"combat-safe\";\n}\n\nexport function createWorldSpacePanelDefinition(\n input: WorldSpacePanelDefinition\n): WorldSpacePanelDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createPlayerSystemInterfaceContract(\n input: PlayerSystemInterfaceContractInput = {}\n): PlayerSystemInterfaceContract {\n return Object.freeze({\n featureFlagId:\n input.featureFlagId ?? defaultPlayerSystemInterfaceContract.featureFlagId,\n accessibility: Object.freeze({\n ...defaultPlayerSystemInterfaceContract.accessibility,\n ...input.accessibility,\n }),\n frameBudget: Object.freeze({\n ...defaultPlayerSystemInterfaceContract.frameBudget,\n ...input.frameBudget,\n }),\n });\n}\n\nexport function createPlayerSystemInterfacePortabilityContract(\n input: PlayerSystemInterfacePortabilityContractInput = {}\n): PlayerSystemInterfacePortabilityContract {\n return Object.freeze({\n featureFlagId:\n input.featureFlagId ??\n defaultPlayerSystemInterfacePortabilityContract.featureFlagId,\n hostAdapters: Object.freeze({\n ...defaultPlayerSystemInterfacePortabilityContract.hostAdapters,\n ...input.hostAdapters,\n supportedHosts: Object.freeze([\n ...(input.hostAdapters?.supportedHosts ??\n defaultPlayerSystemInterfacePortabilityContract.hostAdapters\n .supportedHosts),\n ]),\n requiredCapabilities: Object.freeze([\n ...(input.hostAdapters?.requiredCapabilities ??\n defaultPlayerSystemInterfacePortabilityContract.hostAdapters\n .requiredCapabilities),\n ]),\n forbiddenAssumptions: Object.freeze([\n ...(input.hostAdapters?.forbiddenAssumptions ??\n defaultPlayerSystemInterfacePortabilityContract.hostAdapters\n .forbiddenAssumptions),\n ]),\n }),\n compositionScale: Object.freeze({\n ...defaultPlayerSystemInterfacePortabilityContract.compositionScale,\n ...input.compositionScale,\n }),\n });\n}\n\nexport function createInterfaceShellSurfaceDefinition(\n input: InterfaceShellSurfaceDefinition\n): InterfaceShellSurfaceDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createFocusPaneShellDefinition(\n input: FocusPaneShellDefinition\n): FocusPaneShellDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createLineOfSightTargetPopupDefinition(\n input: LineOfSightTargetPopupDefinition\n): LineOfSightTargetPopupDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createIdentityStatusOverlayDefinition(\n input: IdentityStatusOverlayDefinition\n): IdentityStatusOverlayDefinition {\n return Object.freeze({\n ...input,\n perceivableFacts: Object.freeze([...input.perceivableFacts]),\n readableFacts: Object.freeze([...input.readableFacts]),\n });\n}\n\nexport function createThreeDPaneHostDefinition(\n input: ThreeDPaneHostDefinition\n): ThreeDPaneHostDefinition {\n return Object.freeze({\n ...input,\n supportedHosts: Object.freeze([...input.supportedHosts]),\n });\n}\n\nexport function createLocalizedAmbientAlertDefinition(\n input: LocalizedAmbientAlertDefinition\n): LocalizedAmbientAlertDefinition {\n return Object.freeze({\n ...input,\n localizedMessages: Object.freeze({ ...input.localizedMessages }),\n });\n}\n\nexport function createInterfaceShellDefinition(\n input: InterfaceShellDefinitionInput = {}\n): InterfaceShellDefinition {\n return Object.freeze({\n featureFlagId: input.featureFlagId ?? PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID,\n surfaces: Object.freeze([...(input.surfaces ?? [])]),\n focusPane: input.focusPane ? Object.freeze({ ...input.focusPane }) : undefined,\n targetPopups: Object.freeze([...(input.targetPopups ?? [])]),\n identityOverlays: Object.freeze([...(input.identityOverlays ?? [])]),\n paneHosts: Object.freeze([...(input.paneHosts ?? [])]),\n ambientAlerts: Object.freeze([...(input.ambientAlerts ?? [])]),\n reducedCombat: Object.freeze({\n ...defaultReducedCombatOverlayPolicy,\n ...input.reducedCombat,\n retainedSurfaceKinds: Object.freeze([\n ...(input.reducedCombat?.retainedSurfaceKinds ??\n defaultReducedCombatOverlayPolicy.retainedSurfaceKinds),\n ]),\n }),\n });\n}\n\nexport function createInterfaceShellState(\n shell: InterfaceShellDefinition,\n input: InterfaceShellStateInput\n): InterfaceShellStateDefinition {\n const retainedSurfaceKinds = new Set(\n shell.reducedCombat.retainedSurfaceKinds\n );\n const visibleSurfaceIds = shell.surfaces\n .filter(\n (surface) =>\n input.mode !== \"combat-safe\" ||\n (surface.combatBehavior !== \"suspend\" &&\n retainedSurfaceKinds.has(surface.kind))\n )\n .map((surface) => surface.surfaceId);\n\n if (\n input.focusedSurfaceId &&\n !visibleSurfaceIds.includes(input.focusedSurfaceId)\n ) {\n throw new RangeError(\n `Focused surface '${input.focusedSurfaceId}' is not visible in ${input.mode} mode`\n );\n }\n\n return Object.freeze({\n featureFlagId: shell.featureFlagId,\n mode: input.mode,\n focusedSurfaceId:\n input.mode === \"focused\" ? input.focusedSurfaceId : undefined,\n visibleSurfaceIds: Object.freeze(visibleSurfaceIds),\n });\n}\n\nexport function applyInterfaceShellFocusShift(\n state: InterfaceShellStateDefinition,\n focusShift: InterfaceFocusShift\n): InterfaceShellStateDefinition {\n if (!state.visibleSurfaceIds.includes(focusShift.toSurfaceId)) {\n throw new RangeError(\n `Focused surface '${focusShift.toSurfaceId}' is not visible in ${state.mode} mode`\n );\n }\n\n return Object.freeze({\n ...state,\n mode: \"focused\",\n focusedSurfaceId: focusShift.toSurfaceId,\n focusShift: Object.freeze({ ...focusShift }),\n });\n}\n\nexport function resolveLocalizedAmbientAlertMessage(\n alert: LocalizedAmbientAlertDefinition,\n locale: string,\n fallbackLocale = \"en-GB\"\n): string | undefined {\n return alert.localizedMessages[locale] ?? alert.localizedMessages[fallbackLocale];\n}\n\nexport function assessIdentityStatusOverlayDefinition(\n overlay: IdentityStatusOverlayDefinition\n): InterfaceContractAssessment {\n const violations: string[] = [];\n const perceivableFacts = new Set(overlay.perceivableFacts);\n\n if (overlay.readableFacts.some((fact) => !perceivableFacts.has(fact))) {\n violations.push(\"readableFacts\");\n }\n\n if (overlay.readConfidence === \"withheld\" && overlay.readableFacts.length > 0) {\n violations.push(\"withheldRead\");\n }\n\n if (overlay.targetKind === \"self\") {\n if (overlay.relation !== \"self\") {\n violations.push(\"selfRelation\");\n }\n if (overlay.invocation !== \"self-state\") {\n violations.push(\"selfInvocation\");\n }\n if (overlay.requiresLineOfSight) {\n violations.push(\"selfLineOfSight\");\n }\n } else {\n if (overlay.targetId.length === 0) {\n violations.push(\"targetId\");\n }\n if (!overlay.requiresLineOfSight) {\n violations.push(\"lineOfSight\");\n }\n }\n\n return Object.freeze({\n accepted: violations.length === 0,\n violations: Object.freeze(violations),\n });\n}\n\nexport function assessPlayerSystemInterfaceComposition(\n sample: WorldSpaceCompositionSample,\n contract: PlayerSystemInterfacePortabilityContract = defaultPlayerSystemInterfacePortabilityContract\n): InterfaceContractAssessment {\n const violations: string[] = [];\n\n if (sample.panelCount > contract.compositionScale.maxWorldPanels) {\n violations.push(\"panelCount\");\n }\n\n if (sample.focusPaneCount > contract.compositionScale.maxFocusPanes) {\n violations.push(\"focusPaneCount\");\n }\n\n if (sample.alertMarkerCount > contract.compositionScale.maxAlertMarkers) {\n violations.push(\"alertMarkerCount\");\n }\n\n if (\n sample.interactivePanelCount >\n contract.compositionScale.maxInteractivePanelsPerFrame\n ) {\n violations.push(\"interactivePanelCount\");\n }\n\n return Object.freeze({\n accepted: violations.length === 0,\n violations: Object.freeze(violations),\n });\n}\n\nexport function assessInterfaceShellDefinition(\n shell: InterfaceShellDefinition\n): InterfaceContractAssessment {\n const violations: string[] = [];\n const ownerSet = new Set(shell.surfaces.map((surface) => surface.owner));\n const retainedSurfaceKinds = new Set(shell.reducedCombat.retainedSurfaceKinds);\n const interactiveSurfaceCount = shell.surfaces.filter(\n (surface) => surface.interactive && retainedSurfaceKinds.has(surface.kind)\n ).length;\n const focusPane = shell.focusPane;\n\n if (shell.surfaces.length === 0) {\n violations.push(\"surfaces\");\n }\n\n if (focusPane && !ownerSet.has(focusPane.owner)) {\n violations.push(\"focusPaneOwner\");\n }\n\n if (focusPane) {\n const matchingSurface = shell.surfaces.find(\n (surface) =>\n surface.kind === \"focus-pane\" &&\n surface.anchorId === focusPane.anchorId &&\n surface.owner === focusPane.owner\n );\n if (!matchingSurface) {\n violations.push(\"focusPaneSurface\");\n }\n }\n\n if (\n interactiveSurfaceCount > shell.reducedCombat.maxInteractiveSurfaces\n ) {\n violations.push(\"interactiveSurfaceCount\");\n }\n\n for (const popup of shell.targetPopups) {\n if (popup.requiresLineOfSight && popup.anchorId.length === 0) {\n violations.push(`popup:${popup.popupId}`);\n }\n }\n\n for (const overlay of shell.identityOverlays) {\n const identityAssessment = assessIdentityStatusOverlayDefinition(overlay);\n for (const violation of identityAssessment.violations) {\n violations.push(`identityOverlay:${overlay.overlayId}:${violation}`);\n }\n\n const matchingSurface = shell.surfaces.find(\n (surface) =>\n surface.surfaceId === overlay.surfaceId &&\n surface.kind === \"identity-overlay\"\n );\n if (!matchingSurface) {\n violations.push(`identityOverlaySurface:${overlay.overlayId}`);\n }\n }\n\n for (const paneHost of shell.paneHosts) {\n const matchingSurface = shell.surfaces.find(\n (surface) =>\n surface.surfaceId === paneHost.surfaceId &&\n surface.owner === paneHost.owner &&\n surface.anchorId === paneHost.anchorId\n );\n if (!matchingSurface) {\n violations.push(`paneHost:${paneHost.hostId}`);\n }\n }\n\n for (const alert of shell.ambientAlerts) {\n if (Object.keys(alert.localizedMessages).length === 0) {\n violations.push(`alert:${alert.alertId}`);\n }\n }\n\n if (\n ownerSet.has(\"player-system\") &&\n ownerSet.has(\"party-system\") &&\n shell.reducedCombat.retainedSurfaceKinds.length === 0\n ) {\n violations.push(\"reducedCombat\");\n }\n\n return Object.freeze({\n accepted: violations.length === 0,\n violations: Object.freeze(violations),\n });\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export interface PackageDescriptor {\n readonly packageName: string;\n readonly featureFlagId: string;\n readonly envPrefix: string;\n readonly summary: string;\n}\n\nexport type OverlayKeyboardPath = \"sequential\" | \"direct-hotkey\" | \"read-only\";\n\nexport interface OverlayAccessibilityContract {\n readonly keyboardPath: OverlayKeyboardPath;\n readonly focusRestorationTarget: \"trigger\" | \"pane-heading\" | \"nearest-anchor\";\n readonly liveRegionMode: \"polite\" | \"assertive\" | \"off\";\n readonly requiresAccessibleName: boolean;\n}\n\nexport interface InterfaceFrameBudget {\n readonly targetFps: number;\n readonly maxFrameMs: number;\n readonly maxInteractivePanelsPerFrame: number;\n}\n\nexport type OverlayHostKind =\n | \"dom-overlay\"\n | \"native-overlay\"\n | \"headless-snapshot\";\n\nexport type OverlayAdapterCapability =\n | \"focus-restoration\"\n | \"live-region\"\n | \"anchor-registry\";\n\nexport interface OverlayHostAdapterContract {\n readonly supportedHosts: readonly OverlayHostKind[];\n readonly requiredCapabilities: readonly OverlayAdapterCapability[];\n readonly forbiddenAssumptions: readonly string[];\n}\n\nexport interface OverlayCompositionScaleContract {\n readonly maxWorldPanels: number;\n readonly maxFocusPanes: number;\n readonly maxAlertMarkers: number;\n readonly maxInteractivePanelsPerFrame: number;\n}\n\nexport interface PlayerSystemInterfaceContract {\n readonly featureFlagId: string;\n readonly accessibility: OverlayAccessibilityContract;\n readonly frameBudget: InterfaceFrameBudget;\n}\n\nexport interface PlayerSystemInterfacePortabilityContract {\n readonly featureFlagId: string;\n readonly hostAdapters: OverlayHostAdapterContract;\n readonly compositionScale: OverlayCompositionScaleContract;\n}\n\nexport interface PlayerSystemInterfaceContractInput {\n readonly featureFlagId?: string;\n readonly accessibility?: Partial<OverlayAccessibilityContract>;\n readonly frameBudget?: Partial<InterfaceFrameBudget>;\n}\n\nexport interface PlayerSystemInterfacePortabilityContractInput {\n readonly featureFlagId?: string;\n readonly hostAdapters?: Partial<OverlayHostAdapterContract>;\n readonly compositionScale?: Partial<OverlayCompositionScaleContract>;\n}\n\nexport type PlayerSystemInterfaceMode = \"ambient\" | \"focused\" | \"combat-safe\";\n\nexport type PlayerSystemPaneId =\n | \"identity\"\n | \"missions\"\n | \"guild-quests\"\n | \"logs\"\n | \"mcc\"\n | \"tutorial\"\n | \"points-store\";\n\nexport type InterfaceShellOwner = \"player-system\" | \"party-system\";\nexport type InterfaceShellSurfaceKind =\n | \"world-panel\"\n | \"focus-pane\"\n | \"target-popup\"\n | \"alert-marker\"\n | \"identity-overlay\";\nexport type InterfaceCombatBehavior = \"persist\" | \"reduce\" | \"suspend\";\n\nexport type IdentityProjectionRelation =\n | \"self\"\n | \"allied\"\n | \"neutral\"\n | \"unknown\"\n | \"unfriendly\";\nexport type IdentityProjectionInvocation =\n | \"self-state\"\n | \"identity-sweep\"\n | \"spell-targeting\";\nexport type IdentityProjectionReadConfidence =\n | \"complete\"\n | \"partial\"\n | \"fuzzy\"\n | \"withheld\";\nexport type IdentityProjectionPresentation = \"full\" | \"condensed\";\nexport type IdentityProjectionFact =\n | \"display-name\"\n | \"relation\"\n | \"health-band\"\n | \"status-summary\"\n | \"threat-band\"\n | \"targeting-affordance\";\n\nexport interface IdentityStatusOverlayBaseDefinition {\n readonly overlayId: string;\n readonly surfaceId: string;\n readonly readConfidence: IdentityProjectionReadConfidence;\n readonly perceivableFacts: readonly IdentityProjectionFact[];\n readonly readableFacts: readonly IdentityProjectionFact[];\n readonly presentation: IdentityProjectionPresentation;\n}\n\nexport interface IdentitySelfStateOverlayDefinition\n extends IdentityStatusOverlayBaseDefinition {\n readonly targetKind: \"self\";\n readonly relation: \"self\";\n readonly invocation: \"self-state\";\n readonly requiresLineOfSight: false;\n readonly targetId?: never;\n}\n\nexport interface IdentityTargetProjectionOverlayDefinition\n extends IdentityStatusOverlayBaseDefinition {\n readonly targetKind: \"external\";\n readonly targetId: string;\n readonly relation: Exclude<IdentityProjectionRelation, \"self\">;\n readonly invocation: Exclude<IdentityProjectionInvocation, \"self-state\">;\n readonly requiresLineOfSight: true;\n}\n\nexport type IdentityStatusOverlayDefinition =\n | IdentitySelfStateOverlayDefinition\n | IdentityTargetProjectionOverlayDefinition;\n\nexport interface InterfaceShellSurfaceDefinition {\n readonly surfaceId: string;\n readonly owner: InterfaceShellOwner;\n readonly kind: InterfaceShellSurfaceKind;\n readonly anchorId: string;\n readonly interactive: boolean;\n readonly priority: number;\n readonly combatBehavior: InterfaceCombatBehavior;\n}\n\nexport interface FocusPaneShellDefinition {\n readonly panelId: string;\n readonly owner: InterfaceShellOwner;\n readonly pane: PlayerSystemPaneId;\n readonly anchorId: string;\n readonly heading: string;\n readonly interactive: boolean;\n readonly combatBehavior: InterfaceCombatBehavior;\n}\n\nexport interface LineOfSightTargetPopupDefinition {\n readonly popupId: string;\n readonly owner: InterfaceShellOwner;\n readonly anchorId: string;\n readonly targetId: string;\n readonly summary: string;\n readonly requiresLineOfSight: boolean;\n readonly actionLabel?: string;\n}\n\nexport interface ReducedCombatOverlayPolicy {\n readonly featureFlagId: string;\n readonly mode: \"combat-safe\";\n readonly retainedSurfaceKinds: readonly InterfaceShellSurfaceKind[];\n readonly maxInteractiveSurfaces: number;\n}\n\nexport interface InterfaceShellDefinition {\n readonly featureFlagId: string;\n readonly surfaces: readonly InterfaceShellSurfaceDefinition[];\n readonly focusPane?: FocusPaneShellDefinition;\n readonly targetPopups: readonly LineOfSightTargetPopupDefinition[];\n readonly identityOverlays: readonly IdentityStatusOverlayDefinition[];\n readonly paneHosts: readonly ThreeDPaneHostDefinition[];\n readonly ambientAlerts: readonly LocalizedAmbientAlertDefinition[];\n readonly reducedCombat: ReducedCombatOverlayPolicy;\n}\n\nexport interface InterfaceShellDefinitionInput {\n readonly featureFlagId?: string;\n readonly surfaces?: readonly InterfaceShellSurfaceDefinition[];\n readonly focusPane?: FocusPaneShellDefinition;\n readonly targetPopups?: readonly LineOfSightTargetPopupDefinition[];\n readonly identityOverlays?: readonly IdentityStatusOverlayDefinition[];\n readonly paneHosts?: readonly ThreeDPaneHostDefinition[];\n readonly ambientAlerts?: readonly LocalizedAmbientAlertDefinition[];\n readonly reducedCombat?: Partial<ReducedCombatOverlayPolicy>;\n}\n\nexport type InterfaceFocusShiftReason =\n | \"keyboard\"\n | \"direct-hotkey\"\n | \"restore\"\n | \"system\";\n\nexport interface InterfaceFocusShift {\n readonly fromSurfaceId?: string;\n readonly toSurfaceId: string;\n readonly reason: InterfaceFocusShiftReason;\n}\n\nexport interface InterfaceShellStateDefinition {\n readonly featureFlagId: string;\n readonly mode: PlayerSystemInterfaceMode;\n readonly focusedSurfaceId?: string;\n readonly visibleSurfaceIds: readonly string[];\n readonly focusShift?: InterfaceFocusShift;\n}\n\nexport interface InterfaceShellStateInput {\n readonly mode: PlayerSystemInterfaceMode;\n readonly focusedSurfaceId?: string;\n}\n\nexport interface ThreeDPaneHostDefinition {\n readonly hostId: string;\n readonly owner: InterfaceShellOwner;\n readonly pane: PlayerSystemPaneId;\n readonly surfaceId: string;\n readonly anchorId: string;\n readonly supportedHosts: readonly OverlayHostKind[];\n}\n\nexport type AmbientAlertSeverity = \"info\" | \"warning\" | \"danger\";\n\nexport interface LocalizedAmbientAlertDefinition {\n readonly alertId: string;\n readonly owner: InterfaceShellOwner;\n readonly severity: AmbientAlertSeverity;\n readonly anchorId: string;\n readonly messageKey: string;\n readonly localizedMessages: Readonly<Record<string, string>>;\n readonly liveRegionMode: \"polite\" | \"assertive\";\n}\n\nexport interface WorldSpacePanelDefinition {\n readonly panelId: string;\n readonly pane: PlayerSystemPaneId;\n readonly anchorId: string;\n readonly interactive: boolean;\n readonly accessibilityLabel?: string;\n readonly focusOrder?: number;\n}\n\nexport interface OverlayAlertMarker {\n readonly markerId: string;\n readonly severity: AmbientAlertSeverity;\n readonly anchorId: string;\n}\n\nexport interface WorldSpaceCompositionSample {\n readonly panelCount: number;\n readonly focusPaneCount: number;\n readonly alertMarkerCount: number;\n readonly interactivePanelCount: number;\n}\n\nexport interface InterfaceContractAssessment {\n readonly accepted: boolean;\n readonly violations: readonly string[];\n}\n\nexport const PLAYER_SYSTEM_INTERFACE_PACKAGE = \"@plasius/player-system-interface\";\nexport const PLAYER_SYSTEM_INTERFACE_ENV_PREFIX = \"PLAYER_SYSTEM_INTERFACE\";\nexport const PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID =\n \"harmony.player-system.interface.enabled\";\nexport const PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID =\n PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;\nexport const PLAYER_SYSTEM_RUNTIME_NFR_FEATURE_FLAG_ID =\n PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;\nexport const PLAYER_SYSTEM_RUNTIME_PORTABILITY_FEATURE_FLAG_ID =\n PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID;\nexport const PLAYER_SYSTEM_IDENTITY_FEATURE_FLAG_ID =\n \"harmony.player-system.identity.enabled\";\n\nexport const packageDescriptor: PackageDescriptor = Object.freeze({\n packageName: PLAYER_SYSTEM_INTERFACE_PACKAGE,\n featureFlagId: PLAYER_SYSTEM_PACKAGES_FEATURE_FLAG_ID,\n envPrefix: PLAYER_SYSTEM_INTERFACE_ENV_PREFIX,\n summary:\n \"World-space Player System overlays, focus panes, and target-surface contracts for Plasius game experiences.\",\n});\n\nexport const defaultPlayerSystemInterfaceContract: PlayerSystemInterfaceContract =\n Object.freeze({\n featureFlagId: PLAYER_SYSTEM_RUNTIME_NFR_FEATURE_FLAG_ID,\n accessibility: Object.freeze({\n keyboardPath: \"sequential\",\n focusRestorationTarget: \"trigger\",\n liveRegionMode: \"polite\",\n requiresAccessibleName: true,\n }),\n frameBudget: Object.freeze({\n targetFps: 60,\n maxFrameMs: 16,\n maxInteractivePanelsPerFrame: 2,\n }),\n });\n\nexport const defaultPlayerSystemInterfacePortabilityContract: PlayerSystemInterfacePortabilityContract =\n Object.freeze({\n featureFlagId: PLAYER_SYSTEM_RUNTIME_PORTABILITY_FEATURE_FLAG_ID,\n hostAdapters: Object.freeze({\n supportedHosts: Object.freeze([\n \"dom-overlay\",\n \"native-overlay\",\n \"headless-snapshot\",\n ] satisfies OverlayHostKind[]),\n requiredCapabilities: Object.freeze([\n \"focus-restoration\",\n \"live-region\",\n \"anchor-registry\",\n ] satisfies OverlayAdapterCapability[]),\n forbiddenAssumptions: Object.freeze([\n \"window-global\",\n \"single-pane-layout\",\n \"absolute-scene-coordinates\",\n ]),\n }),\n compositionScale: Object.freeze({\n maxWorldPanels: 6,\n maxFocusPanes: 3,\n maxAlertMarkers: 8,\n maxInteractivePanelsPerFrame: 2,\n }),\n });\n\nexport const defaultReducedCombatOverlayPolicy: ReducedCombatOverlayPolicy =\n Object.freeze({\n featureFlagId: PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID,\n mode: \"combat-safe\",\n retainedSurfaceKinds: Object.freeze([\n \"alert-marker\",\n \"target-popup\",\n \"focus-pane\",\n \"identity-overlay\",\n ] satisfies InterfaceShellSurfaceKind[]),\n maxInteractiveSurfaces: 1,\n });\n\nexport function isPlayerSystemInterfaceMode(\n value: string\n): value is PlayerSystemInterfaceMode {\n return value === \"ambient\" || value === \"focused\" || value === \"combat-safe\";\n}\n\nexport function createWorldSpacePanelDefinition(\n input: WorldSpacePanelDefinition\n): WorldSpacePanelDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createPlayerSystemInterfaceContract(\n input: PlayerSystemInterfaceContractInput = {}\n): PlayerSystemInterfaceContract {\n return Object.freeze({\n featureFlagId:\n input.featureFlagId ?? defaultPlayerSystemInterfaceContract.featureFlagId,\n accessibility: Object.freeze({\n ...defaultPlayerSystemInterfaceContract.accessibility,\n ...input.accessibility,\n }),\n frameBudget: Object.freeze({\n ...defaultPlayerSystemInterfaceContract.frameBudget,\n ...input.frameBudget,\n }),\n });\n}\n\nexport function createPlayerSystemInterfacePortabilityContract(\n input: PlayerSystemInterfacePortabilityContractInput = {}\n): PlayerSystemInterfacePortabilityContract {\n return Object.freeze({\n featureFlagId:\n input.featureFlagId ??\n defaultPlayerSystemInterfacePortabilityContract.featureFlagId,\n hostAdapters: Object.freeze({\n ...defaultPlayerSystemInterfacePortabilityContract.hostAdapters,\n ...input.hostAdapters,\n supportedHosts: Object.freeze([\n ...(input.hostAdapters?.supportedHosts ??\n defaultPlayerSystemInterfacePortabilityContract.hostAdapters\n .supportedHosts),\n ]),\n requiredCapabilities: Object.freeze([\n ...(input.hostAdapters?.requiredCapabilities ??\n defaultPlayerSystemInterfacePortabilityContract.hostAdapters\n .requiredCapabilities),\n ]),\n forbiddenAssumptions: Object.freeze([\n ...(input.hostAdapters?.forbiddenAssumptions ??\n defaultPlayerSystemInterfacePortabilityContract.hostAdapters\n .forbiddenAssumptions),\n ]),\n }),\n compositionScale: Object.freeze({\n ...defaultPlayerSystemInterfacePortabilityContract.compositionScale,\n ...input.compositionScale,\n }),\n });\n}\n\nexport function createInterfaceShellSurfaceDefinition(\n input: InterfaceShellSurfaceDefinition\n): InterfaceShellSurfaceDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createFocusPaneShellDefinition(\n input: FocusPaneShellDefinition\n): FocusPaneShellDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createLineOfSightTargetPopupDefinition(\n input: LineOfSightTargetPopupDefinition\n): LineOfSightTargetPopupDefinition {\n return Object.freeze({ ...input });\n}\n\nexport function createIdentityStatusOverlayDefinition(\n input: IdentityStatusOverlayDefinition\n): IdentityStatusOverlayDefinition {\n return Object.freeze({\n ...input,\n perceivableFacts: Object.freeze([...input.perceivableFacts]),\n readableFacts: Object.freeze([...input.readableFacts]),\n });\n}\n\nexport function createThreeDPaneHostDefinition(\n input: ThreeDPaneHostDefinition\n): ThreeDPaneHostDefinition {\n return Object.freeze({\n ...input,\n supportedHosts: Object.freeze([...input.supportedHosts]),\n });\n}\n\nexport function createLocalizedAmbientAlertDefinition(\n input: LocalizedAmbientAlertDefinition\n): LocalizedAmbientAlertDefinition {\n return Object.freeze({\n ...input,\n localizedMessages: Object.freeze({ ...input.localizedMessages }),\n });\n}\n\nexport function createInterfaceShellDefinition(\n input: InterfaceShellDefinitionInput = {}\n): InterfaceShellDefinition {\n return Object.freeze({\n featureFlagId: input.featureFlagId ?? PLAYER_SYSTEM_INTERFACE_FEATURE_FLAG_ID,\n surfaces: Object.freeze([...(input.surfaces ?? [])]),\n focusPane: input.focusPane ? Object.freeze({ ...input.focusPane }) : undefined,\n targetPopups: Object.freeze([...(input.targetPopups ?? [])]),\n identityOverlays: Object.freeze([...(input.identityOverlays ?? [])]),\n paneHosts: Object.freeze([...(input.paneHosts ?? [])]),\n ambientAlerts: Object.freeze([...(input.ambientAlerts ?? [])]),\n reducedCombat: Object.freeze({\n ...defaultReducedCombatOverlayPolicy,\n ...input.reducedCombat,\n retainedSurfaceKinds: Object.freeze([\n ...(input.reducedCombat?.retainedSurfaceKinds ??\n defaultReducedCombatOverlayPolicy.retainedSurfaceKinds),\n ]),\n }),\n });\n}\n\nexport function createInterfaceShellState(\n shell: InterfaceShellDefinition,\n input: InterfaceShellStateInput\n): InterfaceShellStateDefinition {\n const retainedSurfaceKinds = new Set(\n shell.reducedCombat.retainedSurfaceKinds\n );\n const visibleSurfaceIds = shell.surfaces\n .filter(\n (surface) =>\n input.mode !== \"combat-safe\" ||\n (surface.combatBehavior !== \"suspend\" &&\n retainedSurfaceKinds.has(surface.kind))\n )\n .map((surface) => surface.surfaceId);\n\n if (\n input.focusedSurfaceId &&\n !visibleSurfaceIds.includes(input.focusedSurfaceId)\n ) {\n throw new RangeError(\n `Focused surface '${input.focusedSurfaceId}' is not visible in ${input.mode} mode`\n );\n }\n\n return Object.freeze({\n featureFlagId: shell.featureFlagId,\n mode: input.mode,\n focusedSurfaceId:\n input.mode === \"focused\" ? input.focusedSurfaceId : undefined,\n visibleSurfaceIds: Object.freeze(visibleSurfaceIds),\n });\n}\n\nexport function applyInterfaceShellFocusShift(\n state: InterfaceShellStateDefinition,\n focusShift: InterfaceFocusShift\n): InterfaceShellStateDefinition {\n if (!state.visibleSurfaceIds.includes(focusShift.toSurfaceId)) {\n throw new RangeError(\n `Focused surface '${focusShift.toSurfaceId}' is not visible in ${state.mode} mode`\n );\n }\n\n return Object.freeze({\n ...state,\n mode: \"focused\",\n focusedSurfaceId: focusShift.toSurfaceId,\n focusShift: Object.freeze({ ...focusShift }),\n });\n}\n\nexport function resolveLocalizedAmbientAlertMessage(\n alert: LocalizedAmbientAlertDefinition,\n locale: string,\n fallbackLocale = \"en-GB\"\n): string | undefined {\n return alert.localizedMessages[locale] ?? alert.localizedMessages[fallbackLocale];\n}\n\nexport function assessIdentityStatusOverlayDefinition(\n overlay: IdentityStatusOverlayDefinition\n): InterfaceContractAssessment {\n const violations: string[] = [];\n const perceivableFacts = new Set(overlay.perceivableFacts);\n\n if (overlay.readableFacts.some((fact) => !perceivableFacts.has(fact))) {\n violations.push(\"readableFacts\");\n }\n\n if (overlay.readConfidence === \"withheld\" && overlay.readableFacts.length > 0) {\n violations.push(\"withheldRead\");\n }\n\n if (overlay.targetKind === \"self\") {\n if (overlay.relation !== \"self\") {\n violations.push(\"selfRelation\");\n }\n if (overlay.invocation !== \"self-state\") {\n violations.push(\"selfInvocation\");\n }\n if (overlay.requiresLineOfSight) {\n violations.push(\"selfLineOfSight\");\n }\n } else {\n if (overlay.targetId.length === 0) {\n violations.push(\"targetId\");\n }\n if (!overlay.requiresLineOfSight) {\n violations.push(\"lineOfSight\");\n }\n }\n\n return Object.freeze({\n accepted: violations.length === 0,\n violations: Object.freeze(violations),\n });\n}\n\nexport function assessPlayerSystemInterfaceComposition(\n sample: WorldSpaceCompositionSample,\n contract: PlayerSystemInterfacePortabilityContract = defaultPlayerSystemInterfacePortabilityContract\n): InterfaceContractAssessment {\n const violations: string[] = [];\n\n if (sample.panelCount > contract.compositionScale.maxWorldPanels) {\n violations.push(\"panelCount\");\n }\n\n if (sample.focusPaneCount > contract.compositionScale.maxFocusPanes) {\n violations.push(\"focusPaneCount\");\n }\n\n if (sample.alertMarkerCount > contract.compositionScale.maxAlertMarkers) {\n violations.push(\"alertMarkerCount\");\n }\n\n if (\n sample.interactivePanelCount >\n contract.compositionScale.maxInteractivePanelsPerFrame\n ) {\n violations.push(\"interactivePanelCount\");\n }\n\n return Object.freeze({\n accepted: violations.length === 0,\n violations: Object.freeze(violations),\n });\n}\n\nexport function assessInterfaceShellDefinition(\n shell: InterfaceShellDefinition\n): InterfaceContractAssessment {\n const violations: string[] = [];\n const ownerSet = new Set(shell.surfaces.map((surface) => surface.owner));\n const retainedSurfaceKinds = new Set(shell.reducedCombat.retainedSurfaceKinds);\n const interactiveSurfaceCount = shell.surfaces.filter(\n (surface) => surface.interactive && retainedSurfaceKinds.has(surface.kind)\n ).length;\n const focusPane = shell.focusPane;\n\n if (shell.surfaces.length === 0) {\n violations.push(\"surfaces\");\n }\n\n if (focusPane && !ownerSet.has(focusPane.owner)) {\n violations.push(\"focusPaneOwner\");\n }\n\n if (focusPane) {\n const matchingSurface = shell.surfaces.find(\n (surface) =>\n surface.kind === \"focus-pane\" &&\n surface.anchorId === focusPane.anchorId &&\n surface.owner === focusPane.owner\n );\n if (!matchingSurface) {\n violations.push(\"focusPaneSurface\");\n }\n }\n\n if (\n interactiveSurfaceCount > shell.reducedCombat.maxInteractiveSurfaces\n ) {\n violations.push(\"interactiveSurfaceCount\");\n }\n\n for (const popup of shell.targetPopups) {\n if (popup.requiresLineOfSight && popup.anchorId.length === 0) {\n violations.push(`popup:${popup.popupId}`);\n }\n }\n\n for (const overlay of shell.identityOverlays) {\n const identityAssessment = assessIdentityStatusOverlayDefinition(overlay);\n for (const violation of identityAssessment.violations) {\n violations.push(`identityOverlay:${overlay.overlayId}:${violation}`);\n }\n\n const matchingSurface = shell.surfaces.find(\n (surface) =>\n surface.surfaceId === overlay.surfaceId &&\n surface.kind === \"identity-overlay\"\n );\n if (!matchingSurface) {\n violations.push(`identityOverlaySurface:${overlay.overlayId}`);\n }\n }\n\n for (const paneHost of shell.paneHosts) {\n const matchingSurface = shell.surfaces.find(\n (surface) =>\n surface.surfaceId === paneHost.surfaceId &&\n surface.owner === paneHost.owner &&\n surface.anchorId === paneHost.anchorId\n );\n if (!matchingSurface) {\n violations.push(`paneHost:${paneHost.hostId}`);\n }\n }\n\n for (const alert of shell.ambientAlerts) {\n if (Object.keys(alert.localizedMessages).length === 0) {\n violations.push(`alert:${alert.alertId}`);\n }\n }\n\n if (\n ownerSet.has(\"player-system\") &&\n ownerSet.has(\"party-system\") &&\n shell.reducedCombat.retainedSurfaceKinds.length === 0\n ) {\n violations.push(\"reducedCombat\");\n }\n\n return Object.freeze({\n accepted: violations.length === 0,\n violations: Object.freeze(violations),\n });\n}\n"],"mappings":";AAoRO,IAAM,kCAAkC;AACxC,IAAM,qCAAqC;AAC3C,IAAM,0CACX;AACK,IAAM,yCACX;AACK,IAAM,4CACX;AACK,IAAM,oDACX;AACK,IAAM,yCACX;AAEK,IAAM,oBAAuC,OAAO,OAAO;AAAA,EAChE,aAAa;AAAA,EACb,eAAe;AAAA,EACf,WAAW;AAAA,EACX,SACE;AACJ,CAAC;AAEM,IAAM,uCACX,OAAO,OAAO;AAAA,EACZ,eAAe;AAAA,EACf,eAAe,OAAO,OAAO;AAAA,IAC3B,cAAc;AAAA,IACd,wBAAwB;AAAA,IACxB,gBAAgB;AAAA,IAChB,wBAAwB;AAAA,EAC1B,CAAC;AAAA,EACD,aAAa,OAAO,OAAO;AAAA,IACzB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,8BAA8B;AAAA,EAChC,CAAC;AACH,CAAC;AAEI,IAAM,kDACX,OAAO,OAAO;AAAA,EACZ,eAAe;AAAA,EACf,cAAc,OAAO,OAAO;AAAA,IAC1B,gBAAgB,OAAO,OAAO;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAA6B;AAAA,IAC7B,sBAAsB,OAAO,OAAO;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAsC;AAAA,IACtC,sBAAsB,OAAO,OAAO;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAAA,EACD,kBAAkB,OAAO,OAAO;AAAA,IAC9B,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,8BAA8B;AAAA,EAChC,CAAC;AACH,CAAC;AAEI,IAAM,oCACX,OAAO,OAAO;AAAA,EACZ,eAAe;AAAA,EACf,MAAM;AAAA,EACN,sBAAsB,OAAO,OAAO;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAuC;AAAA,EACvC,wBAAwB;AAC1B,CAAC;AAEI,SAAS,4BACd,OACoC;AACpC,SAAO,UAAU,aAAa,UAAU,aAAa,UAAU;AACjE;AAEO,SAAS,gCACd,OAC2B;AAC3B,SAAO,OAAO,OAAO,EAAE,GAAG,MAAM,CAAC;AACnC;AAEO,SAAS,oCACd,QAA4C,CAAC,GACd;AAC/B,SAAO,OAAO,OAAO;AAAA,IACnB,eACE,MAAM,iBAAiB,qCAAqC;AAAA,IAC9D,eAAe,OAAO,OAAO;AAAA,MAC3B,GAAG,qCAAqC;AAAA,MACxC,GAAG,MAAM;AAAA,IACX,CAAC;AAAA,IACD,aAAa,OAAO,OAAO;AAAA,MACzB,GAAG,qCAAqC;AAAA,MACxC,GAAG,MAAM;AAAA,IACX,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,+CACd,QAAuD,CAAC,GACd;AAC1C,SAAO,OAAO,OAAO;AAAA,IACnB,eACE,MAAM,iBACN,gDAAgD;AAAA,IAClD,cAAc,OAAO,OAAO;AAAA,MAC1B,GAAG,gDAAgD;AAAA,MACnD,GAAG,MAAM;AAAA,MACT,gBAAgB,OAAO,OAAO;AAAA,QAC5B,GAAI,MAAM,cAAc,kBACtB,gDAAgD,aAC7C;AAAA,MACP,CAAC;AAAA,MACD,sBAAsB,OAAO,OAAO;AAAA,QAClC,GAAI,MAAM,cAAc,wBACtB,gDAAgD,aAC7C;AAAA,MACP,CAAC;AAAA,MACD,sBAAsB,OAAO,OAAO;AAAA,QAClC,GAAI,MAAM,cAAc,wBACtB,gDAAgD,aAC7C;AAAA,MACP,CAAC;AAAA,IACH,CAAC;AAAA,IACD,kBAAkB,OAAO,OAAO;AAAA,MAC9B,GAAG,gDAAgD;AAAA,MACnD,GAAG,MAAM;AAAA,IACX,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,sCACd,OACiC;AACjC,SAAO,OAAO,OAAO,EAAE,GAAG,MAAM,CAAC;AACnC;AAEO,SAAS,+BACd,OAC0B;AAC1B,SAAO,OAAO,OAAO,EAAE,GAAG,MAAM,CAAC;AACnC;AAEO,SAAS,uCACd,OACkC;AAClC,SAAO,OAAO,OAAO,EAAE,GAAG,MAAM,CAAC;AACnC;AAEO,SAAS,sCACd,OACiC;AACjC,SAAO,OAAO,OAAO;AAAA,IACnB,GAAG;AAAA,IACH,kBAAkB,OAAO,OAAO,CAAC,GAAG,MAAM,gBAAgB,CAAC;AAAA,IAC3D,eAAe,OAAO,OAAO,CAAC,GAAG,MAAM,aAAa,CAAC;AAAA,EACvD,CAAC;AACH;AAEO,SAAS,+BACd,OAC0B;AAC1B,SAAO,OAAO,OAAO;AAAA,IACnB,GAAG;AAAA,IACH,gBAAgB,OAAO,OAAO,CAAC,GAAG,MAAM,cAAc,CAAC;AAAA,EACzD,CAAC;AACH;AAEO,SAAS,sCACd,OACiC;AACjC,SAAO,OAAO,OAAO;AAAA,IACnB,GAAG;AAAA,IACH,mBAAmB,OAAO,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC;AAAA,EACjE,CAAC;AACH;AAEO,SAAS,+BACd,QAAuC,CAAC,GACd;AAC1B,SAAO,OAAO,OAAO;AAAA,IACnB,eAAe,MAAM,iBAAiB;AAAA,IACtC,UAAU,OAAO,OAAO,CAAC,GAAI,MAAM,YAAY,CAAC,CAAE,CAAC;AAAA,IACnD,WAAW,MAAM,YAAY,OAAO,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI;AAAA,IACrE,cAAc,OAAO,OAAO,CAAC,GAAI,MAAM,gBAAgB,CAAC,CAAE,CAAC;AAAA,IAC3D,kBAAkB,OAAO,OAAO,CAAC,GAAI,MAAM,oBAAoB,CAAC,CAAE,CAAC;AAAA,IACnE,WAAW,OAAO,OAAO,CAAC,GAAI,MAAM,aAAa,CAAC,CAAE,CAAC;AAAA,IACrD,eAAe,OAAO,OAAO,CAAC,GAAI,MAAM,iBAAiB,CAAC,CAAE,CAAC;AAAA,IAC7D,eAAe,OAAO,OAAO;AAAA,MAC3B,GAAG;AAAA,MACH,GAAG,MAAM;AAAA,MACT,sBAAsB,OAAO,OAAO;AAAA,QAClC,GAAI,MAAM,eAAe,wBACvB,kCAAkC;AAAA,MACtC,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,0BACd,OACA,OAC+B;AAC/B,QAAM,uBAAuB,IAAI;AAAA,IAC/B,MAAM,cAAc;AAAA,EACtB;AACA,QAAM,oBAAoB,MAAM,SAC7B;AAAA,IACC,CAAC,YACC,MAAM,SAAS,iBACd,QAAQ,mBAAmB,aAC1B,qBAAqB,IAAI,QAAQ,IAAI;AAAA,EAC3C,EACC,IAAI,CAAC,YAAY,QAAQ,SAAS;AAErC,MACE,MAAM,oBACN,CAAC,kBAAkB,SAAS,MAAM,gBAAgB,GAClD;AACA,UAAM,IAAI;AAAA,MACR,oBAAoB,MAAM,gBAAgB,uBAAuB,MAAM,IAAI;AAAA,IAC7E;AAAA,EACF;AAEA,SAAO,OAAO,OAAO;AAAA,IACnB,eAAe,MAAM;AAAA,IACrB,MAAM,MAAM;AAAA,IACZ,kBACE,MAAM,SAAS,YAAY,MAAM,mBAAmB;AAAA,IACtD,mBAAmB,OAAO,OAAO,iBAAiB;AAAA,EACpD,CAAC;AACH;AAEO,SAAS,8BACd,OACA,YAC+B;AAC/B,MAAI,CAAC,MAAM,kBAAkB,SAAS,WAAW,WAAW,GAAG;AAC7D,UAAM,IAAI;AAAA,MACR,oBAAoB,WAAW,WAAW,uBAAuB,MAAM,IAAI;AAAA,IAC7E;AAAA,EACF;AAEA,SAAO,OAAO,OAAO;AAAA,IACnB,GAAG;AAAA,IACH,MAAM;AAAA,IACN,kBAAkB,WAAW;AAAA,IAC7B,YAAY,OAAO,OAAO,EAAE,GAAG,WAAW,CAAC;AAAA,EAC7C,CAAC;AACH;AAEO,SAAS,oCACd,OACA,QACA,iBAAiB,SACG;AACpB,SAAO,MAAM,kBAAkB,MAAM,KAAK,MAAM,kBAAkB,cAAc;AAClF;AAEO,SAAS,sCACd,SAC6B;AAC7B,QAAM,aAAuB,CAAC;AAC9B,QAAM,mBAAmB,IAAI,IAAI,QAAQ,gBAAgB;AAEzD,MAAI,QAAQ,cAAc,KAAK,CAAC,SAAS,CAAC,iBAAiB,IAAI,IAAI,CAAC,GAAG;AACrE,eAAW,KAAK,eAAe;AAAA,EACjC;AAEA,MAAI,QAAQ,mBAAmB,cAAc,QAAQ,cAAc,SAAS,GAAG;AAC7E,eAAW,KAAK,cAAc;AAAA,EAChC;AAEA,MAAI,QAAQ,eAAe,QAAQ;AACjC,QAAI,QAAQ,aAAa,QAAQ;AAC/B,iBAAW,KAAK,cAAc;AAAA,IAChC;AACA,QAAI,QAAQ,eAAe,cAAc;AACvC,iBAAW,KAAK,gBAAgB;AAAA,IAClC;AACA,QAAI,QAAQ,qBAAqB;AAC/B,iBAAW,KAAK,iBAAiB;AAAA,IACnC;AAAA,EACF,OAAO;AACL,QAAI,QAAQ,SAAS,WAAW,GAAG;AACjC,iBAAW,KAAK,UAAU;AAAA,IAC5B;AACA,QAAI,CAAC,QAAQ,qBAAqB;AAChC,iBAAW,KAAK,aAAa;AAAA,IAC/B;AAAA,EACF;AAEA,SAAO,OAAO,OAAO;AAAA,IACnB,UAAU,WAAW,WAAW;AAAA,IAChC,YAAY,OAAO,OAAO,UAAU;AAAA,EACtC,CAAC;AACH;AAEO,SAAS,uCACd,QACA,WAAqD,iDACxB;AAC7B,QAAM,aAAuB,CAAC;AAE9B,MAAI,OAAO,aAAa,SAAS,iBAAiB,gBAAgB;AAChE,eAAW,KAAK,YAAY;AAAA,EAC9B;AAEA,MAAI,OAAO,iBAAiB,SAAS,iBAAiB,eAAe;AACnE,eAAW,KAAK,gBAAgB;AAAA,EAClC;AAEA,MAAI,OAAO,mBAAmB,SAAS,iBAAiB,iBAAiB;AACvE,eAAW,KAAK,kBAAkB;AAAA,EACpC;AAEA,MACE,OAAO,wBACP,SAAS,iBAAiB,8BAC1B;AACA,eAAW,KAAK,uBAAuB;AAAA,EACzC;AAEA,SAAO,OAAO,OAAO;AAAA,IACnB,UAAU,WAAW,WAAW;AAAA,IAChC,YAAY,OAAO,OAAO,UAAU;AAAA,EACtC,CAAC;AACH;AAEO,SAAS,+BACd,OAC6B;AAC7B,QAAM,aAAuB,CAAC;AAC9B,QAAM,WAAW,IAAI,IAAI,MAAM,SAAS,IAAI,CAAC,YAAY,QAAQ,KAAK,CAAC;AACvE,QAAM,uBAAuB,IAAI,IAAI,MAAM,cAAc,oBAAoB;AAC7E,QAAM,0BAA0B,MAAM,SAAS;AAAA,IAC7C,CAAC,YAAY,QAAQ,eAAe,qBAAqB,IAAI,QAAQ,IAAI;AAAA,EAC3E,EAAE;AACF,QAAM,YAAY,MAAM;AAExB,MAAI,MAAM,SAAS,WAAW,GAAG;AAC/B,eAAW,KAAK,UAAU;AAAA,EAC5B;AAEA,MAAI,aAAa,CAAC,SAAS,IAAI,UAAU,KAAK,GAAG;AAC/C,eAAW,KAAK,gBAAgB;AAAA,EAClC;AAEA,MAAI,WAAW;AACb,UAAM,kBAAkB,MAAM,SAAS;AAAA,MACrC,CAAC,YACC,QAAQ,SAAS,gBACjB,QAAQ,aAAa,UAAU,YAC/B,QAAQ,UAAU,UAAU;AAAA,IAChC;AACA,QAAI,CAAC,iBAAiB;AACpB,iBAAW,KAAK,kBAAkB;AAAA,IACpC;AAAA,EACF;AAEA,MACE,0BAA0B,MAAM,cAAc,wBAC9C;AACA,eAAW,KAAK,yBAAyB;AAAA,EAC3C;AAEA,aAAW,SAAS,MAAM,cAAc;AACtC,QAAI,MAAM,uBAAuB,MAAM,SAAS,WAAW,GAAG;AAC5D,iBAAW,KAAK,SAAS,MAAM,OAAO,EAAE;AAAA,IAC1C;AAAA,EACF;AAEA,aAAW,WAAW,MAAM,kBAAkB;AAC5C,UAAM,qBAAqB,sCAAsC,OAAO;AACxE,eAAW,aAAa,mBAAmB,YAAY;AACrD,iBAAW,KAAK,mBAAmB,QAAQ,SAAS,IAAI,SAAS,EAAE;AAAA,IACrE;AAEA,UAAM,kBAAkB,MAAM,SAAS;AAAA,MACrC,CAAC,YACC,QAAQ,cAAc,QAAQ,aAC9B,QAAQ,SAAS;AAAA,IACrB;AACA,QAAI,CAAC,iBAAiB;AACpB,iBAAW,KAAK,0BAA0B,QAAQ,SAAS,EAAE;AAAA,IAC/D;AAAA,EACF;AAEA,aAAW,YAAY,MAAM,WAAW;AACtC,UAAM,kBAAkB,MAAM,SAAS;AAAA,MACrC,CAAC,YACC,QAAQ,cAAc,SAAS,aAC/B,QAAQ,UAAU,SAAS,SAC3B,QAAQ,aAAa,SAAS;AAAA,IAClC;AACA,QAAI,CAAC,iBAAiB;AACpB,iBAAW,KAAK,YAAY,SAAS,MAAM,EAAE;AAAA,IAC/C;AAAA,EACF;AAEA,aAAW,SAAS,MAAM,eAAe;AACvC,QAAI,OAAO,KAAK,MAAM,iBAAiB,EAAE,WAAW,GAAG;AACrD,iBAAW,KAAK,SAAS,MAAM,OAAO,EAAE;AAAA,IAC1C;AAAA,EACF;AAEA,MACE,SAAS,IAAI,eAAe,KAC5B,SAAS,IAAI,cAAc,KAC3B,MAAM,cAAc,qBAAqB,WAAW,GACpD;AACA,eAAW,KAAK,eAAe;AAAA,EACjC;AAEA,SAAO,OAAO,OAAO;AAAA,IACnB,UAAU,WAAW,WAAW;AAAA,IAChC,YAAY,OAAO,OAAO,UAAU;AAAA,EACtC,CAAC;AACH;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plasius/player-system-interface",
3
- "version": "0.1.6",
3
+ "version": "1.0.0",
4
4
  "description": "World-space Player System overlays, focus panes, and target-surface contracts for Plasius game experiences",
5
5
  "type": "module",
6
6
  "sideEffects": false,