@liveblocks/react 3.13.0-ack1 → 3.13.0-metadata1

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.
@@ -2,7 +2,7 @@ import * as react from 'react';
2
2
  import { ComponentType, Context, PropsWithChildren, ReactNode } from 'react';
3
3
  import { BaseUserMeta, Client, JsonObject, LsonObject, LiveObject, User, Json, RoomSubscriptionSettings, Room, Status, BroadcastOptions, OthersEvent, LostConnectionEvent, History, BaseMetadata as BaseMetadata$1, ClientOptions, ThreadData as ThreadData$1, CommentData as CommentData$1 } from '@liveblocks/client';
4
4
  import * as _liveblocks_core from '@liveblocks/core';
5
- import { OpaqueClient, OpaqueRoom, AiKnowledgeSource, AiOpaqueToolDefinition, Relax, AiAssistantContentPart, BaseMetadata, QueryMetadata, AsyncResult, DRI, AsyncSuccess, DGI, GroupData, Resolve, CommentBody, CommentAttachment, PartialUnless, Patchable, InboxNotificationData, NotificationSettings, ToImmutable, MessageId, PartialNotificationSettings, AiChatsQuery, AsyncLoading, AsyncError, ThreadData, SearchCommentsResult, HistoryVersion, AiChat, UrlMetadata, Client as Client$1, LiveblocksError, SyncStatus, RoomEventMessage, CommentData, AiUserMessage, WithRequired, AiChatMessage, WithNavigation, MutableSignal, ThreadDataWithDeleteInfo, ThreadDeleteInfo, SubscriptionKey, SubscriptionData, DerivedSignal, DefaultMap, CommentUserReaction, InboxNotificationDeleteInfo, SubscriptionDeleteInfo, RoomSubscriptionSettings as RoomSubscriptionSettings$1, ISignal, Permission, BaseUserMeta as BaseUserMeta$1, DistributiveOmit, DU, DM, TextEditorType, IYjsProvider, MentionData, DP, DS, DE } from '@liveblocks/core';
5
+ import { OpaqueClient, OpaqueRoom, AiKnowledgeSource, AiOpaqueToolDefinition, Relax, AiAssistantContentPart, BaseMetadata, QueryMetadata, AsyncResult, DRI, AsyncSuccess, DGI, GroupData, Resolve, CommentBody, CommentAttachment, PartialUnless, Patchable, InboxNotificationData, NotificationSettings, ToImmutable, MessageId, PartialNotificationSettings, AiChatsQuery, AsyncLoading, AsyncError, ThreadData, SearchCommentsResult, HistoryVersion, AiChat, UrlMetadata, Client as Client$1, LiveblocksError, SyncStatus, RoomEventMessage, CommentData, AiUserMessage, WithRequired, AiChatMessage, WithNavigation, MutableSignal, ThreadDataWithDeleteInfo, ThreadDeleteInfo, SubscriptionKey, SubscriptionData, DerivedSignal, DefaultMap, CommentUserReaction, InboxNotificationDeleteInfo, SubscriptionDeleteInfo, RoomSubscriptionSettings as RoomSubscriptionSettings$1, ISignal, Permission, BaseUserMeta as BaseUserMeta$1, DistributiveOmit, DU, DTM, DCM, TextEditorType, IYjsProvider, MentionData, DP, DS, DE } from '@liveblocks/core';
6
6
  import * as react_jsx_runtime from 'react/jsx-runtime';
7
7
 
8
8
  /**
@@ -125,7 +125,7 @@ type UseAiChatsOptions = {
125
125
  */
126
126
  query?: AiChatsQuery;
127
127
  };
