@liveblocks/react-ui 2.14.0 → 2.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/dist/_private/index.d.mts +24 -22
  2. package/dist/_private/index.d.ts +24 -22
  3. package/dist/_private/index.js +1 -0
  4. package/dist/_private/index.js.map +1 -1
  5. package/dist/_private/index.mjs +1 -0
  6. package/dist/_private/index.mjs.map +1 -1
  7. package/dist/components/Comment.js +358 -256
  8. package/dist/components/Comment.js.map +1 -1
  9. package/dist/components/Comment.mjs +334 -232
  10. package/dist/components/Comment.mjs.map +1 -1
  11. package/dist/components/Composer.js +308 -225
  12. package/dist/components/Composer.js.map +1 -1
  13. package/dist/components/Composer.mjs +288 -206
  14. package/dist/components/Composer.mjs.map +1 -1
  15. package/dist/components/HistoryVersionSummary.js +28 -32
  16. package/dist/components/HistoryVersionSummary.js.map +1 -1
  17. package/dist/components/HistoryVersionSummary.mjs +27 -31
  18. package/dist/components/HistoryVersionSummary.mjs.map +1 -1
  19. package/dist/components/HistoryVersionSummaryList.js +11 -9
  20. package/dist/components/HistoryVersionSummaryList.js.map +1 -1
  21. package/dist/components/HistoryVersionSummaryList.mjs +10 -8
  22. package/dist/components/HistoryVersionSummaryList.mjs.map +1 -1
  23. package/dist/components/InboxNotification.js +202 -143
  24. package/dist/components/InboxNotification.js.map +1 -1
  25. package/dist/components/InboxNotification.mjs +180 -121
  26. package/dist/components/InboxNotification.mjs.map +1 -1
  27. package/dist/components/InboxNotificationList.js +19 -14
  28. package/dist/components/InboxNotificationList.js.map +1 -1
  29. package/dist/components/InboxNotificationList.mjs +17 -12
  30. package/dist/components/InboxNotificationList.mjs.map +1 -1
  31. package/dist/components/Thread.js +104 -86
  32. package/dist/components/Thread.js.map +1 -1
  33. package/dist/components/Thread.mjs +93 -75
  34. package/dist/components/Thread.mjs.map +1 -1
  35. package/dist/components/internal/Attachment.js +161 -113
  36. package/dist/components/internal/Attachment.js.map +1 -1
  37. package/dist/components/internal/Attachment.mjs +150 -102
  38. package/dist/components/internal/Attachment.mjs.map +1 -1
  39. package/dist/components/internal/Attribution.js +15 -13
  40. package/dist/components/internal/Attribution.js.map +1 -1
  41. package/dist/components/internal/Attribution.mjs +15 -13
  42. package/dist/components/internal/Attribution.mjs.map +1 -1
  43. package/dist/components/internal/Avatar.js +27 -20
  44. package/dist/components/internal/Avatar.js.map +1 -1
  45. package/dist/components/internal/Avatar.mjs +23 -16
  46. package/dist/components/internal/Avatar.mjs.map +1 -1
  47. package/dist/components/internal/Button.js +5 -4
  48. package/dist/components/internal/Button.js.map +1 -1
  49. package/dist/components/internal/Button.mjs +4 -3
  50. package/dist/components/internal/Button.mjs.map +1 -1
  51. package/dist/components/internal/Dropdown.js +27 -19
  52. package/dist/components/internal/Dropdown.js.map +1 -1
  53. package/dist/components/internal/Dropdown.mjs +26 -18
  54. package/dist/components/internal/Dropdown.mjs.map +1 -1
  55. package/dist/components/internal/Emoji.js +4 -3
  56. package/dist/components/internal/Emoji.js.map +1 -1
  57. package/dist/components/internal/Emoji.mjs +3 -2
  58. package/dist/components/internal/Emoji.mjs.map +1 -1
  59. package/dist/components/internal/EmojiPicker.js +96 -72
  60. package/dist/components/internal/EmojiPicker.js.map +1 -1
  61. package/dist/components/internal/EmojiPicker.mjs +90 -66
  62. package/dist/components/internal/EmojiPicker.mjs.map +1 -1
  63. package/dist/components/internal/Icon.js +5 -4
  64. package/dist/components/internal/Icon.js.map +1 -1
  65. package/dist/components/internal/Icon.mjs +5 -4
  66. package/dist/components/internal/Icon.mjs.map +1 -1
  67. package/dist/components/internal/InboxNotificationThread.js +53 -38
  68. package/dist/components/internal/InboxNotificationThread.js.map +1 -1
  69. package/dist/components/internal/InboxNotificationThread.mjs +53 -38
  70. package/dist/components/internal/InboxNotificationThread.mjs.map +1 -1
  71. package/dist/components/internal/List.js +8 -6
  72. package/dist/components/internal/List.js.map +1 -1
  73. package/dist/components/internal/List.mjs +6 -4
  74. package/dist/components/internal/List.mjs.map +1 -1
  75. package/dist/components/internal/Room.js +8 -6
  76. package/dist/components/internal/Room.js.map +1 -1
  77. package/dist/components/internal/Room.mjs +7 -5
  78. package/dist/components/internal/Room.mjs.map +1 -1
  79. package/dist/components/internal/Tooltip.js +49 -33
  80. package/dist/components/internal/Tooltip.js.map +1 -1
  81. package/dist/components/internal/Tooltip.mjs +46 -30
  82. package/dist/components/internal/Tooltip.mjs.map +1 -1
  83. package/dist/components/internal/User.js +8 -6
  84. package/dist/components/internal/User.js.map +1 -1
  85. package/dist/components/internal/User.mjs +7 -5
  86. package/dist/components/internal/User.mjs.map +1 -1
  87. package/dist/components.js +12 -29
  88. package/dist/components.js.map +1 -1
  89. package/dist/components.mjs +6 -5
  90. package/dist/components.mjs.map +1 -1
  91. package/dist/config.js +16 -12
  92. package/dist/config.js.map +1 -1
  93. package/dist/config.mjs +13 -9
  94. package/dist/config.mjs.map +1 -1
  95. package/dist/icons/ArrowDown.js +7 -6
  96. package/dist/icons/ArrowDown.js.map +1 -1
  97. package/dist/icons/ArrowDown.mjs +7 -6
  98. package/dist/icons/ArrowDown.mjs.map +1 -1
  99. package/dist/icons/ArrowUp.js +7 -6
  100. package/dist/icons/ArrowUp.js.map +1 -1
  101. package/dist/icons/ArrowUp.mjs +7 -6
  102. package/dist/icons/ArrowUp.mjs.map +1 -1
  103. package/dist/icons/Attachment.js +7 -6
  104. package/dist/icons/Attachment.js.map +1 -1
  105. package/dist/icons/Attachment.mjs +7 -6
  106. package/dist/icons/Attachment.mjs.map +1 -1
  107. package/dist/icons/Bold.js +7 -6
  108. package/dist/icons/Bold.js.map +1 -1
  109. package/dist/icons/Bold.mjs +7 -6
  110. package/dist/icons/Bold.mjs.map +1 -1
  111. package/dist/icons/Check.js +7 -6
  112. package/dist/icons/Check.js.map +1 -1
  113. package/dist/icons/Check.mjs +7 -6
  114. package/dist/icons/Check.mjs.map +1 -1
  115. package/dist/icons/Code.js +7 -6
  116. package/dist/icons/Code.js.map +1 -1
  117. package/dist/icons/Code.mjs +7 -6
  118. package/dist/icons/Code.mjs.map +1 -1
  119. package/dist/icons/Cross.js +12 -8
  120. package/dist/icons/Cross.js.map +1 -1
  121. package/dist/icons/Cross.mjs +12 -8
  122. package/dist/icons/Cross.mjs.map +1 -1
  123. package/dist/icons/Delete.js +7 -6
  124. package/dist/icons/Delete.js.map +1 -1
  125. package/dist/icons/Delete.mjs +7 -6
  126. package/dist/icons/Delete.mjs.map +1 -1
  127. package/dist/icons/Edit.js +7 -6
  128. package/dist/icons/Edit.js.map +1 -1
  129. package/dist/icons/Edit.mjs +7 -6
  130. package/dist/icons/Edit.mjs.map +1 -1
  131. package/dist/icons/Ellipsis.js +21 -16
  132. package/dist/icons/Ellipsis.js.map +1 -1
  133. package/dist/icons/Ellipsis.mjs +21 -16
  134. package/dist/icons/Ellipsis.mjs.map +1 -1
  135. package/dist/icons/Emoji.js +25 -18
  136. package/dist/icons/Emoji.js.map +1 -1
  137. package/dist/icons/Emoji.mjs +25 -18
  138. package/dist/icons/Emoji.mjs.map +1 -1
  139. package/dist/icons/EmojiAdd.js +28 -20
  140. package/dist/icons/EmojiAdd.js.map +1 -1
  141. package/dist/icons/EmojiAdd.mjs +28 -20
  142. package/dist/icons/EmojiAdd.mjs.map +1 -1
  143. package/dist/icons/Italic.js +7 -6
  144. package/dist/icons/Italic.js.map +1 -1
  145. package/dist/icons/Italic.mjs +7 -6
  146. package/dist/icons/Italic.mjs.map +1 -1
  147. package/dist/icons/Mention.js +12 -8
  148. package/dist/icons/Mention.js.map +1 -1
  149. package/dist/icons/Mention.mjs +12 -8
  150. package/dist/icons/Mention.mjs.map +1 -1
  151. package/dist/icons/Resolve.js +14 -10
  152. package/dist/icons/Resolve.js.map +1 -1
  153. package/dist/icons/Resolve.mjs +14 -10
  154. package/dist/icons/Resolve.mjs.map +1 -1
  155. package/dist/icons/Resolved.js +16 -12
  156. package/dist/icons/Resolved.js.map +1 -1
  157. package/dist/icons/Resolved.mjs +16 -12
  158. package/dist/icons/Resolved.mjs.map +1 -1
  159. package/dist/icons/Restore.js +12 -8
  160. package/dist/icons/Restore.js.map +1 -1
  161. package/dist/icons/Restore.mjs +12 -8
  162. package/dist/icons/Restore.mjs.map +1 -1
  163. package/dist/icons/Search.js +7 -6
  164. package/dist/icons/Search.js.map +1 -1
  165. package/dist/icons/Search.mjs +7 -6
  166. package/dist/icons/Search.mjs.map +1 -1
  167. package/dist/icons/Send.js +7 -6
  168. package/dist/icons/Send.js.map +1 -1
  169. package/dist/icons/Send.mjs +7 -6
  170. package/dist/icons/Send.mjs.map +1 -1
  171. package/dist/icons/Spinner.js +8 -7
  172. package/dist/icons/Spinner.js.map +1 -1
  173. package/dist/icons/Spinner.mjs +8 -7
  174. package/dist/icons/Spinner.mjs.map +1 -1
  175. package/dist/icons/Strikethrough.js +7 -6
  176. package/dist/icons/Strikethrough.js.map +1 -1
  177. package/dist/icons/Strikethrough.mjs +7 -6
  178. package/dist/icons/Strikethrough.mjs.map +1 -1
  179. package/dist/icons/Warning.js +14 -10
  180. package/dist/icons/Warning.js.map +1 -1
  181. package/dist/icons/Warning.mjs +14 -10
  182. package/dist/icons/Warning.mjs.map +1 -1
  183. package/dist/icons/index.js +42 -0
  184. package/dist/icons/index.js.map +1 -0
  185. package/dist/icons/index.mjs +19 -0
  186. package/dist/icons/index.mjs.map +1 -0
  187. package/dist/index.d.mts +14 -12
  188. package/dist/index.d.ts +14 -12
  189. package/dist/overrides.js +65 -36
  190. package/dist/overrides.js.map +1 -1
  191. package/dist/overrides.mjs +59 -12
  192. package/dist/overrides.mjs.map +1 -1
  193. package/dist/primitives/Comment/index.js +75 -66
  194. package/dist/primitives/Comment/index.js.map +1 -1
  195. package/dist/primitives/Comment/index.mjs +71 -62
  196. package/dist/primitives/Comment/index.mjs.map +1 -1
  197. package/dist/primitives/Composer/contexts.js +11 -11
  198. package/dist/primitives/Composer/index.js +343 -284
  199. package/dist/primitives/Composer/index.js.map +1 -1
  200. package/dist/primitives/Composer/index.mjs +262 -203
  201. package/dist/primitives/Composer/index.mjs.map +1 -1
  202. package/dist/primitives/Composer/utils.js +20 -21
  203. package/dist/primitives/Composer/utils.js.map +1 -1
  204. package/dist/primitives/Composer/utils.mjs +4 -5
  205. package/dist/primitives/Composer/utils.mjs.map +1 -1
  206. package/dist/primitives/EmojiPicker/contexts.js +3 -3
  207. package/dist/primitives/EmojiPicker/index.js +160 -142
  208. package/dist/primitives/EmojiPicker/index.js.map +1 -1
  209. package/dist/primitives/EmojiPicker/index.mjs +122 -104
  210. package/dist/primitives/EmojiPicker/index.mjs.map +1 -1
  211. package/dist/primitives/FileSize.js +9 -7
  212. package/dist/primitives/FileSize.js.map +1 -1
  213. package/dist/primitives/FileSize.mjs +7 -5
  214. package/dist/primitives/FileSize.mjs.map +1 -1
  215. package/dist/primitives/Timestamp.js +12 -10
  216. package/dist/primitives/Timestamp.js.map +1 -1
  217. package/dist/primitives/Timestamp.mjs +7 -5
  218. package/dist/primitives/Timestamp.mjs.map +1 -1
  219. package/dist/primitives/index.d.mts +24 -23
  220. package/dist/primitives/index.d.ts +24 -23
  221. package/dist/primitives/internal/Emoji.js +7 -5
  222. package/dist/primitives/internal/Emoji.js.map +1 -1
  223. package/dist/primitives/internal/Emoji.mjs +6 -4
  224. package/dist/primitives/internal/Emoji.mjs.map +1 -1
  225. package/dist/shared.js +2 -7
  226. package/dist/shared.js.map +1 -1
  227. package/dist/shared.mjs +2 -7
  228. package/dist/shared.mjs.map +1 -1
  229. package/dist/slate/plugins/auto-links.mjs +1 -1
  230. package/dist/slate/plugins/custom-links.mjs +1 -1
  231. package/dist/slate/plugins/mentions.mjs +1 -1
  232. package/dist/utils/Persist.js +19 -18
  233. package/dist/utils/Persist.js.map +1 -1
  234. package/dist/utils/Persist.mjs +7 -6
  235. package/dist/utils/Persist.mjs.map +1 -1
  236. package/dist/utils/Portal.js +5 -4
  237. package/dist/utils/Portal.js.map +1 -1
  238. package/dist/utils/Portal.mjs +4 -3
  239. package/dist/utils/Portal.mjs.map +1 -1
  240. package/dist/utils/use-controllable-state.js +5 -5
  241. package/dist/utils/use-index.js +7 -7
  242. package/dist/utils/use-initial.js +2 -2
  243. package/dist/utils/use-interval.js +4 -4
  244. package/dist/utils/use-latest.js +3 -3
  245. package/dist/utils/use-observable.js +2 -2
  246. package/dist/utils/use-refs.js +2 -2
  247. package/dist/utils/use-rerender.js +2 -2
  248. package/dist/utils/use-visible.js +24 -2
  249. package/dist/utils/use-visible.js.map +1 -1
  250. package/dist/utils/use-visible.mjs +23 -2
  251. package/dist/utils/use-visible.mjs.map +1 -1
  252. package/dist/utils/use-window-focus.js +2 -2
  253. package/dist/utils/use-window-focus.js.map +1 -1
  254. package/dist/utils/use-window-focus.mjs +1 -1
  255. package/dist/utils/use-window-focus.mjs.map +1 -1
  256. package/dist/version.js +2 -2
  257. package/dist/version.js.map +1 -1
  258. package/dist/version.mjs +2 -2
  259. package/dist/version.mjs.map +1 -1
  260. package/package.json +10 -25
  261. package/dist/utils/use-id.js +0 -29
  262. package/dist/utils/use-id.js.map +0 -1
  263. package/dist/utils/use-id.mjs +0 -27
  264. package/dist/utils/use-id.mjs.map +0 -1
  265. package/dist/utils/use-layout-effect.js +0 -8
  266. package/dist/utils/use-layout-effect.js.map +0 -1
  267. package/dist/utils/use-layout-effect.mjs +0 -6
  268. package/dist/utils/use-layout-effect.mjs.map +0 -1
  269. package/dist/utils/use-transition.js +0 -16
  270. package/dist/utils/use-transition.js.map +0 -1
  271. package/dist/utils/use-transition.mjs +0 -14
  272. package/dist/utils/use-transition.mjs.map +0 -1
