@noya-app/noya-multiplayer-react 0.1.49 → 0.1.50
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 +9 -0
- package/dist/index.bundle.js +8 -40
- package/dist/index.d.mts +120 -3
- package/dist/index.d.ts +120 -3
- package/dist/index.js +3883 -182
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3921 -197
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/NoyaStateContext.tsx +24 -1
- package/src/inspector/StateInspector.tsx +111 -29
- package/src/noyaApp.ts +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noya-app/noya-multiplayer-react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.50",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
"dev": "npm run build -- --watch"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@noya-app/state-manager": "0.1.
|
|
15
|
+
"@noya-app/state-manager": "0.1.39",
|
|
16
16
|
"@noya-app/emitter": "0.1.0",
|
|
17
17
|
"@noya-app/observable": "0.1.5",
|
|
18
18
|
"@noya-app/task-runner": "0.1.5",
|
|
19
|
-
"@noya-app/react-utils": "0.1.
|
|
19
|
+
"@noya-app/react-utils": "0.1.15",
|
|
20
20
|
"react-inspector": "6.0.2"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
package/src/NoyaStateContext.tsx
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MenuItem } from "@noya-app/noya-designsystem";
|
|
2
|
+
import { Input, OutputTransform } from "@noya-app/noya-schemas";
|
|
2
3
|
import {
|
|
3
4
|
GetAtPath,
|
|
4
5
|
Observable,
|
|
@@ -7,6 +8,7 @@ import {
|
|
|
7
8
|
} from "@noya-app/observable";
|
|
8
9
|
import {
|
|
9
10
|
ConnectedUsersManager,
|
|
11
|
+
CreateParams,
|
|
10
12
|
EphemeralUserDataManager,
|
|
11
13
|
MultiplayerStateManager,
|
|
12
14
|
NoyaManager,
|
|
@@ -134,6 +136,21 @@ export function useSecret(name: string) {
|
|
|
134
136
|
);
|
|
135
137
|
}
|
|
136
138
|
|
|
139
|
+
export function useInputs() {
|
|
140
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
141
|
+
return useObservable(noyaManager.ioManager.inputs$);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export function useOutputTransforms() {
|
|
145
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
146
|
+
return useObservable(noyaManager.ioManager.outputTransforms$);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export function useIOManager() {
|
|
150
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
151
|
+
return noyaManager.ioManager;
|
|
152
|
+
}
|
|
153
|
+
|
|
137
154
|
export function useIsInitialized() {
|
|
138
155
|
const { noyaManager, viewType } = useAnyNoyaStateContext();
|
|
139
156
|
|
|
@@ -201,12 +218,16 @@ export function createNoyaContext<
|
|
|
201
218
|
>({
|
|
202
219
|
schema,
|
|
203
220
|
mergeHistoryEntries,
|
|
221
|
+
outputTransforms,
|
|
222
|
+
inputs,
|
|
204
223
|
}: {
|
|
205
224
|
schema: Schema;
|
|
206
225
|
mergeHistoryEntries?: StateManagerOptions<
|
|
207
226
|
Static<Schema>,
|
|
208
227
|
M
|
|
209
228
|
>["mergeHistoryEntries"];
|
|
229
|
+
outputTransforms?: CreateParams<OutputTransform>[];
|
|
230
|
+
inputs?: CreateParams<Input>[];
|
|
210
231
|
}) {
|
|
211
232
|
type S = Static<Schema>;
|
|
212
233
|
|
|
@@ -227,9 +248,11 @@ export function createNoyaContext<
|
|
|
227
248
|
const [, , { noyaManager, theme, viewType }] = useNoyaState<S, M, E, MenuT>(
|
|
228
249
|
initialState,
|
|
229
250
|
{
|
|
230
|
-
...(options as any),
|
|
231
251
|
schema,
|
|
232
252
|
mergeHistoryEntries,
|
|
253
|
+
outputTransforms,
|
|
254
|
+
inputs,
|
|
255
|
+
...(options as any),
|
|
233
256
|
}
|
|
234
257
|
);
|
|
235
258
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
+
import { Input, OutputTransform } from "@noya-app/noya-schemas";
|
|
3
4
|
import { memoGeneric } from "@noya-app/react-utils";
|
|
4
5
|
import { ExtendedPathKey, NoyaManager } from "@noya-app/state-manager";
|
|
5
6
|
import React, {
|
|
@@ -266,10 +267,13 @@ export const StateInspector = memoGeneric(function StateInspector<
|
|
|
266
267
|
ephemeralUserDataManager,
|
|
267
268
|
connectionEventManager,
|
|
268
269
|
taskManager,
|
|
270
|
+
ioManager,
|
|
269
271
|
} = noyaManager;
|
|
270
272
|
|
|
271
273
|
const [didMount, setDidMount] = React.useState(false);
|
|
272
274
|
const tasks = useObservable(taskManager.tasks$);
|
|
275
|
+
const inputs = useObservable(ioManager.inputs$);
|
|
276
|
+
const outputTransforms = useObservable(ioManager.outputTransforms$);
|
|
273
277
|
|
|
274
278
|
useLayoutEffect(() => {
|
|
275
279
|
setDidMount(true);
|
|
@@ -314,6 +318,14 @@ export const StateInspector = memoGeneric(function StateInspector<
|
|
|
314
318
|
"noya-multiplayer-react-show-secrets",
|
|
315
319
|
false
|
|
316
320
|
);
|
|
321
|
+
const [showInputs, setShowInputs] = useLocalStorageState(
|
|
322
|
+
"noya-multiplayer-react-show-inputs",
|
|
323
|
+
false
|
|
324
|
+
);
|
|
325
|
+
const [showOutputTransforms, setShowOutputTransforms] = useLocalStorageState(
|
|
326
|
+
"noya-multiplayer-react-show-output-transforms",
|
|
327
|
+
false
|
|
328
|
+
);
|
|
317
329
|
|
|
318
330
|
const connectionEvents = useObservable(connectionEventManager.events$);
|
|
319
331
|
|
|
@@ -336,6 +348,10 @@ export const StateInspector = memoGeneric(function StateInspector<
|
|
|
336
348
|
const connectedUsers = useObservable(connectedUsersManager.connectedUsers$);
|
|
337
349
|
const userId = useObservable(connectedUsersManager.currentUserId$);
|
|
338
350
|
const state = useObservable(multiplayerStateManager.optimisticState$);
|
|
351
|
+
const inputsInitialized = useObservable(ioManager.inputsInitialized$);
|
|
352
|
+
const outputTransformsInitialized = useObservable(
|
|
353
|
+
ioManager.outputTransformsInitialized$
|
|
354
|
+
);
|
|
339
355
|
|
|
340
356
|
useEffect(() => {
|
|
341
357
|
if (historyContainerRef.current) {
|
|
@@ -759,35 +775,6 @@ export const StateInspector = memoGeneric(function StateInspector<
|
|
|
759
775
|
))}
|
|
760
776
|
</div>
|
|
761
777
|
</DisclosureSection>
|
|
762
|
-
<DisclosureSection
|
|
763
|
-
title="Tasks"
|
|
764
|
-
colorScheme={colorScheme}
|
|
765
|
-
open={showTasks}
|
|
766
|
-
setOpen={setShowTasks}
|
|
767
|
-
>
|
|
768
|
-
<div style={styles.sectionInner}>
|
|
769
|
-
{tasks?.map((task) => (
|
|
770
|
-
<InspectorRow
|
|
771
|
-
key={task.id}
|
|
772
|
-
colorScheme={colorScheme}
|
|
773
|
-
style={{
|
|
774
|
-
backgroundColor:
|
|
775
|
-
task.status === "done"
|
|
776
|
-
? "rgba(0,255,0,0.2)"
|
|
777
|
-
: task.status === "error"
|
|
778
|
-
? "rgba(255,0,0,0.2)"
|
|
779
|
-
: undefined,
|
|
780
|
-
}}
|
|
781
|
-
>
|
|
782
|
-
<ObjectInspector
|
|
783
|
-
name={task.name}
|
|
784
|
-
data={task.payload}
|
|
785
|
-
theme={theme}
|
|
786
|
-
/>
|
|
787
|
-
</InspectorRow>
|
|
788
|
-
))}
|
|
789
|
-
</div>
|
|
790
|
-
</DisclosureSection>
|
|
791
778
|
<DisclosureSection
|
|
792
779
|
title={
|
|
793
780
|
<TitleLabel>
|
|
@@ -826,6 +813,101 @@ export const StateInspector = memoGeneric(function StateInspector<
|
|
|
826
813
|
</InspectorRow>
|
|
827
814
|
))}
|
|
828
815
|
</div>
|
|
816
|
+
</DisclosureSection>{" "}
|
|
817
|
+
<DisclosureSection
|
|
818
|
+
open={showInputs}
|
|
819
|
+
setOpen={setShowInputs}
|
|
820
|
+
title={
|
|
821
|
+
<TitleLabel>
|
|
822
|
+
Inputs
|
|
823
|
+
<ColoredDot type={inputsInitialized ? "success" : "error"} />
|
|
824
|
+
</TitleLabel>
|
|
825
|
+
}
|
|
826
|
+
colorScheme={colorScheme}
|
|
827
|
+
>
|
|
828
|
+
<div style={styles.sectionInner}>
|
|
829
|
+
{inputs?.map((input: Input) => (
|
|
830
|
+
<InspectorRow key={input.id} colorScheme={colorScheme}>
|
|
831
|
+
<ObjectInspector data={input} theme={theme} />
|
|
832
|
+
</InspectorRow>
|
|
833
|
+
))}
|
|
834
|
+
{!inputs?.length && (
|
|
835
|
+
<div
|
|
836
|
+
style={{
|
|
837
|
+
padding: "12px",
|
|
838
|
+
fontSize: "12px",
|
|
839
|
+
display: "flex",
|
|
840
|
+
flexDirection: "column",
|
|
841
|
+
gap: "4px",
|
|
842
|
+
}}
|
|
843
|
+
>
|
|
844
|
+
<span>No inputs</span>
|
|
845
|
+
</div>
|
|
846
|
+
)}
|
|
847
|
+
</div>
|
|
848
|
+
</DisclosureSection>
|
|
849
|
+
<DisclosureSection
|
|
850
|
+
open={showOutputTransforms}
|
|
851
|
+
setOpen={setShowOutputTransforms}
|
|
852
|
+
title={
|
|
853
|
+
<TitleLabel>
|
|
854
|
+
Output Transforms
|
|
855
|
+
<ColoredDot
|
|
856
|
+
type={outputTransformsInitialized ? "success" : "error"}
|
|
857
|
+
/>
|
|
858
|
+
</TitleLabel>
|
|
859
|
+
}
|
|
860
|
+
colorScheme={colorScheme}
|
|
861
|
+
>
|
|
862
|
+
<div style={styles.sectionInner}>
|
|
863
|
+
{outputTransforms?.map((transform: OutputTransform) => (
|
|
864
|
+
<InspectorRow key={transform.id} colorScheme={colorScheme}>
|
|
865
|
+
<ObjectInspector data={transform} theme={theme} />
|
|
866
|
+
</InspectorRow>
|
|
867
|
+
))}
|
|
868
|
+
{!outputTransforms?.length && (
|
|
869
|
+
<div
|
|
870
|
+
style={{
|
|
871
|
+
padding: "12px",
|
|
872
|
+
fontSize: "12px",
|
|
873
|
+
display: "flex",
|
|
874
|
+
flexDirection: "column",
|
|
875
|
+
gap: "4px",
|
|
876
|
+
}}
|
|
877
|
+
>
|
|
878
|
+
<span>No output transforms</span>
|
|
879
|
+
</div>
|
|
880
|
+
)}
|
|
881
|
+
</div>
|
|
882
|
+
</DisclosureSection>
|
|
883
|
+
<DisclosureSection
|
|
884
|
+
title="Tasks"
|
|
885
|
+
colorScheme={colorScheme}
|
|
886
|
+
open={showTasks}
|
|
887
|
+
setOpen={setShowTasks}
|
|
888
|
+
>
|
|
889
|
+
<div style={styles.sectionInner}>
|
|
890
|
+
{tasks?.map((task) => (
|
|
891
|
+
<InspectorRow
|
|
892
|
+
key={task.id}
|
|
893
|
+
colorScheme={colorScheme}
|
|
894
|
+
style={{
|
|
895
|
+
backgroundColor:
|
|
896
|
+
task.status === "done"
|
|
897
|
+
? "rgba(0,255,0,0.2)"
|
|
898
|
+
: task.status === "error"
|
|
899
|
+
? "rgba(255,0,0,0.2)"
|
|
900
|
+
: undefined,
|
|
901
|
+
}}
|
|
902
|
+
>
|
|
903
|
+
<ObjectInspector
|
|
904
|
+
name={task.name}
|
|
905
|
+
data={task.payload}
|
|
906
|
+
theme={theme}
|
|
907
|
+
/>
|
|
908
|
+
</InspectorRow>
|
|
909
|
+
))}
|
|
910
|
+
</div>
|
|
829
911
|
</DisclosureSection>
|
|
830
912
|
<DisclosureSection
|
|
831
913
|
open={showEphemeral}
|