@bardway/trpg-pixi 0.0.0-stage → 0.1.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.
Files changed (111) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +10 -0
  3. package/NOTICE.md +1 -0
  4. package/README.md +25 -2
  5. package/dist/AnimationMilestones.d.ts +17 -0
  6. package/dist/BattleActionMotionMath.d.ts +24 -0
  7. package/dist/BattleActionPresentationRecipes.d.ts +11 -0
  8. package/dist/BattleFxLibrary.d.ts +16 -0
  9. package/dist/BattlePresentationEngine.d.ts +26 -0
  10. package/dist/BattlePresentationPoseRegistry.d.ts +25 -0
  11. package/dist/BattlePresentationRecipe.d.ts +48 -0
  12. package/dist/BattleSequenceScheduler.d.ts +11 -0
  13. package/dist/DisplayEventQueue.d.ts +24 -0
  14. package/dist/PixiAnimationActivity.d.ts +7 -0
  15. package/dist/PixiAnimationDirector.d.ts +21 -0
  16. package/dist/PixiApplicationFactory.d.ts +17 -0
  17. package/dist/PixiAssetManager.d.ts +70 -0
  18. package/dist/PixiBattleActionRecipes.d.ts +75 -0
  19. package/dist/PixiBattleCinematicSurface.d.ts +23 -0
  20. package/dist/PixiBattleEntryTransition.d.ts +87 -0
  21. package/dist/PixiBattleFieldSurface.d.ts +125 -0
  22. package/dist/PixiBattleFxResources.d.ts +154 -0
  23. package/dist/PixiBattleGrid.d.ts +13 -0
  24. package/dist/PixiBattleHudPorts.d.ts +192 -0
  25. package/dist/PixiBattleHudSurface.d.ts +159 -0
  26. package/dist/PixiBattleLightningResources.d.ts +57 -0
  27. package/dist/PixiBattleMapDissolve.d.ts +38 -0
  28. package/dist/PixiBattleSceneTransition.d.ts +30 -0
  29. package/dist/PixiBattleTokenLifecycleCoordinator.d.ts +44 -0
  30. package/dist/PixiBattleVisualLayout.d.ts +284 -0
  31. package/dist/PixiBattleWhipGeometry.d.ts +18 -0
  32. package/dist/PixiBattleWhipMotion.d.ts +63 -0
  33. package/dist/PixiBattleWhipResources.d.ts +53 -0
  34. package/dist/PixiCameraFocusController.d.ts +40 -0
  35. package/dist/PixiCombatMotion.d.ts +223 -0
  36. package/dist/PixiCurrentActorCardGlow.d.ts +37 -0
  37. package/dist/PixiCurrentActorHalo.d.ts +55 -0
  38. package/dist/PixiDirectionalMotionBlur.d.ts +12 -0
  39. package/dist/PixiDisplayRenderer.d.ts +85 -0
  40. package/dist/PixiEffectPlugin.d.ts +25 -0
  41. package/dist/PixiEndingSurface.d.ts +104 -0
  42. package/dist/PixiInvestigatorDossierInsanityFilter.d.ts +14 -0
  43. package/dist/PixiLocalGlowMesh.d.ts +38 -0
  44. package/dist/PixiMapEdgeShadow.d.ts +36 -0
  45. package/dist/PixiMapMediaSurface.d.ts +71 -0
  46. package/dist/PixiMapWorldUtils.d.ts +24 -0
  47. package/dist/PixiMediaBreathRuntime.d.ts +69 -0
  48. package/dist/PixiMotion.d.ts +42 -0
  49. package/dist/PixiObjectiveBreathingGlow.d.ts +39 -0
  50. package/dist/PixiPartyHudSurface.d.ts +58 -0
  51. package/dist/PixiPersistentEffectTransition.d.ts +23 -0
  52. package/dist/PixiPortraitResourceCard.d.ts +147 -0
  53. package/dist/PixiPreludeStoryTransition.d.ts +35 -0
  54. package/dist/PixiPreludeSurface.d.ts +203 -0
  55. package/dist/PixiProgressCinematic.d.ts +65 -0
  56. package/dist/PixiResultEffectSurface.d.ts +101 -0
  57. package/dist/PixiRetainedMeterAnimator.d.ts +44 -0
  58. package/dist/PixiRuntimeContext.d.ts +21 -0
  59. package/dist/PixiSceneGraph.d.ts +42 -0
  60. package/dist/PixiSceneMotion.d.ts +41 -0
  61. package/dist/PixiSceneMotionPorts.d.ts +83 -0
  62. package/dist/PixiScenePresentationDirector.d.ts +118 -0
  63. package/dist/PixiSessionLayout.d.ts +61 -0
  64. package/dist/PixiSessionSkin.d.ts +30 -0
  65. package/dist/PixiShaderRuntime.d.ts +191 -0
  66. package/dist/PixiStageFontLoader.d.ts +2 -0
  67. package/dist/PixiStageMetrics.d.ts +25 -0
  68. package/dist/PixiStageTheme.d.ts +26 -0
  69. package/dist/PixiStoryArchiveMotion.d.ts +19 -0
  70. package/dist/PixiStoryCardCut.d.ts +58 -0
  71. package/dist/PixiStorySurface.d.ts +285 -0
  72. package/dist/PixiStoryWorkspaceSurface.d.ts +64 -0
  73. package/dist/PixiSummaryBoardSurface.d.ts +112 -0
  74. package/dist/PixiSystemHudSurface.d.ts +73 -0
  75. package/dist/PixiTeamCheckCinematic.d.ts +34 -0
  76. package/dist/PixiTextTransitionEffect.d.ts +54 -0
  77. package/dist/PixiTokenPersistentStatus.d.ts +101 -0
  78. package/dist/PixiTokenWorld.d.ts +170 -0
  79. package/dist/PixiTypography.d.ts +96 -0
  80. package/dist/PixiVideoRuntime.d.ts +61 -0
  81. package/dist/PixiViewportController.d.ts +25 -0
  82. package/dist/ResultEffectTuning.d.ts +57 -0
  83. package/dist/RetainedStageSurface.d.ts +50 -0
  84. package/dist/SessionFieldEffectRuntime.d.ts +45 -0
  85. package/dist/SessionSceneHistory.d.ts +10 -0
  86. package/dist/SessionSceneRegistry.d.ts +31 -0
  87. package/dist/StoryEventCoordinator.d.ts +61 -0
  88. package/dist/effects/PixiEffectLayerRegistry.d.ts +54 -0
  89. package/dist/effects/PixiEffectScope.d.ts +20 -0
  90. package/dist/effects/PixiStableRandom.d.ts +2 -0
  91. package/dist/index.d.ts +92 -0
  92. package/dist/index.js +24184 -0
  93. package/dist/index.js.map +7 -0
  94. package/dist/recipes/EffectPrimitiveRuntimeRegistry.d.ts +28 -0
  95. package/dist/recipes/EffectRecipeExecutor.d.ts +73 -0
  96. package/dist/recipes/primitives.d.ts +39 -0
  97. package/dist/recipes/registry.d.ts +57 -0
  98. package/dist/recipes/schema.d.ts +93 -0
  99. package/dist/recipes.d.ts +5 -0
  100. package/dist/recipes.js +1384 -0
  101. package/dist/recipes.js.map +7 -0
  102. package/dist/story/PixiStoryPresentationEngine.d.ts +90 -0
  103. package/dist/story/StoryContentSurface.d.ts +34 -0
  104. package/dist/story/StoryImageFilter.d.ts +15 -0
  105. package/dist/story/StoryTimelineClock.d.ts +22 -0
  106. package/dist/story/StoryVisualMath.d.ts +6 -0
  107. package/dist/tuning/SessionTuningResolver.d.ts +1 -0
  108. package/dist/tuning/SessionTuningTypes.d.ts +1 -0
  109. package/dist/ui/PixiStagePrimitives.d.ts +36 -0
  110. package/dist/uniforms.d.ts +1 -0
  111. package/package.json +44 -4
