@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/.turbo/turbo-build.log +11 -11
- package/CHANGELOG.md +16 -0
- package/dist/index.bundle.js +10 -10
- package/dist/index.d.mts +81 -86
- package/dist/index.d.ts +81 -86
- package/dist/index.js +371 -418
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +268 -312
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/src/NoyaStateContext.tsx +96 -95
- package/src/WebSocketConnection.ts +153 -0
- package/src/components/ErrorOverlay.tsx +3 -3
- package/src/hooks.ts +74 -191
- package/src/index.ts +2 -0
- package/src/inspector/StateInspector.tsx +83 -45
- package/src/inspector/useStateInspector.tsx +11 -55
- package/src/noyaApp.ts +36 -95
- package/src/globals.ts +0 -4
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,
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
65
|
-
|
|
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 =
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
assetManager: AssetManager;
|
|
79
|
-
aiManager: AIManager;
|
|
80
|
-
rpcManager: RPCManager
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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
|
-
():
|
|
198
|
-
<P extends PathKey[] | string>(path: P):
|
|
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>,
|
|
202
|
-
<A>(selector: (value: Static<Schema>) => A, options?: ObservableOptions): [A,
|
|
203
|
-
<P extends PathKey[] | string>(path?: P): [GetAtPath<Static<Schema>, P>,
|
|
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
|
-
|
|
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,
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
65
|
-
|
|
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 =
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
assetManager: AssetManager;
|
|
79
|
-
aiManager: AIManager;
|
|
80
|
-
rpcManager: RPCManager
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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
|
-
():
|
|
198
|
-
<P extends PathKey[] | string>(path: P):
|
|
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>,
|
|
202
|
-
<A>(selector: (value: Static<Schema>) => A, options?: ObservableOptions): [A,
|
|
203
|
-
<P extends PathKey[] | string>(path?: P): [GetAtPath<Static<Schema>, P>,
|
|
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
|
-
|
|
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 };
|