@noya-app/noya-api-client-react 0.1.45 → 0.1.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2268,11 +2268,6 @@ __export(src_exports, {
2268
2268
  useActivityEventsList: () => useActivityEventsList,
2269
2269
  useFileList: () => useFileList,
2270
2270
  useFileListItem: () => useFileListItem,
2271
- useGeneratedComponentDescription: () => useGeneratedComponentDescription,
2272
- useGeneratedComponentDescriptions: () => useGeneratedComponentDescriptions,
2273
- useGeneratedComponentNames: () => useGeneratedComponentNames,
2274
- useGeneratedPageComponentNames: () => useGeneratedPageComponentNames,
2275
- useGeneratedPageNames: () => useGeneratedPageNames,
2276
2271
  useIsBeta: () => useIsBeta,
2277
2272
  useMetadata: () => useMetadata,
2278
2273
  useNetworkRequests: () => useNetworkRequests,
@@ -2304,8 +2299,6 @@ __export(src_exports, {
2304
2299
  useOptionalNoyaTags: () => useOptionalNoyaTags,
2305
2300
  useOptionalNoyaTools: () => useOptionalNoyaTools,
2306
2301
  useOptionalNoyaUserData: () => useOptionalNoyaUserData,
2307
- useRandomIcons: () => useRandomIcons,
2308
- useRandomImages: () => useRandomImages,
2309
2302
  useResourcesList: () => useResourcesList,
2310
2303
  useTable: () => useTable,
2311
2304
  useUser: () => useUser
@@ -2341,8 +2334,6 @@ function useNoyaClientOrFallback() {
2341
2334
 
2342
2335
  // src/react/hooks.ts
2343
2336
  var import_react2 = require("@legendapp/state/react");
2344
- var import_noya_api2 = require("@noya-app/noya-api");
2345
- var import_noya_utils = require("@noya-app/noya-utils");
2346
2337
  var import_observable_react = require("@noya-app/observable-react");
2347
2338
  var import_react3 = require("react");
2348
2339
  function useNoyaTools(initial) {
@@ -2474,87 +2465,11 @@ function useMetadata(key) {
2474
2465
  const metadataItem = metadata.find((item) => item.key === key);
2475
2466
  return metadataItem?.value;
2476
2467
  }
2477
- function useGeneratedComponentNames(name) {
2478
- const key = name.trim().toLowerCase();
2479
- const { generatedNames$, loadingNames$ } = useNoyaClientOrFallback();
2480
- const result = (0, import_react2.useSelector)(
2481
- () => generatedNames$[key].get()
2482
- );
2483
- const loading = (0, import_react2.useSelector)(() => loadingNames$[key].get());
2484
- return (0, import_react3.useMemo)(() => ({ names: result ?? [], loading }), [loading, result]);
2485
- }
2486
- function useGeneratedComponentDescriptions() {
2487
- const { generatedDescriptions$, loadingDescriptions$ } = useNoyaClientOrFallback();
2488
- const descriptions = (0, import_react2.useSelector)(generatedDescriptions$);
2489
- const loading = (0, import_react2.useSelector)(loadingDescriptions$);
2490
- return (0, import_react3.useMemo)(() => ({ descriptions, loading }), [loading, descriptions]);
2491
- }
2492
- function useGeneratedComponentDescription(name) {
2493
- const key = name.trim().toLowerCase();
2494
- const { generatedDescriptions$, loadingDescriptions$ } = useNoyaClientOrFallback();
2495
- const description = (0, import_react2.useSelector)(
2496
- () => generatedDescriptions$[key].get()
2497
- );
2498
- const loading = (0, import_react2.useSelector)(() => loadingDescriptions$[key].get());
2499
- return (0, import_react3.useMemo)(() => ({ description, loading }), [loading, description]);
2500
- }
2501
- function useRandomImages() {
2502
- const { randomImages$, loadingRandomImages$ } = useNoyaClientOrFallback();
2503
- const images = (0, import_react2.useSelector)(randomImages$);
2504
- const loading = (0, import_react2.useSelector)(loadingRandomImages$);
2505
- return (0, import_react3.useMemo)(() => ({ images, loading }), [loading, images]);
2506
- }
2507
- function useRandomIcons() {
2508
- const { randomIcons$, loadingRandomIcons$ } = useNoyaClientOrFallback();
2509
- const icons = (0, import_react2.useSelector)(randomIcons$);
2510
- const loading = (0, import_react2.useSelector)(loadingRandomIcons$);
2511
- return (0, import_react3.useMemo)(() => ({ icons, loading }), [loading, icons]);
2512
- }
2513
2468
  function useNetworkRequests() {
2514
2469
  const { requests$ } = useNoyaClientOrFallback();
2515
2470
  const requests = (0, import_react2.useSelector)(requests$);
2516
2471
  return requests;
2517
2472
  }
2518
- function useGeneratedPageNames() {
2519
- const { generatedPageNames$ } = useNoyaClientOrFallback();
2520
- const names = (0, import_react2.useSelector)(generatedPageNames$);
2521
- const namesWithDefaultsAndTypes = (0, import_react3.useMemo)(() => {
2522
- const rangeArray = (0, import_noya_utils.range)(0, import_noya_api2.GENERATED_PAGE_NAME_COUNT);
2523
- const withDefaults = rangeArray.map((index) => {
2524
- const name = names[index];
2525
- return name ?? { name: `Page ${index + 1}`, loading: true, key: "" };
2526
- });
2527
- return withDefaults.map(
2528
- (name, index) => ({
2529
- ...name,
2530
- index,
2531
- type: "suggestion"
2532
- })
2533
- );
2534
- }, [names]);
2535
- return namesWithDefaultsAndTypes.slice(0, 3);
2536
- }
2537
- function useGeneratedPageComponentNames() {
2538
- const { generatedPageComponentNames$: generatedComponentNames$ } = useNoyaClientOrFallback();
2539
- const names = (0, import_react2.useSelector)(
2540
- generatedComponentNames$
2541
- );
2542
- const namesWithDefaultsAndTypes = (0, import_react3.useMemo)(() => {
2543
- const rangeArray = (0, import_noya_utils.range)(0, import_noya_api2.GENERATED_PAGE_NAME_COUNT);
2544
- const withDefaults = rangeArray.map((index) => {
2545
- const name = names[index];
2546
- return name ?? { name: `Component ${index + 1}`, loading: true, key: "" };
2547
- });
2548
- return withDefaults.map(
2549
- (name, index) => ({
2550
- ...name,
2551
- index,
2552
- type: "suggestion"
2553
- })
2554
- );
2555
- }, [names]);
2556
- return namesWithDefaultsAndTypes.slice(0, 3);
2557
- }
2558
2473
  function useNoyaSites() {
2559
2474
  const sites = (0, import_react2.useSelector)(useNoyaClientOrFallback().sites$);
2560
2475
  return sites;
@@ -3425,15 +3340,15 @@ function Or(pattern) {
3425
3340
  if (IsCloseParen(pattern, index))
3426
3341
  count -= 1;
3427
3342
  if (IsSeparator(pattern, index) && count === 0) {
3428
- const range3 = pattern.slice(start, index);
3429
- if (range3.length > 0)
3430
- expressions.push(TemplateLiteralParse(range3));
3343
+ const range2 = pattern.slice(start, index);
3344
+ if (range2.length > 0)
3345
+ expressions.push(TemplateLiteralParse(range2));
3431
3346
  start = index + 1;
3432
3347
  }
3433
3348
  }
3434
- const range2 = pattern.slice(start);
3435
- if (range2.length > 0)
3436
- expressions.push(TemplateLiteralParse(range2));
3349
+ const range = pattern.slice(start);
3350
+ if (range.length > 0)
3351
+ expressions.push(TemplateLiteralParse(range));
3437
3352
  if (expressions.length === 0)
3438
3353
  return { type: "const", const: "" };
3439
3354
  if (expressions.length === 1)
@@ -3466,14 +3381,14 @@ function And(pattern) {
3466
3381
  for (let index = 0; index < pattern.length; index++) {
3467
3382
  if (IsOpenParen(pattern, index)) {
3468
3383
  const [start, end] = Group(pattern, index);
3469
- const range2 = pattern.slice(start, end + 1);
3470
- expressions.push(TemplateLiteralParse(range2));
3384
+ const range = pattern.slice(start, end + 1);
3385
+ expressions.push(TemplateLiteralParse(range));
3471
3386
  index = end;
3472
3387
  } else {
3473
3388
  const [start, end] = Range(pattern, index);
3474
- const range2 = pattern.slice(start, end);
3475
- if (range2.length > 0)
3476
- expressions.push(TemplateLiteralParse(range2));
3389
+ const range = pattern.slice(start, end);
3390
+ if (range.length > 0)
3391
+ expressions.push(TemplateLiteralParse(range));
3477
3392
  index = end - 1;
3478
3393
  }
3479
3394
  }
@@ -5303,24 +5218,12 @@ var Emitter = class {
5303
5218
  };
5304
5219
 
5305
5220
  // ../state-manager/src/AIManager.ts
5306
- var import_noya_utils2 = require("@noya-app/noya-utils");
5221
+ var import_noya_utils = require("@noya-app/noya-utils");
5307
5222
  var import_observable2 = require("@noya-app/observable");
5308
5223
 
5309
5224
  // ../state-manager/src/AssetManager.ts
5310
- var import_noya_utils3 = require("@noya-app/noya-utils");
5225
+ var import_noya_utils2 = require("@noya-app/noya-utils");
5311
5226
  var import_observable3 = require("@noya-app/observable");
5312
- var _toNoyaAsset = (0, import_noya_utils3.memoize)(
5313
- (asset) => ({
5314
- id: asset.stableId,
5315
- url: asset.url,
5316
- createdAt: asset.createdAt,
5317
- size: asset.size,
5318
- contentType: asset.contentType,
5319
- width: asset.width ?? null,
5320
- height: asset.height ?? null,
5321
- userId: asset.userId ?? null
5322
- })
5323
- );
5324
5227
 
5325
5228
  // ../noya-schemas/src/nullable.ts
5326
5229
  var Nullable = (schema) => Type.Union([Type.Null(), schema]);
@@ -5383,6 +5286,10 @@ var activityEventSchema = Type.Object({
5383
5286
  });
5384
5287
 
5385
5288
  // ../noya-schemas/src/asset.ts
5289
+ var assetModeSchema = Type.Union([
5290
+ Type.Literal("immutable"),
5291
+ Type.Literal("mutable")
5292
+ ]);
5386
5293
  var assetSchema = Type.Object({
5387
5294
  id: Type.String(),
5388
5295
  stableId: Type.String(),
@@ -5392,7 +5299,9 @@ var assetSchema = Type.Object({
5392
5299
  contentType: Type.Optional(Type.String()),
5393
5300
  width: Type.Union([Type.Null(), Type.Number()]),
5394
5301
  height: Type.Union([Type.Null(), Type.Number()]),
5395
- userId: Type.Union([Type.Null(), Type.String()])
5302
+ userId: Type.Union([Type.Null(), Type.String()]),
5303
+ mode: Type.Optional(assetModeSchema),
5304
+ version: Type.Optional(Type.Number())
5396
5305
  });
5397
5306
 
5398
5307
  // ../noya-schemas/src/encode.ts
@@ -7307,12 +7216,19 @@ function applyExtendedPatch(obj, patches) {
7307
7216
  var import_fast_diff = __toESM(require_diff());
7308
7217
 
7309
7218
  // ../state-manager/src/EvalManager.ts
7310
- var import_noya_utils4 = require("@noya-app/noya-utils");
7219
+ var import_noya_utils3 = require("@noya-app/noya-utils");
7311
7220
 
7312
7221
  // ../state-manager/src/FilePropertyManager.ts
7313
- var import_noya_utils5 = require("@noya-app/noya-utils");
7222
+ var import_noya_utils4 = require("@noya-app/noya-utils");
7314
7223
  var import_observable5 = require("@noya-app/observable");
7315
7224
 
7225
+ // ../state-manager/src/multiplayer.ts
7226
+ var import_noya_utils7 = require("@noya-app/noya-utils");
7227
+ var import_observable8 = require("@noya-app/observable");
7228
+
7229
+ // ../state-manager/src/LogManager.ts
7230
+ var import_observable6 = require("@noya-app/observable");
7231
+
7316
7232
  // ../state-manager/src/historyEntries.ts
7317
7233
  var HistoryEntries;
7318
7234
  ((HistoryEntries2) => {
@@ -7399,119 +7315,6 @@ var HistoryEntries;
7399
7315
  HistoryEntries2.pathsEqual = pathsEqual;
7400
7316
  })(HistoryEntries || (HistoryEntries = {}));
7401
7317
 
7402
- // ../state-manager/src/IOManager.ts
7403
- var import_observable6 = require("@noya-app/observable");
7404
-
7405
- // ../state-manager/src/jwt.ts
7406
- function base64UrlEncode(str) {
7407
- return btoa(str).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
7408
- }
7409
- function base64UrlDecode(str) {
7410
- str = str.replace(/-/g, "+").replace(/_/g, "/");
7411
- switch (str.length % 4) {
7412
- case 2:
7413
- str += "==";
7414
- break;
7415
- case 3:
7416
- str += "=";
7417
- break;
7418
- }
7419
- return atob(str);
7420
- }
7421
- var HEADER = {
7422
- alg: "HS256",
7423
- typ: "JWT"
7424
- };
7425
- var JWT_ERROR = {
7426
- INVALID_JWT_FORMAT: "Invalid JWT format"
7427
- // INVALID_SIGNATURE: "Invalid signature",
7428
- };
7429
- async function createJwt({
7430
- payload,
7431
- secret,
7432
- header
7433
- }) {
7434
- const encoder = new TextEncoder();
7435
- const encodedHeader = base64UrlEncode(
7436
- JSON.stringify({ ...HEADER, ...header })
7437
- );
7438
- const encodedPayload = base64UrlEncode(JSON.stringify(payload));
7439
- const dataToSign = `${encodedHeader}.${encodedPayload}`;
7440
- const key = await crypto.subtle.importKey(
7441
- "raw",
7442
- encoder.encode(secret),
7443
- { name: "HMAC", hash: "SHA-256" },
7444
- false,
7445
- ["sign"]
7446
- );
7447
- const signature = await crypto.subtle.sign(
7448
- "HMAC",
7449
- key,
7450
- encoder.encode(dataToSign)
7451
- );
7452
- const encodedSignature = base64UrlEncode(
7453
- String.fromCharCode(...new Uint8Array(signature))
7454
- );
7455
- return `${dataToSign}.${encodedSignature}`;
7456
- }
7457
- async function decodeJwt({
7458
- token,
7459
- secret
7460
- }) {
7461
- if (typeof token !== "string") {
7462
- throw new Error(JWT_ERROR.INVALID_JWT_FORMAT);
7463
- }
7464
- const [encodedHeader, encodedPayload, encodedSignature] = token.split(".");
7465
- if (!encodedHeader || !encodedPayload || !encodedSignature) {
7466
- throw new Error(JWT_ERROR.INVALID_JWT_FORMAT);
7467
- }
7468
- const headerJson = base64UrlDecode(encodedHeader);
7469
- const payloadJson = base64UrlDecode(encodedPayload);
7470
- const header = JSON.parse(headerJson);
7471
- const payload = JSON.parse(payloadJson);
7472
- const dataToVerify = `${encodedHeader}.${encodedPayload}`;
7473
- const encoder = new TextEncoder();
7474
- if (secret !== void 0) {
7475
- const key = await crypto.subtle.importKey(
7476
- "raw",
7477
- encoder.encode(secret),
7478
- { name: "HMAC", hash: "SHA-256" },
7479
- false,
7480
- ["verify"]
7481
- );
7482
- const binarySignature = base64UrlDecode(encodedSignature);
7483
- const signature = new Uint8Array(
7484
- [...binarySignature].map((char) => char.charCodeAt(0))
7485
- );
7486
- const valid = await crypto.subtle.verify(
7487
- "HMAC",
7488
- key,
7489
- signature,
7490
- encoder.encode(dataToVerify)
7491
- );
7492
- return { header, payload, valid };
7493
- }
7494
- return { header, payload, valid: false };
7495
- }
7496
- var jwt;
7497
- ((jwt2) => {
7498
- jwt2.encode = createJwt;
7499
- jwt2.decode = decodeJwt;
7500
- jwt2.ERROR = JWT_ERROR;
7501
- jwt2.DEFAULT_HEADER = HEADER;
7502
- })(jwt || (jwt = {}));
7503
-
7504
- // ../state-manager/src/LogManager.ts
7505
- var import_observable7 = require("@noya-app/observable");
7506
-
7507
- // ../state-manager/src/MenuManager.ts
7508
- var import_noya_utils6 = require("@noya-app/noya-utils");
7509
- var import_observable8 = require("@noya-app/observable");
7510
-
7511
- // ../state-manager/src/multiplayer.ts
7512
- var import_noya_utils9 = require("@noya-app/noya-utils");
7513
- var import_observable10 = require("@noya-app/observable");
7514
-
7515
7318
  // ../../node_modules/@marcbachmann/cel-js/lib/errors.js
7516
7319
  var ParseError = class extends Error {
7517
7320
  #wasConstructedWithAst = false;
@@ -10488,7 +10291,7 @@ var globalEnvironment = new Environment({
10488
10291
  });
10489
10292
 
10490
10293
  // ../state-manager/src/multiplayerPolicies.ts
10491
- var import_noya_utils7 = require("@noya-app/noya-utils");
10294
+ var import_noya_utils5 = require("@noya-app/noya-utils");
10492
10295
  var celEnvironment = new Environment({
10493
10296
  unlistedVariablesAreDyn: true
10494
10297
  });
@@ -10523,62 +10326,171 @@ celEnvironment.registerFunction("random(): double", () => Math.random()).registe
10523
10326
  const nowValue = typeof nowVariable?.value === "number" ? nowVariable.value : typeof nowVariable?.value === "string" ? Number(nowVariable.value) : Date.now();
10524
10327
  return new Date(nowValue).toISOString();
10525
10328
  }
10526
- ).registerFunction("uuid(): string", () => (0, import_noya_utils7.uuid)());
10329
+ ).registerFunction("uuid(): string", () => (0, import_noya_utils5.uuid)());
10527
10330
  var READ_DENIED = Symbol("readDenied");
10528
10331
 
10529
10332
  // ../state-manager/src/serverScripts.ts
10530
- var import_noya_utils8 = require("@noya-app/noya-utils");
10333
+ var import_noya_utils6 = require("@noya-app/noya-utils");
10531
10334
 
10532
10335
  // ../state-manager/src/stateManager.ts
10533
- var import_observable9 = require("@noya-app/observable");
10336
+ var import_observable7 = require("@noya-app/observable");
10534
10337
 
10535
10338
  // ../state-manager/src/multiplayer.ts
10536
- var createHash = (value, options) => (0, import_noya_utils9.hash)(value, { ...options, ignoreUndefinedProperties: true });
10339
+ var createHash = (value, options) => (0, import_noya_utils7.hash)(value, { ...options, ignoreUndefinedProperties: true });
10537
10340
 
10538
- // ../state-manager/src/NoyaManager.ts
10539
- var import_noya_utils19 = require("@noya-app/noya-utils");
10540
- var import_observable22 = require("@noya-app/observable");
10341
+ // ../state-manager/src/GitManager.ts
10342
+ var import_observable9 = require("@noya-app/observable");
10541
10343
 
10542
- // ../noya-pipeline/src/graphToTasks.ts
10543
- var import_observable11 = require("@noya-app/observable");
10344
+ // ../state-manager/src/IOManager.ts
10345
+ var import_observable10 = require("@noya-app/observable");
10544
10346
 
10545
- // ../noya-pipeline/src/state.ts
10546
- var import_noya_utils10 = require("@noya-app/noya-utils");
10547
- var rectSchema = Type.Object({
10548
- x: Type.Number(),
10549
- y: Type.Number(),
10550
- width: Type.Number(),
10551
- height: Type.Number()
10552
- });
10553
- var transformSchema = Type.Union(
10554
- [
10555
- Type.Object({
10556
- id: Type.String({ format: "uuid", default: "" }),
10557
- type: Type.Literal("script"),
10558
- location: Type.Union([Type.Literal("state"), Type.Literal("url")]),
10559
- value: Type.String()
10560
- }),
10561
- Type.Object({
10562
- id: Type.String({ format: "uuid", default: "" }),
10563
- type: Type.Literal("jsonPointer"),
10564
- value: Type.String()
10565
- })
10566
- ],
10567
- {
10568
- discriminator: "type"
10347
+ // ../state-manager/src/jwt.ts
10348
+ function base64UrlEncode(str) {
10349
+ return btoa(str).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
10350
+ }
10351
+ function base64UrlDecode(str) {
10352
+ str = str.replace(/-/g, "+").replace(/_/g, "/");
10353
+ switch (str.length % 4) {
10354
+ case 2:
10355
+ str += "==";
10356
+ break;
10357
+ case 3:
10358
+ str += "=";
10359
+ break;
10569
10360
  }
10570
- );
10571
- var baseBlockProperties = {
10572
- id: Type.String({ format: "uuid", default: "" }),
10573
- name: Type.String()
10361
+ return atob(str);
10362
+ }
10363
+ var HEADER = {
10364
+ alg: "HS256",
10365
+ typ: "JWT"
10574
10366
  };
10575
- var preferredFileSourceSchema = Type.Union(
10576
- [Type.Literal("fileVersion"), Type.Literal("file")],
10577
- {
10578
- default: "fileVersion"
10367
+ var JWT_ERROR = {
10368
+ INVALID_JWT_FORMAT: "Invalid JWT format"
10369
+ // INVALID_SIGNATURE: "Invalid signature",
10370
+ };
10371
+ async function createJwt({
10372
+ payload,
10373
+ secret,
10374
+ header
10375
+ }) {
10376
+ const encoder = new TextEncoder();
10377
+ const encodedHeader = base64UrlEncode(
10378
+ JSON.stringify({ ...HEADER, ...header })
10379
+ );
10380
+ const encodedPayload = base64UrlEncode(JSON.stringify(payload));
10381
+ const dataToSign = `${encodedHeader}.${encodedPayload}`;
10382
+ const key = await crypto.subtle.importKey(
10383
+ "raw",
10384
+ encoder.encode(secret),
10385
+ { name: "HMAC", hash: "SHA-256" },
10386
+ false,
10387
+ ["sign"]
10388
+ );
10389
+ const signature = await crypto.subtle.sign(
10390
+ "HMAC",
10391
+ key,
10392
+ encoder.encode(dataToSign)
10393
+ );
10394
+ const encodedSignature = base64UrlEncode(
10395
+ String.fromCharCode(...new Uint8Array(signature))
10396
+ );
10397
+ return `${dataToSign}.${encodedSignature}`;
10398
+ }
10399
+ async function decodeJwt({
10400
+ token,
10401
+ secret
10402
+ }) {
10403
+ if (typeof token !== "string") {
10404
+ throw new Error(JWT_ERROR.INVALID_JWT_FORMAT);
10579
10405
  }
10580
- );
10581
- var fileBlockSchema = Type.Object({
10406
+ const [encodedHeader, encodedPayload, encodedSignature] = token.split(".");
10407
+ if (!encodedHeader || !encodedPayload || !encodedSignature) {
10408
+ throw new Error(JWT_ERROR.INVALID_JWT_FORMAT);
10409
+ }
10410
+ const headerJson = base64UrlDecode(encodedHeader);
10411
+ const payloadJson = base64UrlDecode(encodedPayload);
10412
+ const header = JSON.parse(headerJson);
10413
+ const payload = JSON.parse(payloadJson);
10414
+ const dataToVerify = `${encodedHeader}.${encodedPayload}`;
10415
+ const encoder = new TextEncoder();
10416
+ if (secret !== void 0) {
10417
+ const key = await crypto.subtle.importKey(
10418
+ "raw",
10419
+ encoder.encode(secret),
10420
+ { name: "HMAC", hash: "SHA-256" },
10421
+ false,
10422
+ ["verify"]
10423
+ );
10424
+ const binarySignature = base64UrlDecode(encodedSignature);
10425
+ const signature = new Uint8Array(
10426
+ [...binarySignature].map((char) => char.charCodeAt(0))
10427
+ );
10428
+ const valid = await crypto.subtle.verify(
10429
+ "HMAC",
10430
+ key,
10431
+ signature,
10432
+ encoder.encode(dataToVerify)
10433
+ );
10434
+ return { header, payload, valid };
10435
+ }
10436
+ return { header, payload, valid: false };
10437
+ }
10438
+ var jwt;
10439
+ ((jwt2) => {
10440
+ jwt2.encode = createJwt;
10441
+ jwt2.decode = decodeJwt;
10442
+ jwt2.ERROR = JWT_ERROR;
10443
+ jwt2.DEFAULT_HEADER = HEADER;
10444
+ })(jwt || (jwt = {}));
10445
+
10446
+ // ../state-manager/src/MenuManager.ts
10447
+ var import_noya_utils8 = require("@noya-app/noya-utils");
10448
+ var import_observable11 = require("@noya-app/observable");
10449
+
10450
+ // ../state-manager/src/NoyaManager.ts
10451
+ var import_noya_utils18 = require("@noya-app/noya-utils");
10452
+ var import_observable23 = require("@noya-app/observable");
10453
+
10454
+ // ../noya-pipeline/src/graphToTasks.ts
10455
+ var import_observable12 = require("@noya-app/observable");
10456
+
10457
+ // ../noya-pipeline/src/state.ts
10458
+ var import_noya_utils9 = require("@noya-app/noya-utils");
10459
+ var rectSchema = Type.Object({
10460
+ x: Type.Number(),
10461
+ y: Type.Number(),
10462
+ width: Type.Number(),
10463
+ height: Type.Number()
10464
+ });
10465
+ var transformSchema = Type.Union(
10466
+ [
10467
+ Type.Object({
10468
+ id: Type.String({ format: "uuid", default: "" }),
10469
+ type: Type.Literal("script"),
10470
+ location: Type.Union([Type.Literal("state"), Type.Literal("url")]),
10471
+ value: Type.String()
10472
+ }),
10473
+ Type.Object({
10474
+ id: Type.String({ format: "uuid", default: "" }),
10475
+ type: Type.Literal("jsonPointer"),
10476
+ value: Type.String()
10477
+ })
10478
+ ],
10479
+ {
10480
+ discriminator: "type"
10481
+ }
10482
+ );
10483
+ var baseBlockProperties = {
10484
+ id: Type.String({ format: "uuid", default: "" }),
10485
+ name: Type.String()
10486
+ };
10487
+ var preferredFileSourceSchema = Type.Union(
10488
+ [Type.Literal("fileVersion"), Type.Literal("file")],
10489
+ {
10490
+ default: "fileVersion"
10491
+ }
10492
+ );
10493
+ var fileBlockSchema = Type.Object({
10582
10494
  ...baseBlockProperties,
10583
10495
  type: Type.Literal("file"),
10584
10496
  fileId: Type.Optional(Type.String()),
@@ -10642,41 +10554,41 @@ var pipelineSchema = Type.Object(
10642
10554
  );
10643
10555
 
10644
10556
  // ../state-manager/src/PipelineManager.ts
10645
- var import_observable12 = require("@noya-app/observable");
10557
+ var import_observable13 = require("@noya-app/observable");
10646
10558
 
10647
10559
  // ../state-manager/src/PublishingManager.ts
10648
- var import_observable13 = require("@noya-app/observable");
10560
+ var import_observable14 = require("@noya-app/observable");
10649
10561
 
10650
10562
  // ../state-manager/src/ResourceManager.ts
10651
- var import_noya_utils11 = require("@noya-app/noya-utils");
10652
- var import_observable14 = require("@noya-app/observable");
10563
+ var import_noya_utils10 = require("@noya-app/noya-utils");
10564
+ var import_observable15 = require("@noya-app/observable");
10653
10565
 
10654
10566
  // ../state-manager/src/SandboxManager.ts
10655
- var import_observable15 = require("@noya-app/observable");
10567
+ var import_observable16 = require("@noya-app/observable");
10656
10568
 
10657
10569
  // ../state-manager/src/rpcManager.ts
10658
- var import_noya_utils12 = require("@noya-app/noya-utils");
10659
- var import_observable16 = require("@noya-app/observable");
10570
+ var import_noya_utils11 = require("@noya-app/noya-utils");
10571
+ var import_observable17 = require("@noya-app/observable");
10660
10572
 
10661
10573
  // ../state-manager/src/SecretManager.ts
10662
- var import_observable17 = require("@noya-app/observable");
10574
+ var import_observable18 = require("@noya-app/observable");
10663
10575
 
10664
10576
  // ../state-manager/src/TaskManager.ts
10665
- var import_observable18 = require("@noya-app/observable");
10577
+ var import_observable19 = require("@noya-app/observable");
10666
10578
 
10667
10579
  // ../state-manager/src/TranscriptionManager.ts
10668
- var import_noya_utils13 = require("@noya-app/noya-utils");
10669
- var import_observable19 = require("@noya-app/observable");
10580
+ var import_noya_utils12 = require("@noya-app/noya-utils");
10581
+ var import_observable20 = require("@noya-app/observable");
10670
10582
 
10671
10583
  // ../state-manager/src/UserManager.ts
10672
- var import_observable21 = require("@noya-app/observable");
10584
+ var import_observable22 = require("@noya-app/observable");
10673
10585
 
10674
10586
  // ../state-manager/src/sync/clientId.ts
10675
- var import_noya_utils15 = require("@noya-app/noya-utils");
10676
- var import_observable20 = require("@noya-app/observable");
10587
+ var import_noya_utils14 = require("@noya-app/noya-utils");
10588
+ var import_observable21 = require("@noya-app/observable");
10677
10589
 
10678
10590
  // ../state-manager/src/sync/defaultNames.ts
10679
- var import_noya_utils14 = require("@noya-app/noya-utils");
10591
+ var import_noya_utils13 = require("@noya-app/noya-utils");
10680
10592
  var animals = [
10681
10593
  "cat",
10682
10594
  "dog",
@@ -10728,7 +10640,7 @@ function getClientImageUrl(animal) {
10728
10640
  }
10729
10641
  function randomClientIdentity() {
10730
10642
  const animal = randomElement(animals);
10731
- const name = `${(0, import_noya_utils14.upperFirst)(randomElement(adjectives))} ${(0, import_noya_utils14.upperFirst)(animal)}`;
10643
+ const name = `${(0, import_noya_utils13.upperFirst)(randomElement(adjectives))} ${(0, import_noya_utils13.upperFirst)(animal)}`;
10732
10644
  return {
10733
10645
  name,
10734
10646
  animal,
@@ -10746,9 +10658,9 @@ function getClientAnimalFromName(name) {
10746
10658
  var CLIENT_ID_STORAGE_KEY = "noya-client-id";
10747
10659
  var CLIENT_NAME_STORAGE_KEY = "noya-client-name";
10748
10660
  var CLIENT_IMAGE_STORAGE_KEY = "noya-client-image";
10749
- var clientId$ = new import_observable20.Observable(void 0);
10750
- var clientName$ = new import_observable20.Observable(void 0);
10751
- var clientImage$ = new import_observable20.Observable(void 0);
10661
+ var clientId$ = new import_observable21.Observable(void 0);
10662
+ var clientName$ = new import_observable21.Observable(void 0);
10663
+ var clientImage$ = new import_observable21.Observable(void 0);
10752
10664
  var safeGetItem = (key) => {
10753
10665
  try {
10754
10666
  return typeof localStorage !== "undefined" ? localStorage.getItem(key) : null;
@@ -10769,7 +10681,7 @@ if (typeof window !== "undefined") {
10769
10681
  if (storedClientId) {
10770
10682
  clientId$.set(storedClientId);
10771
10683
  } else {
10772
- const newClientId = (0, import_noya_utils15.uuid)();
10684
+ const newClientId = (0, import_noya_utils14.uuid)();
10773
10685
  safeSetItem(CLIENT_ID_STORAGE_KEY, newClientId);
10774
10686
  clientId$.set(newClientId);
10775
10687
  }
@@ -10792,13 +10704,13 @@ if (typeof window !== "undefined") {
10792
10704
  }
10793
10705
 
10794
10706
  // ../state-manager/src/sync/syncUtils.ts
10795
- var import_noya_utils16 = require("@noya-app/noya-utils");
10707
+ var import_noya_utils15 = require("@noya-app/noya-utils");
10796
10708
 
10797
10709
  // ../state-manager/src/sync/localRpcHelpers.ts
10798
- var import_noya_utils17 = require("@noya-app/noya-utils");
10710
+ var import_noya_utils16 = require("@noya-app/noya-utils");
10799
10711
 
10800
10712
  // ../state-manager/src/sync/localStorageSync.ts
10801
- var import_noya_utils18 = require("@noya-app/noya-utils");
10713
+ var import_noya_utils17 = require("@noya-app/noya-utils");
10802
10714
 
10803
10715
  // ../noya-keymap/src/hooks.ts
10804
10716
  var import_react4 = require("react");
@@ -10921,10 +10833,10 @@ var createMutatorParametersSchema = Type.Object({
10921
10833
  });
10922
10834
 
10923
10835
  // ../noya-multiplayer-react/src/ai.ts
10924
- var import_react62 = require("react");
10836
+ var import_react63 = require("react");
10925
10837
 
10926
10838
  // ../noya-multiplayer-react/src/NoyaStateContext.tsx
10927
- var import_observable23 = require("@noya-app/observable");
10839
+ var import_observable24 = require("@noya-app/observable");
10928
10840
 
10929
10841
  // ../noya-react-utils/src/components/AutoSizer.tsx
10930
10842
  var React2 = __toESM(require("react"));
@@ -11106,7 +11018,7 @@ var FileDropTarget = memoGeneric(function FileDropTarget2({ children, onDropFile
11106
11018
  var import_react8 = require("react");
11107
11019
 
11108
11020
  // ../noya-react-utils/src/hooks/useDeepArray.ts
11109
- var import_noya_utils20 = require("@noya-app/noya-utils");
11021
+ var import_noya_utils19 = require("@noya-app/noya-utils");
11110
11022
  var import_react9 = require("react");
11111
11023
  function useJsonMemo(value) {
11112
11024
  const stringified = (0, import_react9.useMemo)(
@@ -11121,7 +11033,7 @@ function useJsonMemo(value) {
11121
11033
  }
11122
11034
 
11123
11035
  // ../noya-react-utils/src/hooks/useDeepState.ts
11124
- var import_noya_utils21 = require("@noya-app/noya-utils");
11036
+ var import_noya_utils20 = require("@noya-app/noya-utils");
11125
11037
  var import_react10 = require("react");
11126
11038
 
11127
11039
  // ../noya-react-utils/src/hooks/useFetch.ts
@@ -11152,7 +11064,7 @@ var import_react17 = require("react");
11152
11064
  var import_react18 = require("react");
11153
11065
 
11154
11066
  // ../noya-react-utils/src/hooks/useShallowArray.ts
11155
- var import_noya_utils22 = require("@noya-app/noya-utils");
11067
+ var import_noya_utils21 = require("@noya-app/noya-utils");
11156
11068
  var import_react19 = require("react");
11157
11069
 
11158
11070
  // ../noya-react-utils/src/hooks/useStableCallback.ts
@@ -11162,7 +11074,7 @@ var import_react20 = require("react");
11162
11074
  var import_react21 = require("react");
11163
11075
 
11164
11076
  // ../noya-react-utils/src/hooks/useUrlHashParameters.ts
11165
- var import_noya_utils23 = require("@noya-app/noya-utils");
11077
+ var import_noya_utils22 = require("@noya-app/noya-utils");
11166
11078
  var import_react22 = require("react");
11167
11079
 
11168
11080
  // ../noya-react-utils/src/hooks/useWindowSize.ts
@@ -11225,13 +11137,13 @@ function downloadBlob(...params) {
11225
11137
  }
11226
11138
 
11227
11139
  // ../noya-multiplayer-react/src/NoyaStateContext.tsx
11228
- var import_react61 = __toESM(require("react"));
11140
+ var import_react62 = __toESM(require("react"));
11229
11141
 
11230
11142
  // ../noya-multiplayer-react/src/noyaApp.ts
11231
- var import_react59 = require("react");
11143
+ var import_react60 = require("react");
11232
11144
 
11233
11145
  // ../noya-multiplayer-react/src/hooks.ts
11234
- var import_react58 = require("react");
11146
+ var import_react59 = require("react");
11235
11147
  var import_client2 = require("react-dom/client");
11236
11148
 
11237
11149
  // ../noya-multiplayer-react/src/components/ErrorOverlay.tsx
@@ -11309,12 +11221,12 @@ var ErrorOverlay = React6.memo(function ErrorOverlay2({
11309
11221
  });
11310
11222
 
11311
11223
  // ../noya-multiplayer-react/src/inspector/useStateInspector.tsx
11312
- var import_react57 = __toESM(require("react"));
11224
+ var import_react58 = __toESM(require("react"));
11313
11225
  var import_client = require("react-dom/client");
11314
11226
 
11315
11227
  // ../noya-multiplayer-react/src/inspector/StateInspector.tsx
11316
- var import_noya_utils24 = require("@noya-app/noya-utils");
11317
- var import_react56 = __toESM(require("react"));
11228
+ var import_noya_utils23 = require("@noya-app/noya-utils");
11229
+ var import_react57 = __toESM(require("react"));
11318
11230
 
11319
11231
  // ../../node_modules/react-inspector/dist/index.mjs
11320
11232
  var import_react24 = __toESM(require("react"), 1);
@@ -12962,8 +12874,424 @@ function EventsSection({
12962
12874
  );
12963
12875
  }
12964
12876
 
12965
- // ../noya-multiplayer-react/src/inspector/sections/HistorySection.tsx
12877
+ // ../noya-multiplayer-react/src/inspector/sections/GitSection.tsx
12878
+ var import_react51 = __toESM(require("react"));
12879
+
12880
+ // ../noya-multiplayer-react/src/inspector/StateInspectorTitleLabel.tsx
12966
12881
  var import_react50 = __toESM(require("react"));
12882
+ function StateInspectorTitleLabel({
12883
+ children
12884
+ }) {
12885
+ return /* @__PURE__ */ import_react50.default.createElement("span", { style: { display: "flex", alignItems: "center", gap: "4px" } }, children);
12886
+ }
12887
+
12888
+ // ../noya-multiplayer-react/src/inspector/sections/GitSection.tsx
12889
+ function GitSection({
12890
+ showGit,
12891
+ setShowGit,
12892
+ colorScheme,
12893
+ gitManager
12894
+ }) {
12895
+ const theme3 = getStateInspectorTheme(colorScheme);
12896
+ const repos = useObservable2(gitManager.repos$);
12897
+ const isInitialized = useObservable2(gitManager.isInitialized$);
12898
+ const repoFiles = useObservable2(gitManager.repoFiles$);
12899
+ const [focusedRepoId, setFocusedRepoId] = (0, import_react51.useState)(null);
12900
+ const [editingFile, setEditingFile] = (0, import_react51.useState)(null);
12901
+ const editHandleRef = (0, import_react51.useRef)(null);
12902
+ const [editContent, setEditContent] = (0, import_react51.useState)("");
12903
+ const [isEditInitialized, setIsEditInitialized] = (0, import_react51.useState)(false);
12904
+ const focusedRepo = focusedRepoId ? repos.find((r) => r.id === focusedRepoId) : null;
12905
+ const focusedRepoFilesState = focusedRepoId ? repoFiles[focusedRepoId] : null;
12906
+ const handleFocusRepo = async (repoId) => {
12907
+ if (editHandleRef.current) {
12908
+ editHandleRef.current.close();
12909
+ editHandleRef.current = null;
12910
+ setEditingFile(null);
12911
+ setEditContent("");
12912
+ setIsEditInitialized(false);
12913
+ }
12914
+ setFocusedRepoId(repoId);
12915
+ if (repoId && !repoFiles[repoId]) {
12916
+ await gitManager.fetchRepoFiles(repoId);
12917
+ }
12918
+ };
12919
+ const handleEditFile = (filePath) => {
12920
+ if (!focusedRepoId || !focusedRepoFilesState) return;
12921
+ if (editHandleRef.current) {
12922
+ editHandleRef.current.close();
12923
+ }
12924
+ const handle = gitManager.openEditingHandle(
12925
+ focusedRepoId,
12926
+ filePath,
12927
+ focusedRepoFilesState.ref
12928
+ );
12929
+ editHandleRef.current = handle;
12930
+ setEditingFile(filePath);
12931
+ setIsEditInitialized(false);
12932
+ setEditContent("");
12933
+ };
12934
+ const handleCloseEdit = () => {
12935
+ if (editHandleRef.current) {
12936
+ editHandleRef.current.close();
12937
+ editHandleRef.current = null;
12938
+ }
12939
+ setEditingFile(null);
12940
+ setEditContent("");
12941
+ setIsEditInitialized(false);
12942
+ };
12943
+ (0, import_react51.useEffect)(() => {
12944
+ const handle = editHandleRef.current;
12945
+ if (!handle) return;
12946
+ const unsubContent = handle.content$.subscribe((content) => {
12947
+ setEditContent(content);
12948
+ });
12949
+ const unsubInitialized = handle.isInitialized$.subscribe((initialized) => {
12950
+ setIsEditInitialized(initialized);
12951
+ });
12952
+ return () => {
12953
+ unsubContent();
12954
+ unsubInitialized();
12955
+ };
12956
+ }, [editingFile]);
12957
+ const handleContentChange = (newContent) => {
12958
+ const handle = editHandleRef.current;
12959
+ if (!handle) return;
12960
+ handle.setState(newContent);
12961
+ };
12962
+ const handleBranchChange = async (ref) => {
12963
+ if (focusedRepoId) {
12964
+ await gitManager.fetchRepoFiles(focusedRepoId, ref);
12965
+ }
12966
+ };
12967
+ const handleAddFile = async () => {
12968
+ if (!focusedRepoId || !focusedRepoFilesState) return;
12969
+ const path2 = prompt("Enter file path (e.g., src/index.ts):");
12970
+ if (!path2) return;
12971
+ try {
12972
+ await gitManager.patchFiles(
12973
+ focusedRepoId,
12974
+ { create: [{ path: path2, content: "" }] },
12975
+ focusedRepoFilesState.ref
12976
+ );
12977
+ } catch (error) {
12978
+ alert(`Failed to create file: ${error}`);
12979
+ }
12980
+ };
12981
+ const handleRenameFile = async (oldPath) => {
12982
+ if (!focusedRepoId || !focusedRepoFilesState) return;
12983
+ const newPath = prompt(`Rename "${oldPath}" to:`, oldPath);
12984
+ if (!newPath || newPath === oldPath) return;
12985
+ try {
12986
+ await gitManager.patchFiles(
12987
+ focusedRepoId,
12988
+ { rename: [{ oldPath, newPath }] },
12989
+ focusedRepoFilesState.ref
12990
+ );
12991
+ } catch (error) {
12992
+ alert(`Failed to rename file: ${error}`);
12993
+ }
12994
+ };
12995
+ const handleDeleteFile = async (path2) => {
12996
+ if (!focusedRepoId || !focusedRepoFilesState) return;
12997
+ const confirmed = confirm(`Delete "${path2}"?`);
12998
+ if (!confirmed) return;
12999
+ try {
13000
+ await gitManager.patchFiles(
13001
+ focusedRepoId,
13002
+ { delete: [{ path: path2 }] },
13003
+ focusedRepoFilesState.ref
13004
+ );
13005
+ if (editingFile === path2) {
13006
+ handleCloseEdit();
13007
+ }
13008
+ } catch (error) {
13009
+ alert(`Failed to delete file: ${error}`);
13010
+ }
13011
+ };
13012
+ return /* @__PURE__ */ import_react51.default.createElement(
13013
+ StateInspectorDisclosureSection,
13014
+ {
13015
+ open: showGit,
13016
+ setOpen: setShowGit,
13017
+ title: /* @__PURE__ */ import_react51.default.createElement(StateInspectorTitleLabel, null, "Git Repos (", repos.length, ")", /* @__PURE__ */ import_react51.default.createElement(ColoredDot, { type: isInitialized ? "success" : "error" })),
13018
+ colorScheme,
13019
+ right: /* @__PURE__ */ import_react51.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react51.default.createElement(
13020
+ StateInspectorButton,
13021
+ {
13022
+ theme: theme3,
13023
+ onClick: async () => {
13024
+ try {
13025
+ await gitManager.initRepo();
13026
+ } catch (error) {
13027
+ console.error("[GitSection] Failed to create repo:", error);
13028
+ }
13029
+ }
13030
+ },
13031
+ "Init Repo"
13032
+ ))
13033
+ },
13034
+ /* @__PURE__ */ import_react51.default.createElement(StateInspectorDisclosureRowInner, null, /* @__PURE__ */ import_react51.default.createElement("div", { style: { padding: "4px 12px", display: "flex", gap: "4px" } }, /* @__PURE__ */ import_react51.default.createElement(
13035
+ "select",
13036
+ {
13037
+ name: "repoSelector",
13038
+ value: focusedRepoId ?? "",
13039
+ style: { flex: "1 1 auto", height: "19px", minWidth: 0 },
13040
+ onChange: (e) => {
13041
+ const value = e.target.value;
13042
+ handleFocusRepo(value || null);
13043
+ }
13044
+ },
13045
+ /* @__PURE__ */ import_react51.default.createElement("option", { value: "" }, "Select a repo..."),
13046
+ repos.map((repo) => /* @__PURE__ */ import_react51.default.createElement("option", { key: repo.id, value: repo.id }, repo.id))
13047
+ ), focusedRepoId && /* @__PURE__ */ import_react51.default.createElement(
13048
+ StateInspectorButton,
13049
+ {
13050
+ theme: theme3,
13051
+ onClick: () => gitManager.fetchRepoFiles(focusedRepoId)
13052
+ },
13053
+ "Refresh"
13054
+ ), /* @__PURE__ */ import_react51.default.createElement(
13055
+ "label",
13056
+ {
13057
+ style: {
13058
+ display: "flex",
13059
+ alignItems: "center",
13060
+ gap: "4px",
13061
+ fontSize: "11px",
13062
+ whiteSpace: "nowrap"
13063
+ }
13064
+ },
13065
+ "[Include Content = ",
13066
+ gitManager.includeContent ? "true" : "false",
13067
+ "]"
13068
+ )), focusedRepo && focusedRepoFilesState && /* @__PURE__ */ import_react51.default.createElement(import_react51.default.Fragment, null, /* @__PURE__ */ import_react51.default.createElement(
13069
+ "div",
13070
+ {
13071
+ style: {
13072
+ padding: "4px 12px",
13073
+ display: "flex",
13074
+ gap: "8px",
13075
+ alignItems: "center",
13076
+ fontSize: "12px"
13077
+ }
13078
+ },
13079
+ /* @__PURE__ */ import_react51.default.createElement("span", { style: { color: theme3.BASE_COLOR } }, "Branch:"),
13080
+ focusedRepoFilesState.branches.length > 0 ? /* @__PURE__ */ import_react51.default.createElement(
13081
+ "select",
13082
+ {
13083
+ value: focusedRepoFilesState.ref,
13084
+ style: { flex: "1 1 auto", height: "19px" },
13085
+ onChange: (e) => handleBranchChange(e.target.value)
13086
+ },
13087
+ focusedRepoFilesState.branches.map((branch) => /* @__PURE__ */ import_react51.default.createElement("option", { key: branch.name, value: branch.name }, branch.name))
13088
+ ) : /* @__PURE__ */ import_react51.default.createElement("span", { style: { opacity: 0.6, fontStyle: "italic" } }, focusedRepoFilesState.ref || "No branches"),
13089
+ focusedRepoFilesState.oid && /* @__PURE__ */ import_react51.default.createElement(
13090
+ "span",
13091
+ {
13092
+ style: {
13093
+ fontFamily: "monospace",
13094
+ fontSize: "10px",
13095
+ opacity: 0.6
13096
+ },
13097
+ title: focusedRepoFilesState.oid
13098
+ },
13099
+ focusedRepoFilesState.oid.slice(0, 7),
13100
+ focusedRepoFilesState.fetchState === "refreshing" && "\u2026"
13101
+ ),
13102
+ /* @__PURE__ */ import_react51.default.createElement(
13103
+ StateInspectorButton,
13104
+ {
13105
+ theme: theme3,
13106
+ onClick: handleAddFile,
13107
+ style: { fontSize: "10px", padding: "2px 6px" }
13108
+ },
13109
+ "+ Add File"
13110
+ )
13111
+ ), focusedRepoFilesState.fetchState === "loading" && /* @__PURE__ */ import_react51.default.createElement(
13112
+ "div",
13113
+ {
13114
+ style: {
13115
+ padding: "12px",
13116
+ fontSize: "12px"
13117
+ }
13118
+ },
13119
+ "Loading files..."
13120
+ ), focusedRepoFilesState.error && /* @__PURE__ */ import_react51.default.createElement(
13121
+ "div",
13122
+ {
13123
+ style: {
13124
+ padding: "12px",
13125
+ fontSize: "12px",
13126
+ color: "#f44"
13127
+ }
13128
+ },
13129
+ "Error: ",
13130
+ focusedRepoFilesState.error
13131
+ ), focusedRepoFilesState.fetchState !== "loading" && !focusedRepoFilesState.error && focusedRepoFilesState.files.length === 0 && /* @__PURE__ */ import_react51.default.createElement(
13132
+ "div",
13133
+ {
13134
+ style: {
13135
+ padding: "12px",
13136
+ fontSize: "12px"
13137
+ }
13138
+ },
13139
+ "No files (empty repo)"
13140
+ ), !editingFile && focusedRepoFilesState.files.map((file, index) => {
13141
+ const fileInfo = focusedRepoFilesState.fileContents?.find(
13142
+ (f) => f.path === file
13143
+ );
13144
+ let preview = "";
13145
+ if (fileInfo) {
13146
+ try {
13147
+ const decoded = atob(fileInfo.content);
13148
+ preview = decoded.slice(0, 40).replace(/\n/g, " ").replace(/\s+/g, " ");
13149
+ if (decoded.length > 40) preview += "\u2026";
13150
+ } catch {
13151
+ }
13152
+ }
13153
+ return /* @__PURE__ */ import_react51.default.createElement(
13154
+ "div",
13155
+ {
13156
+ key: index,
13157
+ style: {
13158
+ padding: "2px 12px",
13159
+ display: "flex",
13160
+ justifyContent: "space-between",
13161
+ alignItems: "center",
13162
+ gap: "8px",
13163
+ borderBottom: `1px solid ${colorScheme === "light" ? "rgb(223 223 223)" : "rgb(29 29 29)"}`
13164
+ }
13165
+ },
13166
+ /* @__PURE__ */ import_react51.default.createElement(
13167
+ "span",
13168
+ {
13169
+ style: {
13170
+ fontFamily: "monospace",
13171
+ fontSize: "11px",
13172
+ overflow: "hidden",
13173
+ textOverflow: "ellipsis",
13174
+ whiteSpace: "nowrap",
13175
+ minWidth: 0,
13176
+ display: "flex",
13177
+ gap: "8px"
13178
+ },
13179
+ title: file
13180
+ },
13181
+ /* @__PURE__ */ import_react51.default.createElement("span", null, file),
13182
+ preview && /* @__PURE__ */ import_react51.default.createElement("span", { style: { opacity: 0.5 } }, preview)
13183
+ ),
13184
+ /* @__PURE__ */ import_react51.default.createElement("span", { style: { display: "flex", gap: "4px", flexShrink: 0 } }, /* @__PURE__ */ import_react51.default.createElement(
13185
+ StateInspectorButton,
13186
+ {
13187
+ theme: theme3,
13188
+ onClick: () => handleEditFile(file),
13189
+ style: { fontSize: "10px", padding: "2px 6px" }
13190
+ },
13191
+ "Edit"
13192
+ ), /* @__PURE__ */ import_react51.default.createElement(
13193
+ StateInspectorButton,
13194
+ {
13195
+ theme: theme3,
13196
+ onClick: () => handleRenameFile(file),
13197
+ style: { fontSize: "10px", padding: "2px 6px" }
13198
+ },
13199
+ "Rename"
13200
+ ), /* @__PURE__ */ import_react51.default.createElement(
13201
+ StateInspectorButton,
13202
+ {
13203
+ theme: theme3,
13204
+ onClick: () => handleDeleteFile(file),
13205
+ style: { fontSize: "10px", padding: "2px 6px" }
13206
+ },
13207
+ "Delete"
13208
+ ))
13209
+ );
13210
+ }), editingFile && /* @__PURE__ */ import_react51.default.createElement(
13211
+ "div",
13212
+ {
13213
+ style: {
13214
+ padding: "8px 12px",
13215
+ borderTop: `1px solid ${theme3.DIVIDER_COLOR}`,
13216
+ flex: "1 1 auto",
13217
+ display: "flex",
13218
+ flexDirection: "column",
13219
+ minHeight: 0
13220
+ }
13221
+ },
13222
+ /* @__PURE__ */ import_react51.default.createElement(
13223
+ "div",
13224
+ {
13225
+ style: {
13226
+ display: "flex",
13227
+ justifyContent: "space-between",
13228
+ alignItems: "center",
13229
+ marginBottom: "8px",
13230
+ flexShrink: 0
13231
+ }
13232
+ },
13233
+ /* @__PURE__ */ import_react51.default.createElement(
13234
+ "span",
13235
+ {
13236
+ style: {
13237
+ fontFamily: "monospace",
13238
+ fontSize: "11px",
13239
+ fontWeight: "bold"
13240
+ }
13241
+ },
13242
+ editingFile,
13243
+ !isEditInitialized && /* @__PURE__ */ import_react51.default.createElement("span", { style: { opacity: 0.5, marginLeft: "8px" } }, "Loading...")
13244
+ ),
13245
+ /* @__PURE__ */ import_react51.default.createElement(
13246
+ StateInspectorButton,
13247
+ {
13248
+ theme: theme3,
13249
+ onClick: handleCloseEdit,
13250
+ style: { fontSize: "10px", padding: "2px 6px" }
13251
+ },
13252
+ "Close"
13253
+ )
13254
+ ),
13255
+ /* @__PURE__ */ import_react51.default.createElement(
13256
+ "textarea",
13257
+ {
13258
+ value: editContent,
13259
+ onChange: (e) => handleContentChange(e.target.value),
13260
+ disabled: !isEditInitialized,
13261
+ style: {
13262
+ width: "100%",
13263
+ flex: "1 1 auto",
13264
+ minHeight: "100px",
13265
+ fontFamily: "monospace",
13266
+ fontSize: "11px",
13267
+ padding: "8px",
13268
+ border: `1px solid ${theme3.DIVIDER_COLOR}`,
13269
+ borderRadius: "4px",
13270
+ backgroundColor: theme3.ROW_BACKGROUND,
13271
+ color: theme3.BASE_COLOR,
13272
+ resize: "none",
13273
+ boxSizing: "border-box"
13274
+ }
13275
+ }
13276
+ )
13277
+ )), repos.length === 0 && /* @__PURE__ */ import_react51.default.createElement(
13278
+ "div",
13279
+ {
13280
+ style: {
13281
+ padding: "12px",
13282
+ fontSize: "12px",
13283
+ display: "flex",
13284
+ flexDirection: "column",
13285
+ gap: "4px"
13286
+ }
13287
+ },
13288
+ /* @__PURE__ */ import_react51.default.createElement("span", null, "No git repos")
13289
+ ))
13290
+ );
13291
+ }
13292
+
13293
+ // ../noya-multiplayer-react/src/inspector/sections/HistorySection.tsx
13294
+ var import_react52 = __toESM(require("react"));
12967
13295
 
12968
13296
  // ../noya-multiplayer-react/src/inspector/utils.ts
12969
13297
  function pathToString(extendedPath) {
@@ -13018,15 +13346,15 @@ function HistorySection({
13018
13346
  historySnapshot,
13019
13347
  multiplayerStateManager
13020
13348
  }) {
13021
- const ref = (0, import_react50.useRef)(null);
13349
+ const ref = (0, import_react52.useRef)(null);
13022
13350
  const theme3 = getStateInspectorTheme(colorScheme);
13023
13351
  const solidBorderColor = getStateInspectorBorderColor(colorScheme);
13024
- (0, import_react50.useEffect)(() => {
13352
+ (0, import_react52.useEffect)(() => {
13025
13353
  if (ref.current) {
13026
13354
  ref.current.scrollTop = ref.current.scrollHeight;
13027
13355
  }
13028
13356
  }, [historySnapshot]);
13029
- (0, import_react50.useEffect)(() => {
13357
+ (0, import_react52.useEffect)(() => {
13030
13358
  if (!ref.current) return;
13031
13359
  const historyEntry = ref.current.querySelector(
13032
13360
  `#${HISTORY_ELEMENT_PREFIX}${historySnapshot.historyIndex}`
@@ -13038,14 +13366,14 @@ function HistorySection({
13038
13366
  });
13039
13367
  }
13040
13368
  }, [historySnapshot.historyIndex]);
13041
- return /* @__PURE__ */ import_react50.default.createElement(
13369
+ return /* @__PURE__ */ import_react52.default.createElement(
13042
13370
  StateInspectorDisclosureSection,
13043
13371
  {
13044
13372
  open: showHistory,
13045
13373
  setOpen: setShowHistory,
13046
13374
  title: "History",
13047
13375
  colorScheme,
13048
- right: /* @__PURE__ */ import_react50.default.createElement(
13376
+ right: /* @__PURE__ */ import_react52.default.createElement(
13049
13377
  "span",
13050
13378
  {
13051
13379
  style: {
@@ -13053,7 +13381,7 @@ function HistorySection({
13053
13381
  gap: "4px"
13054
13382
  }
13055
13383
  },
13056
- /* @__PURE__ */ import_react50.default.createElement(
13384
+ /* @__PURE__ */ import_react52.default.createElement(
13057
13385
  StateInspectorButton,
13058
13386
  {
13059
13387
  disabled: !historySnapshot.canUndo,
@@ -13062,7 +13390,7 @@ function HistorySection({
13062
13390
  multiplayerStateManager.undo();
13063
13391
  }
13064
13392
  },
13065
- /* @__PURE__ */ import_react50.default.createElement("span", { style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react50.default.createElement(
13393
+ /* @__PURE__ */ import_react52.default.createElement("span", { style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react52.default.createElement(
13066
13394
  "svg",
13067
13395
  {
13068
13396
  xmlns: "http://www.w3.org/2000/svg",
@@ -13070,7 +13398,7 @@ function HistorySection({
13070
13398
  height: "1em",
13071
13399
  viewBox: "0 0 20 20"
13072
13400
  },
13073
- /* @__PURE__ */ import_react50.default.createElement(
13401
+ /* @__PURE__ */ import_react52.default.createElement(
13074
13402
  "path",
13075
13403
  {
13076
13404
  fill: "currentColor",
@@ -13079,7 +13407,7 @@ function HistorySection({
13079
13407
  )
13080
13408
  ))
13081
13409
  ),
13082
- /* @__PURE__ */ import_react50.default.createElement(
13410
+ /* @__PURE__ */ import_react52.default.createElement(
13083
13411
  StateInspectorButton,
13084
13412
  {
13085
13413
  disabled: !historySnapshot.canRedo,
@@ -13088,7 +13416,7 @@ function HistorySection({
13088
13416
  multiplayerStateManager.redo();
13089
13417
  }
13090
13418
  },
13091
- /* @__PURE__ */ import_react50.default.createElement("span", { style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react50.default.createElement(
13419
+ /* @__PURE__ */ import_react52.default.createElement("span", { style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react52.default.createElement(
13092
13420
  "svg",
13093
13421
  {
13094
13422
  xmlns: "http://www.w3.org/2000/svg",
@@ -13096,7 +13424,7 @@ function HistorySection({
13096
13424
  height: "1em",
13097
13425
  viewBox: "0 0 20 20"
13098
13426
  },
13099
- /* @__PURE__ */ import_react50.default.createElement(
13427
+ /* @__PURE__ */ import_react52.default.createElement(
13100
13428
  "path",
13101
13429
  {
13102
13430
  fill: "currentColor",
@@ -13107,7 +13435,7 @@ function HistorySection({
13107
13435
  )
13108
13436
  )
13109
13437
  },
13110
- /* @__PURE__ */ import_react50.default.createElement(StateInspectorDisclosureRowInner, { ref }, /* @__PURE__ */ import_react50.default.createElement(
13438
+ /* @__PURE__ */ import_react52.default.createElement(StateInspectorDisclosureRowInner, { ref }, /* @__PURE__ */ import_react52.default.createElement(
13111
13439
  "div",
13112
13440
  {
13113
13441
  id: `${HISTORY_ELEMENT_PREFIX}0`,
@@ -13121,7 +13449,7 @@ function HistorySection({
13121
13449
  background: historySnapshot.historyIndex === 0 ? "rgb(59 130 246 / 15%)" : void 0
13122
13450
  }
13123
13451
  },
13124
- /* @__PURE__ */ import_react50.default.createElement(
13452
+ /* @__PURE__ */ import_react52.default.createElement(
13125
13453
  "span",
13126
13454
  {
13127
13455
  style: {
@@ -13136,7 +13464,7 @@ function HistorySection({
13136
13464
  ), historySnapshot.history.map((entry, index) => {
13137
13465
  const metadata = entry.metadata;
13138
13466
  const { id, name, timestamp, ...rest } = metadata;
13139
- return /* @__PURE__ */ import_react50.default.createElement(
13467
+ return /* @__PURE__ */ import_react52.default.createElement(
13140
13468
  "div",
13141
13469
  {
13142
13470
  id: `${HISTORY_ELEMENT_PREFIX}${index + 1}`,
@@ -13147,7 +13475,7 @@ function HistorySection({
13147
13475
  background: index + 1 === historySnapshot.historyIndex ? "rgb(59 130 246 / 15%)" : void 0
13148
13476
  }
13149
13477
  },
13150
- typeof name === "string" && /* @__PURE__ */ import_react50.default.createElement(
13478
+ typeof name === "string" && /* @__PURE__ */ import_react52.default.createElement(
13151
13479
  "pre",
13152
13480
  {
13153
13481
  style: {
@@ -13158,9 +13486,9 @@ function HistorySection({
13158
13486
  }
13159
13487
  },
13160
13488
  entry.metadata.name,
13161
- Object.keys(rest).length > 0 && /* @__PURE__ */ import_react50.default.createElement(themedObjectInspector, { data: rest, theme: theme3 })
13489
+ Object.keys(rest).length > 0 && /* @__PURE__ */ import_react52.default.createElement(themedObjectInspector, { data: rest, theme: theme3 })
13162
13490
  ),
13163
- entry.redoPatches?.map((patch, j) => /* @__PURE__ */ import_react50.default.createElement(
13491
+ entry.redoPatches?.map((patch, j) => /* @__PURE__ */ import_react52.default.createElement(
13164
13492
  "pre",
13165
13493
  {
13166
13494
  key: j,
@@ -13171,10 +13499,10 @@ function HistorySection({
13171
13499
  margin: 0
13172
13500
  }
13173
13501
  },
13174
- patch.op === "add" && /* @__PURE__ */ import_react50.default.createElement(import_react50.default.Fragment, null, /* @__PURE__ */ import_react50.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path)), " = ", /* @__PURE__ */ import_react50.default.createElement(themedObjectInspector, { data: patch.value, theme: theme3 })),
13175
- patch.op === "replace" && /* @__PURE__ */ import_react50.default.createElement(import_react50.default.Fragment, null, /* @__PURE__ */ import_react50.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path)), " = ", /* @__PURE__ */ import_react50.default.createElement(themedObjectInspector, { data: patch.value, theme: theme3 })),
13176
- patch.op === "remove" && /* @__PURE__ */ import_react50.default.createElement(import_react50.default.Fragment, null, /* @__PURE__ */ import_react50.default.createElement("span", { style: { color: theme3.OBJECT_VALUE_STRING_COLOR } }, "delete", " "), /* @__PURE__ */ import_react50.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path))),
13177
- patch.op === "move" && /* @__PURE__ */ import_react50.default.createElement(import_react50.default.Fragment, null, /* @__PURE__ */ import_react50.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.from)), " -> ", /* @__PURE__ */ import_react50.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path)))
13502
+ patch.op === "add" && /* @__PURE__ */ import_react52.default.createElement(import_react52.default.Fragment, null, /* @__PURE__ */ import_react52.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path)), " = ", /* @__PURE__ */ import_react52.default.createElement(themedObjectInspector, { data: patch.value, theme: theme3 })),
13503
+ patch.op === "replace" && /* @__PURE__ */ import_react52.default.createElement(import_react52.default.Fragment, null, /* @__PURE__ */ import_react52.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path)), " = ", /* @__PURE__ */ import_react52.default.createElement(themedObjectInspector, { data: patch.value, theme: theme3 })),
13504
+ patch.op === "remove" && /* @__PURE__ */ import_react52.default.createElement(import_react52.default.Fragment, null, /* @__PURE__ */ import_react52.default.createElement("span", { style: { color: theme3.OBJECT_VALUE_STRING_COLOR } }, "delete", " "), /* @__PURE__ */ import_react52.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path))),
13505
+ patch.op === "move" && /* @__PURE__ */ import_react52.default.createElement(import_react52.default.Fragment, null, /* @__PURE__ */ import_react52.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.from)), " -> ", /* @__PURE__ */ import_react52.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path)))
13178
13506
  ))
13179
13507
  );
13180
13508
  }))
@@ -13182,7 +13510,7 @@ function HistorySection({
13182
13510
  }
13183
13511
 
13184
13512
  // ../noya-multiplayer-react/src/inspector/sections/ServerScriptLogsSection.tsx
13185
- var import_react51 = __toESM(require("react"));
13513
+ var import_react53 = __toESM(require("react"));
13186
13514
  var levelColors = {
13187
13515
  error: "#f87171",
13188
13516
  warn: "#facc15",
@@ -13202,16 +13530,16 @@ function ServerScriptLogsSection({
13202
13530
  title = "Server Script Logs"
13203
13531
  }) {
13204
13532
  const theme3 = getStateInspectorTheme(colorScheme);
13205
- return /* @__PURE__ */ import_react51.default.createElement(
13533
+ return /* @__PURE__ */ import_react53.default.createElement(
13206
13534
  StateInspectorDisclosureSection,
13207
13535
  {
13208
13536
  open: showLogs,
13209
13537
  setOpen: setShowLogs,
13210
13538
  title,
13211
13539
  colorScheme,
13212
- right: /* @__PURE__ */ import_react51.default.createElement(StateInspectorButton, { theme: theme3, onClick: onTogglePaused }, paused ? "Resume" : "Pause")
13540
+ right: /* @__PURE__ */ import_react53.default.createElement(StateInspectorButton, { theme: theme3, onClick: onTogglePaused }, paused ? "Resume" : "Pause")
13213
13541
  },
13214
- /* @__PURE__ */ import_react51.default.createElement(StateInspectorDisclosureRowInner, { ref: containerRef }, paused && /* @__PURE__ */ import_react51.default.createElement(
13542
+ /* @__PURE__ */ import_react53.default.createElement(StateInspectorDisclosureRowInner, { ref: containerRef }, paused && /* @__PURE__ */ import_react53.default.createElement(
13215
13543
  "div",
13216
13544
  {
13217
13545
  style: {
@@ -13221,7 +13549,7 @@ function ServerScriptLogsSection({
13221
13549
  }
13222
13550
  },
13223
13551
  "Log streaming paused"
13224
- ), logs.map((log) => /* @__PURE__ */ import_react51.default.createElement(StateInspectorRow, { key: log.id, colorScheme }, /* @__PURE__ */ import_react51.default.createElement(
13552
+ ), logs.map((log) => /* @__PURE__ */ import_react53.default.createElement(StateInspectorRow, { key: log.id, colorScheme }, /* @__PURE__ */ import_react53.default.createElement(
13225
13553
  "div",
13226
13554
  {
13227
13555
  style: {
@@ -13234,9 +13562,9 @@ function ServerScriptLogsSection({
13234
13562
  textTransform: "uppercase"
13235
13563
  }
13236
13564
  },
13237
- /* @__PURE__ */ import_react51.default.createElement("span", null, formatTimestamp(log.timestamp)),
13238
- /* @__PURE__ */ import_react51.default.createElement("span", { style: { color: levelColors[log.level] } }, log.level),
13239
- (log.origin || log.target || log.mode) && /* @__PURE__ */ import_react51.default.createElement(
13565
+ /* @__PURE__ */ import_react53.default.createElement("span", null, formatTimestamp(log.timestamp)),
13566
+ /* @__PURE__ */ import_react53.default.createElement("span", { style: { color: levelColors[log.level] } }, log.level),
13567
+ (log.origin || log.target || log.mode) && /* @__PURE__ */ import_react53.default.createElement(
13240
13568
  "span",
13241
13569
  {
13242
13570
  style: {
@@ -13248,7 +13576,7 @@ function ServerScriptLogsSection({
13248
13576
  },
13249
13577
  [log.origin ?? log.target, log.mode].filter(Boolean).join(" / ")
13250
13578
  ),
13251
- /* @__PURE__ */ import_react51.default.createElement(
13579
+ /* @__PURE__ */ import_react53.default.createElement(
13252
13580
  "span",
13253
13581
  {
13254
13582
  style: {
@@ -13259,7 +13587,7 @@ function ServerScriptLogsSection({
13259
13587
  },
13260
13588
  log.scriptId
13261
13589
  )
13262
- ), /* @__PURE__ */ import_react51.default.createElement(
13590
+ ), /* @__PURE__ */ import_react53.default.createElement(
13263
13591
  "div",
13264
13592
  {
13265
13593
  style: {
@@ -13268,15 +13596,15 @@ function ServerScriptLogsSection({
13268
13596
  gap: "4px"
13269
13597
  }
13270
13598
  },
13271
- log.values.length > 0 ? log.values.map((value, index) => /* @__PURE__ */ import_react51.default.createElement(
13599
+ log.values.length > 0 ? log.values.map((value, index) => /* @__PURE__ */ import_react53.default.createElement(
13272
13600
  themedObjectInspector,
13273
13601
  {
13274
13602
  key: index,
13275
13603
  data: value,
13276
13604
  theme: theme3
13277
13605
  }
13278
- )) : /* @__PURE__ */ import_react51.default.createElement("span", { style: { fontSize: "11px", opacity: 0.7 } }, "No data")
13279
- ))), !logs?.length && /* @__PURE__ */ import_react51.default.createElement(
13606
+ )) : /* @__PURE__ */ import_react53.default.createElement("span", { style: { fontSize: "11px", opacity: 0.7 } }, "No data")
13607
+ ))), !logs?.length && /* @__PURE__ */ import_react53.default.createElement(
13280
13608
  "div",
13281
13609
  {
13282
13610
  style: {
@@ -13287,7 +13615,7 @@ function ServerScriptLogsSection({
13287
13615
  gap: "4px"
13288
13616
  }
13289
13617
  },
13290
- /* @__PURE__ */ import_react51.default.createElement("span", null, "No logs received")
13618
+ /* @__PURE__ */ import_react53.default.createElement("span", null, "No logs received")
13291
13619
  ))
13292
13620
  );
13293
13621
  }
@@ -13815,16 +14143,8 @@ function decodeAll(buffer) {
13815
14143
  return { state, schema, assets, assetMap };
13816
14144
  }
13817
14145
 
13818
- // ../noya-multiplayer-react/src/inspector/StateInspectorTitleLabel.tsx
13819
- var import_react52 = __toESM(require("react"));
13820
- function StateInspectorTitleLabel({
13821
- children
13822
- }) {
13823
- return /* @__PURE__ */ import_react52.default.createElement("span", { style: { display: "flex", alignItems: "center", gap: "4px" } }, children);
13824
- }
13825
-
13826
14146
  // ../noya-multiplayer-react/src/inspector/StateInspectorToggleButton.tsx
13827
- var import_react53 = __toESM(require("react"));
14147
+ var import_react54 = __toESM(require("react"));
13828
14148
  function StateInspectorToggleButton({
13829
14149
  showInspector,
13830
14150
  setShowInspector,
@@ -13832,7 +14152,7 @@ function StateInspectorToggleButton({
13832
14152
  anchor
13833
14153
  }) {
13834
14154
  const isRightAnchor = anchor === "right";
13835
- const rightIcon = /* @__PURE__ */ import_react53.default.createElement(
14155
+ const rightIcon = /* @__PURE__ */ import_react54.default.createElement(
13836
14156
  "svg",
13837
14157
  {
13838
14158
  xmlns: "http://www.w3.org/2000/svg",
@@ -13842,7 +14162,7 @@ function StateInspectorToggleButton({
13842
14162
  stroke: "currentColor",
13843
14163
  className: "size-6"
13844
14164
  },
13845
- /* @__PURE__ */ import_react53.default.createElement(
14165
+ /* @__PURE__ */ import_react54.default.createElement(
13846
14166
  "path",
13847
14167
  {
13848
14168
  strokeLinecap: "round",
@@ -13851,7 +14171,7 @@ function StateInspectorToggleButton({
13851
14171
  }
13852
14172
  )
13853
14173
  );
13854
- const leftIcon = /* @__PURE__ */ import_react53.default.createElement(
14174
+ const leftIcon = /* @__PURE__ */ import_react54.default.createElement(
13855
14175
  "svg",
13856
14176
  {
13857
14177
  xmlns: "http://www.w3.org/2000/svg",
@@ -13861,7 +14181,7 @@ function StateInspectorToggleButton({
13861
14181
  stroke: "currentColor",
13862
14182
  className: "size-6"
13863
14183
  },
13864
- /* @__PURE__ */ import_react53.default.createElement(
14184
+ /* @__PURE__ */ import_react54.default.createElement(
13865
14185
  "path",
13866
14186
  {
13867
14187
  strokeLinecap: "round",
@@ -13870,7 +14190,7 @@ function StateInspectorToggleButton({
13870
14190
  }
13871
14191
  )
13872
14192
  );
13873
- return /* @__PURE__ */ import_react53.default.createElement(
14193
+ return /* @__PURE__ */ import_react54.default.createElement(
13874
14194
  "span",
13875
14195
  {
13876
14196
  role: "button",
@@ -13891,15 +14211,15 @@ function StateInspectorToggleButton({
13891
14211
  setShowInspector(!showInspector);
13892
14212
  }
13893
14213
  },
13894
- showInspector ? "Hide Inspector" : /* @__PURE__ */ import_react53.default.createElement("span", { style: { width: "12px", height: "12px" } }, isRightAnchor ? rightIcon : leftIcon)
14214
+ showInspector ? "Hide Inspector" : /* @__PURE__ */ import_react54.default.createElement("span", { style: { width: "12px", height: "12px" } }, isRightAnchor ? rightIcon : leftIcon)
13895
14215
  );
13896
14216
  }
13897
14217
 
13898
14218
  // ../noya-multiplayer-react/src/inspector/useLocalStorageState.tsx
13899
- var import_react54 = __toESM(require("react"));
14219
+ var import_react55 = __toESM(require("react"));
13900
14220
  var localStorage2 = typeof window !== "undefined" ? window.localStorage : null;
13901
14221
  function useLocalStorageState(key, defaultValue) {
13902
- const [state, setState] = import_react54.default.useState(() => {
14222
+ const [state, setState] = import_react55.default.useState(() => {
13903
14223
  const value = localStorage2?.getItem(key);
13904
14224
  let result = defaultValue;
13905
14225
  if (value) {
@@ -13919,11 +14239,11 @@ function useLocalStorageState(key, defaultValue) {
13919
14239
  }
13920
14240
 
13921
14241
  // ../noya-multiplayer-react/src/inspector/usePausedStream.ts
13922
- var import_react55 = __toESM(require("react"));
14242
+ var import_react56 = __toESM(require("react"));
13923
14243
  function usePausedStream(items) {
13924
- const [paused, setPaused] = import_react55.default.useState(false);
13925
- const [visibleItems, setVisibleItems] = import_react55.default.useState(items ?? []);
13926
- const togglePaused = import_react55.default.useCallback(() => {
14244
+ const [paused, setPaused] = import_react56.default.useState(false);
14245
+ const [visibleItems, setVisibleItems] = import_react56.default.useState(items ?? []);
14246
+ const togglePaused = import_react56.default.useCallback(() => {
13927
14247
  setPaused((value) => {
13928
14248
  if (!value) {
13929
14249
  setVisibleItems(items ?? []);
@@ -13931,7 +14251,7 @@ function usePausedStream(items) {
13931
14251
  return !value;
13932
14252
  });
13933
14253
  }, [items]);
13934
- import_react55.default.useEffect(() => {
14254
+ import_react56.default.useEffect(() => {
13935
14255
  if (paused) return;
13936
14256
  setVisibleItems(items ?? []);
13937
14257
  }, [items, paused]);
@@ -13963,19 +14283,20 @@ var StateInspector = memoGeneric(function StateInspector2({
13963
14283
  ioManager,
13964
14284
  resourceManager,
13965
14285
  activityEventsManager,
13966
- logManager
14286
+ logManager,
14287
+ gitManager
13967
14288
  } = noyaManager;
13968
- const [didMount, setDidMount] = import_react56.default.useState(false);
14289
+ const [didMount, setDidMount] = import_react57.default.useState(false);
13969
14290
  const tasks = useObservable2(taskManager.tasks$);
13970
14291
  const inputs = useObservable2(ioManager.inputs$);
13971
14292
  const outputTransforms = useObservable2(ioManager.outputTransforms$);
13972
- (0, import_react56.useLayoutEffect)(() => {
14293
+ (0, import_react57.useLayoutEffect)(() => {
13973
14294
  setDidMount(true);
13974
14295
  }, []);
13975
- const eventsContainerRef = import_react56.default.useRef(null);
13976
- const activityEventsContainerRef = import_react56.default.useRef(null);
13977
- const serverLogsContainerRef = import_react56.default.useRef(null);
13978
- const serverSimulationLogsContainerRef = import_react56.default.useRef(null);
14296
+ const eventsContainerRef = import_react57.default.useRef(null);
14297
+ const activityEventsContainerRef = import_react57.default.useRef(null);
14298
+ const serverLogsContainerRef = import_react57.default.useRef(null);
14299
+ const serverSimulationLogsContainerRef = import_react57.default.useRef(null);
13979
14300
  const [showInspector, setShowInspector] = useLocalStorageState(
13980
14301
  "noya-multiplayer-react-show-inspector",
13981
14302
  true
@@ -14040,6 +14361,10 @@ var StateInspector = memoGeneric(function StateInspector2({
14040
14361
  "noya-multiplayer-react-show-server-simulation-logs",
14041
14362
  false
14042
14363
  );
14364
+ const [showGit, setShowGit] = useLocalStorageState(
14365
+ "noya-multiplayer-react-show-git",
14366
+ false
14367
+ );
14043
14368
  const [showSimulation, setShowSimulation] = useLocalStorageState(
14044
14369
  "noya-multiplayer-react-show-simulation",
14045
14370
  false
@@ -14050,7 +14375,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14050
14375
  paused: connectionEventsPaused,
14051
14376
  togglePaused: toggleConnectionEventsPaused
14052
14377
  } = usePausedStream(connectionEvents);
14053
- (0, import_react56.useEffect)(() => {
14378
+ (0, import_react57.useEffect)(() => {
14054
14379
  if (eventsContainerRef.current) {
14055
14380
  eventsContainerRef.current.scrollTop = eventsContainerRef.current.scrollHeight;
14056
14381
  }
@@ -14069,13 +14394,13 @@ var StateInspector = memoGeneric(function StateInspector2({
14069
14394
  paused: serverSimulationLogsPaused,
14070
14395
  togglePaused: toggleServerSimulationLogsPaused
14071
14396
  } = usePausedStream(serverSimulationLogs);
14072
- (0, import_react56.useEffect)(() => {
14397
+ (0, import_react57.useEffect)(() => {
14073
14398
  if (!showServerLogs) return;
14074
14399
  if (serverLogsContainerRef.current) {
14075
14400
  serverLogsContainerRef.current.scrollTop = serverLogsContainerRef.current.scrollHeight;
14076
14401
  }
14077
14402
  }, [showServerLogs, visibleServerLogs]);
14078
- (0, import_react56.useEffect)(() => {
14403
+ (0, import_react57.useEffect)(() => {
14079
14404
  if (!showServerSimulationLogs) return;
14080
14405
  if (serverSimulationLogsContainerRef.current) {
14081
14406
  serverSimulationLogsContainerRef.current.scrollTop = serverSimulationLogsContainerRef.current.scrollHeight;
@@ -14122,11 +14447,11 @@ var StateInspector = memoGeneric(function StateInspector2({
14122
14447
  zIndex: 9999,
14123
14448
  lineHeight: "13px"
14124
14449
  };
14125
- const handleExportAll = (0, import_react56.useCallback)(async () => {
14450
+ const handleExportAll = (0, import_react57.useCallback)(async () => {
14126
14451
  const buffer = await exportAll(noyaManager);
14127
14452
  downloadBlob(new Blob([buffer]), "state.zip");
14128
14453
  }, [noyaManager]);
14129
- const handleImportAll = (0, import_react56.useCallback)(async () => {
14454
+ const handleImportAll = (0, import_react57.useCallback)(async () => {
14130
14455
  const file = await uploadFile();
14131
14456
  const buffer = await file.arrayBuffer();
14132
14457
  importAll(buffer, noyaManager, {
@@ -14139,7 +14464,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14139
14464
  }, [noyaManager]);
14140
14465
  if (!didMount) return null;
14141
14466
  if (!showInspector) {
14142
- return /* @__PURE__ */ import_react56.default.createElement(
14467
+ return /* @__PURE__ */ import_react57.default.createElement(
14143
14468
  "div",
14144
14469
  {
14145
14470
  ...props,
@@ -14151,7 +14476,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14151
14476
  },
14152
14477
  onClick: () => setShowInspector(true)
14153
14478
  },
14154
- /* @__PURE__ */ import_react56.default.createElement(
14479
+ /* @__PURE__ */ import_react57.default.createElement(
14155
14480
  StateInspectorToggleButton,
14156
14481
  {
14157
14482
  showInspector,
@@ -14162,7 +14487,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14162
14487
  )
14163
14488
  );
14164
14489
  }
14165
- return /* @__PURE__ */ import_react56.default.createElement(
14490
+ return /* @__PURE__ */ import_react57.default.createElement(
14166
14491
  "div",
14167
14492
  {
14168
14493
  ...props,
@@ -14171,7 +14496,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14171
14496
  ...props.style
14172
14497
  }
14173
14498
  },
14174
- /* @__PURE__ */ import_react56.default.createElement(
14499
+ /* @__PURE__ */ import_react57.default.createElement(
14175
14500
  StateInspectorDisclosureSection,
14176
14501
  {
14177
14502
  isFirst: true,
@@ -14184,14 +14509,14 @@ var StateInspector = memoGeneric(function StateInspector2({
14184
14509
  maxHeight: "50%",
14185
14510
  overflowY: "auto"
14186
14511
  },
14187
- right: /* @__PURE__ */ import_react56.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react56.default.createElement(
14512
+ right: /* @__PURE__ */ import_react57.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react57.default.createElement(
14188
14513
  StateInspectorButton,
14189
14514
  {
14190
14515
  theme: theme3,
14191
14516
  onClick: () => setShowUserDetails(!showUserDetails)
14192
14517
  },
14193
14518
  "Toggle details"
14194
- ), /* @__PURE__ */ import_react56.default.createElement(
14519
+ ), /* @__PURE__ */ import_react57.default.createElement(
14195
14520
  StateInspectorToggleButton,
14196
14521
  {
14197
14522
  showInspector,
@@ -14201,8 +14526,8 @@ var StateInspector = memoGeneric(function StateInspector2({
14201
14526
  }
14202
14527
  ))
14203
14528
  },
14204
- /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, { style: { flex: "0 0 auto" } }, connectedUsers?.filter((user) => showUserDetails || !user.inactive).map((user, index, array) => {
14205
- return /* @__PURE__ */ import_react56.default.createElement(
14529
+ /* @__PURE__ */ import_react57.default.createElement(StateInspectorDisclosureRowInner, { style: { flex: "0 0 auto" } }, connectedUsers?.filter((user) => showUserDetails || !user.inactive).map((user, index, array) => {
14530
+ return /* @__PURE__ */ import_react57.default.createElement(
14206
14531
  StateInspectorRow,
14207
14532
  {
14208
14533
  key: user.connectionId,
@@ -14213,7 +14538,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14213
14538
  opacity: user.inactive ? 0.5 : 1
14214
14539
  }
14215
14540
  },
14216
- user.image && /* @__PURE__ */ import_react56.default.createElement(
14541
+ user.image && /* @__PURE__ */ import_react57.default.createElement(
14217
14542
  "img",
14218
14543
  {
14219
14544
  src: user.image,
@@ -14230,9 +14555,9 @@ var StateInspector = memoGeneric(function StateInspector2({
14230
14555
  }
14231
14556
  }
14232
14557
  ),
14233
- showUserDetails ? /* @__PURE__ */ import_react56.default.createElement(themedObjectInspector, { data: user, theme: theme3 }) : user.name
14558
+ showUserDetails ? /* @__PURE__ */ import_react57.default.createElement(themedObjectInspector, { data: user, theme: theme3 }) : user.name
14234
14559
  );
14235
- }), !connectedUsers && /* @__PURE__ */ import_react56.default.createElement(
14560
+ }), !connectedUsers && /* @__PURE__ */ import_react57.default.createElement(
14236
14561
  "div",
14237
14562
  {
14238
14563
  style: {
@@ -14243,13 +14568,13 @@ var StateInspector = memoGeneric(function StateInspector2({
14243
14568
  gap: "4px"
14244
14569
  }
14245
14570
  },
14246
- /* @__PURE__ */ import_react56.default.createElement("span", null, "No connected users")
14571
+ /* @__PURE__ */ import_react57.default.createElement("span", null, "No connected users")
14247
14572
  ))
14248
14573
  ),
14249
- /* @__PURE__ */ import_react56.default.createElement(
14574
+ /* @__PURE__ */ import_react57.default.createElement(
14250
14575
  StateInspectorDisclosureSection,
14251
14576
  {
14252
- title: /* @__PURE__ */ import_react56.default.createElement(StateInspectorTitleLabel, null, "Data", /* @__PURE__ */ import_react56.default.createElement(
14577
+ title: /* @__PURE__ */ import_react57.default.createElement(StateInspectorTitleLabel, null, "Data", /* @__PURE__ */ import_react57.default.createElement(
14253
14578
  ColoredDot,
14254
14579
  {
14255
14580
  type: multipeerStateInitialized ? "success" : "error"
@@ -14258,7 +14583,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14258
14583
  colorScheme,
14259
14584
  setOpen: setShowData,
14260
14585
  open: showData,
14261
- right: /* @__PURE__ */ import_react56.default.createElement(
14586
+ right: /* @__PURE__ */ import_react57.default.createElement(
14262
14587
  "span",
14263
14588
  {
14264
14589
  style: {
@@ -14266,9 +14591,9 @@ var StateInspector = memoGeneric(function StateInspector2({
14266
14591
  gap: "12px"
14267
14592
  }
14268
14593
  },
14269
- /* @__PURE__ */ import_react56.default.createElement(StateInspectorButton, { theme: theme3, onClick: handleImportAll }, "Import"),
14270
- /* @__PURE__ */ import_react56.default.createElement(StateInspectorButton, { theme: theme3, onClick: handleExportAll }, "Export"),
14271
- /* @__PURE__ */ import_react56.default.createElement(
14594
+ /* @__PURE__ */ import_react57.default.createElement(StateInspectorButton, { theme: theme3, onClick: handleImportAll }, "Import"),
14595
+ /* @__PURE__ */ import_react57.default.createElement(StateInspectorButton, { theme: theme3, onClick: handleExportAll }, "Export"),
14596
+ /* @__PURE__ */ import_react57.default.createElement(
14272
14597
  StateInspectorButton,
14273
14598
  {
14274
14599
  theme: theme3,
@@ -14280,14 +14605,14 @@ var StateInspector = memoGeneric(function StateInspector2({
14280
14605
  )
14281
14606
  )
14282
14607
  },
14283
- /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react56.default.createElement(
14608
+ /* @__PURE__ */ import_react57.default.createElement(StateInspectorDisclosureRowInner, null, /* @__PURE__ */ import_react57.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react57.default.createElement(
14284
14609
  themedObjectInspector,
14285
14610
  {
14286
14611
  name: multiplayerStateManager.schema ? "state" : void 0,
14287
14612
  data: state,
14288
14613
  theme: theme3
14289
14614
  }
14290
- )), multiplayerStateManager.schema && /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react56.default.createElement(
14615
+ )), multiplayerStateManager.schema && /* @__PURE__ */ import_react57.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react57.default.createElement(
14291
14616
  themedObjectInspector,
14292
14617
  {
14293
14618
  name: "schema",
@@ -14296,7 +14621,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14296
14621
  }
14297
14622
  )))
14298
14623
  ),
14299
- /* @__PURE__ */ import_react56.default.createElement(
14624
+ /* @__PURE__ */ import_react57.default.createElement(
14300
14625
  HistorySection,
14301
14626
  {
14302
14627
  showHistory,
@@ -14306,14 +14631,14 @@ var StateInspector = memoGeneric(function StateInspector2({
14306
14631
  multiplayerStateManager
14307
14632
  }
14308
14633
  ),
14309
- /* @__PURE__ */ import_react56.default.createElement(
14634
+ /* @__PURE__ */ import_react57.default.createElement(
14310
14635
  StateInspectorDisclosureSection,
14311
14636
  {
14312
14637
  open: showAssets,
14313
14638
  setOpen: setShowAssets,
14314
- title: /* @__PURE__ */ import_react56.default.createElement(StateInspectorTitleLabel, null, "Assets (", assets.length, ")", /* @__PURE__ */ import_react56.default.createElement(ColoredDot, { type: assetsInitialized ? "success" : "error" })),
14639
+ title: /* @__PURE__ */ import_react57.default.createElement(StateInspectorTitleLabel, null, "Assets (", assets.length, ")", /* @__PURE__ */ import_react57.default.createElement(ColoredDot, { type: assetsInitialized ? "success" : "error" })),
14315
14640
  colorScheme,
14316
- right: /* @__PURE__ */ import_react56.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react56.default.createElement(
14641
+ right: /* @__PURE__ */ import_react57.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react57.default.createElement(
14317
14642
  StateInspectorButton,
14318
14643
  {
14319
14644
  theme: theme3,
@@ -14328,7 +14653,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14328
14653
  }
14329
14654
  },
14330
14655
  "Delete all"
14331
- ), /* @__PURE__ */ import_react56.default.createElement(
14656
+ ), /* @__PURE__ */ import_react57.default.createElement(
14332
14657
  StateInspectorButton,
14333
14658
  {
14334
14659
  theme: theme3,
@@ -14341,54 +14666,69 @@ var StateInspector = memoGeneric(function StateInspector2({
14341
14666
  }
14342
14667
  },
14343
14668
  "Reload"
14344
- ), /* @__PURE__ */ import_react56.default.createElement(
14669
+ ), /* @__PURE__ */ import_react57.default.createElement(
14345
14670
  StateInspectorButton,
14346
14671
  {
14347
14672
  theme: theme3,
14348
- onClick: () => {
14349
- const input = document.createElement("input");
14350
- input.type = "file";
14351
- input.onchange = () => {
14352
- const file = input.files?.[0];
14353
- if (file) {
14354
- const reader = new FileReader();
14355
- reader.onload = () => {
14356
- const buffer = reader.result;
14357
- assetManager.create(new Uint8Array(buffer));
14358
- };
14359
- reader.readAsArrayBuffer(file);
14360
- }
14361
- };
14362
- input.click();
14673
+ onClick: async () => {
14674
+ const file = await uploadFile();
14675
+ assetManager.create(file);
14363
14676
  }
14364
14677
  },
14365
14678
  "Upload"
14679
+ ), /* @__PURE__ */ import_react57.default.createElement(
14680
+ StateInspectorButton,
14681
+ {
14682
+ theme: theme3,
14683
+ onClick: async () => {
14684
+ const file = await uploadFile();
14685
+ assetManager.create({
14686
+ data: new Uint8Array(await file.arrayBuffer()),
14687
+ contentType: file.type,
14688
+ mode: "mutable"
14689
+ });
14690
+ }
14691
+ },
14692
+ "Upload Mutable"
14366
14693
  ))
14367
14694
  },
14368
- /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, assets.map((asset) => /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { key: asset.id, colorScheme }, /* @__PURE__ */ import_react56.default.createElement(
14695
+ /* @__PURE__ */ import_react57.default.createElement(StateInspectorDisclosureRowInner, null, assets.map((asset) => /* @__PURE__ */ import_react57.default.createElement(StateInspectorRow, { key: asset.id, colorScheme }, /* @__PURE__ */ import_react57.default.createElement(
14369
14696
  themedObjectInspector,
14370
14697
  {
14371
14698
  name: asset.id,
14372
14699
  data: truncateAsset(asset),
14373
14700
  theme: theme3
14374
14701
  }
14375
- ), /* @__PURE__ */ import_react56.default.createElement(
14702
+ ), /* @__PURE__ */ import_react57.default.createElement("div", { style: { display: "flex", gap: "4px" } }, asset.mode === "mutable" && /* @__PURE__ */ import_react57.default.createElement(
14703
+ StateInspectorButton,
14704
+ {
14705
+ theme: theme3,
14706
+ onClick: async () => {
14707
+ const file = await uploadFile();
14708
+ assetManager.update(asset.id, {
14709
+ data: new Uint8Array(await file.arrayBuffer()),
14710
+ contentType: file.type
14711
+ });
14712
+ }
14713
+ },
14714
+ "Replace"
14715
+ ), /* @__PURE__ */ import_react57.default.createElement(
14376
14716
  StateInspectorButton,
14377
14717
  {
14378
14718
  theme: theme3,
14379
14719
  onClick: () => assetManager.delete(asset.id)
14380
14720
  },
14381
14721
  "Delete"
14382
- ))))
14722
+ )))))
14383
14723
  ),
14384
- advanced && /* @__PURE__ */ import_react56.default.createElement(
14724
+ advanced && /* @__PURE__ */ import_react57.default.createElement(
14385
14725
  StateInspectorDisclosureSection,
14386
14726
  {
14387
- title: /* @__PURE__ */ import_react56.default.createElement(StateInspectorTitleLabel, null, "Resources (", resources.length, ")", /* @__PURE__ */ import_react56.default.createElement(ColoredDot, { type: resourcesInitialized ? "success" : "error" })),
14727
+ title: /* @__PURE__ */ import_react57.default.createElement(StateInspectorTitleLabel, null, "Resources (", resources.length, ")", /* @__PURE__ */ import_react57.default.createElement(ColoredDot, { type: resourcesInitialized ? "success" : "error" })),
14388
14728
  colorScheme,
14389
14729
  open: showResources,
14390
14730
  setOpen: setShowResources,
14391
- right: /* @__PURE__ */ import_react56.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react56.default.createElement(
14731
+ right: /* @__PURE__ */ import_react57.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react57.default.createElement(
14392
14732
  StateInspectorButton,
14393
14733
  {
14394
14734
  theme: theme3,
@@ -14403,12 +14743,12 @@ var StateInspector = memoGeneric(function StateInspector2({
14403
14743
  }
14404
14744
  },
14405
14745
  "Delete all"
14406
- ), /* @__PURE__ */ import_react56.default.createElement(
14746
+ ), /* @__PURE__ */ import_react57.default.createElement(
14407
14747
  StateInspectorButton,
14408
14748
  {
14409
14749
  theme: theme3,
14410
14750
  onClick: async () => {
14411
- const path2 = prompt("Enter directory path") || (0, import_noya_utils24.uuid)();
14751
+ const path2 = prompt("Enter directory path") || (0, import_noya_utils23.uuid)();
14412
14752
  await resourceManager.createResource({
14413
14753
  type: "directory",
14414
14754
  path: path2
@@ -14416,7 +14756,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14416
14756
  }
14417
14757
  },
14418
14758
  "Create Directory"
14419
- ), /* @__PURE__ */ import_react56.default.createElement(
14759
+ ), /* @__PURE__ */ import_react57.default.createElement(
14420
14760
  StateInspectorButton,
14421
14761
  {
14422
14762
  theme: theme3,
@@ -14424,9 +14764,9 @@ var StateInspector = memoGeneric(function StateInspector2({
14424
14764
  const file = await uploadFile();
14425
14765
  resourceManager.createResource({
14426
14766
  type: "asset",
14427
- path: file.name || (0, import_noya_utils24.uuid)(),
14767
+ path: file.name || (0, import_noya_utils23.uuid)(),
14428
14768
  asset: {
14429
- content: import_noya_utils24.Base64.encode(await file.arrayBuffer()),
14769
+ content: import_noya_utils23.Base64.encode(await file.arrayBuffer()),
14430
14770
  contentType: file.type,
14431
14771
  encoding: "base64"
14432
14772
  }
@@ -14436,21 +14776,21 @@ var StateInspector = memoGeneric(function StateInspector2({
14436
14776
  "Create Asset"
14437
14777
  ))
14438
14778
  },
14439
- /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, resources?.map((resource) => /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { key: resource.id, colorScheme }, /* @__PURE__ */ import_react56.default.createElement(
14779
+ /* @__PURE__ */ import_react57.default.createElement(StateInspectorDisclosureRowInner, null, resources?.map((resource) => /* @__PURE__ */ import_react57.default.createElement(StateInspectorRow, { key: resource.id, colorScheme }, /* @__PURE__ */ import_react57.default.createElement(
14440
14780
  themedObjectInspector,
14441
14781
  {
14442
14782
  name: resource.path,
14443
14783
  data: resource,
14444
14784
  theme: theme3
14445
14785
  }
14446
- ), /* @__PURE__ */ import_react56.default.createElement("div", { style: { display: "flex", gap: "4px" } }, /* @__PURE__ */ import_react56.default.createElement(
14786
+ ), /* @__PURE__ */ import_react57.default.createElement("div", { style: { display: "flex", gap: "4px" } }, /* @__PURE__ */ import_react57.default.createElement(
14447
14787
  StateInspectorButton,
14448
14788
  {
14449
14789
  theme: theme3,
14450
14790
  onClick: () => resourceManager.deleteResource({ id: resource.id })
14451
14791
  },
14452
14792
  "Delete"
14453
- ), /* @__PURE__ */ import_react56.default.createElement(
14793
+ ), /* @__PURE__ */ import_react57.default.createElement(
14454
14794
  StateInspectorButton,
14455
14795
  {
14456
14796
  theme: theme3,
@@ -14463,14 +14803,23 @@ var StateInspector = memoGeneric(function StateInspector2({
14463
14803
  "Rename"
14464
14804
  )))))
14465
14805
  ),
14466
- advanced && /* @__PURE__ */ import_react56.default.createElement(
14806
+ advanced && /* @__PURE__ */ import_react57.default.createElement(
14467
14807
  StateInspectorDisclosureSection,
14468
14808
  {
14469
- title: /* @__PURE__ */ import_react56.default.createElement(StateInspectorTitleLabel, null, "Secrets", /* @__PURE__ */ import_react56.default.createElement(ColoredDot, { type: secretsInitialized ? "success" : "error" })),
14809
+ title: /* @__PURE__ */ import_react57.default.createElement(StateInspectorTitleLabel, null, "Secrets (", secrets.length, ")", /* @__PURE__ */ import_react57.default.createElement(ColoredDot, { type: secretsInitialized ? "success" : "error" })),
14470
14810
  colorScheme,
14471
14811
  open: showSecrets,
14472
14812
  setOpen: setShowSecrets,
14473
- right: /* @__PURE__ */ import_react56.default.createElement(
14813
+ right: /* @__PURE__ */ import_react57.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react57.default.createElement(
14814
+ StateInspectorButton,
14815
+ {
14816
+ theme: theme3,
14817
+ onClick: () => {
14818
+ void secretManager.fetchSecrets();
14819
+ }
14820
+ },
14821
+ "Refresh"
14822
+ ), /* @__PURE__ */ import_react57.default.createElement(
14474
14823
  StateInspectorButton,
14475
14824
  {
14476
14825
  theme: theme3,
@@ -14483,9 +14832,9 @@ var StateInspector = memoGeneric(function StateInspector2({
14483
14832
  }
14484
14833
  },
14485
14834
  "Create"
14486
- )
14835
+ ))
14487
14836
  },
14488
- /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, secrets.map((secret) => /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { key: secret.id, colorScheme }, /* @__PURE__ */ import_react56.default.createElement(themedObjectInspector, { data: secret, theme: theme3 }), /* @__PURE__ */ import_react56.default.createElement(
14837
+ /* @__PURE__ */ import_react57.default.createElement(StateInspectorDisclosureRowInner, null, secrets.map((secret) => /* @__PURE__ */ import_react57.default.createElement(StateInspectorRow, { key: secret.id, colorScheme }, /* @__PURE__ */ import_react57.default.createElement(themedObjectInspector, { data: secret, theme: theme3 }), /* @__PURE__ */ import_react57.default.createElement(
14489
14838
  StateInspectorButton,
14490
14839
  {
14491
14840
  theme: theme3,
@@ -14494,15 +14843,24 @@ var StateInspector = memoGeneric(function StateInspector2({
14494
14843
  "Delete"
14495
14844
  ))))
14496
14845
  ),
14497
- advanced && /* @__PURE__ */ import_react56.default.createElement(
14846
+ advanced && /* @__PURE__ */ import_react57.default.createElement(
14847
+ GitSection,
14848
+ {
14849
+ showGit,
14850
+ setShowGit,
14851
+ colorScheme,
14852
+ gitManager
14853
+ }
14854
+ ),
14855
+ advanced && /* @__PURE__ */ import_react57.default.createElement(
14498
14856
  StateInspectorDisclosureSection,
14499
14857
  {
14500
14858
  open: showInputs,
14501
14859
  setOpen: setShowInputs,
14502
- title: /* @__PURE__ */ import_react56.default.createElement(StateInspectorTitleLabel, null, "Inputs", /* @__PURE__ */ import_react56.default.createElement(ColoredDot, { type: inputsInitialized ? "success" : "error" })),
14860
+ title: /* @__PURE__ */ import_react57.default.createElement(StateInspectorTitleLabel, null, "Inputs (", inputs.length, ")", /* @__PURE__ */ import_react57.default.createElement(ColoredDot, { type: inputsInitialized ? "success" : "error" })),
14503
14861
  colorScheme
14504
14862
  },
14505
- /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, inputs?.map((input) => /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { key: input.id, colorScheme }, /* @__PURE__ */ import_react56.default.createElement(themedObjectInspector, { data: input, theme: theme3 }))), !inputs?.length && /* @__PURE__ */ import_react56.default.createElement(
14863
+ /* @__PURE__ */ import_react57.default.createElement(StateInspectorDisclosureRowInner, null, inputs?.map((input) => /* @__PURE__ */ import_react57.default.createElement(StateInspectorRow, { key: input.id, colorScheme }, /* @__PURE__ */ import_react57.default.createElement(themedObjectInspector, { data: input, theme: theme3 }))), !inputs?.length && /* @__PURE__ */ import_react57.default.createElement(
14506
14864
  "div",
14507
14865
  {
14508
14866
  style: {
@@ -14513,15 +14871,15 @@ var StateInspector = memoGeneric(function StateInspector2({
14513
14871
  gap: "4px"
14514
14872
  }
14515
14873
  },
14516
- /* @__PURE__ */ import_react56.default.createElement("span", null, "No inputs")
14874
+ /* @__PURE__ */ import_react57.default.createElement("span", null, "No inputs")
14517
14875
  ))
14518
14876
  ),
14519
- advanced && /* @__PURE__ */ import_react56.default.createElement(
14877
+ advanced && /* @__PURE__ */ import_react57.default.createElement(
14520
14878
  StateInspectorDisclosureSection,
14521
14879
  {
14522
14880
  open: showOutputTransforms,
14523
14881
  setOpen: setShowOutputTransforms,
14524
- title: /* @__PURE__ */ import_react56.default.createElement(StateInspectorTitleLabel, null, "Output Transforms", /* @__PURE__ */ import_react56.default.createElement(
14882
+ title: /* @__PURE__ */ import_react57.default.createElement(StateInspectorTitleLabel, null, "Output Transforms (", outputTransforms.length, ")", /* @__PURE__ */ import_react57.default.createElement(
14525
14883
  ColoredDot,
14526
14884
  {
14527
14885
  type: outputTransformsInitialized ? "success" : "error"
@@ -14529,7 +14887,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14529
14887
  )),
14530
14888
  colorScheme
14531
14889
  },
14532
- /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, outputTransforms?.map((transform) => /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { key: transform.id, colorScheme }, /* @__PURE__ */ import_react56.default.createElement(themedObjectInspector, { data: transform, theme: theme3 }))), !outputTransforms?.length && /* @__PURE__ */ import_react56.default.createElement(
14890
+ /* @__PURE__ */ import_react57.default.createElement(StateInspectorDisclosureRowInner, null, outputTransforms?.map((transform) => /* @__PURE__ */ import_react57.default.createElement(StateInspectorRow, { key: transform.id, colorScheme }, /* @__PURE__ */ import_react57.default.createElement(themedObjectInspector, { data: transform, theme: theme3 }))), !outputTransforms?.length && /* @__PURE__ */ import_react57.default.createElement(
14533
14891
  "div",
14534
14892
  {
14535
14893
  style: {
@@ -14540,10 +14898,10 @@ var StateInspector = memoGeneric(function StateInspector2({
14540
14898
  gap: "4px"
14541
14899
  }
14542
14900
  },
14543
- /* @__PURE__ */ import_react56.default.createElement("span", null, "No output transforms")
14901
+ /* @__PURE__ */ import_react57.default.createElement("span", null, "No output transforms")
14544
14902
  ))
14545
14903
  ),
14546
- advanced && /* @__PURE__ */ import_react56.default.createElement(
14904
+ advanced && /* @__PURE__ */ import_react57.default.createElement(
14547
14905
  StateInspectorDisclosureSection,
14548
14906
  {
14549
14907
  title: "Tasks",
@@ -14551,7 +14909,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14551
14909
  open: showTasks,
14552
14910
  setOpen: setShowTasks
14553
14911
  },
14554
- /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, tasks?.map((task) => /* @__PURE__ */ import_react56.default.createElement(
14912
+ /* @__PURE__ */ import_react57.default.createElement(StateInspectorDisclosureRowInner, null, tasks?.map((task) => /* @__PURE__ */ import_react57.default.createElement(
14555
14913
  StateInspectorRow,
14556
14914
  {
14557
14915
  key: task.id,
@@ -14560,7 +14918,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14560
14918
  backgroundColor: task.status === "done" ? "rgba(0,255,0,0.2)" : task.status === "error" ? "rgba(255,0,0,0.2)" : void 0
14561
14919
  }
14562
14920
  },
14563
- /* @__PURE__ */ import_react56.default.createElement(
14921
+ /* @__PURE__ */ import_react57.default.createElement(
14564
14922
  themedObjectInspector,
14565
14923
  {
14566
14924
  name: task.name,
@@ -14570,7 +14928,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14570
14928
  )
14571
14929
  )))
14572
14930
  ),
14573
- /* @__PURE__ */ import_react56.default.createElement(
14931
+ /* @__PURE__ */ import_react57.default.createElement(
14574
14932
  StateInspectorDisclosureSection,
14575
14933
  {
14576
14934
  open: showShared,
@@ -14578,7 +14936,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14578
14936
  title: "Shared Connection Data",
14579
14937
  colorScheme
14580
14938
  },
14581
- /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, Object.entries(shared).map(([key, value]) => /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { key, colorScheme }, /* @__PURE__ */ import_react56.default.createElement(
14939
+ /* @__PURE__ */ import_react57.default.createElement(StateInspectorDisclosureRowInner, null, Object.entries(shared).map(([key, value]) => /* @__PURE__ */ import_react57.default.createElement(StateInspectorRow, { key, colorScheme }, /* @__PURE__ */ import_react57.default.createElement(
14582
14940
  themedObjectInspector,
14583
14941
  {
14584
14942
  name: key,
@@ -14588,7 +14946,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14588
14946
  }
14589
14947
  ))))
14590
14948
  ),
14591
- /* @__PURE__ */ import_react56.default.createElement(
14949
+ /* @__PURE__ */ import_react57.default.createElement(
14592
14950
  ServerScriptLogsSection,
14593
14951
  {
14594
14952
  colorScheme,
@@ -14600,7 +14958,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14600
14958
  containerRef: serverLogsContainerRef
14601
14959
  }
14602
14960
  ),
14603
- showSimulationLogsSection && /* @__PURE__ */ import_react56.default.createElement(
14961
+ showSimulationLogsSection && /* @__PURE__ */ import_react57.default.createElement(
14604
14962
  ServerScriptLogsSection,
14605
14963
  {
14606
14964
  title: "Server Script Simulation Logs",
@@ -14613,7 +14971,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14613
14971
  containerRef: serverSimulationLogsContainerRef
14614
14972
  }
14615
14973
  ),
14616
- /* @__PURE__ */ import_react56.default.createElement(
14974
+ /* @__PURE__ */ import_react57.default.createElement(
14617
14975
  StateInspectorDisclosureSection,
14618
14976
  {
14619
14977
  open: showSimulation,
@@ -14621,7 +14979,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14621
14979
  title: "Server Simulation",
14622
14980
  colorScheme
14623
14981
  },
14624
- /* @__PURE__ */ import_react56.default.createElement(StateInspectorDisclosureRowInner, null, /* @__PURE__ */ import_react56.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react56.default.createElement(
14982
+ /* @__PURE__ */ import_react57.default.createElement(StateInspectorDisclosureRowInner, null, /* @__PURE__ */ import_react57.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react57.default.createElement(
14625
14983
  themedObjectInspector,
14626
14984
  {
14627
14985
  name: "status",
@@ -14637,7 +14995,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14637
14995
  }
14638
14996
  )))
14639
14997
  ),
14640
- advanced && /* @__PURE__ */ import_react56.default.createElement(
14998
+ advanced && /* @__PURE__ */ import_react57.default.createElement(
14641
14999
  ActivityEventsSection,
14642
15000
  {
14643
15001
  colorScheme,
@@ -14647,7 +15005,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14647
15005
  activityEventsManager
14648
15006
  }
14649
15007
  ),
14650
- /* @__PURE__ */ import_react56.default.createElement(
15008
+ /* @__PURE__ */ import_react57.default.createElement(
14651
15009
  EventsSection,
14652
15010
  {
14653
15011
  connectionEvents: visibleConnectionEvents,
@@ -14661,7 +15019,7 @@ var StateInspector = memoGeneric(function StateInspector2({
14661
15019
  )
14662
15020
  );
14663
15021
  });
14664
- var truncateAsset = (0, import_noya_utils24.memoize)((asset) => {
15022
+ var truncateAsset = (0, import_noya_utils23.memoize)((asset) => {
14665
15023
  if (asset.url.startsWith("data:") || asset.url.startsWith("blob:")) {
14666
15024
  return { ...asset, url: ellipsis(asset.url, 40) };
14667
15025
  }
@@ -14670,7 +15028,7 @@ var truncateAsset = (0, import_noya_utils24.memoize)((asset) => {
14670
15028
 
14671
15029
  // ../noya-multiplayer-react/src/hooks.ts
14672
15030
  function useManagedHistory(stateManager) {
14673
- return (0, import_react58.useSyncExternalStore)(
15031
+ return (0, import_react59.useSyncExternalStore)(
14674
15032
  stateManager.historyEmittor.addListener,
14675
15033
  stateManager.getHistorySnapshot,
14676
15034
  stateManager.getHistorySnapshot
@@ -14678,15 +15036,15 @@ function useManagedHistory(stateManager) {
14678
15036
  }
14679
15037
 
14680
15038
  // ../noya-multiplayer-react/src/singleton.tsx
14681
- var import_react60 = __toESM(require("react"));
15039
+ var import_react61 = __toESM(require("react"));
14682
15040
 
14683
15041
  // ../noya-multiplayer-react/src/NoyaStateContext.tsx
14684
- var AnyNoyaStateContext = (0, import_react61.createContext)(void 0);
15042
+ var AnyNoyaStateContext = (0, import_react62.createContext)(void 0);
14685
15043
  var emptyArray = [];
14686
15044
  function useActivityEventsForManager(streamFilter, activityEventsManager) {
14687
- const [streamId, setStreamId] = (0, import_react61.useState)(void 0);
15045
+ const [streamId, setStreamId] = (0, import_react62.useState)(void 0);
14688
15046
  const stableStreamFilter = useJsonMemo(streamFilter);
14689
- (0, import_react61.useEffect)(() => {
15047
+ (0, import_react62.useEffect)(() => {
14690
15048
  if (!stableStreamFilter) return;
14691
15049
  const streamId2 = activityEventsManager.subscribe(stableStreamFilter);
14692
15050
  setStreamId(streamId2);
@@ -14700,8 +15058,8 @@ function useActivityEventsForManager(streamFilter, activityEventsManager) {
14700
15058
  }
14701
15059
 
14702
15060
  // ../noya-multiplayer-react/src/components/UserPointersOverlay.tsx
14703
- var import_observable24 = require("@noya-app/observable");
14704
- var import_react63 = __toESM(require("react"));
15061
+ var import_observable25 = require("@noya-app/observable");
15062
+ var import_react64 = __toESM(require("react"));
14705
15063
  function shouldShow(hideAfter, updatedAt) {
14706
15064
  return !!updatedAt && Date.now() - updatedAt < hideAfter;
14707
15065
  }
@@ -14711,18 +15069,18 @@ var UserPointerInternal = memoGeneric(function UserPointerInternal2({
14711
15069
  hideAfter = 5e3,
14712
15070
  renderUserPointer
14713
15071
  }) {
14714
- const observable = (0, import_react63.useMemo)(() => {
15072
+ const observable = (0, import_react64.useMemo)(() => {
14715
15073
  const metadata$ = sharedConnectionDataManager.metadata$.observePath([user.connectionId]).throttle(50);
14716
15074
  const data$ = sharedConnectionDataManager.data$.observePath([user.connectionId]).throttle(50);
14717
- return import_observable24.Observable.combine([metadata$, data$], ([metadata2, data2]) => {
15075
+ return import_observable25.Observable.combine([metadata$, data$], ([metadata2, data2]) => {
14718
15076
  return { metadata: metadata2, data: data2 };
14719
15077
  });
14720
15078
  }, [sharedConnectionDataManager, user.connectionId]);
14721
15079
  const { metadata, data } = useObservable2(observable);
14722
- const [, setForceUpdate] = (0, import_react63.useState)(0);
15080
+ const [, setForceUpdate] = (0, import_react64.useState)(0);
14723
15081
  const updatedAt = metadata?.updatedAt ?? 0;
14724
15082
  const show = shouldShow(hideAfter, updatedAt);
14725
- (0, import_react63.useEffect)(() => {
15083
+ (0, import_react64.useEffect)(() => {
14726
15084
  if (!show) return;
14727
15085
  const timeoutId = setTimeout(() => {
14728
15086
  setForceUpdate((prev) => prev + 1);
@@ -14746,9 +15104,9 @@ var UserPointersOverlay = memoGeneric(function UserPointers({
14746
15104
  sharedConnectionDataManager.currentConnectionId$
14747
15105
  );
14748
15106
  const connectedUsers = useObservable2(userManager.connectedUsers$);
14749
- return /* @__PURE__ */ import_react63.default.createElement(import_react63.default.Fragment, null, connectedUsers.map((user) => {
15107
+ return /* @__PURE__ */ import_react64.default.createElement(import_react64.default.Fragment, null, connectedUsers.map((user) => {
14750
15108
  if (user.connectionId === currentConnectionId) return null;
14751
- return /* @__PURE__ */ import_react63.default.createElement(
15109
+ return /* @__PURE__ */ import_react64.default.createElement(
14752
15110
  UserPointerInternal,
14753
15111
  {
14754
15112
  key: user.connectionId,
@@ -14762,15 +15120,15 @@ var UserPointersOverlay = memoGeneric(function UserPointers({
14762
15120
 
14763
15121
  // src/react/tableHooks.ts
14764
15122
  var import_observable_store = require("@noya-app/observable-store");
14765
- var import_react64 = require("react");
15123
+ var import_react65 = require("react");
14766
15124
  function useTable(table, {
14767
15125
  where,
14768
15126
  select
14769
15127
  }, options = {}) {
14770
- const stableSelect = (0, import_react64.useMemo)(() => {
15128
+ const stableSelect = (0, import_react65.useMemo)(() => {
14771
15129
  return JSON.stringify(select);
14772
15130
  }, [select]);
14773
- const stableWhere = (0, import_react64.useMemo)(() => {
15131
+ const stableWhere = (0, import_react65.useMemo)(() => {
14774
15132
  let cloneWithNoUndefined = {};
14775
15133
  for (const [key, value] of Object.entries(where ?? {})) {
14776
15134
  if (value !== void 0) {
@@ -14779,7 +15137,7 @@ function useTable(table, {
14779
15137
  }
14780
15138
  return JSON.stringify(cloneWithNoUndefined);
14781
15139
  }, [where]);
14782
- const observable = (0, import_react64.useMemo)(() => {
15140
+ const observable = (0, import_react65.useMemo)(() => {
14783
15141
  const parsedSelect = JSON.parse(stableSelect);
14784
15142
  const parsedWhere = JSON.parse(stableWhere);
14785
15143
  if (!table) {
@@ -14806,18 +15164,18 @@ function useTable(table, {
14806
15164
  }
14807
15165
  );
14808
15166
  }, [stableSelect, stableWhere, table, options.policy, options.debug]);
14809
- (0, import_react64.useEffect)(() => {
15167
+ (0, import_react65.useEffect)(() => {
14810
15168
  observable.start?.();
14811
15169
  }, [observable]);
14812
15170
  const { status, data } = useObservable2(observable);
14813
- const optimisticUpdate = (0, import_react64.useCallback)(
15171
+ const optimisticUpdate = (0, import_react65.useCallback)(
14814
15172
  (entity, config) => {
14815
15173
  if (!table) return;
14816
15174
  table.optimisticUpdate(entity, config);
14817
15175
  },
14818
15176
  [table]
14819
15177
  );
14820
- return (0, import_react64.useMemo)(() => {
15178
+ return (0, import_react65.useMemo)(() => {
14821
15179
  return {
14822
15180
  status,
14823
15181
  data,
@@ -14847,7 +15205,7 @@ function useFileListItem(id, select, options = {}) {
14847
15205
  { where: { id: id ?? null }, select },
14848
15206
  options
14849
15207
  );
14850
- return (0, import_react64.useMemo)(() => {
15208
+ return (0, import_react65.useMemo)(() => {
14851
15209
  return {
14852
15210
  data: data.at(0),
14853
15211
  status,
@@ -14877,7 +15235,7 @@ function useUser(id, select, options = {}) {
14877
15235
  { select, where: { id: id ?? null } },
14878
15236
  options
14879
15237
  );
14880
- return (0, import_react64.useMemo)(() => {
15238
+ return (0, import_react65.useMemo)(() => {
14881
15239
  return {
14882
15240
  status,
14883
15241
  data: data.at(0),
@@ -14906,11 +15264,6 @@ function useActivityEventsList(fileId, select, options = {}) {
14906
15264
  useActivityEventsList,
14907
15265
  useFileList,
14908
15266
  useFileListItem,
14909
- useGeneratedComponentDescription,
14910
- useGeneratedComponentDescriptions,
14911
- useGeneratedComponentNames,
14912
- useGeneratedPageComponentNames,
14913
- useGeneratedPageNames,
14914
15267
  useIsBeta,
14915
15268
  useMetadata,
14916
15269
  useNetworkRequests,
@@ -14942,8 +15295,6 @@ function useActivityEventsList(fileId, select, options = {}) {
14942
15295
  useOptionalNoyaTags,
14943
15296
  useOptionalNoyaTools,
14944
15297
  useOptionalNoyaUserData,
14945
- useRandomIcons,
14946
- useRandomImages,
14947
15298
  useResourcesList,
14948
15299
  useTable,
14949
15300
  useUser,