@legendapp/state 3.0.0-alpha.1 → 3.0.0-alpha.3

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 (327) hide show
  1. package/.DS_Store +0 -0
  2. package/CHANGELOG.md +1 -831
  3. package/LICENSE +1 -21
  4. package/README.md +1 -141
  5. package/as/arrayAsRecord.d.mts +5 -0
  6. package/as/arrayAsRecord.d.ts +5 -0
  7. package/as/arrayAsRecord.js +28 -0
  8. package/as/arrayAsRecord.mjs +26 -0
  9. package/as/arrayAsSet.d.mts +5 -0
  10. package/as/arrayAsSet.d.ts +5 -0
  11. package/as/arrayAsSet.js +13 -0
  12. package/as/arrayAsSet.mjs +11 -0
  13. package/as/arrayAsString.d.mts +5 -0
  14. package/as/arrayAsString.d.ts +5 -0
  15. package/as/arrayAsString.js +13 -0
  16. package/as/arrayAsString.mjs +11 -0
  17. package/as/numberAsString.d.mts +5 -0
  18. package/as/numberAsString.d.ts +5 -0
  19. package/as/numberAsString.js +13 -0
  20. package/as/numberAsString.mjs +11 -0
  21. package/as/recordAsArray.d.mts +5 -0
  22. package/as/recordAsArray.d.ts +5 -0
  23. package/as/recordAsArray.js +25 -0
  24. package/as/recordAsArray.mjs +23 -0
  25. package/as/recordAsString.d.mts +5 -0
  26. package/as/recordAsString.d.ts +5 -0
  27. package/as/recordAsString.js +13 -0
  28. package/as/recordAsString.mjs +11 -0
  29. package/as/setAsArray.d.mts +5 -0
  30. package/as/setAsArray.d.ts +5 -0
  31. package/as/setAsArray.js +13 -0
  32. package/as/setAsArray.mjs +11 -0
  33. package/as/setAsString.d.mts +5 -0
  34. package/as/setAsString.d.ts +5 -0
  35. package/as/setAsString.js +13 -0
  36. package/as/setAsString.mjs +11 -0
  37. package/as/stringAsArray.d.mts +5 -0
  38. package/as/stringAsArray.d.ts +5 -0
  39. package/as/stringAsArray.js +13 -0
  40. package/as/stringAsArray.mjs +11 -0
  41. package/as/stringAsNumber.d.mts +5 -0
  42. package/as/stringAsNumber.d.ts +5 -0
  43. package/as/stringAsNumber.js +16 -0
  44. package/as/stringAsNumber.mjs +14 -0
  45. package/as/stringAsRecord.d.mts +5 -0
  46. package/as/stringAsRecord.d.ts +5 -0
  47. package/as/stringAsRecord.js +15 -0
  48. package/as/stringAsRecord.mjs +13 -0
  49. package/as/stringAsSet.d.mts +5 -0
  50. package/as/stringAsSet.d.ts +5 -0
  51. package/as/stringAsSet.js +13 -0
  52. package/as/stringAsSet.mjs +11 -0
  53. package/babel.d.mts +21 -0
  54. package/babel.d.ts +21 -2
  55. package/babel.js +57 -53
  56. package/babel.mjs +65 -0
  57. package/config/enable$GetSet.js +13 -14
  58. package/config/enable$GetSet.mjs +13 -14
  59. package/config/enableReactComponents.d.mts +9 -0
  60. package/config/enableReactComponents.d.ts +4 -2
  61. package/config/enableReactComponents.js +13 -10
  62. package/config/enableReactComponents.mjs +13 -10
  63. package/config/enableReactNativeComponents.d.mts +22 -0
  64. package/config/enableReactNativeComponents.d.ts +6 -4
  65. package/config/enableReactNativeComponents.js +43 -47
  66. package/config/enableReactNativeComponents.mjs +43 -47
  67. package/config/enableReactTracking.d.mts +7 -0
  68. package/config/enableReactTracking.d.ts +3 -2
  69. package/config/enableReactTracking.js +33 -38
  70. package/config/enableReactTracking.mjs +33 -38
  71. package/config/enableReactUse.d.mts +10 -0
  72. package/config/enableReactUse.d.ts +4 -1
  73. package/config/enableReactUse.js +15 -14
  74. package/config/enableReactUse.mjs +15 -14
  75. package/config/{enable$GetSet.d.ts → enable_GetSet.d.mts} +4 -2
  76. package/config/enable_GetSet.d.ts +10 -0
  77. package/config/enable_PeekAssign.d.mts +10 -0
  78. package/config/enable_PeekAssign.d.ts +4 -2
  79. package/config/enable_PeekAssign.js +13 -14
  80. package/config/enable_PeekAssign.mjs +13 -14
  81. package/helpers/pageHash.d.mts +9 -0
  82. package/helpers/pageHash.d.ts +2 -0
  83. package/helpers/pageHash.js +25 -30
  84. package/helpers/pageHash.mjs +25 -30
  85. package/helpers/pageHashParams.d.mts +9 -0
  86. package/helpers/pageHashParams.d.ts +2 -0
  87. package/helpers/pageHashParams.js +34 -37
  88. package/helpers/pageHashParams.mjs +34 -37
  89. package/helpers/time.d.mts +6 -0
  90. package/helpers/time.d.ts +6 -3
  91. package/helpers/time.js +17 -17
  92. package/helpers/time.mjs +17 -17
  93. package/helpers/trackHistory.d.mts +6 -0
  94. package/helpers/trackHistory.d.ts +4 -2
  95. package/helpers/trackHistory.js +13 -16
  96. package/helpers/trackHistory.mjs +13 -16
  97. package/helpers/undoRedo.d.mts +37 -0
  98. package/helpers/undoRedo.d.ts +5 -3
  99. package/helpers/undoRedo.js +59 -94
  100. package/helpers/undoRedo.mjs +59 -94
  101. package/index.d.mts +404 -0
  102. package/index.d.ts +371 -28
  103. package/index.js +2015 -2166
  104. package/index.mjs +2015 -2166
  105. package/package.json +254 -195
  106. package/persist-plugins/async-storage.d.mts +18 -0
  107. package/persist-plugins/async-storage.d.ts +6 -3
  108. package/persist-plugins/async-storage.js +79 -86
  109. package/persist-plugins/async-storage.mjs +79 -86
  110. package/persist-plugins/indexeddb.d.mts +29 -0
  111. package/persist-plugins/indexeddb.d.ts +6 -3
  112. package/persist-plugins/indexeddb.js +331 -352
  113. package/persist-plugins/indexeddb.mjs +331 -352
  114. package/persist-plugins/local-storage.d.mts +23 -0
  115. package/persist-plugins/local-storage.d.ts +8 -5
  116. package/persist-plugins/local-storage.js +74 -76
  117. package/persist-plugins/local-storage.mjs +74 -76
  118. package/persist-plugins/mmkv.d.mts +18 -0
  119. package/persist-plugins/mmkv.d.ts +6 -3
  120. package/persist-plugins/mmkv.js +82 -86
  121. package/persist-plugins/mmkv.mjs +82 -86
  122. package/react-hooks/createObservableHook.d.mts +5 -0
  123. package/react-hooks/createObservableHook.d.ts +4 -1
  124. package/react-hooks/createObservableHook.js +29 -30
  125. package/react-hooks/createObservableHook.mjs +25 -30
  126. package/react-hooks/useHover.d.mts +5 -0
  127. package/react-hooks/useHover.d.ts +5 -3
  128. package/react-hooks/useHover.js +29 -29
  129. package/react-hooks/useHover.mjs +29 -29
  130. package/react-hooks/useMeasure.d.mts +9 -0
  131. package/react-hooks/useMeasure.d.ts +5 -2
  132. package/react-hooks/useMeasure.js +30 -32
  133. package/react-hooks/useMeasure.mjs +30 -32
  134. package/react-hooks/useObservableNextRouter.d.mts +35 -0
  135. package/react-hooks/useObservableNextRouter.d.ts +9 -7
  136. package/react-hooks/useObservableNextRouter.js +64 -77
  137. package/react-hooks/useObservableNextRouter.mjs +60 -77
  138. package/react.d.mts +157 -0
  139. package/react.d.ts +157 -21
  140. package/react.js +458 -749
  141. package/react.mjs +457 -752
  142. package/sync-plugins/crud.d.mts +54 -0
  143. package/sync-plugins/crud.d.ts +12 -10
  144. package/sync-plugins/crud.js +253 -270
  145. package/sync-plugins/crud.mjs +253 -270
  146. package/sync-plugins/fetch.d.mts +21 -0
  147. package/sync-plugins/fetch.d.ts +7 -4
  148. package/sync-plugins/fetch.js +50 -37
  149. package/sync-plugins/fetch.mjs +50 -37
  150. package/sync-plugins/keel.d.mts +108 -0
  151. package/sync-plugins/keel.d.ts +17 -15
  152. package/sync-plugins/keel.js +229 -462
  153. package/sync-plugins/keel.mjs +227 -464
  154. package/sync-plugins/supabase.d.mts +39 -0
  155. package/sync-plugins/supabase.d.ts +16 -14
  156. package/sync-plugins/supabase.js +128 -128
  157. package/sync-plugins/supabase.mjs +128 -128
  158. package/sync-plugins/tanstack-query.d.mts +14 -0
  159. package/sync-plugins/tanstack-query.d.ts +7 -4
  160. package/sync-plugins/tanstack-query.js +51 -57
  161. package/sync-plugins/tanstack-query.mjs +51 -57
  162. package/sync-plugins/tanstack-react-query.d.mts +8 -0
  163. package/sync-plugins/tanstack-react-query.d.ts +6 -1
  164. package/sync-plugins/tanstack-react-query.js +2 -2
  165. package/sync-plugins/tanstack-react-query.mjs +2 -2
  166. package/sync.d.mts +351 -0
  167. package/sync.d.ts +349 -9
  168. package/sync.js +910 -964
  169. package/sync.mjs +920 -974
  170. package/trace.d.mts +9 -0
  171. package/trace.d.ts +9 -4
  172. package/trace.js +72 -62
  173. package/trace.mjs +72 -62
  174. package/types/babel.d.ts +1 -12
  175. package/babel.js.map +0 -1
  176. package/config/enable$GetSet.js.map +0 -1
  177. package/config/enable$GetSet.mjs.map +0 -1
  178. package/config/enableReactComponents.js.map +0 -1
  179. package/config/enableReactComponents.mjs.map +0 -1
  180. package/config/enableReactNativeComponents.js.map +0 -1
  181. package/config/enableReactNativeComponents.mjs.map +0 -1
  182. package/config/enableReactTracking.js.map +0 -1
  183. package/config/enableReactTracking.mjs.map +0 -1
  184. package/config/enableReactUse.js.map +0 -1
  185. package/config/enableReactUse.mjs.map +0 -1
  186. package/config/enable_PeekAssign.js.map +0 -1
  187. package/config/enable_PeekAssign.mjs.map +0 -1
  188. package/helpers/pageHash.js.map +0 -1
  189. package/helpers/pageHash.mjs.map +0 -1
  190. package/helpers/pageHashParams.js.map +0 -1
  191. package/helpers/pageHashParams.mjs.map +0 -1
  192. package/helpers/time.js.map +0 -1
  193. package/helpers/time.mjs.map +0 -1
  194. package/helpers/trackHistory.js.map +0 -1
  195. package/helpers/trackHistory.mjs.map +0 -1
  196. package/helpers/undoRedo.js.map +0 -1
  197. package/helpers/undoRedo.mjs.map +0 -1
  198. package/history.d.ts +0 -1
  199. package/history.js +0 -24
  200. package/history.js.map +0 -1
  201. package/history.mjs +0 -22
  202. package/history.mjs.map +0 -1
  203. package/index.js.map +0 -1
  204. package/index.mjs.map +0 -1
  205. package/persist-plugins/async-storage.js.map +0 -1
  206. package/persist-plugins/async-storage.mjs.map +0 -1
  207. package/persist-plugins/indexeddb.js.map +0 -1
  208. package/persist-plugins/indexeddb.mjs.map +0 -1
  209. package/persist-plugins/local-storage.js.map +0 -1
  210. package/persist-plugins/local-storage.mjs.map +0 -1
  211. package/persist-plugins/mmkv.js.map +0 -1
  212. package/persist-plugins/mmkv.mjs.map +0 -1
  213. package/react-hooks/createObservableHook.js.map +0 -1
  214. package/react-hooks/createObservableHook.mjs.map +0 -1
  215. package/react-hooks/useHover.js.map +0 -1
  216. package/react-hooks/useHover.mjs.map +0 -1
  217. package/react-hooks/useMeasure.js.map +0 -1
  218. package/react-hooks/useMeasure.mjs.map +0 -1
  219. package/react-hooks/useObservableNextRouter.js.map +0 -1
  220. package/react-hooks/useObservableNextRouter.mjs.map +0 -1
  221. package/react.js.map +0 -1
  222. package/react.mjs.map +0 -1
  223. package/src/ObservableObject.ts +0 -1350
  224. package/src/ObservablePrimitive.ts +0 -62
  225. package/src/babel/index.ts +0 -83
  226. package/src/batching.ts +0 -357
  227. package/src/computed.ts +0 -18
  228. package/src/config/enable$GetSet.ts +0 -30
  229. package/src/config/enableReactComponents.ts +0 -26
  230. package/src/config/enableReactNativeComponents.ts +0 -102
  231. package/src/config/enableReactTracking.ts +0 -62
  232. package/src/config/enableReactUse.ts +0 -32
  233. package/src/config/enable_PeekAssign.ts +0 -31
  234. package/src/config.ts +0 -47
  235. package/src/createObservable.ts +0 -47
  236. package/src/event.ts +0 -26
  237. package/src/globals.ts +0 -235
  238. package/src/helpers/pageHash.ts +0 -41
  239. package/src/helpers/pageHashParams.ts +0 -55
  240. package/src/helpers/time.ts +0 -30
  241. package/src/helpers/trackHistory.ts +0 -29
  242. package/src/helpers/undoRedo.ts +0 -111
  243. package/src/helpers.ts +0 -231
  244. package/src/is.ts +0 -63
  245. package/src/linked.ts +0 -17
  246. package/src/observable.ts +0 -32
  247. package/src/observableInterfaces.ts +0 -151
  248. package/src/observableTypes.ts +0 -232
  249. package/src/observe.ts +0 -89
  250. package/src/old-plugins/firebase.ts +0 -1053
  251. package/src/onChange.ts +0 -146
  252. package/src/persist/configureObservablePersistence.ts +0 -7
  253. package/src/persist/fieldTransformer.ts +0 -149
  254. package/src/persist/observablePersistRemoteFunctionsAdapter.ts +0 -39
  255. package/src/persist/persistObservable.ts +0 -1034
  256. package/src/persist-plugins/async-storage.ts +0 -99
  257. package/src/persist-plugins/indexeddb.ts +0 -439
  258. package/src/persist-plugins/local-storage.ts +0 -86
  259. package/src/persist-plugins/mmkv.ts +0 -91
  260. package/src/proxy.ts +0 -28
  261. package/src/react/Computed.tsx +0 -8
  262. package/src/react/For.tsx +0 -116
  263. package/src/react/Memo.tsx +0 -4
  264. package/src/react/Reactive.tsx +0 -53
  265. package/src/react/Show.tsx +0 -33
  266. package/src/react/Switch.tsx +0 -43
  267. package/src/react/react-globals.ts +0 -3
  268. package/src/react/reactInterfaces.ts +0 -32
  269. package/src/react/reactive-observer.tsx +0 -210
  270. package/src/react/useComputed.ts +0 -36
  271. package/src/react/useEffectOnce.ts +0 -41
  272. package/src/react/useIsMounted.ts +0 -16
  273. package/src/react/useMount.ts +0 -15
  274. package/src/react/useObservable.ts +0 -24
  275. package/src/react/useObservableReducer.ts +0 -52
  276. package/src/react/useObservableState.ts +0 -30
  277. package/src/react/useObserve.ts +0 -54
  278. package/src/react/useObserveEffect.ts +0 -40
  279. package/src/react/usePauseProvider.tsx +0 -16
  280. package/src/react/useSelector.ts +0 -167
  281. package/src/react/useUnmount.ts +0 -8
  282. package/src/react/useWhen.ts +0 -9
  283. package/src/react-hooks/createObservableHook.ts +0 -53
  284. package/src/react-hooks/useHover.ts +0 -40
  285. package/src/react-hooks/useMeasure.ts +0 -48
  286. package/src/react-hooks/useObservableNextRouter.ts +0 -137
  287. package/src/retry.ts +0 -71
  288. package/src/setupTracking.ts +0 -26
  289. package/src/sync/activateSyncedNode.ts +0 -128
  290. package/src/sync/configureObservableSync.ts +0 -7
  291. package/src/sync/persistTypes.ts +0 -216
  292. package/src/sync/syncHelpers.ts +0 -180
  293. package/src/sync/syncObservable.ts +0 -1056
  294. package/src/sync/syncObservableAdapter.ts +0 -31
  295. package/src/sync/syncTypes.ts +0 -189
  296. package/src/sync/synced.ts +0 -21
  297. package/src/sync-plugins/crud.ts +0 -412
  298. package/src/sync-plugins/fetch.ts +0 -80
  299. package/src/sync-plugins/keel.ts +0 -495
  300. package/src/sync-plugins/supabase.ts +0 -249
  301. package/src/sync-plugins/tanstack-query.ts +0 -113
  302. package/src/sync-plugins/tanstack-react-query.ts +0 -12
  303. package/src/trace/traceHelpers.ts +0 -11
  304. package/src/trace/useTraceListeners.ts +0 -34
  305. package/src/trace/useTraceUpdates.ts +0 -24
  306. package/src/trace/useVerifyNotTracking.ts +0 -33
  307. package/src/trace/useVerifyOneRender.ts +0 -10
  308. package/src/trackSelector.ts +0 -52
  309. package/src/tracking.ts +0 -43
  310. package/src/types/babel.d.ts +0 -12
  311. package/src/when.ts +0 -75
  312. package/sync-plugins/crud.js.map +0 -1
  313. package/sync-plugins/crud.mjs.map +0 -1
  314. package/sync-plugins/fetch.js.map +0 -1
  315. package/sync-plugins/fetch.mjs.map +0 -1
  316. package/sync-plugins/keel.js.map +0 -1
  317. package/sync-plugins/keel.mjs.map +0 -1
  318. package/sync-plugins/supabase.js.map +0 -1
  319. package/sync-plugins/supabase.mjs.map +0 -1
  320. package/sync-plugins/tanstack-query.js.map +0 -1
  321. package/sync-plugins/tanstack-query.mjs.map +0 -1
  322. package/sync-plugins/tanstack-react-query.js.map +0 -1
  323. package/sync-plugins/tanstack-react-query.mjs.map +0 -1
  324. package/sync.js.map +0 -1
  325. package/sync.mjs.map +0 -1
  326. package/trace.js.map +0 -1
  327. package/trace.mjs.map +0 -1
