@liveblocks/react 3.8.0-tiptap1 → 3.8.1

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.
@@ -39,23 +39,28 @@ function useRandom() {
39
39
  var RegisterAiKnowledge = _react.memo.call(void 0, function RegisterAiKnowledge2(props) {
40
40
  const layerId = _react.useId.call(void 0, );
41
41
  const ai = useAi();
42
- const { description, value } = props;
42
+ const { description, value, chatId } = props;
43
43
  const [layerKey, setLayerKey] = _react.useState.call(void 0, );
44
44
  _react.useEffect.call(void 0, () => {
45
- const layerKey2 = ai.registerKnowledgeLayer(layerId);
45
+ const { layerKey: layerKey2, deregister } = ai.registerKnowledgeLayer(layerId, chatId);
46
46
  setLayerKey(layerKey2);
47
47
  return () => {
48
- ai.deregisterKnowledgeLayer(layerKey2);
48
+ deregister();
49
49
  setLayerKey(void 0);
50
50
  };
51
- }, [ai, layerId]);
51
+ }, [ai, layerId, chatId]);
52
52
  const randomKey = useRandom();
53
53
  const knowledgeKey = _nullishCoalesce(props.id, () => ( randomKey));
54
54
  _react.useEffect.call(void 0, () => {
55
55
  if (layerKey !== void 0) {
56
- ai.updateKnowledge(layerKey, { description, value }, knowledgeKey);
56
+ ai.updateKnowledge(
57
+ layerKey,
58
+ { description, value },
59
+ knowledgeKey,
60
+ chatId
61
+ );
57
62
  }
58
- }, [ai, layerKey, knowledgeKey, description, value]);
63
+ }, [ai, layerKey, knowledgeKey, description, value, chatId]);
59
64
  return null;
60
65
  });
