@noya-app/noya-multiplayer-react 0.1.44 → 0.1.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,8 +1,9 @@
1
1
  import * as _noya_app_state_manager from '@noya-app/state-manager';
2
- import { ConnectedUsersManager, EphemeralUserDataManager, RPCManager, StandardRPCRequestPayload, StandardRPCResponsePayload, ConnectionEvent, Task, MultiplayerStateManager, AssetManager, SecretManager as SecretManager$1, StateManager, StateManagerOptions, MultiplayerStateManagerOptions, SyncAdapterOptions, AIManager, WorkflowManager, TSchema, Static } from '@noya-app/state-manager';
2
+ import { ConnectedUsersManager, EphemeralUserDataManager, NoyaManager, StateManager, StateManagerOptions, MultiplayerStateManagerOptions, SyncAdapter, TSchema, Static, MultiplayerStateManager, ReconnectingWebSocketState, ClientToServerMessage, ServerToClientMessage, MultiplayerStateManagerError } from '@noya-app/state-manager';
3
3
  export * from '@noya-app/state-manager';
4
4
  import React, { SetStateAction } from 'react';
5
- import { Observable, GetAtPath, ObservableOptions, PathKey } from '@noya-app/observable';
5
+ import { GetAtPath, ObservableOptions, PathKey, Observable } from '@noya-app/observable';
6
+ import * as _noya_app_noya_designsystem from '@noya-app/noya-designsystem';
6
7
 
