@liveblocks/react 3.21.0-rc1 → 3.22.0-file1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/_private.cjs CHANGED
@@ -29,7 +29,8 @@
29
29
 
30
30
 
31
31
 
32
- var _chunkK73KKSIGcjs = require('./chunk-K73KKSIG.cjs');
32
+
33
+ var _chunkTWH7P3HKcjs = require('./chunk-TWH7P3HK.cjs');
33
34
 
34
35
  // src/lib/use-layout-effect.ts
35
36
  var _react = require('react');
@@ -54,7 +55,7 @@ function selectorFor_useGroup(state) {
54
55
  };
55
56
  }
56
57
  function useGroup(groupId) {
57
- const client = _chunkK73KKSIGcjs.useClient.call(void 0, );
58
+ const client = _chunkTWH7P3HKcjs.useClient.call(void 0, );
58
59
  const store = client[_core.kInternal].httpClient.groupsStore;
59
60
  const getGroupState = _react.useCallback.call(void 0,
60
61
  () => store.getItemState(groupId),
@@ -63,7 +64,7 @@ function useGroup(groupId) {
63
64
  _react.useEffect.call(void 0, () => {
64
65
  void store.enqueue(groupId);
65
66
  }, [store, groupId]);
66
- return _chunkK73KKSIGcjs.useSyncExternalStoreWithSelector.call(void 0,
67
+ return _chunkTWH7P3HKcjs.useSyncExternalStoreWithSelector.call(void 0,
67
68
  store.subscribe,
68
69
  getGroupState,
69
70
  getGroupState,
@@ -84,8 +85,8 @@ function normalizeMentionSuggestions(suggestions) {
84
85
  function useMentionSuggestions(roomId, search) {
85
86
  const [mentionSuggestions, setMentionSuggestions] = _react.useState.call(void 0, );
86
87
  const lastInvokedAt = _react.useRef.call(void 0, );
87
- const resolveMentionSuggestions = _chunkK73KKSIGcjs.useResolveMentionSuggestions.call(void 0, );
88
- const mentionSuggestionsCache = _chunkK73KKSIGcjs.useMentionSuggestionsCache.call(void 0, );
88
+ const resolveMentionSuggestions = _chunkTWH7P3HKcjs.useResolveMentionSuggestions.call(void 0, );
89
+ const mentionSuggestionsCache = _chunkTWH7P3HKcjs.useMentionSuggestionsCache.call(void 0, );
89
90
  _react.useEffect.call(void 0, () => {
90
91
  if (search === void 0 || !resolveMentionSuggestions) {
91
92
  return;
@@ -140,7 +141,7 @@ function useMentionSuggestions(roomId, search) {
140
141
 
141
142
 
142
143
  function useSyncSource() {
143
- const client = _chunkK73KKSIGcjs.useClient.call(void 0, );
144
+ const client = _chunkTWH7P3HKcjs.useClient.call(void 0, );
144
145
  const createSyncSource = client[_core.kInternal].createSyncSource;
145
146
  const [syncSource, setSyncSource] = _react.useState.call(void 0, );
146
147
  _react.useEffect.call(void 0, () => {
@@ -184,5 +185,6 @@ function useSyncSource() {
184
185
 
185
186
 
186
187
 
187
- exports.getUmbrellaStoreForClient = _chunkK73KKSIGcjs.getUmbrellaStoreForClient; exports.useAddRoomCommentReaction = _chunkK73KKSIGcjs.useAddRoomCommentReaction; exports.useClientOrNull = _chunkK73KKSIGcjs.useClientOrNull; exports.useCreateRoomComment = _chunkK73KKSIGcjs.useCreateRoomComment; exports.useCreateRoomThread = _chunkK73KKSIGcjs.useCreateRoomThread; exports.useCreateTextMention = _chunkK73KKSIGcjs.useCreateTextMention; exports.useDeleteRoomComment = _chunkK73KKSIGcjs.useDeleteRoomComment; exports.useDeleteRoomThread = _chunkK73KKSIGcjs.useDeleteRoomThread; exports.useDeleteTextMention = _chunkK73KKSIGcjs.useDeleteTextMention; exports.useEditRoomComment = _chunkK73KKSIGcjs.useEditRoomComment; exports.useEditRoomThreadMetadata = _chunkK73KKSIGcjs.useEditRoomThreadMetadata; exports.useGroup = useGroup; exports.useHasPermissionAccess = _chunkK73KKSIGcjs.useHasPermissionAccess; exports.useInitial = _chunkK73KKSIGcjs.useInitial; exports.useLatest = _chunkK73KKSIGcjs.useLatest; exports.useLayoutEffect = useLayoutEffect; exports.useMarkRoomThreadAsRead = _chunkK73KKSIGcjs.useMarkRoomThreadAsRead; exports.useMarkRoomThreadAsResolved = _chunkK73KKSIGcjs.useMarkRoomThreadAsResolved; exports.useMarkRoomThreadAsUnresolved = _chunkK73KKSIGcjs.useMarkRoomThreadAsUnresolved; exports.useMentionSuggestions = useMentionSuggestions; exports.useMentionSuggestionsCache = _chunkK73KKSIGcjs.useMentionSuggestionsCache; exports.useRemoveRoomCommentReaction = _chunkK73KKSIGcjs.useRemoveRoomCommentReaction; exports.useReportTextEditor = _chunkK73KKSIGcjs.useReportTextEditor; exports.useResolveMentionSuggestions = _chunkK73KKSIGcjs.useResolveMentionSuggestions; exports.useRoomAttachmentUrl = _chunkK73KKSIGcjs.useRoomAttachmentUrl; exports.useRoomPermissions = _chunkK73KKSIGcjs.useRoomPermissions; exports.useRoomThreadSubscription = _chunkK73KKSIGcjs.useRoomThreadSubscription; exports.useSignal = _chunkK73KKSIGcjs.useSignal; exports.useSuspendUntilPresenceReady = _chunkK73KKSIGcjs.useSuspendUntilPresenceReady; exports.useSuspendUntilStorageReady = _chunkK73KKSIGcjs.useSuspendUntilStorageReady; exports.useSyncExternalStoreWithSelector = _chunkK73KKSIGcjs.useSyncExternalStoreWithSelector; exports.useSyncSource = useSyncSource; exports.useYjsProvider = _chunkK73KKSIGcjs.useYjsProvider;
188
+
189
+ exports.getUmbrellaStoreForClient = _chunkTWH7P3HKcjs.getUmbrellaStoreForClient; exports.useAddRoomCommentReaction = _chunkTWH7P3HKcjs.useAddRoomCommentReaction; exports.useClientOrNull = _chunkTWH7P3HKcjs.useClientOrNull; exports.useCreateRoomComment = _chunkTWH7P3HKcjs.useCreateRoomComment; exports.useCreateRoomThread = _chunkTWH7P3HKcjs.useCreateRoomThread; exports.useCreateTextMention = _chunkTWH7P3HKcjs.useCreateTextMention; exports.useDeleteRoomComment = _chunkTWH7P3HKcjs.useDeleteRoomComment; exports.useDeleteRoomThread = _chunkTWH7P3HKcjs.useDeleteRoomThread; exports.useDeleteTextMention = _chunkTWH7P3HKcjs.useDeleteTextMention; exports.useEditRoomComment = _chunkTWH7P3HKcjs.useEditRoomComment; exports.useEditRoomThreadMetadata = _chunkTWH7P3HKcjs.useEditRoomThreadMetadata; exports.useGroup = useGroup; exports.useHasPermissionAccess = _chunkTWH7P3HKcjs.useHasPermissionAccess; exports.useInitial = _chunkTWH7P3HKcjs.useInitial; exports.useLatest = _chunkTWH7P3HKcjs.useLatest; exports.useLayoutEffect = useLayoutEffect; exports.useMarkRoomThreadAsRead = _chunkTWH7P3HKcjs.useMarkRoomThreadAsRead; exports.useMarkRoomThreadAsResolved = _chunkTWH7P3HKcjs.useMarkRoomThreadAsResolved; exports.useMarkRoomThreadAsUnresolved = _chunkTWH7P3HKcjs.useMarkRoomThreadAsUnresolved; exports.useMentionSuggestions = useMentionSuggestions; exports.useMentionSuggestionsCache = _chunkTWH7P3HKcjs.useMentionSuggestionsCache; exports.useRemoveRoomCommentReaction = _chunkTWH7P3HKcjs.useRemoveRoomCommentReaction; exports.useReportTextEditor = _chunkTWH7P3HKcjs.useReportTextEditor; exports.useResolveMentionSuggestions = _chunkTWH7P3HKcjs.useResolveMentionSuggestions; exports.useRoomAttachmentUrl = _chunkTWH7P3HKcjs.useRoomAttachmentUrl; exports.useRoomFileUrl = _chunkTWH7P3HKcjs.useRoomFileUrl; exports.useRoomPermissions = _chunkTWH7P3HKcjs.useRoomPermissions; exports.useRoomThreadSubscription = _chunkTWH7P3HKcjs.useRoomThreadSubscription; exports.useSignal = _chunkTWH7P3HKcjs.useSignal; exports.useSuspendUntilPresenceReady = _chunkTWH7P3HKcjs.useSuspendUntilPresenceReady; exports.useSuspendUntilStorageReady = _chunkTWH7P3HKcjs.useSuspendUntilStorageReady; exports.useSyncExternalStoreWithSelector = _chunkTWH7P3HKcjs.useSyncExternalStoreWithSelector; exports.useSyncSource = useSyncSource; exports.useYjsProvider = _chunkTWH7P3HKcjs.useYjsProvider;
188
190
  //# sourceMappingURL=_private.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/liveblocks/liveblocks/packages/liveblocks-react/dist/_private.cjs","../src/lib/use-layout-effect.ts","../src/use-group.ts","../src/use-mention-suggestions.ts","../src/use-sync-source.ts"],"names":["useEffect","kInternal","useState"],"mappings":"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","file":"/home/runner/work/liveblocks/liveblocks/packages/liveblocks-react/dist/_private.cjs","sourcesContent":[null,"/* eslint-disable no-restricted-syntax */\n\nimport { useEffect, useLayoutEffect as useOriginalLayoutEffect } from \"react\";\n\n// On React 18.2.0 and earlier, useLayoutEffect triggers a warning when\n// executed on the server, so this workaround should be used instead.\nexport const useLayoutEffect =\n typeof window !== \"undefined\" ? useOriginalLayoutEffect : useEffect;\n","import {\n type AsyncResult,\n type GroupData,\n kInternal,\n shallow,\n} from \"@liveblocks/core\";\nimport { useCallback, useEffect } from \"react\";\n\nimport { useClient } from \"./contexts\";\nimport type { GroupAsyncResult } from \"./types\";\nimport { useSyncExternalStoreWithSelector } from \"./use-sync-external-store-with-selector\";\n\nfunction selectorFor_useGroup(\n state: AsyncResult<GroupData | undefined> | undefined\n): GroupAsyncResult {\n if (state === undefined || state?.isLoading) {\n return state ?? { isLoading: true };\n }\n\n if (state.error) {\n return state;\n }\n\n return {\n isLoading: false,\n group: state.data,\n };\n}\n\n/** @private - Internal API, do not rely on it. */\nexport function useGroup(groupId: string): GroupAsyncResult {\n const client = useClient();\n const store = client[kInternal].httpClient.groupsStore;\n\n const getGroupState = useCallback(\n () => store.getItemState(groupId),\n [store, groupId]\n );\n\n useEffect(() => {\n void store.enqueue(groupId);\n }, [store, groupId]);\n\n return useSyncExternalStoreWithSelector(\n store.subscribe,\n getGroupState,\n getGroupState,\n selectorFor_useGroup,\n shallow\n );\n}\n","import { type MentionData, stableStringify } from \"@liveblocks/core\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport {\n useMentionSuggestionsCache,\n useResolveMentionSuggestions,\n} from \"./room\";\n\nconst MENTION_SUGGESTIONS_DEBOUNCE = 500;\n\n/**\n * Normalize mention suggestions as `MentionData[]`.\n *\n * Mention suggestions were previously typed as `string[]`, a list of user IDs,\n * but to support multiple mention kinds (user, group, etc), they're now\n * typed as `MentionData[]`.\n */\nfunction normalizeMentionSuggestions<T extends string[] | MentionData[]>(\n suggestions: T\n): MentionData[] {\n return suggestions.map(\n (suggestion): MentionData =>\n typeof suggestion === \"string\"\n ? { kind: \"user\" as const, id: suggestion }\n : suggestion\n );\n}\n\n/**\n * @private For internal use only. Do not rely on this hook.\n *\n * Simplistic debounced search, we don't need to worry too much about deduping\n * and race conditions as there can only be one search at a time.\n */\nexport function useMentionSuggestions(roomId: string, search?: string) {\n const [mentionSuggestions, setMentionSuggestions] = useState<MentionData[]>();\n const lastInvokedAt = useRef<number>();\n\n const resolveMentionSuggestions = useResolveMentionSuggestions();\n const mentionSuggestionsCache = useMentionSuggestionsCache();\n\n useEffect(() => {\n if (search === undefined || !resolveMentionSuggestions) {\n return;\n }\n\n const resolveMentionSuggestionsArgs = { text: search, roomId };\n const mentionSuggestionsCacheKey = stableStringify(\n resolveMentionSuggestionsArgs\n );\n let debounceTimeout: number | undefined;\n let isCanceled = false;\n\n const getMentionSuggestions = async () => {\n try {\n lastInvokedAt.current = performance.now();\n const rawMentionSuggestions = await resolveMentionSuggestions(\n resolveMentionSuggestionsArgs\n );\n\n if (!isCanceled) {\n const normalizedSuggestions = normalizeMentionSuggestions(\n rawMentionSuggestions\n );\n setMentionSuggestions(normalizedSuggestions);\n mentionSuggestionsCache.set(\n mentionSuggestionsCacheKey,\n normalizedSuggestions\n );\n }\n } catch (error) {\n console.error((error as Error)?.message);\n }\n };\n\n if (mentionSuggestionsCache.has(mentionSuggestionsCacheKey)) {\n // If there are already cached mention suggestions, use them immediately.\n const cachedSuggestions = mentionSuggestionsCache.get(\n mentionSuggestionsCacheKey\n );\n setMentionSuggestions(cachedSuggestions);\n } else if (\n !lastInvokedAt.current ||\n Math.abs(performance.now() - lastInvokedAt.current) >\n MENTION_SUGGESTIONS_DEBOUNCE\n ) {\n // If on the debounce's leading edge (either because it's the first invokation or enough\n // time has passed since the last debounce), get mention suggestions immediately.\n void getMentionSuggestions();\n } else {\n // Otherwise, wait for the debounce delay.\n debounceTimeout = window.setTimeout(() => {\n void getMentionSuggestions();\n }, MENTION_SUGGESTIONS_DEBOUNCE);\n }\n\n return () => {\n isCanceled = true;\n window.clearTimeout(debounceTimeout);\n };\n }, [search, roomId, resolveMentionSuggestions, mentionSuggestionsCache]);\n\n return mentionSuggestions;\n}\n","import type { SyncSource } from \"@liveblocks/core\";\nimport { kInternal } from \"@liveblocks/core\";\nimport { useEffect, useState } from \"react\";\n\nimport { useClient } from \"./contexts\";\n\n/**\n * @private For internal use only. Do not rely on this hook.\n */\nexport function useSyncSource(): SyncSource | undefined {\n const client = useClient();\n const createSyncSource = client[kInternal].createSyncSource;\n const [syncSource, setSyncSource] = useState<SyncSource | undefined>();\n\n useEffect(() => {\n // Create new sync source on mount\n const newSyncSource = createSyncSource();\n setSyncSource(newSyncSource);\n return () => newSyncSource.destroy();\n }, [createSyncSource]);\n\n return syncSource;\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/liveblocks/liveblocks/packages/liveblocks-react/dist/_private.cjs","../src/lib/use-layout-effect.ts","../src/use-group.ts","../src/use-mention-suggestions.ts","../src/use-sync-source.ts"],"names":["useEffect","kInternal","useState"],"mappings":"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","file":"/home/runner/work/liveblocks/liveblocks/packages/liveblocks-react/dist/_private.cjs","sourcesContent":[null,"/* eslint-disable no-restricted-syntax */\n\nimport { useEffect, useLayoutEffect as useOriginalLayoutEffect } from \"react\";\n\n// On React 18.2.0 and earlier, useLayoutEffect triggers a warning when\n// executed on the server, so this workaround should be used instead.\nexport const useLayoutEffect =\n typeof window !== \"undefined\" ? useOriginalLayoutEffect : useEffect;\n","import {\n type AsyncResult,\n type GroupData,\n kInternal,\n shallow,\n} from \"@liveblocks/core\";\nimport { useCallback, useEffect } from \"react\";\n\nimport { useClient } from \"./contexts\";\nimport type { GroupAsyncResult } from \"./types\";\nimport { useSyncExternalStoreWithSelector } from \"./use-sync-external-store-with-selector\";\n\nfunction selectorFor_useGroup(\n state: AsyncResult<GroupData | undefined> | undefined\n): GroupAsyncResult {\n if (state === undefined || state?.isLoading) {\n return state ?? { isLoading: true };\n }\n\n if (state.error) {\n return state;\n }\n\n return {\n isLoading: false,\n group: state.data,\n };\n}\n\n/** @private - Internal API, do not rely on it. */\nexport function useGroup(groupId: string): GroupAsyncResult {\n const client = useClient();\n const store = client[kInternal].httpClient.groupsStore;\n\n const getGroupState = useCallback(\n () => store.getItemState(groupId),\n [store, groupId]\n );\n\n useEffect(() => {\n void store.enqueue(groupId);\n }, [store, groupId]);\n\n return useSyncExternalStoreWithSelector(\n store.subscribe,\n getGroupState,\n getGroupState,\n selectorFor_useGroup,\n shallow\n );\n}\n","import { type MentionData, stableStringify } from \"@liveblocks/core\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport {\n useMentionSuggestionsCache,\n useResolveMentionSuggestions,\n} from \"./room\";\n\nconst MENTION_SUGGESTIONS_DEBOUNCE = 500;\n\n/**\n * Normalize mention suggestions as `MentionData[]`.\n *\n * Mention suggestions were previously typed as `string[]`, a list of user IDs,\n * but to support multiple mention kinds (user, group, etc), they're now\n * typed as `MentionData[]`.\n */\nfunction normalizeMentionSuggestions<T extends string[] | MentionData[]>(\n suggestions: T\n): MentionData[] {\n return suggestions.map(\n (suggestion): MentionData =>\n typeof suggestion === \"string\"\n ? { kind: \"user\" as const, id: suggestion }\n : suggestion\n );\n}\n\n/**\n * @private For internal use only. Do not rely on this hook.\n *\n * Simplistic debounced search, we don't need to worry too much about deduping\n * and race conditions as there can only be one search at a time.\n */\nexport function useMentionSuggestions(roomId: string, search?: string) {\n const [mentionSuggestions, setMentionSuggestions] = useState<MentionData[]>();\n const lastInvokedAt = useRef<number>();\n\n const resolveMentionSuggestions = useResolveMentionSuggestions();\n const mentionSuggestionsCache = useMentionSuggestionsCache();\n\n useEffect(() => {\n if (search === undefined || !resolveMentionSuggestions) {\n return;\n }\n\n const resolveMentionSuggestionsArgs = { text: search, roomId };\n const mentionSuggestionsCacheKey = stableStringify(\n resolveMentionSuggestionsArgs\n );\n let debounceTimeout: number | undefined;\n let isCanceled = false;\n\n const getMentionSuggestions = async () => {\n try {\n lastInvokedAt.current = performance.now();\n const rawMentionSuggestions = await resolveMentionSuggestions(\n resolveMentionSuggestionsArgs\n );\n\n if (!isCanceled) {\n const normalizedSuggestions = normalizeMentionSuggestions(\n rawMentionSuggestions\n );\n setMentionSuggestions(normalizedSuggestions);\n mentionSuggestionsCache.set(\n mentionSuggestionsCacheKey,\n normalizedSuggestions\n );\n }\n } catch (error) {\n console.error((error as Error)?.message);\n }\n };\n\n if (mentionSuggestionsCache.has(mentionSuggestionsCacheKey)) {\n // If there are already cached mention suggestions, use them immediately.\n const cachedSuggestions = mentionSuggestionsCache.get(\n mentionSuggestionsCacheKey\n );\n setMentionSuggestions(cachedSuggestions);\n } else if (\n !lastInvokedAt.current ||\n Math.abs(performance.now() - lastInvokedAt.current) >\n MENTION_SUGGESTIONS_DEBOUNCE\n ) {\n // If on the debounce's leading edge (either because it's the first invokation or enough\n // time has passed since the last debounce), get mention suggestions immediately.\n void getMentionSuggestions();\n } else {\n // Otherwise, wait for the debounce delay.\n debounceTimeout = window.setTimeout(() => {\n void getMentionSuggestions();\n }, MENTION_SUGGESTIONS_DEBOUNCE);\n }\n\n return () => {\n isCanceled = true;\n window.clearTimeout(debounceTimeout);\n };\n }, [search, roomId, resolveMentionSuggestions, mentionSuggestionsCache]);\n\n return mentionSuggestions;\n}\n","import type { SyncSource } from \"@liveblocks/core\";\nimport { kInternal } from \"@liveblocks/core\";\nimport { useEffect, useState } from \"react\";\n\nimport { useClient } from \"./contexts\";\n\n/**\n * @private For internal use only. Do not rely on this hook.\n */\nexport function useSyncSource(): SyncSource | undefined {\n const client = useClient();\n const createSyncSource = client[kInternal].createSyncSource;\n const [syncSource, setSyncSource] = useState<SyncSource | undefined>();\n\n useEffect(() => {\n // Create new sync source on mount\n const newSyncSource = createSyncSource();\n setSyncSource(newSyncSource);\n return () => newSyncSource.destroy();\n }, [createSyncSource]);\n\n return syncSource;\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { G as GroupAsyncResult } from './room-gISRc7sm.cjs';
2
- export { g as getUmbrellaStoreForClient, u as useAddRoomCommentReaction, a as useClientOrNull, b as useCreateRoomComment, c as useCreateRoomThread, d as useCreateTextMention, e as useDeleteRoomComment, f as useDeleteRoomThread, h as useDeleteTextMention, i as useEditRoomComment, j as useEditRoomThreadMetadata, k as useHasPermissionAccess, l as useMarkRoomThreadAsRead, m as useMarkRoomThreadAsResolved, n as useMarkRoomThreadAsUnresolved, o as useMentionSuggestionsCache, p as useRemoveRoomCommentReaction, q as useReportTextEditor, r as useResolveMentionSuggestions, s as useRoomAttachmentUrl, t as useRoomPermissions, v as useRoomThreadSubscription, w as useSuspendUntilPresenceReady, x as useSuspendUntilStorageReady, y as useYjsProvider } from './room-gISRc7sm.cjs';
1
+ import { G as GroupAsyncResult } from './room-C0arh8HO.cjs';
2
+ export { g as getUmbrellaStoreForClient, u as useAddRoomCommentReaction, a as useClientOrNull, b as useCreateRoomComment, c as useCreateRoomThread, d as useCreateTextMention, e as useDeleteRoomComment, f as useDeleteRoomThread, h as useDeleteTextMention, i as useEditRoomComment, j as useEditRoomThreadMetadata, k as useHasPermissionAccess, l as useMarkRoomThreadAsRead, m as useMarkRoomThreadAsResolved, n as useMarkRoomThreadAsUnresolved, o as useMentionSuggestionsCache, p as useRemoveRoomCommentReaction, q as useReportTextEditor, r as useResolveMentionSuggestions, s as useRoomAttachmentUrl, t as useRoomFileUrl, v as useRoomPermissions, w as useRoomThreadSubscription, x as useSuspendUntilPresenceReady, y as useSuspendUntilStorageReady, z as useYjsProvider } from './room-C0arh8HO.cjs';
3
3
  import { MutableRefObject, useEffect } from 'react';
4
4
  import { MentionData, ISignal, SyncSource } from '@liveblocks/core';
5
5
  import '@liveblocks/client';
@@ -1,5 +1,5 @@
1
- import { G as GroupAsyncResult } from './room-gISRc7sm.js';
2
- export { g as getUmbrellaStoreForClient, u as useAddRoomCommentReaction, a as useClientOrNull, b as useCreateRoomComment, c as useCreateRoomThread, d as useCreateTextMention, e as useDeleteRoomComment, f as useDeleteRoomThread, h as useDeleteTextMention, i as useEditRoomComment, j as useEditRoomThreadMetadata, k as useHasPermissionAccess, l as useMarkRoomThreadAsRead, m as useMarkRoomThreadAsResolved, n as useMarkRoomThreadAsUnresolved, o as useMentionSuggestionsCache, p as useRemoveRoomCommentReaction, q as useReportTextEditor, r as useResolveMentionSuggestions, s as useRoomAttachmentUrl, t as useRoomPermissions, v as useRoomThreadSubscription, w as useSuspendUntilPresenceReady, x as useSuspendUntilStorageReady, y as useYjsProvider } from './room-gISRc7sm.js';
1
+ import { G as GroupAsyncResult } from './room-C0arh8HO.js';
2
+ export { g as getUmbrellaStoreForClient, u as useAddRoomCommentReaction, a as useClientOrNull, b as useCreateRoomComment, c as useCreateRoomThread, d as useCreateTextMention, e as useDeleteRoomComment, f as useDeleteRoomThread, h as useDeleteTextMention, i as useEditRoomComment, j as useEditRoomThreadMetadata, k as useHasPermissionAccess, l as useMarkRoomThreadAsRead, m as useMarkRoomThreadAsResolved, n as useMarkRoomThreadAsUnresolved, o as useMentionSuggestionsCache, p as useRemoveRoomCommentReaction, q as useReportTextEditor, r as useResolveMentionSuggestions, s as useRoomAttachmentUrl, t as useRoomFileUrl, v as useRoomPermissions, w as useRoomThreadSubscription, x as useSuspendUntilPresenceReady, y as useSuspendUntilStorageReady, z as useYjsProvider } from './room-C0arh8HO.js';
3
3
  import { MutableRefObject, useEffect } from 'react';
4
4
  import { MentionData, ISignal, SyncSource } from '@liveblocks/core';
5
5
  import '@liveblocks/client';
package/dist/_private.js CHANGED
@@ -22,6 +22,7 @@ import {
22
22
  useReportTextEditor,
23
23
  useResolveMentionSuggestions,
24
24
  useRoomAttachmentUrl,
25
+ useRoomFileUrl,
25
26
  useRoomPermissions,
26
27
  useRoomThreadSubscription,
27
28
  useSignal,
@@ -29,7 +30,7 @@ import {
29
30
  useSuspendUntilStorageReady,
30
31
  useSyncExternalStoreWithSelector,
31
32
  useYjsProvider
32
- } from "./chunk-4W555EA4.js";
33
+ } from "./chunk-L4ZABYCR.js";
33
34
 
34
35
  // src/lib/use-layout-effect.ts
35
36
  import { useEffect, useLayoutEffect as useOriginalLayoutEffect } from "react";
@@ -176,6 +177,7 @@ export {
176
177
  useReportTextEditor,
177
178
  useResolveMentionSuggestions,
178
179
  useRoomAttachmentUrl,
180
+ useRoomFileUrl,
179
181
  useRoomPermissions,
180
182
  useRoomThreadSubscription,
181
183
  useSignal,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/use-layout-effect.ts","../src/use-group.ts","../src/use-mention-suggestions.ts","../src/use-sync-source.ts"],"sourcesContent":["/* eslint-disable no-restricted-syntax */\n\nimport { useEffect, useLayoutEffect as useOriginalLayoutEffect } from \"react\";\n\n// On React 18.2.0 and earlier, useLayoutEffect triggers a warning when\n// executed on the server, so this workaround should be used instead.\nexport const useLayoutEffect =\n typeof window !== \"undefined\" ? useOriginalLayoutEffect : useEffect;\n","import {\n type AsyncResult,\n type GroupData,\n kInternal,\n shallow,\n} from \"@liveblocks/core\";\nimport { useCallback, useEffect } from \"react\";\n\nimport { useClient } from \"./contexts\";\nimport type { GroupAsyncResult } from \"./types\";\nimport { useSyncExternalStoreWithSelector } from \"./use-sync-external-store-with-selector\";\n\nfunction selectorFor_useGroup(\n state: AsyncResult<GroupData | undefined> | undefined\n): GroupAsyncResult {\n if (state === undefined || state?.isLoading) {\n return state ?? { isLoading: true };\n }\n\n if (state.error) {\n return state;\n }\n\n return {\n isLoading: false,\n group: state.data,\n };\n}\n\n/** @private - Internal API, do not rely on it. */\nexport function useGroup(groupId: string): GroupAsyncResult {\n const client = useClient();\n const store = client[kInternal].httpClient.groupsStore;\n\n const getGroupState = useCallback(\n () => store.getItemState(groupId),\n [store, groupId]\n );\n\n useEffect(() => {\n void store.enqueue(groupId);\n }, [store, groupId]);\n\n return useSyncExternalStoreWithSelector(\n store.subscribe,\n getGroupState,\n getGroupState,\n selectorFor_useGroup,\n shallow\n );\n}\n","import { type MentionData, stableStringify } from \"@liveblocks/core\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport {\n useMentionSuggestionsCache,\n useResolveMentionSuggestions,\n} from \"./room\";\n\nconst MENTION_SUGGESTIONS_DEBOUNCE = 500;\n\n/**\n * Normalize mention suggestions as `MentionData[]`.\n *\n * Mention suggestions were previously typed as `string[]`, a list of user IDs,\n * but to support multiple mention kinds (user, group, etc), they're now\n * typed as `MentionData[]`.\n */\nfunction normalizeMentionSuggestions<T extends string[] | MentionData[]>(\n suggestions: T\n): MentionData[] {\n return suggestions.map(\n (suggestion): MentionData =>\n typeof suggestion === \"string\"\n ? { kind: \"user\" as const, id: suggestion }\n : suggestion\n );\n}\n\n/**\n * @private For internal use only. Do not rely on this hook.\n *\n * Simplistic debounced search, we don't need to worry too much about deduping\n * and race conditions as there can only be one search at a time.\n */\nexport function useMentionSuggestions(roomId: string, search?: string) {\n const [mentionSuggestions, setMentionSuggestions] = useState<MentionData[]>();\n const lastInvokedAt = useRef<number>();\n\n const resolveMentionSuggestions = useResolveMentionSuggestions();\n const mentionSuggestionsCache = useMentionSuggestionsCache();\n\n useEffect(() => {\n if (search === undefined || !resolveMentionSuggestions) {\n return;\n }\n\n const resolveMentionSuggestionsArgs = { text: search, roomId };\n const mentionSuggestionsCacheKey = stableStringify(\n resolveMentionSuggestionsArgs\n );\n let debounceTimeout: number | undefined;\n let isCanceled = false;\n\n const getMentionSuggestions = async () => {\n try {\n lastInvokedAt.current = performance.now();\n const rawMentionSuggestions = await resolveMentionSuggestions(\n resolveMentionSuggestionsArgs\n );\n\n if (!isCanceled) {\n const normalizedSuggestions = normalizeMentionSuggestions(\n rawMentionSuggestions\n );\n setMentionSuggestions(normalizedSuggestions);\n mentionSuggestionsCache.set(\n mentionSuggestionsCacheKey,\n normalizedSuggestions\n );\n }\n } catch (error) {\n console.error((error as Error)?.message);\n }\n };\n\n if (mentionSuggestionsCache.has(mentionSuggestionsCacheKey)) {\n // If there are already cached mention suggestions, use them immediately.\n const cachedSuggestions = mentionSuggestionsCache.get(\n mentionSuggestionsCacheKey\n );\n setMentionSuggestions(cachedSuggestions);\n } else if (\n !lastInvokedAt.current ||\n Math.abs(performance.now() - lastInvokedAt.current) >\n MENTION_SUGGESTIONS_DEBOUNCE\n ) {\n // If on the debounce's leading edge (either because it's the first invokation or enough\n // time has passed since the last debounce), get mention suggestions immediately.\n void getMentionSuggestions();\n } else {\n // Otherwise, wait for the debounce delay.\n debounceTimeout = window.setTimeout(() => {\n void getMentionSuggestions();\n }, MENTION_SUGGESTIONS_DEBOUNCE);\n }\n\n return () => {\n isCanceled = true;\n window.clearTimeout(debounceTimeout);\n };\n }, [search, roomId, resolveMentionSuggestions, mentionSuggestionsCache]);\n\n return mentionSuggestions;\n}\n","import type { SyncSource } from \"@liveblocks/core\";\nimport { kInternal } from \"@liveblocks/core\";\nimport { useEffect, useState } from \"react\";\n\nimport { useClient } from \"./contexts\";\n\n/**\n * @private For internal use only. Do not rely on this hook.\n */\nexport function useSyncSource(): SyncSource | undefined {\n const client = useClient();\n const createSyncSource = client[kInternal].createSyncSource;\n const [syncSource, setSyncSource] = useState<SyncSource | undefined>();\n\n useEffect(() => {\n // Create new sync source on mount\n const newSyncSource = createSyncSource();\n setSyncSource(newSyncSource);\n return () => newSyncSource.destroy();\n }, [createSyncSource]);\n\n return syncSource;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,SAAS,WAAW,mBAAmB,+BAA+B;AAI/D,IAAM,kBACX,OAAO,WAAW,cAAc,0BAA0B;;;ACP5D;AAAA,EAGE;AAAA,EACA;AAAA,OACK;AACP,SAAS,aAAa,aAAAA,kBAAiB;AAMvC,SAAS,qBACP,OACkB;AAClB,MAAI,UAAU,UAAa,OAAO,WAAW;AAC3C,WAAO,SAAS,EAAE,WAAW,KAAK;AAAA,EACpC;AAEA,MAAI,MAAM,OAAO;AACf,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,WAAW;AAAA,IACX,OAAO,MAAM;AAAA,EACf;AACF;AAGO,SAAS,SAAS,SAAmC;AAC1D,QAAM,SAAS,UAAU;AACzB,QAAM,QAAQ,OAAO,SAAS,EAAE,WAAW;AAE3C,QAAM,gBAAgB;AAAA,IACpB,MAAM,MAAM,aAAa,OAAO;AAAA,IAChC,CAAC,OAAO,OAAO;AAAA,EACjB;AAEA,EAAAC,WAAU,MAAM;AACd,SAAK,MAAM,QAAQ,OAAO;AAAA,EAC5B,GAAG,CAAC,OAAO,OAAO,CAAC;AAEnB,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AClDA,SAA2B,uBAAuB;AAClD,SAAS,aAAAC,YAAW,QAAQ,gBAAgB;AAO5C,IAAM,+BAA+B;AASrC,SAAS,4BACP,aACe;AACf,SAAO,YAAY;AAAA,IACjB,CAAC,eACC,OAAO,eAAe,WAClB,EAAE,MAAM,QAAiB,IAAI,WAAW,IACxC;AAAA,EACR;AACF;AAQO,SAAS,sBAAsB,QAAgB,QAAiB;AACrE,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,SAAwB;AAC5E,QAAM,gBAAgB,OAAe;AAErC,QAAM,4BAA4B,6BAA6B;AAC/D,QAAM,0BAA0B,2BAA2B;AAE3D,EAAAC,WAAU,MAAM;AACd,QAAI,WAAW,UAAa,CAAC,2BAA2B;AACtD;AAAA,IACF;AAEA,UAAM,gCAAgC,EAAE,MAAM,QAAQ,OAAO;AAC7D,UAAM,6BAA6B;AAAA,MACjC;AAAA,IACF;AACA,QAAI;AACJ,QAAI,aAAa;AAEjB,UAAM,wBAAwB,YAAY;AACxC,UAAI;AACF,sBAAc,UAAU,YAAY,IAAI;AACxC,cAAM,wBAAwB,MAAM;AAAA,UAClC;AAAA,QACF;AAEA,YAAI,CAAC,YAAY;AACf,gBAAM,wBAAwB;AAAA,YAC5B;AAAA,UACF;AACA,gCAAsB,qBAAqB;AAC3C,kCAAwB;AAAA,YACtB;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAO,OAAiB,OAAO;AAAA,MACzC;AAAA,IACF;AAEA,QAAI,wBAAwB,IAAI,0BAA0B,GAAG;AAE3D,YAAM,oBAAoB,wBAAwB;AAAA,QAChD;AAAA,MACF;AACA,4BAAsB,iBAAiB;AAAA,IACzC,WACE,CAAC,cAAc,WACf,KAAK,IAAI,YAAY,IAAI,IAAI,cAAc,OAAO,IAChD,8BACF;AAGA,WAAK,sBAAsB;AAAA,IAC7B,OAAO;AAEL,wBAAkB,OAAO,WAAW,MAAM;AACxC,aAAK,sBAAsB;AAAA,MAC7B,GAAG,4BAA4B;AAAA,IACjC;AAEA,WAAO,MAAM;AACX,mBAAa;AACb,aAAO,aAAa,eAAe;AAAA,IACrC;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,2BAA2B,uBAAuB,CAAC;AAEvE,SAAO;AACT;;;ACtGA,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;AAO7B,SAAS,gBAAwC;AACtD,QAAM,SAAS,UAAU;AACzB,QAAM,mBAAmB,OAAOC,UAAS,EAAE;AAC3C,QAAM,CAAC,YAAY,aAAa,IAAIC,UAAiC;AAErE,EAAAC,WAAU,MAAM;AAEd,UAAM,gBAAgB,iBAAiB;AACvC,kBAAc,aAAa;AAC3B,WAAO,MAAM,cAAc,QAAQ;AAAA,EACrC,GAAG,CAAC,gBAAgB,CAAC;AAErB,SAAO;AACT;","names":["useEffect","useEffect","useEffect","useEffect","kInternal","useEffect","useState","kInternal","useState","useEffect"]}
1
+ {"version":3,"sources":["../src/lib/use-layout-effect.ts","../src/use-group.ts","../src/use-mention-suggestions.ts","../src/use-sync-source.ts"],"sourcesContent":["/* eslint-disable no-restricted-syntax */\n\nimport { useEffect, useLayoutEffect as useOriginalLayoutEffect } from \"react\";\n\n// On React 18.2.0 and earlier, useLayoutEffect triggers a warning when\n// executed on the server, so this workaround should be used instead.\nexport const useLayoutEffect =\n typeof window !== \"undefined\" ? useOriginalLayoutEffect : useEffect;\n","import {\n type AsyncResult,\n type GroupData,\n kInternal,\n shallow,\n} from \"@liveblocks/core\";\nimport { useCallback, useEffect } from \"react\";\n\nimport { useClient } from \"./contexts\";\nimport type { GroupAsyncResult } from \"./types\";\nimport { useSyncExternalStoreWithSelector } from \"./use-sync-external-store-with-selector\";\n\nfunction selectorFor_useGroup(\n state: AsyncResult<GroupData | undefined> | undefined\n): GroupAsyncResult {\n if (state === undefined || state?.isLoading) {\n return state ?? { isLoading: true };\n }\n\n if (state.error) {\n return state;\n }\n\n return {\n isLoading: false,\n group: state.data,\n };\n}\n\n/** @private - Internal API, do not rely on it. */\nexport function useGroup(groupId: string): GroupAsyncResult {\n const client = useClient();\n const store = client[kInternal].httpClient.groupsStore;\n\n const getGroupState = useCallback(\n () => store.getItemState(groupId),\n [store, groupId]\n );\n\n useEffect(() => {\n void store.enqueue(groupId);\n }, [store, groupId]);\n\n return useSyncExternalStoreWithSelector(\n store.subscribe,\n getGroupState,\n getGroupState,\n selectorFor_useGroup,\n shallow\n );\n}\n","import { type MentionData, stableStringify } from \"@liveblocks/core\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport {\n useMentionSuggestionsCache,\n useResolveMentionSuggestions,\n} from \"./room\";\n\nconst MENTION_SUGGESTIONS_DEBOUNCE = 500;\n\n/**\n * Normalize mention suggestions as `MentionData[]`.\n *\n * Mention suggestions were previously typed as `string[]`, a list of user IDs,\n * but to support multiple mention kinds (user, group, etc), they're now\n * typed as `MentionData[]`.\n */\nfunction normalizeMentionSuggestions<T extends string[] | MentionData[]>(\n suggestions: T\n): MentionData[] {\n return suggestions.map(\n (suggestion): MentionData =>\n typeof suggestion === \"string\"\n ? { kind: \"user\" as const, id: suggestion }\n : suggestion\n );\n}\n\n/**\n * @private For internal use only. Do not rely on this hook.\n *\n * Simplistic debounced search, we don't need to worry too much about deduping\n * and race conditions as there can only be one search at a time.\n */\nexport function useMentionSuggestions(roomId: string, search?: string) {\n const [mentionSuggestions, setMentionSuggestions] = useState<MentionData[]>();\n const lastInvokedAt = useRef<number>();\n\n const resolveMentionSuggestions = useResolveMentionSuggestions();\n const mentionSuggestionsCache = useMentionSuggestionsCache();\n\n useEffect(() => {\n if (search === undefined || !resolveMentionSuggestions) {\n return;\n }\n\n const resolveMentionSuggestionsArgs = { text: search, roomId };\n const mentionSuggestionsCacheKey = stableStringify(\n resolveMentionSuggestionsArgs\n );\n let debounceTimeout: number | undefined;\n let isCanceled = false;\n\n const getMentionSuggestions = async () => {\n try {\n lastInvokedAt.current = performance.now();\n const rawMentionSuggestions = await resolveMentionSuggestions(\n resolveMentionSuggestionsArgs\n );\n\n if (!isCanceled) {\n const normalizedSuggestions = normalizeMentionSuggestions(\n rawMentionSuggestions\n );\n setMentionSuggestions(normalizedSuggestions);\n mentionSuggestionsCache.set(\n mentionSuggestionsCacheKey,\n normalizedSuggestions\n );\n }\n } catch (error) {\n console.error((error as Error)?.message);\n }\n };\n\n if (mentionSuggestionsCache.has(mentionSuggestionsCacheKey)) {\n // If there are already cached mention suggestions, use them immediately.\n const cachedSuggestions = mentionSuggestionsCache.get(\n mentionSuggestionsCacheKey\n );\n setMentionSuggestions(cachedSuggestions);\n } else if (\n !lastInvokedAt.current ||\n Math.abs(performance.now() - lastInvokedAt.current) >\n MENTION_SUGGESTIONS_DEBOUNCE\n ) {\n // If on the debounce's leading edge (either because it's the first invokation or enough\n // time has passed since the last debounce), get mention suggestions immediately.\n void getMentionSuggestions();\n } else {\n // Otherwise, wait for the debounce delay.\n debounceTimeout = window.setTimeout(() => {\n void getMentionSuggestions();\n }, MENTION_SUGGESTIONS_DEBOUNCE);\n }\n\n return () => {\n isCanceled = true;\n window.clearTimeout(debounceTimeout);\n };\n }, [search, roomId, resolveMentionSuggestions, mentionSuggestionsCache]);\n\n return mentionSuggestions;\n}\n","import type { SyncSource } from \"@liveblocks/core\";\nimport { kInternal } from \"@liveblocks/core\";\nimport { useEffect, useState } from \"react\";\n\nimport { useClient } from \"./contexts\";\n\n/**\n * @private For internal use only. Do not rely on this hook.\n */\nexport function useSyncSource(): SyncSource | undefined {\n const client = useClient();\n const createSyncSource = client[kInternal].createSyncSource;\n const [syncSource, setSyncSource] = useState<SyncSource | undefined>();\n\n useEffect(() => {\n // Create new sync source on mount\n const newSyncSource = createSyncSource();\n setSyncSource(newSyncSource);\n return () => newSyncSource.destroy();\n }, [createSyncSource]);\n\n return syncSource;\n}\n"],"mappings":"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","names":["useEffect","useEffect","useEffect","useEffect","kInternal","useEffect","useState","kInternal","useState","useEffect"]}
@@ -1,6 +1,6 @@
1
1
  // src/version.ts
2
2
  var PKG_NAME = "@liveblocks/react";
3
- var PKG_VERSION = "3.21.0-rc1";
3
+ var PKG_VERSION = "3.22.0-file1";
4
4
  var PKG_FORMAT = "esm";
5
5
 
6
6
  // src/ClientSideSuspense.tsx
@@ -20,4 +20,4 @@ export {
20
20
  PKG_FORMAT,
21
21
  ClientSideSuspense
22
22
  };
23
- //# sourceMappingURL=chunk-5ZLY3OYO.js.map
23
+ //# sourceMappingURL=chunk-CMU4CSPN.js.map
@@ -1328,7 +1328,7 @@ var UmbrellaStore = class {
1328
1328
  if (room === null) {
1329
1329
  throw new Error(`Room '${roomId}' is not available on client`);
1330
1330
  }
1331
- const result = await room[kInternal2].listTextVersions();
1331
+ const result = await room[kInternal2].listHistoryVersions();
1332
1332
  this.historyVersions.update(roomId, result.versions);
1333
1333
  const lastRequestedAt = this.#roomVersionsLastRequestedAtByRoom.get(roomId);
1334
1334
  if (lastRequestedAt === void 0 || lastRequestedAt > result.requestedAt) {
@@ -1869,7 +1869,7 @@ var UmbrellaStore = class {
1869
1869
  this.#client.getRoom(roomId),
1870
1870
  `Room with id ${roomId} is not available on client`
1871
1871
  );
1872
- const updates = await room[kInternal2].listTextVersionsSince({
1872
+ const updates = await room[kInternal2].listHistoryVersionsSince({
1873
1873
  since: lastRequestedAt,
1874
1874
  signal
1875
1875
  });
@@ -5330,7 +5330,7 @@ function useRoomSubscriptionSettingsSuspense_withRoomContext(RoomContext) {
5330
5330
  function useRoomSubscriptionSettingsSuspense() {
5331
5331
  return useRoomSubscriptionSettingsSuspense_withRoomContext(GlobalRoomContext);
5332
5332
  }
5333
- function useHistoryVersionData_withRoomContext(RoomContext, versionId) {
5333
+ function useHistoryVersionYjsData_withRoomContext(RoomContext, versionId) {
5334
5334
  const [state, setState] = useState3({
5335
5335
  isLoading: true
5336
5336
  });
@@ -5339,7 +5339,7 @@ function useHistoryVersionData_withRoomContext(RoomContext, versionId) {
5339
5339
  setState({ isLoading: true });
5340
5340
  const load = async () => {
5341
5341
  try {
5342
- const response = await room[kInternal4].getTextVersion(versionId);
5342
+ const response = await room[kInternal4].getYjsHistoryVersion(versionId);
5343
5343
  const buffer = await response.arrayBuffer();
5344
5344
  const data = new Uint8Array(buffer);
5345
5345
  setState({
@@ -5360,7 +5360,10 @@ function useHistoryVersionData_withRoomContext(RoomContext, versionId) {
5360
5360
  return state;
5361
5361
  }
5362
5362
  function useHistoryVersionData(versionId) {
5363
- return useHistoryVersionData_withRoomContext(GlobalRoomContext, versionId);
5363
+ return useHistoryVersionYjsData_withRoomContext(GlobalRoomContext, versionId);
5364
+ }
5365
+ function useHistoryVersionYjsData(versionId) {
5366
+ return useHistoryVersionYjsData_withRoomContext(GlobalRoomContext, versionId);
5364
5367
  }
5365
5368
  function useHistoryVersions_withRoomContext(RoomContext) {
5366
5369
  const client = useClient();
@@ -5570,6 +5573,22 @@ function selectorFor_useAttachmentUrl(state) {
5570
5573
  url: state.data
5571
5574
  };
5572
5575
  }
5576
+ function getLiveFileId(file) {
5577
+ return typeof file === "string" ? file : file.id;
5578
+ }
5579
+ function selectorFor_useFileUrl(state) {
5580
+ if (state === void 0 || state?.isLoading) {
5581
+ return state ?? { isLoading: true };
5582
+ }
5583
+ if (state.error) {
5584
+ return state;
5585
+ }
5586
+ assert2(state.data !== void 0, "Unexpected missing file URL");
5587
+ return {
5588
+ isLoading: false,
5589
+ url: state.data
5590
+ };
5591
+ }
5573
5592
  function useAttachmentUrl_withRoomContext(RoomContext, attachmentId) {
5574
5593
  const room = useRoom_withRoomContext(RoomContext);
5575
5594
  return useRoomAttachmentUrl(attachmentId, room.id);
@@ -5595,6 +5614,32 @@ function useRoomAttachmentUrl(attachmentId, roomId) {
5595
5614
  shallow4
5596
5615
  );
5597
5616
  }
5617
+ function useFileUrl_withRoomContext(RoomContext, file) {
5618
+ const room = useRoom_withRoomContext(RoomContext);
5619
+ return useRoomFileUrl(file, room.id);
5620
+ }
5621
+ function useFileUrl(file) {
5622
+ return useFileUrl_withRoomContext(GlobalRoomContext, file);
5623
+ }
5624
+ function useRoomFileUrl(file, roomId) {
5625
+ const fileId = getLiveFileId(file);
5626
+ const client = useClient();
5627
+ const store = client[kInternal4].httpClient.getOrCreateFileUrlsStore(roomId);
5628
+ const getFileUrlState = useCallback3(
5629
+ () => store.getItemState(fileId),
5630
+ [store, fileId]
5631
+ );
5632
+ useEffect6(() => {
5633
+ void store.enqueue(fileId);
5634
+ }, [store, fileId]);
5635
+ return useSyncExternalStoreWithSelector(
5636
+ store.subscribe,
5637
+ getFileUrlState,
5638
+ getFileUrlState,
5639
+ selectorFor_useFileUrl,
5640
+ shallow4
5641
+ );
5642
+ }
5598
5643
  function useAttachmentUrlSuspense_withRoomContext(RoomContext, attachmentId) {
5599
5644
  const room = useRoom_withRoomContext(RoomContext);
5600
5645
  const { attachmentUrlsStore } = room[kInternal4];
@@ -5629,6 +5674,38 @@ function useAttachmentUrlSuspense(attachmentId) {
5629
5674
  attachmentId
5630
5675
  );
5631
5676
  }
5677
+ function useFileUrlSuspense_withRoomContext(RoomContext, file) {
5678
+ const fileId = getLiveFileId(file);
5679
+ const room = useRoom_withRoomContext(RoomContext);
5680
+ const { fileUrlsStore } = room[kInternal4];
5681
+ const getFileUrlState = useCallback3(
5682
+ () => fileUrlsStore.getItemState(fileId),
5683
+ [fileUrlsStore, fileId]
5684
+ );
5685
+ const fileUrlState = getFileUrlState();
5686
+ if (!fileUrlState || fileUrlState.isLoading) {
5687
+ throw fileUrlsStore.enqueue(fileId);
5688
+ }
5689
+ if (fileUrlState.error) {
5690
+ throw fileUrlState.error;
5691
+ }
5692
+ const state = useSyncExternalStore3(
5693
+ fileUrlsStore.subscribe,
5694
+ getFileUrlState,
5695
+ getFileUrlState
5696
+ );
5697
+ assert2(state !== void 0, "Unexpected missing state");
5698
+ assert2(!state.isLoading, "Unexpected loading state");
5699
+ assert2(!state.error, "Unexpected error state");
5700
+ return {
5701
+ isLoading: false,
5702
+ url: state.data,
5703
+ error: void 0
5704
+ };
5705
+ }
5706
+ function useFileUrlSuspense(file) {
5707
+ return useFileUrlSuspense_withRoomContext(GlobalRoomContext, file);
5708
+ }
5632
5709
  function useRoomPermissions(roomId) {
5633
5710
  const client = useClient();
5634
5711
  const store = getRoomExtrasForClient(client).store;
@@ -5823,9 +5900,15 @@ function createRoomContext(client) {
5823
5900
  function useAttachmentUrl_withBoundRoomContext(...args) {
5824
5901
  return useAttachmentUrl_withRoomContext(BoundRoomContext, ...args);
5825
5902
  }
5903
+ function useFileUrl_withBoundRoomContext(...args) {
5904
+ return useFileUrl_withRoomContext(BoundRoomContext, ...args);
5905
+ }
5826
5906
  function useAttachmentUrlSuspense_withBoundRoomContext(...args) {
5827
5907
  return useAttachmentUrlSuspense_withRoomContext(BoundRoomContext, ...args);
5828
5908
  }
5909
+ function useFileUrlSuspense_withBoundRoomContext(...args) {
5910
+ return useFileUrlSuspense_withRoomContext(BoundRoomContext, ...args);
5911
+ }
5829
5912
  function useSearchComments_withBoundRoomContext(...args) {
5830
5913
  return useSearchComments_withRoomContext(BoundRoomContext, ...args);
5831
5914
  }
@@ -5835,8 +5918,8 @@ function createRoomContext(client) {
5835
5918
  function useHistoryVersionsSuspense_withBoundRoomContext() {
5836
5919
  return useHistoryVersionsSuspense_withRoomContext(BoundRoomContext);
5837
5920
  }
5838
- function useHistoryVersionData_withBoundRoomContext(...args) {
5839
- return useHistoryVersionData_withRoomContext(BoundRoomContext, ...args);
5921
+ function useHistoryVersionYjsData_withBoundRoomContext(...args) {
5922
+ return useHistoryVersionYjsData_withRoomContext(BoundRoomContext, ...args);
5840
5923
  }
5841
5924
  function useRoomSubscriptionSettings_withBoundRoomContext() {
5842
5925
  return useRoomSubscriptionSettings_withRoomContext(BoundRoomContext);
@@ -5976,11 +6059,15 @@ function createRoomContext(client) {
5976
6059
  // prettier-ignore
5977
6060
  useAttachmentUrl: useAttachmentUrl_withBoundRoomContext,
5978
6061
  // prettier-ignore
6062
+ useFileUrl: useFileUrl_withBoundRoomContext,
6063
+ // prettier-ignore
5979
6064
  useSearchComments: useSearchComments_withBoundRoomContext,
5980
6065
  // prettier-ignore
5981
6066
  useHistoryVersions: useHistoryVersions_withBoundRoomContext,
5982
6067
  // prettier-ignore
5983
- useHistoryVersionData: useHistoryVersionData_withBoundRoomContext,
6068
+ useHistoryVersionData: useHistoryVersionYjsData_withBoundRoomContext,
6069
+ // prettier-ignore
6070
+ useHistoryVersionYjsData: useHistoryVersionYjsData_withBoundRoomContext,
5984
6071
  // prettier-ignore
5985
6072
  useRoomSubscriptionSettings: useRoomSubscriptionSettings_withBoundRoomContext,
5986
6073
  // prettier-ignore
@@ -6082,6 +6169,8 @@ function createRoomContext(client) {
6082
6169
  // prettier-ignore
6083
6170
  useAttachmentUrl: useAttachmentUrlSuspense_withBoundRoomContext,
6084
6171
  // prettier-ignore
6172
+ useFileUrl: useFileUrlSuspense_withBoundRoomContext,
6173
+ // prettier-ignore
6085
6174
  useHistoryVersions: useHistoryVersionsSuspense_withBoundRoomContext,
6086
6175
  // prettier-ignore
6087
6176
  useRoomSubscriptionSettings: useRoomSubscriptionSettingsSuspense_withBoundRoomContext,
@@ -6232,13 +6321,17 @@ export {
6232
6321
  useThreadSubscription,
6233
6322
  useRoomThreadSubscription,
6234
6323
  useHistoryVersionData,
6324
+ useHistoryVersionYjsData,
6235
6325
  useUpdateRoomSubscriptionSettings,
6236
6326
  useSuspendUntilPresenceReady,
6237
6327
  useOthersConnectionIdsSuspense,
6238
6328
  useSuspendUntilStorageReady,
6239
6329
  useAttachmentUrl,
6240
6330
  useRoomAttachmentUrl,
6331
+ useFileUrl,
6332
+ useRoomFileUrl,
6241
6333
  useAttachmentUrlSuspense,
6334
+ useFileUrlSuspense,
6242
6335
  useRoomPermissions,
6243
6336
  useHasPermissionAccess,
6244
6337
  createRoomContext,
@@ -6281,4 +6374,4 @@ export {
6281
6374
  _useStorageRoot,
6282
6375
  _useUpdateMyPresence
6283
6376
  };
6284
- //# sourceMappingURL=chunk-4W555EA4.js.map
6377
+ //# sourceMappingURL=chunk-L4ZABYCR.js.map