61
66
  var RegisterAiTool = _react.memo.call(void 0, function RegisterAiTool2({
@@ -186,6 +191,7 @@ function useSignal(signal, selector, isEqual) {
186
191
 
187
192
 
188
193
 
194
+
189
195
  // src/config.ts
190
196
  var SECONDS = 1e3;
191
197
  var MINUTES = 60 * SECONDS;
@@ -216,21 +222,6 @@ function ASYNC_OK(fieldOrData, data) {
216
222
  }
217
223
  }
218
224
 
219
- // src/lib/itertools.ts
220
- function find(it, predicate) {
221
- for (const item of it) {
222
- if (predicate(item)) return item;
223
- }
224
- return void 0;
225
- }
226
- function count(it, predicate) {
227
- let total = 0;
228
- for (const item of it) {
229
- if (predicate(item)) total++;
230
- }
231
- return total;
232
- }
233
-
234
225
  // src/lib/ssr.ts
235
226
  function ensureNotServerSide() {
236
227
  if (typeof window === "undefined") {
@@ -324,6 +315,14 @@ function autobind(self) {
324
315
  } while ((obj = Reflect.getPrototypeOf(obj)) && obj !== Object.prototype);
325
316
  }
326
317
 
318
+ // src/lib/itertools.ts
319
+ function find(it, predicate) {
320
+ for (const item of it) {
321
+ if (predicate(item)) return item;
322
+ }
323
+ return void 0;
324
+ }
325
+
327
326
  // src/lib/querying.ts
328
327
 
329
328
  function makeThreadsFilter(query) {
@@ -347,10 +346,15 @@ function matchesOperator(value, op) {
347
346
  return value === void 0;
348
347
  } else if (_core.isStartsWithOperator.call(void 0, op)) {
349
348
  return typeof value === "string" && value.startsWith(op.startsWith);
349
+ } else if (_core.isNumberOperator.call(void 0, op)) {
350
+ return typeof value === "number" && matchesNumberOperator(value, op);
350
351
  } else {
351
352
  return value === op;
352
353
  }
353
354
  }
355
+ function matchesNumberOperator(value, op) {
356
+ return (op.lt === void 0 || value < op.lt) && (op.gt === void 0 || value > op.gt) && (op.lte === void 0 || value <= op.lte) && (op.gte === void 0 || value >= op.gte);
357
+ }
354
358
  function makeInboxNotificationsFilter(query) {
355
359
  return (inboxNotification) => matchesInboxNotificationsQuery(inboxNotification, query);
356
360
  }
@@ -722,6 +726,21 @@ function createStore_forNotifications() {
722
726
  upsert
723
727
  };
724
728
  }
729
+ function createStore_forUnreadNotificationsCount() {
730
+ const baseSignal = new (0, _core.MutableSignal)(
731
+ /* @__PURE__ */ new Map()
732
+ );
733
+ function update(queryKey, count) {
734
+ baseSignal.mutate((lut) => {
735
+ lut.set(queryKey, count);
736
+ });
737
+ }
738
+ return {
739
+ signal: _core.DerivedSignal.from(baseSignal, (c) => Object.fromEntries(c)),
740
+ // Mutations
741
+ update
742
+ };
743
+ }
725
744
  function createStore_forSubscriptions(updates, threads) {
726
745
  const baseSignal = new (0, _core.MutableSignal)(/* @__PURE__ */ new Map());
727
746
  function applyDelta(newSubscriptions, deletedSubscriptions) {
@@ -914,6 +933,7 @@ var UmbrellaStore = class {
914
933
 
915
934
 
916
935
 
936
+
917
937
  //
918
938
  // Output signals.
919
939
  // (Readonly, clean, consistent. With optimistic updates applied.)
@@ -958,6 +978,7 @@ var UmbrellaStore = class {
958
978
  this.optimisticUpdates.signal
959
979
  );
960
980
  this.historyVersions = createStore_forHistoryVersions();
981
+ this.unreadNotificationsCount = createStore_forUnreadNotificationsCount();
961
982
  const threadifications = _core.DerivedSignal.from(
962
983
  this.threads.signal,
963
984
  this.notifications.signal,
@@ -1114,6 +1135,35 @@ var UmbrellaStore = class {
1114
1135
  };
1115
1136
  }
1116
1137
  );
1138
+ const unreadNotificationsCount = new (0, _core.DefaultMap)(
1139
+ (queryKey) => {
1140
+ const query = JSON.parse(queryKey);
1141
+ const resource = new SinglePageResource(async () => {
1142
+ const result = await this.#client.getUnreadInboxNotificationsCount({
1143
+ query
1144
+ });
1145
+ this.unreadNotificationsCount.update(queryKey, result);
1146
+ });
1147
+ const signal = _core.DerivedSignal.from(
1148
+ () => {
1149
+ const result = resource.get();
1150
+ if (result.isLoading || result.error) {
1151
+ return result;
1152
+ } else {
1153
+ return ASYNC_OK(
1154
+ "count",
1155
+ _core.nn.call(void 0, this.unreadNotificationsCount.signal.get()[queryKey])
1156
+ );
1157
+ }
1158
+ },
1159
+ _core.shallow
1160
+ );
1161
+ return {
1162
+ signal,
1163
+ waitUntilLoaded: resource.waitUntilLoaded
1164
+ };
1165
+ }
1166
+ );
1117
1167
  const roomSubscriptionSettingsByRoomId = new (0, _core.DefaultMap)(
1118
1168
  (roomId) => {
1119
1169
  const resource = new SinglePageResource(async () => {
@@ -1262,6 +1312,7 @@ var UmbrellaStore = class {
1262
1312
  loadingUserThreads,
1263
1313
  notifications,
1264
1314
  loadingNotifications,
1315
+ unreadNotificationsCount,
1265
1316
  roomSubscriptionSettingsByRoomId,
1266
1317
  versionsByRoomId,
1267
1318
  notificationSettings,
@@ -1469,6 +1520,14 @@ var UmbrellaStore = class {
1469
1520
  result.subscriptions.deleted
1470
1521
  );
1471
1522
  }
1523
+ async fetchUnreadNotificationsCount(queryKey, signal) {
1524
+ const query = JSON.parse(queryKey);
1525
+ const result = await this.#client.getUnreadInboxNotificationsCount({
1526
+ query,
1527
+ signal
1528
+ });
1529
+ this.unreadNotificationsCount.update(queryKey, result);
1530
+ }
1472
1531
  async fetchRoomThreadsDeltaUpdate(roomId, signal) {
1473
1532
  const lastRequestedAt = this.#roomThreadsLastRequestedAtByRoom.get(roomId);
1474
1533
  if (lastRequestedAt === void 0) {
@@ -1983,16 +2042,10 @@ var _umbrellaStores = /* @__PURE__ */ new WeakMap();
1983
2042
  var _extras = /* @__PURE__ */ new WeakMap();
1984
2043
  var _bundles = /* @__PURE__ */ new WeakMap();
1985
2044
  function selectorFor_useUnreadInboxNotificationsCount(result) {
1986
- if (!result.inboxNotifications) {
2045
+ if (!("count" in result) || result.count === void 0) {
1987
2046
  return result;
1988
2047
  }
1989
- return ASYNC_OK(
1990
- "count",
1991
- count(
1992
- result.inboxNotifications,
1993
- (n) => n.readAt === null || n.readAt < n.notifiedAt
1994
- )
1995
- );
2048
+ return ASYNC_OK("count", result.count);
1996
2049
  }
1997
2050
  function selectorFor_useUser(state, userId) {
1998
2051
  if (state === void 0 || _optionalChain([state, 'optionalAccess', _10 => _10.isLoading])) {
@@ -2091,6 +2144,22 @@ function makeLiveblocksExtrasForClient(client) {
2091
2144
  config.NOTIFICATIONS_POLL_INTERVAL,
2092
2145
  { maxStaleTimeMs: config.NOTIFICATIONS_MAX_STALE_TIME }
2093
2146
  );
2147
+ const unreadNotificationsCountPollersByQueryKey = new (0, _core.DefaultMap)(
2148
+ (queryKey) => _core.makePoller.call(void 0,
2149
+ async (signal) => {
2150
+ try {
2151
+ return await store.fetchUnreadNotificationsCount(queryKey, signal);
2152
+ } catch (err) {
2153
+ _core.console.warn(
2154
+ `Polling unread inbox notifications countfailed: ${String(err)}`
2155
+ );
2156
+ throw err;
2157
+ }
2158
+ },
2159
+ config.NOTIFICATIONS_POLL_INTERVAL,
2160
+ { maxStaleTimeMs: config.NOTIFICATIONS_MAX_STALE_TIME }
2161
+ )
2162
+ );
2094
2163
  const userThreadsPoller = _core.makePoller.call(void 0,
2095
2164
  async (signal) => {
2096
2165
  try {
@@ -2121,7 +2190,8 @@ function makeLiveblocksExtrasForClient(client) {
2121
2190
  store,
2122
2191
  notificationsPoller,
2123
2192
  userThreadsPoller,
2124
- notificationSettingsPoller
2193
+ notificationSettingsPoller,
2194
+ unreadNotificationsCountPollersByQueryKey
2125
2195
  };
2126
2196
  }
2127
2197
  function makeLiveblocksContextBundle(client) {
@@ -2151,6 +2221,7 @@ function makeLiveblocksContextBundle(client) {
2151
2221
  useAiChats,
2152
2222
  useAiChat,
2153
2223
  useAiChatMessages,
2224
+ useAiChatStatus,
2154
2225
  useCreateAiChat,
2155
2226
  useDeleteAiChat,
2156
2227
  useSendAiMessage,
@@ -2170,6 +2241,7 @@ function makeLiveblocksContextBundle(client) {
2170
2241
  useAiChats: useAiChatsSuspense,
2171
2242
  useAiChat: useAiChatSuspense,
2172
2243
  useAiChatMessages: useAiChatMessagesSuspense,
2244
+ useAiChatStatus,
2173
2245
  useCreateAiChat,
2174
2246
  useDeleteAiChat,
2175
2247
  useSendAiMessage,
@@ -2223,19 +2295,39 @@ function useInboxNotificationsSuspense_withClient(client, options) {
2223
2295
  return result;
2224
2296
  }
2225
2297
  function useUnreadInboxNotificationsCount_withClient(client, options) {
2226
- return useInboxNotifications_withClient(
2227
- client,
2298
+ const { store, unreadNotificationsCountPollersByQueryKey: pollers } = getLiveblocksExtrasForClient(client);
2299
+ const queryKey = makeInboxNotificationsQueryKey(_optionalChain([options, 'optionalAccess', _15 => _15.query]));
2300
+ const poller = pollers.getOrCreate(queryKey);
2301
+ _react.useEffect.call(void 0,
2302
+ () => void store.outputs.unreadNotificationsCount.getOrCreate(queryKey).waitUntilLoaded()
2303
+ // NOTE: Deliberately *not* using a dependency array here!
2304
+ //
2305
+ // It is important to call waitUntil on *every* render.
2306
+ // This is harmless though, on most renders, except:
2307
+ // 1. The very first render, in which case we'll want to trigger the initial page fetch.
2308
+ // 2. All other subsequent renders now "just" return the same promise (a quick operation).
2309
+ // 3. If ever the promise would fail, then after 5 seconds it would reset, and on the very
2310
+ // *next* render after that, a *new* fetch/promise will get created.
2311
+ );
2312
+ _react.useEffect.call(void 0, () => {
2313
+ poller.inc();
2314
+ poller.pollNowIfStale();
2315
+ return () => {
2316
+ poller.dec();
2317
+ };
2318
+ }, [poller]);
2319
+ return useSignal(
2320
+ store.outputs.unreadNotificationsCount.getOrCreate(queryKey).signal,
2228
2321
  selectorFor_useUnreadInboxNotificationsCount,
2229
- _core.shallow,
2230
- options
2322
+ _core.shallow
2231
2323
  );
2232
2324
  }
2233
2325
  function useUnreadInboxNotificationsCountSuspense_withClient(client, options) {
2234
2326
  ensureNotServerSide();
2235
2327
  const store = getLiveblocksExtrasForClient(client).store;
2236
- const queryKey = makeInboxNotificationsQueryKey(_optionalChain([options, 'optionalAccess', _15 => _15.query]));
2328
+ const queryKey = makeInboxNotificationsQueryKey(_optionalChain([options, 'optionalAccess', _16 => _16.query]));
2237
2329
  use(
2238
- store.outputs.loadingNotifications.getOrCreate(queryKey).waitUntilLoaded()
2330
+ store.outputs.unreadNotificationsCount.getOrCreate(queryKey).waitUntilLoaded()
2239
2331
  );
2240
2332
  const result = useUnreadInboxNotificationsCount_withClient(client, options);
2241
2333
  _core.assert.call(void 0, !result.isLoading, "Did not expect loading");
@@ -2245,7 +2337,7 @@ function useUnreadInboxNotificationsCountSuspense_withClient(client, options) {
2245
2337
  function useMarkInboxNotificationAsRead_withClient(client) {
2246
2338
  return _react.useCallback.call(void 0,
2247
2339
  (inboxNotificationId) => {
2248
- const { store } = getLiveblocksExtrasForClient(client);
2340
+ const { store, unreadNotificationsCountPollersByQueryKey } = getLiveblocksExtrasForClient(client);
2249
2341
  const readAt = /* @__PURE__ */ new Date();
2250
2342
  const optimisticId = store.optimisticUpdates.add({
2251
2343
  type: "mark-inbox-notification-as-read",
@@ -2259,6 +2351,10 @@ function useMarkInboxNotificationAsRead_withClient(client) {
2259
2351
  readAt,
2260
2352
  optimisticId
2261
2353
  );
2354
+ for (const poller of unreadNotificationsCountPollersByQueryKey.values()) {
2355
+ poller.markAsStale();
2356
+ poller.pollNowIfStale();
2357
+ }
2262
2358
  },
2263
2359
  (err) => {
2264
2360
  store.optimisticUpdates.remove(optimisticId);
@@ -2277,7 +2373,7 @@ function useMarkInboxNotificationAsRead_withClient(client) {
2277
2373
  }
2278
2374
  function useMarkAllInboxNotificationsAsRead_withClient(client) {
2279
2375
  return _react.useCallback.call(void 0, () => {
2280
- const { store } = getLiveblocksExtrasForClient(client);
2376
+ const { store, unreadNotificationsCountPollersByQueryKey } = getLiveblocksExtrasForClient(client);
2281
2377
  const readAt = /* @__PURE__ */ new Date();
2282
2378
  const optimisticId = store.optimisticUpdates.add({
2283
2379
  type: "mark-all-inbox-notifications-as-read",
@@ -2286,6 +2382,10 @@ function useMarkAllInboxNotificationsAsRead_withClient(client) {
2286
2382
  client.markAllInboxNotificationsAsRead().then(
2287
2383
  () => {
2288
2384
  store.markAllInboxNotificationsRead(optimisticId, readAt);
2385
+ for (const poller of unreadNotificationsCountPollersByQueryKey.values()) {
2386
+ poller.markAsStale();
2387
+ poller.pollNowIfStale();
2388
+ }
2289
2389
  },
2290
2390
  (err) => {
2291
2391
  store.optimisticUpdates.remove(optimisticId);
@@ -2301,7 +2401,7 @@ function useMarkAllInboxNotificationsAsRead_withClient(client) {
2301
2401
  function useDeleteInboxNotification_withClient(client) {
2302
2402
  return _react.useCallback.call(void 0,
2303
2403
  (inboxNotificationId) => {
2304
- const { store } = getLiveblocksExtrasForClient(client);
2404
+ const { store, unreadNotificationsCountPollersByQueryKey } = getLiveblocksExtrasForClient(client);
2305
2405
  const deletedAt = /* @__PURE__ */ new Date();
2306
2406
  const optimisticId = store.optimisticUpdates.add({
2307
2407
  type: "delete-inbox-notification",
@@ -2311,6 +2411,10 @@ function useDeleteInboxNotification_withClient(client) {
2311
2411
  client.deleteInboxNotification(inboxNotificationId).then(
2312
2412
  () => {
2313
2413
  store.deleteInboxNotification(inboxNotificationId, optimisticId);
2414
+ for (const poller of unreadNotificationsCountPollersByQueryKey.values()) {
2415
+ poller.markAsStale();
2416
+ poller.pollNowIfStale();
2417
+ }
2314
2418
  },
2315
2419
  (err) => {
2316
2420
  store.optimisticUpdates.remove(optimisticId);
@@ -2326,7 +2430,7 @@ function useDeleteInboxNotification_withClient(client) {
2326
2430
  }
2327
2431
  function useDeleteAllInboxNotifications_withClient(client) {
2328
2432
  return _react.useCallback.call(void 0, () => {
2329
- const { store } = getLiveblocksExtrasForClient(client);
2433
+ const { store, unreadNotificationsCountPollersByQueryKey } = getLiveblocksExtrasForClient(client);
2330
2434
  const deletedAt = /* @__PURE__ */ new Date();
2331
2435
  const optimisticId = store.optimisticUpdates.add({
2332
2436
  type: "delete-all-inbox-notifications",
@@ -2335,6 +2439,10 @@ function useDeleteAllInboxNotifications_withClient(client) {
2335
2439
  client.deleteAllInboxNotifications().then(
2336
2440
  () => {
2337
2441
  store.deleteAllInboxNotifications(optimisticId);
2442
+ for (const poller of unreadNotificationsCountPollersByQueryKey.values()) {
2443
+ poller.markAsStale();
2444
+ poller.pollNowIfStale();
2445
+ }
2338
2446
  },
2339
2447
  (err) => {
2340
2448
  store.optimisticUpdates.remove(optimisticId);
@@ -2388,7 +2496,7 @@ function useUpdateNotificationSettings_withClient(client) {
2388
2496
  store.optimisticUpdates.remove(optimisticUpdateId);
2389
2497
  if (err instanceof _core.HttpError) {
2390
2498
  if (err.status === 422) {
2391
- const msg = [_optionalChain([err, 'access', _16 => _16.details, 'optionalAccess', _17 => _17.error]), _optionalChain([err, 'access', _18 => _18.details, 'optionalAccess', _19 => _19.reason])].filter(Boolean).join("\n");
2499
+ const msg = [_optionalChain([err, 'access', _17 => _17.details, 'optionalAccess', _18 => _18.error]), _optionalChain([err, 'access', _19 => _19.details, 'optionalAccess', _20 => _20.reason])].filter(Boolean).join("\n");
2392
2500
  _core.console.error(msg);
2393
2501
  }
2394
2502
  client[_core.kInternal].emitError(
@@ -2623,7 +2731,7 @@ function useGroupInfoSuspense_withClient(client, groupId) {
2623
2731
  function useAiChats(options) {
2624
2732
  const client = useClient();
2625
2733
  const store = getUmbrellaStoreForClient(client);
2626
- const queryKey = makeAiChatsQueryKey(_optionalChain([options, 'optionalAccess', _20 => _20.query]));
2734
+ const queryKey = makeAiChatsQueryKey(_optionalChain([options, 'optionalAccess', _21 => _21.query]));
2627
2735
  useEnsureAiConnection(client);
2628
2736
  _react.useEffect.call(void 0,
2629
2737
  () => void store.outputs.aiChats.getOrCreate(queryKey).waitUntilLoaded()
@@ -2647,7 +2755,7 @@ function useAiChatsSuspense(options) {
2647
2755
  const client = useClient();
2648
2756
  const store = getUmbrellaStoreForClient(client);
2649
2757
  useEnsureAiConnection(client);
2650
- const queryKey = makeAiChatsQueryKey(_optionalChain([options, 'optionalAccess', _21 => _21.query]));
2758
+ const queryKey = makeAiChatsQueryKey(_optionalChain([options, 'optionalAccess', _22 => _22.query]));
2651
2759
  use(store.outputs.aiChats.getOrCreate(queryKey).waitUntilLoaded());
2652
2760
  const result = useAiChats(options);
2653
2761
  _core.assert.call(void 0, !result.error, "Did not expect error");
@@ -2659,7 +2767,7 @@ function useAiChatMessages(chatId, options) {
2659
2767
  const store = getUmbrellaStoreForClient(client);
2660
2768
  useEnsureAiConnection(client);
2661
2769
  _react.useEffect.call(void 0,
2662
- () => void store.outputs.messagesByChatId.getOrCreate(chatId).getOrCreate(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _22 => _22.branchId]), () => ( null))).waitUntilLoaded()
2770
+ () => void store.outputs.messagesByChatId.getOrCreate(chatId).getOrCreate(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _23 => _23.branchId]), () => ( null))).waitUntilLoaded()
2663
2771
  // NOTE: Deliberately *not* using a dependency array here!
2664
2772
  //
2665
2773
  // It is important to call waitUntil on *every* render.
@@ -2670,7 +2778,7 @@ function useAiChatMessages(chatId, options) {
2670
2778
  // *next* render after that, a *new* fetch/promise will get created.
2671
2779
  );
2672
2780
  return useSignal(
2673
- store.outputs.messagesByChatId.getOrCreate(chatId).getOrCreate(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _23 => _23.branchId]), () => ( null))).signal
2781
+ store.outputs.messagesByChatId.getOrCreate(chatId).getOrCreate(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _24 => _24.branchId]), () => ( null))).signal
2674
2782
  );
2675
2783
  }
2676
2784
  function useAiChatMessagesSuspense(chatId, options) {
@@ -2679,7 +2787,7 @@ function useAiChatMessagesSuspense(chatId, options) {
2679
2787
  const store = getUmbrellaStoreForClient(client);
2680
2788
  useEnsureAiConnection(client);
2681
2789
  use(
2682
- store.outputs.messagesByChatId.getOrCreate(chatId).getOrCreate(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _24 => _24.branchId]), () => ( null))).waitUntilLoaded()
2790
+ store.outputs.messagesByChatId.getOrCreate(chatId).getOrCreate(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _25 => _25.branchId]), () => ( null))).waitUntilLoaded()
2683
2791
  );
2684
2792
  const result = useAiChatMessages(chatId, options);
2685
2793
  _core.assert.call(void 0, !result.error, "Did not expect error");
@@ -2746,6 +2854,43 @@ function useDeleteAiChat() {
2746
2854
  [client]
2747
2855
  );
2748
2856
  }
2857
+ var LOADING = Object.freeze({ status: "loading" });
2858
+ var IDLE = Object.freeze({ status: "idle" });
2859
+ function useAiChatStatus(chatId, branchId) {
2860
+ const client = useClient();
2861
+ const store = getUmbrellaStoreForClient(client);
2862
+ useEnsureAiConnection(client);
2863
+ _react.useEffect.call(void 0,
2864
+ () => void store.outputs.messagesByChatId.getOrCreate(chatId).getOrCreate(_nullishCoalesce(branchId, () => ( null))).waitUntilLoaded()
2865
+ );
2866
+ return useSignal(
2867
+ // Signal
2868
+ store.outputs.messagesByChatId.getOrCreate(chatId).getOrCreate(_nullishCoalesce(branchId, () => ( null))).signal,
2869
+ // Selector
2870
+ (result) => {
2871
+ if (result.isLoading) return LOADING;
2872
+ if (result.error) return IDLE;
2873
+ const messages = result.messages;
2874
+ const lastMessage = messages[messages.length - 1];
2875
+ if (_optionalChain([lastMessage, 'optionalAccess', _26 => _26.role]) !== "assistant") return IDLE;
2876
+ if (lastMessage.status !== "generating" && lastMessage.status !== "awaiting-tool")
2877
+ return IDLE;
2878
+ const contentSoFar = lastMessage.contentSoFar;
2879
+ const lastPart = contentSoFar[contentSoFar.length - 1];
2880
+ if (_optionalChain([lastPart, 'optionalAccess', _27 => _27.type]) === "tool-invocation") {
2881
+ return {
2882
+ status: "generating",
2883
+ partType: "tool-invocation",
2884
+ toolName: lastPart.name
2885
+ };
2886
+ } else {
2887
+ return { status: "generating", partType: _optionalChain([lastPart, 'optionalAccess', _28 => _28.type]) };
2888
+ }
2889
+ },
2890
+ // Consider { status: "generating", partType: "text" } and { status: "generating", partType: "text" } equal
2891
+ _core.shallow
2892
+ );
2893
+ }
2749
2894
  function useSendAiMessage(chatId, options) {
2750
2895
  const client = useClient();
2751
2896
  return _react.useCallback.call(void 0,
@@ -2762,7 +2907,7 @@ function useSendAiMessage(chatId, options) {
2762
2907
  "chatId must be provided to either `useSendAiMessage` or its returned function."
2763
2908
  )));
2764
2909
  const messages = client[_core.kInternal].ai.signals.getChatMessagesForBranch\u03A3(resolvedChatId).get();
2765
- if (process.env.NODE_ENV !== "production" && !messageOptionsCopilotId && !_optionalChain([options, 'optionalAccess', _25 => _25.copilotId])) {
2910
+ if (process.env.NODE_ENV !== "production" && !messageOptionsCopilotId && !_optionalChain([options, 'optionalAccess', _29 => _29.copilotId])) {
2766
2911
  _core.console.warn(
2767
2912
  `No copilot ID was provided to useSendAiMessage when sending the message "${messageText.slice(
2768
2913
  0,
@@ -2774,8 +2919,8 @@ To ensure the correct copilot ID is used, specify it either through the hook as
2774
2919
  )}\u2026", copilotId: "co_xxx" })'`
2775
2920
  );
2776
2921
  }
2777
- const resolvedCopilotId = _nullishCoalesce(_nullishCoalesce(messageOptionsCopilotId, () => ( _optionalChain([options, 'optionalAccess', _26 => _26.copilotId]))), () => ( client[_core.kInternal].ai.getLastUsedCopilotId(resolvedChatId)));
2778
- const lastMessageId = _nullishCoalesce(_optionalChain([messages, 'access', _27 => _27[messages.length - 1], 'optionalAccess', _28 => _28.id]), () => ( null));
2922
+ const resolvedCopilotId = _nullishCoalesce(_nullishCoalesce(messageOptionsCopilotId, () => ( _optionalChain([options, 'optionalAccess', _30 => _30.copilotId]))), () => ( client[_core.kInternal].ai.getLastUsedCopilotId(resolvedChatId)));
2923
+ const lastMessageId = _nullishCoalesce(_optionalChain([messages, 'access', _31 => _31[messages.length - 1], 'optionalAccess', _32 => _32.id]), () => ( null));
2779
2924
  const content = [{ type: "text", text: messageText }];
2780
2925
  const newMessageId = client[_core.kInternal].ai[_core.kInternal].context.messagesStore.createOptimistically(
2781
2926
  resolvedChatId,
@@ -2795,22 +2940,14 @@ To ensure the correct copilot ID is used, specify it either through the hook as
2795
2940
  { id: newMessageId, parentMessageId: lastMessageId, content },
2796
2941
  targetMessageId,
2797
2942
  {
2798
- stream: _nullishCoalesce(messageOptions.stream, () => ( _optionalChain([options, 'optionalAccess', _29 => _29.stream]))),
2943
+ stream: _nullishCoalesce(messageOptions.stream, () => ( _optionalChain([options, 'optionalAccess', _33 => _33.stream]))),
2799
2944
  copilotId: resolvedCopilotId,
2800
- timeout: _nullishCoalesce(messageOptions.timeout, () => ( _optionalChain([options, 'optionalAccess', _30 => _30.timeout]))),
2801
- knowledge: _nullishCoalesce(messageOptions.knowledge, () => ( _optionalChain([options, 'optionalAccess', _31 => _31.knowledge])))
2945
+ timeout: _nullishCoalesce(messageOptions.timeout, () => ( _optionalChain([options, 'optionalAccess', _34 => _34.timeout])))
2802
2946
  }
2803
2947
  );
2804
2948
  return newMessage;
2805
2949
  },
2806
- [
2807
- client,
2808
- chatId,
2809
- _optionalChain([options, 'optionalAccess', _32 => _32.copilotId]),
2810
- _optionalChain([options, 'optionalAccess', _33 => _33.stream]),
2811
- _optionalChain([options, 'optionalAccess', _34 => _34.timeout]),
2812
- _optionalChain([options, 'optionalAccess', _35 => _35.knowledge])
2813
- ]
2950
+ [client, chatId, _optionalChain([options, 'optionalAccess', _35 => _35.copilotId]), _optionalChain([options, 'optionalAccess', _36 => _36.stream]), _optionalChain([options, 'optionalAccess', _37 => _37.timeout])]
2814
2951
  );
2815
2952
  }
2816
2953
  function createSharedContext(client) {
@@ -2845,7 +2982,7 @@ function createSharedContext(client) {
2845
2982
  }
2846
2983
  function useEnsureNoLiveblocksProvider(options) {
2847
2984
  const existing = useClientOrNull();
2848
- if (!_optionalChain([options, 'optionalAccess', _36 => _36.allowNesting]) && existing !== null) {
2985
+ if (!_optionalChain([options, 'optionalAccess', _38 => _38.allowNesting]) && existing !== null) {
2849
2986
  throw new Error(
2850
2987
  "You cannot nest multiple LiveblocksProvider instances in the same React tree."
2851
2988
  );
@@ -3009,7 +3146,7 @@ var _useAiChatSuspense = useAiChatSuspense;
3009
3146
  var _useAiChatMessages = useAiChatMessages;
3010
3147
  var _useAiChatMessagesSuspense = useAiChatMessagesSuspense;
3011
3148
  function useSyncStatus_withClient(client, options) {
3012
- const smooth = useInitial(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _37 => _37.smooth]), () => ( false)));
3149
+ const smooth = useInitial(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _39 => _39.smooth]), () => ( false)));
3013
3150
  if (smooth) {
3014
3151
  return useSyncStatusSmooth_withClient(client);
3015
3152
  } else {
@@ -3188,8 +3325,8 @@ function makeRoomExtrasForClient(client) {
3188
3325
  if (innerError.status === 403) {
3189
3326
  const detailedMessage = [
3190
3327
  innerError.message,
3191
- _optionalChain([innerError, 'access', _38 => _38.details, 'optionalAccess', _39 => _39.suggestion]),
3192
- _optionalChain([innerError, 'access', _40 => _40.details, 'optionalAccess', _41 => _41.docs])
3328
+ _optionalChain([innerError, 'access', _40 => _40.details, 'optionalAccess', _41 => _41.suggestion]),
3329
+ _optionalChain([innerError, 'access', _42 => _42.details, 'optionalAccess', _43 => _43.docs])
3193
3330
  ].filter(Boolean).join("\n");
3194
3331
  _core.console.error(detailedMessage);
3195
3332
  }
@@ -3484,7 +3621,7 @@ function RoomProviderInner(props) {
3484
3621
  }
3485
3622
  function useRoom(options) {
3486
3623
  const room = useRoomOrNull();
3487
- if (room === null && !_optionalChain([options, 'optionalAccess', _42 => _42.allowOutsideRoom])) {
3624
+ if (room === null && !_optionalChain([options, 'optionalAccess', _44 => _44.allowOutsideRoom])) {
3488
3625
  throw new Error("RoomProvider is missing from the React tree.");
3489
3626
  }
3490
3627
  return room;
@@ -3834,7 +3971,7 @@ function useCreateRoomThread(roomId) {
3834
3971
  thread: newThread,
3835
3972
  roomId
3836
3973
  });
3837
- const attachmentIds = _optionalChain([attachments, 'optionalAccess', _43 => _43.map, 'call', _44 => _44((attachment) => attachment.id)]);
3974
+ const attachmentIds = _optionalChain([attachments, 'optionalAccess', _45 => _45.map, 'call', _46 => _46((attachment) => attachment.id)]);
3838
3975
  client[_core.kInternal].httpClient.createThread({
3839
3976
  roomId,
3840
3977
  threadId,
@@ -3874,7 +4011,7 @@ function useDeleteRoomThread(roomId) {
3874
4011
  const { store, onMutationFailure } = getRoomExtrasForClient(client);
3875
4012
  const userId = getCurrentUserId(client);
3876
4013
  const existing = store.outputs.threads.get().get(threadId);
3877
- if (_optionalChain([existing, 'optionalAccess', _45 => _45.comments, 'optionalAccess', _46 => _46[0], 'optionalAccess', _47 => _47.userId]) !== userId) {
4014
+ if (_optionalChain([existing, 'optionalAccess', _47 => _47.comments, 'optionalAccess', _48 => _48[0], 'optionalAccess', _49 => _49.userId]) !== userId) {
3878
4015
  throw new Error("Only the thread creator can delete the thread");
3879
4016
  }
3880
4017
  const optimisticId = store.optimisticUpdates.add({
@@ -3962,7 +4099,7 @@ function useCreateRoomComment(roomId) {
3962
4099
  type: "create-comment",
3963
4100
  comment
3964
4101
  });
3965
- const attachmentIds = _optionalChain([attachments, 'optionalAccess', _48 => _48.map, 'call', _49 => _49((attachment) => attachment.id)]);
4102
+ const attachmentIds = _optionalChain([attachments, 'optionalAccess', _50 => _50.map, 'call', _51 => _51((attachment) => attachment.id)]);
3966
4103
  client[_core.kInternal].httpClient.createComment({ roomId, threadId, commentId, body, attachmentIds }).then(
3967
4104
  (newComment) => {
3968
4105
  store.createComment(newComment, optimisticId);
@@ -4018,7 +4155,7 @@ function useEditRoomComment(roomId) {
4018
4155
  attachments: _nullishCoalesce(attachments, () => ( []))
4019
4156
  }
4020
4157
  });
4021
- const attachmentIds = _optionalChain([attachments, 'optionalAccess', _50 => _50.map, 'call', _51 => _51((attachment) => attachment.id)]);
4158
+ const attachmentIds = _optionalChain([attachments, 'optionalAccess', _52 => _52.map, 'call', _53 => _53((attachment) => attachment.id)]);
4022
4159
  client[_core.kInternal].httpClient.editComment({ roomId, threadId, commentId, body, attachmentIds }).then(
4023
4160
  (editedComment) => {
4024
4161
  store.editComment(threadId, optimisticId, editedComment);
@@ -4359,7 +4496,7 @@ function useRoomThreadSubscription(roomId, threadId) {
4359
4496
  }
4360
4497
  return {
4361
4498
  status: "subscribed",
4362
- unreadSince: _nullishCoalesce(_optionalChain([notification, 'optionalAccess', _52 => _52.readAt]), () => ( null)),
4499
+ unreadSince: _nullishCoalesce(_optionalChain([notification, 'optionalAccess', _54 => _54.readAt]), () => ( null)),
4363
4500
  subscribe,
4364
4501
  unsubscribe
4365
4502
  };
@@ -4570,7 +4707,7 @@ function useThreadsSuspense(options = {}) {
4570
4707
  return result;
4571
4708
  }
4572
4709
  function selectorFor_useAttachmentUrl(state) {
4573
- if (state === void 0 || _optionalChain([state, 'optionalAccess', _53 => _53.isLoading])) {
4710
+ if (state === void 0 || _optionalChain([state, 'optionalAccess', _55 => _55.isLoading])) {
4574
4711
  return _nullishCoalesce(state, () => ( { isLoading: true }));
4575
4712
  }
4576
4713
  if (state.error) {
@@ -4797,5 +4934,6 @@ var _useUpdateMyPresence = useUpdateMyPresence;
4797
4934
 
4798
4935
 
4799
4936
 
4800
- exports.ClientContext = ClientContext; exports.useClientOrNull = useClientOrNull; exports.useClient = useClient; exports.RoomContext = RoomContext; exports.useLatest = useLatest; exports.RegisterAiKnowledge = RegisterAiKnowledge; exports.RegisterAiTool = RegisterAiTool; exports.useSyncExternalStoreWithSelector = useSyncExternalStoreWithSelector; exports.useSignal = useSignal; exports.getUmbrellaStoreForClient = getUmbrellaStoreForClient; exports.useCreateAiChat = useCreateAiChat; exports.useDeleteAiChat = useDeleteAiChat; exports.useSendAiMessage = useSendAiMessage; exports.LiveblocksProvider = LiveblocksProvider; exports.createLiveblocksContext = createLiveblocksContext; exports.useInboxNotifications = useInboxNotifications; exports.useInboxNotificationsSuspense = useInboxNotificationsSuspense; exports.useMarkAllInboxNotificationsAsRead = useMarkAllInboxNotificationsAsRead; exports.useMarkInboxNotificationAsRead = useMarkInboxNotificationAsRead; exports.useDeleteAllInboxNotifications = useDeleteAllInboxNotifications; exports.useDeleteInboxNotification = useDeleteInboxNotification; exports.useUnreadInboxNotificationsCount = useUnreadInboxNotificationsCount; exports.useUnreadInboxNotificationsCountSuspense = useUnreadInboxNotificationsCountSuspense; exports.useNotificationSettings = useNotificationSettings; exports.useNotificationSettingsSuspense = useNotificationSettingsSuspense; exports.useUpdateNotificationSettings = useUpdateNotificationSettings; exports.useRoomInfo = useRoomInfo; exports.useRoomInfoSuspense = useRoomInfoSuspense; exports.useGroupInfo = useGroupInfo; exports.useGroupInfoSuspense = useGroupInfoSuspense; exports._useInboxNotificationThread = _useInboxNotificationThread; exports._useUser = _useUser; exports._useUserSuspense = _useUserSuspense; exports._useUserThreads_experimental = _useUserThreads_experimental; exports._useUserThreadsSuspense_experimental = _useUserThreadsSuspense_experimental; exports._useAiChats = _useAiChats; exports._useAiChatsSuspense = _useAiChatsSuspense; exports._useAiChat = _useAiChat; exports._useAiChatSuspense = _useAiChatSuspense; exports._useAiChatMessages = _useAiChatMessages; exports._useAiChatMessagesSuspense = _useAiChatMessagesSuspense; exports.useSyncStatus = useSyncStatus; exports.useErrorListener = useErrorListener; exports.useStatus = useStatus; exports.useReportTextEditor = useReportTextEditor; exports.useYjsProvider = useYjsProvider; exports.useCreateTextMention = useCreateTextMention; exports.useDeleteTextMention = useDeleteTextMention; exports.useResolveMentionSuggestions = useResolveMentionSuggestions; exports.useMentionSuggestionsCache = useMentionSuggestionsCache; exports.useLostConnectionListener = useLostConnectionListener; exports.useHistory = useHistory; exports.useUndo = useUndo; exports.useRedo = useRedo; exports.useCanUndo = useCanUndo; exports.useCanRedo = useCanRedo; exports.useOthersConnectionIds = useOthersConnectionIds; exports.useCreateRoomThread = useCreateRoomThread; exports.useDeleteRoomThread = useDeleteRoomThread; exports.useEditRoomThreadMetadata = useEditRoomThreadMetadata; exports.useCreateComment = useCreateComment; exports.useCreateRoomComment = useCreateRoomComment; exports.useEditComment = useEditComment; exports.useEditRoomComment = useEditRoomComment; exports.useDeleteComment = useDeleteComment; exports.useDeleteRoomComment = useDeleteRoomComment; exports.useAddRoomCommentReaction = useAddRoomCommentReaction; exports.useRemoveReaction = useRemoveReaction; exports.useRemoveRoomCommentReaction = useRemoveRoomCommentReaction; exports.useMarkThreadAsRead = useMarkThreadAsRead; exports.useMarkRoomThreadAsRead = useMarkRoomThreadAsRead; exports.useMarkThreadAsResolved = useMarkThreadAsResolved; exports.useMarkRoomThreadAsResolved = useMarkRoomThreadAsResolved; exports.useMarkThreadAsUnresolved = useMarkThreadAsUnresolved; exports.useMarkRoomThreadAsUnresolved = useMarkRoomThreadAsUnresolved; exports.useSubscribeToThread = useSubscribeToThread; exports.useUnsubscribeFromThread = useUnsubscribeFromThread; exports.useThreadSubscription = useThreadSubscription; exports.useRoomThreadSubscription = useRoomThreadSubscription; exports.useHistoryVersionData = useHistoryVersionData; exports.useUpdateRoomSubscriptionSettings = useUpdateRoomSubscriptionSettings; exports.useOthersConnectionIdsSuspense = useOthersConnectionIdsSuspense; exports.useAttachmentUrl = useAttachmentUrl; exports.useRoomAttachmentUrl = useRoomAttachmentUrl; exports.useAttachmentUrlSuspense = useAttachmentUrlSuspense; exports.useRoomPermissions = useRoomPermissions; exports.createRoomContext = createRoomContext; exports._RoomProvider = _RoomProvider; exports._useBroadcastEvent = _useBroadcastEvent; exports._useOthersListener = _useOthersListener; exports._useRoom = _useRoom; exports._useIsInsideRoom = _useIsInsideRoom; exports._useAddReaction = _useAddReaction; exports._useMutation = _useMutation; exports._useCreateThread = _useCreateThread; exports._useDeleteThread = _useDeleteThread; exports._useEditThreadMetadata = _useEditThreadMetadata; exports._useEventListener = _useEventListener; exports._useMyPresence = _useMyPresence; exports._useOthersMapped = _useOthersMapped; exports._useOthersMappedSuspense = _useOthersMappedSuspense; exports._useThreads = _useThreads; exports._useThreadsSuspense = _useThreadsSuspense; exports._useRoomSubscriptionSettings = _useRoomSubscriptionSettings; exports._useRoomSubscriptionSettingsSuspense = _useRoomSubscriptionSettingsSuspense; exports._useHistoryVersions = _useHistoryVersions; exports._useHistoryVersionsSuspense = _useHistoryVersionsSuspense; exports._useOther = _useOther; exports._useOthers = _useOthers; exports._useOtherSuspense = _useOtherSuspense; exports._useOthersSuspense = _useOthersSuspense; exports._useStorage = _useStorage; exports._useStorageSuspense = _useStorageSuspense; exports._useSelf = _useSelf; exports._useSelfSuspense = _useSelfSuspense; exports._useStorageRoot = _useStorageRoot; exports._useUpdateMyPresence = _useUpdateMyPresence;
4801
- //# sourceMappingURL=chunk-4GCS3365.cjs.map
4937
+
4938
+ exports.ClientContext = ClientContext; exports.useClientOrNull = useClientOrNull; exports.useClient = useClient; exports.RoomContext = RoomContext; exports.useLatest = useLatest; exports.RegisterAiKnowledge = RegisterAiKnowledge; exports.RegisterAiTool = RegisterAiTool; exports.useSyncExternalStoreWithSelector = useSyncExternalStoreWithSelector; exports.useSignal = useSignal; exports.getUmbrellaStoreForClient = getUmbrellaStoreForClient; exports.useCreateAiChat = useCreateAiChat; exports.useDeleteAiChat = useDeleteAiChat; exports.useAiChatStatus = useAiChatStatus; exports.useSendAiMessage = useSendAiMessage; exports.LiveblocksProvider = LiveblocksProvider; exports.createLiveblocksContext = createLiveblocksContext; exports.useInboxNotifications = useInboxNotifications; exports.useInboxNotificationsSuspense = useInboxNotificationsSuspense; exports.useMarkAllInboxNotificationsAsRead = useMarkAllInboxNotificationsAsRead; exports.useMarkInboxNotificationAsRead = useMarkInboxNotificationAsRead; exports.useDeleteAllInboxNotifications = useDeleteAllInboxNotifications; exports.useDeleteInboxNotification = useDeleteInboxNotification; exports.useUnreadInboxNotificationsCount = useUnreadInboxNotificationsCount; exports.useUnreadInboxNotificationsCountSuspense = useUnreadInboxNotificationsCountSuspense; exports.useNotificationSettings = useNotificationSettings; exports.useNotificationSettingsSuspense = useNotificationSettingsSuspense; exports.useUpdateNotificationSettings = useUpdateNotificationSettings; exports.useRoomInfo = useRoomInfo; exports.useRoomInfoSuspense = useRoomInfoSuspense; exports.useGroupInfo = useGroupInfo; exports.useGroupInfoSuspense = useGroupInfoSuspense; exports._useInboxNotificationThread = _useInboxNotificationThread; exports._useUser = _useUser; exports._useUserSuspense = _useUserSuspense; exports._useUserThreads_experimental = _useUserThreads_experimental; exports._useUserThreadsSuspense_experimental = _useUserThreadsSuspense_experimental; exports._useAiChats = _useAiChats; exports._useAiChatsSuspense = _useAiChatsSuspense; exports._useAiChat = _useAiChat; exports._useAiChatSuspense = _useAiChatSuspense; exports._useAiChatMessages = _useAiChatMessages; exports._useAiChatMessagesSuspense = _useAiChatMessagesSuspense; exports.useSyncStatus = useSyncStatus; exports.useErrorListener = useErrorListener; exports.useStatus = useStatus; exports.useReportTextEditor = useReportTextEditor; exports.useYjsProvider = useYjsProvider; exports.useCreateTextMention = useCreateTextMention; exports.useDeleteTextMention = useDeleteTextMention; exports.useResolveMentionSuggestions = useResolveMentionSuggestions; exports.useMentionSuggestionsCache = useMentionSuggestionsCache; exports.useLostConnectionListener = useLostConnectionListener; exports.useHistory = useHistory; exports.useUndo = useUndo; exports.useRedo = useRedo; exports.useCanUndo = useCanUndo; exports.useCanRedo = useCanRedo; exports.useOthersConnectionIds = useOthersConnectionIds; exports.useCreateRoomThread = useCreateRoomThread; exports.useDeleteRoomThread = useDeleteRoomThread; exports.useEditRoomThreadMetadata = useEditRoomThreadMetadata; exports.useCreateComment = useCreateComment; exports.useCreateRoomComment = useCreateRoomComment; exports.useEditComment = useEditComment; exports.useEditRoomComment = useEditRoomComment; exports.useDeleteComment = useDeleteComment; exports.useDeleteRoomComment = useDeleteRoomComment; exports.useAddRoomCommentReaction = useAddRoomCommentReaction; exports.useRemoveReaction = useRemoveReaction; exports.useRemoveRoomCommentReaction = useRemoveRoomCommentReaction; exports.useMarkThreadAsRead = useMarkThreadAsRead; exports.useMarkRoomThreadAsRead = useMarkRoomThreadAsRead; exports.useMarkThreadAsResolved = useMarkThreadAsResolved; exports.useMarkRoomThreadAsResolved = useMarkRoomThreadAsResolved; exports.useMarkThreadAsUnresolved = useMarkThreadAsUnresolved; exports.useMarkRoomThreadAsUnresolved = useMarkRoomThreadAsUnresolved; exports.useSubscribeToThread = useSubscribeToThread; exports.useUnsubscribeFromThread = useUnsubscribeFromThread; exports.useThreadSubscription = useThreadSubscription; exports.useRoomThreadSubscription = useRoomThreadSubscription; exports.useHistoryVersionData = useHistoryVersionData; exports.useUpdateRoomSubscriptionSettings = useUpdateRoomSubscriptionSettings; exports.useOthersConnectionIdsSuspense = useOthersConnectionIdsSuspense; exports.useAttachmentUrl = useAttachmentUrl; exports.useRoomAttachmentUrl = useRoomAttachmentUrl; exports.useAttachmentUrlSuspense = useAttachmentUrlSuspense; exports.useRoomPermissions = useRoomPermissions; exports.createRoomContext = createRoomContext; exports._RoomProvider = _RoomProvider; exports._useBroadcastEvent = _useBroadcastEvent; exports._useOthersListener = _useOthersListener; exports._useRoom = _useRoom; exports._useIsInsideRoom = _useIsInsideRoom; exports._useAddReaction = _useAddReaction; exports._useMutation = _useMutation; exports._useCreateThread = _useCreateThread; exports._useDeleteThread = _useDeleteThread; exports._useEditThreadMetadata = _useEditThreadMetadata; exports._useEventListener = _useEventListener; exports._useMyPresence = _useMyPresence; exports._useOthersMapped = _useOthersMapped; exports._useOthersMappedSuspense = _useOthersMappedSuspense; exports._useThreads = _useThreads; exports._useThreadsSuspense = _useThreadsSuspense; exports._useRoomSubscriptionSettings = _useRoomSubscriptionSettings; exports._useRoomSubscriptionSettingsSuspense = _useRoomSubscriptionSettingsSuspense; exports._useHistoryVersions = _useHistoryVersions; exports._useHistoryVersionsSuspense = _useHistoryVersionsSuspense; exports._useOther = _useOther; exports._useOthers = _useOthers; exports._useOtherSuspense = _useOtherSuspense; exports._useOthersSuspense = _useOthersSuspense; exports._useStorage = _useStorage; exports._useStorageSuspense = _useStorageSuspense; exports._useSelf = _useSelf; exports._useSelfSuspense = _useSelfSuspense; exports._useStorageRoot = _useStorageRoot; exports._useUpdateMyPresence = _useUpdateMyPresence;
4939
+ //# sourceMappingURL=chunk-2YWY7TUQ.cjs.map