@liveblocks/react 3.6.2 → 3.7.0

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.
@@ -305,7 +305,6 @@ var use = _nullishCoalesce(reactUse, () => ( ((promise) => {
305
305
 
306
306
 
307
307
 
308
-
309
308
 
310
309
 
311
310
  // src/lib/autobind.ts
@@ -492,6 +491,9 @@ function makeUserThreadsQueryKey(query) {
492
491
  function makeAiChatsQueryKey(query) {
493
492
  return _core.stableStringify.call(void 0, _nullishCoalesce(query, () => ( {})));
494
493
  }
494
+ function makeInboxNotificationsQueryKey(query) {
495
+ return _core.stableStringify.call(void 0, _nullishCoalesce(query, () => ( {})));
496
+ }
495
497
  function usify(promise) {
496
498
  if ("status" in promise) {
497
499
  return promise;
@@ -920,7 +922,6 @@ var UmbrellaStore = class {
920
922
  // Notifications
921
923
  #notificationsLastRequestedAt = null;
922
924
  // Keeps track of when we successfully requested an inbox notifications update for the last time. Will be `null` as long as the first successful fetch hasn't happened yet.
923
- #notificationsPaginationState;
924
925
  // Room Threads
925
926
  #roomThreadsLastRequestedAtByRoom = /* @__PURE__ */ new Map();
926
927
  // User Threads
@@ -933,21 +934,6 @@ var UmbrellaStore = class {
933
934
  this.#client = client[_core.kInternal].as();
934
935
  this.optimisticUpdates = createStore_forOptimistic(this.#client);
935
936
  this.permissionHints = createStore_forPermissionHints();
936
- this.#notificationsPaginationState = new PaginatedResource(
937
- async (cursor) => {
938
- const result = await this.#client.getInboxNotifications({ cursor });
939
- this.updateThreadifications(
940
- result.threads,
941
- result.inboxNotifications,
942
- result.subscriptions
943
- );
944
- if (this.#notificationsLastRequestedAt === null) {
945
- this.#notificationsLastRequestedAt = result.requestedAt;
946
- }
947
- const nextCursor = result.nextCursor;
948
- return nextCursor;
949
- }
950
- );
951
937
  const notificationSettingsFetcher = async () => {
952
938
  const result = await this.#client.getNotificationSettings();
953
939
  this.notificationSettings.update(result);
@@ -1077,25 +1063,46 @@ var UmbrellaStore = class {
1077
1063
  return { signal, waitUntilLoaded: resource.waitUntilLoaded };
1078
1064
  }
1079
1065
  );
1080
- const loadingNotifications = {
1081
- signal: _core.DerivedSignal.from(() => {
1082
- const resource = this.#notificationsPaginationState;
1083
- const result = resource.get();
1084
- if (result.isLoading || result.error) {
1085
- return result;
1086
- }
1087
- const page = result.data;
1066
+ const loadingNotifications = new (0, _core.DefaultMap)(
1067
+ (queryKey) => {
1068
+ const query = JSON.parse(queryKey);
1069
+ const resource = new PaginatedResource(async (cursor) => {
1070
+ const result = await this.#client.getInboxNotifications({
1071
+ cursor,
1072
+ query
1073
+ });
1074
+ this.updateThreadifications(
1075
+ result.threads,
1076
+ result.inboxNotifications,
1077
+ result.subscriptions
1078
+ );
1079
+ if (this.#notificationsLastRequestedAt === null) {
1080
+ this.#notificationsLastRequestedAt = result.requestedAt;
1081
+ }
1082
+ const nextCursor = result.nextCursor;
1083
+ return nextCursor;
1084
+ });
1085
+ const signal = _core.DerivedSignal.from(() => {
1086
+ const result = resource.get();
1087
+ if (result.isLoading || result.error) {
1088
+ return result;
1089
+ }
1090
+ const page = result.data;
1091
+ return {
1092
+ isLoading: false,
1093
+ inboxNotifications: this.outputs.notifications.get().sortedNotifications,
1094
+ hasFetchedAll: page.hasFetchedAll,
1095
+ isFetchingMore: page.isFetchingMore,
1096
+ fetchMoreError: page.fetchMoreError,
1097
+ fetchMore: page.fetchMore
1098
+ };
1099
+ }, _core.shallow2);
1088
1100
  return {
1089
- isLoading: false,
1090
- inboxNotifications: this.outputs.notifications.get().sortedNotifications,
1091
- hasFetchedAll: page.hasFetchedAll,
1092
- isFetchingMore: page.isFetchingMore,
1093
- fetchMoreError: page.fetchMoreError,
1094
- fetchMore: page.fetchMore
1101
+ signal,
1102
+ waitUntilLoaded: resource.waitUntilLoaded
1095
1103
  };
1096
- }),
1097
- waitUntilLoaded: this.#notificationsPaginationState.waitUntilLoaded
1098
- };
1104
+ }
1105
+ );
1099
1106
  const roomSubscriptionSettingsByRoomId = new (0, _core.DefaultMap)(
1100
1107
  (roomId) => {
1101
1108
  const resource = new SinglePageResource(async () => {
@@ -1741,15 +1748,7 @@ function applyOptimisticUpdates_forSubscriptions(subscriptionsLUT, threads, opti
1741
1748
  delete subscriptions[subscriptionKey];
1742
1749
  break;
1743
1750
  }
1744
- // Create subscriptions for every threads in the room which the user participates in but doesn't have a subscription for yet
1745
1751
  case "replies_and_mentions": {
1746
- if (isThreadParticipant(thread, update.userId) && !subscriptions[subscriptionKey]) {
1747
- subscriptions[subscriptionKey] = {
1748
- kind: "thread",
1749
- subjectId: thread.id,
1750
- createdAt: /* @__PURE__ */ new Date()
1751
- };
1752
- }
1753
1752
  break;
1754
1753
  }
1755
1754
  default:
@@ -1950,27 +1949,6 @@ function upsertReaction(reactions, reaction) {
1950
1949
  }
1951
1950
  return reactions;
1952
1951
  }
1953
- function isThreadParticipant(thread, userId) {
1954
- let isParticipant = false;
1955
- for (const comment of thread.comments) {
1956
- if (comment.deletedAt) {
1957
- continue;
1958
- }
1959
- if (comment.userId === userId) {
1960
- isParticipant = true;
1961
- break;
1962
- }
1963
- const mentions = _core.getMentionsFromCommentBody.call(void 0,
1964
- comment.body,
1965
- (mention) => mention.kind === "user" && mention.id === userId
1966
- );
1967
- if (mentions.length > 0) {
1968
- isParticipant = true;
1969
- break;
1970
- }
1971
- }
1972
- return isParticipant;
1973
- }
1974
1952
 
1975
1953
  // src/liveblocks.tsx
1976
1954
  var _jsxruntime = require('react/jsx-runtime');
@@ -1982,6 +1960,11 @@ function missingRoomInfoError(roomId) {
1982
1960
  `resolveRoomsInfo didn't return anything for room '${roomId}'`
1983
1961
  );
1984
1962
  }
1963
+ function missingGroupInfoError(groupId) {
1964
+ return new Error(
1965
+ `resolveGroupsInfo didn't return anything for group '${groupId}'`
1966
+ );
1967
+ }
1985
1968
  function identity2(x) {
1986
1969
  return x;
1987
1970
  }
@@ -2036,6 +2019,24 @@ function selectorFor_useRoomInfo(state, roomId) {
2036
2019
  info: state.data
2037
2020
  };
2038
2021
  }
2022
+ function selectorFor_useGroupInfo(state, groupId) {
2023
+ if (state === void 0 || _optionalChain([state, 'optionalAccess', _12 => _12.isLoading])) {
2024
+ return _nullishCoalesce(state, () => ( { isLoading: true }));
2025
+ }
2026
+ if (state.error) {
2027
+ return state;
2028
+ }
2029
+ if (!state.data) {
2030
+ return {
2031
+ isLoading: false,
2032
+ error: missingGroupInfoError(groupId)
2033
+ };
2034
+ }
2035
+ return {
2036
+ isLoading: false,
2037
+ info: state.data
2038
+ };
2039
+ }
2039
2040
  function getOrCreateContextBundle(client) {
2040
2041
  let bundle = _bundles.get(client);
2041
2042
  if (!bundle) {
@@ -2126,7 +2127,7 @@ function makeLiveblocksContextBundle(client) {
2126
2127
  const shared = createSharedContext(client);
2127
2128
  const bundle = {
2128
2129
  LiveblocksProvider: LiveblocksProvider2,
2129
- useInboxNotifications: () => useInboxNotifications_withClient(client, identity2, _core.shallow),
2130
+ useInboxNotifications: (options) => useInboxNotifications_withClient(client, identity2, _core.shallow, options),
2130
2131
  useUnreadInboxNotificationsCount: () => useUnreadInboxNotificationsCount_withClient(client),
2131
2132
  useMarkInboxNotificationAsRead: useMarkInboxNotificationAsRead2,
2132
2133
  useMarkAllInboxNotificationsAsRead: useMarkAllInboxNotificationsAsRead2,
@@ -2145,7 +2146,7 @@ function makeLiveblocksContextBundle(client) {
2145
2146
  ...shared.classic,
2146
2147
  suspense: {
2147
2148
  LiveblocksProvider: LiveblocksProvider2,
2148
- useInboxNotifications: () => useInboxNotificationsSuspense_withClient(client),
2149
+ useInboxNotifications: (options) => useInboxNotificationsSuspense_withClient(client, options),
2149
2150
  useUnreadInboxNotificationsCount: () => useUnreadInboxNotificationsCountSuspense_withClient(client),
2150
2151
  useMarkInboxNotificationAsRead: useMarkInboxNotificationAsRead2,
2151
2152
  useMarkAllInboxNotificationsAsRead: useMarkAllInboxNotificationsAsRead2,
@@ -2166,10 +2167,11 @@ function makeLiveblocksContextBundle(client) {
2166
2167
  };
2167
2168
  return bundle;
2168
2169
  }
2169
- function useInboxNotifications_withClient(client, selector, isEqual) {
2170
+ function useInboxNotifications_withClient(client, selector, isEqual, options) {
2170
2171
  const { store, notificationsPoller: poller } = getLiveblocksExtrasForClient(client);
2172
+ const queryKey = makeInboxNotificationsQueryKey(_optionalChain([options, 'optionalAccess', _13 => _13.query]));
2171
2173
  _react.useEffect.call(void 0,
2172
- () => void store.outputs.loadingNotifications.waitUntilLoaded()
2174
+ () => void store.outputs.loadingNotifications.getOrCreate(queryKey).waitUntilLoaded()
2173
2175
  // NOTE: Deliberately *not* using a dependency array here!
2174
2176
  //
2175
2177
  // It is important to call waitUntil on *every* render.
@@ -2187,16 +2189,24 @@ function useInboxNotifications_withClient(client, selector, isEqual) {
2187
2189
  };
2188
2190
  }, [poller]);
2189
2191
  return useSignal(
2190
- store.outputs.loadingNotifications.signal,
2192
+ store.outputs.loadingNotifications.getOrCreate(queryKey).signal,
2191
2193
  selector,
2192
2194
  isEqual
2193
2195
  );
2194
2196
  }
2195
- function useInboxNotificationsSuspense_withClient(client) {
2197
+ function useInboxNotificationsSuspense_withClient(client, options) {
2196
2198
  ensureNotServerSide();
2197
2199
  const store = getLiveblocksExtrasForClient(client).store;
2198
- use(store.outputs.loadingNotifications.waitUntilLoaded());
2199
- const result = useInboxNotifications_withClient(client, identity2, _core.shallow);
2200
+ const queryKey = makeInboxNotificationsQueryKey(_optionalChain([options, 'optionalAccess', _14 => _14.query]));
2201
+ use(
2202
+ store.outputs.loadingNotifications.getOrCreate(queryKey).waitUntilLoaded()
2203
+ );
2204
+ const result = useInboxNotifications_withClient(
2205
+ client,
2206
+ identity2,
2207
+ _core.shallow,
2208
+ options
2209
+ );
2200
2210
  _core.assert.call(void 0, !result.error, "Did not expect error");
2201
2211
  _core.assert.call(void 0, !result.isLoading, "Did not expect loading");
2202
2212
  return result;
@@ -2211,7 +2221,10 @@ function useUnreadInboxNotificationsCount_withClient(client) {
2211
2221
  function useUnreadInboxNotificationsCountSuspense_withClient(client) {
2212
2222
  ensureNotServerSide();
2213
2223
  const store = getLiveblocksExtrasForClient(client).store;
2214
- use(store.outputs.loadingNotifications.waitUntilLoaded());
2224
+ const queryKey = makeInboxNotificationsQueryKey(void 0);
2225
+ use(
2226
+ store.outputs.loadingNotifications.getOrCreate(queryKey).waitUntilLoaded()
2227
+ );
2215
2228
  const result = useUnreadInboxNotificationsCount_withClient(client);
2216
2229
  _core.assert.call(void 0, !result.isLoading, "Did not expect loading");
2217
2230
  _core.assert.call(void 0, !result.error, "Did not expect error");
@@ -2363,7 +2376,7 @@ function useUpdateNotificationSettings_withClient(client) {
2363
2376
  store.optimisticUpdates.remove(optimisticUpdateId);
2364
2377
  if (err instanceof _core.HttpError) {
2365
2378
  if (err.status === 422) {
2366
- const msg = [_optionalChain([err, 'access', _12 => _12.details, 'optionalAccess', _13 => _13.error]), _optionalChain([err, 'access', _14 => _14.details, 'optionalAccess', _15 => _15.reason])].filter(Boolean).join("\n");
2379
+ const msg = [_optionalChain([err, 'access', _15 => _15.details, 'optionalAccess', _16 => _16.error]), _optionalChain([err, 'access', _17 => _17.details, 'optionalAccess', _18 => _18.reason])].filter(Boolean).join("\n");
2367
2380
  _core.console.error(msg);
2368
2381
  }
2369
2382
  client[_core.kInternal].emitError(
@@ -2533,10 +2546,72 @@ function useRoomInfoSuspense_withClient(client, roomId) {
2533
2546
  error: void 0
2534
2547
  };
2535
2548
  }
2549
+ function useGroupInfo_withClient(client, groupId) {
2550
+ const groupsInfoStore = client[_core.kInternal].groupsInfoStore;
2551
+ const getGroupInfoState = _react.useCallback.call(void 0,
2552
+ () => groupsInfoStore.getItemState(groupId),
2553
+ [groupsInfoStore, groupId]
2554
+ );
2555
+ const selector = _react.useCallback.call(void 0,
2556
+ (state) => selectorFor_useGroupInfo(state, groupId),
2557
+ [groupId]
2558
+ );
2559
+ const result = useSyncExternalStoreWithSelector(
2560
+ groupsInfoStore.subscribe,
2561
+ getGroupInfoState,
2562
+ getGroupInfoState,
2563
+ selector,
2564
+ _core.shallow
2565
+ );
2566
+ _react.useEffect.call(void 0,
2567
+ () => void groupsInfoStore.enqueue(groupId)
2568
+ // NOTE: Deliberately *not* using a dependency array here!
2569
+ //
2570
+ // It is important to call groupsInfoStore.enqueue on *every* render.
2571
+ // This is harmless though, on most renders, except:
2572
+ // 1. The very first render, in which case we'll want to trigger evaluation
2573
+ // of the groupId.
2574
+ // 2. All other subsequent renders now are a no-op (from the implementation
2575
+ // of .enqueue)
2576
+ // 3. If ever the groupId gets invalidated, the group info would be fetched again.
2577
+ );
2578
+ return result;
2579
+ }
2580
+ function useGroupInfoSuspense_withClient(client, groupId) {
2581
+ const groupsInfoStore = client[_core.kInternal].groupsInfoStore;
2582
+ const getGroupInfoState = _react.useCallback.call(void 0,
2583
+ () => groupsInfoStore.getItemState(groupId),
2584
+ [groupsInfoStore, groupId]
2585
+ );
2586
+ const groupInfoState = getGroupInfoState();
2587
+ if (!groupInfoState || groupInfoState.isLoading) {
2588
+ throw groupsInfoStore.enqueue(groupId);
2589
+ }
2590
+ if (groupInfoState.error) {
2591
+ throw groupInfoState.error;
2592
+ }
2593
+ if (!groupInfoState.data) {
2594
+ throw missingGroupInfoError(groupId);
2595
+ }
2596
+ const state = _react.useSyncExternalStore.call(void 0,
2597
+ groupsInfoStore.subscribe,
2598
+ getGroupInfoState,
2599
+ getGroupInfoState
2600
+ );
2601
+ _core.assert.call(void 0, state !== void 0, "Unexpected missing state");
2602
+ _core.assert.call(void 0, !state.isLoading, "Unexpected loading state");
2603
+ _core.assert.call(void 0, !state.error, "Unexpected error state");
2604
+ _core.assert.call(void 0, state.data !== void 0, "Unexpected missing group info data");
2605
+ return {
2606
+ isLoading: false,
2607
+ info: state.data,
2608
+ error: void 0
2609
+ };
2610
+ }
2536
2611
  function useAiChats(options) {
2537
2612
  const client = useClient();
2538
2613
  const store = getUmbrellaStoreForClient(client);
2539
- const queryKey = makeAiChatsQueryKey(_optionalChain([options, 'optionalAccess', _16 => _16.query]));
2614
+ const queryKey = makeAiChatsQueryKey(_optionalChain([options, 'optionalAccess', _19 => _19.query]));
2540
2615
  useEnsureAiConnection(client);
2541
2616
  _react.useEffect.call(void 0,
2542
2617
  () => void store.outputs.aiChats.getOrCreate(queryKey).waitUntilLoaded()
@@ -2560,7 +2635,7 @@ function useAiChatsSuspense(options) {
2560
2635
  const client = useClient();
2561
2636
  const store = getUmbrellaStoreForClient(client);
2562
2637
  useEnsureAiConnection(client);
2563
- const queryKey = makeAiChatsQueryKey(_optionalChain([options, 'optionalAccess', _17 => _17.query]));
2638
+ const queryKey = makeAiChatsQueryKey(_optionalChain([options, 'optionalAccess', _20 => _20.query]));
2564
2639
  use(store.outputs.aiChats.getOrCreate(queryKey).waitUntilLoaded());
2565
2640
  const result = useAiChats(options);
2566
2641
  _core.assert.call(void 0, !result.error, "Did not expect error");
@@ -2572,7 +2647,7 @@ function useAiChatMessages(chatId, options) {
2572
2647
  const store = getUmbrellaStoreForClient(client);
2573
2648
  useEnsureAiConnection(client);
2574
2649
  _react.useEffect.call(void 0,
2575
- () => void store.outputs.messagesByChatId.getOrCreate(chatId).getOrCreate(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _18 => _18.branchId]), () => ( null))).waitUntilLoaded()
2650
+ () => void store.outputs.messagesByChatId.getOrCreate(chatId).getOrCreate(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _21 => _21.branchId]), () => ( null))).waitUntilLoaded()
2576
2651
  // NOTE: Deliberately *not* using a dependency array here!
2577
2652
  //
2578
2653
  // It is important to call waitUntil on *every* render.
@@ -2583,7 +2658,7 @@ function useAiChatMessages(chatId, options) {
2583
2658
  // *next* render after that, a *new* fetch/promise will get created.
2584
2659
  );
2585
2660
  return useSignal(
2586
- store.outputs.messagesByChatId.getOrCreate(chatId).getOrCreate(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _19 => _19.branchId]), () => ( null))).signal
2661
+ store.outputs.messagesByChatId.getOrCreate(chatId).getOrCreate(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _22 => _22.branchId]), () => ( null))).signal
2587
2662
  );
2588
2663
  }
2589
2664
  function useAiChatMessagesSuspense(chatId, options) {
@@ -2592,7 +2667,7 @@ function useAiChatMessagesSuspense(chatId, options) {
2592
2667
  const store = getUmbrellaStoreForClient(client);
2593
2668
  useEnsureAiConnection(client);
2594
2669
  use(
2595
- store.outputs.messagesByChatId.getOrCreate(chatId).getOrCreate(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _20 => _20.branchId]), () => ( null))).waitUntilLoaded()
2670
+ store.outputs.messagesByChatId.getOrCreate(chatId).getOrCreate(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _23 => _23.branchId]), () => ( null))).waitUntilLoaded()
2596
2671
  );
2597
2672
  const result = useAiChatMessages(chatId, options);
2598
2673
  _core.assert.call(void 0, !result.error, "Did not expect error");
@@ -2675,7 +2750,7 @@ function useSendAiMessage(chatId, options) {
2675
2750
  "chatId must be provided to either `useSendAiMessage` or its returned function."
2676
2751
  )));
2677
2752
  const messages = client[_core.kInternal].ai.signals.getChatMessagesForBranch\u03A3(resolvedChatId).get();
2678
- if (process.env.NODE_ENV !== "production" && !messageOptionsCopilotId && !_optionalChain([options, 'optionalAccess', _21 => _21.copilotId])) {
2753
+ if (process.env.NODE_ENV !== "production" && !messageOptionsCopilotId && !_optionalChain([options, 'optionalAccess', _24 => _24.copilotId])) {
2679
2754
  _core.console.warn(
2680
2755
  `No copilot ID was provided to useSendAiMessage when sending the message "${messageText.slice(
2681
2756
  0,
@@ -2687,8 +2762,8 @@ To ensure the correct copilot ID is used, specify it either through the hook as
2687
2762
  )}\u2026", copilotId: "co_xxx" })'`
2688
2763
  );
2689
2764
  }
2690
- const resolvedCopilotId = _nullishCoalesce(_nullishCoalesce(messageOptionsCopilotId, () => ( _optionalChain([options, 'optionalAccess', _22 => _22.copilotId]))), () => ( client[_core.kInternal].ai.getLastUsedCopilotId(resolvedChatId)));
2691
- const lastMessageId = _nullishCoalesce(_optionalChain([messages, 'access', _23 => _23[messages.length - 1], 'optionalAccess', _24 => _24.id]), () => ( null));
2765
+ const resolvedCopilotId = _nullishCoalesce(_nullishCoalesce(messageOptionsCopilotId, () => ( _optionalChain([options, 'optionalAccess', _25 => _25.copilotId]))), () => ( client[_core.kInternal].ai.getLastUsedCopilotId(resolvedChatId)));
2766
+ const lastMessageId = _nullishCoalesce(_optionalChain([messages, 'access', _26 => _26[messages.length - 1], 'optionalAccess', _27 => _27.id]), () => ( null));
2692
2767
  const content = [{ type: "text", text: messageText }];
2693
2768
  const newMessageId = client[_core.kInternal].ai[_core.kInternal].context.messagesStore.createOptimistically(
2694
2769
  resolvedChatId,
@@ -2708,10 +2783,10 @@ To ensure the correct copilot ID is used, specify it either through the hook as
2708
2783
  { id: newMessageId, parentMessageId: lastMessageId, content },
2709
2784
  targetMessageId,
2710
2785
  {
2711
- stream: _nullishCoalesce(messageOptions.stream, () => ( _optionalChain([options, 'optionalAccess', _25 => _25.stream]))),
2786
+ stream: _nullishCoalesce(messageOptions.stream, () => ( _optionalChain([options, 'optionalAccess', _28 => _28.stream]))),
2712
2787
  copilotId: resolvedCopilotId,
2713
- timeout: _nullishCoalesce(messageOptions.timeout, () => ( _optionalChain([options, 'optionalAccess', _26 => _26.timeout]))),
2714
- knowledge: _nullishCoalesce(messageOptions.knowledge, () => ( _optionalChain([options, 'optionalAccess', _27 => _27.knowledge])))
2788
+ timeout: _nullishCoalesce(messageOptions.timeout, () => ( _optionalChain([options, 'optionalAccess', _29 => _29.timeout]))),
2789
+ knowledge: _nullishCoalesce(messageOptions.knowledge, () => ( _optionalChain([options, 'optionalAccess', _30 => _30.knowledge])))
2715
2790
  }
2716
2791
  );
2717
2792
  return newMessage;
@@ -2719,10 +2794,10 @@ To ensure the correct copilot ID is used, specify it either through the hook as
2719
2794
  [
2720
2795
  client,
2721
2796
  chatId,
2722
- _optionalChain([options, 'optionalAccess', _28 => _28.copilotId]),
2723
- _optionalChain([options, 'optionalAccess', _29 => _29.stream]),
2724
- _optionalChain([options, 'optionalAccess', _30 => _30.timeout]),
2725
- _optionalChain([options, 'optionalAccess', _31 => _31.knowledge])
2797
+ _optionalChain([options, 'optionalAccess', _31 => _31.copilotId]),
2798
+ _optionalChain([options, 'optionalAccess', _32 => _32.stream]),
2799
+ _optionalChain([options, 'optionalAccess', _33 => _33.timeout]),
2800
+ _optionalChain([options, 'optionalAccess', _34 => _34.knowledge])
2726
2801
  ]
2727
2802
  );
2728
2803
  }
@@ -2736,6 +2811,7 @@ function createSharedContext(client) {
2736
2811
  useClient: useClient2,
2737
2812
  useUser: (userId) => useUser_withClient(client, userId),
2738
2813
  useRoomInfo: (roomId) => useRoomInfo_withClient(client, roomId),
2814
+ useGroupInfo: (groupId) => useGroupInfo_withClient(client, groupId),
2739
2815
  useIsInsideRoom,
2740
2816
  useErrorListener,
2741
2817
  useSyncStatus: useSyncStatus2,
@@ -2746,6 +2822,7 @@ function createSharedContext(client) {
2746
2822
  useClient: useClient2,
2747
2823
  useUser: (userId) => useUserSuspense_withClient(client, userId),
2748
2824
  useRoomInfo: (roomId) => useRoomInfoSuspense_withClient(client, roomId),
2825
+ useGroupInfo: (groupId) => useGroupInfoSuspense_withClient(client, groupId),
2749
2826
  useIsInsideRoom,
2750
2827
  useErrorListener,
2751
2828
  useSyncStatus: useSyncStatus2,
@@ -2756,7 +2833,7 @@ function createSharedContext(client) {
2756
2833
  }
2757
2834
  function useEnsureNoLiveblocksProvider(options) {
2758
2835
  const existing = useClientOrNull();
2759
- if (!_optionalChain([options, 'optionalAccess', _32 => _32.allowNesting]) && existing !== null) {
2836
+ if (!_optionalChain([options, 'optionalAccess', _35 => _35.allowNesting]) && existing !== null) {
2760
2837
  throw new Error(
2761
2838
  "You cannot nest multiple LiveblocksProvider instances in the same React tree."
2762
2839
  );
@@ -2783,6 +2860,7 @@ function LiveblocksProvider(props) {
2783
2860
  ),
2784
2861
  resolveUsers: useInitialUnlessFunction(o.resolveUsers),
2785
2862
  resolveRoomsInfo: useInitialUnlessFunction(o.resolveRoomsInfo),
2863
+ resolveGroupsInfo: useInitialUnlessFunction(o.resolveGroupsInfo),
2786
2864
  baseUrl: useInitial(
2787
2865
  // @ts-expect-error - Hidden config options
2788
2866
  o.baseUrl
@@ -2840,11 +2918,16 @@ function useUserThreadsSuspense_experimental(options = {}) {
2840
2918
  _core.assert.call(void 0, !result.isLoading, "Did not expect loading");
2841
2919
  return result;
2842
2920
  }
2843
- function useInboxNotifications() {
2844
- return useInboxNotifications_withClient(useClient(), identity2, _core.shallow);
2921
+ function useInboxNotifications(options) {
2922
+ return useInboxNotifications_withClient(
2923
+ useClient(),
2924
+ identity2,
2925
+ _core.shallow,
2926
+ options
2927
+ );
2845
2928
  }
2846
- function useInboxNotificationsSuspense() {
2847
- return useInboxNotificationsSuspense_withClient(useClient());
2929
+ function useInboxNotificationsSuspense(options) {
2930
+ return useInboxNotificationsSuspense_withClient(useClient(), options);
2848
2931
  }
2849
2932
  function useInboxNotificationThread(inboxNotificationId) {
2850
2933
  return useInboxNotificationThread_withClient(
@@ -2893,6 +2976,12 @@ function useRoomInfo(roomId) {
2893
2976
  function useRoomInfoSuspense(roomId) {
2894
2977
  return useRoomInfoSuspense_withClient(useClient(), roomId);
2895
2978
  }
2979
+ function useGroupInfo(groupId) {
2980
+ return useGroupInfo_withClient(useClient(), groupId);
2981
+ }
2982
+ function useGroupInfoSuspense(groupId) {
2983
+ return useGroupInfoSuspense_withClient(useClient(), groupId);
2984
+ }
2896
2985
  var _useInboxNotificationThread = useInboxNotificationThread;
2897
2986
  var _useUser = useUser;
2898
2987
  var _useUserSuspense = useUserSuspense;
@@ -2905,7 +2994,7 @@ var _useAiChatSuspense = useAiChatSuspense;
2905
2994
  var _useAiChatMessages = useAiChatMessages;
2906
2995
  var _useAiChatMessagesSuspense = useAiChatMessagesSuspense;
2907
2996
  function useSyncStatus_withClient(client, options) {
2908
- const smooth = useInitial(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _33 => _33.smooth]), () => ( false)));
2997
+ const smooth = useInitial(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _36 => _36.smooth]), () => ( false)));
2909
2998
  if (smooth) {
2910
2999
  return useSyncStatusSmooth_withClient(client);
2911
3000
  } else {
@@ -3084,8 +3173,8 @@ function makeRoomExtrasForClient(client) {
3084
3173
  if (innerError.status === 403) {
3085
3174
  const detailedMessage = [
3086
3175
  innerError.message,
3087
- _optionalChain([innerError, 'access', _34 => _34.details, 'optionalAccess', _35 => _35.suggestion]),
3088
- _optionalChain([innerError, 'access', _36 => _36.details, 'optionalAccess', _37 => _37.docs])
3176
+ _optionalChain([innerError, 'access', _37 => _37.details, 'optionalAccess', _38 => _38.suggestion]),
3177
+ _optionalChain([innerError, 'access', _39 => _39.details, 'optionalAccess', _40 => _40.docs])
3089
3178
  ].filter(Boolean).join("\n");
3090
3179
  _core.console.error(detailedMessage);
3091
3180
  }
@@ -3380,7 +3469,7 @@ function RoomProviderInner(props) {
3380
3469
  }
3381
3470
  function useRoom(options) {
3382
3471
  const room = useRoomOrNull();
3383
- if (room === null && !_optionalChain([options, 'optionalAccess', _38 => _38.allowOutsideRoom])) {
3472
+ if (room === null && !_optionalChain([options, 'optionalAccess', _41 => _41.allowOutsideRoom])) {
3384
3473
  throw new Error("RoomProvider is missing from the React tree.");
3385
3474
  }
3386
3475
  return room;
@@ -3424,10 +3513,10 @@ function useYjsProvider() {
3424
3513
  function useCreateTextMention() {
3425
3514
  const room = useRoom();
3426
3515
  return _react.useCallback.call(void 0,
3427
- (userId, mentionId) => {
3428
- room[_core.kInternal].createTextMention(userId, mentionId).catch((err) => {
3516
+ (mentionId, mention) => {
3517
+ room[_core.kInternal].createTextMention(mentionId, mention).catch((err) => {
3429
3518
  _core.console.error(
3430
- `Cannot create text mention for user '${userId}' and mention '${mentionId}'`,
3519
+ `Cannot create text mention for mention '${mentionId}'`,
3431
3520
  err
3432
3521
  );
3433
3522
  });
@@ -3730,7 +3819,7 @@ function useCreateRoomThread(roomId) {
3730
3819
  thread: newThread,
3731
3820
  roomId
3732
3821
  });
3733
- const attachmentIds = _optionalChain([attachments, 'optionalAccess', _39 => _39.map, 'call', _40 => _40((attachment) => attachment.id)]);
3822
+ const attachmentIds = _optionalChain([attachments, 'optionalAccess', _42 => _42.map, 'call', _43 => _43((attachment) => attachment.id)]);
3734
3823
  client[_core.kInternal].httpClient.createThread({
3735
3824
  roomId,
3736
3825
  threadId,
@@ -3770,7 +3859,7 @@ function useDeleteRoomThread(roomId) {
3770
3859
  const { store, onMutationFailure } = getRoomExtrasForClient(client);
3771
3860
  const userId = getCurrentUserId(client);
3772
3861
  const existing = store.outputs.threads.get().get(threadId);
3773
- if (_optionalChain([existing, 'optionalAccess', _41 => _41.comments, 'optionalAccess', _42 => _42[0], 'optionalAccess', _43 => _43.userId]) !== userId) {
3862
+ if (_optionalChain([existing, 'optionalAccess', _44 => _44.comments, 'optionalAccess', _45 => _45[0], 'optionalAccess', _46 => _46.userId]) !== userId) {
3774
3863
  throw new Error("Only the thread creator can delete the thread");
3775
3864
  }
3776
3865
  const optimisticId = store.optimisticUpdates.add({
@@ -3858,7 +3947,7 @@ function useCreateRoomComment(roomId) {
3858
3947
  type: "create-comment",
3859
3948
  comment
3860
3949
  });
3861
- const attachmentIds = _optionalChain([attachments, 'optionalAccess', _44 => _44.map, 'call', _45 => _45((attachment) => attachment.id)]);
3950
+ const attachmentIds = _optionalChain([attachments, 'optionalAccess', _47 => _47.map, 'call', _48 => _48((attachment) => attachment.id)]);
3862
3951
  client[_core.kInternal].httpClient.createComment({ roomId, threadId, commentId, body, attachmentIds }).then(
3863
3952
  (newComment) => {
3864
3953
  store.createComment(newComment, optimisticId);
@@ -3914,7 +4003,7 @@ function useEditRoomComment(roomId) {
3914
4003
  attachments: _nullishCoalesce(attachments, () => ( []))
3915
4004
  }
3916
4005
  });
3917
- const attachmentIds = _optionalChain([attachments, 'optionalAccess', _46 => _46.map, 'call', _47 => _47((attachment) => attachment.id)]);
4006
+ const attachmentIds = _optionalChain([attachments, 'optionalAccess', _49 => _49.map, 'call', _50 => _50((attachment) => attachment.id)]);
3918
4007
  client[_core.kInternal].httpClient.editComment({ roomId, threadId, commentId, body, attachmentIds }).then(
3919
4008
  (editedComment) => {
3920
4009
  store.editComment(threadId, optimisticId, editedComment);
@@ -4255,7 +4344,7 @@ function useRoomThreadSubscription(roomId, threadId) {
4255
4344
  }
4256
4345
  return {
4257
4346
  status: "subscribed",
4258
- unreadSince: _nullishCoalesce(_optionalChain([notification, 'optionalAccess', _48 => _48.readAt]), () => ( null)),
4347
+ unreadSince: _nullishCoalesce(_optionalChain([notification, 'optionalAccess', _51 => _51.readAt]), () => ( null)),
4259
4348
  subscribe,
4260
4349
  unsubscribe
4261
4350
  };
@@ -4466,7 +4555,7 @@ function useThreadsSuspense(options = {}) {
4466
4555
  return result;
4467
4556
  }
4468
4557
  function selectorFor_useAttachmentUrl(state) {
4469
- if (state === void 0 || _optionalChain([state, 'optionalAccess', _49 => _49.isLoading])) {
4558
+ if (state === void 0 || _optionalChain([state, 'optionalAccess', _52 => _52.isLoading])) {
4470
4559
  return _nullishCoalesce(state, () => ( { isLoading: true }));
4471
4560
  }
4472
4561
  if (state.error) {
@@ -4691,5 +4780,7 @@ var _useUpdateMyPresence = useUpdateMyPresence;
4691
4780
 
4692
4781
 
4693
4782
 
4694
- 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._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;
4695
- //# sourceMappingURL=chunk-EEINMYNI.cjs.map
4783
+
4784
+
4785
+ 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;
4786
+ //# sourceMappingURL=chunk-W2H56LB3.cjs.map