7
8
  type Point = {
8
9
  x: number;
@@ -26,62 +27,40 @@ type UserPointersOverlayProps<E extends UserPointerData> = {
26
27
  } & RenderUserPointer;
27
28
  declare const UserPointersOverlay: <E extends UserPointerData>(props: UserPointersOverlayProps<E>) => React.ReactElement | null;
28
29
 
29
- type Secret = {
30
- id: string;
31
- name: string;
32
- };
33
- declare class SecretManager {
34
- rpcManager: RPCManager<StandardRPCRequestPayload, StandardRPCResponsePayload>;
35
- constructor(rpcManager: RPCManager<StandardRPCRequestPayload, StandardRPCResponsePayload>);
36
- secrets$: Observable<Secret[]>;
37
- isInitialized$: Observable<boolean>;
38
- createSecret(name: string, value: string): Promise<StandardRPCResponsePayload>;
39
- deleteSecret(name: string): Promise<StandardRPCResponsePayload>;
40
- }
41
-
42
30
  type StateInspectorAnchor = "left" | "right" | "bottom left" | "bottom right";
43
31
  type StateInspectorOptions = {
44
32
  colorScheme?: "light" | "dark";
45
33
  anchor?: StateInspectorAnchor;
46
34
  };
47
- declare const StateInspector: <S, M, E extends object>(props: {
48
- state: S;
49
- connectionEvents?: ConnectionEvent<S>[];
50
- tasks?: Task[];
35
+ declare const StateInspector: <S, M extends object, E extends object, MenuT extends string = string>(props: {
36
+ noyaManager: NoyaManager<S, M, E, MenuT>;
51
37
  unstyled?: boolean;
52
- multiplayerStateManager: MultiplayerStateManager<S, M>;
53
- assetManager: AssetManager;
54
- connectedUsersManager: ConnectedUsersManager;
55
- secretManager: SecretManager$1;
56
- ephemeralUserDataManager: EphemeralUserDataManager<E>;
57
- forceInit: () => void;
58
38
  } & StateInspectorOptions & Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref">) => React.ReactElement | null;
59
39
 
60
40
  declare function useSyncStateManager<S, M>(stateManager: StateManager<S, M>): S;
61
41
  declare function useSyncStateManager<S, M, P extends string>(stateManager: StateManager<S, M>, path: P): GetAtPath<S, P>;
62
42
  declare function useManagedState<S, M = void>(createInitialState: () => S, options?: StateManagerOptions<S, M>): readonly [S, (...args: M extends {} ? [metadata: M, action: SetStateAction<S>] : [action: SetStateAction<S>]) => void, StateManager<S, M>];
63
43
  declare function useManagedHistory<S, M = void>(stateManager: StateManager<S, M>): _noya_app_state_manager.HistorySnapshot<S, M>;
64
- declare function useSyncMultiplayerStateManager<S, M = void>(multiplayerStateManager: MultiplayerStateManager<S, M>): S;
65
- type UseMultiplayerStateOptions<S, M = void, E extends object = object> = MultiplayerStateManagerOptions<S, M> & {
66
- sync?: (options: Pick<SyncAdapterOptions<S, M, E>, "ms" | "ephemeralUserDataManager" | "assetManager">) => void;
67
- trackConnectionEvents?: boolean;
68
- trackTasks?: boolean;
44
+ type UseMultiplayerStateOptions<S, M extends object = object, E extends object = object, MenuT extends string = string> = MultiplayerStateManagerOptions<S, M> & {
45
+ sync?: SyncAdapter<S, M, E, MenuT>;
69
46
  inspector?: boolean | StateInspectorOptions;
70
47
  };
71
- declare function useMultiplayerState<S, M = void, E extends object = object>(initialState: S | (() => S), options?: UseMultiplayerStateOptions<S, M, E>): readonly [S, (...args: M extends {} ? [metadata: M, action: S | ((prevState: S) => S)] : [action: S | ((prevState: S) => S)]) => void, {
72
- tasks: Task[];
73
- connectionEvents: ConnectionEvent<S>[] | undefined;
74
- connectedUsersManager: ConnectedUsersManager;
75
- ephemeralUserDataManager: EphemeralUserDataManager<E>;
76
- multiplayerStateManager: MultiplayerStateManager<S, M>;
77
- assets: _noya_app_state_manager.Asset[];
78
- assetManager: AssetManager;
79
- aiManager: AIManager;
80
- rpcManager: RPCManager<StandardRPCRequestPayload, StandardRPCResponsePayload>;
81
- workflowManager: WorkflowManager;
82
- secretManager: SecretManager;
48
+ declare function useMultiplayerState<S, M extends object = object, E extends object = object, MenuT extends string = string>(initialState: S | (() => S), options?: UseMultiplayerStateOptions<S, M, E, MenuT>): readonly [S, (...args: [metadata: Partial<M>, action: S | ((prevState: S) => S)] | [action: S | ((prevState: S) => S)]) => void, {
49
+ noyaManager: NoyaManager<S, M, E, MenuT>;
50
+ taskManager: _noya_app_state_manager.TaskManager;
51
+ connectionEventManager: _noya_app_state_manager.ConnectionEventManager<S>;
52
+ connectedUsersManager: _noya_app_state_manager.ConnectedUsersManager;
53
+ ephemeralUserDataManager: _noya_app_state_manager.EphemeralUserDataManager<E>;
54
+ multiplayerStateManager: _noya_app_state_manager.MultiplayerStateManager<S, M>;
55
+ assetManager: _noya_app_state_manager.AssetManager;
56
+ aiManager: _noya_app_state_manager.AIManager;
57
+ rpcManager: _noya_app_state_manager.RPCManager;
58
+ workflowManager: _noya_app_state_manager.WorkflowManager;
59
+ secretManager: _noya_app_state_manager.SecretManager;
60
+ menuItemsManager: _noya_app_state_manager.MenuManager<MenuT>;
83
61
  createAsset: (options: _noya_app_state_manager.CreateAssetOptions | Uint8Array | File | Blob) => Promise<_noya_app_state_manager.Asset>;
84
62
  deleteAsset: (id: string) => Promise<void>;
63
+ assets: _noya_app_state_manager.Asset[];
85
64
  }];
86
65
 
87
66
  type AppViewType = "editable" | "readOnly" | "preview";
@@ -105,33 +84,13 @@ type GetAppDataOptions = {
105
84
  declare function enforceSchema<State>(initialState: State, schema?: TSchema): State;
106
85
  declare function parseAppDataParameter(options?: GetAppDataOptions): AppData<unknown> | null;
107
86
  declare function getAppData<State>(initialState: State | (() => State), schema?: TSchema, options?: GetAppDataOptions): AppData<State>;
108
- type IframeToHostMessage = {
109
- type: "application.setMenuItems";
110
- payload: {
111
- menuItems: any[];
112
- };
113
- } | {
114
- type: "multiplayer.setUsers";
115
- payload: {
116
- users: any[];
117
- };
118
- };
119
- type HostToIframeMessage = {
120
- type: "application.selectMenuItem";
121
- payload: {
122
- value: string;
123
- };
124
- };
125
- declare function useBroadcastConnectedUsers(connectedUsersManager: ConnectedUsersManager): void;
126
- declare function useBroadcastMenuItems<T>(menuItems: any[], handleSelectMenuItem: (value: T) => void): void;
127
- declare function isEmbeddedApp(): boolean;
128
- type UseNoyaStateOptions<S, M = void, E extends object = object> = UseMultiplayerStateOptions<S, M, E> & {
87
+ type UseNoyaStateOptions<S, M extends object = object, E extends object = object, MenuT extends string = string> = UseMultiplayerStateOptions<S, M, E, MenuT> & {
129
88
  offlineStorageKey?: string;
130
89
  };
131
- type UseNoyaStateResult<S, M = void, E extends object = object> = [
132
- ReturnType<typeof useMultiplayerState<S, M, E>>[0],
133
- ReturnType<typeof useMultiplayerState<S, M, E>>[1],
134
- ReturnType<typeof useMultiplayerState<S, M, E>>[2] & {
90
+ type UseNoyaStateResult<S, M extends object = object, E extends object = object, MenuT extends string = string> = [
91
+ ReturnType<typeof useMultiplayerState<S, M, E, MenuT>>[0],
92
+ ReturnType<typeof useMultiplayerState<S, M, E, MenuT>>[1],
93
+ ReturnType<typeof useMultiplayerState<S, M, E, MenuT>>[2] & {
135
94
  theme: AppTheme;
136
95
  viewType: AppViewType;
137
96
  }
@@ -145,14 +104,14 @@ type UseNoyaStateResult<S, M = void, E extends object = object> = [
145
104
  * 2. Pass an initial state and a schema: `useNoyaState(initialState, { schema })`
146
105
  * 3. Pass only a schema, and a conforming initial state is created automatically: `useNoyaState({ schema })`
147
106
  */
148
- declare function useNoyaState<S, M = void, E extends object = object, O extends UseNoyaStateOptions<S, M, E> = UseNoyaStateOptions<S, M, E>>(...args: [
107
+ declare function useNoyaState<S, M extends object = object, E extends object = object, MenuT extends string = string, O extends UseNoyaStateOptions<S, M, E, MenuT> = UseNoyaStateOptions<S, M, E, MenuT>>(...args: [
149
108
  initialState: O["schema"] extends TSchema ? Static<O["schema"]> | (() => Static<O["schema"]>) : S | (() => S),
150
109
  options?: O
151
110
  ] | [options: O & {
152
111
  schema: TSchema;
153
- }]): UseNoyaStateResult<O["schema"] extends TSchema ? Static<O["schema"]> : S, M, E>;
112
+ }]): UseNoyaStateResult<O["schema"] extends TSchema ? Static<O["schema"]> : S, M, E, MenuT>;
154
113
 
155
- interface NoyaStateProviderProps<S, M, E extends object> extends Omit<UseNoyaStateOptions<S, M, E>, "schema" | "mergeHistoryEntries"> {
114
+ interface NoyaStateProviderProps<S, M extends object, E extends object, MenuT extends string> extends Omit<UseNoyaStateOptions<S, M, E, MenuT>, "schema" | "mergeHistoryEntries"> {
156
115
  children: React.ReactNode;
157
116
  initialState?: S;
158
117
  fallback?: React.ReactNode;
@@ -163,12 +122,12 @@ declare function useAssetManager(): {
163
122
  create: (options: _noya_app_state_manager.CreateAssetOptions | Uint8Array | File | Blob) => Promise<_noya_app_state_manager.Asset>;
164
123
  delete: (id: string) => Promise<void>;
165
124
  };
166
- declare function useAIManager(): AIManager;
167
- declare function useSecretManager(): SecretManager$1;
125
+ declare function useAIManager(): _noya_app_state_manager.AIManager;
126
+ declare function useSecretManager(): _noya_app_state_manager.SecretManager;
168
127
  declare function useSecrets(): _noya_app_state_manager.Secret[];
169
128
  declare function useSecret(name: string): _noya_app_state_manager.Secret | undefined;
170
129
  declare function useIsInitialized(): boolean;
171
- declare function useWorkflowManager(): WorkflowManager;
130
+ declare function useWorkflowManager(): _noya_app_state_manager.WorkflowManager;
172
131
  declare const ConnectedUsersContext: React.Context<ConnectedUsersManager | undefined>;
173
132
  declare function useConnectedUsersManager(): ConnectedUsersManager | undefined;
174
133
  declare const AnyEphemeralUserDataManagerContext: React.Context<EphemeralUserDataManager<object> | undefined>;
@@ -178,32 +137,33 @@ declare const FallbackUntilInitialized: ({ children, fallback, }: {
178
137
  children: React.ReactNode;
179
138
  fallback?: React.ReactNode;
180
139
  }) => React.ReactNode;
181
- declare function createNoyaContext<Schema extends TSchema, M = void, E extends object = object>({ schema, mergeHistoryEntries, }: {
140
+ declare function createNoyaContext<Schema extends TSchema, M extends object = object, E extends object = object, MenuT extends string = string>({ schema, mergeHistoryEntries, }: {
182
141
  schema: Schema;
183
142
  mergeHistoryEntries?: StateManagerOptions<Static<Schema>, M>["mergeHistoryEntries"];
184
143
  }): {
185
- Context: React.Context<{
186
- ms: MultiplayerStateManager<Static<Schema>, M>;
187
- assetManager: AssetManager;
188
- secretManager: SecretManager$1;
189
- } | undefined>;
190
- Provider: ({ children, initialState, ...options }: NoyaStateProviderProps<Static<Schema>, M, E>) => React.JSX.Element;
144
+ Context: React.Context<NoyaManager<Static<Schema>, M, E, string> | undefined>;
145
+ Provider: ({ children, initialState, ...options }: NoyaStateProviderProps<Static<Schema>, M, E, MenuT>) => React.JSX.Element;
191
146
  useValue: {
192
147
  (): Static<Schema>;
193
148
  <A>(selector: (value: Static<Schema>) => A, options?: Pick<ObservableOptions, "isEqual">): A;
194
149
  <P extends PathKey[] | string>(path: P): GetAtPath<Static<Schema>, P>;
195
150
  };
196
151
  useSetValue: {
197
- (): M extends {} ? (metadata: M, value: SetStateAction<Static<Schema>>) => void : (value: SetStateAction<Static<Schema>>) => void;
198
- <P extends PathKey[] | string>(path: P): M extends {} ? (metadata: M, value: SetStateAction<GetAtPath<Static<Schema>, P>>) => void : (value: SetStateAction<GetAtPath<Static<Schema>, P>>) => void;
152
+ (): (...args: [metadata: M, value: SetStateAction<Static<Schema>>] | [value: SetStateAction<Static<Schema>>]) => void;
153
+ <P extends PathKey[] | string>(path: P): (...args: [metadata: M, value: SetStateAction<GetAtPath<Static<Schema>, P>>] | [value: SetStateAction<GetAtPath<Static<Schema>, P>>]) => void;
199
154
  };
200
155
  useValueState: {
201
- (): [Static<Schema>, M extends {} ? (metadata: M, value: SetStateAction<Static<Schema>>) => void : (value: SetStateAction<Static<Schema>>) => void];
202
- <A>(selector: (value: Static<Schema>) => A, options?: ObservableOptions): [A, M extends {} ? (metadata: M, value: SetStateAction<Static<Schema>>) => void : (value: SetStateAction<Static<Schema>>) => void];
203
- <P extends PathKey[] | string>(path?: P): [GetAtPath<Static<Schema>, P>, M extends {} ? (metadata: M, value: SetStateAction<GetAtPath<Static<Schema>, P>>) => void : (value: SetStateAction<GetAtPath<Static<Schema>, P>>) => void];
156
+ (): [Static<Schema>, (...args: [metadata: M, value: SetStateAction<Static<Schema>>] | [value: SetStateAction<Static<Schema>>]) => void];
157
+ <A>(selector: (value: Static<Schema>) => A, options?: ObservableOptions): [A, (...args: [metadata: M, value: SetStateAction<Static<Schema>>] | [value: SetStateAction<Static<Schema>>]) => void];
158
+ <P extends PathKey[] | string>(path?: P): [GetAtPath<Static<Schema>, P>, (...args: [metadata: M, value: SetStateAction<GetAtPath<Static<Schema>, P>>] | [value: SetStateAction<GetAtPath<Static<Schema>, P>>]) => void];
204
159
  };
205
160
  useStateManager: () => MultiplayerStateManager<Static<Schema>, M>;
206
161
  useEphemeralUserDataManager: () => EphemeralUserDataManager<E>;
162
+ useLeftMenuItems: () => _noya_app_noya_designsystem.RegularMenuItem<MenuT>[];
163
+ useRightMenuItems: () => _noya_app_noya_designsystem.RegularMenuItem<MenuT>[];
164
+ useHandleMenuItem: (callback: (type: MenuT) => void) => void;
165
+ useOnSelectMenuItemCallback: () => (type: MenuT) => void;
166
+ useNoyaManager: () => NoyaManager<Static<Schema>, M, E, MenuT>;
207
167
  };
208
168
 
209
169
  declare function useObservable<T>(observable: Observable<T>): T;
@@ -213,4 +173,39 @@ declare function useObservable<T>(observable: Observable<T> | undefined): T | un
213
173
  declare function useObservable<T, A>(observable: Observable<T> | undefined, selector: (value: T) => A, options?: Pick<ObservableOptions, "isEqual">): A | undefined;
214
174
  declare function useObservable<T, P extends PathKey[] | string>(observable: Observable<T> | undefined, path: P): GetAtPath<T, P> | undefined;
215
175
 
216
- export { AnyEphemeralUserDataManagerContext, type AppData, type AppTheme, type AppViewType, ConnectedUsersContext, FallbackUntilInitialized, type GetAppDataOptions, type HostToIframeMessage, type IframeToHostMessage, type RenderUserPointer, type RenderUserPointerProps, StateInspector, type StateInspectorAnchor, type StateInspectorOptions, type UseMultiplayerStateOptions, type UseNoyaStateOptions, type UseNoyaStateResult, type UserPointerData, UserPointersOverlay, type UserPointersOverlayProps, createDefaultAppData, createNoyaContext, enforceSchema, getAppData, isEmbeddedApp, parseAppDataParameter, useAIManager, useAnyEphemeralUserData, useAsset, useAssetManager, useAssets, useBroadcastConnectedUsers, useBroadcastMenuItems, useConnectedUsersManager, useCurrentUserId, useIsInitialized, useManagedHistory, useManagedState, useMultiplayerState, useNoyaState, useObservable, useSecret, useSecretManager, useSecrets, useSyncMultiplayerStateManager, useSyncStateManager, useWorkflowManager };
176
+ type ConnectionEvent<State> = {
177
+ type: "stateChange";
178
+ state: ReconnectingWebSocketState;
179
+ } | {
180
+ type: "send";
181
+ message: ClientToServerMessage<State>;
182
+ } | {
183
+ type: "receive";
184
+ message: ServerToClientMessage<State>;
185
+ } | {
186
+ type: "error";
187
+ error: MultiplayerStateManagerError;
188
+ };
189
+ type ConnectionOptions<State> = {
190
+ debug?: boolean;
191
+ onConnectionEvent?: (event: ConnectionEvent<State>) => void;
192
+ };
193
+ declare class WebSocketConnection<State> {
194
+ private url;
195
+ private options;
196
+ private ws;
197
+ private pingCount;
198
+ private pendingPingId?;
199
+ private intervalId?;
200
+ constructor(url: URL, options?: ConnectionOptions<State>);
201
+ connect(): Promise<void>;
202
+ private handleOpen;
203
+ private handleMessage;
204
+ private handleClose;
205
+ send(message: ClientToServerMessage<State>): void;
206
+ close(): void;
207
+ addListener(listener: (state: ReconnectingWebSocketState) => void): () => void;
208
+ removeListener(listener: (state: ReconnectingWebSocketState) => void): void;
209
+ }
210
+
211
+ export { AnyEphemeralUserDataManagerContext, type AppData, type AppTheme, type AppViewType, ConnectedUsersContext, type ConnectionEvent, type ConnectionOptions, FallbackUntilInitialized, type GetAppDataOptions, type RenderUserPointer, type RenderUserPointerProps, StateInspector, type StateInspectorAnchor, type StateInspectorOptions, type UseMultiplayerStateOptions, type UseNoyaStateOptions, type UseNoyaStateResult, type UserPointerData, UserPointersOverlay, type UserPointersOverlayProps, WebSocketConnection, createDefaultAppData, createNoyaContext, enforceSchema, getAppData, parseAppDataParameter, useAIManager, useAnyEphemeralUserData, useAsset, useAssetManager, useAssets, useConnectedUsersManager, useCurrentUserId, useIsInitialized, useManagedHistory, useManagedState, useMultiplayerState, useNoyaState, useObservable, useSecret, useSecretManager, useSecrets, useSyncStateManager, useWorkflowManager };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import * as _noya_app_state_manager from '@noya-app/state-manager';
2
- import { ConnectedUsersManager, EphemeralUserDataManager, RPCManager, StandardRPCRequestPayload, StandardRPCResponsePayload, ConnectionEvent, Task, MultiplayerStateManager, AssetManager, SecretManager as SecretManager$1, StateManager, StateManagerOptions, MultiplayerStateManagerOptions, SyncAdapterOptions, AIManager, WorkflowManager, TSchema, Static } from '@noya-app/state-manager';
2
+ import { ConnectedUsersManager, EphemeralUserDataManager, NoyaManager, StateManager, StateManagerOptions, MultiplayerStateManagerOptions, SyncAdapter, TSchema, Static, MultiplayerStateManager, ReconnectingWebSocketState, ClientToServerMessage, ServerToClientMessage, MultiplayerStateManagerError } from '@noya-app/state-manager';
3
3
  export * from '@noya-app/state-manager';
4
4
  import React, { SetStateAction } from 'react';
5
- import { Observable, GetAtPath, ObservableOptions, PathKey } from '@noya-app/observable';
5
+ import { GetAtPath, ObservableOptions, PathKey, Observable } from '@noya-app/observable';
6
+ import * as _noya_app_noya_designsystem from '@noya-app/noya-designsystem';
6
7
 
7
8
  type Point = {
8
9
  x: number;
@@ -26,62 +27,40 @@ type UserPointersOverlayProps<E extends UserPointerData> = {
26
27
  } & RenderUserPointer;
27
28
  declare const UserPointersOverlay: <E extends UserPointerData>(props: UserPointersOverlayProps<E>) => React.ReactElement | null;
28
29
 
29
- type Secret = {
30
- id: string;
31
- name: string;
32
- };
33
- declare class SecretManager {
34
- rpcManager: RPCManager<StandardRPCRequestPayload, StandardRPCResponsePayload>;
35
- constructor(rpcManager: RPCManager<StandardRPCRequestPayload, StandardRPCResponsePayload>);
36
- secrets$: Observable<Secret[]>;
37
- isInitialized$: Observable<boolean>;
38
- createSecret(name: string, value: string): Promise<StandardRPCResponsePayload>;
39
- deleteSecret(name: string): Promise<StandardRPCResponsePayload>;
40
- }
41
-
42
30
  type StateInspectorAnchor = "left" | "right" | "bottom left" | "bottom right";
43
31
  type StateInspectorOptions = {
44
32
  colorScheme?: "light" | "dark";
45
33
  anchor?: StateInspectorAnchor;
46
34
  };
47
- declare const StateInspector: <S, M, E extends object>(props: {
48
- state: S;
49
- connectionEvents?: ConnectionEvent<S>[];
50
- tasks?: Task[];
35
+ declare const StateInspector: <S, M extends object, E extends object, MenuT extends string = string>(props: {
36
+ noyaManager: NoyaManager<S, M, E, MenuT>;
51
37
  unstyled?: boolean;
52
- multiplayerStateManager: MultiplayerStateManager<S, M>;
53
- assetManager: AssetManager;
54
- connectedUsersManager: ConnectedUsersManager;
55
- secretManager: SecretManager$1;
56
- ephemeralUserDataManager: EphemeralUserDataManager<E>;
57
- forceInit: () => void;
58
38
  } & StateInspectorOptions & Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref">) => React.ReactElement | null;
59
39
 
60
40
  declare function useSyncStateManager<S, M>(stateManager: StateManager<S, M>): S;
61
41
  declare function useSyncStateManager<S, M, P extends string>(stateManager: StateManager<S, M>, path: P): GetAtPath<S, P>;
62
42
  declare function useManagedState<S, M = void>(createInitialState: () => S, options?: StateManagerOptions<S, M>): readonly [S, (...args: M extends {} ? [metadata: M, action: SetStateAction<S>] : [action: SetStateAction<S>]) => void, StateManager<S, M>];
63
43
  declare function useManagedHistory<S, M = void>(stateManager: StateManager<S, M>): _noya_app_state_manager.HistorySnapshot<S, M>;
64
- declare function useSyncMultiplayerStateManager<S, M = void>(multiplayerStateManager: MultiplayerStateManager<S, M>): S;
65
- type UseMultiplayerStateOptions<S, M = void, E extends object = object> = MultiplayerStateManagerOptions<S, M> & {
66
- sync?: (options: Pick<SyncAdapterOptions<S, M, E>, "ms" | "ephemeralUserDataManager" | "assetManager">) => void;
67
- trackConnectionEvents?: boolean;
68
- trackTasks?: boolean;
44
+ type UseMultiplayerStateOptions<S, M extends object = object, E extends object = object, MenuT extends string = string> = MultiplayerStateManagerOptions<S, M> & {
45
+ sync?: SyncAdapter<S, M, E, MenuT>;
69
46
  inspector?: boolean | StateInspectorOptions;
70
47
  };
71
- declare function useMultiplayerState<S, M = void, E extends object = object>(initialState: S | (() => S), options?: UseMultiplayerStateOptions<S, M, E>): readonly [S, (...args: M extends {} ? [metadata: M, action: S | ((prevState: S) => S)] : [action: S | ((prevState: S) => S)]) => void, {
72
- tasks: Task[];
73
- connectionEvents: ConnectionEvent<S>[] | undefined;
74
- connectedUsersManager: ConnectedUsersManager;
75
- ephemeralUserDataManager: EphemeralUserDataManager<E>;
76
- multiplayerStateManager: MultiplayerStateManager<S, M>;
77
- assets: _noya_app_state_manager.Asset[];
78
- assetManager: AssetManager;
79
- aiManager: AIManager;
80
- rpcManager: RPCManager<StandardRPCRequestPayload, StandardRPCResponsePayload>;
81
- workflowManager: WorkflowManager;
82
- secretManager: SecretManager;
48
+ declare function useMultiplayerState<S, M extends object = object, E extends object = object, MenuT extends string = string>(initialState: S | (() => S), options?: UseMultiplayerStateOptions<S, M, E, MenuT>): readonly [S, (...args: [metadata: Partial<M>, action: S | ((prevState: S) => S)] | [action: S | ((prevState: S) => S)]) => void, {
49
+ noyaManager: NoyaManager<S, M, E, MenuT>;
50
+ taskManager: _noya_app_state_manager.TaskManager;
51
+ connectionEventManager: _noya_app_state_manager.ConnectionEventManager<S>;
52
+ connectedUsersManager: _noya_app_state_manager.ConnectedUsersManager;
53
+ ephemeralUserDataManager: _noya_app_state_manager.EphemeralUserDataManager<E>;
54
+ multiplayerStateManager: _noya_app_state_manager.MultiplayerStateManager<S, M>;
55
+ assetManager: _noya_app_state_manager.AssetManager;
56
+ aiManager: _noya_app_state_manager.AIManager;
57
+ rpcManager: _noya_app_state_manager.RPCManager;
58
+ workflowManager: _noya_app_state_manager.WorkflowManager;
59
+ secretManager: _noya_app_state_manager.SecretManager;
60
+ menuItemsManager: _noya_app_state_manager.MenuManager<MenuT>;
83
61
  createAsset: (options: _noya_app_state_manager.CreateAssetOptions | Uint8Array | File | Blob) => Promise<_noya_app_state_manager.Asset>;
84
62
  deleteAsset: (id: string) => Promise<void>;
63
+ assets: _noya_app_state_manager.Asset[];
85
64
  }];
86
65
 
87
66
  type AppViewType = "editable" | "readOnly" | "preview";
@@ -105,33 +84,13 @@ type GetAppDataOptions = {
105
84
  declare function enforceSchema<State>(initialState: State, schema?: TSchema): State;
106
85
  declare function parseAppDataParameter(options?: GetAppDataOptions): AppData<unknown> | null;
107
86
  declare function getAppData<State>(initialState: State | (() => State), schema?: TSchema, options?: GetAppDataOptions): AppData<State>;
108
- type IframeToHostMessage = {
109
- type: "application.setMenuItems";
110
- payload: {
111
- menuItems: any[];
112
- };
113
- } | {
114
- type: "multiplayer.setUsers";
115
- payload: {
116
- users: any[];
117
- };
118
- };
119
- type HostToIframeMessage = {
120
- type: "application.selectMenuItem";
121
- payload: {
122
- value: string;
123
- };
124
- };
125
- declare function useBroadcastConnectedUsers(connectedUsersManager: ConnectedUsersManager): void;
126
- declare function useBroadcastMenuItems<T>(menuItems: any[], handleSelectMenuItem: (value: T) => void): void;
127
- declare function isEmbeddedApp(): boolean;
128
- type UseNoyaStateOptions<S, M = void, E extends object = object> = UseMultiplayerStateOptions<S, M, E> & {
87
+ type UseNoyaStateOptions<S, M extends object = object, E extends object = object, MenuT extends string = string> = UseMultiplayerStateOptions<S, M, E, MenuT> & {
129
88
  offlineStorageKey?: string;
130
89
  };
131
- type UseNoyaStateResult<S, M = void, E extends object = object> = [
132
- ReturnType<typeof useMultiplayerState<S, M, E>>[0],
133
- ReturnType<typeof useMultiplayerState<S, M, E>>[1],
134
- ReturnType<typeof useMultiplayerState<S, M, E>>[2] & {
90
+ type UseNoyaStateResult<S, M extends object = object, E extends object = object, MenuT extends string = string> = [
91
+ ReturnType<typeof useMultiplayerState<S, M, E, MenuT>>[0],
92
+ ReturnType<typeof useMultiplayerState<S, M, E, MenuT>>[1],
93
+ ReturnType<typeof useMultiplayerState<S, M, E, MenuT>>[2] & {
135
94
  theme: AppTheme;
136
95
  viewType: AppViewType;
137
96
  }
@@ -145,14 +104,14 @@ type UseNoyaStateResult<S, M = void, E extends object = object> = [
145
104
  * 2. Pass an initial state and a schema: `useNoyaState(initialState, { schema })`
146
105
  * 3. Pass only a schema, and a conforming initial state is created automatically: `useNoyaState({ schema })`
147
106
  */
148
- declare function useNoyaState<S, M = void, E extends object = object, O extends UseNoyaStateOptions<S, M, E> = UseNoyaStateOptions<S, M, E>>(...args: [
107
+ declare function useNoyaState<S, M extends object = object, E extends object = object, MenuT extends string = string, O extends UseNoyaStateOptions<S, M, E, MenuT> = UseNoyaStateOptions<S, M, E, MenuT>>(...args: [
149
108
  initialState: O["schema"] extends TSchema ? Static<O["schema"]> | (() => Static<O["schema"]>) : S | (() => S),
150
109
  options?: O
151
110
  ] | [options: O & {
152
111
  schema: TSchema;
153
- }]): UseNoyaStateResult<O["schema"] extends TSchema ? Static<O["schema"]> : S, M, E>;
112
+ }]): UseNoyaStateResult<O["schema"] extends TSchema ? Static<O["schema"]> : S, M, E, MenuT>;
154
113
 
155
- interface NoyaStateProviderProps<S, M, E extends object> extends Omit<UseNoyaStateOptions<S, M, E>, "schema" | "mergeHistoryEntries"> {
114
+ interface NoyaStateProviderProps<S, M extends object, E extends object, MenuT extends string> extends Omit<UseNoyaStateOptions<S, M, E, MenuT>, "schema" | "mergeHistoryEntries"> {
156
115
  children: React.ReactNode;
157
116
  initialState?: S;
158
117
  fallback?: React.ReactNode;
@@ -163,12 +122,12 @@ declare function useAssetManager(): {
163
122
  create: (options: _noya_app_state_manager.CreateAssetOptions | Uint8Array | File | Blob) => Promise<_noya_app_state_manager.Asset>;
164
123
  delete: (id: string) => Promise<void>;
165
124
  };
166
- declare function useAIManager(): AIManager;
167
- declare function useSecretManager(): SecretManager$1;
125
+ declare function useAIManager(): _noya_app_state_manager.AIManager;
126
+ declare function useSecretManager(): _noya_app_state_manager.SecretManager;
168
127
  declare function useSecrets(): _noya_app_state_manager.Secret[];
169
128
  declare function useSecret(name: string): _noya_app_state_manager.Secret | undefined;
170
129
  declare function useIsInitialized(): boolean;
171
- declare function useWorkflowManager(): WorkflowManager;
130
+ declare function useWorkflowManager(): _noya_app_state_manager.WorkflowManager;
172
131
  declare const ConnectedUsersContext: React.Context<ConnectedUsersManager | undefined>;
173
132
  declare function useConnectedUsersManager(): ConnectedUsersManager | undefined;
174
133
  declare const AnyEphemeralUserDataManagerContext: React.Context<EphemeralUserDataManager<object> | undefined>;
@@ -178,32 +137,33 @@ declare const FallbackUntilInitialized: ({ children, fallback, }: {
178
137
  children: React.ReactNode;
179
138
  fallback?: React.ReactNode;
180
139
  }) => React.ReactNode;
181
- declare function createNoyaContext<Schema extends TSchema, M = void, E extends object = object>({ schema, mergeHistoryEntries, }: {
140
+ declare function createNoyaContext<Schema extends TSchema, M extends object = object, E extends object = object, MenuT extends string = string>({ schema, mergeHistoryEntries, }: {
182
141
  schema: Schema;
183
142
  mergeHistoryEntries?: StateManagerOptions<Static<Schema>, M>["mergeHistoryEntries"];
184
143
  }): {
185
- Context: React.Context<{
186
- ms: MultiplayerStateManager<Static<Schema>, M>;
187
- assetManager: AssetManager;
188
- secretManager: SecretManager$1;
189
- } | undefined>;
190
- Provider: ({ children, initialState, ...options }: NoyaStateProviderProps<Static<Schema>, M, E>) => React.JSX.Element;
144
+ Context: React.Context<NoyaManager<Static<Schema>, M, E, string> | undefined>;
145
+ Provider: ({ children, initialState, ...options }: NoyaStateProviderProps<Static<Schema>, M, E, MenuT>) => React.JSX.Element;
191
146
  useValue: {
192
147
  (): Static<Schema>;
193
148
  <A>(selector: (value: Static<Schema>) => A, options?: Pick<ObservableOptions, "isEqual">): A;
194
149
  <P extends PathKey[] | string>(path: P): GetAtPath<Static<Schema>, P>;
195
150
  };
196
151
  useSetValue: {
197
- (): M extends {} ? (metadata: M, value: SetStateAction<Static<Schema>>) => void : (value: SetStateAction<Static<Schema>>) => void;
198
- <P extends PathKey[] | string>(path: P): M extends {} ? (metadata: M, value: SetStateAction<GetAtPath<Static<Schema>, P>>) => void : (value: SetStateAction<GetAtPath<Static<Schema>, P>>) => void;
152
+ (): (...args: [metadata: M, value: SetStateAction<Static<Schema>>] | [value: SetStateAction<Static<Schema>>]) => void;
153
+ <P extends PathKey[] | string>(path: P): (...args: [metadata: M, value: SetStateAction<GetAtPath<Static<Schema>, P>>] | [value: SetStateAction<GetAtPath<Static<Schema>, P>>]) => void;
199
154
  };
200
155
  useValueState: {
201
- (): [Static<Schema>, M extends {} ? (metadata: M, value: SetStateAction<Static<Schema>>) => void : (value: SetStateAction<Static<Schema>>) => void];
202
- <A>(selector: (value: Static<Schema>) => A, options?: ObservableOptions): [A, M extends {} ? (metadata: M, value: SetStateAction<Static<Schema>>) => void : (value: SetStateAction<Static<Schema>>) => void];
203
- <P extends PathKey[] | string>(path?: P): [GetAtPath<Static<Schema>, P>, M extends {} ? (metadata: M, value: SetStateAction<GetAtPath<Static<Schema>, P>>) => void : (value: SetStateAction<GetAtPath<Static<Schema>, P>>) => void];
156
+ (): [Static<Schema>, (...args: [metadata: M, value: SetStateAction<Static<Schema>>] | [value: SetStateAction<Static<Schema>>]) => void];
157
+ <A>(selector: (value: Static<Schema>) => A, options?: ObservableOptions): [A, (...args: [metadata: M, value: SetStateAction<Static<Schema>>] | [value: SetStateAction<Static<Schema>>]) => void];
158
+ <P extends PathKey[] | string>(path?: P): [GetAtPath<Static<Schema>, P>, (...args: [metadata: M, value: SetStateAction<GetAtPath<Static<Schema>, P>>] | [value: SetStateAction<GetAtPath<Static<Schema>, P>>]) => void];
204
159
  };
205
160
  useStateManager: () => MultiplayerStateManager<Static<Schema>, M>;
206
161
  useEphemeralUserDataManager: () => EphemeralUserDataManager<E>;
162
+ useLeftMenuItems: () => _noya_app_noya_designsystem.RegularMenuItem<MenuT>[];
163
+ useRightMenuItems: () => _noya_app_noya_designsystem.RegularMenuItem<MenuT>[];
164
+ useHandleMenuItem: (callback: (type: MenuT) => void) => void;
165
+ useOnSelectMenuItemCallback: () => (type: MenuT) => void;
166
+ useNoyaManager: () => NoyaManager<Static<Schema>, M, E, MenuT>;
207
167
  };
208
168
 
209
169
  declare function useObservable<T>(observable: Observable<T>): T;
@@ -213,4 +173,39 @@ declare function useObservable<T>(observable: Observable<T> | undefined): T | un
213
173
  declare function useObservable<T, A>(observable: Observable<T> | undefined, selector: (value: T) => A, options?: Pick<ObservableOptions, "isEqual">): A | undefined;
214
174
  declare function useObservable<T, P extends PathKey[] | string>(observable: Observable<T> | undefined, path: P): GetAtPath<T, P> | undefined;
215
175
 
216
- export { AnyEphemeralUserDataManagerContext, type AppData, type AppTheme, type AppViewType, ConnectedUsersContext, FallbackUntilInitialized, type GetAppDataOptions, type HostToIframeMessage, type IframeToHostMessage, type RenderUserPointer, type RenderUserPointerProps, StateInspector, type StateInspectorAnchor, type StateInspectorOptions, type UseMultiplayerStateOptions, type UseNoyaStateOptions, type UseNoyaStateResult, type UserPointerData, UserPointersOverlay, type UserPointersOverlayProps, createDefaultAppData, createNoyaContext, enforceSchema, getAppData, isEmbeddedApp, parseAppDataParameter, useAIManager, useAnyEphemeralUserData, useAsset, useAssetManager, useAssets, useBroadcastConnectedUsers, useBroadcastMenuItems, useConnectedUsersManager, useCurrentUserId, useIsInitialized, useManagedHistory, useManagedState, useMultiplayerState, useNoyaState, useObservable, useSecret, useSecretManager, useSecrets, useSyncMultiplayerStateManager, useSyncStateManager, useWorkflowManager };
176
+ type ConnectionEvent<State> = {
177
+ type: "stateChange";
178
+ state: ReconnectingWebSocketState;
179
+ } | {
180
+ type: "send";
181
+ message: ClientToServerMessage<State>;
182
+ } | {
183
+ type: "receive";
184
+ message: ServerToClientMessage<State>;
185
+ } | {
186
+ type: "error";
187
+ error: MultiplayerStateManagerError;
188
+ };
189
+ type ConnectionOptions<State> = {
190
+ debug?: boolean;
191
+ onConnectionEvent?: (event: ConnectionEvent<State>) => void;
192
+ };
193
+ declare class WebSocketConnection<State> {
194
+ private url;
195
+ private options;
196
+ private ws;
197
+ private pingCount;
198
+ private pendingPingId?;
199
+ private intervalId?;
200
+ constructor(url: URL, options?: ConnectionOptions<State>);
201
+ connect(): Promise<void>;
202
+ private handleOpen;
203
+ private handleMessage;
204
+ private handleClose;
205
+ send(message: ClientToServerMessage<State>): void;
206
+ close(): void;
207
+ addListener(listener: (state: ReconnectingWebSocketState) => void): () => void;
208
+ removeListener(listener: (state: ReconnectingWebSocketState) => void): void;
209
+ }
210
+
211
+ export { AnyEphemeralUserDataManagerContext, type AppData, type AppTheme, type AppViewType, ConnectedUsersContext, type ConnectionEvent, type ConnectionOptions, FallbackUntilInitialized, type GetAppDataOptions, type RenderUserPointer, type RenderUserPointerProps, StateInspector, type StateInspectorAnchor, type StateInspectorOptions, type UseMultiplayerStateOptions, type UseNoyaStateOptions, type UseNoyaStateResult, type UserPointerData, UserPointersOverlay, type UserPointersOverlayProps, WebSocketConnection, createDefaultAppData, createNoyaContext, enforceSchema, getAppData, parseAppDataParameter, useAIManager, useAnyEphemeralUserData, useAsset, useAssetManager, useAssets, useConnectedUsersManager, useCurrentUserId, useIsInitialized, useManagedHistory, useManagedState, useMultiplayerState, useNoyaState, useObservable, useSecret, useSecretManager, useSecrets, useSyncStateManager, useWorkflowManager };