@liveblocks/react 2.7.2 → 2.8.0-beta2

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.
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/version.ts
2
2
  var PKG_NAME = "@liveblocks/react";
3
- var PKG_VERSION = "2.7.2";
3
+ var PKG_VERSION = "2.8.0-beta2";
4
4
  var PKG_FORMAT = "cjs";
5
5
 
6
6
  // src/ClientSideSuspense.tsx
@@ -34,6 +34,7 @@ function useIsInsideRoom() {
34
34
 
35
35
 
36
36
 
37
+
37
38
  var _core = require('@liveblocks/core');
38
39
 
39
40
 
@@ -90,7 +91,6 @@ function matchesOperator(value, op) {
90
91
  }
91
92
 
92
93
  // src/lib/retry-error.ts
93
-
94
94
  var MAX_ERROR_RETRY_COUNT = 5;
95
95
  var ERROR_RETRY_INTERVAL = 5e3;
96
96
  function retryError(action, retryCount) {
@@ -100,23 +100,6 @@ function retryError(action, retryCount) {
100
100
  void action();
101
101
  }, timeout);
102
102
  }
103
- async function autoRetry(promiseFn, maxTries, backoff) {
104
- const fallbackBackoff = backoff.length > 0 ? backoff[backoff.length - 1] : 0;
105
- let attempt = 0;
106
- while (true) {
107
- attempt++;
108
- const promise = promiseFn();
109
- try {
110
- return await promise;
111
- } catch (err) {
112
- if (attempt >= maxTries) {
113
- throw new Error(`Failed after ${maxTries} attempts: ${String(err)}`);
114
- }
115
- }
116
- const delay = _nullishCoalesce(backoff[attempt - 1], () => ( fallbackBackoff));
117
- await _core.wait.call(void 0, delay);
118
- }
119
- }
120
103
 
121
104
  // src/lib/shallow2.ts
122
105
 
@@ -205,9 +188,6 @@ var INBOX_NOTIFICATIONS_QUERY = "INBOX_NOTIFICATIONS";
205
188
  function makeNotificationSettingsQueryKey(roomId) {
206
189
  return `${roomId}:NOTIFICATION_SETTINGS`;
207
190
  }
