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