@doodle-engine/react 0.0.1

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 (46) hide show
  1. package/dist/GameProvider.d.ts +38 -0
  2. package/dist/GameProvider.d.ts.map +1 -0
  3. package/dist/GameRenderer.d.ts +8 -0
  4. package/dist/GameRenderer.d.ts.map +1 -0
  5. package/dist/GameShell.d.ts +41 -0
  6. package/dist/GameShell.d.ts.map +1 -0
  7. package/dist/components/CharacterList.d.ts +11 -0
  8. package/dist/components/CharacterList.d.ts.map +1 -0
  9. package/dist/components/ChoiceList.d.ts +11 -0
  10. package/dist/components/ChoiceList.d.ts.map +1 -0
  11. package/dist/components/DialogueBox.d.ts +10 -0
  12. package/dist/components/DialogueBox.d.ts.map +1 -0
  13. package/dist/components/Inventory.d.ts +10 -0
  14. package/dist/components/Inventory.d.ts.map +1 -0
  15. package/dist/components/Journal.d.ts +11 -0
  16. package/dist/components/Journal.d.ts.map +1 -0
  17. package/dist/components/LocationView.d.ts +10 -0
  18. package/dist/components/LocationView.d.ts.map +1 -0
  19. package/dist/components/MapView.d.ts +11 -0
  20. package/dist/components/MapView.d.ts.map +1 -0
  21. package/dist/components/NotificationArea.d.ts +12 -0
  22. package/dist/components/NotificationArea.d.ts.map +1 -0
  23. package/dist/components/PauseMenu.d.ts +19 -0
  24. package/dist/components/PauseMenu.d.ts.map +1 -0
  25. package/dist/components/SaveLoadPanel.d.ts +12 -0
  26. package/dist/components/SaveLoadPanel.d.ts.map +1 -0
  27. package/dist/components/SettingsPanel.d.ts +26 -0
  28. package/dist/components/SettingsPanel.d.ts.map +1 -0
  29. package/dist/components/SplashScreen.d.ts +19 -0
  30. package/dist/components/SplashScreen.d.ts.map +1 -0
  31. package/dist/components/TitleScreen.d.ts +23 -0
  32. package/dist/components/TitleScreen.d.ts.map +1 -0
  33. package/dist/components/VideoPlayer.d.ts +18 -0
  34. package/dist/components/VideoPlayer.d.ts.map +1 -0
  35. package/dist/hooks/useAudioManager.d.ts +43 -0
  36. package/dist/hooks/useAudioManager.d.ts.map +1 -0
  37. package/dist/hooks/useGame.d.ts +13 -0
  38. package/dist/hooks/useGame.d.ts.map +1 -0
  39. package/dist/hooks/useUISounds.d.ts +40 -0
  40. package/dist/hooks/useUISounds.d.ts.map +1 -0
  41. package/dist/index.d.ts +46 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/react.cjs +22 -0
  44. package/dist/react.js +1063 -0
  45. package/dist/tsconfig.tsbuildinfo +1 -0
  46. package/package.json +52 -0