package/dist/shared.mjs CHANGED
@@ -1,15 +1,10 @@
1
1
  import { kInternal } from '@liveblocks/core';
2
2
  import { useClient } from '@liveblocks/react';
3
- import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';
3
+ import { useSignal } from '@liveblocks/react/_private';
4
4
 
5
5
  function useCurrentUserId() {
6
6
  const client = useClient();
7
- const currentUserIdStore = client[kInternal].currentUserIdStore;
8
- return useSyncExternalStore(
9
- currentUserIdStore.subscribe,
10
- currentUserIdStore.get,
11
- currentUserIdStore.get
12
- ) ?? null;
7
+ return useSignal(client[kInternal].currentUserId) ?? null;
13
8
  }
14
9
 
15
10
  export { useCurrentUserId };
@@ -1 +1 @@
1
- {"version":3,"file":"shared.mjs","sources":["../src/shared.ts"],"sourcesContent":["import { kInternal } from \"@liveblocks/core\";\nimport { useClient } from \"@liveblocks/react\";\nimport { useSyncExternalStore } from \"use-sync-external-store/shim/index.js\";\n\nexport function useCurrentUserId(): string | null {\n const client = useClient();\n const currentUserIdStore = client[kInternal].currentUserIdStore;\n return (\n useSyncExternalStore(\n currentUserIdStore.subscribe,\n currentUserIdStore.get,\n currentUserIdStore.get\n ) ?? null\n );\n}\n"],"names":[],"mappings":";;;;AAIO,SAAS,gBAAkC,GAAA;AAChD,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,kBAAA,GAAqB,OAAO,SAAW,CAAA,CAAA,kBAAA,CAAA;AAC7C,EACE,OAAA,oBAAA;AAAA,IACE,kBAAmB,CAAA,SAAA;AAAA,IACnB,kBAAmB,CAAA,GAAA;AAAA,IACnB,kBAAmB,CAAA,GAAA;AAAA,GAChB,IAAA,IAAA,CAAA;AAET;;;;"}
1
+ {"version":3,"file":"shared.mjs","sources":["../src/shared.ts"],"sourcesContent":["import { kInternal } from \"@liveblocks/core\";\nimport { useClient } from \"@liveblocks/react\";\nimport { useSignal } from \"@liveblocks/react/_private\";\n\nexport function useCurrentUserId(): string | null {\n const client = useClient();\n return useSignal(client[kInternal].currentUserId) ?? null;\n}\n"],"names":[],"mappings":";;;;AAIO,SAAS,gBAAkC,GAAA;AAChD,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAA,OAAO,SAAU,CAAA,MAAA,CAAO,SAAW,CAAA,CAAA,aAAa,CAAK,IAAA,IAAA,CAAA;AACvD;;;;"}
@@ -1,4 +1,4 @@
1
- import { Element, Node, Path, Transforms, Range, Editor } from 'slate';
1
+ import { Node, Path, Transforms, Range, Editor, Element } from 'slate';
2
2
  import { isText, isPlainText } from '../utils/is-text.mjs';
3
3
  import { filterActiveMarks } from '../utils/marks.mjs';
4
4
  import { isComposerBodyCustomLink } from './custom-links.mjs';
@@ -1,4 +1,4 @@
1
- import { Element, Node, Transforms, Range } from 'slate';
1
+ import { Node, Transforms, Range, Element } from 'slate';
2
2
  import { isText, isPlainText } from '../utils/is-text.mjs';
3
3
  import { filterActiveMarks } from '../utils/marks.mjs';
4
4
  import { selectionContainsInlines } from '../utils/selection-contains-inlines.mjs';
@@ -1,4 +1,4 @@
1
- import { Transforms, Range, Element, Editor } from 'slate';
1
+ import { Range, Editor, Element, Transforms } from 'slate';
2
2
  import { getCharacterAfter, getCharacterBefore } from '../utils/get-character.mjs';
3
3
  import { getMatchRange } from '../utils/get-match-range.mjs';
4
4
  import { isEmptyString } from '../utils/is-empty-string.mjs';
@@ -1,26 +1,26 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
3
+ var jsxRuntime = require('react/jsx-runtime');
4
4
  var core = require('@liveblocks/core');
5
- var React = require('react');
5
+ var react = require('react');
6
6
  var flushSync = require('./flush-sync.js');
7
- var useLayoutEffect = require('./use-layout-effect.js');
8
7
 
8
+ "use client";
9
9
  const PERSIST_NAME = "Persist";
10
- const PersistContext = React.createContext(null);
10
+ const PersistContext = react.createContext(null);
11
11
  function usePersist() {
12
- const persistContext = React.useContext(PersistContext);
12
+ const persistContext = react.useContext(PersistContext);
13
13
  return core.nn(persistContext, "Persist is missing from the React tree.");
14
14
  }
15
15
  function getChild(children) {
16
- const child = Array.isArray(children) ? React.Children.only(children) : children;
17
- return React.isValidElement(child) ? child : void 0;
16
+ const child = Array.isArray(children) ? react.Children.only(children) : children;
17
+ return react.isValidElement(child) ? child : void 0;
18
18
  }
