@noya-app/noya-multiplayer-react 0.1.70 → 0.1.72
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 +24 -0
- package/dist/index.bundle.js +46 -20
- package/dist/index.d.mts +84 -55
- package/dist/index.d.ts +84 -55
- package/dist/index.js +518 -273
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +471 -233
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/NoyaStateContext.tsx +156 -105
- package/src/__tests__/noyaApp.test.ts +34 -0
- package/src/__tests__/resourcePayload.test.ts +24 -134
- package/src/components/UserPointersOverlay.tsx +22 -20
- package/src/hooks.ts +22 -14
- package/src/inspector/StateInspector.tsx +318 -255
- package/src/inspector/StateInspectorRow.tsx +3 -1
- package/src/inspector/sections/ServerScriptLogsSection.tsx +128 -0
- package/src/inspector/serialization.ts +4 -2
- package/src/inspector/useStateInspector.tsx +10 -4
- package/src/noyaApp.ts +94 -22
- package/src/singleton.tsx +46 -8
package/dist/index.js
CHANGED
|
@@ -1500,7 +1500,7 @@ __export(src_exports, {
|
|
|
1500
1500
|
StateInspector: () => StateInspector,
|
|
1501
1501
|
UserPointersOverlay: () => UserPointersOverlay,
|
|
1502
1502
|
WebSocketConnection: () => WebSocketConnection,
|
|
1503
|
-
|
|
1503
|
+
buildResourcePatchPayload: () => buildResourcePatchPayload,
|
|
1504
1504
|
createDefaultAppData: () => createDefaultAppData,
|
|
1505
1505
|
createNoyaContext: () => createNoyaContext,
|
|
1506
1506
|
createStateInspectorRoot: () => createStateInspectorRoot,
|
|
@@ -1523,9 +1523,9 @@ __export(src_exports, {
|
|
|
1523
1523
|
useAIManager: () => useAIManager,
|
|
1524
1524
|
useActivityEvents: () => useActivityEvents,
|
|
1525
1525
|
useActivityEventsForManager: () => useActivityEventsForManager,
|
|
1526
|
-
useAnyEphemeralUserData: () => useAnyEphemeralUserData,
|
|
1527
1526
|
useAnyNoyaManager: () => useAnyNoyaManager,
|
|
1528
1527
|
useAnyNoyaStateContext: () => useAnyNoyaStateContext,
|
|
1528
|
+
useAnySharedConnectionData: () => useAnySharedConnectionData,
|
|
1529
1529
|
useAsset: () => useAsset,
|
|
1530
1530
|
useAssetManager: () => useAssetManager,
|
|
1531
1531
|
useAssets: () => useAssets,
|
|
@@ -1534,8 +1534,7 @@ __export(src_exports, {
|
|
|
1534
1534
|
useColorScheme: () => useColorScheme,
|
|
1535
1535
|
useConnectedUser: () => useConnectedUser,
|
|
1536
1536
|
useConnectedUsers: () => useConnectedUsers,
|
|
1537
|
-
|
|
1538
|
-
useCurrentUserId: () => useCurrentUserId,
|
|
1537
|
+
useEnqueueInput: () => useEnqueueInput,
|
|
1539
1538
|
useFileName: () => useFileName,
|
|
1540
1539
|
useFilePropertyManager: () => useFilePropertyManager,
|
|
1541
1540
|
useIOManager: () => useIOManager,
|
|
@@ -1545,7 +1544,14 @@ __export(src_exports, {
|
|
|
1545
1544
|
useManagedHistory: () => useManagedHistory,
|
|
1546
1545
|
useManagedState: () => useManagedState,
|
|
1547
1546
|
useMultiplayerState: () => useMultiplayerState,
|
|
1547
|
+
useNoyaAssetTranscription: () => useNoyaAssetTranscription,
|
|
1548
|
+
useNoyaClientId: () => useNoyaClientId,
|
|
1549
|
+
useNoyaConnectionId: () => useNoyaConnectionId,
|
|
1550
|
+
useNoyaId: () => useNoyaId,
|
|
1548
1551
|
useNoyaStateInternal: () => useNoyaStateInternal,
|
|
1552
|
+
useNoyaTranscriptionManager: () => useNoyaTranscriptionManager,
|
|
1553
|
+
useNoyaUser: () => useNoyaUser,
|
|
1554
|
+
useNoyaUserId: () => useNoyaUserId,
|
|
1549
1555
|
useObservable: () => useObservable,
|
|
1550
1556
|
useOutputTransforms: () => useOutputTransforms,
|
|
1551
1557
|
usePipelineManager: () => usePipelineManager,
|
|
@@ -1558,13 +1564,14 @@ __export(src_exports, {
|
|
|
1558
1564
|
useSecrets: () => useSecrets,
|
|
1559
1565
|
useSetFileNameState: () => useSetFileNameState,
|
|
1560
1566
|
useStateInspector: () => useStateInspector,
|
|
1567
|
+
useUserManager: () => useUserManager,
|
|
1561
1568
|
useViewType: () => useViewType
|
|
1562
1569
|
});
|
|
1563
1570
|
module.exports = __toCommonJS(src_exports);
|
|
1564
1571
|
__reExport(src_exports, require("@noya-app/state-manager"), module.exports);
|
|
1565
1572
|
|
|
1566
1573
|
// src/ai.ts
|
|
1567
|
-
var
|
|
1574
|
+
var import_react21 = require("react");
|
|
1568
1575
|
|
|
1569
1576
|
// ../../node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs
|
|
1570
1577
|
var TransformKind = Symbol.for("TypeBox.Transform");
|
|
@@ -4681,15 +4688,15 @@ format_exports.Set("uuid", validateUUID);
|
|
|
4681
4688
|
// src/NoyaStateContext.tsx
|
|
4682
4689
|
var import_observable = require("@noya-app/observable");
|
|
4683
4690
|
var import_react_utils3 = require("@noya-app/react-utils");
|
|
4684
|
-
var
|
|
4691
|
+
var import_react20 = __toESM(require("react"));
|
|
4685
4692
|
|
|
4686
4693
|
// src/noyaApp.ts
|
|
4687
4694
|
var import_state_manager3 = require("@noya-app/state-manager");
|
|
4688
|
-
var
|
|
4695
|
+
var import_react18 = require("react");
|
|
4689
4696
|
|
|
4690
4697
|
// src/hooks.ts
|
|
4691
4698
|
var import_state_manager2 = require("@noya-app/state-manager");
|
|
4692
|
-
var
|
|
4699
|
+
var import_react17 = require("react");
|
|
4693
4700
|
var import_client2 = require("react-dom/client");
|
|
4694
4701
|
|
|
4695
4702
|
// src/components/ErrorOverlay.tsx
|
|
@@ -4767,7 +4774,7 @@ var ErrorOverlay = React.memo(function ErrorOverlay2({
|
|
|
4767
4774
|
});
|
|
4768
4775
|
|
|
4769
4776
|
// src/inspector/useStateInspector.tsx
|
|
4770
|
-
var
|
|
4777
|
+
var import_react16 = __toESM(require("react"));
|
|
4771
4778
|
var import_client = require("react-dom/client");
|
|
4772
4779
|
var import_react_utils2 = require("@noya-app/react-utils");
|
|
4773
4780
|
|
|
@@ -4901,8 +4908,8 @@ function uuid() {
|
|
|
4901
4908
|
|
|
4902
4909
|
// src/inspector/StateInspector.tsx
|
|
4903
4910
|
var import_react_utils = require("@noya-app/react-utils");
|
|
4904
|
-
var
|
|
4905
|
-
var
|
|
4911
|
+
var import_react15 = __toESM(require("react"));
|
|
4912
|
+
var import_react_inspector7 = require("react-inspector");
|
|
4906
4913
|
|
|
4907
4914
|
// src/useObservable.ts
|
|
4908
4915
|
var import_react = require("react");
|
|
@@ -5119,14 +5126,15 @@ function StateInspectorRow({
|
|
|
5119
5126
|
colorScheme,
|
|
5120
5127
|
selected,
|
|
5121
5128
|
style,
|
|
5122
|
-
variant
|
|
5129
|
+
variant,
|
|
5130
|
+
bordered = true
|
|
5123
5131
|
}) {
|
|
5124
5132
|
const solidBorderColor = colorScheme === "light" ? "rgb(223 223 223)" : "rgb(29 29 29)";
|
|
5125
5133
|
return /* @__PURE__ */ import_react6.default.createElement(
|
|
5126
5134
|
"div",
|
|
5127
5135
|
{
|
|
5128
5136
|
style: {
|
|
5129
|
-
borderBottom: `1px solid ${solidBorderColor}
|
|
5137
|
+
borderBottom: bordered ? `1px solid ${solidBorderColor}` : void 0,
|
|
5130
5138
|
fontSize: "12px",
|
|
5131
5139
|
fontFamily: "Menlo, monospace",
|
|
5132
5140
|
padding: "2px 12px 1px",
|
|
@@ -5572,6 +5580,106 @@ function HistorySection({
|
|
|
5572
5580
|
);
|
|
5573
5581
|
}
|
|
5574
5582
|
|
|
5583
|
+
// src/inspector/sections/ServerScriptLogsSection.tsx
|
|
5584
|
+
var import_react11 = __toESM(require("react"));
|
|
5585
|
+
var import_react_inspector6 = require("react-inspector");
|
|
5586
|
+
var levelColors = {
|
|
5587
|
+
error: "#f87171",
|
|
5588
|
+
warn: "#facc15",
|
|
5589
|
+
log: "#9ca3af"
|
|
5590
|
+
};
|
|
5591
|
+
function formatTimestamp(timestamp) {
|
|
5592
|
+
return new Date(timestamp).toLocaleTimeString();
|
|
5593
|
+
}
|
|
5594
|
+
function ServerScriptLogsSection({
|
|
5595
|
+
showLogs,
|
|
5596
|
+
setShowLogs,
|
|
5597
|
+
colorScheme,
|
|
5598
|
+
logs,
|
|
5599
|
+
containerRef,
|
|
5600
|
+
paused,
|
|
5601
|
+
onTogglePaused
|
|
5602
|
+
}) {
|
|
5603
|
+
const theme = getStateInspectorTheme(colorScheme);
|
|
5604
|
+
return /* @__PURE__ */ import_react11.default.createElement(
|
|
5605
|
+
StateInspectorDisclosureSection,
|
|
5606
|
+
{
|
|
5607
|
+
open: showLogs,
|
|
5608
|
+
setOpen: setShowLogs,
|
|
5609
|
+
title: "Server Script Logs",
|
|
5610
|
+
colorScheme,
|
|
5611
|
+
right: /* @__PURE__ */ import_react11.default.createElement(StateInspectorButton, { theme, onClick: onTogglePaused }, paused ? "Resume" : "Pause")
|
|
5612
|
+
},
|
|
5613
|
+
/* @__PURE__ */ import_react11.default.createElement(StateInspectorDisclosureRowInner, { ref: containerRef }, paused && /* @__PURE__ */ import_react11.default.createElement(
|
|
5614
|
+
"div",
|
|
5615
|
+
{
|
|
5616
|
+
style: {
|
|
5617
|
+
padding: "4px 12px",
|
|
5618
|
+
fontSize: "11px",
|
|
5619
|
+
opacity: 0.7
|
|
5620
|
+
}
|
|
5621
|
+
},
|
|
5622
|
+
"Log streaming paused"
|
|
5623
|
+
), logs.map((log) => /* @__PURE__ */ import_react11.default.createElement(StateInspectorRow, { key: log.id, colorScheme }, /* @__PURE__ */ import_react11.default.createElement(
|
|
5624
|
+
"div",
|
|
5625
|
+
{
|
|
5626
|
+
style: {
|
|
5627
|
+
display: "flex",
|
|
5628
|
+
gap: "6px",
|
|
5629
|
+
alignItems: "center",
|
|
5630
|
+
fontSize: "10px",
|
|
5631
|
+
color: "inherit",
|
|
5632
|
+
marginBottom: log.values.length ? "4px" : 0,
|
|
5633
|
+
textTransform: "uppercase"
|
|
5634
|
+
}
|
|
5635
|
+
},
|
|
5636
|
+
/* @__PURE__ */ import_react11.default.createElement("span", null, formatTimestamp(log.timestamp)),
|
|
5637
|
+
/* @__PURE__ */ import_react11.default.createElement("span", { style: { color: levelColors[log.level] } }, log.level),
|
|
5638
|
+
/* @__PURE__ */ import_react11.default.createElement(
|
|
5639
|
+
"span",
|
|
5640
|
+
{
|
|
5641
|
+
style: {
|
|
5642
|
+
fontFamily: "monospace",
|
|
5643
|
+
textTransform: "none",
|
|
5644
|
+
fontSize: "10px"
|
|
5645
|
+
}
|
|
5646
|
+
},
|
|
5647
|
+
log.scriptId
|
|
5648
|
+
)
|
|
5649
|
+
), /* @__PURE__ */ import_react11.default.createElement(
|
|
5650
|
+
"div",
|
|
5651
|
+
{
|
|
5652
|
+
style: {
|
|
5653
|
+
display: "flex",
|
|
5654
|
+
flexDirection: "column",
|
|
5655
|
+
gap: "4px"
|
|
5656
|
+
}
|
|
5657
|
+
},
|
|
5658
|
+
log.values.length > 0 ? log.values.map((value, index) => /* @__PURE__ */ import_react11.default.createElement(
|
|
5659
|
+
import_react_inspector6.ObjectInspector,
|
|
5660
|
+
{
|
|
5661
|
+
key: index,
|
|
5662
|
+
data: value,
|
|
5663
|
+
theme,
|
|
5664
|
+
expandLevel: 3
|
|
5665
|
+
}
|
|
5666
|
+
)) : /* @__PURE__ */ import_react11.default.createElement("span", { style: { fontSize: "11px", opacity: 0.7 } }, "No data")
|
|
5667
|
+
))), !logs?.length && /* @__PURE__ */ import_react11.default.createElement(
|
|
5668
|
+
"div",
|
|
5669
|
+
{
|
|
5670
|
+
style: {
|
|
5671
|
+
padding: "12px",
|
|
5672
|
+
fontSize: "12px",
|
|
5673
|
+
display: "flex",
|
|
5674
|
+
flexDirection: "column",
|
|
5675
|
+
gap: "4px"
|
|
5676
|
+
}
|
|
5677
|
+
},
|
|
5678
|
+
/* @__PURE__ */ import_react11.default.createElement("span", null, "No logs received")
|
|
5679
|
+
))
|
|
5680
|
+
);
|
|
5681
|
+
}
|
|
5682
|
+
|
|
5575
5683
|
// src/inspector/serialization.ts
|
|
5576
5684
|
var import_state_manager = require("@noya-app/state-manager");
|
|
5577
5685
|
|
|
@@ -6120,15 +6228,15 @@ function replaceDeep(obj, replacementMap) {
|
|
|
6120
6228
|
}
|
|
6121
6229
|
|
|
6122
6230
|
// src/inspector/StateInspectorTitleLabel.tsx
|
|
6123
|
-
var
|
|
6231
|
+
var import_react12 = __toESM(require("react"));
|
|
6124
6232
|
function StateInspectorTitleLabel({
|
|
6125
6233
|
children
|
|
6126
6234
|
}) {
|
|
6127
|
-
return /* @__PURE__ */
|
|
6235
|
+
return /* @__PURE__ */ import_react12.default.createElement("span", { style: { display: "flex", alignItems: "center", gap: "4px" } }, children);
|
|
6128
6236
|
}
|
|
6129
6237
|
|
|
6130
6238
|
// src/inspector/StateInspectorToggleButton.tsx
|
|
6131
|
-
var
|
|
6239
|
+
var import_react13 = __toESM(require("react"));
|
|
6132
6240
|
function StateInspectorToggleButton({
|
|
6133
6241
|
showInspector,
|
|
6134
6242
|
setShowInspector,
|
|
@@ -6136,7 +6244,7 @@ function StateInspectorToggleButton({
|
|
|
6136
6244
|
anchor
|
|
6137
6245
|
}) {
|
|
6138
6246
|
const isRightAnchor = anchor === "right";
|
|
6139
|
-
const rightIcon = /* @__PURE__ */
|
|
6247
|
+
const rightIcon = /* @__PURE__ */ import_react13.default.createElement(
|
|
6140
6248
|
"svg",
|
|
6141
6249
|
{
|
|
6142
6250
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -6146,7 +6254,7 @@ function StateInspectorToggleButton({
|
|
|
6146
6254
|
stroke: "currentColor",
|
|
6147
6255
|
className: "size-6"
|
|
6148
6256
|
},
|
|
6149
|
-
/* @__PURE__ */
|
|
6257
|
+
/* @__PURE__ */ import_react13.default.createElement(
|
|
6150
6258
|
"path",
|
|
6151
6259
|
{
|
|
6152
6260
|
strokeLinecap: "round",
|
|
@@ -6155,7 +6263,7 @@ function StateInspectorToggleButton({
|
|
|
6155
6263
|
}
|
|
6156
6264
|
)
|
|
6157
6265
|
);
|
|
6158
|
-
const leftIcon = /* @__PURE__ */
|
|
6266
|
+
const leftIcon = /* @__PURE__ */ import_react13.default.createElement(
|
|
6159
6267
|
"svg",
|
|
6160
6268
|
{
|
|
6161
6269
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -6165,7 +6273,7 @@ function StateInspectorToggleButton({
|
|
|
6165
6273
|
stroke: "currentColor",
|
|
6166
6274
|
className: "size-6"
|
|
6167
6275
|
},
|
|
6168
|
-
/* @__PURE__ */
|
|
6276
|
+
/* @__PURE__ */ import_react13.default.createElement(
|
|
6169
6277
|
"path",
|
|
6170
6278
|
{
|
|
6171
6279
|
strokeLinecap: "round",
|
|
@@ -6174,7 +6282,7 @@ function StateInspectorToggleButton({
|
|
|
6174
6282
|
}
|
|
6175
6283
|
)
|
|
6176
6284
|
);
|
|
6177
|
-
return /* @__PURE__ */
|
|
6285
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
6178
6286
|
"span",
|
|
6179
6287
|
{
|
|
6180
6288
|
role: "button",
|
|
@@ -6195,15 +6303,15 @@ function StateInspectorToggleButton({
|
|
|
6195
6303
|
setShowInspector(!showInspector);
|
|
6196
6304
|
}
|
|
6197
6305
|
},
|
|
6198
|
-
showInspector ? "Hide Inspector" : /* @__PURE__ */
|
|
6306
|
+
showInspector ? "Hide Inspector" : /* @__PURE__ */ import_react13.default.createElement("span", { style: { width: "12px", height: "12px" } }, isRightAnchor ? rightIcon : leftIcon)
|
|
6199
6307
|
);
|
|
6200
6308
|
}
|
|
6201
6309
|
|
|
6202
6310
|
// src/inspector/useLocalStorageState.tsx
|
|
6203
|
-
var
|
|
6311
|
+
var import_react14 = __toESM(require("react"));
|
|
6204
6312
|
var localStorage = typeof window !== "undefined" ? window.localStorage : null;
|
|
6205
6313
|
function useLocalStorageState(key, defaultValue) {
|
|
6206
|
-
const [state, setState] =
|
|
6314
|
+
const [state, setState] = import_react14.default.useState(() => {
|
|
6207
6315
|
const value = localStorage?.getItem(key);
|
|
6208
6316
|
let result = defaultValue;
|
|
6209
6317
|
if (value) {
|
|
@@ -6228,29 +6336,32 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6228
6336
|
colorScheme = "light",
|
|
6229
6337
|
anchor = "right",
|
|
6230
6338
|
unstyled = false,
|
|
6339
|
+
advanced = false,
|
|
6231
6340
|
...props
|
|
6232
6341
|
}) {
|
|
6233
6342
|
const {
|
|
6234
6343
|
multiplayerStateManager,
|
|
6235
6344
|
assetManager,
|
|
6236
|
-
|
|
6345
|
+
userManager,
|
|
6237
6346
|
secretManager,
|
|
6238
|
-
|
|
6347
|
+
sharedConnectionDataManager,
|
|
6239
6348
|
connectionEventManager,
|
|
6240
6349
|
taskManager,
|
|
6241
6350
|
ioManager,
|
|
6242
6351
|
resourceManager,
|
|
6243
|
-
activityEventsManager
|
|
6352
|
+
activityEventsManager,
|
|
6353
|
+
logManager
|
|
6244
6354
|
} = noyaManager;
|
|
6245
|
-
const [didMount, setDidMount] =
|
|
6355
|
+
const [didMount, setDidMount] = import_react15.default.useState(false);
|
|
6246
6356
|
const tasks = useObservable(taskManager.tasks$);
|
|
6247
6357
|
const inputs = useObservable(ioManager.inputs$);
|
|
6248
6358
|
const outputTransforms = useObservable(ioManager.outputTransforms$);
|
|
6249
|
-
(0,
|
|
6359
|
+
(0, import_react15.useLayoutEffect)(() => {
|
|
6250
6360
|
setDidMount(true);
|
|
6251
6361
|
}, []);
|
|
6252
|
-
const eventsContainerRef =
|
|
6253
|
-
const activityEventsContainerRef =
|
|
6362
|
+
const eventsContainerRef = import_react15.default.useRef(null);
|
|
6363
|
+
const activityEventsContainerRef = import_react15.default.useRef(null);
|
|
6364
|
+
const serverLogsContainerRef = import_react15.default.useRef(null);
|
|
6254
6365
|
const [showInspector, setShowInspector] = useLocalStorageState(
|
|
6255
6366
|
"noya-multiplayer-react-show-inspector",
|
|
6256
6367
|
true
|
|
@@ -6275,8 +6386,8 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6275
6386
|
"noya-multiplayer-react-show-tasks",
|
|
6276
6387
|
false
|
|
6277
6388
|
);
|
|
6278
|
-
const [
|
|
6279
|
-
"noya-multiplayer-react-show-
|
|
6389
|
+
const [showShared, setShowShared] = useLocalStorageState(
|
|
6390
|
+
"noya-multiplayer-react-show-shared",
|
|
6280
6391
|
false
|
|
6281
6392
|
);
|
|
6282
6393
|
const [showAssets, setShowAssets] = useLocalStorageState(
|
|
@@ -6303,16 +6414,43 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6303
6414
|
"noya-multiplayer-react-show-activity-events",
|
|
6304
6415
|
false
|
|
6305
6416
|
);
|
|
6417
|
+
const [showServerLogs, setShowServerLogs] = useLocalStorageState(
|
|
6418
|
+
"noya-multiplayer-react-show-server-logs",
|
|
6419
|
+
false
|
|
6420
|
+
);
|
|
6306
6421
|
const connectionEvents = useObservable(connectionEventManager.events$);
|
|
6307
|
-
(0,
|
|
6422
|
+
(0, import_react15.useEffect)(() => {
|
|
6308
6423
|
if (eventsContainerRef.current) {
|
|
6309
6424
|
eventsContainerRef.current.scrollTop = eventsContainerRef.current.scrollHeight;
|
|
6310
6425
|
}
|
|
6311
6426
|
}, [connectionEvents]);
|
|
6427
|
+
const serverLogs = useObservable(logManager.logs$);
|
|
6428
|
+
const [serverLogsPaused, setServerLogsPaused] = import_react15.default.useState(false);
|
|
6429
|
+
const [visibleServerLogs, setVisibleServerLogs] = import_react15.default.useState(
|
|
6430
|
+
serverLogs ?? []
|
|
6431
|
+
);
|
|
6432
|
+
const toggleServerLogsPaused = (0, import_react15.useCallback)(() => {
|
|
6433
|
+
setServerLogsPaused((value) => {
|
|
6434
|
+
if (!value) {
|
|
6435
|
+
setVisibleServerLogs(serverLogs ?? []);
|
|
6436
|
+
}
|
|
6437
|
+
return !value;
|
|
6438
|
+
});
|
|
6439
|
+
}, [serverLogs]);
|
|
6440
|
+
(0, import_react15.useEffect)(() => {
|
|
6441
|
+
if (serverLogsPaused) return;
|
|
6442
|
+
setVisibleServerLogs(serverLogs ?? []);
|
|
6443
|
+
}, [serverLogs, serverLogsPaused]);
|
|
6444
|
+
(0, import_react15.useEffect)(() => {
|
|
6445
|
+
if (!showServerLogs) return;
|
|
6446
|
+
if (serverLogsContainerRef.current) {
|
|
6447
|
+
serverLogsContainerRef.current.scrollTop = serverLogsContainerRef.current.scrollHeight;
|
|
6448
|
+
}
|
|
6449
|
+
}, [showServerLogs, visibleServerLogs]);
|
|
6312
6450
|
const multipeerStateInitialized = useObservable(
|
|
6313
6451
|
multiplayerStateManager.isInitialized$
|
|
6314
6452
|
);
|
|
6315
|
-
const
|
|
6453
|
+
const shared = useObservable(sharedConnectionDataManager.data$);
|
|
6316
6454
|
const historySnapshot = useManagedHistory(multiplayerStateManager.sm);
|
|
6317
6455
|
const assets = useObservable(assetManager.assets$);
|
|
6318
6456
|
const resources = useObservable(resourceManager.resources$);
|
|
@@ -6320,8 +6458,8 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6320
6458
|
const assetsInitialized = useObservable(assetManager.isInitialized$);
|
|
6321
6459
|
const secrets = useObservable(secretManager.secrets$);
|
|
6322
6460
|
const secretsInitialized = useObservable(secretManager.isInitialized$);
|
|
6323
|
-
const connectedUsers = useObservable(
|
|
6324
|
-
const
|
|
6461
|
+
const connectedUsers = useObservable(userManager.connectedUsers$);
|
|
6462
|
+
const connectionId = useObservable(userManager.currentConnectionId$);
|
|
6325
6463
|
const state = useObservable(multiplayerStateManager.optimisticState$);
|
|
6326
6464
|
const inputsInitialized = useObservable(ioManager.inputsInitialized$);
|
|
6327
6465
|
const outputTransformsInitialized = useObservable(
|
|
@@ -6348,11 +6486,11 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6348
6486
|
zIndex: 9999,
|
|
6349
6487
|
lineHeight: "13px"
|
|
6350
6488
|
};
|
|
6351
|
-
const handleExportAll = (0,
|
|
6489
|
+
const handleExportAll = (0, import_react15.useCallback)(async () => {
|
|
6352
6490
|
const buffer = await exportAll(noyaManager);
|
|
6353
6491
|
(0, import_react_utils.downloadBlob)(new Blob([buffer]), "state.zip");
|
|
6354
6492
|
}, [noyaManager]);
|
|
6355
|
-
const handleImportAll = (0,
|
|
6493
|
+
const handleImportAll = (0, import_react15.useCallback)(async () => {
|
|
6356
6494
|
const file = await uploadFile();
|
|
6357
6495
|
const buffer = await file.arrayBuffer();
|
|
6358
6496
|
importAll(buffer, noyaManager, {
|
|
@@ -6365,7 +6503,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6365
6503
|
}, [noyaManager]);
|
|
6366
6504
|
if (!didMount) return null;
|
|
6367
6505
|
if (!showInspector) {
|
|
6368
|
-
return /* @__PURE__ */
|
|
6506
|
+
return /* @__PURE__ */ import_react15.default.createElement(
|
|
6369
6507
|
"div",
|
|
6370
6508
|
{
|
|
6371
6509
|
...props,
|
|
@@ -6377,7 +6515,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6377
6515
|
},
|
|
6378
6516
|
onClick: () => setShowInspector(true)
|
|
6379
6517
|
},
|
|
6380
|
-
/* @__PURE__ */
|
|
6518
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
6381
6519
|
StateInspectorToggleButton,
|
|
6382
6520
|
{
|
|
6383
6521
|
showInspector,
|
|
@@ -6388,7 +6526,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6388
6526
|
)
|
|
6389
6527
|
);
|
|
6390
6528
|
}
|
|
6391
|
-
return /* @__PURE__ */
|
|
6529
|
+
return /* @__PURE__ */ import_react15.default.createElement(
|
|
6392
6530
|
"div",
|
|
6393
6531
|
{
|
|
6394
6532
|
...props,
|
|
@@ -6397,7 +6535,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6397
6535
|
...props.style
|
|
6398
6536
|
}
|
|
6399
6537
|
},
|
|
6400
|
-
/* @__PURE__ */
|
|
6538
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
6401
6539
|
StateInspectorDisclosureSection,
|
|
6402
6540
|
{
|
|
6403
6541
|
isFirst: true,
|
|
@@ -6409,7 +6547,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6409
6547
|
flex: "0 0 auto",
|
|
6410
6548
|
maxHeight: "200px"
|
|
6411
6549
|
},
|
|
6412
|
-
right: /* @__PURE__ */
|
|
6550
|
+
right: /* @__PURE__ */ import_react15.default.createElement(
|
|
6413
6551
|
StateInspectorToggleButton,
|
|
6414
6552
|
{
|
|
6415
6553
|
showInspector,
|
|
@@ -6419,35 +6557,39 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6419
6557
|
}
|
|
6420
6558
|
)
|
|
6421
6559
|
},
|
|
6422
|
-
/* @__PURE__ */
|
|
6423
|
-
|
|
6424
|
-
|
|
6425
|
-
|
|
6426
|
-
colorScheme,
|
|
6427
|
-
variant: user.id === userId ? "up" : void 0
|
|
6428
|
-
},
|
|
6429
|
-
user.image && /* @__PURE__ */ import_react14.default.createElement(
|
|
6430
|
-
"img",
|
|
6560
|
+
/* @__PURE__ */ import_react15.default.createElement(StateInspectorDisclosureRowInner, { style: { flex: "0 0 auto" } }, connectedUsers?.map((user, index, array) => {
|
|
6561
|
+
const identifier = user.userId ?? user.connectionId;
|
|
6562
|
+
return /* @__PURE__ */ import_react15.default.createElement(
|
|
6563
|
+
StateInspectorRow,
|
|
6431
6564
|
{
|
|
6432
|
-
|
|
6433
|
-
|
|
6434
|
-
|
|
6435
|
-
|
|
6436
|
-
|
|
6437
|
-
|
|
6438
|
-
|
|
6439
|
-
|
|
6440
|
-
|
|
6441
|
-
|
|
6442
|
-
|
|
6565
|
+
key: user.connectionId,
|
|
6566
|
+
colorScheme,
|
|
6567
|
+
variant: user.connectionId === connectionId ? "up" : void 0,
|
|
6568
|
+
bordered: index !== array.length - 1
|
|
6569
|
+
},
|
|
6570
|
+
user.image && /* @__PURE__ */ import_react15.default.createElement(
|
|
6571
|
+
"img",
|
|
6572
|
+
{
|
|
6573
|
+
src: user.image,
|
|
6574
|
+
alt: user.name,
|
|
6575
|
+
style: {
|
|
6576
|
+
width: "13px",
|
|
6577
|
+
height: "13px",
|
|
6578
|
+
borderRadius: "50%",
|
|
6579
|
+
marginRight: "4px",
|
|
6580
|
+
display: "inline-block",
|
|
6581
|
+
position: "relative",
|
|
6582
|
+
background: solidBorderColor,
|
|
6583
|
+
verticalAlign: "middle"
|
|
6584
|
+
}
|
|
6443
6585
|
}
|
|
6444
|
-
|
|
6445
|
-
|
|
6446
|
-
|
|
6447
|
-
|
|
6448
|
-
|
|
6449
|
-
|
|
6450
|
-
)
|
|
6586
|
+
),
|
|
6587
|
+
user.name,
|
|
6588
|
+
" (",
|
|
6589
|
+
ellipsis(identifier, 8, "middle"),
|
|
6590
|
+
")"
|
|
6591
|
+
);
|
|
6592
|
+
}), !connectedUsers && /* @__PURE__ */ import_react15.default.createElement(
|
|
6451
6593
|
"div",
|
|
6452
6594
|
{
|
|
6453
6595
|
style: {
|
|
@@ -6458,13 +6600,13 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6458
6600
|
gap: "4px"
|
|
6459
6601
|
}
|
|
6460
6602
|
},
|
|
6461
|
-
/* @__PURE__ */
|
|
6603
|
+
/* @__PURE__ */ import_react15.default.createElement("span", null, "No connected users")
|
|
6462
6604
|
))
|
|
6463
6605
|
),
|
|
6464
|
-
/* @__PURE__ */
|
|
6606
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
6465
6607
|
StateInspectorDisclosureSection,
|
|
6466
6608
|
{
|
|
6467
|
-
title: /* @__PURE__ */
|
|
6609
|
+
title: /* @__PURE__ */ import_react15.default.createElement(StateInspectorTitleLabel, null, "Data", /* @__PURE__ */ import_react15.default.createElement(
|
|
6468
6610
|
ColoredDot,
|
|
6469
6611
|
{
|
|
6470
6612
|
type: multipeerStateInitialized ? "success" : "error"
|
|
@@ -6473,7 +6615,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6473
6615
|
colorScheme,
|
|
6474
6616
|
setOpen: setShowData,
|
|
6475
6617
|
open: showData,
|
|
6476
|
-
right: /* @__PURE__ */
|
|
6618
|
+
right: /* @__PURE__ */ import_react15.default.createElement(
|
|
6477
6619
|
"span",
|
|
6478
6620
|
{
|
|
6479
6621
|
style: {
|
|
@@ -6481,9 +6623,9 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6481
6623
|
gap: "12px"
|
|
6482
6624
|
}
|
|
6483
6625
|
},
|
|
6484
|
-
/* @__PURE__ */
|
|
6485
|
-
/* @__PURE__ */
|
|
6486
|
-
/* @__PURE__ */
|
|
6626
|
+
/* @__PURE__ */ import_react15.default.createElement(StateInspectorButton, { theme, onClick: handleImportAll }, "Import"),
|
|
6627
|
+
/* @__PURE__ */ import_react15.default.createElement(StateInspectorButton, { theme, onClick: handleExportAll }, "Export"),
|
|
6628
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
6487
6629
|
StateInspectorButton,
|
|
6488
6630
|
{
|
|
6489
6631
|
theme,
|
|
@@ -6495,15 +6637,15 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6495
6637
|
)
|
|
6496
6638
|
)
|
|
6497
6639
|
},
|
|
6498
|
-
/* @__PURE__ */
|
|
6499
|
-
|
|
6640
|
+
/* @__PURE__ */ import_react15.default.createElement(StateInspectorDisclosureRowInner, null, /* @__PURE__ */ import_react15.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react15.default.createElement(
|
|
6641
|
+
import_react_inspector7.ObjectInspector,
|
|
6500
6642
|
{
|
|
6501
6643
|
name: multiplayerStateManager.schema ? "state" : void 0,
|
|
6502
6644
|
data: state,
|
|
6503
6645
|
theme
|
|
6504
6646
|
}
|
|
6505
|
-
)), multiplayerStateManager.schema && /* @__PURE__ */
|
|
6506
|
-
|
|
6647
|
+
)), multiplayerStateManager.schema && /* @__PURE__ */ import_react15.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react15.default.createElement(
|
|
6648
|
+
import_react_inspector7.ObjectInspector,
|
|
6507
6649
|
{
|
|
6508
6650
|
name: "schema",
|
|
6509
6651
|
data: multiplayerStateManager.schema,
|
|
@@ -6511,7 +6653,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6511
6653
|
}
|
|
6512
6654
|
)))
|
|
6513
6655
|
),
|
|
6514
|
-
/* @__PURE__ */
|
|
6656
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
6515
6657
|
HistorySection,
|
|
6516
6658
|
{
|
|
6517
6659
|
showHistory,
|
|
@@ -6521,14 +6663,14 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6521
6663
|
multiplayerStateManager
|
|
6522
6664
|
}
|
|
6523
6665
|
),
|
|
6524
|
-
/* @__PURE__ */
|
|
6666
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
6525
6667
|
StateInspectorDisclosureSection,
|
|
6526
6668
|
{
|
|
6527
6669
|
open: showAssets,
|
|
6528
6670
|
setOpen: setShowAssets,
|
|
6529
|
-
title: /* @__PURE__ */
|
|
6671
|
+
title: /* @__PURE__ */ import_react15.default.createElement(StateInspectorTitleLabel, null, "Assets (", assets.length, ")", /* @__PURE__ */ import_react15.default.createElement(ColoredDot, { type: assetsInitialized ? "success" : "error" })),
|
|
6530
6672
|
colorScheme,
|
|
6531
|
-
right: /* @__PURE__ */
|
|
6673
|
+
right: /* @__PURE__ */ import_react15.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react15.default.createElement(
|
|
6532
6674
|
StateInspectorButton,
|
|
6533
6675
|
{
|
|
6534
6676
|
theme,
|
|
@@ -6543,7 +6685,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6543
6685
|
}
|
|
6544
6686
|
},
|
|
6545
6687
|
"Delete all"
|
|
6546
|
-
), /* @__PURE__ */
|
|
6688
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
6547
6689
|
StateInspectorButton,
|
|
6548
6690
|
{
|
|
6549
6691
|
theme,
|
|
@@ -6556,7 +6698,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6556
6698
|
}
|
|
6557
6699
|
},
|
|
6558
6700
|
"Reload"
|
|
6559
|
-
), /* @__PURE__ */
|
|
6701
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
6560
6702
|
StateInspectorButton,
|
|
6561
6703
|
{
|
|
6562
6704
|
theme,
|
|
@@ -6580,14 +6722,14 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6580
6722
|
"Upload"
|
|
6581
6723
|
))
|
|
6582
6724
|
},
|
|
6583
|
-
/* @__PURE__ */
|
|
6584
|
-
|
|
6725
|
+
/* @__PURE__ */ import_react15.default.createElement(StateInspectorDisclosureRowInner, null, assets.map((asset) => /* @__PURE__ */ import_react15.default.createElement(StateInspectorRow, { key: asset.id, colorScheme }, /* @__PURE__ */ import_react15.default.createElement(
|
|
6726
|
+
import_react_inspector7.ObjectInspector,
|
|
6585
6727
|
{
|
|
6586
6728
|
name: asset.id,
|
|
6587
6729
|
data: truncateAsset(asset),
|
|
6588
6730
|
theme
|
|
6589
6731
|
}
|
|
6590
|
-
), /* @__PURE__ */
|
|
6732
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
6591
6733
|
StateInspectorButton,
|
|
6592
6734
|
{
|
|
6593
6735
|
theme,
|
|
@@ -6596,14 +6738,14 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6596
6738
|
"Delete"
|
|
6597
6739
|
))))
|
|
6598
6740
|
),
|
|
6599
|
-
/* @__PURE__ */
|
|
6741
|
+
advanced && /* @__PURE__ */ import_react15.default.createElement(
|
|
6600
6742
|
StateInspectorDisclosureSection,
|
|
6601
6743
|
{
|
|
6602
|
-
title: /* @__PURE__ */
|
|
6744
|
+
title: /* @__PURE__ */ import_react15.default.createElement(StateInspectorTitleLabel, null, "Resources (", resources.length, ")", /* @__PURE__ */ import_react15.default.createElement(ColoredDot, { type: resourcesInitialized ? "success" : "error" })),
|
|
6603
6745
|
colorScheme,
|
|
6604
6746
|
open: showResources,
|
|
6605
6747
|
setOpen: setShowResources,
|
|
6606
|
-
right: /* @__PURE__ */
|
|
6748
|
+
right: /* @__PURE__ */ import_react15.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react15.default.createElement(
|
|
6607
6749
|
StateInspectorButton,
|
|
6608
6750
|
{
|
|
6609
6751
|
theme,
|
|
@@ -6618,7 +6760,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6618
6760
|
}
|
|
6619
6761
|
},
|
|
6620
6762
|
"Delete all"
|
|
6621
|
-
), /* @__PURE__ */
|
|
6763
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
6622
6764
|
StateInspectorButton,
|
|
6623
6765
|
{
|
|
6624
6766
|
theme,
|
|
@@ -6631,7 +6773,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6631
6773
|
}
|
|
6632
6774
|
},
|
|
6633
6775
|
"Create Directory"
|
|
6634
|
-
), /* @__PURE__ */
|
|
6776
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
6635
6777
|
StateInspectorButton,
|
|
6636
6778
|
{
|
|
6637
6779
|
theme,
|
|
@@ -6651,21 +6793,21 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6651
6793
|
"Create Asset"
|
|
6652
6794
|
))
|
|
6653
6795
|
},
|
|
6654
|
-
/* @__PURE__ */
|
|
6655
|
-
|
|
6796
|
+
/* @__PURE__ */ import_react15.default.createElement(StateInspectorDisclosureRowInner, null, resources?.map((resource) => /* @__PURE__ */ import_react15.default.createElement(StateInspectorRow, { key: resource.id, colorScheme }, /* @__PURE__ */ import_react15.default.createElement(
|
|
6797
|
+
import_react_inspector7.ObjectInspector,
|
|
6656
6798
|
{
|
|
6657
6799
|
name: resource.path,
|
|
6658
6800
|
data: resource,
|
|
6659
6801
|
theme
|
|
6660
6802
|
}
|
|
6661
|
-
), /* @__PURE__ */
|
|
6803
|
+
), /* @__PURE__ */ import_react15.default.createElement("div", { style: { display: "flex", gap: "4px" } }, /* @__PURE__ */ import_react15.default.createElement(
|
|
6662
6804
|
StateInspectorButton,
|
|
6663
6805
|
{
|
|
6664
6806
|
theme,
|
|
6665
6807
|
onClick: () => resourceManager.deleteResource({ id: resource.id })
|
|
6666
6808
|
},
|
|
6667
6809
|
"Delete"
|
|
6668
|
-
), /* @__PURE__ */
|
|
6810
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
6669
6811
|
StateInspectorButton,
|
|
6670
6812
|
{
|
|
6671
6813
|
theme,
|
|
@@ -6678,14 +6820,14 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6678
6820
|
"Rename"
|
|
6679
6821
|
)))))
|
|
6680
6822
|
),
|
|
6681
|
-
/* @__PURE__ */
|
|
6823
|
+
advanced && /* @__PURE__ */ import_react15.default.createElement(
|
|
6682
6824
|
StateInspectorDisclosureSection,
|
|
6683
6825
|
{
|
|
6684
|
-
title: /* @__PURE__ */
|
|
6826
|
+
title: /* @__PURE__ */ import_react15.default.createElement(StateInspectorTitleLabel, null, "Secrets", /* @__PURE__ */ import_react15.default.createElement(ColoredDot, { type: secretsInitialized ? "success" : "error" })),
|
|
6685
6827
|
colorScheme,
|
|
6686
6828
|
open: showSecrets,
|
|
6687
6829
|
setOpen: setShowSecrets,
|
|
6688
|
-
right: /* @__PURE__ */
|
|
6830
|
+
right: /* @__PURE__ */ import_react15.default.createElement(
|
|
6689
6831
|
StateInspectorButton,
|
|
6690
6832
|
{
|
|
6691
6833
|
theme,
|
|
@@ -6700,7 +6842,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6700
6842
|
"Create"
|
|
6701
6843
|
)
|
|
6702
6844
|
},
|
|
6703
|
-
/* @__PURE__ */
|
|
6845
|
+
/* @__PURE__ */ import_react15.default.createElement(StateInspectorDisclosureRowInner, null, secrets.map((secret) => /* @__PURE__ */ import_react15.default.createElement(StateInspectorRow, { key: secret.id, colorScheme }, /* @__PURE__ */ import_react15.default.createElement(import_react_inspector7.ObjectInspector, { data: secret, theme }), /* @__PURE__ */ import_react15.default.createElement(
|
|
6704
6846
|
StateInspectorButton,
|
|
6705
6847
|
{
|
|
6706
6848
|
theme,
|
|
@@ -6709,16 +6851,15 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6709
6851
|
"Delete"
|
|
6710
6852
|
))))
|
|
6711
6853
|
),
|
|
6712
|
-
|
|
6713
|
-
/* @__PURE__ */ import_react14.default.createElement(
|
|
6854
|
+
advanced && /* @__PURE__ */ import_react15.default.createElement(
|
|
6714
6855
|
StateInspectorDisclosureSection,
|
|
6715
6856
|
{
|
|
6716
6857
|
open: showInputs,
|
|
6717
6858
|
setOpen: setShowInputs,
|
|
6718
|
-
title: /* @__PURE__ */
|
|
6859
|
+
title: /* @__PURE__ */ import_react15.default.createElement(StateInspectorTitleLabel, null, "Inputs", /* @__PURE__ */ import_react15.default.createElement(ColoredDot, { type: inputsInitialized ? "success" : "error" })),
|
|
6719
6860
|
colorScheme
|
|
6720
6861
|
},
|
|
6721
|
-
/* @__PURE__ */
|
|
6862
|
+
/* @__PURE__ */ import_react15.default.createElement(StateInspectorDisclosureRowInner, null, inputs?.map((input) => /* @__PURE__ */ import_react15.default.createElement(StateInspectorRow, { key: input.id, colorScheme }, /* @__PURE__ */ import_react15.default.createElement(import_react_inspector7.ObjectInspector, { data: input, theme }))), !inputs?.length && /* @__PURE__ */ import_react15.default.createElement(
|
|
6722
6863
|
"div",
|
|
6723
6864
|
{
|
|
6724
6865
|
style: {
|
|
@@ -6729,15 +6870,15 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6729
6870
|
gap: "4px"
|
|
6730
6871
|
}
|
|
6731
6872
|
},
|
|
6732
|
-
/* @__PURE__ */
|
|
6873
|
+
/* @__PURE__ */ import_react15.default.createElement("span", null, "No inputs")
|
|
6733
6874
|
))
|
|
6734
6875
|
),
|
|
6735
|
-
/* @__PURE__ */
|
|
6876
|
+
advanced && /* @__PURE__ */ import_react15.default.createElement(
|
|
6736
6877
|
StateInspectorDisclosureSection,
|
|
6737
6878
|
{
|
|
6738
6879
|
open: showOutputTransforms,
|
|
6739
6880
|
setOpen: setShowOutputTransforms,
|
|
6740
|
-
title: /* @__PURE__ */
|
|
6881
|
+
title: /* @__PURE__ */ import_react15.default.createElement(StateInspectorTitleLabel, null, "Output Transforms", /* @__PURE__ */ import_react15.default.createElement(
|
|
6741
6882
|
ColoredDot,
|
|
6742
6883
|
{
|
|
6743
6884
|
type: outputTransformsInitialized ? "success" : "error"
|
|
@@ -6745,7 +6886,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6745
6886
|
)),
|
|
6746
6887
|
colorScheme
|
|
6747
6888
|
},
|
|
6748
|
-
/* @__PURE__ */
|
|
6889
|
+
/* @__PURE__ */ import_react15.default.createElement(StateInspectorDisclosureRowInner, null, outputTransforms?.map((transform) => /* @__PURE__ */ import_react15.default.createElement(StateInspectorRow, { key: transform.id, colorScheme }, /* @__PURE__ */ import_react15.default.createElement(import_react_inspector7.ObjectInspector, { data: transform, theme }))), !outputTransforms?.length && /* @__PURE__ */ import_react15.default.createElement(
|
|
6749
6890
|
"div",
|
|
6750
6891
|
{
|
|
6751
6892
|
style: {
|
|
@@ -6756,10 +6897,10 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6756
6897
|
gap: "4px"
|
|
6757
6898
|
}
|
|
6758
6899
|
},
|
|
6759
|
-
/* @__PURE__ */
|
|
6900
|
+
/* @__PURE__ */ import_react15.default.createElement("span", null, "No output transforms")
|
|
6760
6901
|
))
|
|
6761
6902
|
),
|
|
6762
|
-
/* @__PURE__ */
|
|
6903
|
+
advanced && /* @__PURE__ */ import_react15.default.createElement(
|
|
6763
6904
|
StateInspectorDisclosureSection,
|
|
6764
6905
|
{
|
|
6765
6906
|
title: "Tasks",
|
|
@@ -6767,7 +6908,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6767
6908
|
open: showTasks,
|
|
6768
6909
|
setOpen: setShowTasks
|
|
6769
6910
|
},
|
|
6770
|
-
/* @__PURE__ */
|
|
6911
|
+
/* @__PURE__ */ import_react15.default.createElement(StateInspectorDisclosureRowInner, null, tasks?.map((task) => /* @__PURE__ */ import_react15.default.createElement(
|
|
6771
6912
|
StateInspectorRow,
|
|
6772
6913
|
{
|
|
6773
6914
|
key: task.id,
|
|
@@ -6776,8 +6917,8 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6776
6917
|
backgroundColor: task.status === "done" ? "rgba(0,255,0,0.2)" : task.status === "error" ? "rgba(255,0,0,0.2)" : void 0
|
|
6777
6918
|
}
|
|
6778
6919
|
},
|
|
6779
|
-
/* @__PURE__ */
|
|
6780
|
-
|
|
6920
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
6921
|
+
import_react_inspector7.ObjectInspector,
|
|
6781
6922
|
{
|
|
6782
6923
|
name: task.name,
|
|
6783
6924
|
data: task.payload,
|
|
@@ -6786,16 +6927,16 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6786
6927
|
)
|
|
6787
6928
|
)))
|
|
6788
6929
|
),
|
|
6789
|
-
/* @__PURE__ */
|
|
6930
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
6790
6931
|
StateInspectorDisclosureSection,
|
|
6791
6932
|
{
|
|
6792
|
-
open:
|
|
6793
|
-
setOpen:
|
|
6794
|
-
title: "
|
|
6933
|
+
open: showShared,
|
|
6934
|
+
setOpen: setShowShared,
|
|
6935
|
+
title: "Shared Connection Data",
|
|
6795
6936
|
colorScheme
|
|
6796
6937
|
},
|
|
6797
|
-
/* @__PURE__ */
|
|
6798
|
-
|
|
6938
|
+
/* @__PURE__ */ import_react15.default.createElement(StateInspectorDisclosureRowInner, null, Object.entries(shared).map(([key, value]) => /* @__PURE__ */ import_react15.default.createElement(StateInspectorRow, { key, colorScheme }, /* @__PURE__ */ import_react15.default.createElement(
|
|
6939
|
+
import_react_inspector7.ObjectInspector,
|
|
6799
6940
|
{
|
|
6800
6941
|
name: key,
|
|
6801
6942
|
data: value,
|
|
@@ -6804,7 +6945,19 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6804
6945
|
}
|
|
6805
6946
|
))))
|
|
6806
6947
|
),
|
|
6807
|
-
/* @__PURE__ */
|
|
6948
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
6949
|
+
ServerScriptLogsSection,
|
|
6950
|
+
{
|
|
6951
|
+
colorScheme,
|
|
6952
|
+
showLogs: showServerLogs,
|
|
6953
|
+
setShowLogs: setShowServerLogs,
|
|
6954
|
+
logs: visibleServerLogs,
|
|
6955
|
+
paused: serverLogsPaused,
|
|
6956
|
+
onTogglePaused: toggleServerLogsPaused,
|
|
6957
|
+
containerRef: serverLogsContainerRef
|
|
6958
|
+
}
|
|
6959
|
+
),
|
|
6960
|
+
advanced && /* @__PURE__ */ import_react15.default.createElement(
|
|
6808
6961
|
ActivityEventsSection,
|
|
6809
6962
|
{
|
|
6810
6963
|
colorScheme,
|
|
@@ -6814,7 +6967,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
6814
6967
|
activityEventsManager
|
|
6815
6968
|
}
|
|
6816
6969
|
),
|
|
6817
|
-
/* @__PURE__ */
|
|
6970
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
6818
6971
|
EventsSection,
|
|
6819
6972
|
{
|
|
6820
6973
|
connectionEvents,
|
|
@@ -6856,10 +7009,11 @@ function createStateInspectorRoot() {
|
|
|
6856
7009
|
function useStateInspector({
|
|
6857
7010
|
noyaManager,
|
|
6858
7011
|
disabled = false,
|
|
7012
|
+
advanced = false,
|
|
6859
7013
|
colorScheme,
|
|
6860
7014
|
anchor
|
|
6861
7015
|
}) {
|
|
6862
|
-
const [root, setRoot] =
|
|
7016
|
+
const [root, setRoot] = import_react16.default.useState(null);
|
|
6863
7017
|
(0, import_react_utils2.useIsomorphicLayoutEffect)(() => {
|
|
6864
7018
|
if (disabled) return;
|
|
6865
7019
|
const { root: root2, unmount } = createStateInspectorRoot();
|
|
@@ -6869,32 +7023,33 @@ function useStateInspector({
|
|
|
6869
7023
|
(0, import_react_utils2.useIsomorphicLayoutEffect)(() => {
|
|
6870
7024
|
if (!root) return;
|
|
6871
7025
|
root.render(
|
|
6872
|
-
/* @__PURE__ */
|
|
7026
|
+
/* @__PURE__ */ import_react16.default.createElement(
|
|
6873
7027
|
StateInspector,
|
|
6874
7028
|
{
|
|
6875
7029
|
colorScheme,
|
|
6876
7030
|
anchor,
|
|
6877
|
-
noyaManager
|
|
7031
|
+
noyaManager,
|
|
7032
|
+
advanced
|
|
6878
7033
|
}
|
|
6879
7034
|
)
|
|
6880
7035
|
);
|
|
6881
|
-
}, [noyaManager, anchor, colorScheme, root]);
|
|
7036
|
+
}, [noyaManager, anchor, colorScheme, root, advanced]);
|
|
6882
7037
|
}
|
|
6883
7038
|
|
|
6884
7039
|
// src/hooks.ts
|
|
6885
7040
|
function useManagedState(createInitialState, options) {
|
|
6886
|
-
const [stateManager] = (0,
|
|
7041
|
+
const [stateManager] = (0, import_react17.useState)(
|
|
6887
7042
|
() => new import_state_manager2.StateManager(createInitialState(), options)
|
|
6888
7043
|
);
|
|
6889
|
-
const getSnapshot = (0,
|
|
7044
|
+
const getSnapshot = (0, import_react17.useCallback)(() => {
|
|
6890
7045
|
return stateManager.getState();
|
|
6891
7046
|
}, [stateManager]);
|
|
6892
|
-
const state = (0,
|
|
7047
|
+
const state = (0, import_react17.useSyncExternalStore)(
|
|
6893
7048
|
stateManager.addListener,
|
|
6894
7049
|
getSnapshot,
|
|
6895
7050
|
getSnapshot
|
|
6896
7051
|
);
|
|
6897
|
-
const setState = (0,
|
|
7052
|
+
const setState = (0, import_react17.useCallback)(
|
|
6898
7053
|
(...args) => {
|
|
6899
7054
|
const [metadata, action] = args.length === 1 ? [void 0, args[0]] : args;
|
|
6900
7055
|
if (metadata === void 0) {
|
|
@@ -6930,7 +7085,7 @@ function useManagedState(createInitialState, options) {
|
|
|
6930
7085
|
return [state, setState, stateManager];
|
|
6931
7086
|
}
|
|
6932
7087
|
function useManagedHistory(stateManager) {
|
|
6933
|
-
return (0,
|
|
7088
|
+
return (0, import_react17.useSyncExternalStore)(
|
|
6934
7089
|
stateManager.historyEmittor.addListener,
|
|
6935
7090
|
stateManager.getHistorySnapshot,
|
|
6936
7091
|
stateManager.getHistorySnapshot
|
|
@@ -6941,13 +7096,13 @@ function useBindNoyaManager(noyaManager, options) {
|
|
|
6941
7096
|
noyaManager.multiplayerStateManager.optimisticState$
|
|
6942
7097
|
);
|
|
6943
7098
|
const assets = useObservable(noyaManager.assetManager.assets$);
|
|
6944
|
-
const extras = (0,
|
|
7099
|
+
const extras = (0, import_react17.useMemo)(() => {
|
|
6945
7100
|
return {
|
|
6946
7101
|
noyaManager,
|
|
6947
7102
|
taskManager: noyaManager.taskManager,
|
|
6948
7103
|
connectionEventManager: noyaManager.connectionEventManager,
|
|
6949
|
-
|
|
6950
|
-
|
|
7104
|
+
userManager: noyaManager.userManager,
|
|
7105
|
+
sharedConnectionDataManager: noyaManager.sharedConnectionDataManager,
|
|
6951
7106
|
multiplayerStateManager: noyaManager.multiplayerStateManager,
|
|
6952
7107
|
assetManager: noyaManager.assetManager,
|
|
6953
7108
|
aiManager: noyaManager.aiManager,
|
|
@@ -6960,8 +7115,8 @@ function useBindNoyaManager(noyaManager, options) {
|
|
|
6960
7115
|
assets
|
|
6961
7116
|
};
|
|
6962
7117
|
}, [noyaManager, assets]);
|
|
6963
|
-
const syncRef = (0,
|
|
6964
|
-
(0,
|
|
7118
|
+
const syncRef = (0, import_react17.useRef)(options?.sync);
|
|
7119
|
+
(0, import_react17.useEffect)(() => {
|
|
6965
7120
|
if (syncRef.current) {
|
|
6966
7121
|
return syncRef.current({ noyaManager });
|
|
6967
7122
|
}
|
|
@@ -6970,6 +7125,7 @@ function useBindNoyaManager(noyaManager, options) {
|
|
|
6970
7125
|
useStateInspector({
|
|
6971
7126
|
noyaManager,
|
|
6972
7127
|
disabled: !options?.inspector,
|
|
7128
|
+
advanced: true,
|
|
6973
7129
|
...typeof options?.inspector === "object" && options?.inspector
|
|
6974
7130
|
});
|
|
6975
7131
|
return [state, noyaManager.multiplayerStateManager.setState, extras];
|
|
@@ -6980,20 +7136,23 @@ function useMultiplayerState(initialState, options) {
|
|
|
6980
7136
|
inspector,
|
|
6981
7137
|
...rest
|
|
6982
7138
|
} = options ?? {};
|
|
6983
|
-
const [noyaManager] = (0,
|
|
7139
|
+
const [noyaManager] = (0, import_react17.useState)(
|
|
6984
7140
|
() => new import_state_manager2.NoyaManager(initialState, rest)
|
|
6985
7141
|
);
|
|
6986
|
-
return useBindNoyaManager(noyaManager, {
|
|
7142
|
+
return useBindNoyaManager(noyaManager, {
|
|
7143
|
+
sync,
|
|
7144
|
+
inspector
|
|
7145
|
+
});
|
|
6987
7146
|
}
|
|
6988
7147
|
function useErrorOverlay(noyaManager) {
|
|
6989
7148
|
const unrecoverableError = useObservable(noyaManager.unrecoverableError);
|
|
6990
|
-
(0,
|
|
7149
|
+
(0, import_react17.useEffect)(() => {
|
|
6991
7150
|
if (!unrecoverableError) return;
|
|
6992
7151
|
const el = document.createElement("div");
|
|
6993
7152
|
el.id = "noya-multiplayer-react-error-overlay";
|
|
6994
7153
|
document.body.appendChild(el);
|
|
6995
7154
|
const root = (0, import_client2.createRoot)(el);
|
|
6996
|
-
root.render((0,
|
|
7155
|
+
root.render((0, import_react17.createElement)(ErrorOverlay, { error: unrecoverableError }));
|
|
6997
7156
|
return () => {
|
|
6998
7157
|
root.unmount();
|
|
6999
7158
|
el.remove();
|
|
@@ -7007,7 +7166,9 @@ function createDefaultAppData(initialState) {
|
|
|
7007
7166
|
theme: "light",
|
|
7008
7167
|
viewType: "editable",
|
|
7009
7168
|
initialState,
|
|
7010
|
-
inspector: false
|
|
7169
|
+
inspector: false,
|
|
7170
|
+
isDemo: false,
|
|
7171
|
+
access: void 0
|
|
7011
7172
|
};
|
|
7012
7173
|
}
|
|
7013
7174
|
function enforceSchema(initialState, schema) {
|
|
@@ -7038,11 +7199,23 @@ function getAppData(initialState, schema, options) {
|
|
|
7038
7199
|
appData.initialState = resolvedInitialState;
|
|
7039
7200
|
}
|
|
7040
7201
|
appData.initialState = enforceSchema(appData.initialState, schema);
|
|
7202
|
+
appData.isDemo = appData.isDemo ?? false;
|
|
7203
|
+
const fallbackAccess = appData.viewType === "editable" ? "write" : "read";
|
|
7204
|
+
appData.access = appData.access ?? fallbackAccess;
|
|
7041
7205
|
return appData;
|
|
7042
7206
|
}
|
|
7043
7207
|
function getSyncAdapter(params) {
|
|
7044
|
-
const {
|
|
7045
|
-
|
|
7208
|
+
const {
|
|
7209
|
+
multiplayerUrl,
|
|
7210
|
+
offlineStorageKey,
|
|
7211
|
+
debug,
|
|
7212
|
+
policyAuthContext,
|
|
7213
|
+
serverScripts
|
|
7214
|
+
} = params ?? {};
|
|
7215
|
+
return (0, import_state_manager3.isEmbeddedApp)() ? (0, import_state_manager3.parentFrameSync)({ debug, policyAuthContext }) : multiplayerUrl ? (0, import_state_manager3.webSocketSync)({ url: multiplayerUrl, debug }) : offlineStorageKey ? (0, import_state_manager3.localStorageSync)({
|
|
7216
|
+
key: offlineStorageKey,
|
|
7217
|
+
...serverScripts ? { serverScripts } : {}
|
|
7218
|
+
}) : (0, import_state_manager3.stubSync)();
|
|
7046
7219
|
}
|
|
7047
7220
|
function useNoyaStateInternal(...args) {
|
|
7048
7221
|
const [initialState, options] = typeof args[0] === "object" && args[0] !== null && "schema" in args[0] && import_state_manager3.TypeGuard.IsSchema(args[0].schema) ? [null, args[0]] : [args[0], args[1]];
|
|
@@ -7052,37 +7225,69 @@ function useNoyaStateInternal(...args) {
|
|
|
7052
7225
|
inspector,
|
|
7053
7226
|
initialState: noyaAppInitialState,
|
|
7054
7227
|
theme,
|
|
7055
|
-
viewType
|
|
7228
|
+
viewType,
|
|
7229
|
+
userId,
|
|
7230
|
+
isDemo,
|
|
7231
|
+
access
|
|
7056
7232
|
}
|
|
7057
|
-
] = (0,
|
|
7233
|
+
] = (0, import_react18.useState)(() => {
|
|
7058
7234
|
return getAppData(initialState, options?.schema, {
|
|
7059
7235
|
overrideExistingState: options?.overrideExistingState
|
|
7060
7236
|
});
|
|
7061
7237
|
});
|
|
7062
|
-
const
|
|
7238
|
+
const basePolicyAuthContext = (0, import_react18.useMemo)(() => {
|
|
7239
|
+
if (!access && userId === void 0) return void 0;
|
|
7240
|
+
const context = {};
|
|
7241
|
+
if (access) {
|
|
7242
|
+
context.access = access;
|
|
7243
|
+
}
|
|
7244
|
+
if (userId !== void 0) {
|
|
7245
|
+
context.id = userId ?? null;
|
|
7246
|
+
}
|
|
7247
|
+
return context;
|
|
7248
|
+
}, [access, userId]);
|
|
7249
|
+
const sync = (0, import_react18.useMemo)(() => {
|
|
7063
7250
|
return getSyncAdapter({
|
|
7064
7251
|
multiplayerUrl,
|
|
7065
7252
|
offlineStorageKey: options?.offlineStorageKey,
|
|
7066
|
-
debug: options?.debug
|
|
7253
|
+
debug: options?.debug,
|
|
7254
|
+
policyAuthContext: basePolicyAuthContext
|
|
7067
7255
|
});
|
|
7068
|
-
}, [
|
|
7069
|
-
|
|
7256
|
+
}, [
|
|
7257
|
+
multiplayerUrl,
|
|
7258
|
+
options?.offlineStorageKey,
|
|
7259
|
+
options?.debug,
|
|
7260
|
+
basePolicyAuthContext
|
|
7261
|
+
]);
|
|
7262
|
+
const [noyaManager] = (0, import_react18.useState)(
|
|
7070
7263
|
() => new import_state_manager3.NoyaManager(noyaAppInitialState, options)
|
|
7071
7264
|
);
|
|
7265
|
+
(0, import_react18.useEffect)(() => {
|
|
7266
|
+
if (!userId) return;
|
|
7267
|
+
noyaManager.sharedConnectionDataManager.setCurrentConnectionId(userId);
|
|
7268
|
+
noyaManager.userManager.setCurrentConnectionId(userId);
|
|
7269
|
+
noyaManager.userManager.setCurrentUserId(userId);
|
|
7270
|
+
}, [noyaManager, userId]);
|
|
7271
|
+
(0, import_react18.useEffect)(() => {
|
|
7272
|
+
if (!basePolicyAuthContext) return;
|
|
7273
|
+
noyaManager.multiplayerStateManager.setPolicyAuthContext(
|
|
7274
|
+
basePolicyAuthContext
|
|
7275
|
+
);
|
|
7276
|
+
}, [noyaManager, basePolicyAuthContext]);
|
|
7072
7277
|
const result = useBindNoyaManager(noyaManager, {
|
|
7073
7278
|
inspector: options?.inspector ?? inspector,
|
|
7074
7279
|
sync: options?.sync ?? sync
|
|
7075
7280
|
});
|
|
7076
7281
|
const [, , extras] = result;
|
|
7077
|
-
const mergedExtras = (0,
|
|
7078
|
-
return { ...extras, theme, viewType };
|
|
7079
|
-
}, [extras, theme, viewType]);
|
|
7282
|
+
const mergedExtras = (0, import_react18.useMemo)(() => {
|
|
7283
|
+
return { ...extras, theme, viewType, isDemo };
|
|
7284
|
+
}, [extras, theme, viewType, isDemo]);
|
|
7080
7285
|
return [result[0], result[1], mergedExtras];
|
|
7081
7286
|
}
|
|
7082
7287
|
|
|
7083
7288
|
// src/singleton.tsx
|
|
7084
7289
|
var import_state_manager4 = require("@noya-app/state-manager");
|
|
7085
|
-
var
|
|
7290
|
+
var import_react19 = __toESM(require("react"));
|
|
7086
7291
|
var noyaManagerSingleton;
|
|
7087
7292
|
var noyaSingletonBindings;
|
|
7088
7293
|
function initializeNoyaSingleton(options) {
|
|
@@ -7099,6 +7304,7 @@ function initializeNoyaSingleton(options) {
|
|
|
7099
7304
|
viewType,
|
|
7100
7305
|
offlineStorageKey,
|
|
7101
7306
|
multiplayerUrl,
|
|
7307
|
+
serverScripts,
|
|
7102
7308
|
...managerOptions
|
|
7103
7309
|
} = options ?? {};
|
|
7104
7310
|
const appData = getAppData(
|
|
@@ -7106,14 +7312,27 @@ function initializeNoyaSingleton(options) {
|
|
|
7106
7312
|
managerOptions?.schema,
|
|
7107
7313
|
{ overrideExistingState: managerOptions?.overrideExistingState }
|
|
7108
7314
|
);
|
|
7315
|
+
const policyAuthContext = appData.access || appData.userId !== void 0 ? {
|
|
7316
|
+
...appData.access ? { access: appData.access } : {},
|
|
7317
|
+
...appData.userId !== void 0 ? { id: appData.userId ?? null } : {}
|
|
7318
|
+
} : void 0;
|
|
7109
7319
|
noyaManagerSingleton = new import_state_manager4.NoyaManager(
|
|
7110
7320
|
appData.initialState,
|
|
7111
7321
|
managerOptions
|
|
7112
7322
|
);
|
|
7323
|
+
if (appData.userId) {
|
|
7324
|
+
noyaManagerSingleton.sharedConnectionDataManager.setCurrentConnectionId(
|
|
7325
|
+
appData.userId
|
|
7326
|
+
);
|
|
7327
|
+
noyaManagerSingleton.userManager.setCurrentConnectionId(appData.userId);
|
|
7328
|
+
noyaManagerSingleton.userManager.setCurrentUserId(appData.userId);
|
|
7329
|
+
}
|
|
7113
7330
|
const resolvedSync = sync ?? getSyncAdapter({
|
|
7114
7331
|
multiplayerUrl: multiplayerUrl ?? appData.multiplayerUrl,
|
|
7115
7332
|
offlineStorageKey,
|
|
7116
|
-
debug: managerOptions?.debug
|
|
7333
|
+
debug: managerOptions?.debug,
|
|
7334
|
+
serverScripts,
|
|
7335
|
+
policyAuthContext
|
|
7117
7336
|
});
|
|
7118
7337
|
try {
|
|
7119
7338
|
resolvedSync({ noyaManager: noyaManagerSingleton });
|
|
@@ -7126,12 +7345,13 @@ function initializeNoyaSingleton(options) {
|
|
|
7126
7345
|
if (resolvedInspector) {
|
|
7127
7346
|
const { root } = createStateInspectorRoot();
|
|
7128
7347
|
root.render(
|
|
7129
|
-
/* @__PURE__ */
|
|
7348
|
+
/* @__PURE__ */ import_react19.default.createElement(
|
|
7130
7349
|
StateInspector,
|
|
7131
7350
|
{
|
|
7132
7351
|
noyaManager: noyaManagerSingleton,
|
|
7133
7352
|
colorScheme: resolvedInspector === true ? resolvedTheme : resolvedInspector.colorScheme,
|
|
7134
|
-
anchor: resolvedInspector === true ? "bottom right" : resolvedInspector.anchor
|
|
7353
|
+
anchor: resolvedInspector === true ? "bottom right" : resolvedInspector.anchor,
|
|
7354
|
+
advanced: resolvedInspector === true ? false : resolvedInspector.advanced
|
|
7135
7355
|
}
|
|
7136
7356
|
)
|
|
7137
7357
|
);
|
|
@@ -7140,7 +7360,9 @@ function initializeNoyaSingleton(options) {
|
|
|
7140
7360
|
sync: resolvedSync,
|
|
7141
7361
|
inspector: resolvedInspector,
|
|
7142
7362
|
theme: resolvedTheme,
|
|
7143
|
-
viewType: resolvedViewType
|
|
7363
|
+
viewType: resolvedViewType,
|
|
7364
|
+
userId: appData.userId,
|
|
7365
|
+
isDemo: appData.isDemo
|
|
7144
7366
|
};
|
|
7145
7367
|
}
|
|
7146
7368
|
function getNoyaManagerSingleton() {
|
|
@@ -7191,44 +7413,42 @@ function resourceToCreateParameters(resource) {
|
|
|
7191
7413
|
throw new Error(`Unknown resource type: ${resource.type}`);
|
|
7192
7414
|
}
|
|
7193
7415
|
}
|
|
7194
|
-
function
|
|
7416
|
+
function buildResourcePatchPayload({
|
|
7195
7417
|
addedResources,
|
|
7196
7418
|
modifiedResources,
|
|
7197
|
-
|
|
7198
|
-
resourceMap
|
|
7419
|
+
removedResources
|
|
7199
7420
|
}) {
|
|
7200
|
-
const
|
|
7201
|
-
const
|
|
7202
|
-
|
|
7203
|
-
);
|
|
7204
|
-
const payload = [
|
|
7205
|
-
...addedResources.map(toCreateParameters)
|
|
7206
|
-
];
|
|
7207
|
-
const handledModifiedResourceIds = [];
|
|
7208
|
-
const assetReplacements = modifiedResources.filter(
|
|
7209
|
-
(resource) => resource.assetId !== void 0 || resource.asset !== void 0
|
|
7210
|
-
).map((resource) => {
|
|
7211
|
-
const previousResource = resourcesById.get(resource.id);
|
|
7212
|
-
const path2 = resource.path ?? previousResource?.path;
|
|
7213
|
-
if (!path2) return void 0;
|
|
7214
|
-
const updated = newResourceMap[path2];
|
|
7215
|
-
if (!updated || updated.type !== "asset") return void 0;
|
|
7216
|
-
handledModifiedResourceIds.push(resource.id);
|
|
7217
|
-
return toCreateParameters(updated);
|
|
7218
|
-
}).filter(
|
|
7219
|
-
(resource) => resource !== void 0
|
|
7421
|
+
const createEntries = addedResources.map(resourceToCreateParameters);
|
|
7422
|
+
const dedupedCreateEntries = Array.from(
|
|
7423
|
+
new Map(createEntries.map((entry) => [entry.path, entry])).values()
|
|
7220
7424
|
);
|
|
7221
|
-
const
|
|
7222
|
-
|
|
7425
|
+
const updateEntries = modifiedResources.map((resource) => {
|
|
7426
|
+
const update = {
|
|
7427
|
+
id: resource.id,
|
|
7428
|
+
...resource.path !== void 0 ? { path: resource.path } : {},
|
|
7429
|
+
...resource.assetId !== void 0 ? { assetId: resource.assetId } : {},
|
|
7430
|
+
...resource.asset ? { asset: resource.asset } : {}
|
|
7431
|
+
};
|
|
7432
|
+
return update;
|
|
7433
|
+
}) ?? [];
|
|
7434
|
+
const deleteEntries = removedResources.map(
|
|
7435
|
+
(resource) => ({ id: resource.id })
|
|
7223
7436
|
);
|
|
7224
|
-
|
|
7225
|
-
|
|
7226
|
-
|
|
7227
|
-
}
|
|
7437
|
+
const patch = {};
|
|
7438
|
+
if (dedupedCreateEntries.length) {
|
|
7439
|
+
patch.create = dedupedCreateEntries;
|
|
7440
|
+
}
|
|
7441
|
+
if (updateEntries.length) {
|
|
7442
|
+
patch.update = updateEntries;
|
|
7443
|
+
}
|
|
7444
|
+
if (deleteEntries.length) {
|
|
7445
|
+
patch.delete = deleteEntries;
|
|
7446
|
+
}
|
|
7447
|
+
return patch;
|
|
7228
7448
|
}
|
|
7229
|
-
var AnyNoyaStateContext = (0,
|
|
7449
|
+
var AnyNoyaStateContext = (0, import_react20.createContext)(void 0);
|
|
7230
7450
|
function useAnyNoyaStateContext() {
|
|
7231
|
-
const value = (0,
|
|
7451
|
+
const value = (0, import_react20.useContext)(AnyNoyaStateContext);
|
|
7232
7452
|
if (!value) {
|
|
7233
7453
|
const bindings = getNoyaSingletonBindings();
|
|
7234
7454
|
if (bindings) {
|
|
@@ -7262,7 +7482,7 @@ function useAssets() {
|
|
|
7262
7482
|
}
|
|
7263
7483
|
function useAsset(id) {
|
|
7264
7484
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
7265
|
-
const observable = (0,
|
|
7485
|
+
const observable = (0, import_react20.useMemo)(
|
|
7266
7486
|
() => noyaManager.assetManager.assets$.map(
|
|
7267
7487
|
(assets) => assets.find((a) => a.stableId === id) ?? assets.find((a) => a.id === id)
|
|
7268
7488
|
),
|
|
@@ -7273,7 +7493,7 @@ function useAsset(id) {
|
|
|
7273
7493
|
function useAssetManager() {
|
|
7274
7494
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
7275
7495
|
const isInitialized = useObservable(noyaManager.assetManager.isInitialized$);
|
|
7276
|
-
return (0,
|
|
7496
|
+
return (0, import_react20.useMemo)(
|
|
7277
7497
|
() => ({
|
|
7278
7498
|
create: noyaManager.assetManager.create,
|
|
7279
7499
|
delete: noyaManager.assetManager.delete,
|
|
@@ -7298,7 +7518,7 @@ function useSecret(name) {
|
|
|
7298
7518
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
7299
7519
|
return useObservable(
|
|
7300
7520
|
noyaManager.secretManager.secrets$,
|
|
7301
|
-
(0,
|
|
7521
|
+
(0, import_react20.useCallback)((secrets) => secrets.find((s) => s.name === name), [name])
|
|
7302
7522
|
);
|
|
7303
7523
|
}
|
|
7304
7524
|
function useInputs() {
|
|
@@ -7316,7 +7536,7 @@ function useIOManager() {
|
|
|
7316
7536
|
function usePublish(callback) {
|
|
7317
7537
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
7318
7538
|
const stableCallback = (0, import_react_utils3.useStableCallback)(callback);
|
|
7319
|
-
(0,
|
|
7539
|
+
(0, import_react20.useEffect)(() => {
|
|
7320
7540
|
noyaManager.publishingManager.setPublishingEnabled(true);
|
|
7321
7541
|
noyaManager.publishingManager.getFilesToPublish = stableCallback;
|
|
7322
7542
|
return () => {
|
|
@@ -7327,7 +7547,7 @@ function usePublish(callback) {
|
|
|
7327
7547
|
}
|
|
7328
7548
|
function useIsInitialized() {
|
|
7329
7549
|
const { noyaManager, viewType } = useAnyNoyaStateContext();
|
|
7330
|
-
const isInitializedObservable = (0,
|
|
7550
|
+
const isInitializedObservable = (0, import_react20.useMemo)(
|
|
7331
7551
|
() => import_observable.Observable.combine(
|
|
7332
7552
|
[
|
|
7333
7553
|
...viewType === "preview" ? [] : [noyaManager.multiplayerStateManager.isInitialized$],
|
|
@@ -7344,22 +7564,22 @@ function usePipelineManager() {
|
|
|
7344
7564
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
7345
7565
|
return noyaManager.pipelineManager;
|
|
7346
7566
|
}
|
|
7347
|
-
function
|
|
7567
|
+
function useUserManager() {
|
|
7348
7568
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
7349
|
-
return noyaManager.
|
|
7569
|
+
return noyaManager.userManager;
|
|
7350
7570
|
}
|
|
7351
7571
|
function useConnectedUsers() {
|
|
7352
|
-
const
|
|
7353
|
-
return useObservable(
|
|
7572
|
+
const userManager = useUserManager();
|
|
7573
|
+
return useObservable(userManager?.connectedUsers$);
|
|
7354
7574
|
}
|
|
7355
7575
|
function useConnectedUser(userId) {
|
|
7356
|
-
const
|
|
7576
|
+
const userManager = useUserManager();
|
|
7357
7577
|
return useObservable(
|
|
7358
|
-
|
|
7359
|
-
(0,
|
|
7578
|
+
userManager?.connectedUsers$,
|
|
7579
|
+
(0, import_react20.useCallback)(
|
|
7360
7580
|
(users) => {
|
|
7361
7581
|
return users.find((user) => {
|
|
7362
|
-
const prefix = user.
|
|
7582
|
+
const prefix = user.connectionId.slice(0, 8);
|
|
7363
7583
|
return userId?.includes(prefix);
|
|
7364
7584
|
});
|
|
7365
7585
|
},
|
|
@@ -7367,13 +7587,33 @@ function useConnectedUser(userId) {
|
|
|
7367
7587
|
)
|
|
7368
7588
|
);
|
|
7369
7589
|
}
|
|
7370
|
-
function
|
|
7590
|
+
function useAnySharedConnectionData() {
|
|
7591
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
7592
|
+
return noyaManager.sharedConnectionDataManager;
|
|
7593
|
+
}
|
|
7594
|
+
function useEnqueueInput() {
|
|
7371
7595
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
7372
|
-
return noyaManager.
|
|
7596
|
+
return noyaManager.enqueueInput;
|
|
7597
|
+
}
|
|
7598
|
+
function useNoyaUser() {
|
|
7599
|
+
const userManager = useUserManager();
|
|
7600
|
+
return useObservable(userManager?.currentUser$);
|
|
7373
7601
|
}
|
|
7374
|
-
function
|
|
7375
|
-
const
|
|
7376
|
-
return useObservable(
|
|
7602
|
+
function useNoyaId() {
|
|
7603
|
+
const userManager = useUserManager();
|
|
7604
|
+
return useObservable(userManager?.currentId$);
|
|
7605
|
+
}
|
|
7606
|
+
function useNoyaUserId() {
|
|
7607
|
+
const userManager = useUserManager();
|
|
7608
|
+
return useObservable(userManager?.currentUserId$);
|
|
7609
|
+
}
|
|
7610
|
+
function useNoyaConnectionId() {
|
|
7611
|
+
const userManager = useUserManager();
|
|
7612
|
+
return useObservable(userManager?.currentConnectionId$);
|
|
7613
|
+
}
|
|
7614
|
+
function useNoyaClientId() {
|
|
7615
|
+
const userManager = useUserManager();
|
|
7616
|
+
return useObservable(userManager?.currentClientId$);
|
|
7377
7617
|
}
|
|
7378
7618
|
function useIsProcessing() {
|
|
7379
7619
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
@@ -7396,6 +7636,21 @@ function useResourceManager() {
|
|
|
7396
7636
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
7397
7637
|
return noyaManager.resourceManager;
|
|
7398
7638
|
}
|
|
7639
|
+
function useNoyaTranscriptionManager() {
|
|
7640
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
7641
|
+
return noyaManager.transcriptionManager;
|
|
7642
|
+
}
|
|
7643
|
+
function useNoyaAssetTranscription(assetId, options) {
|
|
7644
|
+
const transcriptionManager = useNoyaTranscriptionManager();
|
|
7645
|
+
const observable = (0, import_react20.useMemo)(() => {
|
|
7646
|
+
if (!assetId) return void 0;
|
|
7647
|
+
return transcriptionManager.getAssetTranscription$(assetId, {
|
|
7648
|
+
endpoint: options?.endpoint,
|
|
7649
|
+
apiKey: options?.apiKey
|
|
7650
|
+
});
|
|
7651
|
+
}, [transcriptionManager, assetId, options?.endpoint, options?.apiKey]);
|
|
7652
|
+
return useObservable(observable);
|
|
7653
|
+
}
|
|
7399
7654
|
function resourceToMediaItem(resource) {
|
|
7400
7655
|
switch (resource.type) {
|
|
7401
7656
|
case "asset":
|
|
@@ -7413,34 +7668,25 @@ function useResources({
|
|
|
7413
7668
|
const assetManager = useAssetManager();
|
|
7414
7669
|
const resourceMap = useObservable(
|
|
7415
7670
|
resourceManager.optimisticResources$,
|
|
7416
|
-
(0,
|
|
7671
|
+
(0, import_react20.useCallback)((resources) => {
|
|
7417
7672
|
return Object.fromEntries(
|
|
7418
7673
|
resources.map((resource) => [resource.path, resource])
|
|
7419
7674
|
);
|
|
7420
7675
|
}, [])
|
|
7421
7676
|
);
|
|
7422
|
-
const setResourceMap = (0,
|
|
7677
|
+
const setResourceMap = (0, import_react20.useCallback)(
|
|
7423
7678
|
async (action) => {
|
|
7424
7679
|
const newResourceMap = action instanceof Function ? action(resourceMap) : action;
|
|
7425
7680
|
const { addedResources, removedResources, modifiedResources } = diffResourceMaps(resourceMap, newResourceMap, "id");
|
|
7426
|
-
const
|
|
7681
|
+
const patchPayload = buildResourcePatchPayload({
|
|
7427
7682
|
addedResources,
|
|
7428
7683
|
modifiedResources,
|
|
7429
|
-
|
|
7430
|
-
resourceMap
|
|
7684
|
+
removedResources
|
|
7431
7685
|
});
|
|
7432
|
-
|
|
7433
|
-
|
|
7686
|
+
const hasPatchOperations = (patchPayload.create?.length ?? 0) > 0 || (patchPayload.update?.length ?? 0) > 0 || (patchPayload.delete?.length ?? 0) > 0;
|
|
7687
|
+
if (hasPatchOperations) {
|
|
7688
|
+
await resourceManager.patchResources(patchPayload);
|
|
7434
7689
|
}
|
|
7435
|
-
const consumedModifiedResourceIdsSet = new Set(
|
|
7436
|
-
consumedModifiedResourceIds
|
|
7437
|
-
);
|
|
7438
|
-
const remainingModifiedResources = modifiedResources.filter(
|
|
7439
|
-
(resource) => !consumedModifiedResourceIdsSet.has(resource.id)
|
|
7440
|
-
);
|
|
7441
|
-
await resourceManager.deleteResource(
|
|
7442
|
-
removedResources.map((resource) => ({ id: resource.id }))
|
|
7443
|
-
);
|
|
7444
7690
|
if (shouldDeleteAssets) {
|
|
7445
7691
|
for (const resource of removedResources) {
|
|
7446
7692
|
if (resource.type === "asset") {
|
|
@@ -7448,16 +7694,6 @@ function useResources({
|
|
|
7448
7694
|
}
|
|
7449
7695
|
}
|
|
7450
7696
|
}
|
|
7451
|
-
await Promise.all(
|
|
7452
|
-
remainingModifiedResources.map(
|
|
7453
|
-
({ id, path: path2, assetId, asset }) => resourceManager.updateResource({
|
|
7454
|
-
id,
|
|
7455
|
-
path: path2,
|
|
7456
|
-
assetId,
|
|
7457
|
-
...assetId ? {} : asset ? { asset } : {}
|
|
7458
|
-
})
|
|
7459
|
-
)
|
|
7460
|
-
);
|
|
7461
7697
|
},
|
|
7462
7698
|
[resourceMap, resourceManager, shouldDeleteAssets, assetManager]
|
|
7463
7699
|
);
|
|
@@ -7472,9 +7708,9 @@ function useActivityEvents(streamFilter) {
|
|
|
7472
7708
|
);
|
|
7473
7709
|
}
|
|
7474
7710
|
function useActivityEventsForManager(streamFilter, activityEventsManager) {
|
|
7475
|
-
const [streamId, setStreamId] = (0,
|
|
7711
|
+
const [streamId, setStreamId] = (0, import_react20.useState)(void 0);
|
|
7476
7712
|
const stableStreamFilter = (0, import_react_utils3.useJsonMemo)(streamFilter);
|
|
7477
|
-
(0,
|
|
7713
|
+
(0, import_react20.useEffect)(() => {
|
|
7478
7714
|
if (!stableStreamFilter) return;
|
|
7479
7715
|
const streamId2 = activityEventsManager.subscribe(stableStreamFilter);
|
|
7480
7716
|
setStreamId(streamId2);
|
|
@@ -7505,7 +7741,7 @@ function createNoyaContext({
|
|
|
7505
7741
|
children,
|
|
7506
7742
|
contextValue
|
|
7507
7743
|
}) {
|
|
7508
|
-
return /* @__PURE__ */
|
|
7744
|
+
return /* @__PURE__ */ import_react20.default.createElement(AnyNoyaStateContext.Provider, { value: contextValue }, children);
|
|
7509
7745
|
}
|
|
7510
7746
|
function NoyaStateProvider({
|
|
7511
7747
|
children,
|
|
@@ -7520,7 +7756,7 @@ function createNoyaContext({
|
|
|
7520
7756
|
safeEval,
|
|
7521
7757
|
...options
|
|
7522
7758
|
});
|
|
7523
|
-
const contextValue = (0,
|
|
7759
|
+
const contextValue = (0, import_react20.useMemo)(
|
|
7524
7760
|
() => ({
|
|
7525
7761
|
noyaManager,
|
|
7526
7762
|
theme,
|
|
@@ -7528,12 +7764,12 @@ function createNoyaContext({
|
|
|
7528
7764
|
}),
|
|
7529
7765
|
[noyaManager, theme, viewType]
|
|
7530
7766
|
);
|
|
7531
|
-
return /* @__PURE__ */
|
|
7767
|
+
return /* @__PURE__ */ import_react20.default.createElement(NoyaContextProvider, { contextValue }, options.fallback !== void 0 ? /* @__PURE__ */ import_react20.default.createElement(FallbackUntilInitialized, { fallback: options.fallback }, children) : children);
|
|
7532
7768
|
}
|
|
7533
7769
|
function useValue(path2, options) {
|
|
7534
7770
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
7535
7771
|
let actualPath = typeof path2 === "function" || !path2 ? "" : path2;
|
|
7536
|
-
const mappedObservable = (0,
|
|
7772
|
+
const mappedObservable = (0, import_react20.useMemo)(() => {
|
|
7537
7773
|
if (typeof path2 === "function") {
|
|
7538
7774
|
return noyaManager.multiplayerStateManager.optimisticState$.map(path2, {
|
|
7539
7775
|
isEqual: options?.isEqual
|
|
@@ -7546,7 +7782,7 @@ function createNoyaContext({
|
|
|
7546
7782
|
}
|
|
7547
7783
|
function useSetValue(path2) {
|
|
7548
7784
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
7549
|
-
const setValue = (0,
|
|
7785
|
+
const setValue = (0, import_react20.useCallback)(
|
|
7550
7786
|
(...args) => {
|
|
7551
7787
|
const [metadata, value] = args.length === 2 ? args : [{}, args[0]];
|
|
7552
7788
|
noyaManager.multiplayerStateManager.setStateAtPath(
|
|
@@ -7569,9 +7805,9 @@ function createNoyaContext({
|
|
|
7569
7805
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
7570
7806
|
return noyaManager.multiplayerStateManager;
|
|
7571
7807
|
}
|
|
7572
|
-
function
|
|
7808
|
+
function useSharedConnectionDataManager() {
|
|
7573
7809
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
7574
|
-
return noyaManager.
|
|
7810
|
+
return noyaManager.sharedConnectionDataManager;
|
|
7575
7811
|
}
|
|
7576
7812
|
function useNoyaManager() {
|
|
7577
7813
|
return useAnyNoyaStateContext().noyaManager;
|
|
@@ -7582,7 +7818,7 @@ function createNoyaContext({
|
|
|
7582
7818
|
}
|
|
7583
7819
|
function useSetLeftMenuItems(leftMenuItems) {
|
|
7584
7820
|
const { menuManager } = useNoyaManager();
|
|
7585
|
-
(0,
|
|
7821
|
+
(0, import_react20.useEffect)(() => {
|
|
7586
7822
|
if (leftMenuItems) {
|
|
7587
7823
|
menuManager.setLeftMenuItems(leftMenuItems);
|
|
7588
7824
|
}
|
|
@@ -7594,7 +7830,7 @@ function createNoyaContext({
|
|
|
7594
7830
|
}
|
|
7595
7831
|
function useSetRightMenuItems(rightMenuItems) {
|
|
7596
7832
|
const { menuManager } = useNoyaManager();
|
|
7597
|
-
(0,
|
|
7833
|
+
(0, import_react20.useEffect)(() => {
|
|
7598
7834
|
if (rightMenuItems) {
|
|
7599
7835
|
menuManager.setRightMenuItems(rightMenuItems);
|
|
7600
7836
|
}
|
|
@@ -7602,19 +7838,19 @@ function createNoyaContext({
|
|
|
7602
7838
|
}
|
|
7603
7839
|
function useHandleMenuItem(callback) {
|
|
7604
7840
|
const { menuManager } = useNoyaManager();
|
|
7605
|
-
(0,
|
|
7841
|
+
(0, import_react20.useEffect)(() => {
|
|
7606
7842
|
return menuManager.addListener(callback);
|
|
7607
7843
|
}, [menuManager, callback]);
|
|
7608
7844
|
}
|
|
7609
7845
|
function useOnSelectMenuItemCallback() {
|
|
7610
7846
|
const { menuManager } = useNoyaManager();
|
|
7611
|
-
return (0,
|
|
7847
|
+
return (0, import_react20.useCallback)((type) => menuManager.emit(type), [menuManager]);
|
|
7612
7848
|
}
|
|
7613
7849
|
function useMenu(options) {
|
|
7614
7850
|
const { leftMenuItems, rightMenuItems, onSelectMenuItem } = options;
|
|
7615
7851
|
useSetLeftMenuItems(leftMenuItems);
|
|
7616
7852
|
useSetRightMenuItems(rightMenuItems);
|
|
7617
|
-
const noop = (0,
|
|
7853
|
+
const noop = (0, import_react20.useCallback)(() => {
|
|
7618
7854
|
}, []);
|
|
7619
7855
|
useHandleMenuItem(onSelectMenuItem ?? noop);
|
|
7620
7856
|
}
|
|
@@ -7626,7 +7862,7 @@ function createNoyaContext({
|
|
|
7626
7862
|
useSetValue,
|
|
7627
7863
|
useValueState,
|
|
7628
7864
|
useStateManager,
|
|
7629
|
-
|
|
7865
|
+
useSharedConnectionDataManager,
|
|
7630
7866
|
useLeftMenuItems,
|
|
7631
7867
|
useSetLeftMenuItems,
|
|
7632
7868
|
useRightMenuItems,
|
|
@@ -7641,7 +7877,7 @@ function createNoyaContext({
|
|
|
7641
7877
|
// src/ai.ts
|
|
7642
7878
|
function useRegisterAITool(tool) {
|
|
7643
7879
|
const aiManager = useAIManager();
|
|
7644
|
-
(0,
|
|
7880
|
+
(0, import_react21.useEffect)(() => {
|
|
7645
7881
|
return aiManager.registerTool(tool);
|
|
7646
7882
|
}, [aiManager, tool]);
|
|
7647
7883
|
}
|
|
@@ -7653,28 +7889,28 @@ function useCallableAITools() {
|
|
|
7653
7889
|
// src/components/UserPointersOverlay.tsx
|
|
7654
7890
|
var import_observable2 = require("@noya-app/observable");
|
|
7655
7891
|
var import_react_utils4 = require("@noya-app/react-utils");
|
|
7656
|
-
var
|
|
7892
|
+
var import_react22 = __toESM(require("react"));
|
|
7657
7893
|
function shouldShow(hideAfter, updatedAt) {
|
|
7658
7894
|
return !!updatedAt && Date.now() - updatedAt < hideAfter;
|
|
7659
7895
|
}
|
|
7660
7896
|
var UserPointerInternal = (0, import_react_utils4.memoGeneric)(function UserPointerInternal2({
|
|
7661
7897
|
user,
|
|
7662
|
-
|
|
7898
|
+
sharedConnectionDataManager,
|
|
7663
7899
|
hideAfter = 5e3,
|
|
7664
7900
|
renderUserPointer
|
|
7665
7901
|
}) {
|
|
7666
|
-
const observable = (0,
|
|
7667
|
-
const metadata$ =
|
|
7668
|
-
const data$ =
|
|
7902
|
+
const observable = (0, import_react22.useMemo)(() => {
|
|
7903
|
+
const metadata$ = sharedConnectionDataManager.metadata$.observePath([user.connectionId]).throttle(50);
|
|
7904
|
+
const data$ = sharedConnectionDataManager.data$.observePath([user.connectionId]).throttle(50);
|
|
7669
7905
|
return import_observable2.Observable.combine([metadata$, data$], ([metadata2, data2]) => {
|
|
7670
7906
|
return { metadata: metadata2, data: data2 };
|
|
7671
7907
|
});
|
|
7672
|
-
}, [
|
|
7908
|
+
}, [sharedConnectionDataManager, user.connectionId]);
|
|
7673
7909
|
const { metadata, data } = useObservable(observable);
|
|
7674
|
-
const [, setForceUpdate] = (0,
|
|
7910
|
+
const [, setForceUpdate] = (0, import_react22.useState)(0);
|
|
7675
7911
|
const updatedAt = metadata?.updatedAt ?? 0;
|
|
7676
7912
|
const show = shouldShow(hideAfter, updatedAt);
|
|
7677
|
-
(0,
|
|
7913
|
+
(0, import_react22.useEffect)(() => {
|
|
7678
7914
|
if (!show) return;
|
|
7679
7915
|
const timeoutId = setTimeout(() => {
|
|
7680
7916
|
setForceUpdate((prev) => prev + 1);
|
|
@@ -7683,27 +7919,29 @@ var UserPointerInternal = (0, import_react_utils4.memoGeneric)(function UserPoin
|
|
|
7683
7919
|
}, [hideAfter, show, updatedAt]);
|
|
7684
7920
|
if (!data?.pointer) return null;
|
|
7685
7921
|
return renderUserPointer({
|
|
7686
|
-
userId: user.
|
|
7922
|
+
userId: user.connectionId,
|
|
7687
7923
|
name: user.name,
|
|
7688
7924
|
point: data.pointer,
|
|
7689
7925
|
visible: show
|
|
7690
7926
|
});
|
|
7691
7927
|
});
|
|
7692
7928
|
var UserPointersOverlay = (0, import_react_utils4.memoGeneric)(function UserPointers({
|
|
7693
|
-
|
|
7694
|
-
|
|
7929
|
+
userManager,
|
|
7930
|
+
sharedConnectionDataManager,
|
|
7695
7931
|
renderUserPointer
|
|
7696
7932
|
}) {
|
|
7697
|
-
const
|
|
7698
|
-
|
|
7699
|
-
|
|
7700
|
-
|
|
7701
|
-
|
|
7933
|
+
const currentConnectionId = useObservable(
|
|
7934
|
+
sharedConnectionDataManager.currentConnectionId$
|
|
7935
|
+
);
|
|
7936
|
+
const connectedUsers = useObservable(userManager.connectedUsers$);
|
|
7937
|
+
return /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, null, connectedUsers.map((user) => {
|
|
7938
|
+
if (user.connectionId === currentConnectionId) return null;
|
|
7939
|
+
return /* @__PURE__ */ import_react22.default.createElement(
|
|
7702
7940
|
UserPointerInternal,
|
|
7703
7941
|
{
|
|
7704
|
-
key: user.
|
|
7942
|
+
key: user.connectionId,
|
|
7705
7943
|
user,
|
|
7706
|
-
|
|
7944
|
+
sharedConnectionDataManager,
|
|
7707
7945
|
renderUserPointer
|
|
7708
7946
|
}
|
|
7709
7947
|
);
|
|
@@ -7794,7 +8032,7 @@ var WebSocketConnection = class {
|
|
|
7794
8032
|
StateInspector,
|
|
7795
8033
|
UserPointersOverlay,
|
|
7796
8034
|
WebSocketConnection,
|
|
7797
|
-
|
|
8035
|
+
buildResourcePatchPayload,
|
|
7798
8036
|
createDefaultAppData,
|
|
7799
8037
|
createNoyaContext,
|
|
7800
8038
|
createStateInspectorRoot,
|
|
@@ -7817,9 +8055,9 @@ var WebSocketConnection = class {
|
|
|
7817
8055
|
useAIManager,
|
|
7818
8056
|
useActivityEvents,
|
|
7819
8057
|
useActivityEventsForManager,
|
|
7820
|
-
useAnyEphemeralUserData,
|
|
7821
8058
|
useAnyNoyaManager,
|
|
7822
8059
|
useAnyNoyaStateContext,
|
|
8060
|
+
useAnySharedConnectionData,
|
|
7823
8061
|
useAsset,
|
|
7824
8062
|
useAssetManager,
|
|
7825
8063
|
useAssets,
|
|
@@ -7828,8 +8066,7 @@ var WebSocketConnection = class {
|
|
|
7828
8066
|
useColorScheme,
|
|
7829
8067
|
useConnectedUser,
|
|
7830
8068
|
useConnectedUsers,
|
|
7831
|
-
|
|
7832
|
-
useCurrentUserId,
|
|
8069
|
+
useEnqueueInput,
|
|
7833
8070
|
useFileName,
|
|
7834
8071
|
useFilePropertyManager,
|
|
7835
8072
|
useIOManager,
|
|
@@ -7839,7 +8076,14 @@ var WebSocketConnection = class {
|
|
|
7839
8076
|
useManagedHistory,
|
|
7840
8077
|
useManagedState,
|
|
7841
8078
|
useMultiplayerState,
|
|
8079
|
+
useNoyaAssetTranscription,
|
|
8080
|
+
useNoyaClientId,
|
|
8081
|
+
useNoyaConnectionId,
|
|
8082
|
+
useNoyaId,
|
|
7842
8083
|
useNoyaStateInternal,
|
|
8084
|
+
useNoyaTranscriptionManager,
|
|
8085
|
+
useNoyaUser,
|
|
8086
|
+
useNoyaUserId,
|
|
7843
8087
|
useObservable,
|
|
7844
8088
|
useOutputTransforms,
|
|
7845
8089
|
usePipelineManager,
|
|
@@ -7852,6 +8096,7 @@ var WebSocketConnection = class {
|
|
|
7852
8096
|
useSecrets,
|
|
7853
8097
|
useSetFileNameState,
|
|
7854
8098
|
useStateInspector,
|
|
8099
|
+
useUserManager,
|
|
7855
8100
|
useViewType,
|
|
7856
8101
|
...require("@noya-app/state-manager")
|
|
7857
8102
|
});
|