@mml-io/3d-web-experience-client 0.26.1 → 0.27.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 (60) hide show
  1. package/build/AvatarType.d.ts.map +1 -0
  2. package/build/ClientEventEmitter.d.ts +32 -0
  3. package/build/ClientEventEmitter.d.ts.map +1 -0
  4. package/build/DefaultAvatarSelectionPlugin.d.ts +36 -0
  5. package/build/DefaultAvatarSelectionPlugin.d.ts.map +1 -0
  6. package/build/DefaultChatPlugin.d.ts +44 -0
  7. package/build/DefaultChatPlugin.d.ts.map +1 -0
  8. package/build/DefaultHUDPlugin.d.ts +18 -0
  9. package/build/DefaultHUDPlugin.d.ts.map +1 -0
  10. package/build/DefaultRespawnButtonPlugin.d.ts +13 -0
  11. package/build/DefaultRespawnButtonPlugin.d.ts.map +1 -0
  12. package/build/DefaultVirtualJoystickPlugin.d.ts +16 -0
  13. package/build/DefaultVirtualJoystickPlugin.d.ts.map +1 -0
  14. package/build/Networked3dWebExperienceClient.d.ts +113 -17
  15. package/build/Networked3dWebExperienceClient.d.ts.map +1 -1
  16. package/build/WorldConnection.d.ts +142 -0
  17. package/build/WorldConnection.d.ts.map +1 -0
  18. package/build/index.d.ts +10 -0
  19. package/build/index.d.ts.map +1 -1
  20. package/build/index.js +2593 -1256
  21. package/build/index.js.map +4 -4
  22. package/build/plugins.d.ts +16 -0
  23. package/build/plugins.d.ts.map +1 -0
  24. package/package.json +25 -12
  25. package/build/avatar-selection-ui/AvatarSelectionUI.d.ts +0 -21
  26. package/build/avatar-selection-ui/AvatarSelectionUI.d.ts.map +0 -1
  27. package/build/avatar-selection-ui/AvatarType.d.ts.map +0 -1
  28. package/build/avatar-selection-ui/components/AvatarPanel/AvatarSectionUIComponent.d.ts +0 -15
  29. package/build/avatar-selection-ui/components/AvatarPanel/AvatarSectionUIComponent.d.ts.map +0 -1
  30. package/build/avatar-selection-ui/index.d.ts +0 -3
  31. package/build/avatar-selection-ui/index.d.ts.map +0 -1
  32. package/build/chat-ui/TextChatUI.d.ts +0 -26
  33. package/build/chat-ui/TextChatUI.d.ts.map +0 -1
  34. package/build/chat-ui/components/ChatPanel/TextChatUIComponent.d.ts +0 -10
  35. package/build/chat-ui/components/ChatPanel/TextChatUIComponent.d.ts.map +0 -1
  36. package/build/chat-ui/components/Input/InputBox.d.ts +0 -10
  37. package/build/chat-ui/components/Input/InputBox.d.ts.map +0 -1
  38. package/build/chat-ui/components/Message/Message.d.ts +0 -10
  39. package/build/chat-ui/components/Message/Message.d.ts.map +0 -1
  40. package/build/chat-ui/components/Messages/Messages.d.ts +0 -13
  41. package/build/chat-ui/components/Messages/Messages.d.ts.map +0 -1
  42. package/build/chat-ui/helpers.d.ts +0 -4
  43. package/build/chat-ui/helpers.d.ts.map +0 -1
  44. package/build/chat-ui/index.d.ts +0 -2
  45. package/build/chat-ui/index.d.ts.map +0 -1
  46. package/build/index.css +0 -875
  47. package/build/index.css.map +0 -7
  48. package/build/src/Networked3dWebExperience.module.css.d.ts +0 -4
  49. package/build/src/Networked3dWebExperience.module.d.css.ts +0 -4
  50. package/build/src/avatar-selection-ui/components/AvatarPanel/AvatarSelectionUIComponent.module.css.d.ts +0 -26
  51. package/build/src/avatar-selection-ui/components/AvatarPanel/AvatarSelectionUIComponent.module.d.css.ts +0 -26
  52. package/build/src/chat-ui/components/ChatPanel/TextChatUIComponent.module.css.d.ts +0 -15
  53. package/build/src/chat-ui/components/ChatPanel/TextChatUIComponent.module.d.css.ts +0 -15
  54. package/build/src/chat-ui/components/Input/InputBox.module.css.d.ts +0 -7
  55. package/build/src/chat-ui/components/Input/InputBox.module.d.css.ts +0 -7
  56. package/build/src/chat-ui/components/Message/Message.module.css.d.ts +0 -5
  57. package/build/src/chat-ui/components/Message/Message.module.d.css.ts +0 -5
  58. package/build/src/chat-ui/components/Messages/Messages.module.css.d.ts +0 -5
  59. package/build/src/chat-ui/components/Messages/Messages.module.d.css.ts +0 -5
  60. /package/build/{avatar-selection-ui/AvatarType.d.ts → AvatarType.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AvatarType.d.ts","sourceRoot":"","sources":["../src/AvatarType.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,CACA;IACE,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,IAAI,CAAC;CACxB,GACD;IACE,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,IAAI,CAAC;CACxB,GACD;IACE,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,kBAAkB,CAAC,EAAE,IAAI,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB,CACJ,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,gBAAgB,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { UpdatableConfig } from "./Networked3dWebExperienceClient";
2
+ export type ClientEventMap = {
3
+ chat: {
4
+ username: string;
5
+ message: string;
6
+ fromConnectionId: number;
7
+ userId: string;
8
+ isLocal: boolean;
9
+ };
10
+ userJoined: {
11
+ connectionId: number;
12
+ userId: string;
13
+ username: string | null;
14
+ };
15
+ userLeft: {
16
+ connectionId: number;
17
+ userId: string;
18
+ username: string | null;
19
+ };
20
+ configChanged: Partial<UpdatableConfig>;
21
+ ready: void;
22
+ disposed: void;
23
+ };
24
+ export declare class ClientEventEmitter {
25
+ private handlers;
26
+ on<K extends keyof ClientEventMap>(event: K, handler: (data: ClientEventMap[K]) => void): void;
27
+ off<K extends keyof ClientEventMap>(event: K, handler: (data: ClientEventMap[K]) => void): void;
28
+ protected emit<K extends keyof ClientEventMap>(event: K, ...args: ClientEventMap[K] extends void ? [] : [ClientEventMap[K]]): void;
29
+ /** Remove all registered event handlers. Called during dispose to prevent leaks. */
30
+ protected clearAllHandlers(): void;
31
+ }
32
+ //# sourceMappingURL=ClientEventEmitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientEventEmitter.d.ts","sourceRoot":"","sources":["../src/ClientEventEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExE,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB,EAAE,MAAM,CAAC;QACzB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,UAAU,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9E,QAAQ,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC5E,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACxC,KAAK,EAAE,IAAI,CAAC;IACZ,QAAQ,EAAE,IAAI,CAAC;CAChB,CAAC;AAKF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAsD;IAEtE,EAAE,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAS9F,GAAG,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAI/F,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,MAAM,cAAc,EAC3C,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GACjE,IAAI;IAQP,oFAAoF;IACpF,SAAS,CAAC,gBAAgB,IAAI,IAAI;CAGnC"}
@@ -0,0 +1,36 @@
1
+ import type { Networked3dWebExperienceClient } from "./Networked3dWebExperienceClient";
2
+ import type { UIPlugin } from "./plugins";
3
+ export declare class DefaultAvatarSelectionPlugin implements UIPlugin {
4
+ private container;
5
+ private scrollStyle;
6
+ private client;
7
+ private panelOpen;
8
+ private selectedIndex;
9
+ private avatars;
10
+ private allowCustomAvatars;
11
+ private allowCustomDisplayName;
12
+ private customAvatarType;
13
+ private toggleBtn;
14
+ private panel;
15
+ private grid;
16
+ private nameInput;
17
+ private customInput;
18
+ private customSection;
19
+ private escapeHandler;
20
+ mount(_container: HTMLElement, client: Networked3dWebExperienceClient): void;
21
+ onConfigChanged(config: Record<string, unknown>): void;
22
+ dispose(): void;
23
+ private buildToggleButton;
24
+ private rebuildPanel;
25
+ private buildPanel;
26
+ private renderGrid;
27
+ private buildCustomAvatarTypeSelector;
28
+ private getCustomPlaceholder;
29
+ private buildCustomAvatarInput;
30
+ private rebuildCustomInput;
31
+ private addTextLabel;
32
+ private setPanelOpen;
33
+ private syncCurrentState;
34
+ private applyChanges;
35
+ }
36
+ //# sourceMappingURL=DefaultAvatarSelectionPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultAvatarSelectionPlugin.d.ts","sourceRoot":"","sources":["../src/DefaultAvatarSelectionPlugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AACvF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAa1C,qBAAa,4BAA6B,YAAW,QAAQ;IAC3D,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,MAAM,CAA+C;IAE7D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,gBAAgB,CAA6C;IAGrE,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,WAAW,CAAuD;IAC1E,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,aAAa,CAA6C;IAElE,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,8BAA8B,GAAG,IAAI;IAsB5E,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAkBtD,OAAO,IAAI,IAAI;IAWf,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,UAAU;IAiMlB,OAAO,CAAC,UAAU;IA4DlB,OAAO,CAAC,6BAA6B;IAyCrC,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,sBAAsB;IA0C9B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,gBAAgB;IAqCxB,OAAO,CAAC,YAAY;CA2CrB"}
@@ -0,0 +1,44 @@
1
+ import type { Networked3dWebExperienceClient, UpdatableConfig } from "./Networked3dWebExperienceClient";
2
+ import type { UIPlugin } from "./plugins";
3
+ export declare class DefaultChatPlugin implements UIPlugin {
4
+ private container;
5
+ private scrollStyle;
6
+ private client;
7
+ private enabled;
8
+ private messages;
9
+ private nextId;
10
+ private panelOpen;
11
+ private unreadCount;
12
+ private filterIndex;
13
+ private proximityMode;
14
+ private userScrolledUp;
15
+ private toggleBtn;
16
+ private unreadBadge;
17
+ private passiveArea;
18
+ private panel;
19
+ private messageArea;
20
+ private input;
21
+ private filterPill;
22
+ private proxPill;
23
+ private globalKeydownHandler;
24
+ private chatHandler;
25
+ mount(_container: HTMLElement, client: Networked3dWebExperienceClient): void;
26
+ onConfigChanged(config: Partial<UpdatableConfig>): void;
27
+ dispose(): void;
28
+ private buildToggleButton;
29
+ private buildPassiveArea;
30
+ private buildPanel;
31
+ private sendMessage;
32
+ private calculateDistance;
33
+ private setPanelOpen;
34
+ private updateUnreadBadge;
35
+ private updateFilterPill;
36
+ private updateProxPill;
37
+ private shouldShowMessage;
38
+ private scrollToBottom;
39
+ private createMessageElement;
40
+ private rerenderMessages;
41
+ private addPassiveMessage;
42
+ private addMessageToUI;
43
+ }
44
+ //# sourceMappingURL=DefaultChatPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultChatPlugin.d.ts","sourceRoot":"","sources":["../src/DefaultChatPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,8BAA8B,EAC9B,eAAe,EAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AA4C1C,qBAAa,iBAAkB,YAAW,QAAQ;IAChD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAS;IAG/B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,oBAAoB,CAA6C;IAEzE,OAAO,CAAC,WAAW,CAAqC;IAExD,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,8BAA8B,GAAG,IAAI;IA6B5E,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IASvD,OAAO,IAAI,IAAI;IAef,OAAO,CAAC,iBAAiB;IAmDzB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,UAAU;IAqOlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,oBAAoB;IAiE5B,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,iBAAiB;IAyCzB,OAAO,CAAC,cAAc;CAkCvB"}
@@ -0,0 +1,18 @@
1
+ import type { Networked3dWebExperienceClient, UpdatableConfig } from "./Networked3dWebExperienceClient";
2
+ import type { UIPlugin } from "./plugins";
3
+ export type DefaultHUDPluginOptions = {
4
+ minimap?: boolean;
5
+ playerList?: boolean;
6
+ };
7
+ export declare class DefaultHUDPlugin implements UIPlugin {
8
+ private hud;
9
+ private container;
10
+ private client;
11
+ private currentMinimap;
12
+ private currentPlayerList;
13
+ private hudInitialized;
14
+ mount(container: HTMLElement, client: Networked3dWebExperienceClient): void;
15
+ onConfigChanged(config: Partial<UpdatableConfig>): void;
16
+ dispose(): void;
17
+ }
18
+ //# sourceMappingURL=DefaultHUDPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultHUDPlugin.d.ts","sourceRoot":"","sources":["../src/DefaultHUDPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,8BAA8B,EAC9B,eAAe,EAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAwB1C,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAmmBF,qBAAa,gBAAiB,YAAW,QAAQ;IAC/C,OAAO,CAAC,GAAG,CAAwC;IACnD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,iBAAiB,CAAQ;IAGjC,OAAO,CAAC,cAAc,CAAS;IAE/B,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,8BAA8B,GAAG,IAAI;IAK3E,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAyCvD,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,13 @@
1
+ import type { Networked3dWebExperienceClient, UpdatableConfig } from "./Networked3dWebExperienceClient";
2
+ import type { UIPlugin } from "./plugins";
3
+ export declare class DefaultRespawnButtonPlugin implements UIPlugin {
4
+ private client;
5
+ private container;
6
+ private button;
7
+ mount(container: HTMLElement, client: Networked3dWebExperienceClient): void;
8
+ onConfigChanged(config: Partial<UpdatableConfig>): void;
9
+ dispose(): void;
10
+ private show;
11
+ private hide;
12
+ }
13
+ //# sourceMappingURL=DefaultRespawnButtonPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultRespawnButtonPlugin.d.ts","sourceRoot":"","sources":["../src/DefaultRespawnButtonPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,8BAA8B,EAC9B,eAAe,EAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,0BAA2B,YAAW,QAAQ;IACzD,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,MAAM,CAA+B;IAE7C,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,8BAA8B,GAAG,IAAI;IAK3E,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAUvD,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,IAAI;IAgEZ,OAAO,CAAC,IAAI;CAIb"}
@@ -0,0 +1,16 @@
1
+ import type { Networked3dWebExperienceClient } from "./Networked3dWebExperienceClient";
2
+ import type { UIPlugin } from "./plugins";
3
+ export type VirtualJoystickPluginOptions = {
4
+ radius?: number;
5
+ innerRadius?: number;
6
+ mouseSupport?: boolean;
7
+ };
8
+ export declare class DefaultVirtualJoystickPlugin implements UIPlugin {
9
+ private options;
10
+ private wrapper;
11
+ private joystick;
12
+ constructor(options?: VirtualJoystickPluginOptions);
13
+ mount(container: HTMLElement, client: Networked3dWebExperienceClient): void;
14
+ dispose(): void;
15
+ }
16
+ //# sourceMappingURL=DefaultVirtualJoystickPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultVirtualJoystickPlugin.d.ts","sourceRoot":"","sources":["../src/DefaultVirtualJoystickPlugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AACvF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,qBAAa,4BAA6B,YAAW,QAAQ;IAI/C,OAAO,CAAC,OAAO;IAH3B,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,QAAQ,CAAgC;gBAE5B,OAAO,GAAE,4BAAiC;IAE9D,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,8BAA8B,GAAG,IAAI;IAa3E,OAAO,IAAI,IAAI;CAKhB"}
@@ -1,21 +1,40 @@
1
- import { AnimationConfig, CameraManager, CollisionsManager, EnvironmentConfiguration, LoadingScreenConfig, SpawnConfiguration, IRenderer, MMLDocumentConfiguration, TweakPane, RendererConfig } from "@mml-io/3d-web-client-core";
2
- import { ServerBroadcastMessage } from "@mml-io/3d-web-user-networking";
1
+ import { AnimationConfig, CameraManager, CharacterDescription, CollisionsManager, EnvironmentConfiguration, LoadingScreenConfig, SpawnConfiguration, SpawnConfigurationState, InputProvider, IRenderer, CharacterManager, MMLDocumentConfiguration, TweakPane, RendererConfig } from "@mml-io/3d-web-client-core";
2
+ import { type ServerBroadcastMessage } from "@mml-io/3d-web-experience-protocol";
3
+ import { UserData } from "@mml-io/3d-web-user-networking";
3
4
  import { LoadingProgressManager } from "@mml-io/mml-web";
4
- import { AvatarConfiguration } from "./avatar-selection-ui";
5
- import { StringToHslOptions } from "./chat-ui";
5
+ import { AvatarConfiguration } from "./AvatarType";
6
+ import { ClientEventEmitter } from "./ClientEventEmitter";
7
+ import type { UIPlugin } from "./plugins";
8
+ import { WorldConnection } from "./WorldConnection";
6
9
  export type Networked3dWebExperienceClientConfig = {
7
10
  userNetworkAddress: string;
8
11
  sessionToken: string;
9
- authToken?: string | null;
10
- chatVisibleByDefault?: boolean;
11
- userNameToColorOptions?: StringToHslOptions;
12
12
  animationConfig: AnimationConfig;
13
13
  voiceChatAddress?: string;
14
14
  updateURLLocation?: boolean;
15
15
  onServerBroadcast?: (broadcast: ServerBroadcastMessage) => void;
16
16
  loadingScreen?: LoadingScreenConfig;
17
17
  createRenderer?: (options: CreateRendererOptions) => IRenderer;
18
+ waitForWorldConfig?: boolean;
19
+ /** Virtual joystick for touch/mobile input. Defaults to built-in joystick. Pass `null` to disable. */
20
+ virtualJoystickPlugin?: UIPlugin | null;
21
+ /** Respawn button overlay. Defaults to built-in button. Pass `null` to disable. */
22
+ respawnButtonPlugin?: UIPlugin | null;
23
+ /**
24
+ * Additional UI plugins mounted alongside the built-in plugins.
25
+ * Use this to add arbitrary overlay UI (HUD, minimap, voice
26
+ * controls, etc.) that participates in the standard plugin lifecycle.
27
+ */
28
+ plugins?: UIPlugin[];
18
29
  } & UpdatableConfig;
30
+ /**
31
+ * The subset of the client config that can be updated at runtime, either via
32
+ * `updateConfig()` or delivered from the server as the JSON payload of a
33
+ * `FROM_SERVER_WORLD_CONFIG_MESSAGE_TYPE` message.
34
+ *
35
+ * The server-side equivalent is `WorldConfigPayload` from
36
+ * `@mml-io/3d-web-experience-protocol`.
37
+ */
19
38
  export type UpdatableConfig = {
20
39
  enableChat?: boolean;
21
40
  mmlDocuments?: {
@@ -28,6 +47,12 @@ export type UpdatableConfig = {
28
47
  enableTweakPane?: boolean;
29
48
  allowOrbitalCamera?: boolean;
30
49
  postProcessingEnabled?: boolean;
50
+ hud?: false | {
51
+ minimap?: boolean;
52
+ playerList?: boolean;
53
+ respawnButton?: boolean;
54
+ [key: string]: boolean | undefined;
55
+ };
31
56
  };
32
57
  export type CreateRendererOptions = {
33
58
  targetElement: HTMLElement;
@@ -44,7 +69,7 @@ export type CreateRendererOptions = {
44
69
  mmlAuthToken: string | null;
45
70
  onInitialized: () => void;
46
71
  };
47
- export declare class Networked3dWebExperienceClient {
72
+ export declare class Networked3dWebExperienceClient extends ClientEventEmitter {
48
73
  private holderElement;
49
74
  private config;
50
75
  private element;
@@ -55,22 +80,31 @@ export declare class Networked3dWebExperienceClient {
55
80
  private collisionsManager;
56
81
  private characterManager;
57
82
  private keyInputManager;
58
- private virtualJoystick;
59
- private clientId;
60
- private networkClient;
83
+ private resizeObserver;
84
+ private connectionId;
85
+ private worldConnection;
61
86
  private remoteUserStates;
62
87
  private userProfiles;
63
- private textChatUI;
64
- private avatarSelectionUI;
88
+ private virtualJoystickPlugin;
89
+ private respawnButtonPlugin;
90
+ private plugins;
65
91
  private tweakPane;
66
92
  private spawnConfiguration;
67
93
  private cameraValues;
68
94
  private characterControllerValues;
69
95
  private initialLoadCompleted;
96
+ private pendingChatMessages;
97
+ private latestConfig;
70
98
  private loadingProgressManager;
71
99
  private loadingScreen;
72
100
  private errorScreen?;
73
- private respawnButton;
101
+ private mmlAuthToken;
102
+ private rendererInitialized;
103
+ private worldConfigReceived;
104
+ private worldConfigTimeoutId;
105
+ private disposed;
106
+ private static readonly WORLD_CONFIG_TIMEOUT_MS;
107
+ private static readonly MAX_PENDING_CHAT_MESSAGES;
74
108
  private currentRequestAnimationFrame;
75
109
  private lastUpdateTimeMs;
76
110
  private frameCounter;
@@ -81,16 +115,78 @@ export declare class Networked3dWebExperienceClient {
81
115
  constructor(holderElement: HTMLElement, config: Networked3dWebExperienceClientConfig);
82
116
  updateConfig(config: Partial<UpdatableConfig>): void;
83
117
  static createFullscreenHolder(): HTMLDivElement;
84
- private createRespawnButton;
118
+ private getAllPlugins;
119
+ private checkReadyForInitialLoad;
85
120
  private resolveCharacterData;
86
121
  private onNetworkUpdate;
87
122
  private sendIdentityUpdateToServer;
88
123
  private handleChatMessage;
89
- private connectToTextChat;
90
- private mountAvatarSelectionUI;
91
124
  update(): void;
92
125
  private spawnCharacter;
93
126
  private disposeWithError;
127
+ /**
128
+ * Add a plugin at runtime. If the experience has already loaded, the plugin
129
+ * is mounted immediately and receives the latest config. Otherwise it will
130
+ * be mounted alongside the other plugins when loading completes.
131
+ */
132
+ addPlugin(plugin: UIPlugin): void;
133
+ /**
134
+ * Remove a previously added plugin. Calls `dispose()` on the plugin if the
135
+ * experience has already loaded (i.e. it was mounted).
136
+ */
137
+ removePlugin(plugin: UIPlugin): void;
138
+ /** Set an additional input provider (e.g. virtual joystick) for character control. */
139
+ setAdditionalInputProvider(inputProvider: InputProvider): void;
140
+ /** Returns the current spawn configuration (position, respawn trigger, etc.). */
141
+ getSpawnConfiguration(): SpawnConfigurationState;
142
+ /** Returns the local client's connection ID, or null before authentication. */
143
+ getConnectionId(): number | null;
144
+ /** Returns position and username of the local character, or null if not yet spawned. */
145
+ getLocalCharacterState(): {
146
+ connectionId: number;
147
+ userId: string;
148
+ position: {
149
+ x: number;
150
+ y: number;
151
+ z: number;
152
+ };
153
+ username: string;
154
+ } | null;
155
+ /**
156
+ * Returns all connected users (including local). Each entry contains
157
+ * the user's connection ID, userId, position, and username.
158
+ */
159
+ getCharacterStates(): Map<number, {
160
+ connectionId: number;
161
+ userId: string;
162
+ position: {
163
+ x: number;
164
+ y: number;
165
+ z: number;
166
+ };
167
+ username: string;
168
+ isLocal: boolean;
169
+ }>;
170
+ /** Update the character's avatar. */
171
+ selectAvatar(characterDescription: CharacterDescription): void;
172
+ /** Update the character's display name. */
173
+ setDisplayName(name: string): void;
174
+ /** Respawn the local character at the configured spawn point. */
175
+ respawn(): void;
176
+ /** Send a chat message. */
177
+ sendChatMessage(message: string): void;
178
+ /** Access the underlying world connection. */
179
+ getWorldConnection(): WorldConnection;
180
+ /** Access the renderer. */
181
+ getRenderer(): IRenderer;
182
+ /** Access the character manager (local/remote character state, spawning). */
183
+ getCharacterManager(): CharacterManager;
184
+ /** Access the camera manager. */
185
+ getCameraManager(): CameraManager;
186
+ /** Look up a user's profile (username, avatar, colors) by connection ID. */
187
+ getUserProfile(connectionId: number): UserData | null;
188
+ /** Get all user profiles. */
189
+ getUserProfiles(): ReadonlyMap<number, UserData>;
94
190
  dispose(): void;
95
191
  }
96
192
  //# sourceMappingURL=Networked3dWebExperienceClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Networked3dWebExperienceClient.d.ts","sourceRoot":"","sources":["../src/Networked3dWebExperienceClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Networked3dWebExperienceClient.d.ts","sourceRoot":"","sources":["../src/Networked3dWebExperienceClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ import { type SessionConfigPayload, type WorldConfigPayload } from "@mml-io/3d-web-experience-protocol";
2
+ import { type UserNetworkingClientUpdate, type CharacterDescription, type UserData, type NetworkUpdate } from "@mml-io/3d-web-user-networking";
3
+ export type { SessionConfigPayload, WorldConfigPayload } from "@mml-io/3d-web-experience-protocol";
4
+ export type OtherUser = {
5
+ userId: string;
6
+ username: string | null;
7
+ characterDescription: CharacterDescription | null;
8
+ colors: Array<[number, number, number]> | null;
9
+ position: {
10
+ x: number;
11
+ y: number;
12
+ z: number;
13
+ };
14
+ };
15
+ export type ChatMessage = {
16
+ fromConnectionId: number;
17
+ userId: string;
18
+ username: string;
19
+ message: string;
20
+ timestamp: number;
21
+ };
22
+ export type WorldEvent = {
23
+ type: "connected";
24
+ } | {
25
+ type: "disconnected";
26
+ } | {
27
+ type: "reconnecting";
28
+ } | {
29
+ type: "identity_assigned";
30
+ connectionId: number;
31
+ } | {
32
+ type: "server_error";
33
+ errorType: string;
34
+ message: string;
35
+ } | {
36
+ type: "chat";
37
+ message: ChatMessage;
38
+ } | {
39
+ type: "user_joined";
40
+ connectionId: number;
41
+ userId: string;
42
+ username: string | null;
43
+ position: {
44
+ x: number;
45
+ y: number;
46
+ z: number;
47
+ };
48
+ } | {
49
+ type: "user_left";
50
+ connectionId: number;
51
+ userId: string;
52
+ username: string | null;
53
+ } | {
54
+ type: "session_config";
55
+ config: SessionConfigPayload;
56
+ } | {
57
+ type: "world_config";
58
+ config: WorldConfigPayload;
59
+ } | {
60
+ type: "server_broadcast";
61
+ broadcastType: string;
62
+ payload: Record<string, unknown>;
63
+ } | {
64
+ type: "network_update";
65
+ update: NetworkUpdate;
66
+ };
67
+ export type WorldConnectionConfig = {
68
+ url: string;
69
+ sessionToken: string;
70
+ websocketFactory: (url: string) => WebSocket;
71
+ initialUserState?: UserData;
72
+ initialPosition?: {
73
+ x: number;
74
+ y: number;
75
+ z: number;
76
+ };
77
+ initialRotation?: {
78
+ eulerY: number;
79
+ };
80
+ };
81
+ export declare class WorldConnection {
82
+ private client;
83
+ private otherUsers;
84
+ private chatHistory;
85
+ private eventListeners;
86
+ private myConnectionId;
87
+ private connected;
88
+ private username;
89
+ private connectPromise;
90
+ private resolveConnect;
91
+ private rejectConnect;
92
+ private connectSettled;
93
+ private worldConfigResolve;
94
+ private worldConfigPromise;
95
+ private latestWorldConfig;
96
+ constructor(config: WorldConnectionConfig);
97
+ stop(): void;
98
+ /**
99
+ * Returns a promise that settles once for the **initial** connection attempt.
100
+ * It resolves when the first `Connected` status is received, or rejects if
101
+ * the connection fails before being established.
102
+ *
103
+ * This promise does **not** re-settle on reconnection. To react to
104
+ * subsequent connection/disconnection events, use {@link addEventListener}
105
+ * and listen for `"connected"` / `"disconnected"` / `"reconnecting"` events.
106
+ */
107
+ waitForConnection(): Promise<void>;
108
+ /**
109
+ * Wait for the server to send a world config message.
110
+ *
111
+ * The server pushes this over WebSocket after authentication. If the config
112
+ * has already been received, the returned promise resolves immediately with
113
+ * the cached value (so callers never miss a config that arrived before they
114
+ * called this method).
115
+ *
116
+ * Multiple concurrent callers share a single internal promise that resolves
117
+ * when the config arrives. Each caller gets an independent timeout --- if the
118
+ * timeout fires, that caller receives `null` but other callers with longer
119
+ * timeouts (or the shared promise itself) are unaffected.
120
+ *
121
+ * @returns The world config, or `null` if the timeout expires first.
122
+ */
123
+ waitForWorldConfig(timeoutMs?: number): Promise<WorldConfigPayload | null>;
124
+ getWorldConfig(): WorldConfigPayload | null;
125
+ sendUpdate(update: UserNetworkingClientUpdate): void;
126
+ getOtherUsers(): Array<{
127
+ connectionId: number;
128
+ } & OtherUser>;
129
+ getConnectionId(): number | null;
130
+ getUsername(): string | null;
131
+ isConnected(): boolean;
132
+ sendChatMessage(message: string): void;
133
+ sendCustomMessage(customType: number, contents: string): void;
134
+ updateUsername(username: string): void;
135
+ updateCharacterDescription(characterDescription: CharacterDescription): void;
136
+ updateColors(colors: Array<[number, number, number]>): void;
137
+ getChatHistory(since?: number): ChatMessage[];
138
+ addEventListener(listener: (event: WorldEvent) => void): void;
139
+ removeEventListener(listener: (event: WorldEvent) => void): void;
140
+ private emitEvent;
141
+ }
142
+ //# sourceMappingURL=WorldConnection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorldConnection.d.ts","sourceRoot":"","sources":["../src/WorldConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACxB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,aAAa,EAGnB,MAAM,gCAAgC,CAAC;AAExC,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAEnG,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oBAAoB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAClD,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAC/C,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GACtC;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C,GACD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACpF;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACrF;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAEtD,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,CAAC;IAC7C,gBAAgB,CAAC,EAAE,QAAQ,CAAC;IAC5B,eAAe,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,eAAe,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACtC,CAAC;AAIF,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAgB;IAEhC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,kBAAkB,CAAuD;IACjF,OAAO,CAAC,kBAAkB,CAA4C;IACtE,OAAO,CAAC,iBAAiB,CAAmC;gBAEhD,MAAM,EAAE,qBAAqB;IA6PzC,IAAI,IAAI,IAAI;IAaZ;;;;;;;;OAQG;IACH,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC;;;;;;;;;;;;;;OAcG;IACH,kBAAkB,CAAC,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAuBjF,cAAc,IAAI,kBAAkB,GAAG,IAAI;IAI3C,UAAU,CAAC,MAAM,EAAE,0BAA0B,GAAG,IAAI;IAMpD,aAAa,IAAI,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAQ5D,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,WAAW,IAAI,OAAO;IAItB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKtC,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK7D,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKtC,0BAA0B,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,IAAI;IAI5E,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;IAI3D,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;IAO7C,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAI7D,mBAAmB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAKhE,OAAO,CAAC,SAAS;CAKlB"}
package/build/index.d.ts CHANGED
@@ -1,2 +1,12 @@
1
1
  export * from "./Networked3dWebExperienceClient";
2
+ export type { ClientEventMap } from "./ClientEventEmitter";
3
+ export type { UIPlugin } from "./plugins";
4
+ export { DefaultChatPlugin } from "./DefaultChatPlugin";
5
+ export { DefaultAvatarSelectionPlugin } from "./DefaultAvatarSelectionPlugin";
6
+ export { DefaultHUDPlugin } from "./DefaultHUDPlugin";
7
+ export { DefaultVirtualJoystickPlugin } from "./DefaultVirtualJoystickPlugin";
8
+ export type { VirtualJoystickPluginOptions } from "./DefaultVirtualJoystickPlugin";
9
+ export { DefaultRespawnButtonPlugin } from "./DefaultRespawnButtonPlugin";
10
+ export { WorldConnection, type WorldConnectionConfig, type WorldEvent, type ChatMessage, type OtherUser, } from "./WorldConnection";
11
+ export type { SessionConfigPayload, WorldConfigPayload } from "@mml-io/3d-web-experience-protocol";
2
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,YAAY,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,GACf,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC"}