@@ -0,0 +1,71 @@
1
+ import { type RuntimeLogger } from '@bardway/trpg-media';
2
+ import type { PixiSceneGraph } from './PixiSceneGraph.js';
3
+ import type { PixiAssetManager } from './PixiAssetManager.js';
4
+ import type { PixiMediaBreathRuntime } from './PixiMediaBreathRuntime.js';
5
+ import type { PixiVideoRuntime } from './PixiVideoRuntime.js';
6
+ import type { PixiBattleMapDissolve } from './PixiBattleMapDissolve.js';
7
+ import type { BattleViewportGridLayout } from './PixiSessionLayout.js';
8
+ export interface MapMediaSource {
9
+ id: string;
10
+ revision?: string;
11
+ imageUrl: string;
12
+ videoUrl?: string;
13
+ }
14
+ export type MapMediaStatus = 'ready' | 'fallback';
15
+ export interface MapMediaDependencies {
16
+ Sprite: typeof import('pixi.js').Sprite;
17
+ Graphics: typeof import('pixi.js').Graphics;
18
+ mediaBreath?: PixiMediaBreathRuntime;
19
+ videoRuntime?: PixiVideoRuntime;
20
+ requestRender(): void;
21
+ logger: RuntimeLogger;
22
+ fallbackColor: string;
23
+ }
24
+ /** Exact poster/dissolve/video readiness and replacement mechanics extracted from PixiBattleWorld. */
25
+ export declare class PixiMapMediaSurface {
26
+ private readonly scene;
27
+ private readonly assets;
28
+ private readonly dependencies;
29
+ private readonly mapDissolve;
30
+ private mapKey;
31
+ private mapSprite;
32
+ private mapSpriteKey;
33
+ private mapLoadVersion;
34
+ private mapMediaBreath;
35
+ private mapVideoBinding;
36
+ private mapVideoReady;
37
+ private mapVideoFailed;
38
+ private mapPosterTexture;
39
+ private mapReadiness;
40
+ private pendingMapTransition;
41
+ private deferredMapVideoUpgrade;
42
+ private layout;
43
+ private mapFallbackNode;
44
+ private activeResourceScope;
45
+ private owner;
46
+ private destroyed;
47
+ constructor(scene: PixiSceneGraph, assets: PixiAssetManager, dependencies: MapMediaDependencies, mapDissolve?: PixiBattleMapDissolve | null);
48
+ sync(input: {
49
+ owner: string;
50
+ map: MapMediaSource;
51
+ layout: BattleViewportGridLayout;
52
+ animate?: boolean;
53
+ }): void;
54
+ setReducedMotion(reduced: boolean): void;
55
+ setPaused(paused: boolean): void;
56
+ reset(): void;
57
+ destroy(): void;
58
+ waitForMapReady(mapSnapshot: MapMediaSource, signal: AbortSignal, timeoutMs: number): Promise<MapMediaStatus>;
59
+ waitForVideoReady(map: MapMediaSource, signal: AbortSignal): Promise<boolean>;
60
+ private syncMap;
61
+ private resolveMapKey;
62
+ private resolveMapDissolveSeed;
63
+ private commitPendingMapTransition;
64
+ private destroyMapPresentation;
65
+ private upgradeMapToVideo;
66
+ private beginMapReadiness;
67
+ private settleMapReadiness;
68
+ private syncMapFallback;
69
+ private destroyMapSprite;
70
+ private destroyMapFallback;
71
+ }
@@ -0,0 +1,24 @@
1
+ import type { PixiLayoutRect } from './PixiSessionLayout.js';
2
+ export interface TokenAvatarCrop {
3
+ x: number;
4
+ y: number;
5
+ width: number;
6
+ height: number;
7
+ }
8
+ export declare const resolveContainRect: (source: {
9
+ width: number;
10
+ height: number;
11
+ }, viewport: PixiLayoutRect) => PixiLayoutRect;
12
+ export declare const resolveCoverRect: (source: {
13
+ width: number;
14
+ height: number;
15
+ }, viewport: PixiLayoutRect) => PixiLayoutRect;
16
+ /** Covers a viewport while retaining the upper edge of the source image. */
17
+ export declare const resolveTopCoverRect: (source: {
18
+ width: number;
19
+ height: number;
20
+ }, viewport: PixiLayoutRect) => PixiLayoutRect;
21
+ export declare const resolveCroppedCoverRect: (source: {
22
+ width: number;
23
+ height: number;
24
+ }, viewport: PixiLayoutRect, crop?: TokenAvatarCrop) => PixiLayoutRect;
@@ -0,0 +1,69 @@
1
+ import type { Filter, Sprite, Ticker, UniformGroup } from 'pixi.js';
2
+ import type { PixiAnimationActivity } from './PixiAnimationActivity.js';
3
+ import type { SessionTuningResolver } from './tuning/SessionTuningResolver.js';
4
+ export type PixiMediaBreathCategory = 'primary' | 'map' | 'avatar';
5
+ export interface PixiMediaBreathBinding {
6
+ readonly filter: Filter;
7
+ release(): void;
8
+ }
9
+ export interface PixiMediaBreathFrame {
10
+ readonly breath: number;
11
+ readonly uiHighlightMultiplier: number;
12
+ }
13
+ interface Constructors {
14
+ Filter: typeof Filter;
15
+ UniformGroup: typeof UniformGroup;
16
+ }
17
+ export interface PixiMediaBreathSettings {
18
+ readonly enabled: boolean;
19
+ readonly contrast: number;
20
+ readonly shadowCrush: number;
21
+ readonly highlightBoost: number;
22
+ readonly dynamicStrength: number;
23
+ readonly brightReact: number;
24
+ readonly filterResolution: number;
25
+ readonly primaryGain: number;
26
+ readonly mapGain: number;
27
+ readonly avatarGain: number;
28
+ readonly uiHighlightGain: number;
29
+ readonly speedMultiplier: number;
30
+ }
31
+ export declare const DEFAULT_PIXI_MEDIA_BREATH_SETTINGS: PixiMediaBreathSettings;
32
+ export declare const resolveMediaBreathSettings: (tuning?: SessionTuningResolver) => PixiMediaBreathSettings;
33
+ export declare const resolveMediaBreathWave: (elapsedSeconds: number, phase?: number) => number;
34
+ export declare class PixiMediaBreathRuntime {
35
+ private readonly constructors;
36
+ private readonly ticker;
37
+ private readonly activity;
38
+ private readonly requestRender;
39
+ private readonly bindings;
40
+ private readonly highlightListeners;
41
+ private settings;
42
+ private elapsedSeconds;
43
+ private paused;
44
+ private active;
45
+ private suspended;
46
+ private reducedMotion;
47
+ private destroyed;
48
+ private releaseActivity;
49
+ constructor(constructors: Constructors, ticker: Ticker, activity: PixiAnimationActivity, requestRender: () => void, tuning?: SessionTuningResolver);
50
+ attach(sprite: Sprite, category: PixiMediaBreathCategory): PixiMediaBreathBinding;
51
+ subscribeUiHighlight(listener: (frame: PixiMediaBreathFrame) => void): () => void;
52
+ getFrame(): PixiMediaBreathFrame;
53
+ updateTuning(tuning: SessionTuningResolver | undefined): void;
54
+ setPaused(paused: boolean): void;
55
+ setActive(active: boolean): void;
56
+ syncPresentationState(active: boolean, suspended: boolean): void;
57
+ setSuspended(suspended: boolean): void;
58
+ setReducedMotion(reducedMotion: boolean): void;
59
+ reset(): void;
60
+ destroy(): void;
61
+ private releaseBinding;
62
+ private applyBinding;
63
+ private resolveCategoryBreath;
64
+ private resolveFrame;
65
+ private publishHighlightFrame;
66
+ private syncActivity;
67
+ private tick;
68
+ }
69
+ export {};
@@ -0,0 +1,42 @@
1
+ export declare const pixiMotion: {
2
+ readonly duration: {
3
+ readonly instant: 0;
4
+ readonly fast: 0.16;
5
+ readonly normal: 0.28;
6
+ readonly slow: 0.46;
7
+ readonly cinematic: 0.8;
8
+ };
9
+ readonly preset: {
10
+ readonly fadeIn: {
11
+ readonly duration: 0.28;
12
+ readonly ease: "power2.out";
13
+ };
14
+ readonly fadeOut: {
15
+ readonly duration: 0.16;
16
+ readonly ease: "power1.out";
17
+ };
18
+ readonly enter: {
19
+ readonly duration: 0.28;
20
+ readonly ease: "power3.out";
21
+ };
22
+ readonly emphasis: {
23
+ readonly duration: 0.46;
24
+ readonly ease: "power2.inOut";
25
+ };
26
+ };
27
+ readonly battleCurrentActor: {
28
+ readonly enterDurationMs: 280;
29
+ readonly enterOffsetPx: 4;
30
+ readonly breathePeriodMs: 2400;
31
+ readonly innerGlowAlpha: {
32
+ readonly min: 0.34;
33
+ readonly max: 0.58;
34
+ };
35
+ };
36
+ };
37
+ /** Existing battle effect timings stay explicit and do not become general UI values. */
38
+ export declare const pixiCinematicTimings: {
39
+ readonly impact: 0.12;
40
+ readonly resource: 0.28;
41
+ readonly return: 0.22;
42
+ };
@@ -0,0 +1,39 @@
1
+ import type { Container } from 'pixi.js';
2
+ export interface PixiObjectiveBreathingGlowConstructors {
3
+ Mesh?: typeof import('pixi.js').Mesh;
4
+ MeshGeometry?: typeof import('pixi.js').MeshGeometry;
5
+ Shader?: typeof import('pixi.js').Shader;
6
+ UniformGroup?: typeof import('pixi.js').UniformGroup;
7
+ }
8
+ export interface ObjectiveBreathingGlowLayout {
9
+ readonly width: number;
10
+ readonly height: number;
11
+ readonly cornerRadius: number;
12
+ readonly padding: number;
13
+ readonly coreWidth: number;
14
+ readonly softness: number;
15
+ readonly maxAlpha: number;
16
+ readonly maxScale: number;
17
+ readonly color: string;
18
+ }
19
+ /** One retained local shader surface for a map-objective cloud glow. */
20
+ export declare class PixiObjectiveBreathingGlow {
21
+ private readonly constructors;
22
+ private mesh;
23
+ private geometry;
24
+ private shader;
25
+ private uniforms;
26
+ private surfaceHalfWidth;
27
+ private surfaceHalfHeight;
28
+ private maxAlpha;
29
+ private maxScale;
30
+ private highlightMultiplier;
31
+ constructor(constructors: PixiObjectiveBreathingGlowConstructors);
32
+ configure(parent: Container, layout: ObjectiveBreathingGlowLayout): void;
33
+ setFrame(breath: number, staticPresentation?: boolean): void;
34
+ setHighlightMultiplier(multiplier: number): void;
35
+ hide(): void;
36
+ destroy(): void;
37
+ private ensure;
38
+ private getUniformValues;
39
+ }
@@ -0,0 +1,58 @@
1
+ import type { ColorMatrixFilter, Container, Filter, Graphics, Sprite, Text, Texture, UniformGroup } from 'pixi.js';
2
+ import type { PixiAssetManager } from './PixiAssetManager.js';
3
+ import { type PortraitCardTextures, type InvestigatorDossierStatusEntry, type PixiPartyMemberState } from './PixiPortraitResourceCard.js';
4
+ import type { PixiLayoutRect } from './PixiSessionLayout.js';
5
+ import type { PortraitCardPorts } from './PixiPortraitResourceCard.js';
6
+ import type { PixiSceneGraph } from './PixiSceneGraph.js';
7
+ import type { SessionTuningResolver } from './tuning/SessionTuningResolver.js';
8
+ import type { PixiAnimationDirector } from './PixiAnimationDirector.js';
9
+ import type { PixiMediaBreathRuntime } from './PixiMediaBreathRuntime.js';
10
+ export type { PixiPartyMemberState } from './PixiPortraitResourceCard.js';
11
+ export interface PreludeStoryPartyHudEntry {
12
+ readonly id: string;
13
+ readonly root: Container;
14
+ readonly targetX: number;
15
+ readonly targetY: number;
16
+ }
17
+ interface Constructors {
18
+ ColorMatrixFilter: typeof ColorMatrixFilter;
19
+ Container: typeof Container;
20
+ Filter: typeof Filter;
21
+ Graphics: typeof Graphics;
22
+ Sprite: new (texture?: Texture | import('pixi.js').SpriteOptions) => Sprite;
23
+ Text: new (options: import('pixi.js').TextOptions) => Text;
24
+ UniformGroup: typeof UniformGroup;
25
+ }
26
+ export declare class PixiPartyHudSurface {
27
+ private readonly assets;
28
+ private readonly constructors;
29
+ private readonly textures;
30
+ private readonly requestRender;
31
+ private readonly animation;
32
+ private readonly ports;
33
+ private readonly mediaBreath?;
34
+ readonly node: Container;
35
+ private readonly cards;
36
+ private readonly preludeStoryEntries;
37
+ private preludeStoryEntryActive;
38
+ private tuning;
39
+ private reducedMotion;
40
+ constructor(scene: PixiSceneGraph, assets: PixiAssetManager, constructors: Constructors, textures: PortraitCardTextures, requestRender: () => void, tuning: SessionTuningResolver | undefined, animation: PixiAnimationDirector, ports: {
41
+ card: PortraitCardPorts;
42
+ maxMembers: number;
43
+ resolveRects: (count: number) => readonly PixiLayoutRect[];
44
+ }, mediaBreath?: PixiMediaBreathRuntime | undefined);
45
+ sync(members: PixiPartyMemberState[], visible: boolean): void;
46
+ updateTuning(tuning: SessionTuningResolver | undefined): void;
47
+ setReducedMotion(reducedMotion: boolean): void;
48
+ setEarthquakeTransform(x: number, y: number, rotation: number, scale: number): void;
49
+ previewResourceChange(): void;
50
+ previewStatus(status: InvestigatorDossierStatusEntry): void;
51
+ preparePreludeStoryEntry(): void;
52
+ getPreludeStoryEntries(): readonly PreludeStoryPartyHudEntry[];
53
+ restorePreludeStoryEntry(visible: boolean): void;
54
+ reset(): void;
55
+ destroy(): void;
56
+ private createCard;
57
+ private stagePreludeStoryCard;
58
+ }
@@ -0,0 +1,23 @@
1
+ import type { PixiAnimationDirector } from './PixiAnimationDirector.js';
2
+ import type { SessionTuningResolver } from './tuning/SessionTuningResolver.js';
3
+ interface AlphaTarget {
4
+ alpha: number;
5
+ }
6
+ interface PixiPersistentEffectTransitionOptions {
7
+ readonly director: PixiAnimationDirector;
8
+ readonly getTuning: () => SessionTuningResolver | undefined;
9
+ readonly requestRender?: () => void;
10
+ }
11
+ /** Shared alpha envelope for retained Field and Global persistent effects. */
12
+ export declare class PixiPersistentEffectTransition {
13
+ private readonly options;
14
+ private active;
15
+ constructor(options: PixiPersistentEffectTransitionOptions);
16
+ fadeIn(target: AlphaTarget, targetAlpha: number, signal: AbortSignal): Promise<boolean>;
17
+ fadeOut(target: AlphaTarget, targetAlpha: number, signal: AbortSignal): Promise<boolean>;
18
+ setReducedMotion(reducedMotion: boolean): void;
19
+ cancel(reason: string): void;
20
+ private transition;
21
+ private resolveDuration;
22
+ }
23
+ export {};
@@ -0,0 +1,147 @@
1
+ import type { RuntimeLogger } from '@bardway/trpg-media';
2
+ export interface PortraitCardLayout {
3
+ cardWidth: number;
4
+ cardHeight: number;
5
+ portrait: PixiLayoutRect;
6
+ blood: {
7
+ x: number;
8
+ y: number;
9
+ size: number;
10
+ };
11
+ infoOffset: {
12
+ x: number;
13
+ y: number;
14
+ };
15
+ name: {
16
+ x: number;
17
+ y: number;
18
+ maxWidth: number;
19
+ minFontSize: number;
20
+ maxFontSize: number;
21
+ };
22
+ resources: {
23
+ labelX: number;
24
+ valueX: number;
25
+ valueYOffset: number;
26
+ rowY: number;
27
+ rowSpacing: number;
28
+ valueFontSize: number;
29
+ barX: number;
30
+ barYOffset: number;
31
+ barWidth: number;
32
+ barHeight: number;
33
+ tickCount: number;
34
+ };
35
+ }
36
+ export interface PortraitCardPorts {
37
+ logger: RuntimeLogger;
38
+ layout: PortraitCardLayout;
39
+ resourceSlots: number;
40
+ random(): number;
41
+ typography: ReturnType<typeof createPixiTypography>;
42
+ colors: {
43
+ mask: string;
44
+ paper: string;
45
+ paperEdge: string;
46
+ };
47
+ style: {
48
+ barBackground: string;
49
+ insanityTearGap: string;
50
+ name: string;
51
+ resourceDanger: string;
52
+ resourceFlash: string;
53
+ resourceNormal: string;
54
+ tick: string;
55
+ };
56
+ }
57
+ import type { ColorMatrixFilter, Container, Filter, Graphics, Sprite, Text, Texture, UniformGroup } from 'pixi.js';
58
+ import type { TokenAvatarCrop } from './PixiMapWorldUtils.js';
59
+ import { type PixiLayoutRect } from './PixiSessionLayout.js';
60
+ import type { createPixiTypography } from './PixiTypography.js';
61
+ import type { PixiAssetManager } from './PixiAssetManager.js';
62
+ import type { PixiAnimationDirector } from './PixiAnimationDirector.js';
63
+ import { type DossierInsanityMode } from './PixiInvestigatorDossierInsanityFilter.js';
64
+ import type { SessionTuningResolver } from './tuning/SessionTuningResolver.js';
65
+ import type { PixiMediaBreathRuntime } from './PixiMediaBreathRuntime.js';
66
+ export interface PortraitResource {
67
+ id: string;
68
+ label: string;
69
+ current?: number;
70
+ maximum?: number;
71
+ color: string;
72
+ }
73
+ export interface PixiPartyMemberState {
74
+ id: string;
75
+ name: string;
76
+ avatarUrl?: string;
77
+ avatarCrop?: TokenAvatarCrop;
78
+ resources: readonly PortraitResource[];
79
+ visualState: Partial<InvestigatorDossierStatus>;
80
+ }
81
+ export interface InvestigatorDossierStatus {
82
+ stain: boolean;
83
+ distorted: boolean;
84
+ grayscale: boolean;
85
+ }
86
+ export type InvestigatorDossierStatusEntry = 'stain' | 'distorted' | 'grayscale';
87
+ export declare const resolveInvestigatorDossierStatus: (state: Partial<InvestigatorDossierStatus>) => InvestigatorDossierStatus;
88
+ export declare const resolveInvestigatorDossierStatusEntry: (previous: InvestigatorDossierStatus, next: InvestigatorDossierStatus) => InvestigatorDossierStatusEntry | null;
89
+ export declare const resolveDossierResourceValueColor: (ratio: number, normalColor: string, dangerColor: string) => string;
90
+ export declare const fitDossierName: (name: string, maxCharacters: number) => string;
91
+ export declare const resolveDossierTiltDegrees: (id: string) => number;
92
+ export declare const resolveDossierInsanityMode: (value: unknown) => DossierInsanityMode;
93
+ export declare const resolveDossierBloodRotationRadians: (random?: () => number) => number;
94
+ export declare const resolveDossierBloodDisplaySize: (cardWidth: number, layout: PortraitCardLayout) => number;
95
+ export declare const resolveDossierInsanitySeed: (random?: () => number) => number;
96
+ interface Constructors {
97
+ ColorMatrixFilter: typeof ColorMatrixFilter;
98
+ Container: typeof Container;
99
+ Filter: typeof Filter;
100
+ Graphics: typeof Graphics;
101
+ Sprite: new (texture?: Texture | import('pixi.js').SpriteOptions) => Sprite;
102
+ Text: new (options: import('pixi.js').TextOptions) => Text;
103
+ UniformGroup: typeof UniformGroup;
104
+ }
105
+ export interface PortraitCardTextures {
106
+ background: Texture | null;
107
+ overlay: Texture | null;
108
+ }
109
+ export declare const resolveDossierNameColor: (tuning: SessionTuningResolver | undefined, fallback: string) => string;
110
+ export declare class PixiPortraitResourceCard {
111
+ private readonly id;
112
+ private readonly assets;
113
+ private readonly constructors;
114
+ private readonly textures;
115
+ private readonly animation;
116
+ private readonly requestRender;
117
+ private readonly ports;
118
+ private readonly mediaBreath?;
119
+ private disposed;
120
+ private readonly resourceScope;
121
+ readonly root: Container;
122
+ private readonly node;
123
+ private tuning;
124
+ private reducedMotion;
125
+ constructor(id: string, assets: PixiAssetManager, constructors: Constructors, textures: PortraitCardTextures, animation: PixiAnimationDirector, requestRender: () => void, ports: PortraitCardPorts, mediaBreath?: PixiMediaBreathRuntime | undefined);
126
+ sync(member: PixiPartyMemberState, rect: PixiLayoutRect, tuning: SessionTuningResolver | undefined): void;
127
+ setReducedMotion(reducedMotion: boolean): void;
128
+ resetMotion(): void;
129
+ previewResourceChange(): void;
130
+ previewStatus(status: InvestigatorDossierStatusEntry): void;
131
+ destroy(): void;
132
+ private drawFallback;
133
+ private syncName;
134
+ private syncResources;
135
+ private syncBlood;
136
+ private syncAvatar;
137
+ private applyAvatarGeometry;
138
+ private syncInsanity;
139
+ private syncDeath;
140
+ private playStatusEntry;
141
+ private playMajorWoundEntry;
142
+ private playInsanityEntry;
143
+ private playDeathEntry;
144
+ private cancelStatusMotion;
145
+ private restoreStatusVisuals;
146
+ }
147
+ export {};
@@ -0,0 +1,35 @@
1
+ import type { PixiLayoutRect } from './PixiSessionLayout.js';
2
+ export interface PreludeStoryTransitionTiming {
3
+ readonly backgroundDarkenDuration: number;
4
+ readonly moduleTravelDelay: number;
5
+ readonly moduleTravelDuration: number;
6
+ readonly storyBaseRevealDuration: number;
7
+ readonly finalHandoffDuration: number;
8
+ readonly partyHudEnterDuration: number;
9
+ readonly partyHudMaxStagger: number;
10
+ readonly moduleTravelEase: string;
11
+ readonly hudEnterEase: string;
12
+ }
13
+ export declare const DEFAULT_PRELUDE_STORY_TRANSITION_TIMING: PreludeStoryTransitionTiming;
14
+ export declare const resolvePreludeStoryTimeline: (timing: PreludeStoryTransitionTiming) => {
15
+ storyBaseRevealAt: number;
16
+ storyCommitAt: number;
17
+ completeAt: number;
18
+ };
19
+ export declare const resolvePreludeStoryModuleTarget: (aperture: {
20
+ readonly width: number;
21
+ readonly height: number;
22
+ }, textureSize: {
23
+ readonly width: number;
24
+ readonly height: number;
25
+ } | null, media: PixiLayoutRect) => {
26
+ rect: PixiLayoutRect;
27
+ x: number;
28
+ y: number;
29
+ scaleX: number;
30
+ scaleY: number;
31
+ };
32
+ export declare const resolvePreludeStoryPortraitOrder: <T extends {
33
+ readonly id: string;
34
+ }>(entries: readonly T[]) => T[];
35
+ export declare const resolvePreludeStoryPartyHudDelay: (id: string, maxDelay: number) => number;