package/react.mjs CHANGED
@@ -1,825 +1,530 @@
1
- import { observable, isPromise, isObservable, syncState, trackSelector, when, isPrimitive, computeSelector, isFunction, isArray, isMap, internal, isEmpty, isObservableValueReady, computed, observe, whenReady } from '@legendapp/state';
2
- import require$$0, { useState, createElement, createContext, useContext, useMemo, forwardRef, memo, useCallback, useRef, useEffect } from 'react';
1
+ import { isFunction, isEmpty, observable, isPromise, isObservable, syncState, computeSelector, isArray, isMap, isObservableValueReady, computed, observe, when, whenReady, internal, trackSelector, isPrimitive } from '@legendapp/state';
2
+ import React, { memo, forwardRef, createElement, useState, useContext, useMemo, useRef, useEffect, createContext, useCallback } from 'react';
3
+ import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';
3
4
 
4
- var shim = {exports: {}};
5
+ // src/react/Computed.tsx
5
6
 
6
- var useSyncExternalStoreShim_production_min = {};
7
-
8
- /**
9
- * @license React
10
- * use-sync-external-store-shim.production.min.js
11
- *
12
- * Copyright (c) Facebook, Inc. and its affiliates.
13
- *
14
- * This source code is licensed under the MIT license found in the
15
- * LICENSE file in the root directory of this source tree.
16
- */
17
-
18
- var hasRequiredUseSyncExternalStoreShim_production_min;
19
-
20
- function requireUseSyncExternalStoreShim_production_min () {
21
- if (hasRequiredUseSyncExternalStoreShim_production_min) return useSyncExternalStoreShim_production_min;
22
- hasRequiredUseSyncExternalStoreShim_production_min = 1;
23
- var e=require$$0;function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k="function"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c});},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c});})},[a]);p(d);return d}
24
- function r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return !k(a,d)}catch(f){return !0}}function t(a,b){return b()}var u="undefined"===typeof window||"undefined"===typeof window.document||"undefined"===typeof window.document.createElement?t:q;useSyncExternalStoreShim_production_min.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;
25
- return useSyncExternalStoreShim_production_min;
26
- }
27
-
28
- var useSyncExternalStoreShim_development = {};
29
-
30
- /**
31
- * @license React
32
- * use-sync-external-store-shim.development.js
33
- *
34
- * Copyright (c) Facebook, Inc. and its affiliates.
35
- *
36
- * This source code is licensed under the MIT license found in the
37
- * LICENSE file in the root directory of this source tree.
38
- */
39
-
40
- var hasRequiredUseSyncExternalStoreShim_development;
41
-
42
- function requireUseSyncExternalStoreShim_development () {
43
- if (hasRequiredUseSyncExternalStoreShim_development) return useSyncExternalStoreShim_development;
44
- hasRequiredUseSyncExternalStoreShim_development = 1;
45
-
46
- if (process.env.NODE_ENV !== "production") {
47
- (function() {
48
-
49
- /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
50
- if (
51
- typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&
52
- typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===
53
- 'function'
54
- ) {
55
- __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());
56
- }
57
- var React = require$$0;
58
-
59
- var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
60
-
61
- function error(format) {
62
- {
63
- {
64
- for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
65
- args[_key2 - 1] = arguments[_key2];
66
- }
67
-
68
- printWarning('error', format, args);
69
- }
70
- }
71
- }
72
-
73
- function printWarning(level, format, args) {
74
- // When changing this logic, you might want to also
75
- // update consoleWithStackDev.www.js as well.
76
- {
77
- var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
78
- var stack = ReactDebugCurrentFrame.getStackAddendum();
79
-
80
- if (stack !== '') {
81
- format += '%s';
82
- args = args.concat([stack]);
83
- } // eslint-disable-next-line react-internal/safe-string-coercion
84
-
85
-
86
- var argsWithFormat = args.map(function (item) {
87
- return String(item);
88
- }); // Careful: RN currently depends on this prefix
89
-
90
- argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
91
- // breaks IE9: https://github.com/facebook/react/issues/13610
92
- // eslint-disable-next-line react-internal/no-production-logging
93
-
94
- Function.prototype.apply.call(console[level], console, argsWithFormat);
95
- }
96
- }
97
-
98
- /**
99
- * inlined Object.is polyfill to avoid requiring consumers ship their own
100
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
101
- */
102
- function is(x, y) {
103
- return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare
104
- ;
105
- }
106
-
107
- var objectIs = typeof Object.is === 'function' ? Object.is : is;
108
-
109
- // dispatch for CommonJS interop named imports.
110
-
111
- var useState = React.useState,
112
- useEffect = React.useEffect,
113
- useLayoutEffect = React.useLayoutEffect,
114
- useDebugValue = React.useDebugValue;
115
- var didWarnOld18Alpha = false;
116
- var didWarnUncachedGetSnapshot = false; // Disclaimer: This shim breaks many of the rules of React, and only works
117
- // because of a very particular set of implementation details and assumptions
118
- // -- change any one of them and it will break. The most important assumption
119
- // is that updates are always synchronous, because concurrent rendering is
120
- // only available in versions of React that also have a built-in
121
- // useSyncExternalStore API. And we only use this shim when the built-in API
122
- // does not exist.
123
- //
124
- // Do not assume that the clever hacks used by this hook also work in general.
125
- // The point of this shim is to replace the need for hacks by other libraries.
126
-
127
- function useSyncExternalStore(subscribe, getSnapshot, // Note: The shim does not use getServerSnapshot, because pre-18 versions of
128
- // React do not expose a way to check if we're hydrating. So users of the shim
129
- // will need to track that themselves and return the correct value
130
- // from `getSnapshot`.
131
- getServerSnapshot) {
132
- {
133
- if (!didWarnOld18Alpha) {
134
- if (React.startTransition !== undefined) {
135
- didWarnOld18Alpha = true;
136
-
137
- error('You are using an outdated, pre-release alpha of React 18 that ' + 'does not support useSyncExternalStore. The ' + 'use-sync-external-store shim will not work correctly. Upgrade ' + 'to a newer pre-release.');
138
- }
139
- }
140
- } // Read the current snapshot from the store on every render. Again, this
141
- // breaks the rules of React, and only works here because of specific
142
- // implementation details, most importantly that updates are
143
- // always synchronous.
144
-
145
-
146
- var value = getSnapshot();
147
-
148
- {
149
- if (!didWarnUncachedGetSnapshot) {
150
- var cachedValue = getSnapshot();
151
-
152
- if (!objectIs(value, cachedValue)) {
153
- error('The result of getSnapshot should be cached to avoid an infinite loop');
154
-
155
- didWarnUncachedGetSnapshot = true;
156
- }
157
- }
158
- } // Because updates are synchronous, we don't queue them. Instead we force a
159
- // re-render whenever the subscribed state changes by updating an some
160
- // arbitrary useState hook. Then, during render, we call getSnapshot to read
161
- // the current value.
162
- //
163
- // Because we don't actually use the state returned by the useState hook, we
164
- // can save a bit of memory by storing other stuff in that slot.
165
- //
166
- // To implement the early bailout, we need to track some things on a mutable
167
- // object. Usually, we would put that in a useRef hook, but we can stash it in
168
- // our useState hook instead.
169
- //
170
- // To force a re-render, we call forceUpdate({inst}). That works because the
171
- // new object always fails an equality check.
172
-
173
-
174
- var _useState = useState({
175
- inst: {
176
- value: value,
177
- getSnapshot: getSnapshot
178
- }
179
- }),
180
- inst = _useState[0].inst,
181
- forceUpdate = _useState[1]; // Track the latest getSnapshot function with a ref. This needs to be updated
182
- // in the layout phase so we can access it during the tearing check that
183
- // happens on subscribe.
184
-
185
-
186
- useLayoutEffect(function () {
187
- inst.value = value;
188
- inst.getSnapshot = getSnapshot; // Whenever getSnapshot or subscribe changes, we need to check in the
189
- // commit phase if there was an interleaved mutation. In concurrent mode
190
- // this can happen all the time, but even in synchronous mode, an earlier
191
- // effect may have mutated the store.
192
-
193
- if (checkIfSnapshotChanged(inst)) {
194
- // Force a re-render.
195
- forceUpdate({
196
- inst: inst
197
- });
198
- }
199
- }, [subscribe, value, getSnapshot]);
200
- useEffect(function () {
201
- // Check for changes right before subscribing. Subsequent changes will be
202
- // detected in the subscription handler.
203
- if (checkIfSnapshotChanged(inst)) {
204
- // Force a re-render.
205
- forceUpdate({
206
- inst: inst
207
- });
208
- }
209
-
210
- var handleStoreChange = function () {
211
- // TODO: Because there is no cross-renderer API for batching updates, it's
212
- // up to the consumer of this library to wrap their subscription event
213
- // with unstable_batchedUpdates. Should we try to detect when this isn't
214
- // the case and print a warning in development?
215
- // The store changed. Check if the snapshot changed since the last time we
216
- // read from the store.
217
- if (checkIfSnapshotChanged(inst)) {
218
- // Force a re-render.
219
- forceUpdate({
220
- inst: inst
221
- });
222
- }
223
- }; // Subscribe to the store and return a clean-up function.
224
-
225
-
226
- return subscribe(handleStoreChange);
227
- }, [subscribe]);
228
- useDebugValue(value);
229
- return value;
230
- }
231
-
232
- function checkIfSnapshotChanged(inst) {
233
- var latestGetSnapshot = inst.getSnapshot;
234
- var prevValue = inst.value;
235
-
236
- try {
237
- var nextValue = latestGetSnapshot();
238
- return !objectIs(prevValue, nextValue);
239
- } catch (error) {
240
- return true;
241
- }
242
- }
243
-
244
- function useSyncExternalStore$1(subscribe, getSnapshot, getServerSnapshot) {
245
- // Note: The shim does not use getServerSnapshot, because pre-18 versions of
246
- // React do not expose a way to check if we're hydrating. So users of the shim
247
- // will need to track that themselves and return the correct value
248
- // from `getSnapshot`.
249
- return getSnapshot();
250
- }
251
-
252
- var canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');
253
-
254
- var isServerEnvironment = !canUseDOM;
255
-
256
- var shim = isServerEnvironment ? useSyncExternalStore$1 : useSyncExternalStore;
257
- var useSyncExternalStore$2 = React.useSyncExternalStore !== undefined ? React.useSyncExternalStore : shim;
258
-
259
- useSyncExternalStoreShim_development.useSyncExternalStore = useSyncExternalStore$2;
260
- /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
261
- if (
262
- typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&
263
- typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===
264
- 'function'
265
- ) {
266
- __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());
267
- }
268
-
269
- })();
270
- }
271
- return useSyncExternalStoreShim_development;
272
- }
273
-
274
- (function (module) {
275
-
276
- if (process.env.NODE_ENV === 'production') {
277
- module.exports = requireUseSyncExternalStoreShim_production_min();
278
- } else {
279
- module.exports = requireUseSyncExternalStoreShim_development();
280
- }
281
- } (shim));
282
-
283
- const reactGlobals = {
284
- inObserver: false,
7
+ // src/react/react-globals.ts
8
+ var reactGlobals = {
9
+ inObserver: false
285
10
  };
286
-
287
- let pauseContext = undefined;
288
- const getPauseContext = () => {
289
- return (pauseContext || (pauseContext = createContext(null)));
11
+ var pauseContext = void 0;
12
+ var getPauseContext = () => {
13
+ return pauseContext || (pauseContext = createContext(null));
290
14
  };
291
15
  function usePauseProvider() {
292
- const [value] = useState(() => observable(false));
293
- return {
294
- PauseProvider: ({ children }) => createElement(getPauseContext().Provider, { value }, children),
295
- isPaused$: value,
296
- };
16
+ const [value] = useState(() => observable(false));
17
+ return {
18
+ PauseProvider: ({ children }) => createElement(getPauseContext().Provider, { value }, children),
19
+ isPaused$: value
20
+ };
297
21
  }
298
22
 
23
+ // src/react/useSelector.ts
299
24
  function createSelectorFunctions(options, isPaused$) {
300
- let version = 0;
301
- let notify;
302
- let dispose;
303
- let resubscribe;
304
- let _selector;
305
- let prev;
306
- let pendingUpdate = undefined;
307
- const run = () => {
308
- // Dispose if already listening
309
- dispose === null || dispose === void 0 ? void 0 : dispose();
310
- const { value, dispose: _dispose, resubscribe: _resubscribe, } = trackSelector(_selector, _update, undefined, undefined, /*createResubscribe*/ true);
311
- dispose = _dispose;
312
- resubscribe = _resubscribe;
313
- return value;
314
- };
315
- const _update = ({ value }) => {
316
- if (isPaused$ === null || isPaused$ === void 0 ? void 0 : isPaused$.peek()) {
317
- const next = pendingUpdate;
318
- pendingUpdate = value;
319
- if (next === undefined) {
320
- when(() => !isPaused$.get(), () => {
321
- const latest = pendingUpdate;
322
- pendingUpdate = undefined;
323
- _update({ value: latest });
324
- });
325
- }
326
- }
327
- else {
328
- // If skipCheck then don't need to re-run selector
329
- let changed = options === null || options === void 0 ? void 0 : options.skipCheck;
330
- if (!changed) {
331
- const newValue = run();
332
- // If newValue is different than previous value then it's changed.
333
- // Also if the selector returns an observable directly then its value will be the same as
334
- // the value from the listener, and that should always re-render.
335
- if (newValue !== prev || (!isPrimitive(newValue) && newValue === value)) {
336
- changed = true;
337
- }
338
- }
339
- if (changed) {
340
- version++;
341
- notify === null || notify === void 0 ? void 0 : notify();
342
- }
25
+ let version = 0;
26
+ let notify;
27
+ let dispose;
28
+ let resubscribe;
29
+ let _selector;
30
+ let prev;
31
+ let pendingUpdate = void 0;
32
+ const run = () => {
33
+ dispose == null ? void 0 : dispose();
34
+ const {
35
+ value,
36
+ dispose: _dispose,
37
+ resubscribe: _resubscribe
38
+ } = trackSelector(
39
+ _selector,
40
+ _update,
41
+ void 0,
42
+ void 0,
43
+ /*createResubscribe*/
44
+ true
45
+ );
46
+ dispose = _dispose;
47
+ resubscribe = _resubscribe;
48
+ return value;
49
+ };
50
+ const _update = ({ value }) => {
51
+ if (isPaused$ == null ? void 0 : isPaused$.peek()) {
52
+ const next = pendingUpdate;
53
+ pendingUpdate = value;
54
+ if (next === void 0) {
55
+ when(
56
+ () => !isPaused$.get(),
57
+ () => {
58
+ const latest = pendingUpdate;
59
+ pendingUpdate = void 0;
60
+ _update({ value: latest });
61
+ }
62
+ );
63
+ }
64
+ } else {
65
+ let changed = options == null ? void 0 : options.skipCheck;
66
+ if (!changed) {
67
+ const newValue = run();
68
+ if (newValue !== prev || !isPrimitive(newValue) && newValue === value) {
69
+ changed = true;
343
70
  }
344
- };
345
- return {
346
- subscribe: (onStoreChange) => {
347
- notify = onStoreChange;
348
- // Workaround for React 18 running twice in dev (part 2)
349
- if ((process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') &&
350
- !dispose &&
351
- resubscribe) {
352
- dispose = resubscribe();
353
- }
354
- return () => {
355
- dispose === null || dispose === void 0 ? void 0 : dispose();
356
- dispose = undefined;
357
- };
358
- },
359
- getVersion: () => version,
360
- run: (selector) => {
361
- // Update the cached selector
362
- _selector = selector;
363
- return (prev = run());
364
- },
365
- };
71
+ }
72
+ if (changed) {
73
+ version++;
74
+ notify == null ? void 0 : notify();
75
+ }
76
+ }
77
+ };
78
+ return {
79
+ subscribe: (onStoreChange) => {
80
+ notify = onStoreChange;
81
+ if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && !dispose && resubscribe) {
82
+ dispose = resubscribe();
83
+ }
84
+ return () => {
85
+ dispose == null ? void 0 : dispose();
86
+ dispose = void 0;
87
+ };
88
+ },
89
+ getVersion: () => version,
90
+ run: (selector) => {
91
+ _selector = selector;
92
+ return prev = run();
93
+ }
94
+ };
366
95
  }
367
96
  function useSelector(selector, options) {
368
- var _a;
369
- // Short-circuit to skip creating the hook if selector is an observable
370
- // and running in an observer. If selector is a function it needs to run in its own context.
371
- if (reactGlobals.inObserver && isObservable(selector) && !(options === null || options === void 0 ? void 0 : options.suspense)) {
372
- return computeSelector(selector);
373
- }
374
- let value;
375
- try {
376
- const isPaused$ = useContext(getPauseContext());
377
- const selectorFn = useMemo(() => createSelectorFunctions(options, isPaused$), []);
378
- const { subscribe, getVersion, run } = selectorFn;
379
- // Run the selector
380
- // Note: The selector needs to run on every render because it may have different results
381
- // than the previous run if it uses local state
382
- value = run(selector);
383
- shim.exports.useSyncExternalStore(subscribe, getVersion, getVersion);
384
- // Suspense support
385
- if (options === null || options === void 0 ? void 0 : options.suspense) {
386
- // Note: Although it's not possible for an observable to be a promise, the selector may be a
387
- // function that returns a Promise, so we handle that case too.
388
- if (isPromise(value) ||
389
- (!value && isObservable(selector) && syncState(selector).isLoaded.get() === false)) {
390
- if (require$$0.use) {
391
- require$$0.use(value);
392
- }
393
- else {
394
- throw value;
395
- }
396
- }
97
+ var _a;
98
+ if (reactGlobals.inObserver && isObservable(selector) && !(options == null ? void 0 : options.suspense)) {
99
+ return computeSelector(selector);
100
+ }
101
+ let value;
102
+ try {
103
+ const isPaused$ = useContext(getPauseContext());
104
+ const selectorFn = useMemo(() => createSelectorFunctions(options, isPaused$), []);
105
+ const { subscribe, getVersion, run } = selectorFn;
106
+ value = run(selector);
107
+ useSyncExternalStore(subscribe, getVersion, getVersion);
108
+ if (options == null ? void 0 : options.suspense) {
109
+ if (isPromise(value) || !value && isObservable(selector) && syncState(selector).isLoaded.get() === false) {
110
+ if (React.use) {
111
+ React.use(value);
112
+ } else {
113
+ throw value;
397
114
  }
115
+ }
398
116
  }
399
- catch (err) {
400
- if ((process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') &&
401
- ((_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.includes('Rendered more'))) {
402
- console.warn(`[legend-state]: You may want to wrap this component in \`observer\` to fix the error of ${err.message}`);
403
- }
404
- throw err;
117
+ } catch (err) {
118
+ if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && ((_a = err == null ? void 0 : err.message) == null ? void 0 : _a.includes("Rendered more"))) {
119
+ console.warn(
120
+ `[legend-state]: You may want to wrap this component in \`observer\` to fix the error of ${err.message}`
121
+ );
405
122
  }
406
- return value;
123
+ throw err;
124
+ }
125
+ return value;
407
126
  }
408
127
 
128
+ // src/react/Computed.tsx
409
129
  function Computed({ children }) {
410
- return useSelector(() => computeSelector(computeSelector(children)), { skipCheck: true });
130
+ return useSelector(() => computeSelector(computeSelector(children)), { skipCheck: true });
411
131
  }
412
-
413
- // Extracting the forwardRef inspired by https://github.com/mobxjs/mobx/blob/main/packages/mobx-react-lite/src/observer.ts
414
- const hasSymbol = typeof Symbol === 'function' && Symbol.for;
415
- let didWarnProps = false;
416
- // TODOV2: Change bindKeys to an options object, where one of the options is "convertChildren" so that behavior can be optional
417
- function createReactiveComponent(component, observe, reactive, bindKeys) {
418
- const ReactForwardRefSymbol = hasSymbol
419
- ? Symbol.for('react.forward_ref')
420
- : // eslint-disable-next-line react/display-name, @typescript-eslint/no-unused-vars
421
- typeof forwardRef === 'function' && forwardRef((props) => null)['$$typeof'];
422
- const ReactMemoSymbol = hasSymbol
423
- ? Symbol.for('react.memo')
424
- : // eslint-disable-next-line react/display-name, @typescript-eslint/no-unused-vars
425
- typeof forwardRef === 'function' && memo((props) => null)['$$typeof'];
426
- // If this component is already reactive bail out early
427
- // This can happen with Fast Refresh.
428
- if (component['__legend_proxied'])
429
- return component;
430
- let useForwardRef = false;
431
- let useMemo = false;
432
- let render = component;
433
- // Unwrap memo on the component
434
- if (ReactMemoSymbol && render['$$typeof'] === ReactMemoSymbol && render['type']) {
435
- useMemo = true;
436
- render = render['type'];
437
- }
438
- // Unwrap forwardRef on the component
439
- if (ReactForwardRefSymbol && render['$$typeof'] === ReactForwardRefSymbol) {
440
- useForwardRef = true;
441
- render = render['render'];
442
- if (process.env.NODE_ENV === 'development' && typeof render !== 'function') {
443
- throw new Error(`[legend-state] \`render\` property of ForwardRef was not a function`);
444
- }
132
+ var hasSymbol = typeof Symbol === "function" && Symbol.for;
133
+ var didWarnProps = false;
134
+ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
135
+ const ReactForwardRefSymbol = hasSymbol ? Symbol.for("react.forward_ref") : (
136
+ // eslint-disable-next-line react/display-name, @typescript-eslint/no-unused-vars
137
+ typeof forwardRef === "function" && forwardRef((props) => null)["$$typeof"]
138
+ );
139
+ const ReactMemoSymbol = hasSymbol ? Symbol.for("react.memo") : (
140
+ // eslint-disable-next-line react/display-name, @typescript-eslint/no-unused-vars
141
+ typeof forwardRef === "function" && memo((props) => null)["$$typeof"]
142
+ );
143
+ if (component["__legend_proxied"])
144
+ return component;
145
+ let useForwardRef = false;
146
+ let useMemo5 = false;
147
+ let render = component;
148
+ if (ReactMemoSymbol && render["$$typeof"] === ReactMemoSymbol && render["type"]) {
149
+ useMemo5 = true;
150
+ render = render["type"];
151
+ }
152
+ if (ReactForwardRefSymbol && render["$$typeof"] === ReactForwardRefSymbol) {
153
+ useForwardRef = true;
154
+ render = render["render"];
155
+ if (process.env.NODE_ENV === "development" && typeof render !== "function") {
156
+ throw new Error(`[legend-state] \`render\` property of ForwardRef was not a function`);
445
157
  }
446
- const proxyHandler = {
447
- apply(target, thisArg, argArray) {
448
- // If this is a reactive component, convert all props ending in $
449
- // to regular props and set up a useSelector listener
450
- if (reactive) {
451
- const props = argArray[0];
452
- const propsOut = {};
453
- const keys = Object.keys(props);
454
- for (let i = 0; i < keys.length; i++) {
455
- const key = keys[i];
456
- const p = props[key];
457
- // Convert children if it's a function
458
- if (key === 'children' && (isFunction(p) || isObservable(p))) {
459
- props[key] = useSelector(p, { skipCheck: true });
460
- }
461
- // Convert reactive props
462
- else if (key.startsWith('$') || key.endsWith('$')) {
463
- // TODOV3 Add this warning
464
- // TODOV4 Remove the deprecated endsWith option
465
- if (process.env.NODE_ENV === 'development' && !didWarnProps && key.endsWith('$')) {
466
- didWarnProps = true;
467
- console.warn(`[legend-state] Reactive props were changed to start with $ instead of end with $ in version 2.0. So please change ${key} to $${key.replace('$', '')}. See https://legendapp.com/open-source/state/migrating for more details.`);
468
- }
469
- const k = key.endsWith('$') ? key.slice(0, -1) : key.slice(1);
470
- // Return raw value and listen to the selector for changes
471
- const bind = bindKeys === null || bindKeys === void 0 ? void 0 : bindKeys[k];
472
- const shouldBind = bind && isObservable(p);
473
- propsOut[k] = shouldBind && (bind === null || bind === void 0 ? void 0 : bind.selector) ? bind.selector(propsOut, p) : useSelector(p);
474
- // If this key is one of the bind keys set up a two-way binding
475
- if (shouldBind) {
476
- // Use the bind's defaultValue if value is undefined
477
- if (bind.defaultValue !== undefined && propsOut[k] === undefined) {
478
- propsOut[k] = bind.defaultValue;
479
- }
480
- if (bind.handler && bind.getValue) {
481
- // Hook up the change lander
482
- const handlerFn = (e) => {
483
- var _a;
484
- p.set(bind.getValue(e));
485
- (_a = props[bind.handler]) === null || _a === void 0 ? void 0 : _a.call(props, e);
486
- };
487
- propsOut[bind.handler] =
488
- // If in development mode, don't memoize the handler. fix fast refresh bug
489
- process.env.NODE_ENV === 'development'
490
- ? handlerFn
491
- : useCallback(handlerFn, [props[bind.handler], bindKeys]);
492
- }
493
- }
494
- // Delete the reactive key
495
- delete propsOut[key];
496
- }
497
- else if (propsOut[key] === undefined) {
498
- propsOut[key] = p;
499
- }
500
- }
501
- argArray[0] = propsOut;
158
+ }
159
+ const proxyHandler = {
160
+ apply(target, thisArg, argArray) {
161
+ if (reactive2) {
162
+ const props = argArray[0];
163
+ const propsOut = {};
164
+ const keys = Object.keys(props);
165
+ for (let i = 0; i < keys.length; i++) {
166
+ const key = keys[i];
167
+ const p = props[key];
168
+ if (key === "children" && (isFunction(p) || isObservable(p))) {
169
+ props[key] = useSelector(p, { skipCheck: true });
170
+ } else if (key.startsWith("$") || key.endsWith("$")) {
171
+ if (process.env.NODE_ENV === "development" && !didWarnProps && key.endsWith("$")) {
172
+ didWarnProps = true;
173
+ console.warn(
174
+ `[legend-state] Reactive props were changed to start with $ instead of end with $ in version 2.0. So please change ${key} to $${key.replace(
175
+ "$",
176
+ ""
177
+ )}. See https://legendapp.com/open-source/state/migrating for more details.`
178
+ );
502
179
  }
503
- // If observing wrap the whole render in a useSelector to listen to it
504
- if (observe) {
505
- return useSelector(() => {
506
- reactGlobals.inObserver = true;
507
- try {
508
- return Reflect.apply(target, thisArg, argArray);
509
- }
510
- finally {
511
- reactGlobals.inObserver = false;
512
- }
513
- }, { skipCheck: true });
180
+ const k = key.endsWith("$") ? key.slice(0, -1) : key.slice(1);
181
+ const bind = bindKeys == null ? void 0 : bindKeys[k];
182
+ const shouldBind = bind && isObservable(p);
183
+ propsOut[k] = shouldBind && (bind == null ? void 0 : bind.selector) ? bind.selector(propsOut, p) : useSelector(p);
184
+ if (shouldBind) {
185
+ if (bind.defaultValue !== void 0 && propsOut[k] === void 0) {
186
+ propsOut[k] = bind.defaultValue;
187
+ }
188
+ if (bind.handler && bind.getValue) {
189
+ const handlerFn = (e) => {
190
+ var _a;
191
+ p.set(bind.getValue(e));
192
+ (_a = props[bind.handler]) == null ? void 0 : _a.call(props, e);
193
+ };
194
+ propsOut[bind.handler] = // If in development mode, don't memoize the handler. fix fast refresh bug
195
+ process.env.NODE_ENV === "development" ? handlerFn : useCallback(handlerFn, [props[bind.handler], bindKeys]);
196
+ }
514
197
  }
515
- else {
516
- return Reflect.apply(target, thisArg, argArray);
198
+ delete propsOut[key];
199
+ } else if (propsOut[key] === void 0) {
200
+ propsOut[key] = p;
201
+ }
202
+ }
203
+ argArray[0] = propsOut;
204
+ }
205
+ if (observe3) {
206
+ return useSelector(
207
+ () => {
208
+ reactGlobals.inObserver = true;
209
+ try {
210
+ return Reflect.apply(target, thisArg, argArray);
211
+ } finally {
212
+ reactGlobals.inObserver = false;
517
213
  }
518
- },
519
- };
520
- const proxy = new Proxy(render, proxyHandler);
521
- let ret;
522
- if (useForwardRef) {
523
- ret = forwardRef(proxy);
524
- ret['__legend_proxied'] = true;
214
+ },
215
+ { skipCheck: true }
216
+ );
217
+ } else {
218
+ return Reflect.apply(target, thisArg, argArray);
219
+ }
525
220
  }
526
- else {
527
- ret = proxy;
528
- }
529
- return observe || useMemo ? memo(ret) : ret;
221
+ };
222
+ const proxy = new Proxy(render, proxyHandler);
223
+ let ret;
224
+ if (useForwardRef) {
225
+ ret = forwardRef(proxy);
226
+ ret["__legend_proxied"] = true;
227
+ } else {
228
+ ret = proxy;
229
+ }
230
+ return observe3 || useMemo5 ? memo(ret) : ret;
530
231
  }
531
232
  function observer(component) {
532
- return createReactiveComponent(component, true);
233
+ return createReactiveComponent(component, true);
533
234
  }
534
235
  function reactive(component, bindKeys) {
535
- return createReactiveComponent(component, false, true, bindKeys);
236
+ return createReactiveComponent(component, false, true, bindKeys);
536
237
  }
537
238
  function reactiveObserver(component, bindKeys) {
538
- return createReactiveComponent(component, true, true, bindKeys);
239
+ return createReactiveComponent(component, true, true, bindKeys);
539
240
  }
540
241
  function reactiveComponents(components) {
541
- return new Proxy({}, {
542
- get(target, p) {
543
- if (!target[p] && components[p]) {
544
- target[p] = createReactiveComponent(components[p], false, true);
545
- }
546
- return target[p];
547
- },
548
- });
242
+ return new Proxy(
243
+ {},
244
+ {
245
+ get(target, p) {
246
+ if (!target[p] && components[p]) {
247
+ target[p] = createReactiveComponent(components[p], false, true);
248
+ }
249
+ return target[p];
250
+ }
251
+ }
252
+ );
549
253
  }
550
254
 
551
- const { findIDKey, getNode, optimized } = internal;
552
- const autoMemoCache = new Map();
553
- function For({ each, optimized: isOptimized, item, itemProps, sortValues, children, }) {
554
- var _a;
555
- if (!each)
556
- return null;
557
- // Get the raw value with a shallow listener so this list only re-renders
558
- // when the array length changes
559
- const value = useSelector(() => each.get(isOptimized ? optimized : true));
560
- // The child function gets wrapped in a memoized observer component
561
- if (!item && children) {
562
- // Update the ref so the generated component uses the latest function
563
- const refChildren = useRef();
564
- refChildren.current = children;
565
- item = useMemo(() => observer(({ item$, id }) => refChildren.current(item$, id)), []);
255
+ // src/react/For.tsx
256
+ var { findIDKey, getNode, optimized } = internal;
257
+ var autoMemoCache = /* @__PURE__ */ new Map();
258
+ function For({
259
+ each,
260
+ optimized: isOptimized,
261
+ item,
262
+ itemProps,
263
+ sortValues,
264
+ children
265
+ }) {
266
+ var _a;
267
+ if (!each)
268
+ return null;
269
+ const value = useSelector(() => each.get(isOptimized ? optimized : true));
270
+ if (!item && children) {
271
+ const refChildren = useRef();
272
+ refChildren.current = children;
273
+ item = useMemo(() => observer(({ item$, id }) => refChildren.current(item$, id)), []);
274
+ } else {
275
+ if (item.$$typeof !== Symbol.for("react.memo")) {
276
+ let memod = autoMemoCache.get(item);
277
+ if (!memod) {
278
+ memod = memo(item);
279
+ autoMemoCache.set(item, memod);
280
+ }
281
+ item = memod;
566
282
  }
567
- else {
568
- // @ts-expect-error $$typeof is private
569
- if (item.$$typeof !== Symbol.for('react.memo')) {
570
- let memod = autoMemoCache.get(item);
571
- if (!memod) {
572
- memod = memo(item);
573
- autoMemoCache.set(item, memod);
574
- }
575
- item = memod;
576
- }
283
+ }
284
+ if (!value)
285
+ return null;
286
+ const out = [];
287
+ const isArr = isArray(value);
288
+ if (isArr) {
289
+ const v0 = value[0];
290
+ const node = getNode(each);
291
+ const length = value.length;
292
+ const idField = length > 0 ? node && findIDKey(v0, node) || (v0.id !== void 0 ? "id" : v0.key !== void 0 ? "key" : void 0) : void 0;
293
+ const isIdFieldFunction = isFunction(idField);
294
+ for (let i = 0; i < length; i++) {
295
+ if (value[i]) {
296
+ const val = value[i];
297
+ const key = (_a = isIdFieldFunction ? idField(val) : val[idField]) != null ? _a : i;
298
+ const item$ = each[i];
299
+ const props = {
300
+ key,
301
+ id: key,
302
+ item$,
303
+ item: item$
304
+ };
305
+ out.push(createElement(item, itemProps ? Object.assign(props, itemProps) : props));
306
+ }
577
307
  }
578
- // This early out needs to be after any hooks
579
- if (!value)
580
- return null;
581
- // Create the child elements
582
- const out = [];
583
- const isArr = isArray(value);
584
- if (isArr) {
585
- // Get the appropriate id field
586
- const v0 = value[0];
587
- const node = getNode(each);
588
- const length = value.length;
589
- const idField = length > 0
590
- ? (node && findIDKey(v0, node)) ||
591
- (v0.id !== undefined ? 'id' : v0.key !== undefined ? 'key' : undefined)
592
- : undefined;
593
- const isIdFieldFunction = isFunction(idField);
594
- for (let i = 0; i < length; i++) {
595
- if (value[i]) {
596
- const val = value[i];
597
- const key = (_a = (isIdFieldFunction ? idField(val) : val[idField])) !== null && _a !== void 0 ? _a : i;
598
- const item$ = each[i];
599
- // TODOV3 Remove item
600
- const props = {
601
- key,
602
- id: key,
603
- item$,
604
- item: item$,
605
- };
606
- out.push(createElement(item, itemProps ? Object.assign(props, itemProps) : props));
607
- }
608
- }
308
+ } else {
309
+ const asMap = isMap(value);
310
+ const keys = asMap ? Array.from(value.keys()) : Object.keys(value);
311
+ if (sortValues) {
312
+ keys.sort((A, B) => sortValues(asMap ? value.get(A) : value[A], asMap ? value.get(B) : value[B], A, B));
609
313
  }
610
- else {
611
- // Render the values of the object / Map
612
- const asMap = isMap(value);
613
- const keys = asMap ? Array.from(value.keys()) : Object.keys(value);
614
- if (sortValues) {
615
- keys.sort((A, B) => sortValues(asMap ? value.get(A) : value[A], asMap ? value.get(B) : value[B], A, B));
616
- }
617
- for (let i = 0; i < keys.length; i++) {
618
- const key = keys[i];
619
- if (asMap ? value.get(key) : value[key]) {
620
- const item$ = asMap ? each.get(key) : each[key];
621
- const props = {
622
- key,
623
- id: key,
624
- item$,
625
- item: item$,
626
- };
627
- out.push(createElement(item, itemProps ? Object.assign(props, itemProps) : props));
628
- }
629
- }
314
+ for (let i = 0; i < keys.length; i++) {
315
+ const key = keys[i];
316
+ if (asMap ? value.get(key) : value[key]) {
317
+ const item$ = asMap ? each.get(key) : each[key];
318
+ const props = {
319
+ key,
320
+ id: key,
321
+ item$,
322
+ item: item$
323
+ };
324
+ out.push(createElement(item, itemProps ? Object.assign(props, itemProps) : props));
325
+ }
630
326
  }
631
- return out;
327
+ }
328
+ return out;
632
329
  }
633
-
634
- const Memo = memo(Computed, () => true);
635
-
636
- const ReactiveFns = new Map();
637
- const ReactiveFnBinders = new Map();
638
- const Reactive = new Proxy({}, {
330
+ var Memo = memo(Computed, () => true);
331
+ var ReactiveFns = /* @__PURE__ */ new Map();
332
+ var ReactiveFnBinders = /* @__PURE__ */ new Map();
333
+ var Reactive = new Proxy(
334
+ {},
335
+ {
639
336
  get(target, p) {
640
- if (!target[p]) {
641
- const Component = ReactiveFns.get(p) || p;
642
- // Create a wrapper around createElement with the string so we can proxy it
643
- // eslint-disable-next-line react/display-name
644
- const render = forwardRef((props, ref) => {
645
- const propsOut = { ...props };
646
- if (ref && (isFunction(ref) || !isEmpty(ref))) {
647
- propsOut.ref = ref;
648
- }
649
- return createElement(Component, propsOut);
650
- });
651
- target[p] = reactive(render, ReactiveFnBinders.get(p));
652
- }
653
- return target[p];
654
- },
655
- });
656
- function configureReactive({ components, binders, }) {
657
- if (components) {
658
- for (const key in components) {
659
- ReactiveFns.set(key, components[key]);
660
- }
337
+ if (!target[p]) {
338
+ const Component = ReactiveFns.get(p) || p;
339
+ const render = forwardRef((props, ref) => {
340
+ const propsOut = { ...props };
341
+ if (ref && (isFunction(ref) || !isEmpty(ref))) {
342
+ propsOut.ref = ref;
343
+ }
344
+ return createElement(Component, propsOut);
345
+ });
346
+ target[p] = reactive(render, ReactiveFnBinders.get(p));
347
+ }
348
+ return target[p];
661
349
  }
662
- if (binders) {
663
- for (const key in binders) {
664
- ReactiveFnBinders.set(key, binders[key]);
665
- }
350
+ }
351
+ );
352
+ function configureReactive({
353
+ components,
354
+ binders
355
+ }) {
356
+ if (components) {
357
+ for (const key in components) {
358
+ ReactiveFns.set(key, components[key]);
666
359
  }
360
+ }
361
+ if (binders) {
362
+ for (const key in binders) {
363
+ ReactiveFnBinders.set(key, binders[key]);
364
+ }
365
+ }
667
366
  }
668
-
669
367
  function Show({ if: if_, ifReady, else: else_, wrap, children }) {
670
- const value = useSelector(if_ !== null && if_ !== void 0 ? if_ : ifReady);
671
- const show = ifReady !== undefined ? isObservableValueReady(value) : value;
672
- const child = useSelector(show ? (isFunction(children) ? () => children(value) : children) : else_ !== null && else_ !== void 0 ? else_ : null, { skipCheck: true });
673
- return wrap ? createElement(wrap, undefined, child) : child;
368
+ const value = useSelector(if_ != null ? if_ : ifReady);
369
+ const show = ifReady !== void 0 ? isObservableValueReady(value) : value;
370
+ const child = useSelector(
371
+ show ? isFunction(children) ? () => children(value) : children : else_ != null ? else_ : null,
372
+ { skipCheck: true }
373
+ );
374
+ return wrap ? createElement(wrap, void 0, child) : child;
674
375
  }
675
376
 
676
- function Switch({ value, children, }) {
677
- var _a, _b;
678
- // Select from an object of cases
679
- const child = children[useSelector(value)];
680
- return (_b = (child ? child() : (_a = children['default']) === null || _a === void 0 ? void 0 : _a.call(children))) !== null && _b !== void 0 ? _b : null;
377
+ // src/react/Switch.tsx
378
+ function Switch({
379
+ value,
380
+ children
381
+ }) {
382
+ var _a, _b;
383
+ const child = children[useSelector(value)];
384
+ return (_b = child ? child() : (_a = children["default"]) == null ? void 0 : _a.call(children)) != null ? _b : null;
681
385
  }
682
-
683
386
  function useComputed(compute, set, deps) {
684
- if (!deps && isArray(set)) {
685
- deps = set;
686
- set = undefined;
687
- }
688
- const ref = useRef({});
689
- ref.current.compute = compute;
690
- ref.current.set = set;
691
- return useMemo(() => computed(() => (isFunction(ref.current.compute) ? ref.current.compute() : ref.current.compute), (set ? (value) => ref.current.set(value) : undefined)), deps || []);
387
+ if (!deps && isArray(set)) {
388
+ deps = set;
389
+ set = void 0;
390
+ }
391
+ const ref = useRef({});
392
+ ref.current.compute = compute;
393
+ ref.current.set = set;
394
+ return useMemo(
395
+ () => computed(
396
+ () => isFunction(ref.current.compute) ? ref.current.compute() : ref.current.compute,
397
+ set ? (value) => ref.current.set(value) : void 0
398
+ ),
399
+ deps || []
400
+ );
692
401
  }
693
-
694
- const useEffectOnce = (effect, deps) => {
695
- if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') {
696
- const refDispose = useRef({ num: 0 });
697
- useEffect(() => {
698
- var _a;
699
- // This is a hack to work around StrictMode running effects twice.
700
- // On the first run it returns a cleanup function that queues the dispose function
701
- // in a microtask. This way it will run at the end of the frame after StrictMode's second
702
- // run of the effect. If it's run a second time then the microtasked dispose will do nothing,
703
- // but the effect will return the dispose again so that when it actually unmounts it will dispose.
704
- // If not in StrictMode, then the dispose function will run in the microtask.
705
- // It's possible that this is not safe in 100% of cases, but I'm not sure what the
706
- // dangerous cases would be. The side effect is that the listener is still active
707
- // until the end of the frame, but that's probably not a problem.
708
- const { current } = refDispose;
709
- current.num++;
710
- const dispose = () => {
711
- if (current.dispose && current.num < 2) {
712
- current.dispose();
713
- current.dispose = undefined;
714
- }
715
- current.num--;
716
- };
717
- if (current.dispose === undefined) {
718
- const ret = (_a = effect()) !== null && _a !== void 0 ? _a : null;
719
- // If ret is a function, then it's a dispose function.
720
- if (ret && isFunction(ret)) {
721
- current.dispose = ret;
722
- return () => queueMicrotask(dispose);
723
- }
724
- }
725
- else {
726
- return dispose;
727
- }
728
- }, deps);
729
- }
730
- else {
731
- useEffect(effect, deps);
732
- }
402
+ var useEffectOnce = (effect, deps) => {
403
+ if (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") {
404
+ const refDispose = useRef({ num: 0 });
405
+ useEffect(() => {
406
+ var _a;
407
+ const { current } = refDispose;
408
+ current.num++;
409
+ const dispose = () => {
410
+ if (current.dispose && current.num < 2) {
411
+ current.dispose();
412
+ current.dispose = void 0;
413
+ }
414
+ current.num--;
415
+ };
416
+ if (current.dispose === void 0) {
417
+ const ret = (_a = effect()) != null ? _a : null;
418
+ if (ret && isFunction(ret)) {
419
+ current.dispose = ret;
420
+ return () => queueMicrotask(dispose);
421
+ }
422
+ } else {
423
+ return dispose;
424
+ }
425
+ }, deps);
426
+ } else {
427
+ useEffect(effect, deps);
428
+ }
733
429
  };
734
-
735
430
  function useMount(fn) {
736
- return useEffectOnce(() => {
737
- const ret = fn();
738
- // Allow the function to be async but if so ignore its return value
739
- if (!isPromise(ret)) {
740
- return ret;
741
- }
742
- }, []);
431
+ return useEffectOnce(() => {
432
+ const ret = fn();
433
+ if (!isPromise(ret)) {
434
+ return ret;
435
+ }
436
+ }, []);
743
437
  }
744
- // TODOV4 Deprecate
745
- const useMountOnce = useMount;
746
-
438
+ var useMountOnce = useMount;
747
439
  function useObservable(initialValue) {
748
- const ref = useRef();
749
- if (!ref.current) {
750
- // Create the observable from the default value
751
- ref.current = observable(initialValue);
752
- }
753
- return ref.current;
440
+ const ref = useRef();
441
+ if (!ref.current) {
442
+ ref.current = observable(initialValue);
443
+ }
444
+ return ref.current;
754
445
  }
755
446
 
447
+ // src/react/useIsMounted.ts
756
448
  function useIsMounted() {
757
- const obs = useObservable(false);
758
- const { set } = obs;
759
- useMountOnce(() => {
760
- set(true);
761
- return () => set(false);
762
- });
763
- return obs;
449
+ const obs = useObservable(false);
450
+ const { set } = obs;
451
+ useMountOnce(() => {
452
+ set(true);
453
+ return () => set(false);
454
+ });
455
+ return obs;
764
456
  }
765
-
766
457
  function useObservableReducer(reducer, initializerArg, initializer) {
767
- const obs = useObservable(() => initializerArg !== undefined && isFunction(initializerArg) ? initializer(initializerArg) : initializerArg);
768
- const dispatch = (action) => {
769
- obs.set(reducer(obs.get(), action));
770
- };
771
- return [obs, dispatch];
458
+ const obs = useObservable(
459
+ () => initializerArg !== void 0 && isFunction(initializerArg) ? initializer(initializerArg) : initializerArg
460
+ );
461
+ const dispatch = (action) => {
462
+ obs.set(reducer(obs.get(), action));
463
+ };
464
+ return [obs, dispatch];
772
465
  }
773
466
 
467
+ // src/react/useUnmount.ts
774
468
  function useUnmount(fn) {
775
- return useMount(() => fn);
469
+ return useMount(() => fn);
776
470
  }
777
- // TODOV4 Deprecate
778
- const useUnmountOnce = useUnmount;
471
+ var useUnmountOnce = useUnmount;
779
472
 
473
+ // src/react/useObserve.ts
780
474
  function useObserve(selector, reactionOrOptions, options) {
781
- let reaction;
782
- if (isFunction(reactionOrOptions)) {
783
- reaction = reactionOrOptions;
784
- }
785
- else {
786
- options = reactionOrOptions;
787
- }
788
- const ref = useRef({});
789
- ref.current.selector = selector;
790
- ref.current.reaction = reaction;
791
- if (!ref.current.dispose) {
792
- ref.current.dispose = observe(((e) => computeSelector(ref.current.selector, e)), (e) => { var _a, _b; return (_b = (_a = ref.current).reaction) === null || _b === void 0 ? void 0 : _b.call(_a, e); }, options);
793
- }
794
- useUnmountOnce(() => {
475
+ let reaction;
476
+ if (isFunction(reactionOrOptions)) {
477
+ reaction = reactionOrOptions;
478
+ } else {
479
+ options = reactionOrOptions;
480
+ }
481
+ const ref = useRef({});
482
+ ref.current.selector = selector;
483
+ ref.current.reaction = reaction;
484
+ if (!ref.current.dispose) {
485
+ ref.current.dispose = observe(
486
+ (e) => computeSelector(ref.current.selector, e),
487
+ (e) => {
795
488
  var _a, _b;
796
- (_b = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
797
- });
798
- return ref.current.dispose;
489
+ return (_b = (_a = ref.current).reaction) == null ? void 0 : _b.call(_a, e);
490
+ },
491
+ options
492
+ );
493
+ }
494
+ useUnmountOnce(() => {
495
+ var _a, _b;
496
+ (_b = (_a = ref.current) == null ? void 0 : _a.dispose) == null ? void 0 : _b.call(_a);
497
+ });
498
+ return ref.current.dispose;
799
499
  }
800
-
801
500
  function useObserveEffect(selector, reactionOrOptions, options) {
802
- let reaction;
803
- if (isFunction(reactionOrOptions)) {
804
- reaction = reactionOrOptions;
805
- }
806
- else {
807
- options = reactionOrOptions;
808
- }
809
- const ref = useRef({ selector });
810
- ref.current = { selector, reaction };
811
- useMountOnce(() => observe(((e) => {
812
- const { selector } = ref.current;
813
- return isFunction(selector) ? selector(e) : selector;
814
- }), (e) => { var _a, _b; return (_b = (_a = ref.current).reaction) === null || _b === void 0 ? void 0 : _b.call(_a, e); }, options));
501
+ let reaction;
502
+ if (isFunction(reactionOrOptions)) {
503
+ reaction = reactionOrOptions;
504
+ } else {
505
+ options = reactionOrOptions;
506
+ }
507
+ const ref = useRef({ selector });
508
+ ref.current = { selector, reaction };
509
+ useMountOnce(
510
+ () => observe(
511
+ (e) => {
512
+ const { selector: selector2 } = ref.current;
513
+ return isFunction(selector2) ? selector2(e) : selector2;
514
+ },
515
+ (e) => {
516
+ var _a, _b;
517
+ return (_b = (_a = ref.current).reaction) == null ? void 0 : _b.call(_a, e);
518
+ },
519
+ options
520
+ )
521
+ );
815
522
  }
816
-
817
523
  function useWhen(predicate, effect) {
818
- return useMemo(() => when(predicate, effect), []);
524
+ return useMemo(() => when(predicate, effect), []);
819
525
  }
820
526
  function useWhenReady(predicate, effect) {
821
- return useMemo(() => whenReady(predicate, effect), []);
527
+ return useMemo(() => whenReady(predicate, effect), []);
822
528
  }
823
529
 
824
530
  export { Computed, For, Memo, Reactive, Show, Switch, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
825
- //# sourceMappingURL=react.mjs.map