208
- function makeVersionsQueryKey(roomId) {
209
- return `${roomId}-VERSIONS`;
210
- }
211
191
  var UmbrellaStore = class {
212
192
  constructor() {
213
193
  this._prevState = null;
@@ -223,6 +203,7 @@ var UmbrellaStore = class {
223
203
  this.getThreads = this.getThreads.bind(this);
224
204
  this.getInboxNotifications = this.getInboxNotifications.bind(this);
225
205
  this.getInboxNotificationsAsync = this.getInboxNotificationsAsync.bind(this);
206
+ this.getVersions = this.getVersions.bind(this);
226
207
  this.subscribeThreads = this.subscribeThreads.bind(this);
227
208
  this.subscribeInboxNotifications = this.subscribeInboxNotifications.bind(this);
228
209
  this.subscribeNotificationSettings = this.subscribeNotificationSettings.bind(this);
@@ -272,19 +253,8 @@ var UmbrellaStore = class {
272
253
  settings: _core.nn.call(void 0, state.notificationSettingsByRoomId[roomId])
273
254
  };
274
255
  }
275
- getVersionsAsync(roomId) {
276
- const state = this.get();
277
- const query = state.queries[makeVersionsQueryKey(roomId)];
278
- if (query === void 0 || query.isLoading) {
279
- return QUERY_STATE_LOADING;
280
- }
281
- if (query.error !== void 0) {
282
- return query;
283
- }
284
- return {
285
- isLoading: false,
286
- versions: _core.nn.call(void 0, state.versionsByRoomId[roomId])
287
- };
256
+ getVersions() {
257
+ return this.get();
288
258
  }
289
259
  /**
290
260
  * @private Only used by the E2E test suite.
@@ -629,19 +599,19 @@ var UmbrellaStore = class {
629
599
  }
630
600
  };
631
601
  function internalToExternalState(state) {
632
- const computed = {
633
- threadsById: { ...state.rawThreadsById },
634
- inboxNotificationsById: { ...state.inboxNotificationsById },
635
- notificationSettingsByRoomId: { ...state.notificationSettingsByRoomId }
602
+ const output = {
603
+ threads: { ...state.rawThreadsById },
604
+ inboxNotifications: { ...state.inboxNotificationsById },
605
+ notificationSettings: { ...state.notificationSettingsByRoomId }
636
606
  };
637
607
  for (const optimisticUpdate of state.optimisticUpdates) {
638
608
  switch (optimisticUpdate.type) {
639
609
  case "create-thread": {
640
- computed.threadsById[optimisticUpdate.thread.id] = optimisticUpdate.thread;
610
+ output.threads[optimisticUpdate.thread.id] = optimisticUpdate.thread;
641
611
  break;
642
612
  }
643
613
  case "edit-thread-metadata": {
644
- const thread = computed.threadsById[optimisticUpdate.threadId];
614
+ const thread = output.threads[optimisticUpdate.threadId];
645
615
  if (thread === void 0) {
646
616
  break;
647
617
  }
@@ -651,7 +621,7 @@ function internalToExternalState(state) {
651
621
  if (thread.updatedAt !== void 0 && thread.updatedAt > optimisticUpdate.updatedAt) {
652
622
  break;
653
623
  }
654
- computed.threadsById[thread.id] = {
624
+ output.threads[thread.id] = {
655
625
  ...thread,
656
626
  updatedAt: optimisticUpdate.updatedAt,
657
627
  metadata: {
@@ -662,51 +632,49 @@ function internalToExternalState(state) {
662
632
  break;
663
633
  }
664
634
  case "mark-thread-as-resolved": {
665
- const thread = computed.threadsById[optimisticUpdate.threadId];
635
+ const thread = output.threads[optimisticUpdate.threadId];
666
636
  if (thread === void 0) {
667
637
  break;
668
638
  }
669
639
  if (thread.deletedAt !== void 0) {
670
640
  break;
671
641
  }
672
- computed.threadsById[thread.id] = {
642
+ output.threads[thread.id] = {
673
643
  ...thread,
674
644
  resolved: true
675
645
  };
676
646
  break;
677
647
  }
678
648
  case "mark-thread-as-unresolved": {
679
- const thread = computed.threadsById[optimisticUpdate.threadId];
649
+ const thread = output.threads[optimisticUpdate.threadId];
680
650
  if (thread === void 0) {
681
651
  break;
682
652
  }
683
653
  if (thread.deletedAt !== void 0) {
684
654
  break;
685
655
  }
686
- computed.threadsById[thread.id] = {
656
+ output.threads[thread.id] = {
687
657
  ...thread,
688
658
  resolved: false
689
659
  };
690
660
  break;
691
661
  }
692
662
  case "create-comment": {
693
- const thread = computed.threadsById[optimisticUpdate.comment.threadId];
663
+ const thread = output.threads[optimisticUpdate.comment.threadId];
694
664
  if (thread === void 0) {
695
665
  break;
696
666
  }
697
- computed.threadsById[thread.id] = applyUpsertComment(
667
+ output.threads[thread.id] = applyUpsertComment(
698
668
  thread,
699
669
  optimisticUpdate.comment
700
670
  );
701
- const inboxNotification = Object.values(
702
- computed.inboxNotificationsById
703
- ).find(
671
+ const inboxNotification = Object.values(output.inboxNotifications).find(
704
672
  (notification) => notification.kind === "thread" && notification.threadId === thread.id
705
673
  );
706
674
  if (inboxNotification === void 0) {
707
675
  break;
708
676
  }
709
- computed.inboxNotificationsById[inboxNotification.id] = {
677
+ output.inboxNotifications[inboxNotification.id] = {
710
678
  ...inboxNotification,
711
679
  notifiedAt: optimisticUpdate.comment.createdAt,
712
680
  readAt: optimisticUpdate.comment.createdAt
@@ -714,22 +682,22 @@ function internalToExternalState(state) {
714
682
  break;
715
683
  }
716
684
  case "edit-comment": {
717
- const thread = computed.threadsById[optimisticUpdate.comment.threadId];
685
+ const thread = output.threads[optimisticUpdate.comment.threadId];
718
686
  if (thread === void 0) {
719
687
  break;
720
688
  }
721
- computed.threadsById[thread.id] = applyUpsertComment(
689
+ output.threads[thread.id] = applyUpsertComment(
722
690
  thread,
723
691
  optimisticUpdate.comment
724
692
  );
725
693
  break;
726
694
  }
727
695
  case "delete-comment": {
728
- const thread = computed.threadsById[optimisticUpdate.threadId];
696
+ const thread = output.threads[optimisticUpdate.threadId];
729
697
  if (thread === void 0) {
730
698
  break;
731
699
  }
732
- computed.threadsById[thread.id] = applyDeleteComment(
700
+ output.threads[thread.id] = applyDeleteComment(
733
701
  thread,
734
702
  optimisticUpdate.commentId,
735
703
  optimisticUpdate.deletedAt
@@ -737,12 +705,12 @@ function internalToExternalState(state) {
737
705
  break;
738
706
  }
739
707
  case "delete-thread": {
740
- const thread = computed.threadsById[optimisticUpdate.threadId];
708
+ const thread = output.threads[optimisticUpdate.threadId];
741
709
  if (thread === void 0) {
742
710
  break;
743
711
  }
744
- computed.threadsById[optimisticUpdate.threadId] = {
745
- ...thread,
712
+ output.threads[optimisticUpdate.threadId] = {
713
+ ...output.threads[optimisticUpdate.threadId],
746
714
  deletedAt: optimisticUpdate.deletedAt,
747
715
  updatedAt: optimisticUpdate.deletedAt,
748
716
  comments: []
@@ -750,11 +718,11 @@ function internalToExternalState(state) {
750
718
  break;
751
719
  }
752
720
  case "add-reaction": {
753
- const thread = computed.threadsById[optimisticUpdate.threadId];
721
+ const thread = output.threads[optimisticUpdate.threadId];
754
722
  if (thread === void 0) {
755
723
  break;
756
724
  }
757
- computed.threadsById[thread.id] = applyAddReaction(
725
+ output.threads[thread.id] = applyAddReaction(
758
726
  thread,
759
727
  optimisticUpdate.commentId,
760
728
  optimisticUpdate.reaction
@@ -762,11 +730,11 @@ function internalToExternalState(state) {
762
730
  break;
763
731
  }
764
732
  case "remove-reaction": {
765
- const thread = computed.threadsById[optimisticUpdate.threadId];
733
+ const thread = output.threads[optimisticUpdate.threadId];
766
734
  if (thread === void 0) {
767
735
  break;
768
736
  }
769
- computed.threadsById[thread.id] = applyRemoveReaction(
737
+ output.threads[thread.id] = applyRemoveReaction(
770
738
  thread,
771
739
  optimisticUpdate.commentId,
772
740
  optimisticUpdate.emoji,
@@ -776,41 +744,36 @@ function internalToExternalState(state) {
776
744
  break;
777
745
  }
778
746
  case "mark-inbox-notification-as-read": {
779
- const ibn = computed.inboxNotificationsById[optimisticUpdate.inboxNotificationId];
780
- if (ibn === void 0) {
781
- break;
782
- }
783
- computed.inboxNotificationsById[optimisticUpdate.inboxNotificationId] = { ...ibn, readAt: optimisticUpdate.readAt };
747
+ output.inboxNotifications[optimisticUpdate.inboxNotificationId] = {
748
+ ...state.inboxNotificationsById[optimisticUpdate.inboxNotificationId],
749
+ readAt: optimisticUpdate.readAt
750
+ };
784
751
  break;
785
752
  }
786
753
  case "mark-all-inbox-notifications-as-read": {
787
- for (const id in computed.inboxNotificationsById) {
788
- const ibn = computed.inboxNotificationsById[id];
789
- if (ibn === void 0) {
790
- break;
791
- }
792
- computed.inboxNotificationsById[id] = {
793
- ...ibn,
754
+ for (const id in output.inboxNotifications) {
755
+ output.inboxNotifications[id] = {
756
+ ...output.inboxNotifications[id],
794
757
  readAt: optimisticUpdate.readAt
795
758
  };
796
759
  }
797
760
  break;
798
761
  }
799
762
  case "delete-inbox-notification": {
800
- delete computed.inboxNotificationsById[optimisticUpdate.inboxNotificationId];
763
+ const {
764
+ [optimisticUpdate.inboxNotificationId]: _,
765
+ ...inboxNotifications
766
+ } = output.inboxNotifications;
767
+ output.inboxNotifications = inboxNotifications;
801
768
  break;
802
769
  }
803
770
  case "delete-all-inbox-notifications": {
804
- computed.inboxNotificationsById = {};
771
+ output.inboxNotifications = {};
805
772
  break;
806
773
  }
807
774
  case "update-notification-settings": {
808
- const settings = computed.notificationSettingsByRoomId[optimisticUpdate.roomId];
809
- if (settings === void 0) {
810
- break;
811
- }
812
- computed.notificationSettingsByRoomId[optimisticUpdate.roomId] = {
813
- ...settings,
775
+ output.notificationSettings[optimisticUpdate.roomId] = {
776
+ ...output.notificationSettings[optimisticUpdate.roomId],
814
777
  ...optimisticUpdate.settings
815
778
  };
816
779
  }
@@ -818,26 +781,23 @@ function internalToExternalState(state) {
818
781
  }
819
782
  const cleanedThreads = (
820
783
  // Don't expose any soft-deleted threads
821
- Object.values(computed.threadsById).filter((thread) => !thread.deletedAt).filter(
822
- (thread) => (
823
- // Only keep a thread if there is at least one non-deleted comment
824
- thread.comments.some((c) => c.deletedAt === void 0)
825
- )
784
+ Object.values(output.threads).filter(
785
+ (thread) => !thread.deletedAt
826
786
  )
827
787
  );
828
788
  const cleanedNotifications = (
829
789
  // Sort so that the most recent notifications are first
830
- Object.values(computed.inboxNotificationsById).filter(
831
- (ibn) => ibn.kind === "thread" ? computed.threadsById[ibn.threadId] && _optionalChain([computed, 'access', _ => _.threadsById, 'access', _2 => _2[ibn.threadId], 'optionalAccess', _3 => _3.deletedAt]) === void 0 : true
832
- ).sort((a, b) => b.notifiedAt.getTime() - a.notifiedAt.getTime())
790
+ Object.values(output.inboxNotifications).sort(
791
+ (a, b) => b.notifiedAt.getTime() - a.notifiedAt.getTime()
792
+ )
833
793
  );
834
794
  return {
835
795
  inboxNotifications: cleanedNotifications,
836
- inboxNotificationsById: computed.inboxNotificationsById,
837
- notificationSettingsByRoomId: computed.notificationSettingsByRoomId,
796
+ inboxNotificationsById: output.inboxNotifications,
797
+ notificationSettingsByRoomId: output.notificationSettings,
838
798
  queries: state.queries,
839
799
  threads: cleanedThreads,
840
- threadsById: computed.threadsById,
800
+ threadsById: output.threads,
841
801
  versionsByRoomId: state.versionsByRoomId
842
802
  };
843
803
  }
@@ -907,7 +867,7 @@ function applyUpsertComment(thread, comment) {
907
867
  );
908
868
  if (existingComment === void 0) {
909
869
  const updatedAt = new Date(
910
- Math.max(_optionalChain([thread, 'access', _4 => _4.updatedAt, 'optionalAccess', _5 => _5.getTime, 'call', _6 => _6()]) || 0, comment.createdAt.getTime())
870
+ Math.max(_optionalChain([thread, 'access', _2 => _2.updatedAt, 'optionalAccess', _3 => _3.getTime, 'call', _4 => _4()]) || 0, comment.createdAt.getTime())
911
871
  );
912
872
  const updatedThread = {
913
873
  ...thread,
@@ -927,8 +887,8 @@ function applyUpsertComment(thread, comment) {
927
887
  ...thread,
928
888
  updatedAt: new Date(
929
889
  Math.max(
930
- _optionalChain([thread, 'access', _7 => _7.updatedAt, 'optionalAccess', _8 => _8.getTime, 'call', _9 => _9()]) || 0,
931
- _optionalChain([comment, 'access', _10 => _10.editedAt, 'optionalAccess', _11 => _11.getTime, 'call', _12 => _12()]) || comment.createdAt.getTime()
890
+ _optionalChain([thread, 'access', _5 => _5.updatedAt, 'optionalAccess', _6 => _6.getTime, 'call', _7 => _7()]) || 0,
891
+ _optionalChain([comment, 'access', _8 => _8.editedAt, 'optionalAccess', _9 => _9.getTime, 'call', _10 => _10()]) || comment.createdAt.getTime()
932
892
  )
933
893
  ),
934
894
  comments: updatedComments
@@ -954,14 +914,17 @@ function applyDeleteComment(thread, commentId, deletedAt) {
954
914
  (comment) => comment.id === commentId ? {
955
915
  ...comment,
956
916
  deletedAt,
957
- body: void 0
917
+ // We optimistically remove the comment body and attachments when marking it as deleted
918
+ body: void 0,
919
+ attachments: []
958
920
  } : comment
959
921
  );
960
- if (updatedComments.every((comment) => comment.deletedAt !== void 0)) {
922
+ if (!updatedComments.some((comment) => comment.deletedAt === void 0)) {
961
923
  return {
962
924
  ...thread,
963
925
  deletedAt,
964
- updatedAt: deletedAt
926
+ updatedAt: deletedAt,
927
+ comments: []
965
928
  };
966
929
  }
967
930
  return {
@@ -992,7 +955,7 @@ function applyAddReaction(thread, commentId, reaction) {
992
955
  return {
993
956
  ...thread,
994
957
  updatedAt: new Date(
995
- Math.max(reaction.createdAt.getTime(), _optionalChain([thread, 'access', _13 => _13.updatedAt, 'optionalAccess', _14 => _14.getTime, 'call', _15 => _15()]) || 0)
958
+ Math.max(reaction.createdAt.getTime(), _optionalChain([thread, 'access', _11 => _11.updatedAt, 'optionalAccess', _12 => _12.getTime, 'call', _13 => _13()]) || 0)
996
959
  ),
997
960
  comments: updatedComments
998
961
  };
@@ -1025,7 +988,7 @@ function applyRemoveReaction(thread, commentId, emoji, userId, removedAt) {
1025
988
  return {
1026
989
  ...thread,
1027
990
  updatedAt: new Date(
1028
- Math.max(removedAt.getTime(), _optionalChain([thread, 'access', _16 => _16.updatedAt, 'optionalAccess', _17 => _17.getTime, 'call', _18 => _18()]) || 0)
991
+ Math.max(removedAt.getTime(), _optionalChain([thread, 'access', _14 => _14.updatedAt, 'optionalAccess', _15 => _15.getTime, 'call', _16 => _16()]) || 0)
1029
992
  ),
1030
993
  comments: updatedComments
1031
994
  };
@@ -1092,7 +1055,7 @@ function selectorFor_useUnreadInboxNotificationsCount(result) {
1092
1055
  };
1093
1056
  }
1094
1057
  function selectorFor_useUser(state, userId) {
1095
- if (state === void 0 || _optionalChain([state, 'optionalAccess', _19 => _19.isLoading])) {
1058
+ if (state === void 0 || _optionalChain([state, 'optionalAccess', _17 => _17.isLoading])) {
1096
1059
  return _nullishCoalesce(state, () => ( { isLoading: true }));
1097
1060
  }
1098
1061
  if (state.error) {
@@ -1110,7 +1073,7 @@ function selectorFor_useUser(state, userId) {
1110
1073
  };
1111
1074
  }
1112
1075
  function selectorFor_useRoomInfo(state, roomId) {
1113
- if (state === void 0 || _optionalChain([state, 'optionalAccess', _20 => _20.isLoading])) {
1076
+ if (state === void 0 || _optionalChain([state, 'optionalAccess', _18 => _18.isLoading])) {
1114
1077
  return _nullishCoalesce(state, () => ( { isLoading: true }));
1115
1078
  }
1116
1079
  if (state.error) {
@@ -1206,7 +1169,7 @@ function makeExtrasForClient(client) {
1206
1169
  const waitUntilInboxNotificationsLoaded = _core.memoizeOnSuccess.call(void 0, async () => {
1207
1170
  store.setQueryLoading(INBOX_NOTIFICATIONS_QUERY);
1208
1171
  try {
1209
- await autoRetry(
1172
+ await _core.autoRetry.call(void 0,
1210
1173
  () => fetchInboxNotifications(),
1211
1174
  5,
1212
1175
  [5e3, 5e3, 1e4, 15e3]
@@ -1220,21 +1183,23 @@ function makeExtrasForClient(client) {
1220
1183
  void waitUntilInboxNotificationsLoaded().catch(() => {
1221
1184
  });
1222
1185
  }
1223
- function startPolling() {
1224
- pollerSubscribers++;
1225
- poller.start(POLLING_INTERVAL);
1226
- return () => {
1227
- if (pollerSubscribers <= 0) {
1228
- console.warn(
1229
- `Internal unexpected behavior. Cannot decrease subscriber count for query "${INBOX_NOTIFICATIONS_QUERY}"`
1230
- );
1231
- return;
1232
- }
1233
- pollerSubscribers--;
1234
- if (pollerSubscribers <= 0) {
1235
- poller.stop();
1236
- }
1237
- };
1186
+ function useEnableInboxNotificationsPolling() {
1187
+ _react.useEffect.call(void 0, () => {
1188
+ pollerSubscribers++;
1189
+ poller.start(POLLING_INTERVAL);
1190
+ return () => {
1191
+ if (pollerSubscribers <= 0) {
1192
+ console.warn(
1193
+ `Internal unexpected behavior. Cannot decrease subscriber count for query "${INBOX_NOTIFICATIONS_QUERY}"`
1194
+ );
1195
+ return;
1196
+ }
1197
+ pollerSubscribers--;
1198
+ if (pollerSubscribers <= 0) {
1199
+ poller.stop();
1200
+ }
1201
+ };
1202
+ }, []);
1238
1203
  }
1239
1204
  const userThreadsPoller = _core.makePoller.call(void 0, refreshUserThreads);
1240
1205
  let isFetchingUserThreadsUpdates = false;
@@ -1319,7 +1284,7 @@ function makeExtrasForClient(client) {
1319
1284
  }
1320
1285
  return {
1321
1286
  store,
1322
- startPolling,
1287
+ useEnableInboxNotificationsPolling,
1323
1288
  waitUntilInboxNotificationsLoaded,
1324
1289
  loadInboxNotifications,
1325
1290
  incrementUserThreadsQuerySubscribers,
@@ -1364,9 +1329,11 @@ function makeLiveblocksContextBundle(client) {
1364
1329
  return bundle;
1365
1330
  }
1366
1331
  function useInboxNotifications_withClient(client) {
1367
- const { loadInboxNotifications, store, startPolling } = getExtrasForClient(client);
1368
- _react.useEffect.call(void 0, loadInboxNotifications, [loadInboxNotifications]);
1369
- _react.useEffect.call(void 0, startPolling, [startPolling]);
1332
+ const { loadInboxNotifications, store, useEnableInboxNotificationsPolling } = getExtrasForClient(client);
1333
+ _react.useEffect.call(void 0, () => {
1334
+ loadInboxNotifications();
1335
+ }, [loadInboxNotifications]);
1336
+ useEnableInboxNotificationsPolling();
1370
1337
  return _withselectorjs.useSyncExternalStoreWithSelector.call(void 0,
1371
1338
  store.subscribeInboxNotifications,
1372
1339
  store.getInboxNotificationsAsync,
@@ -1384,9 +1351,11 @@ function useInboxNotificationsSuspense_withClient(client) {
1384
1351
  return result;
1385
1352
  }
1386
1353
  function useUnreadInboxNotificationsCount_withClient(client) {
1387
- const { store, loadInboxNotifications, startPolling } = getExtrasForClient(client);
1388
- _react.useEffect.call(void 0, loadInboxNotifications, [loadInboxNotifications]);
1389
- _react.useEffect.call(void 0, startPolling, [startPolling]);
1354
+ const { store, loadInboxNotifications, useEnableInboxNotificationsPolling } = getExtrasForClient(client);
1355
+ _react.useEffect.call(void 0, () => {
1356
+ loadInboxNotifications();
1357
+ }, [loadInboxNotifications]);
1358
+ useEnableInboxNotificationsPolling();
1390
1359
  return _withselectorjs.useSyncExternalStoreWithSelector.call(void 0,
1391
1360
  store.subscribeInboxNotifications,
1392
1361
  store.getInboxNotificationsAsync,
@@ -1639,7 +1608,7 @@ function createSharedContext(client) {
1639
1608
  }
1640
1609
  function useEnsureNoLiveblocksProvider(options) {
1641
1610
  const existing = useClientOrNull();
1642
- if (!_optionalChain([options, 'optionalAccess', _21 => _21.allowNesting]) && existing !== null) {
1611
+ if (!_optionalChain([options, 'optionalAccess', _19 => _19.allowNesting]) && existing !== null) {
1643
1612
  throw new Error(
1644
1613
  "You cannot nest multiple LiveblocksProvider instances in the same React tree."
1645
1614
  );
@@ -1950,6 +1919,7 @@ var _client = require('@liveblocks/client');
1950
1919
 
1951
1920
 
1952
1921
 
1922
+
1953
1923
  // src/use-scroll-to-comment-on-load-effect.ts
1954
1924
 
1955
1925
  function handleScrollToCommentOnLoad(shouldScrollOnLoad, state) {
@@ -2049,7 +2019,7 @@ function getCurrentUserId(room) {
2049
2019
  }
2050
2020
  function handleApiError(err) {
2051
2021
  const message = `Request failed with status ${err.status}: ${err.message}`;
2052
- if (_optionalChain([err, 'access', _22 => _22.details, 'optionalAccess', _23 => _23.error]) === "FORBIDDEN") {
2022
+ if (_optionalChain([err, 'access', _20 => _20.details, 'optionalAccess', _21 => _21.error]) === "FORBIDDEN") {
2053
2023
  const detailedMessage = [message, err.details.suggestion, err.details.docs].filter(Boolean).join("\n");
2054
2024
  _core.console.error(detailedMessage);
2055
2025
  }
@@ -2138,7 +2108,7 @@ function makeExtrasForClient2(client) {
2138
2108
  }
2139
2109
  }
2140
2110
  async function getRoomVersions(room, { retryCount } = { retryCount: 0 }) {
2141
- const queryKey = makeVersionsQueryKey(room.id);
2111
+ const queryKey = getVersionsQueryKey(room.id);
2142
2112
  const existingRequest = requestsByQuery.get(queryKey);
2143
2113
  if (existingRequest !== void 0) return existingRequest;
2144
2114
  const request = room[_core.kInternal].listTextVersions();
@@ -2289,6 +2259,7 @@ function makeRoomContextBundle(client) {
2289
2259
  useRemoveReaction,
2290
2260
  useMarkThreadAsRead,
2291
2261
  useThreadSubscription,
2262
+ useAttachmentUrl,
2292
2263
  useHistoryVersions,
2293
2264
  useHistoryVersionData,
2294
2265
  useRoomNotificationSettings,
@@ -2334,6 +2305,7 @@ function makeRoomContextBundle(client) {
2334
2305
  useRemoveReaction,
2335
2306
  useMarkThreadAsRead,
2336
2307
  useThreadSubscription,
2308
+ useAttachmentUrl: useAttachmentUrlSuspense,
2337
2309
  // TODO: useHistoryVersionData: useHistoryVersionDataSuspense,
2338
2310
  useHistoryVersions: useHistoryVersionsSuspense,
2339
2311
  useRoomNotificationSettings: useRoomNotificationSettingsSuspense,
@@ -2487,7 +2459,7 @@ function useStatus() {
2487
2459
  return useSyncExternalStore2(subscribe, getSnapshot, getServerSnapshot);
2488
2460
  }
2489
2461
  function useStorageStatus(options) {
2490
- const smooth = useInitial(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _24 => _24.smooth]), () => ( false)));
2462
+ const smooth = useInitial(_nullishCoalesce(_optionalChain([options, 'optionalAccess', _22 => _22.smooth]), () => ( false)));
2491
2463
  if (smooth) {
2492
2464
  return useStorageStatusSmooth();
2493
2465
  } else {
@@ -2800,6 +2772,7 @@ function useCreateThread() {
2800
2772
  (options) => {
2801
2773
  const body = options.body;
2802
2774
  const metadata = _nullishCoalesce(options.metadata, () => ( {}));
2775
+ const attachments = options.attachments;
2803
2776
  const threadId = _core.createThreadId.call(void 0, );
2804
2777
  const commentId = _core.createCommentId.call(void 0, );
2805
2778
  const createdAt = /* @__PURE__ */ new Date();
@@ -2811,7 +2784,8 @@ function useCreateThread() {
2811
2784
  type: "comment",
2812
2785
  userId: getCurrentUserId(room),
2813
2786
  body,
2814
- reactions: []
2787
+ reactions: [],
2788
+ attachments: _nullishCoalesce(attachments, () => ( []))
2815
2789
  };
2816
2790
  const newThread = {
2817
2791
  id: threadId,
@@ -2829,7 +2803,8 @@ function useCreateThread() {
2829
2803
  thread: newThread,
2830
2804
  roomId: room.id
2831
2805
  });
2832
- room.createThread({ threadId, commentId, body, metadata }).then(
2806
+ const attachmentIds = _optionalChain([attachments, 'optionalAccess', _23 => _23.map, 'call', _24 => _24((attachment) => attachment.id)]);
2807
+ room.createThread({ threadId, commentId, body, metadata, attachmentIds }).then(
2833
2808
  (thread) => {
2834
2809
  store.createThread(optimisticUpdateId, thread);
2835
2810
  },
@@ -2927,7 +2902,7 @@ function useCreateComment() {
2927
2902
  const client = useClient();
2928
2903
  const room = useRoom();
2929
2904
  return React5.useCallback(
2930
- ({ threadId, body }) => {
2905
+ ({ threadId, body, attachments }) => {
2931
2906
  const commentId = _core.createCommentId.call(void 0, );
2932
2907
  const createdAt = /* @__PURE__ */ new Date();
2933
2908
  const comment = {
@@ -2938,14 +2913,16 @@ function useCreateComment() {
2938
2913
  createdAt,
2939
2914
  userId: getCurrentUserId(room),
2940
2915
  body,
2941
- reactions: []
2916
+ reactions: [],
2917
+ attachments: _nullishCoalesce(attachments, () => ( []))
2942
2918
  };
2943
2919
  const { store, onMutationFailure } = getExtrasForClient2(client);
2944
2920
  const optimisticUpdateId = store.addOptimisticUpdate({
2945
2921
  type: "create-comment",
2946
2922
  comment
2947
2923
  });
2948
- room.createComment({ threadId, commentId, body }).then(
2924
+ const attachmentIds = _optionalChain([attachments, 'optionalAccess', _28 => _28.map, 'call', _29 => _29((attachment) => attachment.id)]);
2925
+ room.createComment({ threadId, commentId, body, attachmentIds }).then(
2949
2926
  (newComment) => {
2950
2927
  store.createComment(newComment, optimisticUpdateId);
2951
2928
  },
@@ -2969,7 +2946,7 @@ function useEditComment() {
2969
2946
  const client = useClient();
2970
2947
  const room = useRoom();
2971
2948
  return React5.useCallback(
2972
- ({ threadId, commentId, body }) => {
2949
+ ({ threadId, commentId, body, attachments }) => {
2973
2950
  const editedAt = /* @__PURE__ */ new Date();
2974
2951
  const { store, onMutationFailure } = getExtrasForClient2(client);
2975
2952
  const thread = store.getThreads().threadsById[threadId];
@@ -2993,10 +2970,12 @@ function useEditComment() {
2993
2970
  comment: {
2994
2971
  ...comment,
2995
2972
  editedAt,
2996
- body
2973
+ body,
2974
+ attachments: _nullishCoalesce(attachments, () => ( []))
2997
2975
  }
2998
2976
  });
2999
- room.editComment({ threadId, commentId, body }).then(
2977
+ const attachmentIds = _optionalChain([attachments, 'optionalAccess', _30 => _30.map, 'call', _31 => _31((attachment) => attachment.id)]);
2978
+ room.editComment({ threadId, commentId, body, attachmentIds }).then(
3000
2979
  (editedComment) => {
3001
2980
  store.editComment(threadId, optimisticUpdateId, editedComment);
3002
2981
  },
@@ -3356,44 +3335,34 @@ function useHistoryVersionData(versionId) {
3356
3335
  function useHistoryVersions() {
3357
3336
  const client = useClient();
3358
3337
  const room = useRoom();
3338
+ const queryKey = getVersionsQueryKey(room.id);
3359
3339
  const { store, getRoomVersions } = getExtrasForClient2(client);
3360
- const getter = React5.useCallback(
3361
- () => store.getVersionsAsync(room.id),
3362
- [store, room.id]
3363
- );
3364
3340
  React5.useEffect(() => {
3365
3341
  void getRoomVersions(room);
3366
3342
  }, [room]);
3367
- const state = _withselectorjs.useSyncExternalStoreWithSelector.call(void 0,
3368
- store.subscribeVersions,
3369
- getter,
3370
- getter,
3371
- identity2,
3372
- _client.shallow
3373
- );
3374
- return state;
3375
- }
3376
- function useHistoryVersionsSuspense() {
3377
- const client = useClient();
3378
- const room = useRoom();
3379
- const { store } = getExtrasForClient2(client);
3380
- const getter = React5.useCallback(
3381
- () => store.getVersionsAsync(room.id),
3382
- [store, room.id]
3343
+ const selector = React5.useCallback(
3344
+ (state2) => {
3345
+ const query = state2.queries[queryKey];
3346
+ if (query === void 0 || query.isLoading) {
3347
+ return {
3348
+ isLoading: true
3349
+ };
3350
+ }
3351
+ return {
3352
+ versions: state2.versionsByRoomId[room.id],
3353
+ isLoading: false,
3354
+ error: query.error
3355
+ };
3356
+ },
3357
+ [room, queryKey]
3358
+ // eslint-disable-line react-hooks/exhaustive-deps
3383
3359
  );
3384
3360
  const state = _withselectorjs.useSyncExternalStoreWithSelector.call(void 0,
3385
3361
  store.subscribeVersions,
3386
- getter,
3387
- getter,
3388
- identity2,
3389
- _client.shallow
3362
+ store.getVersions,
3363
+ store.getVersions,
3364
+ selector
3390
3365
  );
3391
- if (state.isLoading) {
3392
- const { getRoomVersions } = getExtrasForClient2(client);
3393
- throw getRoomVersions(room);
3394
- } else if (state.error) {
3395
- throw state.error;
3396
- }
3397
3366
  return state;
3398
3367
  }
3399
3368
  function useUpdateRoomNotificationSettings() {
@@ -3526,12 +3495,104 @@ function useThreadsSuspense(options = {
3526
3495
  useScrollToCommentOnLoadEffect(scrollOnLoad, state);
3527
3496
  return state;
3528
3497
  }
3498
+ function selectorFor_useAttachmentUrl(state) {
3499
+ if (state === void 0 || _optionalChain([state, 'optionalAccess', _32 => _32.isLoading])) {
3500
+ return _nullishCoalesce(state, () => ( { isLoading: true }));
3501
+ }
3502
+ if (state.error) {
3503
+ return state;
3504
+ }
3505
+ _core.assert.call(void 0, state.data !== void 0, "Unexpected missing attachment URL");
3506
+ return {
3507
+ isLoading: false,
3508
+ url: state.data
3509
+ };
3510
+ }
3511
+ function useAttachmentUrl(attachmentId) {
3512
+ const room = useRoom();
3513
+ const { attachmentUrlsStore } = room[_core.kInternal];
3514
+ const getAttachmentUrlState = React5.useCallback(
3515
+ () => attachmentUrlsStore.getState(attachmentId),
3516
+ [attachmentUrlsStore, attachmentId]
3517
+ );
3518
+ React5.useEffect(() => {
3519
+ void attachmentUrlsStore.get(attachmentId);
3520
+ }, [attachmentUrlsStore, attachmentId]);
3521
+ return _withselectorjs.useSyncExternalStoreWithSelector.call(void 0,
3522
+ attachmentUrlsStore.subscribe,
3523
+ getAttachmentUrlState,
3524
+ getAttachmentUrlState,
3525
+ selectorFor_useAttachmentUrl,
3526
+ _client.shallow
3527
+ );
3528
+ }
3529
+ function useAttachmentUrlSuspense(attachmentId) {
3530
+ const room = useRoom();
3531
+ const { attachmentUrlsStore } = room[_core.kInternal];
3532
+ const getAttachmentUrlState = React5.useCallback(
3533
+ () => attachmentUrlsStore.getState(attachmentId),
3534
+ [attachmentUrlsStore, attachmentId]
3535
+ );
3536
+ const attachmentUrlState = getAttachmentUrlState();
3537
+ if (!attachmentUrlState || attachmentUrlState.isLoading) {
3538
+ throw attachmentUrlsStore.get(attachmentId);
3539
+ }
3540
+ if (attachmentUrlState.error) {
3541
+ throw attachmentUrlState.error;
3542
+ }
3543
+ const state = useSyncExternalStore2(
3544
+ attachmentUrlsStore.subscribe,
3545
+ getAttachmentUrlState,
3546
+ getAttachmentUrlState
3547
+ );
3548
+ _core.assert.call(void 0, state !== void 0, "Unexpected missing state");
3549
+ _core.assert.call(void 0, !state.isLoading, "Unexpected loading state");
3550
+ _core.assert.call(void 0, !state.error, "Unexpected error state");
3551
+ return {
3552
+ isLoading: false,
3553
+ url: state.data,
3554
+ error: void 0
3555
+ };
3556
+ }
3557
+ function useHistoryVersionsSuspense() {
3558
+ const client = useClient();
3559
+ const room = useRoom();
3560
+ const queryKey = getVersionsQueryKey(room.id);
3561
+ const { store, getRoomVersions } = getExtrasForClient2(client);
3562
+ const query = store.getVersions().queries[queryKey];
3563
+ if (query === void 0 || query.isLoading) {
3564
+ throw getRoomVersions(room);
3565
+ }
3566
+ if (query.error) {
3567
+ throw query.error;
3568
+ }
3569
+ const selector = React5.useCallback(
3570
+ (state2) => {
3571
+ return {
3572
+ versions: state2.versionsByRoomId[room.id],
3573
+ isLoading: false
3574
+ };
3575
+ },
3576
+ [room, queryKey]
3577
+ // eslint-disable-line react-hooks/exhaustive-deps
3578
+ );
3579
+ const state = _withselectorjs.useSyncExternalStoreWithSelector.call(void 0,
3580
+ store.subscribeVersions,
3581
+ store.getVersions,
3582
+ store.getVersions,
3583
+ selector
3584
+ );
3585
+ return state;
3586
+ }
3529
3587
  function createRoomContext(client) {
3530
3588
  return getOrCreateRoomContextBundle(client);
3531
3589
  }
3532
3590
  function generateQueryKey(roomId, options) {
3533
3591
  return `${roomId}-${_core.stringify.call(void 0, _nullishCoalesce(options, () => ( {})))}`;
3534
3592
  }
3593
+ function getVersionsQueryKey(roomId) {
3594
+ return `${roomId}-VERSIONS`;
3595
+ }
3535
3596
  var _RoomProvider = RoomProvider;
3536
3597
  var _useBroadcastEvent = useBroadcastEvent;
3537
3598
  var _useOthersListener = useOthersListener;
@@ -3651,5 +3712,7 @@ var _useUpdateMyPresence = useUpdateMyPresence;
3651
3712
 
3652
3713
 
3653
3714
 
3654
- exports.PKG_NAME = PKG_NAME; exports.PKG_VERSION = PKG_VERSION; exports.PKG_FORMAT = PKG_FORMAT; exports.ClientSideSuspense = ClientSideSuspense; exports.RoomContext = RoomContext; exports.ClientContext = ClientContext; exports.selectThreads = selectThreads; exports.getUmbrellaStoreForClient = getUmbrellaStoreForClient; exports.useClient = useClient; 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.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.CreateThreadError = CreateThreadError; exports.useStatus = useStatus; exports.useStorageStatus = useStorageStatus; exports.useBatch = useBatch; exports.useLostConnectionListener = useLostConnectionListener; exports.useErrorListener = useErrorListener; exports.useHistory = useHistory; exports.useUndo = useUndo; exports.useRedo = useRedo; exports.useCanUndo = useCanUndo; exports.useCanRedo = useCanRedo; exports.useOthersConnectionIds = useOthersConnectionIds; exports.useCommentsErrorListener = useCommentsErrorListener; exports.useCreateComment = useCreateComment; exports.useEditComment = useEditComment; exports.useDeleteComment = useDeleteComment; exports.useRemoveReaction = useRemoveReaction; exports.useMarkThreadAsRead = useMarkThreadAsRead; exports.useMarkThreadAsResolved = useMarkThreadAsResolved; exports.useMarkThreadAsUnresolved = useMarkThreadAsUnresolved; exports.useThreadSubscription = useThreadSubscription; exports.useRoomNotificationSettings = useRoomNotificationSettings; exports.useHistoryVersionData = useHistoryVersionData; exports.useUpdateRoomNotificationSettings = useUpdateRoomNotificationSettings; exports.useOthersConnectionIdsSuspense = useOthersConnectionIdsSuspense; exports.useStorageStatusSuspense = useStorageStatusSuspense; 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._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;
3655
- //# sourceMappingURL=chunk-TGC7HD5F.js.map
3715
+
3716
+
3717
+ exports.PKG_NAME = PKG_NAME; exports.PKG_VERSION = PKG_VERSION; exports.PKG_FORMAT = PKG_FORMAT; exports.ClientSideSuspense = ClientSideSuspense; exports.RoomContext = RoomContext; exports.ClientContext = ClientContext; exports.selectThreads = selectThreads; exports.getUmbrellaStoreForClient = getUmbrellaStoreForClient; exports.useClient = useClient; 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.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.CreateThreadError = CreateThreadError; exports.useStatus = useStatus; exports.useStorageStatus = useStorageStatus; exports.useBatch = useBatch; exports.useLostConnectionListener = useLostConnectionListener; exports.useErrorListener = useErrorListener; exports.useHistory = useHistory; exports.useUndo = useUndo; exports.useRedo = useRedo; exports.useCanUndo = useCanUndo; exports.useCanRedo = useCanRedo; exports.useOthersConnectionIds = useOthersConnectionIds; exports.useCommentsErrorListener = useCommentsErrorListener; exports.useCreateComment = useCreateComment; exports.useEditComment = useEditComment; exports.useDeleteComment = useDeleteComment; exports.useRemoveReaction = useRemoveReaction; exports.useMarkThreadAsRead = useMarkThreadAsRead; exports.useMarkThreadAsResolved = useMarkThreadAsResolved; exports.useMarkThreadAsUnresolved = useMarkThreadAsUnresolved; exports.useThreadSubscription = useThreadSubscription; exports.useRoomNotificationSettings = useRoomNotificationSettings; exports.useHistoryVersionData = useHistoryVersionData; exports.useUpdateRoomNotificationSettings = useUpdateRoomNotificationSettings; exports.useOthersConnectionIdsSuspense = useOthersConnectionIdsSuspense; exports.useStorageStatusSuspense = useStorageStatusSuspense; exports.useAttachmentUrl = useAttachmentUrl; exports.useAttachmentUrlSuspense = useAttachmentUrlSuspense; 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._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;
3718
+ //# sourceMappingURL=chunk-7GMBACXS.js.map