128
- type ThreadsQuery<M extends BaseMetadata> = {
128
+ type ThreadsQuery<TM extends BaseMetadata> = {
129
129
  /**
130
130
  * Whether to only return threads marked as resolved or unresolved. If not provided,
131
131
  * all threads will be returned.
@@ -140,21 +140,21 @@ type ThreadsQuery<M extends BaseMetadata> = {
140
140
  * The metadata to filter the threads by. If provided, only threads with metadata that matches
141
141
  * the provided metadata will be returned. If not provided, all threads will be returned.
142
142
  */
143
- metadata?: Partial<QueryMetadata<M>>;
143
+ metadata?: Partial<QueryMetadata<TM>>;
144
144
  };
145
- type UseUserThreadsOptions<M extends BaseMetadata> = {
145
+ type UseUserThreadsOptions<TM extends BaseMetadata> = {
146
146
  /**
147
147
  * The query (including metadata) to filter the threads by. If provided, only threads
148
148
  * that match the query will be returned. If not provided, all threads will be returned.
149
149
  */
150
- query?: ThreadsQuery<M>;
150
+ query?: ThreadsQuery<TM>;
151
151
  };
152
- type UseThreadsOptions<M extends BaseMetadata> = {
152
+ type UseThreadsOptions<TM extends BaseMetadata> = {
153
153
  /**
154
154
  * The query (including metadata) to filter the threads by. If provided, only threads
155
155
  * that match the query will be returned. If not provided, all threads will be returned.
156
156
  */
157
- query?: ThreadsQuery<M>;
157
+ query?: ThreadsQuery<TM>;
158
158
  /**
159
159
  * Whether to scroll to a comment on load based on the URL hash. Defaults to `true`.
160
160
  *
@@ -164,11 +164,11 @@ type UseThreadsOptions<M extends BaseMetadata> = {
164
164
  */
165
165
  scrollOnLoad?: boolean;
166
166
  };
167
- type SearchCommentsQuery<M extends BaseMetadata> = {
167
+ type SearchCommentsQuery<TM extends BaseMetadata> = {
168
168
  /**
169
169
  * (Optional) Metadata to filter the threads by.
170
170
  */
171
- threadMetadata?: Partial<QueryMetadata<M>>;
171
+ threadMetadata?: Partial<QueryMetadata<TM>>;
172
172
  /**
173
173
  * (Optional) Whether to only return comments from threads marked as resolved or unresolved.
174
174
  */
@@ -186,8 +186,8 @@ type SearchCommentsQuery<M extends BaseMetadata> = {
186
186
  */
187
187
  text: string;
188
188
  };
189
- type UseSearchCommentsOptions<M extends BaseMetadata> = {
190
- query: SearchCommentsQuery<M>;
189
+ type UseSearchCommentsOptions<TM extends BaseMetadata> = {
190
+ query: SearchCommentsQuery<TM>;
191
191
  };
192
192
  type InboxNotificationsQuery = {
193
193
  /**
@@ -215,26 +215,35 @@ type GroupInfoAsyncSuccess = AsyncSuccess<DGI, "info">;
215
215
  type AttachmentUrlAsyncResult = AsyncResult<string, "url">;
216
216
  type AttachmentUrlAsyncSuccess = AsyncSuccess<string, "url">;
217
217
  type GroupAsyncResult = AsyncResult<GroupData | undefined, "group">;
218
- type CreateThreadOptions<M extends BaseMetadata> = Resolve<{
218
+ type CreateThreadOptions<TM extends BaseMetadata, CM extends BaseMetadata> = Resolve<{
219
219
  body: CommentBody;
220
220
  attachments?: CommentAttachment[];
221
- } & PartialUnless<M, {
222
- metadata: M;
221
+ } & PartialUnless<TM, {
222
+ metadata: TM;
223
+ }> & PartialUnless<CM, {
224
+ commentMetadata: CM;
223
225
  }>>;
224
- type EditThreadMetadataOptions<M extends BaseMetadata> = {
226
+ type EditThreadMetadataOptions<TM extends BaseMetadata> = {
225
227
  threadId: string;
226
- metadata: Patchable<M>;
228
+ metadata: Patchable<TM>;
227
229
  };
228
- type CreateCommentOptions = {
230
+ type CreateCommentOptions<CM extends BaseMetadata> = {
229
231
  threadId: string;
230
232
  body: CommentBody;
233
+ metadata?: CM;
231
234
  attachments?: CommentAttachment[];
232
235
  };
233
- type EditCommentOptions = {
236
+ type EditCommentOptions<CM extends BaseMetadata> = {
234
237
  threadId: string;
235
238
  commentId: string;
236
239
  body: CommentBody;
237
240
  attachments?: CommentAttachment[];
241
+ metadata?: Patchable<CM>;
242
+ };
243
+ type EditCommentMetadataOptions<CM extends BaseMetadata> = {
244
+ threadId: string;
245
+ commentId: string;
246
+ metadata: Patchable<CM>;
238
247
  };
239
248
  type DeleteCommentOptions = {
240
249
  threadId: string;
@@ -253,8 +262,8 @@ type PaginationFields = {
253
262
  };
254
263
  type PagedAsyncSuccess<T, F extends string> = Resolve<AsyncSuccess<T, F> & PaginationFields>;
255
264
  type PagedAsyncResult<T, F extends string> = Relax<AsyncLoading<F> | AsyncError<F> | PagedAsyncSuccess<T, F>>;
256
- type ThreadsAsyncSuccess<M extends BaseMetadata> = PagedAsyncSuccess<ThreadData<M>[], "threads">;
257
- type ThreadsAsyncResult<M extends BaseMetadata> = PagedAsyncResult<ThreadData<M>[], "threads">;
265
+ type ThreadsAsyncSuccess<TM extends BaseMetadata, CM extends BaseMetadata> = PagedAsyncSuccess<ThreadData<TM, CM>[], "threads">;
266
+ type ThreadsAsyncResult<TM extends BaseMetadata, CM extends BaseMetadata> = PagedAsyncResult<ThreadData<TM, CM>[], "threads">;
258
267
  type SearchCommentsAsyncResult = AsyncResult<Array<SearchCommentsResult>, "results">;
259
268
  type InboxNotificationsAsyncSuccess = PagedAsyncSuccess<InboxNotificationData[], "inboxNotifications">;
260
269
  type InboxNotificationsAsyncResult = PagedAsyncResult<InboxNotificationData[], "inboxNotifications">;
@@ -487,13 +496,13 @@ type SharedContextBundle<U extends BaseUserMeta> = {
487
496
  /**
488
497
  * Properties that are the same in RoomContext and RoomContext["suspense"].
489
498
  */
490
- type RoomContextBundleCommon<P extends JsonObject, S extends LsonObject, U extends BaseUserMeta, E extends Json, M extends BaseMetadata> = {
499
+ type RoomContextBundleCommon<P extends JsonObject, S extends LsonObject, U extends BaseUserMeta, E extends Json, TM extends BaseMetadata, CM extends BaseMetadata> = {
491
500
  /**
492
501
  * You normally don't need to directly interact with the RoomContext, but
493
502
  * it can be necessary if you're building an advanced app where you need to
494
503
  * set up a context bridge between two React renderers.
495
504
  */
496
- RoomContext: Context<Room<P, S, U, E, M> | null>;
505
+ RoomContext: Context<Room<P, S, U, E, TM, CM> | null>;
497
506
  /**
498
507
  * Makes a Room available in the component hierarchy below.
499
508
  * Joins the room when the component is mounted, and automatically leaves
@@ -506,10 +515,10 @@ type RoomContextBundleCommon<P extends JsonObject, S extends LsonObject, U exten
506
515
  */
507
516
  useRoom(options?: {
508
517
  allowOutsideRoom: false;
509
- }): Room<P, S, U, E, M>;
518
+ }): Room<P, S, U, E, TM, CM>;
510
519
  useRoom(options: {
511
520
  allowOutsideRoom: boolean;
512
- }): Room<P, S, U, E, M> | null;
521
+ }): Room<P, S, U, E, TM, CM> | null;
513
522
  /**
514
523
  * Returns the current connection status for the Room, and triggers
515
524
  * a re-render whenever it changes. Can be used to render a status badge.
@@ -780,7 +789,7 @@ type RoomContextBundleCommon<P extends JsonObject, S extends LsonObject, U exten
780
789
  * const createThread = useCreateThread();
781
790
  * createThread({ body: {}, metadata: {} });
782
791
  */
783
- useCreateThread(): (options: CreateThreadOptions<M>) => ThreadData<M>;
792
+ useCreateThread(): (options: CreateThreadOptions<TM, CM>) => ThreadData<TM, CM>;
784
793
  /**
785
794
  * Returns a function that deletes a thread and its associated comments.
786
795
  * Only the thread creator can delete a thread, it will throw otherwise.
@@ -798,7 +807,7 @@ type RoomContextBundleCommon<P extends JsonObject, S extends LsonObject, U exten
798
807
  * const editThreadMetadata = useEditThreadMetadata();
799
808
  * editThreadMetadata({ threadId: "th_xxx", metadata: {} })
800
809
  */
801
- useEditThreadMetadata(): (options: EditThreadMetadataOptions<M>) => void;
810
+ useEditThreadMetadata(): (options: EditThreadMetadataOptions<TM>) => void;
802
811
  /**
803
812
  * Returns a function that marks a thread as resolved.
804
813
  *
@@ -838,15 +847,24 @@ type RoomContextBundleCommon<P extends JsonObject, S extends LsonObject, U exten
838
847
  * const createComment = useCreateComment();
839
848
  * createComment({ threadId: "th_xxx", body: {} });
840
849
  */
841
- useCreateComment(): (options: CreateCommentOptions) => CommentData;
850
+ useCreateComment(): (options: CreateCommentOptions<CM>) => CommentData<CM>;
842
851
  /**
843
- * Returns a function that edits a comment's body.
852
+ * Returns a function that edits a comment.
844
853
  *
845
854
  * @example
846
855
  * const editComment = useEditComment()
847
856
  * editComment({ threadId: "th_xxx", commentId: "cm_xxx", body: {} })
848
857
  */
849
- useEditComment(): (options: EditCommentOptions) => void;
858
+ useEditComment(): (options: EditCommentOptions<CM>) => void;
859
+ /**
860
+ * Returns a function that edits a comment's metadata.
861
+ * To delete an existing metadata property, set its value to `null`.
862
+ *
863
+ * @example
864
+ * const editCommentMetadata = useEditCommentMetadata();
865
+ * editCommentMetadata({ threadId: "th_xxx", commentId: "cm_xxx", metadata: { slackChannelId: "C024BE91L", slackMessageTs: "1700311782.001200" } })
866
+ */
867
+ useEditCommentMetadata(): (options: EditCommentMetadataOptions<CM>) => void;
850
868
  /**
851
869
  * Returns a function that deletes a comment.
852
870
  * If it is the last non-deleted comment, the thread also gets deleted.
@@ -898,7 +916,7 @@ type RoomContextBundleCommon<P extends JsonObject, S extends LsonObject, U exten
898
916
  */
899
917
  useThreadSubscription(threadId: string): ThreadSubscription;
900
918
  };
901
- type RoomContextBundle<P extends JsonObject, S extends LsonObject, U extends BaseUserMeta, E extends Json, M extends BaseMetadata> = Resolve<RoomContextBundleCommon<P, S, U, E, M> & SharedContextBundle<U>["classic"] & {
919
+ type RoomContextBundle<P extends JsonObject, S extends LsonObject, U extends BaseUserMeta, E extends Json, TM extends BaseMetadata, CM extends BaseMetadata> = Resolve<RoomContextBundleCommon<P, S, U, E, TM, CM> & SharedContextBundle<U>["classic"] & {
902
920
  /**
903
921
  * Extract arbitrary data from the Liveblocks Storage state, using an
904
922
  * arbitrary selector function.
@@ -959,14 +977,14 @@ type RoomContextBundle<P extends JsonObject, S extends LsonObject, U extends Bas
959
977
  * @example
960
978
  * const { threads, error, isLoading } = useThreads();
961
979
  */
962
- useThreads(options?: UseThreadsOptions<M>): ThreadsAsyncResult<M>;
980
+ useThreads(options?: UseThreadsOptions<TM>): ThreadsAsyncResult<TM, CM>;
963
981
  /**
964
982
  * Returns the result of searching comments by text in the current room. The result includes the id and the plain text content of the matched comments along with the parent thread id of the comment.
965
983
  *
966
984
  * @example
967
985
  * const { results, error, isLoading } = useSearchComments({ query: { text: "hello"} });
968
986
  */
969
- useSearchComments(options: UseSearchCommentsOptions<M>): SearchCommentsAsyncResult;
987
+ useSearchComments(options: UseSearchCommentsOptions<TM>): SearchCommentsAsyncResult;
970
988
  /**
971
989
  * Returns the user's subscription settings for the current room
972
990
  * and a function to update them.
@@ -999,7 +1017,7 @@ type RoomContextBundle<P extends JsonObject, S extends LsonObject, U extends Bas
999
1017
  * const { data, error, isLoading } = useHistoryVersionData(version.id);
1000
1018
  */
1001
1019
  useHistoryVersionData(id: string): HistoryVersionDataAsyncResult;
1002
- suspense: Resolve<RoomContextBundleCommon<P, S, U, E, M> & SharedContextBundle<U>["suspense"] & {
1020
+ suspense: Resolve<RoomContextBundleCommon<P, S, U, E, TM, CM> & SharedContextBundle<U>["suspense"] & {
1003
1021
  /**
1004
1022
  * Extract arbitrary data from the Liveblocks Storage state, using an
1005
1023
  * arbitrary selector function.
@@ -1054,7 +1072,7 @@ type RoomContextBundle<P extends JsonObject, S extends LsonObject, U extends Bas
1054
1072
  * @example
1055
1073
  * const { threads } = useThreads();
1056
1074
  */
1057
- useThreads(options?: UseThreadsOptions<M>): ThreadsAsyncSuccess<M>;
1075
+ useThreads(options?: UseThreadsOptions<TM>): ThreadsAsyncSuccess<TM, CM>;
1058
1076
  /**
1059
1077
  * (Private beta) Returns a history of versions of the current room.
1060
1078
  *
@@ -1085,7 +1103,7 @@ type RoomContextBundle<P extends JsonObject, S extends LsonObject, U extends Bas
1085
1103
  /**
1086
1104
  * Properties that are the same in LiveblocksContext and LiveblocksContext["suspense"].
1087
1105
  */
1088
- type LiveblocksContextBundleCommon<M extends BaseMetadata> = {
1106
+ type LiveblocksContextBundleCommon<TM extends BaseMetadata, CM extends BaseMetadata> = {
1089
1107
  /**
1090
1108
  * Makes Liveblocks features outside of rooms (e.g. Notifications) available
1091
1109
  * in the component hierarchy below.
@@ -1138,7 +1156,7 @@ type LiveblocksContextBundleCommon<M extends BaseMetadata> = {
1138
1156
  * @example
1139
1157
  * const thread = useInboxNotificationThread("in_xxx");
1140
1158
  */
1141
- useInboxNotificationThread(inboxNotificationId: string): ThreadData<M>;
1159
+ useInboxNotificationThread(inboxNotificationId: string): ThreadData<TM, CM>;
1142
1160
  /**
1143
1161
  * Returns notification settings for the current user.
1144
1162
  *
@@ -1259,7 +1277,7 @@ type LiveblocksContextBundleCommon<M extends BaseMetadata> = {
1259
1277
  (options: WithRequired<SendAiMessageOptions, "chatId">): AiUserMessage;
1260
1278
  };
1261
1279
  };
1262
- type LiveblocksContextBundle<U extends BaseUserMeta, M extends BaseMetadata> = Resolve<LiveblocksContextBundleCommon<M> & SharedContextBundle<U>["classic"] & {
1280
+ type LiveblocksContextBundle<U extends BaseUserMeta, TM extends BaseMetadata, CM extends BaseMetadata> = Resolve<LiveblocksContextBundleCommon<TM, CM> & SharedContextBundle<U>["classic"] & {
1263
1281
  /**
1264
1282
  * Returns the inbox notifications for the current user.
1265
1283
  *
@@ -1280,7 +1298,7 @@ type LiveblocksContextBundle<U extends BaseUserMeta, M extends BaseMetadata> = R
1280
1298
  * This hook is experimental and could be removed or changed at any time!
1281
1299
  * Do not use unless explicitly recommended by the Liveblocks team.
1282
1300
  */
1283
- useUserThreads_experimental(options?: UseUserThreadsOptions<M>): ThreadsAsyncResult<M>;
1301
+ useUserThreads_experimental(options?: UseUserThreadsOptions<TM>): ThreadsAsyncResult<TM, CM>;
1284
1302
  /**
1285
1303
  * (Private beta) Returns the chats for the current user.
1286
1304
  *
@@ -1332,7 +1350,7 @@ type LiveblocksContextBundle<U extends BaseUserMeta, M extends BaseMetadata> = R
1332
1350
  * const { metadata, error, isLoading } = useUrlMetadata("https://liveblocks.io");
1333
1351
  */
1334
1352
  useUrlMetadata(url: string): UrlMetadataAsyncResult;
1335
- suspense: Resolve<LiveblocksContextBundleCommon<M> & SharedContextBundle<U>["suspense"] & {
1353
+ suspense: Resolve<LiveblocksContextBundleCommon<TM, CM> & SharedContextBundle<U>["suspense"] & {
1336
1354
  /**
1337
1355
  * Returns the inbox notifications for the current user.
1338
1356
  *
@@ -1363,7 +1381,7 @@ type LiveblocksContextBundle<U extends BaseUserMeta, M extends BaseMetadata> = R
1363
1381
  * This hook is experimental and could be removed or changed at any time!
1364
1382
  * Do not use unless explicitly recommended by the Liveblocks team.
1365
1383
  */
1366
- useUserThreads_experimental(options?: UseUserThreadsOptions<M>): ThreadsAsyncSuccess<M>;
1384
+ useUserThreads_experimental(options?: UseUserThreadsOptions<TM>): ThreadsAsyncSuccess<TM, CM>;
1367
1385
  /**
1368
1386
  * (Private beta) Returns the chats for the current user.
1369
1387
  *
@@ -1418,7 +1436,7 @@ type LiveblocksContextBundle<U extends BaseUserMeta, M extends BaseMetadata> = R
1418
1436
  }>;
1419
1437
  }>;
1420
1438
 
1421
- type ReadonlyThreadDB<M extends BaseMetadata> = Omit<ThreadDB<M>, "upsert" | "delete" | "signal">;
1439
+ type ReadonlyThreadDB<TM extends BaseMetadata, CM extends BaseMetadata> = Omit<ThreadDB<TM, CM>, "upsert" | "delete" | "signal">;
1422
1440
  /**
1423
1441
  * This class implements a lightweight, in-memory, "database" for all Thread
1424
1442
  * instances.
@@ -1436,20 +1454,20 @@ type ReadonlyThreadDB<M extends BaseMetadata> = Omit<ThreadDB<M>, "upsert" | "de
1436
1454
  * optimistic updates without losing the original thread contents.
1437
1455
  *
1438
1456
  */
1439
- declare class ThreadDB<M extends BaseMetadata> {
1457
+ declare class ThreadDB<TM extends BaseMetadata, CM extends BaseMetadata> {
1440
1458
  #private;
1441
1459
  readonly signal: MutableSignal<this>;
1442
1460
  constructor();
1443
- clone(): ThreadDB<M>;
1461
+ clone(): ThreadDB<TM, CM>;
1444
1462
  /** Returns an existing thread by ID. Will never return a deleted thread. */
1445
- get(threadId: string): ThreadData<M> | undefined;
1463
+ get(threadId: string): ThreadData<TM, CM> | undefined;
1446
1464
  /** Returns the (possibly deleted) thread by ID. */
1447
- getEvenIfDeleted(threadId: string): ThreadDataWithDeleteInfo<M> | undefined;
1465
+ getEvenIfDeleted(threadId: string): ThreadDataWithDeleteInfo<TM, CM> | undefined;
1448
1466
  /** Adds or updates a thread in the DB. If the newly given thread is a deleted one, it will get deleted. */
1449
- upsert(thread: ThreadDataWithDeleteInfo<M>): void;
1467
+ upsert(thread: ThreadDataWithDeleteInfo<TM, CM>): void;
1450
1468
  /** Like .upsert(), except it won't update if a thread by this ID already exists. */
1451
- upsertIfNewer(thread: ThreadDataWithDeleteInfo<M>): void;
1452
- applyDelta(newThreads: ThreadData<M>[], deletedThreads: ThreadDeleteInfo[]): void;
1469
+ upsertIfNewer(thread: ThreadDataWithDeleteInfo<TM, CM>): void;
1470
+ applyDelta(newThreads: ThreadData<TM, CM>[], deletedThreads: ThreadDeleteInfo[]): void;
1453
1471
  /**
1454
1472
  * Marks a thread as deleted. It will no longer pop up in .findMany()
1455
1473
  * queries, but it can still be accessed via `.getEvenIfDeleted()`.
@@ -1468,15 +1486,15 @@ declare class ThreadDB<M extends BaseMetadata> {
1468
1486
  *
1469
1487
  * Subscriptions are needed to filter threads based on the user's subscriptions.
1470
1488
  */
1471
- findMany(roomId: string | undefined, query: ThreadsQuery<M> | undefined, direction: "asc" | "desc", subscriptions: Record<SubscriptionKey, SubscriptionData> | undefined): ThreadData<M>[];
1489
+ findMany(roomId: string | undefined, query: ThreadsQuery<TM> | undefined, direction: "asc" | "desc", subscriptions: Record<SubscriptionKey, SubscriptionData> | undefined): ThreadData<TM, CM>[];
1472
1490
  }
1473
1491
 
1474
- type OptimisticUpdate<M extends BaseMetadata> = CreateThreadOptimisticUpdate<M> | DeleteThreadOptimisticUpdate | EditThreadMetadataOptimisticUpdate<M> | MarkThreadAsResolvedOptimisticUpdate | MarkThreadAsUnresolvedOptimisticUpdate | SubscribeToThreadOptimisticUpdate | UnsubscribeFromThreadOptimisticUpdate | CreateCommentOptimisticUpdate | EditCommentOptimisticUpdate | DeleteCommentOptimisticUpdate | AddReactionOptimisticUpdate | RemoveReactionOptimisticUpdate | MarkInboxNotificationAsReadOptimisticUpdate | MarkAllInboxNotificationsAsReadOptimisticUpdate | DeleteInboxNotificationOptimisticUpdate | DeleteAllInboxNotificationsOptimisticUpdate | UpdateRoomSubscriptionSettingsOptimisticUpdate | UpdateNotificationSettingsOptimisticUpdate;
1475
- type CreateThreadOptimisticUpdate<M extends BaseMetadata> = {
1492
+ type OptimisticUpdate<TM extends BaseMetadata, CM extends BaseMetadata> = CreateThreadOptimisticUpdate<TM, CM> | DeleteThreadOptimisticUpdate | EditThreadMetadataOptimisticUpdate<TM> | MarkThreadAsResolvedOptimisticUpdate | MarkThreadAsUnresolvedOptimisticUpdate | SubscribeToThreadOptimisticUpdate | UnsubscribeFromThreadOptimisticUpdate | CreateCommentOptimisticUpdate<CM> | EditCommentOptimisticUpdate<CM> | EditCommentMetadataOptimisticUpdate<CM> | DeleteCommentOptimisticUpdate | AddReactionOptimisticUpdate | RemoveReactionOptimisticUpdate | MarkInboxNotificationAsReadOptimisticUpdate | MarkAllInboxNotificationsAsReadOptimisticUpdate | DeleteInboxNotificationOptimisticUpdate | DeleteAllInboxNotificationsOptimisticUpdate | UpdateRoomSubscriptionSettingsOptimisticUpdate | UpdateNotificationSettingsOptimisticUpdate;
1493
+ type CreateThreadOptimisticUpdate<TM extends BaseMetadata, CM extends BaseMetadata> = {
1476
1494
  type: "create-thread";
1477
1495
  id: string;
1478
1496
  roomId: string;
1479
- thread: ThreadData<M>;
1497
+ thread: ThreadData<TM, CM>;
1480
1498
  };
1481
1499
  type DeleteThreadOptimisticUpdate = {
1482
1500
  type: "delete-thread";
@@ -1485,11 +1503,11 @@ type DeleteThreadOptimisticUpdate = {
1485
1503
  threadId: string;
1486
1504
  deletedAt: Date;
1487
1505
  };
1488
- type EditThreadMetadataOptimisticUpdate<M extends BaseMetadata> = {
1506
+ type EditThreadMetadataOptimisticUpdate<TM extends BaseMetadata> = {
1489
1507
  type: "edit-thread-metadata";
1490
1508
  id: string;
1491
1509
  threadId: string;
1492
- metadata: Resolve<Patchable<M>>;
1510
+ metadata: Resolve<Patchable<TM>>;
1493
1511
  updatedAt: Date;
1494
1512
  };
1495
1513
  type MarkThreadAsResolvedOptimisticUpdate = {
@@ -1516,15 +1534,23 @@ type UnsubscribeFromThreadOptimisticUpdate = {
1516
1534
  threadId: string;
1517
1535
  unsubscribedAt: Date;
1518
1536
  };
1519
- type CreateCommentOptimisticUpdate = {
1537
+ type CreateCommentOptimisticUpdate<CM extends BaseMetadata> = {
1520
1538
  type: "create-comment";
1521
1539
  id: string;
1522
- comment: CommentData;
1540
+ comment: CommentData<CM>;
1523
1541
  };
1524
- type EditCommentOptimisticUpdate = {
1542
+ type EditCommentOptimisticUpdate<CM extends BaseMetadata> = {
1525
1543
  type: "edit-comment";
1526
1544
  id: string;
1527
- comment: CommentData;
1545
+ comment: CommentData<CM>;
1546
+ };
1547
+ type EditCommentMetadataOptimisticUpdate<CM extends BaseMetadata> = {
1548
+ type: "edit-comment-metadata";
1549
+ id: string;
1550
+ threadId: string;
1551
+ commentId: string;
1552
+ metadata: Resolve<Patchable<CM>>;
1553
+ updatedAt: Date;
1528
1554
  };
1529
1555
  type DeleteCommentOptimisticUpdate = {
1530
1556
  type: "delete-comment";
@@ -1620,14 +1646,14 @@ type NotificationsLUT = Map<string, InboxNotificationData>;
1620
1646
  */
1621
1647
  type RoomSubscriptionSettingsByRoomId = Record<RoomId, RoomSubscriptionSettings$1>;
1622
1648
  type SubscriptionsByKey = Record<SubscriptionKey, SubscriptionData>;
1623
- type CleanThreadifications<M extends BaseMetadata> = CleanThreads<M> & CleanNotifications;
1624
- type CleanThreads<M extends BaseMetadata> = {
1649
+ type CleanThreadifications<TM extends BaseMetadata, CM extends BaseMetadata> = CleanThreads<TM, CM> & CleanNotifications;
1650
+ type CleanThreads<TM extends BaseMetadata, CM extends BaseMetadata> = {
1625
1651
  /**
1626
1652
  * Keep track of loading and error status of all the queries made by the client.
1627
1653
  * e.g. 'room-abc-{"color":"red"}' - ok
1628
1654
  * e.g. 'room-abc-{}' - loading
1629
1655
  */
1630
- threadsDB: ReadonlyThreadDB<M>;
1656
+ threadsDB: ReadonlyThreadDB<TM, CM>;
1631
1657
  };
1632
1658
  type CleanNotifications = {
1633
1659
  /**
@@ -1662,7 +1688,7 @@ declare function createStore_forNotifications(): {
1662
1688
  delete: (inboxNotificationId: string) => void;
1663
1689
  applyDelta: (newNotifications: InboxNotificationData[], deletedNotifications: InboxNotificationDeleteInfo[]) => void;
1664
1690
  clear: () => void;
1665
- updateAssociatedNotification: (newComment: CommentData) => void;
1691
+ updateAssociatedNotification: <CM extends BaseMetadata>(newComment: CommentData<CM>) => void;
1666
1692
  upsert: (notification: InboxNotificationData) => void;
1667
1693
  };
1668
1694
  declare function createStore_forUnreadNotificationsCount(): {
@@ -1671,13 +1697,13 @@ declare function createStore_forUnreadNotificationsCount(): {
1671
1697
  }>;
1672
1698
  update: (queryKey: InboxNotificationsQueryKey, count: number) => void;
1673
1699
  };
1674
- declare function createStore_forSubscriptions(updates: ISignal<readonly OptimisticUpdate<BaseMetadata>[]>, threads: ReadonlyThreadDB<BaseMetadata>): {
1700
+ declare function createStore_forSubscriptions(updates: ISignal<readonly OptimisticUpdate<BaseMetadata, BaseMetadata>[]>, threads: ReadonlyThreadDB<BaseMetadata, BaseMetadata>): {
1675
1701
  signal: DerivedSignal<SubscriptionsByKey>;
1676
1702
  applyDelta: (newSubscriptions: SubscriptionData[], deletedSubscriptions: SubscriptionDeleteInfo[]) => void;
1677
1703
  create: (subscription: SubscriptionData) => void;
1678
1704
  delete: (subscriptionKey: SubscriptionKey) => void;
1679
1705
  };
1680
- declare function createStore_forRoomSubscriptionSettings(updates: ISignal<readonly OptimisticUpdate<BaseMetadata>[]>): {
1706
+ declare function createStore_forRoomSubscriptionSettings(updates: ISignal<readonly OptimisticUpdate<BaseMetadata, BaseMetadata>[]>): {
1681
1707
  signal: DerivedSignal<RoomSubscriptionSettingsByRoomId>;
1682
1708
  update: (roomId: string, settings: RoomSubscriptionSettings$1) => void;
1683
1709
  };
@@ -1717,18 +1743,18 @@ declare function createStore_forPermissionHints(): {
1717
1743
  * }
1718
1744
  * e.g. {} when before the first successful fetch.
1719
1745
  */
1720
- declare function createStore_forNotificationSettings(updates: ISignal<readonly OptimisticUpdate<BaseMetadata>[]>): {
1746
+ declare function createStore_forNotificationSettings(updates: ISignal<readonly OptimisticUpdate<BaseMetadata, BaseMetadata>[]>): {
1721
1747
  signal: DerivedSignal<NotificationSettings>;
1722
1748
  update: (settings: NotificationSettings) => void;
1723
1749
  };
1724
- declare function createStore_forOptimistic<M extends BaseMetadata>(client: Client$1<BaseUserMeta$1, M>): {
1725
- signal: ISignal<readonly OptimisticUpdate<M>[]>;
1726
- add: (optimisticUpdate: DistributiveOmit<OptimisticUpdate<M>, "id">) => string;
1750
+ declare function createStore_forOptimistic<TM extends BaseMetadata, CM extends BaseMetadata>(client: Client$1<BaseUserMeta$1, TM, CM>): {
1751
+ signal: ISignal<readonly OptimisticUpdate<TM, CM>[]>;
1752
+ add: (optimisticUpdate: DistributiveOmit<OptimisticUpdate<TM, CM>, "id">) => string;
1727
1753
  remove: (optimisticId: string) => void;
1728
1754
  };
1729
- declare class UmbrellaStore<M extends BaseMetadata> {
1755
+ declare class UmbrellaStore<TM extends BaseMetadata, CM extends BaseMetadata> {
1730
1756
  #private;
1731
- readonly threads: ThreadDB<M>;
1757
+ readonly threads: ThreadDB<TM, CM>;
1732
1758
  readonly notifications: ReturnType<typeof createStore_forNotifications>;
1733
1759
  readonly subscriptions: ReturnType<typeof createStore_forSubscriptions>;
1734
1760
  readonly roomSubscriptionSettings: ReturnType<typeof createStore_forRoomSubscriptionSettings>;
@@ -1737,12 +1763,12 @@ declare class UmbrellaStore<M extends BaseMetadata> {
1737
1763
  readonly urlsMetadata: ReturnType<typeof createStore_forUrlsMetadata>;
1738
1764
  readonly permissionHints: ReturnType<typeof createStore_forPermissionHints>;
1739
1765
  readonly notificationSettings: ReturnType<typeof createStore_forNotificationSettings>;
1740
- readonly optimisticUpdates: ReturnType<typeof createStore_forOptimistic<M>>;
1766
+ readonly optimisticUpdates: ReturnType<typeof createStore_forOptimistic<TM, CM>>;
1741
1767
  readonly outputs: {
1742
- readonly threadifications: DerivedSignal<CleanThreadifications<M>>;
1743
- readonly threads: DerivedSignal<ReadonlyThreadDB<M>>;
1744
- readonly loadingRoomThreads: DefaultMap<RoomQueryKey, LoadableResource<ThreadsAsyncResult<M>>>;
1745
- readonly loadingUserThreads: DefaultMap<UserQueryKey, LoadableResource<ThreadsAsyncResult<M>>>;
1768
+ readonly threadifications: DerivedSignal<CleanThreadifications<TM, CM>>;
1769
+ readonly threads: DerivedSignal<ReadonlyThreadDB<TM, CM>>;
1770
+ readonly loadingRoomThreads: DefaultMap<RoomQueryKey, LoadableResource<ThreadsAsyncResult<TM, CM>>>;
1771
+ readonly loadingUserThreads: DefaultMap<UserQueryKey, LoadableResource<ThreadsAsyncResult<TM, CM>>>;
1746
1772
  readonly notifications: DerivedSignal<CleanNotifications>;
1747
1773
  readonly threadSubscriptions: DerivedSignal<CleanThreadSubscriptions>;
1748
1774
  readonly loadingNotifications: DefaultMap<InboxNotificationsQueryKey, LoadableResource<InboxNotificationsAsyncResult>>;
@@ -1787,9 +1813,9 @@ declare class UmbrellaStore<M extends BaseMetadata> {
1787
1813
  /**
1788
1814
  * Creates an new thread, replacing the corresponding optimistic update.
1789
1815
  */
1790
- createThread(optimisticId: string, thread: Readonly<ThreadDataWithDeleteInfo<M>>): void;
1816
+ createThread(optimisticId: string, thread: Readonly<ThreadDataWithDeleteInfo<TM, CM>>): void;
1791
1817
  patchThread(threadId: string, optimisticId: string | null, patch: {
1792
- metadata?: M;
1818
+ metadata?: TM;
1793
1819
  resolved?: boolean;
1794
1820
  }, updatedAt: Date): void;
1795
1821
  addReaction(threadId: string, optimisticId: string | null, commentId: string, reaction: CommentUserReaction, createdAt: Date): void;
@@ -1807,10 +1833,11 @@ declare class UmbrellaStore<M extends BaseMetadata> {
1807
1833
  * Creates an existing comment and ensures the associated notification is
1808
1834
  * updated correctly, replacing the corresponding optimistic update.
1809
1835
  */
1810
- createComment(newComment: CommentData, optimisticId: string): void;
1811
- editComment(threadId: string, optimisticId: string, editedComment: CommentData): void;
1836
+ createComment(newComment: CommentData<CM>, optimisticId: string): void;
1837
+ editComment(threadId: string, optimisticId: string, editedComment: CommentData<CM>): void;
1838
+ editCommentMetadata(threadId: string, commentId: string, optimisticId: string, updatedMetadata: CM, updatedAt: Date): void;
1812
1839
  deleteComment(threadId: string, optimisticId: string, commentId: string, deletedAt: Date): void;
1813
- updateThreadifications(threads: ThreadData<M>[], notifications: InboxNotificationData[], subscriptions: SubscriptionData[], deletedThreads?: ThreadDeleteInfo[], deletedNotifications?: InboxNotificationDeleteInfo[], deletedSubscriptions?: SubscriptionDeleteInfo[]): void;
1840
+ updateThreadifications(threads: ThreadData<TM, CM>[], notifications: InboxNotificationData[], subscriptions: SubscriptionData[], deletedThreads?: ThreadDeleteInfo[], deletedNotifications?: InboxNotificationDeleteInfo[], deletedSubscriptions?: SubscriptionDeleteInfo[]): void;
1814
1841
  /**
1815
1842
  * Updates existing subscription settings for a room with a new value,
1816
1843
  * replacing the corresponding optimistic update.
@@ -1838,7 +1865,7 @@ declare class UmbrellaStore<M extends BaseMetadata> {
1838
1865
  *
1839
1866
  * @private
1840
1867
  */
1841
- declare function getUmbrellaStoreForClient<M extends BaseMetadata$1>(client: OpaqueClient): UmbrellaStore<M>;
1868
+ declare function getUmbrellaStoreForClient<TM extends BaseMetadata$1, CM extends BaseMetadata$1>(client: OpaqueClient): UmbrellaStore<TM, CM>;
1842
1869
  /**
1843
1870
  * Returns a function that creates an AI chat.
1844
1871
  *
@@ -1940,7 +1967,7 @@ declare function LiveblocksProvider<U extends BaseUserMeta = DU>(props: PropsWit
1940
1967
  * LiveblocksProvider created in this way takes no props, because it uses
1941
1968
  * settings from the given client instead.
1942
1969
  */
1943
- declare function createLiveblocksContext<U extends BaseUserMeta = DU, M extends BaseMetadata$1 = DM>(client: OpaqueClient): LiveblocksContextBundle<U, M>;
1970
+ declare function createLiveblocksContext<U extends BaseUserMeta = DU, TM extends BaseMetadata$1 = DTM, CM extends BaseMetadata$1 = DCM>(client: OpaqueClient): LiveblocksContextBundle<U, TM, CM>;
1944
1971
  /**
1945
1972
  * Returns the inbox notifications for the current user.
1946
1973
  *
@@ -2067,7 +2094,7 @@ declare function useGroupInfo(groupId: string): GroupInfoAsyncResult;
2067
2094
  * const { info } = useGroupInfo("group-id");
2068
2095
  */
2069
2096
  declare function useGroupInfoSuspense(groupId: string): GroupInfoAsyncSuccess;
2070
- type TypedBundle$1 = LiveblocksContextBundle<DU, DM>;
2097
+ type TypedBundle$1 = LiveblocksContextBundle<DU, DTM, DCM>;
2071
2098
  /**
2072
2099
  * Returns the thread associated with a `"thread"` inbox notification.
2073
2100
  *
@@ -2287,33 +2314,17 @@ declare function useOthersConnectionIds(): readonly number[];
2287
2314
  /**
2288
2315
  * @private
2289
2316
  */
2290
- declare function useCreateRoomThread<M extends BaseMetadata$1>(roomId: string): (options: CreateThreadOptions<M>) => ThreadData$1<M>;
2317
+ declare function useCreateRoomThread<TM extends BaseMetadata$1, CM extends BaseMetadata$1>(roomId: string): (options: CreateThreadOptions<TM, CM>) => ThreadData$1<TM, CM>;
2291
2318
  declare function useDeleteRoomThread(roomId: string): (threadId: string) => void;
2292
- declare function useEditRoomThreadMetadata<M extends BaseMetadata$1>(roomId: string): (options: EditThreadMetadataOptions<M>) => void;
2293
- /**
2294
- * Returns a function that adds a comment to a thread.
2295
- *
2296
- * @example
2297
- * const createComment = useCreateComment();
2298
- * createComment({ threadId: "th_xxx", body: {} });
2299
- */
2300
- declare function useCreateComment(): (options: CreateCommentOptions) => CommentData$1;
2319
+ declare function useEditRoomThreadMetadata<TM extends BaseMetadata$1>(roomId: string): (options: EditThreadMetadataOptions<TM>) => void;
2301
2320
  /**
2302
2321
  * @private
2303
2322
  */
2304
- declare function useCreateRoomComment(roomId: string): (options: CreateCommentOptions) => CommentData$1;
2305
- /**
2306
- * Returns a function that edits a comment's body.
2307
- *
2308
- * @example
2309
- * const editComment = useEditComment()
2310
- * editComment({ threadId: "th_xxx", commentId: "cm_xxx", body: {} })
2311
- */
2312
- declare function useEditComment(): (options: EditCommentOptions) => void;
2323
+ declare function useCreateRoomComment<CM extends BaseMetadata$1>(roomId: string): (options: CreateCommentOptions<CM>) => CommentData$1<CM>;
2313
2324
  /**
2314
2325
  * @private
2315
2326
  */
2316
- declare function useEditRoomComment(roomId: string): (options: EditCommentOptions) => void;
2327
+ declare function useEditRoomComment<CM extends BaseMetadata$1>(roomId: string): (options: EditCommentOptions<CM>) => void;
2317
2328
  /**
2318
2329
  * Returns a function that deletes a comment.
2319
2330
  * If it is the last non-deleted comment, the thread also gets deleted.
@@ -2330,7 +2341,7 @@ declare function useDeleteRoomComment(roomId: string): ({ threadId, commentId }:
2330
2341
  /**
2331
2342
  * @private
2332
2343
  */
2333
- declare function useAddRoomCommentReaction<M extends BaseMetadata$1>(roomId: string): ({ threadId, commentId, emoji }: CommentReactionOptions) => void;
2344
+ declare function useAddRoomCommentReaction(roomId: string): ({ threadId, commentId, emoji }: CommentReactionOptions) => void;
2334
2345
  /**
2335
2346
  * Returns a function that removes a reaction on a comment.
2336
2347
  *
@@ -2469,8 +2480,8 @@ declare function useRoomPermissions(roomId: string): Set<_liveblocks_core.Permis
2469
2480
  * that any RoomProvider created in this way does not need to be nested in
2470
2481
  * LiveblocksProvider, as it already has access to the client.
2471
2482
  */
2472
- declare function createRoomContext<P extends JsonObject = DP, S extends LsonObject = DS, U extends BaseUserMeta = DU, E extends Json = DE, M extends BaseMetadata$1 = DM>(client: OpaqueClient): RoomContextBundle<P, S, U, E, M>;
2473
- type TypedBundle = RoomContextBundle<DP, DS, DU, DE, DM>;
2483
+ declare function createRoomContext<P extends JsonObject = DP, S extends LsonObject = DS, U extends BaseUserMeta = DU, E extends Json = DE, TM extends BaseMetadata$1 = DTM, CM extends BaseMetadata$1 = DCM>(client: OpaqueClient): RoomContextBundle<P, S, U, E, TM, CM>;
2484
+ type TypedBundle = RoomContextBundle<DP, DS, DU, DE, DTM, DCM>;
2474
2485
  /**
2475
2486
  * Makes a Room available in the component hierarchy below.
2476
2487
  * Joins the room when the component is mounted, and automatically leaves
@@ -2589,6 +2600,31 @@ declare const _useDeleteThread: TypedBundle["useDeleteThread"];
2589
2600
  * editThreadMetadata({ threadId: "th_xxx", metadata: {} })
2590
2601
  */
2591
2602
  declare const _useEditThreadMetadata: TypedBundle["useEditThreadMetadata"];
2603
+ /**
2604
+ * Returns a function that adds a comment to a thread.
2605
+ *
2606
+ * @example
2607
+ * const createComment = useCreateComment();
2608
+ * createComment({ threadId: "th_xxx", body: {} });
2609
+ */
2610
+ declare const _useCreateComment: TypedBundle["useCreateComment"];
2611
+ /**
2612
+ * Returns a function that edits a comment.
2613
+ *
2614
+ * @example
2615
+ * const editComment = useEditComment()
2616
+ * editComment({ threadId: "th_xxx", commentId: "cm_xxx", body: {} })
2617
+ */
2618
+ declare const _useEditComment: TypedBundle["useEditComment"];
2619
+ /**
2620
+ * Returns a function that edits a comment's metadata.
2621
+ * To delete an existing metadata property, set its value to `null`.
2622
+ *
2623
+ * @example
2624
+ * const editCommentMetadata = useEditCommentMetadata();
2625
+ * editCommentMetadata({ threadId: "th_xxx", commentId: "cm_xxx", metadata: { slackChannelId: "C024BE91L", slackMessageTs: "1700311782.001200" } })
2626
+ */
2627
+ declare const _useEditCommentMetadata: TypedBundle["useEditCommentMetadata"];
2592
2628
  /**
2593
2629
  * useEventListener is a React hook that allows you to respond to events broadcast
2594
2630
  * by other users in the room.
@@ -2947,4 +2983,4 @@ declare const _useStorageRoot: TypedBundle["useStorageRoot"];
2947
2983
  */
2948
2984
  declare const _useUpdateMyPresence: TypedBundle["useUpdateMyPresence"];
2949
2985
 
2950
- export { _useEditThreadMetadata as $, type AiChatStatus as A, createLiveblocksContext as B, ClientContext as C, useDeleteAllInboxNotifications as D, useDeleteInboxNotification as E, useErrorListener as F, type GroupAsyncResult as G, useMarkAllInboxNotificationsAsRead as H, useMarkInboxNotificationAsRead as I, useSyncStatus as J, createRoomContext as K, LiveblocksProvider as L, type MutationContext as M, _RoomProvider as N, _useAddReaction as O, _useBroadcastEvent as P, useCanRedo as Q, type RegisterAiKnowledgeProps as R, type SendAiMessageOptions as S, useCanUndo as T, type UseSendAiMessageOptions as U, useCreateComment as V, _useCreateThread as W, useDeleteComment as X, _useDeleteThread as Y, useEditComment as Z, _useInboxNotificationThread as _, useAddRoomCommentReaction as a, useUnreadInboxNotificationsCountSuspense as a$, useMarkThreadAsResolved as a0, useMarkThreadAsUnresolved as a1, useSubscribeToThread as a2, useUnsubscribeFromThread as a3, _useEventListener as a4, useHistory as a5, _useIsInsideRoom as a6, useLostConnectionListener as a7, useMarkThreadAsRead as a8, _useMutation as a9, useCreateAiChat as aA, useDeleteAiChat as aB, useSendAiMessage as aC, _useUserThreads_experimental as aD, useRoomInfo as aE, useGroupInfo as aF, useUnreadInboxNotificationsCount as aG, _useUser as aH, _useAiChat as aI, _useAiChats as aJ, _useAiChatMessages as aK, useAiChatStatus as aL, _useUrlMetadata as aM, _useOtherSuspense as aN, _useOthersSuspense as aO, useOthersConnectionIdsSuspense as aP, _useOthersMappedSuspense as aQ, _useSelfSuspense as aR, _useStorageSuspense as aS, _useThreadsSuspense as aT, useAttachmentUrlSuspense as aU, _useHistoryVersionsSuspense as aV, _useRoomSubscriptionSettingsSuspense as aW, useInboxNotificationsSuspense as aX, useNotificationSettingsSuspense as aY, useRoomInfoSuspense as aZ, useGroupInfoSuspense as a_, _useMyPresence as aa, _useOthersListener as ab, useRedo as ac, useRemoveReaction as ad, _useRoom as ae, useStatus as af, _useStorageRoot as ag, useThreadSubscription as ah, useUndo as ai, _useUpdateMyPresence as aj, useUpdateRoomSubscriptionSettings as ak, useHistoryVersionData as al, _useOther as am, _useOthers as an, useOthersConnectionIds as ao, _useOthersMapped as ap, _useSelf as aq, _useStorage as ar, _useThreads as as, _useSearchComments as at, useAttachmentUrl as au, _useHistoryVersions as av, _useRoomSubscriptionSettings as aw, useInboxNotifications as ax, useNotificationSettings as ay, useUpdateNotificationSettings as az, useCreateRoomComment as b, _useUserSuspense as b0, _useUserThreadsSuspense_experimental as b1, _useAiChatsSuspense as b2, _useAiChatMessagesSuspense as b3, _useAiChatSuspense as b4, _useUrlMetadataSuspense as b5, useCreateRoomThread as c, useCreateTextMention as d, useDeleteRoomComment as e, useDeleteRoomThread as f, getUmbrellaStoreForClient as g, useDeleteTextMention as h, useEditRoomComment as i, useEditRoomThreadMetadata as j, useMarkRoomThreadAsRead as k, useMarkRoomThreadAsResolved as l, useMarkRoomThreadAsUnresolved as m, useMentionSuggestionsCache as n, useRemoveRoomCommentReaction as o, useReportTextEditor as p, useResolveMentionSuggestions as q, useRoomAttachmentUrl as r, useRoomPermissions as s, useRoomThreadSubscription as t, useClientOrNull as u, useYjsProvider as v, type RegisterAiToolProps as w, type UseThreadsOptions as x, RoomContext as y, useClient as z };
2986
+ export { _useEditThreadMetadata as $, type AiChatStatus as A, createLiveblocksContext as B, ClientContext as C, useDeleteAllInboxNotifications as D, useDeleteInboxNotification as E, useErrorListener as F, type GroupAsyncResult as G, useMarkAllInboxNotificationsAsRead as H, useMarkInboxNotificationAsRead as I, useSyncStatus as J, createRoomContext as K, LiveblocksProvider as L, type MutationContext as M, _RoomProvider as N, _useAddReaction as O, _useBroadcastEvent as P, useCanRedo as Q, type RegisterAiKnowledgeProps as R, type SendAiMessageOptions as S, useCanUndo as T, type UseSendAiMessageOptions as U, _useCreateComment as V, _useCreateThread as W, useDeleteComment as X, _useDeleteThread as Y, _useEditComment as Z, _useInboxNotificationThread as _, useAddRoomCommentReaction as a, useGroupInfoSuspense as a$, _useEditCommentMetadata as a0, useMarkThreadAsResolved as a1, useMarkThreadAsUnresolved as a2, useSubscribeToThread as a3, useUnsubscribeFromThread as a4, _useEventListener as a5, useHistory as a6, _useIsInsideRoom as a7, useLostConnectionListener as a8, useMarkThreadAsRead as a9, useUpdateNotificationSettings as aA, useCreateAiChat as aB, useDeleteAiChat as aC, useSendAiMessage as aD, _useUserThreads_experimental as aE, useRoomInfo as aF, useGroupInfo as aG, useUnreadInboxNotificationsCount as aH, _useUser as aI, _useAiChat as aJ, _useAiChats as aK, _useAiChatMessages as aL, useAiChatStatus as aM, _useUrlMetadata as aN, _useOtherSuspense as aO, _useOthersSuspense as aP, useOthersConnectionIdsSuspense as aQ, _useOthersMappedSuspense as aR, _useSelfSuspense as aS, _useStorageSuspense as aT, _useThreadsSuspense as aU, useAttachmentUrlSuspense as aV, _useHistoryVersionsSuspense as aW, _useRoomSubscriptionSettingsSuspense as aX, useInboxNotificationsSuspense as aY, useNotificationSettingsSuspense as aZ, useRoomInfoSuspense as a_, _useMutation as aa, _useMyPresence as ab, _useOthersListener as ac, useRedo as ad, useRemoveReaction as ae, _useRoom as af, useStatus as ag, _useStorageRoot as ah, useThreadSubscription as ai, useUndo as aj, _useUpdateMyPresence as ak, useUpdateRoomSubscriptionSettings as al, useHistoryVersionData as am, _useOther as an, _useOthers as ao, useOthersConnectionIds as ap, _useOthersMapped as aq, _useSelf as ar, _useStorage as as, _useThreads as at, _useSearchComments as au, useAttachmentUrl as av, _useHistoryVersions as aw, _useRoomSubscriptionSettings as ax, useInboxNotifications as ay, useNotificationSettings as az, useCreateRoomComment as b, useUnreadInboxNotificationsCountSuspense as b0, _useUserSuspense as b1, _useUserThreadsSuspense_experimental as b2, _useAiChatsSuspense as b3, _useAiChatMessagesSuspense as b4, _useAiChatSuspense as b5, _useUrlMetadataSuspense as b6, useCreateRoomThread as c, useCreateTextMention as d, useDeleteRoomComment as e, useDeleteRoomThread as f, getUmbrellaStoreForClient as g, useDeleteTextMention as h, useEditRoomComment as i, useEditRoomThreadMetadata as j, useMarkRoomThreadAsRead as k, useMarkRoomThreadAsResolved as l, useMarkRoomThreadAsUnresolved as m, useMentionSuggestionsCache as n, useRemoveRoomCommentReaction as o, useReportTextEditor as p, useResolveMentionSuggestions as q, useRoomAttachmentUrl as r, useRoomPermissions as s, useRoomThreadSubscription as t, useClientOrNull as u, useYjsProvider as v, type RegisterAiToolProps as w, type UseThreadsOptions as x, RoomContext as y, useClient as z };