19
19
  function useAnimationPersist(ref) {
20
20
  const [isPresent, unmount] = usePersist();
21
- const previousAnimationName = React.useRef(null);
22
- const unmountAnimationName = React.useRef(null);
23
- useLayoutEffect.useLayoutEffect(() => {
21
+ const previousAnimationName = react.useRef(null);
22
+ const unmountAnimationName = react.useRef(null);
23
+ react.useLayoutEffect(() => {
24
24
  const element = ref.current;
25
25
  if (!element) {
26
26
  return;
@@ -38,7 +38,7 @@ function useAnimationPersist(ref) {
38
38
  element.removeEventListener("animationend", handleAnimationEnd);
39
39
  };
40
40
  }, [ref, unmount]);
41
- useLayoutEffect.useLayoutEffect(() => {
41
+ react.useLayoutEffect(() => {
42
42
  const element = ref.current;
43
43
  let animationFrameId;
44
44
  if (!element) {
@@ -59,21 +59,22 @@ function useAnimationPersist(ref) {
59
59
  }, [isPresent, ref, unmount]);
60
60
  }
61
61
  function Persist({ children }) {
62
- const [isPersisting, setPersisting] = React.useState(true);
63
- const lastPresentChild = React.useRef(null);
62
+ const [isPersisting, setPersisting] = react.useState(true);
63
+ const lastPresentChild = react.useRef(null);
64
64
  const child = getChild(children);
65
- const unmount = React.useCallback(() => {
65
+ const unmount = react.useCallback(() => {
66
66
  flushSync.flushSync(() => setPersisting(false));
67
67
  }, []);
68
- useLayoutEffect.useLayoutEffect(() => {
68
+ react.useLayoutEffect(() => {
69
69
  if (child) {
70
70
  setPersisting(true);
71
71
  lastPresentChild.current = child;
72
72
  }
73
73
  }, [child]);
74
- return /* @__PURE__ */ React.createElement(PersistContext.Provider, {
75
- value: [Boolean(child), unmount]
76
- }, child ?? (isPersisting ? lastPresentChild.current : null));
74
+ return /* @__PURE__ */ jsxRuntime.jsx(PersistContext.Provider, {
75
+ value: [Boolean(child), unmount],
76
+ children: child ?? (isPersisting ? lastPresentChild.current : null)
77
+ });
77
78
  }
78
79
  if (process.env.NODE_ENV !== "production") {
79
80
  Persist.displayName = PERSIST_NAME;
@@ -1 +1 @@
1
- {"version":3,"file":"Persist.js","sources":["../../src/utils/Persist.tsx"],"sourcesContent":["\"use client\";\n\nimport { nn } from \"@liveblocks/core\";\nimport type { ReactNode, RefObject } from \"react\";\nimport React, {\n Children,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useRef,\n useState,\n} from \"react\";\n\nimport { flushSync } from \"./flush-sync\";\nimport { useLayoutEffect } from \"./use-layout-effect\";\n\n// Persist is an overly simplified version of Framer Motion's AnimatePresence,\n// mostly mimicking its usePresence API: https://github.com/framer/motion/blob/main/packages/framer-motion/src/components/AnimatePresence/use-presence.ts\n\nconst PERSIST_NAME = \"Persist\";\n\ninterface PersistProps {\n children: Exclude<ReactNode, Iterable<ReactNode>>;\n}\n\ntype PersistContext = [boolean, () => void];\n\nconst PersistContext = createContext<PersistContext | null>(null);\n\nexport function usePersist() {\n const persistContext = useContext(PersistContext);\n\n return nn(persistContext, \"Persist is missing from the React tree.\");\n}\n\nfunction getChild(children: ReactNode) {\n const child: ReactNode = Array.isArray(children)\n ? Children.only(children)\n : children;\n\n return isValidElement(child) ? child : undefined;\n}\n\nexport function useAnimationPersist(ref: RefObject<HTMLElement>) {\n const [isPresent, unmount] = usePersist();\n const previousAnimationName = useRef<string | null>(null);\n const unmountAnimationName = useRef<string | null>(null);\n\n useLayoutEffect(() => {\n const element = ref.current;\n\n if (!element) {\n return;\n }\n\n /**\n * Stop persisting at the end of the last animation.\n *\n * We keep track of all ending animations because animations stay\n * on getComputedStyle(element).animationName even if they're over,\n * so we need to keep track of previous animations to truly know if\n * an animation should be waited on.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n if (event.animationName === unmountAnimationName.current) {\n unmount();\n }\n\n previousAnimationName.current = event.animationName;\n };\n\n element.addEventListener(\"animationcancel\", handleAnimationEnd);\n element.addEventListener(\"animationend\", handleAnimationEnd);\n\n return () => {\n element.removeEventListener(\"animationcancel\", handleAnimationEnd);\n element.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n }, [ref, unmount]);\n\n useLayoutEffect(() => {\n const element = ref.current;\n let animationFrameId: number;\n\n if (!element) {\n return;\n }\n\n if (!isPresent) {\n // If the element should be unmounting, wait for a repaint and check\n // if it is visible and has an animation. If not, unmount immediately.\n animationFrameId = requestAnimationFrame(() => {\n const styles = getComputedStyle(element);\n unmountAnimationName.current = styles.animationName;\n\n if (\n styles.animationName === \"none\" ||\n styles.animationName === previousAnimationName.current ||\n styles.display === \"none\"\n ) {\n unmount();\n }\n });\n }\n\n return () => {\n cancelAnimationFrame(animationFrameId);\n };\n }, [isPresent, ref, unmount]);\n}\n\n/**\n * Persist a component until it decides to unmount by\n * itself (instead of orchestrating the unmount from the parent).\n */\nexport function Persist({ children }: PersistProps) {\n const [isPersisting, setPersisting] = useState(true);\n const lastPresentChild = useRef<ReactNode>(null);\n const child = getChild(children);\n\n const unmount = useCallback(() => {\n flushSync(() => setPersisting(false));\n }, []);\n\n useLayoutEffect(() => {\n if (child) {\n setPersisting(true);\n lastPresentChild.current = child;\n }\n }, [child]);\n\n return (\n <PersistContext.Provider value={[Boolean(child), unmount]}>\n {child ?? (isPersisting ? lastPresentChild.current : null)}\n </PersistContext.Provider>\n );\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n Persist.displayName = PERSIST_NAME;\n}\n"],"names":[],"mappings":";;;;;;;;AAoBA;AAQA;AAEO;AACL;AAEA;AACF;AAEA;AACE;AAIA;AACF;AAEO;AACL;AACA;AACA;AAEA;AACE;AAEA;AACE;AAAA;AAWF;AACE;AACE;AAAQ;AAGV;AAAsC;AAGxC;AACA;AAEA;AACE;AACA;AAA8D;AAChE;AAGF;AACE;AACA;AAEA;AACE;AAAA;AAGF;AAGE;AACE;AACA;AAEA;AAKE;AAAQ;AACV;AACD;AAGH;AACE;AAAqC;AACvC;AAEJ;AAMgB;AACd;AACA;AACA;AAEA;AACE;AAAoC;AAGtC;AACE;AACE;AACA;AAA2B;AAC7B;AAGF;AACG;AAAuD;AAI5D;AAEA;AACE;AACF;;;;"}
1
+ {"version":3,"file":"Persist.js","sources":["../../src/utils/Persist.tsx"],"sourcesContent":["\"use client\";\n\nimport { nn } from \"@liveblocks/core\";\nimport type { ReactNode, RefObject } from \"react\";\nimport {\n Children,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { flushSync } from \"./flush-sync\";\n\n// Persist is an overly simplified version of Framer Motion's AnimatePresence,\n// mostly mimicking its usePresence API: https://github.com/framer/motion/blob/main/packages/framer-motion/src/components/AnimatePresence/use-presence.ts\n\nconst PERSIST_NAME = \"Persist\";\n\ninterface PersistProps {\n children: Exclude<ReactNode, Iterable<ReactNode>>;\n}\n\ntype PersistContext = [boolean, () => void];\n\nconst PersistContext = createContext<PersistContext | null>(null);\n\nexport function usePersist() {\n const persistContext = useContext(PersistContext);\n\n return nn(persistContext, \"Persist is missing from the React tree.\");\n}\n\nfunction getChild(children: ReactNode) {\n const child: ReactNode = Array.isArray(children)\n ? Children.only(children)\n : children;\n\n return isValidElement(child) ? child : undefined;\n}\n\nexport function useAnimationPersist(ref: RefObject<HTMLElement>) {\n const [isPresent, unmount] = usePersist();\n const previousAnimationName = useRef<string | null>(null);\n const unmountAnimationName = useRef<string | null>(null);\n\n useLayoutEffect(() => {\n const element = ref.current;\n\n if (!element) {\n return;\n }\n\n /**\n * Stop persisting at the end of the last animation.\n *\n * We keep track of all ending animations because animations stay\n * on getComputedStyle(element).animationName even if they're over,\n * so we need to keep track of previous animations to truly know if\n * an animation should be waited on.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n if (event.animationName === unmountAnimationName.current) {\n unmount();\n }\n\n previousAnimationName.current = event.animationName;\n };\n\n element.addEventListener(\"animationcancel\", handleAnimationEnd);\n element.addEventListener(\"animationend\", handleAnimationEnd);\n\n return () => {\n element.removeEventListener(\"animationcancel\", handleAnimationEnd);\n element.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n }, [ref, unmount]);\n\n useLayoutEffect(() => {\n const element = ref.current;\n let animationFrameId: number;\n\n if (!element) {\n return;\n }\n\n if (!isPresent) {\n // If the element should be unmounting, wait for a repaint and check\n // if it is visible and has an animation. If not, unmount immediately.\n animationFrameId = requestAnimationFrame(() => {\n const styles = getComputedStyle(element);\n unmountAnimationName.current = styles.animationName;\n\n if (\n styles.animationName === \"none\" ||\n styles.animationName === previousAnimationName.current ||\n styles.display === \"none\"\n ) {\n unmount();\n }\n });\n }\n\n return () => {\n cancelAnimationFrame(animationFrameId);\n };\n }, [isPresent, ref, unmount]);\n}\n\n/**\n * Persist a component until it decides to unmount by\n * itself (instead of orchestrating the unmount from the parent).\n */\nexport function Persist({ children }: PersistProps) {\n const [isPersisting, setPersisting] = useState(true);\n const lastPresentChild = useRef<ReactNode>(null);\n const child = getChild(children);\n\n const unmount = useCallback(() => {\n flushSync(() => setPersisting(false));\n }, []);\n\n useLayoutEffect(() => {\n if (child) {\n setPersisting(true);\n lastPresentChild.current = child;\n }\n }, [child]);\n\n return (\n <PersistContext.Provider value={[Boolean(child), unmount]}>\n {child ?? (isPersisting ? lastPresentChild.current : null)}\n </PersistContext.Provider>\n );\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n Persist.displayName = PERSIST_NAME;\n}\n"],"names":["createContext","useContext","nn","Children","isValidElement","useRef","useLayoutEffect","useState","useCallback","flushSync","jsx"],"mappings":";;;;;;;AAAA,YAAA,CAAA;AAoBA,MAAM,YAAe,GAAA,SAAA,CAAA;AAQrB,MAAM,cAAA,GAAiBA,oBAAqC,IAAI,CAAA,CAAA;AAEzD,SAAS,UAAa,GAAA;AAC3B,EAAM,MAAA,cAAA,GAAiBC,iBAAW,cAAc,CAAA,CAAA;AAEhD,EAAO,OAAAC,OAAA,CAAG,gBAAgB,yCAAyC,CAAA,CAAA;AACrE,CAAA;AAEA,SAAS,SAAS,QAAqB,EAAA;AACrC,EAAM,MAAA,KAAA,GAAmB,MAAM,OAAQ,CAAA,QAAQ,IAC3CC,cAAS,CAAA,IAAA,CAAK,QAAQ,CACtB,GAAA,QAAA,CAAA;AAEJ,EAAO,OAAAC,oBAAA,CAAe,KAAK,CAAA,GAAI,KAAQ,GAAA,KAAA,CAAA,CAAA;AACzC,CAAA;AAEO,SAAS,oBAAoB,GAA6B,EAAA;AAC/D,EAAA,MAAM,CAAC,SAAA,EAAW,OAAO,CAAA,GAAI,UAAW,EAAA,CAAA;AACxC,EAAM,MAAA,qBAAA,GAAwBC,aAAsB,IAAI,CAAA,CAAA;AACxD,EAAM,MAAA,oBAAA,GAAuBA,aAAsB,IAAI,CAAA,CAAA;AAEvD,EAAAC,qBAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,UAAU,GAAI,CAAA,OAAA,CAAA;AAEpB,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA,OAAA;AAAA,KACF;AAUA,IAAM,MAAA,kBAAA,GAAqB,CAAC,KAA0B,KAAA;AACpD,MAAI,IAAA,KAAA,CAAM,aAAkB,KAAA,oBAAA,CAAqB,OAAS,EAAA;AACxD,QAAQ,OAAA,EAAA,CAAA;AAAA,OACV;AAEA,MAAA,qBAAA,CAAsB,UAAU,KAAM,CAAA,aAAA,CAAA;AAAA,KACxC,CAAA;AAEA,IAAQ,OAAA,CAAA,gBAAA,CAAiB,mBAAmB,kBAAkB,CAAA,CAAA;AAC9D,IAAQ,OAAA,CAAA,gBAAA,CAAiB,gBAAgB,kBAAkB,CAAA,CAAA;AAE3D,IAAA,OAAO,MAAM;AACX,MAAQ,OAAA,CAAA,mBAAA,CAAoB,mBAAmB,kBAAkB,CAAA,CAAA;AACjE,MAAQ,OAAA,CAAA,mBAAA,CAAoB,gBAAgB,kBAAkB,CAAA,CAAA;AAAA,KAChE,CAAA;AAAA,GACC,EAAA,CAAC,GAAK,EAAA,OAAO,CAAC,CAAA,CAAA;AAEjB,EAAAA,qBAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,UAAU,GAAI,CAAA,OAAA,CAAA;AACpB,IAAI,IAAA,gBAAA,CAAA;AAEJ,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,SAAW,EAAA;AAGd,MAAA,gBAAA,GAAmB,sBAAsB,MAAM;AAC7C,QAAM,MAAA,MAAA,GAAS,iBAAiB,OAAO,CAAA,CAAA;AACvC,QAAA,oBAAA,CAAqB,UAAU,MAAO,CAAA,aAAA,CAAA;AAEtC,QACE,IAAA,MAAA,CAAO,kBAAkB,MACzB,IAAA,MAAA,CAAO,kBAAkB,qBAAsB,CAAA,OAAA,IAC/C,MAAO,CAAA,OAAA,KAAY,MACnB,EAAA;AACA,UAAQ,OAAA,EAAA,CAAA;AAAA,SACV;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,oBAAA,CAAqB,gBAAgB,CAAA,CAAA;AAAA,KACvC,CAAA;AAAA,GACC,EAAA,CAAC,SAAW,EAAA,GAAA,EAAK,OAAO,CAAC,CAAA,CAAA;AAC9B,CAAA;AAMgB,SAAA,OAAA,CAAQ,EAAE,QAAA,EAA0B,EAAA;AAClD,EAAA,MAAM,CAAC,YAAA,EAAc,aAAa,CAAA,GAAIC,eAAS,IAAI,CAAA,CAAA;AACnD,EAAM,MAAA,gBAAA,GAAmBF,aAAkB,IAAI,CAAA,CAAA;AAC/C,EAAM,MAAA,KAAA,GAAQ,SAAS,QAAQ,CAAA,CAAA;AAE/B,EAAM,MAAA,OAAA,GAAUG,kBAAY,MAAM;AAChC,IAAUC,mBAAA,CAAA,MAAM,aAAc,CAAA,KAAK,CAAC,CAAA,CAAA;AAAA,GACtC,EAAG,EAAE,CAAA,CAAA;AAEL,EAAAH,qBAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,aAAA,CAAc,IAAI,CAAA,CAAA;AAClB,MAAA,gBAAA,CAAiB,OAAU,GAAA,KAAA,CAAA;AAAA,KAC7B;AAAA,GACF,EAAG,CAAC,KAAK,CAAC,CAAA,CAAA;AAEV,EACE,uBAAAI,cAAA,CAAC,eAAe,QAAf,EAAA;AAAA,IAAwB,KAAO,EAAA,CAAC,OAAQ,CAAA,KAAK,GAAG,OAAO,CAAA;AAAA,IACrD,QAAA,EAAA,KAAA,KAAU,YAAe,GAAA,gBAAA,CAAiB,OAAU,GAAA,IAAA,CAAA;AAAA,GACvD,CAAA,CAAA;AAEJ,CAAA;AAEA,IAAI,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,EAAA,OAAA,CAAQ,WAAc,GAAA,YAAA,CAAA;AACxB;;;;;;"}
@@ -1,9 +1,9 @@
1
- 'use client';
1
+ import { jsx } from 'react/jsx-runtime';
2
2
  import { nn } from '@liveblocks/core';
3
- import React__default, { createContext, useContext, useRef, useState, useCallback, Children, isValidElement } from 'react';
3
+ import { createContext, useContext, Children, isValidElement, useRef, useLayoutEffect, useState, useCallback } from 'react';
4
4
  import { flushSync } from './flush-sync.mjs';
5
- import { useLayoutEffect } from './use-layout-effect.mjs';
6
5
 
6
+ "use client";
7
7
  const PERSIST_NAME = "Persist";
8
8
  const PersistContext = createContext(null);
9
9
  function usePersist() {
@@ -69,9 +69,10 @@ function Persist({ children }) {
69
69
  lastPresentChild.current = child;
70
70
  }
71
71
  }, [child]);
72
- return /* @__PURE__ */ React__default.createElement(PersistContext.Provider, {
73
- value: [Boolean(child), unmount]
74
- }, child ?? (isPersisting ? lastPresentChild.current : null));
72
+ return /* @__PURE__ */ jsx(PersistContext.Provider, {
73
+ value: [Boolean(child), unmount],
74
+ children: child ?? (isPersisting ? lastPresentChild.current : null)
75
+ });
75
76
  }
76
77
  if (process.env.NODE_ENV !== "production") {
77
78
  Persist.displayName = PERSIST_NAME;
@@ -1 +1 @@
1
- {"version":3,"file":"Persist.mjs","sources":["../../src/utils/Persist.tsx"],"sourcesContent":["\"use client\";\n\nimport { nn } from \"@liveblocks/core\";\nimport type { ReactNode, RefObject } from \"react\";\nimport React, {\n Children,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useRef,\n useState,\n} from \"react\";\n\nimport { flushSync } from \"./flush-sync\";\nimport { useLayoutEffect } from \"./use-layout-effect\";\n\n// Persist is an overly simplified version of Framer Motion's AnimatePresence,\n// mostly mimicking its usePresence API: https://github.com/framer/motion/blob/main/packages/framer-motion/src/components/AnimatePresence/use-presence.ts\n\nconst PERSIST_NAME = \"Persist\";\n\ninterface PersistProps {\n children: Exclude<ReactNode, Iterable<ReactNode>>;\n}\n\ntype PersistContext = [boolean, () => void];\n\nconst PersistContext = createContext<PersistContext | null>(null);\n\nexport function usePersist() {\n const persistContext = useContext(PersistContext);\n\n return nn(persistContext, \"Persist is missing from the React tree.\");\n}\n\nfunction getChild(children: ReactNode) {\n const child: ReactNode = Array.isArray(children)\n ? Children.only(children)\n : children;\n\n return isValidElement(child) ? child : undefined;\n}\n\nexport function useAnimationPersist(ref: RefObject<HTMLElement>) {\n const [isPresent, unmount] = usePersist();\n const previousAnimationName = useRef<string | null>(null);\n const unmountAnimationName = useRef<string | null>(null);\n\n useLayoutEffect(() => {\n const element = ref.current;\n\n if (!element) {\n return;\n }\n\n /**\n * Stop persisting at the end of the last animation.\n *\n * We keep track of all ending animations because animations stay\n * on getComputedStyle(element).animationName even if they're over,\n * so we need to keep track of previous animations to truly know if\n * an animation should be waited on.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n if (event.animationName === unmountAnimationName.current) {\n unmount();\n }\n\n previousAnimationName.current = event.animationName;\n };\n\n element.addEventListener(\"animationcancel\", handleAnimationEnd);\n element.addEventListener(\"animationend\", handleAnimationEnd);\n\n return () => {\n element.removeEventListener(\"animationcancel\", handleAnimationEnd);\n element.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n }, [ref, unmount]);\n\n useLayoutEffect(() => {\n const element = ref.current;\n let animationFrameId: number;\n\n if (!element) {\n return;\n }\n\n if (!isPresent) {\n // If the element should be unmounting, wait for a repaint and check\n // if it is visible and has an animation. If not, unmount immediately.\n animationFrameId = requestAnimationFrame(() => {\n const styles = getComputedStyle(element);\n unmountAnimationName.current = styles.animationName;\n\n if (\n styles.animationName === \"none\" ||\n styles.animationName === previousAnimationName.current ||\n styles.display === \"none\"\n ) {\n unmount();\n }\n });\n }\n\n return () => {\n cancelAnimationFrame(animationFrameId);\n };\n }, [isPresent, ref, unmount]);\n}\n\n/**\n * Persist a component until it decides to unmount by\n * itself (instead of orchestrating the unmount from the parent).\n */\nexport function Persist({ children }: PersistProps) {\n const [isPersisting, setPersisting] = useState(true);\n const lastPresentChild = useRef<ReactNode>(null);\n const child = getChild(children);\n\n const unmount = useCallback(() => {\n flushSync(() => setPersisting(false));\n }, []);\n\n useLayoutEffect(() => {\n if (child) {\n setPersisting(true);\n lastPresentChild.current = child;\n }\n }, [child]);\n\n return (\n <PersistContext.Provider value={[Boolean(child), unmount]}>\n {child ?? (isPersisting ? lastPresentChild.current : null)}\n </PersistContext.Provider>\n );\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n Persist.displayName = PERSIST_NAME;\n}\n"],"names":[],"mappings":";;;;;;AAoBA;AAQA;AAEO;AACL;AAEA;AACF;AAEA;AACE;AAIA;AACF;AAEO;AACL;AACA;AACA;AAEA;AACE;AAEA;AACE;AAAA;AAWF;AACE;AACE;AAAQ;AAGV;AAAsC;AAGxC;AACA;AAEA;AACE;AACA;AAA8D;AAChE;AAGF;AACE;AACA;AAEA;AACE;AAAA;AAGF;AAGE;AACE;AACA;AAEA;AAKE;AAAQ;AACV;AACD;AAGH;AACE;AAAqC;AACvC;AAEJ;AAMgB;AACd;AACA;AACA;AAEA;AACE;AAAoC;AAGtC;AACE;AACE;AACA;AAA2B;AAC7B;AAGF;AACG;AAAuD;AAI5D;AAEA;AACE;AACF;;"}
1
+ {"version":3,"file":"Persist.mjs","sources":["../../src/utils/Persist.tsx"],"sourcesContent":["\"use client\";\n\nimport { nn } from \"@liveblocks/core\";\nimport type { ReactNode, RefObject } from \"react\";\nimport {\n Children,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { flushSync } from \"./flush-sync\";\n\n// Persist is an overly simplified version of Framer Motion's AnimatePresence,\n// mostly mimicking its usePresence API: https://github.com/framer/motion/blob/main/packages/framer-motion/src/components/AnimatePresence/use-presence.ts\n\nconst PERSIST_NAME = \"Persist\";\n\ninterface PersistProps {\n children: Exclude<ReactNode, Iterable<ReactNode>>;\n}\n\ntype PersistContext = [boolean, () => void];\n\nconst PersistContext = createContext<PersistContext | null>(null);\n\nexport function usePersist() {\n const persistContext = useContext(PersistContext);\n\n return nn(persistContext, \"Persist is missing from the React tree.\");\n}\n\nfunction getChild(children: ReactNode) {\n const child: ReactNode = Array.isArray(children)\n ? Children.only(children)\n : children;\n\n return isValidElement(child) ? child : undefined;\n}\n\nexport function useAnimationPersist(ref: RefObject<HTMLElement>) {\n const [isPresent, unmount] = usePersist();\n const previousAnimationName = useRef<string | null>(null);\n const unmountAnimationName = useRef<string | null>(null);\n\n useLayoutEffect(() => {\n const element = ref.current;\n\n if (!element) {\n return;\n }\n\n /**\n * Stop persisting at the end of the last animation.\n *\n * We keep track of all ending animations because animations stay\n * on getComputedStyle(element).animationName even if they're over,\n * so we need to keep track of previous animations to truly know if\n * an animation should be waited on.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n if (event.animationName === unmountAnimationName.current) {\n unmount();\n }\n\n previousAnimationName.current = event.animationName;\n };\n\n element.addEventListener(\"animationcancel\", handleAnimationEnd);\n element.addEventListener(\"animationend\", handleAnimationEnd);\n\n return () => {\n element.removeEventListener(\"animationcancel\", handleAnimationEnd);\n element.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n }, [ref, unmount]);\n\n useLayoutEffect(() => {\n const element = ref.current;\n let animationFrameId: number;\n\n if (!element) {\n return;\n }\n\n if (!isPresent) {\n // If the element should be unmounting, wait for a repaint and check\n // if it is visible and has an animation. If not, unmount immediately.\n animationFrameId = requestAnimationFrame(() => {\n const styles = getComputedStyle(element);\n unmountAnimationName.current = styles.animationName;\n\n if (\n styles.animationName === \"none\" ||\n styles.animationName === previousAnimationName.current ||\n styles.display === \"none\"\n ) {\n unmount();\n }\n });\n }\n\n return () => {\n cancelAnimationFrame(animationFrameId);\n };\n }, [isPresent, ref, unmount]);\n}\n\n/**\n * Persist a component until it decides to unmount by\n * itself (instead of orchestrating the unmount from the parent).\n */\nexport function Persist({ children }: PersistProps) {\n const [isPersisting, setPersisting] = useState(true);\n const lastPresentChild = useRef<ReactNode>(null);\n const child = getChild(children);\n\n const unmount = useCallback(() => {\n flushSync(() => setPersisting(false));\n }, []);\n\n useLayoutEffect(() => {\n if (child) {\n setPersisting(true);\n lastPresentChild.current = child;\n }\n }, [child]);\n\n return (\n <PersistContext.Provider value={[Boolean(child), unmount]}>\n {child ?? (isPersisting ? lastPresentChild.current : null)}\n </PersistContext.Provider>\n );\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n Persist.displayName = PERSIST_NAME;\n}\n"],"names":[],"mappings":"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"}
@@ -1,16 +1,17 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
3
+ var jsxRuntime = require('react/jsx-runtime');
4
4
  var reactSlot = require('@radix-ui/react-slot');
5
- var React = require('react');
5
+ var react = require('react');
6
6
  var ReactDOM = require('react-dom');
7
7
 
8
+ "use client";
8
9
  const PORTAL_NAME = "Portal";
9
- const Portal = React.forwardRef(
10
+ const Portal = react.forwardRef(
10
11
  ({ container = document?.body, asChild, ...props }, forwardedRef) => {
11
12
  const Component = asChild ? reactSlot.Slot : "div";
12
13
  return container ? ReactDOM.createPortal(
13
- /* @__PURE__ */ React.createElement(Component, {
14
+ /* @__PURE__ */ jsxRuntime.jsx(Component, {
14
15
  "data-liveblocks-portal": "",
15
16
  ...props,
16
17
  ref: forwardedRef
@@ -1 +1 @@
1
- {"version":3,"file":"Portal.js","sources":["../../src/utils/Portal.tsx"],"sourcesContent":["\"use client\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport React, { forwardRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport type { ComponentPropsWithSlot } from \"../types\";\n\nconst PORTAL_NAME = \"Portal\";\n\ninterface PortalProps extends ComponentPropsWithSlot<\"div\"> {\n /**\n * The container to render the portal into.\n */\n container?: HTMLElement | null;\n}\n\nconst Portal = forwardRef<HTMLDivElement, PortalProps>(\n ({ container = document?.body, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"div\";\n\n return container\n ? createPortal(\n <Component data-liveblocks-portal=\"\" {...props} ref={forwardedRef} />,\n container\n )\n : null;\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n Portal.displayName = PORTAL_NAME;\n}\n\nexport { Portal };\n"],"names":[],"mappings":";;;;;;;AAQA;AASA;AAAe;AAEX;AAEA;AACI;AACG;AAAiC;AAAO;AAAY;AAAc;AACnE;AAEF;AAER;AAEA;AACE;AACF;;"}
1
+ {"version":3,"file":"Portal.js","sources":["../../src/utils/Portal.tsx"],"sourcesContent":["\"use client\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { forwardRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport type { ComponentPropsWithSlot } from \"../types\";\n\nconst PORTAL_NAME = \"Portal\";\n\ninterface PortalProps extends ComponentPropsWithSlot<\"div\"> {\n /**\n * The container to render the portal into.\n */\n container?: HTMLElement | null;\n}\n\nconst Portal = forwardRef<HTMLDivElement, PortalProps>(\n ({ container = document?.body, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"div\";\n\n return container\n ? createPortal(\n <Component data-liveblocks-portal=\"\" {...props} ref={forwardedRef} />,\n container\n )\n : null;\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n Portal.displayName = PORTAL_NAME;\n}\n\nexport { Portal };\n"],"names":["forwardRef","Slot","createPortal","jsx"],"mappings":";;;;;;;AAAA,YAAA,CAAA;AAQA,MAAM,WAAc,GAAA,QAAA,CAAA;AASpB,MAAM,MAAS,GAAAA,gBAAA;AAAA,EACb,CAAC,EAAE,SAAY,GAAA,QAAA,EAAU,MAAM,OAAY,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AACnE,IAAM,MAAA,SAAA,GAAY,UAAUC,cAAO,GAAA,KAAA,CAAA;AAEnC,IAAA,OAAO,SACH,GAAAC,qBAAA;AAAA,sBACGC,cAAA,CAAA,SAAA,EAAA;AAAA,QAAU,wBAAuB,EAAA,EAAA;AAAA,QAAI,GAAG,KAAA;AAAA,QAAO,GAAK,EAAA,YAAA;AAAA,OAAc,CAAA;AAAA,MACnE,SAAA;AAAA,KAEF,GAAA,IAAA,CAAA;AAAA,GACN;AACF,EAAA;AAEA,IAAI,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,EAAA,MAAA,CAAO,WAAc,GAAA,WAAA,CAAA;AACvB;;;;"}
@@ -1,14 +1,15 @@
1
- 'use client';
1
+ import { jsx } from 'react/jsx-runtime';
2
2
  import { Slot } from '@radix-ui/react-slot';
3
- import React__default, { forwardRef } from 'react';
3
+ import { forwardRef } from 'react';
4
4
  import { createPortal } from 'react-dom';
5
5
 
6
+ "use client";
6
7
  const PORTAL_NAME = "Portal";
7
8
  const Portal = forwardRef(
8
9
  ({ container = document?.body, asChild, ...props }, forwardedRef) => {
9
10
  const Component = asChild ? Slot : "div";
10
11
  return container ? createPortal(
11
- /* @__PURE__ */ React__default.createElement(Component, {
12
+ /* @__PURE__ */ jsx(Component, {
12
13
  "data-liveblocks-portal": "",
13
14
  ...props,
14
15
  ref: forwardedRef
@@ -1 +1 @@
1
- {"version":3,"file":"Portal.mjs","sources":["../../src/utils/Portal.tsx"],"sourcesContent":["\"use client\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport React, { forwardRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport type { ComponentPropsWithSlot } from \"../types\";\n\nconst PORTAL_NAME = \"Portal\";\n\ninterface PortalProps extends ComponentPropsWithSlot<\"div\"> {\n /**\n * The container to render the portal into.\n */\n container?: HTMLElement | null;\n}\n\nconst Portal = forwardRef<HTMLDivElement, PortalProps>(\n ({ container = document?.body, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"div\";\n\n return container\n ? createPortal(\n <Component data-liveblocks-portal=\"\" {...props} ref={forwardedRef} />,\n container\n )\n : null;\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n Portal.displayName = PORTAL_NAME;\n}\n\nexport { Portal };\n"],"names":[],"mappings":";;;;;AAQA;AASA;AAAe;AAEX;AAEA;AACI;AACG;AAAiC;AAAO;AAAY;AAAc;AACnE;AAEF;AAER;AAEA;AACE;AACF;;"}
1
+ {"version":3,"file":"Portal.mjs","sources":["../../src/utils/Portal.tsx"],"sourcesContent":["\"use client\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { forwardRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport type { ComponentPropsWithSlot } from \"../types\";\n\nconst PORTAL_NAME = \"Portal\";\n\ninterface PortalProps extends ComponentPropsWithSlot<\"div\"> {\n /**\n * The container to render the portal into.\n */\n container?: HTMLElement | null;\n}\n\nconst Portal = forwardRef<HTMLDivElement, PortalProps>(\n ({ container = document?.body, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"div\";\n\n return container\n ? createPortal(\n <Component data-liveblocks-portal=\"\" {...props} ref={forwardedRef} />,\n container\n )\n : null;\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n Portal.displayName = PORTAL_NAME;\n}\n\nexport { Portal };\n"],"names":[],"mappings":";;;;;AAAA,YAAA,CAAA;AAQA,MAAM,WAAc,GAAA,QAAA,CAAA;AASpB,MAAM,MAAS,GAAA,UAAA;AAAA,EACb,CAAC,EAAE,SAAY,GAAA,QAAA,EAAU,MAAM,OAAY,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AACnE,IAAM,MAAA,SAAA,GAAY,UAAU,IAAO,GAAA,KAAA,CAAA;AAEnC,IAAA,OAAO,SACH,GAAA,YAAA;AAAA,sBACG,GAAA,CAAA,SAAA,EAAA;AAAA,QAAU,wBAAuB,EAAA,EAAA;AAAA,QAAI,GAAG,KAAA;AAAA,QAAO,GAAK,EAAA,YAAA;AAAA,OAAc,CAAA;AAAA,MACnE,SAAA;AAAA,KAEF,GAAA,IAAA,CAAA;AAAA,GACN;AACF,EAAA;AAEA,IAAI,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,EAAA,MAAA,CAAO,WAAc,GAAA,WAAA,CAAA;AACvB;;;;"}
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
3
  var core = require('@liveblocks/core');
4
- var React = require('react');
4
+ var react = require('react');
5
5
 
6
6
  function useControllableState(value, onChange, defaultValue) {
7
- const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);
7
+ const [uncontrolledValue, setUncontrolledValue] = react.useState(defaultValue);
8
8
  const isControlled = value !== void 0;
9
- const wasControlled = React.useRef(isControlled);
10
- React.useEffect(() => {
9
+ const wasControlled = react.useRef(isControlled);
10
+ react.useEffect(() => {
11
11
  if (process.env.NODE_ENV !== "production" && wasControlled.current !== isControlled) {
12
12
  core.console.warn(
13
13
  `A component is changing from ${wasControlled ? "controlled" : "uncontrolled"} to ${isControlled ? "controlled" : "uncontrolled"}.`
@@ -16,7 +16,7 @@ function useControllableState(value, onChange, defaultValue) {
16
16
  wasControlled.current = isControlled;
17
17
  }, [isControlled]);
18
18
  const currentValue = isControlled ? value : uncontrolledValue;
19
- const setValue = React.useCallback(
19
+ const setValue = react.useCallback(
20
20
  (value2) => {
21
21
  if (isControlled) {
22
22
  return onChange?.(value2);
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var React = require('react');
3
+ var react = require('react');
4
4
  var clamp = require('./clamp.js');
5
5
  var wrap = require('./wrap.js');
6
6
 
@@ -8,21 +8,21 @@ const defaultOptions = {
8
8
  wrap: true
9
9
  };
10
10
  function useIndex(initial, length, options) {
11
- const { wrap: shouldWrap } = React.useMemo(() => {
11
+ const { wrap: shouldWrap } = react.useMemo(() => {
12
12
  return {
13
13
  ...defaultOptions,
14
14
  ...options
15
15
  };
16
16
  }, [options]);
17
- const transform = React.useMemo(() => shouldWrap ? wrap.wrap : clamp.clamp, [shouldWrap]);
18
- const [index, setIndex] = React.useState(initial);
19
- React.useEffect(() => {
17
+ const transform = react.useMemo(() => shouldWrap ? wrap.wrap : clamp.clamp, [shouldWrap]);
18
+ const [index, setIndex] = react.useState(initial);
19
+ react.useEffect(() => {
20
20
  setIndex((index2) => clamp.clamp(index2, 0, Math.max(length - 1, 0)));
21
21
  }, [length]);
22
- const previousIndex = React.useCallback(() => {
22
+ const previousIndex = react.useCallback(() => {
23
23
  setIndex((index2) => transform(index2 - 1, 0, Math.max(length, 0)));
24
24
  }, [length, transform]);
25
- const nextIndex = React.useCallback(() => {
25
+ const nextIndex = react.useCallback(() => {
26
26
  setIndex((index2) => transform(index2 + 1, 0, Math.max(length, 0)));
27
27
  }, [length, transform]);
28
28
  return [index, previousIndex, nextIndex, setIndex];
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var React = require('react');
3
+ var react = require('react');
4
4
 
5
5
  function useInitial(value) {
6
- const [initialValue] = React.useState(value);
6
+ const [initialValue] = react.useState(value);
7
7
  return initialValue;
8
8
  }
9
9
 
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var React = require('react');
3
+ var react = require('react');
4
4
 
5
5
  function useInterval(callback, delay) {
6
- const latestCallback = React.useRef(callback);
7
- React.useEffect(() => {
6
+ const latestCallback = react.useRef(callback);
7
+ react.useEffect(() => {
8
8
  latestCallback.current = callback;
9
9
  }, [callback]);
10
- React.useEffect(() => {
10
+ react.useEffect(() => {
11
11
  if (!delay && delay !== 0) {
12
12
  return;
13
13
  }
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var React = require('react');
3
+ var react = require('react');
4
4
 
5
5
  function useLatest(value) {
6
- const ref = React.useRef(value);
7
- React.useEffect(() => {
6
+ const ref = react.useRef(value);
7
+ react.useEffect(() => {
8
8
  ref.current = value;
9
9
  }, [value]);
10
10
  return ref;
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var React = require('react');
3
+ var react = require('react');
4
4
  var useLatest = require('./use-latest.js');
5
5
 
6
6
  function useObservable(observable, callback) {
7
7
  const latestCallback = useLatest.useLatest(callback);
8
- React.useEffect(() => {
8
+ react.useEffect(() => {
9
9
  const unsubscribe = observable.subscribe(() => latestCallback.current());
10
10
  return unsubscribe;
11
11
  }, [observable, latestCallback]);
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var React = require('react');
3
+ var react = require('react');
4
4
 
5
5
  function applyRef(ref, value) {
6
6
  if (value) {
@@ -17,7 +17,7 @@ function mergeRefs(value, ...refs) {
17
17
  }
18
18
  }
19
19
  function useRefs(...refs) {
20
- return React.useCallback((value) => mergeRefs(value, ...refs), [refs]);
20
+ return react.useCallback((value) => mergeRefs(value, ...refs), [refs]);
21
21
  }
22
22
 
23
23
  exports.useRefs = useRefs;
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var React = require('react');
3
+ var react = require('react');
4
4
 
5
5
  function useRerender() {
6
- const [key, update] = React.useReducer(
6
+ const [key, update] = react.useReducer(
7
7
  (key2) => key2 + 1,
8
8
  0
9
9
  );
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var React = require('react');
3
+ var react = require('react');
4
4
  var useLatest = require('./use-latest.js');
5
5
 
6
6
  let intersectionObserver;
@@ -21,10 +21,31 @@ function unobserve(element) {
21
21
  intersectionCallbacks.delete(element);
22
22
  intersectionObserver?.unobserve(element);
23
23
  }
24
+ function useVisible(ref, options) {
25
+ const [isVisible, setVisible] = react.useState(false);
26
+ const enabled = options?.enabled ?? true;
27
+ react.useEffect(() => {
28
+ const element = ref.current;
29
+ if (!element) {
30
+ return;
31
+ }
32
+ if (enabled) {
33
+ observe(element, (entry) => {
34
+ setVisible(entry.isIntersecting);
35
+ });
36
+ } else {
37
+ unobserve(element);
38
+ }
39
+ return () => {
40
+ unobserve(element);
41
+ };
42
+ }, [enabled]);
43
+ return isVisible;
44
+ }
24
45
  function useVisibleCallback(ref, callback, options) {
25
46
  const enabled = options?.enabled ?? true;
26
47
  const latestCallback = useLatest.useLatest(callback);
27
- React.useEffect(() => {
48
+ react.useEffect(() => {
28
49
  const element = ref.current;
29
50
  if (!element) {
30
51
  return;
@@ -44,5 +65,6 @@ function useVisibleCallback(ref, callback, options) {
44
65
  }, [enabled]);
45
66
  }
46
67
 
68
+ exports.useVisible = useVisible;
47
69
  exports.useVisibleCallback = useVisibleCallback;
48
70
  //# sourceMappingURL=use-visible.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-visible.js","sources":["../../src/utils/use-visible.ts"],"sourcesContent":["import { type RefObject, useEffect, useState } from \"react\";\n\nimport { useLatest } from \"./use-latest\";\n\ntype Options = { enabled?: boolean };\n\ntype IntersectionObserverSingleCallback = (\n entry: IntersectionObserverEntry\n) => void;\n\nlet intersectionObserver: IntersectionObserver | undefined;\nconst intersectionCallbacks = new WeakMap<\n Element,\n IntersectionObserverSingleCallback\n>();\n\nfunction observe(\n element: Element,\n callback: IntersectionObserverSingleCallback\n) {\n if (!intersectionObserver) {\n intersectionObserver = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n const callback = intersectionCallbacks.get(entry.target);\n\n callback?.(entry);\n }\n });\n }\n\n intersectionCallbacks.set(element, callback);\n intersectionObserver.observe(element);\n}\n\nfunction unobserve(element: Element) {\n intersectionCallbacks.delete(element);\n intersectionObserver?.unobserve(element);\n}\n\n/**\n * Observe whether an element is currently visible or not.\n */\nexport function useVisible(ref: RefObject<Element>, options?: Options) {\n const [isVisible, setVisible] = useState(false);\n const enabled = options?.enabled ?? true;\n\n useEffect(() => {\n const element = ref.current;\n\n if (!element) {\n return;\n }\n\n if (enabled) {\n observe(element, (entry) => {\n setVisible(entry.isIntersecting);\n });\n } else {\n unobserve(element);\n }\n\n return () => {\n unobserve(element);\n };\n }, [enabled]); // eslint-disable-line react-hooks/exhaustive-deps\n\n return isVisible;\n}\n\nexport function useVisibleCallback<T extends (...args: any[]) => void>(\n ref: RefObject<Element>,\n callback: T,\n options?: Options\n) {\n const enabled = options?.enabled ?? true;\n const latestCallback = useLatest(callback);\n\n useEffect(() => {\n const element = ref.current;\n\n if (!element) {\n return;\n }\n\n if (enabled) {\n observe(element, (entry) => {\n if (entry.isIntersecting) {\n latestCallback.current();\n }\n });\n } else {\n unobserve(element);\n }\n\n return () => {\n unobserve(element);\n };\n }, [enabled]); // eslint-disable-line react-hooks/exhaustive-deps\n}\n"],"names":["callback","useLatest","useEffect"],"mappings":";;;;;AAUA,IAAI,oBAAA,CAAA;AACJ,MAAM,qBAAA,uBAA4B,OAGhC,EAAA,CAAA;AAEF,SAAS,OAAA,CACP,SACA,QACA,EAAA;AACA,EAAA,IAAI,CAAC,oBAAsB,EAAA;AACzB,IAAuB,oBAAA,GAAA,IAAI,oBAAqB,CAAA,CAAC,OAAY,KAAA;AAC3D,MAAA,KAAA,MAAW,SAAS,OAAS,EAAA;AAC3B,QAAA,MAAMA,SAAW,GAAA,qBAAA,CAAsB,GAAI,CAAA,KAAA,CAAM,MAAM,CAAA,CAAA;AAEvD,QAAAA,YAAW,KAAK,CAAA,CAAA;AAAA,OAClB;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAEA,EAAsB,qBAAA,CAAA,GAAA,CAAI,SAAS,QAAQ,CAAA,CAAA;AAC3C,EAAA,oBAAA,CAAqB,QAAQ,OAAO,CAAA,CAAA;AACtC,CAAA;AAEA,SAAS,UAAU,OAAkB,EAAA;AACnC,EAAA,qBAAA,CAAsB,OAAO,OAAO,CAAA,CAAA;AACpC,EAAA,oBAAA,EAAsB,UAAU,OAAO,CAAA,CAAA;AACzC,CAAA;AAgCgB,SAAA,kBAAA,CACd,GACA,EAAA,QAAA,EACA,OACA,EAAA;AACA,EAAM,MAAA,OAAA,GAAU,SAAS,OAAW,IAAA,IAAA,CAAA;AACpC,EAAM,MAAA,cAAA,GAAiBC,oBAAU,QAAQ,CAAA,CAAA;AAEzC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAU,GAAI,CAAA,OAAA,CAAA;AAEpB,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAI,OAAS,EAAA;AACX,MAAQ,OAAA,CAAA,OAAA,EAAS,CAAC,KAAU,KAAA;AAC1B,QAAA,IAAI,MAAM,cAAgB,EAAA;AACxB,UAAA,cAAA,CAAe,OAAQ,EAAA,CAAA;AAAA,SACzB;AAAA,OACD,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAAA,KACnB;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAAA,KACnB,CAAA;AAAA,GACF,EAAG,CAAC,OAAO,CAAC,CAAA,CAAA;AACd;;;;"}
1
+ {"version":3,"file":"use-visible.js","sources":["../../src/utils/use-visible.ts"],"sourcesContent":["import { type RefObject, useEffect, useState } from \"react\";\n\nimport { useLatest } from \"./use-latest\";\n\ntype Options = { enabled?: boolean };\n\ntype IntersectionObserverSingleCallback = (\n entry: IntersectionObserverEntry\n) => void;\n\nlet intersectionObserver: IntersectionObserver | undefined;\nconst intersectionCallbacks = new WeakMap<\n Element,\n IntersectionObserverSingleCallback\n>();\n\nfunction observe(\n element: Element,\n callback: IntersectionObserverSingleCallback\n) {\n if (!intersectionObserver) {\n intersectionObserver = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n const callback = intersectionCallbacks.get(entry.target);\n\n callback?.(entry);\n }\n });\n }\n\n intersectionCallbacks.set(element, callback);\n intersectionObserver.observe(element);\n}\n\nfunction unobserve(element: Element) {\n intersectionCallbacks.delete(element);\n intersectionObserver?.unobserve(element);\n}\n\n/**\n * Observe whether an element is currently visible or not.\n */\nexport function useVisible(ref: RefObject<Element>, options?: Options) {\n const [isVisible, setVisible] = useState(false);\n const enabled = options?.enabled ?? true;\n\n useEffect(() => {\n const element = ref.current;\n\n if (!element) {\n return;\n }\n\n if (enabled) {\n observe(element, (entry) => {\n setVisible(entry.isIntersecting);\n });\n } else {\n unobserve(element);\n }\n\n return () => {\n unobserve(element);\n };\n }, [enabled]); // eslint-disable-line react-hooks/exhaustive-deps\n\n return isVisible;\n}\n\nexport function useVisibleCallback<T extends (...args: any[]) => void>(\n ref: RefObject<Element>,\n callback: T,\n options?: Options\n) {\n const enabled = options?.enabled ?? true;\n const latestCallback = useLatest(callback);\n\n useEffect(() => {\n const element = ref.current;\n\n if (!element) {\n return;\n }\n\n if (enabled) {\n observe(element, (entry) => {\n if (entry.isIntersecting) {\n latestCallback.current();\n }\n });\n } else {\n unobserve(element);\n }\n\n return () => {\n unobserve(element);\n };\n }, [enabled]); // eslint-disable-line react-hooks/exhaustive-deps\n}\n"],"names":["callback","useState","useEffect","useLatest"],"mappings":";;;;;AAUA,IAAI,oBAAA,CAAA;AACJ,MAAM,qBAAA,uBAA4B,OAGhC,EAAA,CAAA;AAEF,SAAS,OAAA,CACP,SACA,QACA,EAAA;AACA,EAAA,IAAI,CAAC,oBAAsB,EAAA;AACzB,IAAuB,oBAAA,GAAA,IAAI,oBAAqB,CAAA,CAAC,OAAY,KAAA;AAC3D,MAAA,KAAA,MAAW,SAAS,OAAS,EAAA;AAC3B,QAAA,MAAMA,SAAW,GAAA,qBAAA,CAAsB,GAAI,CAAA,KAAA,CAAM,MAAM,CAAA,CAAA;AAEvD,QAAAA,YAAW,KAAK,CAAA,CAAA;AAAA,OAClB;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAEA,EAAsB,qBAAA,CAAA,GAAA,CAAI,SAAS,QAAQ,CAAA,CAAA;AAC3C,EAAA,oBAAA,CAAqB,QAAQ,OAAO,CAAA,CAAA;AACtC,CAAA;AAEA,SAAS,UAAU,OAAkB,EAAA;AACnC,EAAA,qBAAA,CAAsB,OAAO,OAAO,CAAA,CAAA;AACpC,EAAA,oBAAA,EAAsB,UAAU,OAAO,CAAA,CAAA;AACzC,CAAA;AAKgB,SAAA,UAAA,CAAW,KAAyB,OAAmB,EAAA;AACrE,EAAA,MAAM,CAAC,SAAA,EAAW,UAAU,CAAA,GAAIC,eAAS,KAAK,CAAA,CAAA;AAC9C,EAAM,MAAA,OAAA,GAAU,SAAS,OAAW,IAAA,IAAA,CAAA;AAEpC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAU,GAAI,CAAA,OAAA,CAAA;AAEpB,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAI,OAAS,EAAA;AACX,MAAQ,OAAA,CAAA,OAAA,EAAS,CAAC,KAAU,KAAA;AAC1B,QAAA,UAAA,CAAW,MAAM,cAAc,CAAA,CAAA;AAAA,OAChC,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAAA,KACnB;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAAA,KACnB,CAAA;AAAA,GACF,EAAG,CAAC,OAAO,CAAC,CAAA,CAAA;AAEZ,EAAO,OAAA,SAAA,CAAA;AACT,CAAA;AAEgB,SAAA,kBAAA,CACd,GACA,EAAA,QAAA,EACA,OACA,EAAA;AACA,EAAM,MAAA,OAAA,GAAU,SAAS,OAAW,IAAA,IAAA,CAAA;AACpC,EAAM,MAAA,cAAA,GAAiBC,oBAAU,QAAQ,CAAA,CAAA;AAEzC,EAAAD,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAU,GAAI,CAAA,OAAA,CAAA;AAEpB,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAI,OAAS,EAAA;AACX,MAAQ,OAAA,CAAA,OAAA,EAAS,CAAC,KAAU,KAAA;AAC1B,QAAA,IAAI,MAAM,cAAgB,EAAA;AACxB,UAAA,cAAA,CAAe,OAAQ,EAAA,CAAA;AAAA,SACzB;AAAA,OACD,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAAA,KACnB;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAAA,KACnB,CAAA;AAAA,GACF,EAAG,CAAC,OAAO,CAAC,CAAA,CAAA;AACd;;;;;"}
@@ -1,4 +1,4 @@
1
- import { useEffect } from 'react';
1
+ import { useState, useEffect } from 'react';
2
2
  import { useLatest } from './use-latest.mjs';
3
3
 
4
4
  let intersectionObserver;
@@ -19,6 +19,27 @@ function unobserve(element) {
19
19
  intersectionCallbacks.delete(element);
20
20
  intersectionObserver?.unobserve(element);
21
21
  }
22
+ function useVisible(ref, options) {
23
+ const [isVisible, setVisible] = useState(false);
24
+ const enabled = options?.enabled ?? true;
25
+ useEffect(() => {
26
+ const element = ref.current;
27
+ if (!element) {
28
+ return;
29
+ }
30
+ if (enabled) {
31
+ observe(element, (entry) => {
32
+ setVisible(entry.isIntersecting);
33
+ });
34
+ } else {
35
+ unobserve(element);
36
+ }
37
+ return () => {
38
+ unobserve(element);
39
+ };
40
+ }, [enabled]);
41
+ return isVisible;
42
+ }
22
43
  function useVisibleCallback(ref, callback, options) {
23
44
  const enabled = options?.enabled ?? true;
24
45
  const latestCallback = useLatest(callback);
@@ -42,5 +63,5 @@ function useVisibleCallback(ref, callback, options) {
42
63
  }, [enabled]);
43
64
  }
44
65
 
45
- export { useVisibleCallback };
66
+ export { useVisible, useVisibleCallback };
46
67
  //# sourceMappingURL=use-visible.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-visible.mjs","sources":["../../src/utils/use-visible.ts"],"sourcesContent":["import { type RefObject, useEffect, useState } from \"react\";\n\nimport { useLatest } from \"./use-latest\";\n\ntype Options = { enabled?: boolean };\n\ntype IntersectionObserverSingleCallback = (\n entry: IntersectionObserverEntry\n) => void;\n\nlet intersectionObserver: IntersectionObserver | undefined;\nconst intersectionCallbacks = new WeakMap<\n Element,\n IntersectionObserverSingleCallback\n>();\n\nfunction observe(\n element: Element,\n callback: IntersectionObserverSingleCallback\n) {\n if (!intersectionObserver) {\n intersectionObserver = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n const callback = intersectionCallbacks.get(entry.target);\n\n callback?.(entry);\n }\n });\n }\n\n intersectionCallbacks.set(element, callback);\n intersectionObserver.observe(element);\n}\n\nfunction unobserve(element: Element) {\n intersectionCallbacks.delete(element);\n intersectionObserver?.unobserve(element);\n}\n\n/**\n * Observe whether an element is currently visible or not.\n */\nexport function useVisible(ref: RefObject<Element>, options?: Options) {\n const [isVisible, setVisible] = useState(false);\n const enabled = options?.enabled ?? true;\n\n useEffect(() => {\n const element = ref.current;\n\n if (!element) {\n return;\n }\n\n if (enabled) {\n observe(element, (entry) => {\n setVisible(entry.isIntersecting);\n });\n } else {\n unobserve(element);\n }\n\n return () => {\n unobserve(element);\n };\n }, [enabled]); // eslint-disable-line react-hooks/exhaustive-deps\n\n return isVisible;\n}\n\nexport function useVisibleCallback<T extends (...args: any[]) => void>(\n ref: RefObject<Element>,\n callback: T,\n options?: Options\n) {\n const enabled = options?.enabled ?? true;\n const latestCallback = useLatest(callback);\n\n useEffect(() => {\n const element = ref.current;\n\n if (!element) {\n return;\n }\n\n if (enabled) {\n observe(element, (entry) => {\n if (entry.isIntersecting) {\n latestCallback.current();\n }\n });\n } else {\n unobserve(element);\n }\n\n return () => {\n unobserve(element);\n };\n }, [enabled]); // eslint-disable-line react-hooks/exhaustive-deps\n}\n"],"names":["callback"],"mappings":";;;AAUA,IAAI,oBAAA,CAAA;AACJ,MAAM,qBAAA,uBAA4B,OAGhC,EAAA,CAAA;AAEF,SAAS,OAAA,CACP,SACA,QACA,EAAA;AACA,EAAA,IAAI,CAAC,oBAAsB,EAAA;AACzB,IAAuB,oBAAA,GAAA,IAAI,oBAAqB,CAAA,CAAC,OAAY,KAAA;AAC3D,MAAA,KAAA,MAAW,SAAS,OAAS,EAAA;AAC3B,QAAA,MAAMA,SAAW,GAAA,qBAAA,CAAsB,GAAI,CAAA,KAAA,CAAM,MAAM,CAAA,CAAA;AAEvD,QAAAA,YAAW,KAAK,CAAA,CAAA;AAAA,OAClB;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAEA,EAAsB,qBAAA,CAAA,GAAA,CAAI,SAAS,QAAQ,CAAA,CAAA;AAC3C,EAAA,oBAAA,CAAqB,QAAQ,OAAO,CAAA,CAAA;AACtC,CAAA;AAEA,SAAS,UAAU,OAAkB,EAAA;AACnC,EAAA,qBAAA,CAAsB,OAAO,OAAO,CAAA,CAAA;AACpC,EAAA,oBAAA,EAAsB,UAAU,OAAO,CAAA,CAAA;AACzC,CAAA;AAgCgB,SAAA,kBAAA,CACd,GACA,EAAA,QAAA,EACA,OACA,EAAA;AACA,EAAM,MAAA,OAAA,GAAU,SAAS,OAAW,IAAA,IAAA,CAAA;AACpC,EAAM,MAAA,cAAA,GAAiB,UAAU,QAAQ,CAAA,CAAA;AAEzC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAU,GAAI,CAAA,OAAA,CAAA;AAEpB,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAI,OAAS,EAAA;AACX,MAAQ,OAAA,CAAA,OAAA,EAAS,CAAC,KAAU,KAAA;AAC1B,QAAA,IAAI,MAAM,cAAgB,EAAA;AACxB,UAAA,cAAA,CAAe,OAAQ,EAAA,CAAA;AAAA,SACzB;AAAA,OACD,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAAA,KACnB;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAAA,KACnB,CAAA;AAAA,GACF,EAAG,CAAC,OAAO,CAAC,CAAA,CAAA;AACd;;;;"}
1
+ {"version":3,"file":"use-visible.mjs","sources":["../../src/utils/use-visible.ts"],"sourcesContent":["import { type RefObject, useEffect, useState } from \"react\";\n\nimport { useLatest } from \"./use-latest\";\n\ntype Options = { enabled?: boolean };\n\ntype IntersectionObserverSingleCallback = (\n entry: IntersectionObserverEntry\n) => void;\n\nlet intersectionObserver: IntersectionObserver | undefined;\nconst intersectionCallbacks = new WeakMap<\n Element,\n IntersectionObserverSingleCallback\n>();\n\nfunction observe(\n element: Element,\n callback: IntersectionObserverSingleCallback\n) {\n if (!intersectionObserver) {\n intersectionObserver = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n const callback = intersectionCallbacks.get(entry.target);\n\n callback?.(entry);\n }\n });\n }\n\n intersectionCallbacks.set(element, callback);\n intersectionObserver.observe(element);\n}\n\nfunction unobserve(element: Element) {\n intersectionCallbacks.delete(element);\n intersectionObserver?.unobserve(element);\n}\n\n/**\n * Observe whether an element is currently visible or not.\n */\nexport function useVisible(ref: RefObject<Element>, options?: Options) {\n const [isVisible, setVisible] = useState(false);\n const enabled = options?.enabled ?? true;\n\n useEffect(() => {\n const element = ref.current;\n\n if (!element) {\n return;\n }\n\n if (enabled) {\n observe(element, (entry) => {\n setVisible(entry.isIntersecting);\n });\n } else {\n unobserve(element);\n }\n\n return () => {\n unobserve(element);\n };\n }, [enabled]); // eslint-disable-line react-hooks/exhaustive-deps\n\n return isVisible;\n}\n\nexport function useVisibleCallback<T extends (...args: any[]) => void>(\n ref: RefObject<Element>,\n callback: T,\n options?: Options\n) {\n const enabled = options?.enabled ?? true;\n const latestCallback = useLatest(callback);\n\n useEffect(() => {\n const element = ref.current;\n\n if (!element) {\n return;\n }\n\n if (enabled) {\n observe(element, (entry) => {\n if (entry.isIntersecting) {\n latestCallback.current();\n }\n });\n } else {\n unobserve(element);\n }\n\n return () => {\n unobserve(element);\n };\n }, [enabled]); // eslint-disable-line react-hooks/exhaustive-deps\n}\n"],"names":["callback"],"mappings":";;;AAUA,IAAI,oBAAA,CAAA;AACJ,MAAM,qBAAA,uBAA4B,OAGhC,EAAA,CAAA;AAEF,SAAS,OAAA,CACP,SACA,QACA,EAAA;AACA,EAAA,IAAI,CAAC,oBAAsB,EAAA;AACzB,IAAuB,oBAAA,GAAA,IAAI,oBAAqB,CAAA,CAAC,OAAY,KAAA;AAC3D,MAAA,KAAA,MAAW,SAAS,OAAS,EAAA;AAC3B,QAAA,MAAMA,SAAW,GAAA,qBAAA,CAAsB,GAAI,CAAA,KAAA,CAAM,MAAM,CAAA,CAAA;AAEvD,QAAAA,YAAW,KAAK,CAAA,CAAA;AAAA,OAClB;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAEA,EAAsB,qBAAA,CAAA,GAAA,CAAI,SAAS,QAAQ,CAAA,CAAA;AAC3C,EAAA,oBAAA,CAAqB,QAAQ,OAAO,CAAA,CAAA;AACtC,CAAA;AAEA,SAAS,UAAU,OAAkB,EAAA;AACnC,EAAA,qBAAA,CAAsB,OAAO,OAAO,CAAA,CAAA;AACpC,EAAA,oBAAA,EAAsB,UAAU,OAAO,CAAA,CAAA;AACzC,CAAA;AAKgB,SAAA,UAAA,CAAW,KAAyB,OAAmB,EAAA;AACrE,EAAA,MAAM,CAAC,SAAA,EAAW,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAC9C,EAAM,MAAA,OAAA,GAAU,SAAS,OAAW,IAAA,IAAA,CAAA;AAEpC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAU,GAAI,CAAA,OAAA,CAAA;AAEpB,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAI,OAAS,EAAA;AACX,MAAQ,OAAA,CAAA,OAAA,EAAS,CAAC,KAAU,KAAA;AAC1B,QAAA,UAAA,CAAW,MAAM,cAAc,CAAA,CAAA;AAAA,OAChC,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAAA,KACnB;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAAA,KACnB,CAAA;AAAA,GACF,EAAG,CAAC,OAAO,CAAC,CAAA,CAAA;AAEZ,EAAO,OAAA,SAAA,CAAA;AACT,CAAA;AAEgB,SAAA,kBAAA,CACd,GACA,EAAA,QAAA,EACA,OACA,EAAA;AACA,EAAM,MAAA,OAAA,GAAU,SAAS,OAAW,IAAA,IAAA,CAAA;AACpC,EAAM,MAAA,cAAA,GAAiB,UAAU,QAAQ,CAAA,CAAA;AAEzC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAU,GAAI,CAAA,OAAA,CAAA;AAEpB,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAI,OAAS,EAAA;AACX,MAAQ,OAAA,CAAA,OAAA,EAAS,CAAC,KAAU,KAAA;AAC1B,QAAA,IAAI,MAAM,cAAgB,EAAA;AACxB,UAAA,cAAA,CAAe,OAAQ,EAAA,CAAA;AAAA,SACzB;AAAA,OACD,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAAA,KACnB;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAAA,KACnB,CAAA;AAAA,GACF,EAAG,CAAC,OAAO,CAAC,CAAA,CAAA;AACd;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index_js = require('use-sync-external-store/shim/index.js');
3
+ var react = require('react');
4
4
 
5
5
  function subscribe(callback) {
6
6
  window.addEventListener("blur", callback);
@@ -17,7 +17,7 @@ function getServerSnapshot() {
17
17
  return true;
18
18
  }
19
19
  function useWindowFocus() {
20
- return index_js.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
20
+ return react.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
21
21
  }
22
22
 
23
23
  exports.useWindowFocus = useWindowFocus;
@@ -1 +1 @@
1
- {"version":3,"file":"use-window-focus.js","sources":["../../src/utils/use-window-focus.ts"],"sourcesContent":["import { useSyncExternalStore } from \"use-sync-external-store/shim/index.js\";\n\nfunction subscribe(callback: () => void) {\n window.addEventListener(\"blur\", callback);\n window.addEventListener(\"focus\", callback);\n\n return () => {\n window.removeEventListener(\"blur\", callback);\n window.removeEventListener(\"focus\", callback);\n };\n}\n\nfunction getSnapshot() {\n return document.hasFocus();\n}\n\nfunction getServerSnapshot() {\n return true;\n}\n\nexport function useWindowFocus() {\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n"],"names":["useSyncExternalStore"],"mappings":";;;;AAEA,SAAS,UAAU,QAAsB,EAAA;AACvC,EAAO,MAAA,CAAA,gBAAA,CAAiB,QAAQ,QAAQ,CAAA,CAAA;AACxC,EAAO,MAAA,CAAA,gBAAA,CAAiB,SAAS,QAAQ,CAAA,CAAA;AAEzC,EAAA,OAAO,MAAM;AACX,IAAO,MAAA,CAAA,mBAAA,CAAoB,QAAQ,QAAQ,CAAA,CAAA;AAC3C,IAAO,MAAA,CAAA,mBAAA,CAAoB,SAAS,QAAQ,CAAA,CAAA;AAAA,GAC9C,CAAA;AACF,CAAA;AAEA,SAAS,WAAc,GAAA;AACrB,EAAA,OAAO,SAAS,QAAS,EAAA,CAAA;AAC3B,CAAA;AAEA,SAAS,iBAAoB,GAAA;AAC3B,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEO,SAAS,cAAiB,GAAA;AAC/B,EAAO,OAAAA,6BAAA,CAAqB,SAAW,EAAA,WAAA,EAAa,iBAAiB,CAAA,CAAA;AACvE;;;;"}
1
+ {"version":3,"file":"use-window-focus.js","sources":["../../src/utils/use-window-focus.ts"],"sourcesContent":["import { useSyncExternalStore } from \"react\";\n\nfunction subscribe(callback: () => void) {\n window.addEventListener(\"blur\", callback);\n window.addEventListener(\"focus\", callback);\n\n return () => {\n window.removeEventListener(\"blur\", callback);\n window.removeEventListener(\"focus\", callback);\n };\n}\n\nfunction getSnapshot() {\n return document.hasFocus();\n}\n\nfunction getServerSnapshot() {\n return true;\n}\n\nexport function useWindowFocus() {\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n"],"names":["useSyncExternalStore"],"mappings":";;;;AAEA,SAAS,UAAU,QAAsB,EAAA;AACvC,EAAO,MAAA,CAAA,gBAAA,CAAiB,QAAQ,QAAQ,CAAA,CAAA;AACxC,EAAO,MAAA,CAAA,gBAAA,CAAiB,SAAS,QAAQ,CAAA,CAAA;AAEzC,EAAA,OAAO,MAAM;AACX,IAAO,MAAA,CAAA,mBAAA,CAAoB,QAAQ,QAAQ,CAAA,CAAA;AAC3C,IAAO,MAAA,CAAA,mBAAA,CAAoB,SAAS,QAAQ,CAAA,CAAA;AAAA,GAC9C,CAAA;AACF,CAAA;AAEA,SAAS,WAAc,GAAA;AACrB,EAAA,OAAO,SAAS,QAAS,EAAA,CAAA;AAC3B,CAAA;AAEA,SAAS,iBAAoB,GAAA;AAC3B,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEO,SAAS,cAAiB,GAAA;AAC/B,EAAO,OAAAA,0BAAA,CAAqB,SAAW,EAAA,WAAA,EAAa,iBAAiB,CAAA,CAAA;AACvE;;;;"}
@@ -1,4 +1,4 @@
1
- import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';
1
+ import { useSyncExternalStore } from 'react';
2
2
 
3
3
  function subscribe(callback) {
4
4
  window.addEventListener("blur", callback);
@@ -1 +1 @@
1
- {"version":3,"file":"use-window-focus.mjs","sources":["../../src/utils/use-window-focus.ts"],"sourcesContent":["import { useSyncExternalStore } from \"use-sync-external-store/shim/index.js\";\n\nfunction subscribe(callback: () => void) {\n window.addEventListener(\"blur\", callback);\n window.addEventListener(\"focus\", callback);\n\n return () => {\n window.removeEventListener(\"blur\", callback);\n window.removeEventListener(\"focus\", callback);\n };\n}\n\nfunction getSnapshot() {\n return document.hasFocus();\n}\n\nfunction getServerSnapshot() {\n return true;\n}\n\nexport function useWindowFocus() {\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n"],"names":[],"mappings":";;AAEA,SAAS,UAAU,QAAsB,EAAA;AACvC,EAAO,MAAA,CAAA,gBAAA,CAAiB,QAAQ,QAAQ,CAAA,CAAA;AACxC,EAAO,MAAA,CAAA,gBAAA,CAAiB,SAAS,QAAQ,CAAA,CAAA;AAEzC,EAAA,OAAO,MAAM;AACX,IAAO,MAAA,CAAA,mBAAA,CAAoB,QAAQ,QAAQ,CAAA,CAAA;AAC3C,IAAO,MAAA,CAAA,mBAAA,CAAoB,SAAS,QAAQ,CAAA,CAAA;AAAA,GAC9C,CAAA;AACF,CAAA;AAEA,SAAS,WAAc,GAAA;AACrB,EAAA,OAAO,SAAS,QAAS,EAAA,CAAA;AAC3B,CAAA;AAEA,SAAS,iBAAoB,GAAA;AAC3B,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEO,SAAS,cAAiB,GAAA;AAC/B,EAAO,OAAA,oBAAA,CAAqB,SAAW,EAAA,WAAA,EAAa,iBAAiB,CAAA,CAAA;AACvE;;;;"}
1
+ {"version":3,"file":"use-window-focus.mjs","sources":["../../src/utils/use-window-focus.ts"],"sourcesContent":["import { useSyncExternalStore } from \"react\";\n\nfunction subscribe(callback: () => void) {\n window.addEventListener(\"blur\", callback);\n window.addEventListener(\"focus\", callback);\n\n return () => {\n window.removeEventListener(\"blur\", callback);\n window.removeEventListener(\"focus\", callback);\n };\n}\n\nfunction getSnapshot() {\n return document.hasFocus();\n}\n\nfunction getServerSnapshot() {\n return true;\n}\n\nexport function useWindowFocus() {\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n"],"names":[],"mappings":";;AAEA,SAAS,UAAU,QAAsB,EAAA;AACvC,EAAO,MAAA,CAAA,gBAAA,CAAiB,QAAQ,QAAQ,CAAA,CAAA;AACxC,EAAO,MAAA,CAAA,gBAAA,CAAiB,SAAS,QAAQ,CAAA,CAAA;AAEzC,EAAA,OAAO,MAAM;AACX,IAAO,MAAA,CAAA,mBAAA,CAAoB,QAAQ,QAAQ,CAAA,CAAA;AAC3C,IAAO,MAAA,CAAA,mBAAA,CAAoB,SAAS,QAAQ,CAAA,CAAA;AAAA,GAC9C,CAAA;AACF,CAAA;AAEA,SAAS,WAAc,GAAA;AACrB,EAAA,OAAO,SAAS,QAAS,EAAA,CAAA;AAC3B,CAAA;AAEA,SAAS,iBAAoB,GAAA;AAC3B,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEO,SAAS,cAAiB,GAAA;AAC/B,EAAO,OAAA,oBAAA,CAAqB,SAAW,EAAA,WAAA,EAAa,iBAAiB,CAAA,CAAA;AACvE;;;;"}