@@ -0,0 +1,38 @@
1
+ /**
2
+ * GameProvider - React context provider for the game engine
3
+ *
4
+ * Holds the engine instance and current snapshot state.
5
+ * Provides action methods that update the snapshot when called.
6
+ */
7
+ import React, { type ReactNode } from 'react';
8
+ import { Engine } from '@doodle-engine/core';
9
+ import type { Snapshot, SaveData } from '@doodle-engine/core';
10
+ export interface GameContextValue {
11
+ snapshot: Snapshot;
12
+ actions: {
13
+ selectChoice: (choiceId: string) => void;
14
+ talkTo: (characterId: string) => void;
15
+ takeItem: (itemId: string) => void;
16
+ travelTo: (locationId: string) => void;
17
+ writeNote: (title: string, text: string) => void;
18
+ deleteNote: (noteId: string) => void;
19
+ setLocale: (locale: string) => void;
20
+ saveGame: () => SaveData;
21
+ loadGame: (saveData: SaveData) => void;
22
+ };
23
+ }
24
+ export declare const GameContext: React.Context<GameContextValue | null>;
25
+ export interface GameProviderProps {
26
+ /** Engine instance (already initialized with registry) */
27
+ engine: Engine;
28
+ /** Initial snapshot (from newGame or loadGame) */
29
+ initialSnapshot: Snapshot;
30
+ /** Children components */
31
+ children: ReactNode;
32
+ }
33
+ /**
34
+ * Provider component that wraps the game UI
35
+ * Manages engine state and provides actions to child components
36
+ */
37
+ export declare function GameProvider({ engine, initialSnapshot, children }: GameProviderProps): import("react/jsx-runtime").JSX.Element;
38
+ //# sourceMappingURL=GameProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GameProvider.d.ts","sourceRoot":"","sources":["../src/GameProvider.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,EAAwC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAA;IAClB,OAAO,EAAE;QACP,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;QACxC,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;QACrC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;QAClC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;QACtC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;QAChD,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;QACpC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;QACnC,QAAQ,EAAE,MAAM,QAAQ,CAAA;QACxB,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAA;KACvC,CAAA;CACF;AAED,eAAO,MAAM,WAAW,wCAA+C,CAAA;AAEvE,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAA;IACd,kDAAkD;IAClD,eAAe,EAAE,QAAQ,CAAA;IACzB,0BAA0B;IAC1B,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAgGpF"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * GameRenderer - Main component that renders the complete game UI
3
+ */
4
+ export interface GameRendererProps {
5
+ className?: string;
6
+ }
7
+ export declare function GameRenderer({ className }: GameRendererProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=GameRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GameRenderer.d.ts","sourceRoot":"","sources":["../src/GameRenderer.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAcH,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,YAAY,CAAC,EAAE,SAAc,EAAE,EAAE,iBAAiB,2CAgEjE"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * GameShell - Complete game wrapper with splash, title, menus
3
+ *
4
+ * Manages the game lifecycle: splash → title → playing
5
+ * Includes pause menu, settings, and video playback.
6
+ * Wraps GameProvider + GameRenderer with full shell chrome.
7
+ */
8
+ import type { ContentRegistry, GameConfig } from '@doodle-engine/core';
9
+ import type { UISoundConfig } from './hooks/useUISounds';
10
+ import type { AudioManagerOptions } from './hooks/useAudioManager';
11
+ export interface GameShellProps {
12
+ /** Content registry (from /api/content) */
13
+ registry: ContentRegistry;
14
+ /** Game config (from /api/content) */
15
+ config: GameConfig;
16
+ /** Game title for title screen */
17
+ title?: string;
18
+ /** Subtitle text */
19
+ subtitle?: string;
20
+ /** Logo image source */
21
+ logoSrc?: string;
22
+ /** Splash screen duration in ms (0 to skip) */
23
+ splashDuration?: number;
24
+ /** UI sound configuration, or false to disable */
25
+ uiSounds?: UISoundConfig | false;
26
+ /** Audio manager options */
27
+ audioOptions?: AudioManagerOptions;
28
+ /** localStorage key for saves */
29
+ storageKey?: string;
30
+ /** Available languages for settings */
31
+ availableLocales?: {
32
+ code: string;
33
+ label: string;
34
+ }[];
35
+ /** Video base path */
36
+ videoBasePath?: string;
37
+ /** CSS class */
38
+ className?: string;
39
+ }
40
+ export declare function GameShell({ registry, config, title, subtitle, logoSrc, splashDuration, uiSounds: uiSoundsConfig, audioOptions, storageKey, availableLocales, videoBasePath, className, }: GameShellProps): import("react/jsx-runtime").JSX.Element | null;
41
+ //# sourceMappingURL=GameShell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GameShell.d.ts","sourceRoot":"","sources":["../src/GameShell.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAiC,MAAM,qBAAqB,CAAA;AAKrG,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,qBAAqB,CAAA;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AASlE,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,QAAQ,EAAE,eAAe,CAAA;IACzB,sCAAsC;IACtC,MAAM,EAAE,UAAU,CAAA;IAClB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,aAAa,GAAG,KAAK,CAAA;IAChC,4BAA4B;IAC5B,YAAY,CAAC,EAAE,mBAAmB,CAAA;IAClC,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uCAAuC;IACvC,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACpD,sBAAsB;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,MAAM,EACN,KAAuB,EACvB,QAAQ,EACR,OAAO,EACP,cAAqB,EACrB,QAAQ,EAAE,cAAc,EACxB,YAAY,EACZ,UAAiC,EACjC,gBAAgB,EAChB,aAAwB,EACxB,SAAc,GACf,EAAE,cAAc,kDA0MhB"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * CharacterList - Displays characters at current location
3
+ */
4
+ import type { SnapshotCharacter } from '@doodle-engine/core';
5
+ export interface CharacterListProps {
6
+ characters: SnapshotCharacter[];
7
+ onTalkTo: (characterId: string) => void;
8
+ className?: string;
9
+ }
10
+ export declare function CharacterList({ characters, onTalkTo, className, }: CharacterListProps): import("react/jsx-runtime").JSX.Element | null;
11
+ //# sourceMappingURL=CharacterList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CharacterList.d.ts","sourceRoot":"","sources":["../../src/components/CharacterList.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE5D,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,iBAAiB,EAAE,CAAA;IAC/B,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,QAAQ,EACR,SAAc,GACf,EAAE,kBAAkB,kDA4BpB"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * ChoiceList - Displays available dialogue choices
3
+ */
4
+ import type { SnapshotChoice } from '@doodle-engine/core';
5
+ export interface ChoiceListProps {
6
+ choices: SnapshotChoice[];
7
+ onSelectChoice: (choiceId: string) => void;
8
+ className?: string;
9
+ }
10
+ export declare function ChoiceList({ choices, onSelectChoice, className }: ChoiceListProps): import("react/jsx-runtime").JSX.Element | null;
11
+ //# sourceMappingURL=ChoiceList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChoiceList.d.ts","sourceRoot":"","sources":["../../src/components/ChoiceList.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,SAAc,EAAE,EAAE,eAAe,kDAkBtF"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * DialogueBox - Displays current dialogue node
3
+ */
4
+ import type { SnapshotDialogue } from '@doodle-engine/core';
5
+ export interface DialogueBoxProps {
6
+ dialogue: SnapshotDialogue;
7
+ className?: string;
8
+ }
9
+ export declare function DialogueBox({ dialogue, className }: DialogueBoxProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=DialogueBox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DialogueBox.d.ts","sourceRoot":"","sources":["../../src/components/DialogueBox.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAc,EAAE,EAAE,gBAAgB,2CAezE"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Inventory - Displays player's items with click-to-inspect
3
+ */
4
+ import type { SnapshotItem } from '@doodle-engine/core';
5
+ export interface InventoryProps {
6
+ items: SnapshotItem[];
7
+ className?: string;
8
+ }
9
+ export declare function Inventory({ items, className }: InventoryProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=Inventory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Inventory.d.ts","sourceRoot":"","sources":["../../src/components/Inventory.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,SAAc,EAAE,EAAE,cAAc,2CAyClE"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Journal - Displays unlocked journal entries and quests
3
+ */
4
+ import type { SnapshotQuest, SnapshotJournalEntry } from '@doodle-engine/core';
5
+ export interface JournalProps {
6
+ quests: SnapshotQuest[];
7
+ entries: SnapshotJournalEntry[];
8
+ className?: string;
9
+ }
10
+ export declare function Journal({ quests, entries, className }: JournalProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=Journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Journal.d.ts","sourceRoot":"","sources":["../../src/components/Journal.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE9E,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,EAAE,CAAA;IACvB,OAAO,EAAE,oBAAoB,EAAE,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAc,EAAE,EAAE,YAAY,2CAmCxE"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * LocationView - Displays current location
3
+ */
4
+ import type { SnapshotLocation } from '@doodle-engine/core';
5
+ export interface LocationViewProps {
6
+ location: SnapshotLocation;
7
+ className?: string;
8
+ }
9
+ export declare function LocationView({ location, className }: LocationViewProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=LocationView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocationView.d.ts","sourceRoot":"","sources":["../../src/components/LocationView.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,SAAc,EAAE,EAAE,iBAAiB,2CAe3E"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * MapView - Displays the map with travel destinations
3
+ */
4
+ import type { SnapshotMap } from '@doodle-engine/core';
5
+ export interface MapViewProps {
6
+ map: SnapshotMap | null;
7
+ onTravelTo: (locationId: string) => void;
8
+ className?: string;
9
+ }
10
+ export declare function MapView({ map, onTravelTo, className }: MapViewProps): import("react/jsx-runtime").JSX.Element | null;
11
+ //# sourceMappingURL=MapView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapView.d.ts","sourceRoot":"","sources":["../../src/components/MapView.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;IACvB,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,OAAO,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,SAAc,EAAE,EAAE,YAAY,kDAiCxE"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * NotificationArea - Displays notifications from effects
3
+ *
4
+ * Notifications are transient: the engine includes them in exactly one snapshot,
5
+ * then clears them. This component simply renders whatever is in the snapshot.
6
+ */
7
+ export interface NotificationAreaProps {
8
+ notifications: string[];
9
+ className?: string;
10
+ }
11
+ export declare function NotificationArea({ notifications, className, }: NotificationAreaProps): import("react/jsx-runtime").JSX.Element | null;
12
+ //# sourceMappingURL=NotificationArea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationArea.d.ts","sourceRoot":"","sources":["../../src/components/NotificationArea.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,aAAa,EACb,SAAc,GACf,EAAE,qBAAqB,kDAcvB"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * PauseMenu - In-game overlay with Resume, Save, Load, Settings, Quit
3
+ */
4
+ export interface PauseMenuProps {
5
+ /** Resume gameplay */
6
+ onResume: () => void;
7
+ /** Save the game */
8
+ onSave: () => void;
9
+ /** Load a saved game */
10
+ onLoad: () => void;
11
+ /** Open settings */
12
+ onSettings: () => void;
13
+ /** Quit to title screen */
14
+ onQuitToTitle: () => void;
15
+ /** CSS class */
16
+ className?: string;
17
+ }
18
+ export declare function PauseMenu({ onResume, onSave, onLoad, onSettings, onQuitToTitle, className, }: PauseMenuProps): import("react/jsx-runtime").JSX.Element;
19
+ //# sourceMappingURL=PauseMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PauseMenu.d.ts","sourceRoot":"","sources":["../../src/components/PauseMenu.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,sBAAsB;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,oBAAoB;IACpB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,wBAAwB;IACxB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,oBAAoB;IACpB,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,2BAA2B;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,MAAM,EACN,MAAM,EACN,UAAU,EACV,aAAa,EACb,SAAc,GACf,EAAE,cAAc,2CAehB"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * SaveLoadPanel - Save and load game state via localStorage
3
+ */
4
+ import type { SaveData } from '@doodle-engine/core';
5
+ export interface SaveLoadPanelProps {
6
+ onSave: () => SaveData;
7
+ onLoad: (saveData: SaveData) => void;
8
+ storageKey?: string;
9
+ className?: string;
10
+ }
11
+ export declare function SaveLoadPanel({ onSave, onLoad, storageKey, className, }: SaveLoadPanelProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=SaveLoadPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SaveLoadPanel.d.ts","sourceRoot":"","sources":["../../src/components/SaveLoadPanel.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAEnD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,QAAQ,CAAA;IACtB,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAA;IACpC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,MAAM,EACN,UAAiC,EACjC,SAAc,GACf,EAAE,kBAAkB,2CAgCpB"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * SettingsPanel - Volume controls and language selection
3
+ */
4
+ import type { AudioManagerControls } from '../hooks/useAudioManager';
5
+ import type { UISoundControls } from '../hooks/useUISounds';
6
+ export interface SettingsPanelProps {
7
+ /** Audio manager controls for volume */
8
+ audioControls: AudioManagerControls;
9
+ /** UI sound controls */
10
+ uiSoundControls?: UISoundControls;
11
+ /** Available languages */
12
+ availableLocales?: {
13
+ code: string;
14
+ label: string;
15
+ }[];
16
+ /** Current language code */
17
+ currentLocale?: string;
18
+ /** Language change handler */
19
+ onLocaleChange?: (locale: string) => void;
20
+ /** Go back / close settings */
21
+ onBack: () => void;
22
+ /** CSS class */
23
+ className?: string;
24
+ }
25
+ export declare function SettingsPanel({ audioControls, uiSoundControls, availableLocales, currentLocale, onLocaleChange, onBack, className, }: SettingsPanelProps): import("react/jsx-runtime").JSX.Element;
26
+ //# sourceMappingURL=SettingsPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsPanel.d.ts","sourceRoot":"","sources":["../../src/components/SettingsPanel.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAE3D,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,aAAa,EAAE,oBAAoB,CAAA;IACnC,wBAAwB;IACxB,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,0BAA0B;IAC1B,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACpD,4BAA4B;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,+BAA+B;IAC/B,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,aAAa,CAAC,EAC5B,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,MAAM,EACN,SAAc,GACf,EAAE,kBAAkB,2CAwDpB"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * SplashScreen - Brief logo/loading screen
3
+ *
4
+ * Displays a logo and title, then auto-advances after a duration.
5
+ */
6
+ export interface SplashScreenProps {
7
+ /** Logo image source */
8
+ logoSrc?: string;
9
+ /** Game title */
10
+ title?: string;
11
+ /** Called when splash completes */
12
+ onComplete: () => void;
13
+ /** Duration in ms before auto-advancing */
14
+ duration?: number;
15
+ /** CSS class */
16
+ className?: string;
17
+ }
18
+ export declare function SplashScreen({ logoSrc, title, onComplete, duration, className, }: SplashScreenProps): import("react/jsx-runtime").JSX.Element;
19
+ //# sourceMappingURL=SplashScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplashScreen.d.ts","sourceRoot":"","sources":["../../src/components/SplashScreen.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mCAAmC;IACnC,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,UAAU,EACV,QAAe,EACf,SAAc,GACf,EAAE,iBAAiB,2CAanB"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * TitleScreen - Main menu with New Game, Continue, Settings
3
+ */
4
+ export interface TitleScreenProps {
5
+ /** Game title */
6
+ title?: string;
7
+ /** Subtitle text */
8
+ subtitle?: string;
9
+ /** Logo image source */
10
+ logoSrc?: string;
11
+ /** Whether a save exists to continue from */
12
+ hasSaveData: boolean;
13
+ /** Start a new game */
14
+ onNewGame: () => void;
15
+ /** Continue from save */
16
+ onContinue: () => void;
17
+ /** Open settings */
18
+ onSettings: () => void;
19
+ /** CSS class */
20
+ className?: string;
21
+ }
22
+ export declare function TitleScreen({ title, subtitle, logoSrc, hasSaveData, onNewGame, onContinue, onSettings, className, }: TitleScreenProps): import("react/jsx-runtime").JSX.Element;
23
+ //# sourceMappingURL=TitleScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TitleScreen.d.ts","sourceRoot":"","sources":["../../src/components/TitleScreen.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6CAA6C;IAC7C,WAAW,EAAE,OAAO,CAAA;IACpB,uBAAuB;IACvB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,yBAAyB;IACzB,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,oBAAoB;IACpB,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAuB,EACvB,QAAQ,EACR,OAAO,EACP,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAc,GACf,EAAE,gBAAgB,2CAelB"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * VideoPlayer - Fullscreen video/cutscene overlay
3
+ *
4
+ * Plays a video file fullscreen. Supports skip via click or keypress.
5
+ * Calls onComplete when the video ends or is skipped.
6
+ */
7
+ export interface VideoPlayerProps {
8
+ /** Video file path */
9
+ src: string;
10
+ /** Base path for video files */
11
+ basePath?: string;
12
+ /** Called when video ends or is skipped */
13
+ onComplete: () => void;
14
+ /** CSS class */
15
+ className?: string;
16
+ }
17
+ export declare function VideoPlayer({ src, basePath, onComplete, className, }: VideoPlayerProps): import("react/jsx-runtime").JSX.Element;
18
+ //# sourceMappingURL=VideoPlayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoPlayer.d.ts","sourceRoot":"","sources":["../../src/components/VideoPlayer.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,WAAW,CAAC,EAC1B,GAAG,EACH,QAAmB,EACnB,UAAU,EACV,SAAc,GACf,EAAE,gBAAgB,2CA+BlB"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * useAudioManager - Manages game audio channels
3
+ *
4
+ * Handles three audio channels:
5
+ * - Music: Background music (loops, crossfades between tracks)
6
+ * - Sound: Sound effects (one-shots from pendingSounds array)
7
+ * - Voice: Dialogue voice (one at a time, from dialogue.voice)
8
+ *
9
+ * Watches snapshot for audio cues and plays them automatically
10
+ */
11
+ import type { Snapshot } from '@doodle-engine/core';
12
+ export interface AudioManagerOptions {
13
+ /** Base URL for audio assets */
14
+ audioBasePath?: string;
15
+ /** Master volume (0-1) */
16
+ masterVolume?: number;
17
+ /** Music volume (0-1) */
18
+ musicVolume?: number;
19
+ /** Sound effects volume (0-1) */
20
+ soundVolume?: number;
21
+ /** Voice volume (0-1) */
22
+ voiceVolume?: number;
23
+ /** Music crossfade duration in ms */
24
+ crossfadeDuration?: number;
25
+ }
26
+ export interface AudioManagerControls {
27
+ /** Set master volume */
28
+ setMasterVolume: (volume: number) => void;
29
+ /** Set music volume */
30
+ setMusicVolume: (volume: number) => void;
31
+ /** Set sound volume */
32
+ setSoundVolume: (volume: number) => void;
33
+ /** Set voice volume */
34
+ setVoiceVolume: (volume: number) => void;
35
+ /** Stop all audio */
36
+ stopAll: () => void;
37
+ }
38
+ /**
39
+ * Audio manager hook
40
+ * Watches snapshot for audio changes and manages playback
41
+ */
42
+ export declare function useAudioManager(snapshot: Snapshot, options?: AudioManagerOptions): AudioManagerControls;
43
+ //# sourceMappingURL=useAudioManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAudioManager.d.ts","sourceRoot":"","sources":["../../src/hooks/useAudioManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAEnD,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,wBAAwB;IACxB,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,uBAAuB;IACvB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,uBAAuB;IACvB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,uBAAuB;IACvB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,qBAAqB;IACrB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,mBAAwB,GAChC,oBAAoB,CA8LtB"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * useGame hook - Access game state and actions from context
3
+ *
4
+ * Must be used within a GameProvider
5
+ */
6
+ import { type GameContextValue } from '../GameProvider';
7
+ /**
8
+ * Hook to access the current snapshot and game actions
9
+ * @returns snapshot and actions object
10
+ * @throws Error if used outside GameProvider
11
+ */
12
+ export declare function useGame(): GameContextValue;
13
+ //# sourceMappingURL=useGame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGame.d.ts","sourceRoot":"","sources":["../../src/hooks/useGame.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEpE;;;;GAIG;AACH,wBAAgB,OAAO,IAAI,gBAAgB,CAQ1C"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * useUISounds - Manages UI chrome sounds (clicks, menus)
3
+ *
4
+ * Separate from useAudioManager which handles game content audio.
5
+ * This hook is for renderer UI interactions only.
6
+ */
7
+ export interface UISoundConfig {
8
+ /** Whether UI sounds are enabled */
9
+ enabled?: boolean;
10
+ /** Base URL for UI sound files */
11
+ basePath?: string;
12
+ /** Volume for UI sounds (0-1) */
13
+ volume?: number;
14
+ /** Sound file mappings */
15
+ sounds?: {
16
+ click?: string;
17
+ menuOpen?: string;
18
+ menuClose?: string;
19
+ };
20
+ }
21
+ export interface UISoundControls {
22
+ /** Play the click sound */
23
+ playClick: () => void;
24
+ /** Play the menu open sound */
25
+ playMenuOpen: () => void;
26
+ /** Play the menu close sound */
27
+ playMenuClose: () => void;
28
+ /** Play a sound by key */
29
+ playSound: (key: string) => void;
30
+ /** Enable or disable UI sounds */
31
+ setEnabled: (enabled: boolean) => void;
32
+ /** Set UI sound volume */
33
+ setVolume: (volume: number) => void;
34
+ /** Whether UI sounds are currently enabled */
35
+ enabled: boolean;
36
+ /** Current volume */
37
+ volume: number;
38
+ }
39
+ export declare function useUISounds(config?: UISoundConfig): UISoundControls;
40
+ //# sourceMappingURL=useUISounds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUISounds.d.ts","sourceRoot":"","sources":["../../src/hooks/useUISounds.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0BAA0B;IAC1B,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,gCAAgC;IAChC,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,0BAA0B;IAC1B,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,kCAAkC;IAClC,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,0BAA0B;IAC1B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAA;IAChB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAA;CACf;AAQD,wBAAgB,WAAW,CAAC,MAAM,GAAE,aAAkB,GAAG,eAAe,CA8CvE"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @doodle-engine/react
3
+ *
4
+ * React renderer for the Doodle Engine
5
+ */
6
+ export { VERSION } from '@doodle-engine/core';
7
+ export { GameProvider, GameContext } from './GameProvider';
8
+ export type { GameContextValue, GameProviderProps } from './GameProvider';
9
+ export { useGame } from './hooks/useGame';
10
+ export { useAudioManager } from './hooks/useAudioManager';
11
+ export type { AudioManagerOptions, AudioManagerControls } from './hooks/useAudioManager';
12
+ export { useUISounds } from './hooks/useUISounds';
13
+ export type { UISoundConfig, UISoundControls } from './hooks/useUISounds';
14
+ export { GameRenderer } from './GameRenderer';
15
+ export type { GameRendererProps } from './GameRenderer';
16
+ export { GameShell } from './GameShell';
17
+ export type { GameShellProps } from './GameShell';
18
+ export { DialogueBox } from './components/DialogueBox';
19
+ export type { DialogueBoxProps } from './components/DialogueBox';
20
+ export { ChoiceList } from './components/ChoiceList';
21
+ export type { ChoiceListProps } from './components/ChoiceList';
22
+ export { LocationView } from './components/LocationView';
23
+ export type { LocationViewProps } from './components/LocationView';
24
+ export { CharacterList } from './components/CharacterList';
25
+ export type { CharacterListProps } from './components/CharacterList';
26
+ export { Inventory } from './components/Inventory';
27
+ export type { InventoryProps } from './components/Inventory';
28
+ export { Journal } from './components/Journal';
29
+ export type { JournalProps } from './components/Journal';
30
+ export { MapView } from './components/MapView';
31
+ export type { MapViewProps } from './components/MapView';
32
+ export { NotificationArea } from './components/NotificationArea';
33
+ export type { NotificationAreaProps } from './components/NotificationArea';
34
+ export { SaveLoadPanel } from './components/SaveLoadPanel';
35
+ export type { SaveLoadPanelProps } from './components/SaveLoadPanel';
36
+ export { VideoPlayer } from './components/VideoPlayer';
37
+ export type { VideoPlayerProps } from './components/VideoPlayer';
38
+ export { SplashScreen } from './components/SplashScreen';
39
+ export type { SplashScreenProps } from './components/SplashScreen';
40
+ export { TitleScreen } from './components/TitleScreen';
41
+ export type { TitleScreenProps } from './components/TitleScreen';
42
+ export { PauseMenu } from './components/PauseMenu';
43
+ export type { PauseMenuProps } from './components/PauseMenu';
44
+ export { SettingsPanel } from './components/SettingsPanel';
45
+ export type { SettingsPanelProps } from './components/SettingsPanel';
46
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAG7C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC1D,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAGzE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAGzE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAGvD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAGjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA"}