@legendapp/state 3.0.0-beta.2 → 3.0.0-beta.21

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 (74) hide show
  1. package/.DS_Store +0 -0
  2. package/config/enableReactComponents.js +3 -1
  3. package/config/enableReactComponents.mjs +3 -1
  4. package/config/enableReactTracking.d.mts +2 -1
  5. package/config/enableReactTracking.d.ts +2 -1
  6. package/config/enableReactTracking.js +32 -13
  7. package/config/enableReactTracking.mjs +32 -13
  8. package/index.d.mts +13 -4
  9. package/index.d.ts +13 -4
  10. package/index.js +70 -22
  11. package/index.mjs +70 -22
  12. package/package.json +22 -1
  13. package/persist-plugins/async-storage.js +17 -9
  14. package/persist-plugins/async-storage.mjs +17 -9
  15. package/react-native.d.mts +4 -0
  16. package/react-native.d.ts +4 -0
  17. package/react-native.js +53 -0
  18. package/react-native.mjs +40 -0
  19. package/react-reactive/Components.d.mts +19 -0
  20. package/react-reactive/Components.d.ts +19 -0
  21. package/react-reactive/Components.js +53 -0
  22. package/react-reactive/Components.mjs +40 -0
  23. package/react-reactive/enableReactComponents.d.mts +3 -2
  24. package/react-reactive/enableReactComponents.d.ts +3 -2
  25. package/react-reactive/enableReactComponents.js +10 -3
  26. package/react-reactive/enableReactComponents.mjs +10 -3
  27. package/react-reactive/enableReactNativeComponents.d.mts +3 -20
  28. package/react-reactive/enableReactNativeComponents.d.ts +3 -20
  29. package/react-reactive/enableReactNativeComponents.js +8 -3
  30. package/react-reactive/enableReactNativeComponents.mjs +8 -3
  31. package/react-reactive/enableReactive.js +10 -3
  32. package/react-reactive/enableReactive.mjs +10 -3
  33. package/react-reactive/enableReactive.native.js +8 -3
  34. package/react-reactive/enableReactive.native.mjs +8 -3
  35. package/react-reactive/enableReactive.web.js +8 -3
  36. package/react-reactive/enableReactive.web.mjs +8 -3
  37. package/react-web.d.mts +6 -0
  38. package/react-web.d.ts +6 -0
  39. package/react-web.js +39 -0
  40. package/react-web.mjs +37 -0
  41. package/react.d.mts +38 -20
  42. package/react.d.ts +38 -20
  43. package/react.js +36 -23
  44. package/react.mjs +37 -25
  45. package/sync-plugins/crud.d.mts +24 -9
  46. package/sync-plugins/crud.d.ts +24 -9
  47. package/sync-plugins/crud.js +199 -108
  48. package/sync-plugins/crud.mjs +200 -109
  49. package/sync-plugins/firebase.d.mts +7 -3
  50. package/sync-plugins/firebase.d.ts +7 -3
  51. package/sync-plugins/firebase.js +4 -2
  52. package/sync-plugins/firebase.mjs +4 -2
  53. package/sync-plugins/keel.d.mts +9 -13
  54. package/sync-plugins/keel.d.ts +9 -13
  55. package/sync-plugins/keel.js +52 -41
  56. package/sync-plugins/keel.mjs +53 -37
  57. package/sync-plugins/supabase.d.mts +7 -3
  58. package/sync-plugins/supabase.d.ts +7 -3
  59. package/sync-plugins/supabase.js +87 -31
  60. package/sync-plugins/supabase.mjs +88 -32
  61. package/sync-plugins/tanstack-query.d.mts +5 -5
  62. package/sync-plugins/tanstack-query.d.ts +5 -5
  63. package/sync-plugins/tanstack-query.js +10 -1
  64. package/sync-plugins/tanstack-query.mjs +10 -1
  65. package/sync-plugins/tanstack-react-query.d.mts +4 -2
  66. package/sync-plugins/tanstack-react-query.d.ts +4 -2
  67. package/sync.d.mts +16 -8
  68. package/sync.d.ts +16 -8
  69. package/sync.js +267 -174
  70. package/sync.mjs +266 -174
  71. package/trace.js +5 -6
  72. package/trace.mjs +5 -6
  73. package/types/reactive-native.d.ts +19 -0
  74. package/types/reactive-web.d.ts +7 -0
@@ -1,6 +1,13 @@
1
1
  // src/react-reactive/enableReactComponents.ts
2
- function enableReactComponents(config) {
3
- const bindInfo = { value: { handler: "onChange", getValue: (e) => e.target.value, defaultValue: "" } };
2
+ var isEnabled = false;
3
+ function enableReactComponents_(config) {
4
+ if (isEnabled) {
5
+ return;
6
+ }
7
+ isEnabled = true;
8
+ const bindInfo = {
9
+ value: { handler: "onChange", getValue: (e) => e.target.value, defaultValue: "" }
10
+ };
4
11
  const bindInfoInput = Object.assign(
5
12
  { checked: { handler: "onChange", getValue: (e) => e.target.checked } },
6
13
  bindInfo
@@ -14,4 +21,4 @@ function enableReactComponents(config) {
14
21
  });
15
22
  }
16
23
 
17
- export { enableReactComponents };
24
+ export { enableReactComponents_ };
@@ -1,22 +1,5 @@
1
- import { FCReactiveObject, FCReactive, configureReactive } from '@legendapp/state/react';
2
- import { ActivityIndicator, ActivityIndicatorProps, Button, ButtonProps, FlatList, FlatListProps, Image, ImageProps, Pressable, PressableProps, ScrollView, ScrollViewProps, SectionList, SectionListProps, Switch, SwitchProps, Text, TextProps, TextInput, TextInputProps, TouchableWithoutFeedback, TouchableWithoutFeedbackProps, View, ViewProps } from 'react-native';
1
+ import { configureReactive } from '@legendapp/state/react';
3
2
 
4
- declare function enableReactNativeComponents(configure: typeof configureReactive): void;
5
- declare module '@legendapp/state/react' {
6
- interface IReactive extends FCReactiveObject<JSX.IntrinsicElements> {
7
- ActivityIndicator: FCReactive<ActivityIndicator, ActivityIndicatorProps>;
8
- Button: FCReactive<Button, ButtonProps>;
9
- FlatList: FCReactive<FlatList, FlatListProps<any>>;
10
- Image: FCReactive<Image, ImageProps>;
11
- Pressable: FCReactive<typeof Pressable, PressableProps>;
12
- ScrollView: FCReactive<ScrollView, ScrollViewProps>;
13
- SectionList: FCReactive<SectionList, SectionListProps<any>>;
14
- Switch: FCReactive<Switch, SwitchProps>;
15
- Text: FCReactive<Text, TextProps>;
16
- TextInput: FCReactive<TextInput, TextInputProps>;
17
- TouchableWithoutFeedback: FCReactive<TouchableWithoutFeedback, TouchableWithoutFeedbackProps>;
18
- View: FCReactive<View, ViewProps>;
19
- }
20
- }
3
+ declare function enableReactNativeComponents_(configure: typeof configureReactive): void;
21
4
 
22
- export { enableReactNativeComponents };
5
+ export { enableReactNativeComponents_ };
@@ -1,22 +1,5 @@
1
- import { FCReactiveObject, FCReactive, configureReactive } from '@legendapp/state/react';
2
- import { ActivityIndicator, ActivityIndicatorProps, Button, ButtonProps, FlatList, FlatListProps, Image, ImageProps, Pressable, PressableProps, ScrollView, ScrollViewProps, SectionList, SectionListProps, Switch, SwitchProps, Text, TextProps, TextInput, TextInputProps, TouchableWithoutFeedback, TouchableWithoutFeedbackProps, View, ViewProps } from 'react-native';
1
+ import { configureReactive } from '@legendapp/state/react';
3
2
 
4
- declare function enableReactNativeComponents(configure: typeof configureReactive): void;
5
- declare module '@legendapp/state/react' {
6
- interface IReactive extends FCReactiveObject<JSX.IntrinsicElements> {
7
- ActivityIndicator: FCReactive<ActivityIndicator, ActivityIndicatorProps>;
8
- Button: FCReactive<Button, ButtonProps>;
9
- FlatList: FCReactive<FlatList, FlatListProps<any>>;
10
- Image: FCReactive<Image, ImageProps>;
11
- Pressable: FCReactive<typeof Pressable, PressableProps>;
12
- ScrollView: FCReactive<ScrollView, ScrollViewProps>;
13
- SectionList: FCReactive<SectionList, SectionListProps<any>>;
14
- Switch: FCReactive<Switch, SwitchProps>;
15
- Text: FCReactive<Text, TextProps>;
16
- TextInput: FCReactive<TextInput, TextInputProps>;
17
- TouchableWithoutFeedback: FCReactive<TouchableWithoutFeedback, TouchableWithoutFeedbackProps>;
18
- View: FCReactive<View, ViewProps>;
19
- }
20
- }
3
+ declare function enableReactNativeComponents_(configure: typeof configureReactive): void;
21
4
 
22
- export { enableReactNativeComponents };
5
+ export { enableReactNativeComponents_ };
@@ -1,11 +1,16 @@
1
1
  'use strict';
2
2
 
3
- var react = require('react');
4
3
  var react$1 = require('@legendapp/state/react');
4
+ var react = require('react');
5
5
  var reactNative = require('react-native');
6
6
 
7
7
  // src/react-reactive/enableReactNativeComponents.ts
8
- function enableReactNativeComponents(configure) {
8
+ var isEnabled = false;
9
+ function enableReactNativeComponents_(configure) {
10
+ if (isEnabled) {
11
+ return;
12
+ }
13
+ isEnabled = true;
9
14
  configure({
10
15
  components: {
11
16
  ActivityIndicator: reactNative.ActivityIndicator,
@@ -50,4 +55,4 @@ function enableReactNativeComponents(configure) {
50
55
  });
51
56
  }
52
57
 
53
- exports.enableReactNativeComponents = enableReactNativeComponents;
58
+ exports.enableReactNativeComponents_ = enableReactNativeComponents_;
@@ -1,9 +1,14 @@
1
- import { useRef } from 'react';
2
1
  import { useSelector } from '@legendapp/state/react';
2
+ import { useRef } from 'react';
3
3
  import { ActivityIndicator, Button, FlatList, Image, Pressable, ScrollView, SectionList, Switch, Text, TextInput, TouchableWithoutFeedback, View } from 'react-native';
4
4
 
5
5
  // src/react-reactive/enableReactNativeComponents.ts
6
- function enableReactNativeComponents(configure) {
6
+ var isEnabled = false;
7
+ function enableReactNativeComponents_(configure) {
8
+ if (isEnabled) {
9
+ return;
10
+ }
11
+ isEnabled = true;
7
12
  configure({
8
13
  components: {
9
14
  ActivityIndicator,
@@ -48,4 +53,4 @@ function enableReactNativeComponents(configure) {
48
53
  });
49
54
  }
50
55
 
51
- export { enableReactNativeComponents };
56
+ export { enableReactNativeComponents_ };
@@ -1,8 +1,15 @@
1
1
  'use strict';
2
2
 
3
3
  // src/react-reactive/enableReactComponents.ts
4
- function enableReactComponents(config) {
5
- const bindInfo = { value: { handler: "onChange", getValue: (e) => e.target.value, defaultValue: "" } };
4
+ var isEnabled = false;
5
+ function enableReactComponents_(config) {
6
+ if (isEnabled) {
7
+ return;
8
+ }
9
+ isEnabled = true;
10
+ const bindInfo = {
11
+ value: { handler: "onChange", getValue: (e) => e.target.value, defaultValue: "" }
12
+ };
6
13
  const bindInfoInput = Object.assign(
7
14
  { checked: { handler: "onChange", getValue: (e) => e.target.checked } },
8
15
  bindInfo
@@ -18,7 +25,7 @@ function enableReactComponents(config) {
18
25
 
19
26
  // src/react-reactive/enableReactive.ts
20
27
  function enableReactive(config) {
21
- enableReactComponents(config);
28
+ enableReactComponents_(config);
22
29
  }
23
30
 
24
31
  exports.enableReactive = enableReactive;
@@ -1,6 +1,13 @@
1
1
  // src/react-reactive/enableReactComponents.ts
2
- function enableReactComponents(config) {
3
- const bindInfo = { value: { handler: "onChange", getValue: (e) => e.target.value, defaultValue: "" } };
2
+ var isEnabled = false;
3
+ function enableReactComponents_(config) {
4
+ if (isEnabled) {
5
+ return;
6
+ }
7
+ isEnabled = true;
8
+ const bindInfo = {
9
+ value: { handler: "onChange", getValue: (e) => e.target.value, defaultValue: "" }
10
+ };
4
11
  const bindInfoInput = Object.assign(
5
12
  { checked: { handler: "onChange", getValue: (e) => e.target.checked } },
6
13
  bindInfo
@@ -16,7 +23,7 @@ function enableReactComponents(config) {
16
23
 
17
24
  // src/react-reactive/enableReactive.ts
18
25
  function enableReactive(config) {
19
- enableReactComponents(config);
26
+ enableReactComponents_(config);
20
27
  }
21
28
 
22
29
  export { enableReactive };
@@ -1,11 +1,16 @@
1
1
  'use strict';
2
2
 
3
- var react = require('react');
4
3
  var react$1 = require('@legendapp/state/react');
4
+ var react = require('react');
5
5
  var reactNative = require('react-native');
6
6
 
7
7
  // src/react-reactive/enableReactNativeComponents.ts
8
- function enableReactNativeComponents(configure) {
8
+ var isEnabled = false;
9
+ function enableReactNativeComponents_(configure) {
10
+ if (isEnabled) {
11
+ return;
12
+ }
13
+ isEnabled = true;
9
14
  configure({
10
15
  components: {
11
16
  ActivityIndicator: reactNative.ActivityIndicator,
@@ -52,7 +57,7 @@ function enableReactNativeComponents(configure) {
52
57
 
53
58
  // src/react-reactive/enableReactive.native.ts
54
59
  function enableReactive(configure) {
55
- enableReactNativeComponents(configure);
60
+ enableReactNativeComponents_(configure);
56
61
  }
57
62
 
58
63
  exports.enableReactive = enableReactive;
@@ -1,9 +1,14 @@
1
- import { useRef } from 'react';
2
1
  import { useSelector } from '@legendapp/state/react';
2
+ import { useRef } from 'react';
3
3
  import { ActivityIndicator, Button, FlatList, Image, Pressable, ScrollView, SectionList, Switch, Text, TextInput, TouchableWithoutFeedback, View } from 'react-native';
4
4
 
5
5
  // src/react-reactive/enableReactNativeComponents.ts
6
- function enableReactNativeComponents(configure) {
6
+ var isEnabled = false;
7
+ function enableReactNativeComponents_(configure) {
8
+ if (isEnabled) {
9
+ return;
10
+ }
11
+ isEnabled = true;
7
12
  configure({
8
13
  components: {
9
14
  ActivityIndicator,
@@ -50,7 +55,7 @@ function enableReactNativeComponents(configure) {
50
55
 
51
56
  // src/react-reactive/enableReactive.native.ts
52
57
  function enableReactive(configure) {
53
- enableReactNativeComponents(configure);
58
+ enableReactNativeComponents_(configure);
54
59
  }
55
60
 
56
61
  export { enableReactive };
@@ -1,11 +1,16 @@
1
1
  'use strict';
2
2
 
3
- var react = require('react');
4
3
  var react$1 = require('@legendapp/state/react');
4
+ var react = require('react');
5
5
  var reactNative = require('react-native');
6
6
 
7
7
  // src/react-reactive/enableReactNativeComponents.ts
8
- function enableReactNativeComponents(configure) {
8
+ var isEnabled = false;
9
+ function enableReactNativeComponents_(configure) {
10
+ if (isEnabled) {
11
+ return;
12
+ }
13
+ isEnabled = true;
9
14
  configure({
10
15
  components: {
11
16
  ActivityIndicator: reactNative.ActivityIndicator,
@@ -52,7 +57,7 @@ function enableReactNativeComponents(configure) {
52
57
 
53
58
  // src/react-reactive/enableReactive.web.ts
54
59
  function enableReactive(configure) {
55
- enableReactNativeComponents(configure);
60
+ enableReactNativeComponents_(configure);
56
61
  }
57
62
 
58
63
  exports.enableReactive = enableReactive;
@@ -1,9 +1,14 @@
1
- import { useRef } from 'react';
2
1
  import { useSelector } from '@legendapp/state/react';
2
+ import { useRef } from 'react';
3
3
  import { ActivityIndicator, Button, FlatList, Image, Pressable, ScrollView, SectionList, Switch, Text, TextInput, TouchableWithoutFeedback, View } from 'react-native';
4
4
 
5
5
  // src/react-reactive/enableReactNativeComponents.ts
6
- function enableReactNativeComponents(configure) {
6
+ var isEnabled = false;
7
+ function enableReactNativeComponents_(configure) {
8
+ if (isEnabled) {
9
+ return;
10
+ }
11
+ isEnabled = true;
7
12
  configure({
8
13
  components: {
9
14
  ActivityIndicator,
@@ -50,7 +55,7 @@ function enableReactNativeComponents(configure) {
50
55
 
51
56
  // src/react-reactive/enableReactive.web.ts
52
57
  function enableReactive(configure) {
53
- enableReactNativeComponents(configure);
58
+ enableReactNativeComponents_(configure);
54
59
  }
55
60
 
56
61
  export { enableReactive };
@@ -0,0 +1,6 @@
1
+ import { FCReactiveObject } from '@legendapp/state/react';
2
+
3
+ type IReactive = FCReactiveObject<JSX.IntrinsicElements>;
4
+ declare const $React: IReactive;
5
+
6
+ export { $React };
package/react-web.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { FCReactiveObject } from '@legendapp/state/react';
2
+
3
+ type IReactive = FCReactiveObject<JSX.IntrinsicElements>;
4
+ declare const $React: IReactive;
5
+
6
+ export { $React };
package/react-web.js ADDED
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+ var react$1 = require('@legendapp/state/react');
5
+ var react = require('react');
6
+
7
+ // src/react-web/$React.tsx
8
+ var bindInfoOneWay = {
9
+ value: { handler: "onChange", getValue: (e) => e.target.value, defaultValue: "" }
10
+ };
11
+ var bindInfoInput = Object.assign(
12
+ { checked: { handler: "onChange", getValue: (e) => e.target.checked } },
13
+ bindInfoOneWay
14
+ );
15
+ var binders = /* @__PURE__ */ new Map([
16
+ ["input", bindInfoInput],
17
+ ["textarea", bindInfoOneWay],
18
+ ["select", bindInfoOneWay]
19
+ ]);
20
+ var $React = new Proxy(
21
+ {},
22
+ {
23
+ get(target, p) {
24
+ if (!target[p]) {
25
+ const render = react.forwardRef((props, ref) => {
26
+ const propsOut = { ...props };
27
+ if (ref && (state.isFunction(ref) || !state.isEmpty(ref))) {
28
+ propsOut.ref = ref;
29
+ }
30
+ return react.createElement(p, propsOut);
31
+ });
32
+ target[p] = react$1.reactive(render, [], binders.get(p));
33
+ }
34
+ return target[p];
35
+ }
36
+ }
37
+ );
38
+
39
+ exports.$React = $React;
package/react-web.mjs ADDED
@@ -0,0 +1,37 @@
1
+ import { isFunction, isEmpty } from '@legendapp/state';
2
+ import { reactive } from '@legendapp/state/react';
3
+ import { forwardRef, createElement } from 'react';
4
+
5
+ // src/react-web/$React.tsx
6
+ var bindInfoOneWay = {
7
+ value: { handler: "onChange", getValue: (e) => e.target.value, defaultValue: "" }
8
+ };
9
+ var bindInfoInput = Object.assign(
10
+ { checked: { handler: "onChange", getValue: (e) => e.target.checked } },
11
+ bindInfoOneWay
12
+ );
13
+ var binders = /* @__PURE__ */ new Map([
14
+ ["input", bindInfoInput],
15
+ ["textarea", bindInfoOneWay],
16
+ ["select", bindInfoOneWay]
17
+ ]);
18
+ var $React = new Proxy(
19
+ {},
20
+ {
21
+ get(target, p) {
22
+ if (!target[p]) {
23
+ const render = forwardRef((props, ref) => {
24
+ const propsOut = { ...props };
25
+ if (ref && (isFunction(ref) || !isEmpty(ref))) {
26
+ propsOut.ref = ref;
27
+ }
28
+ return createElement(p, propsOut);
29
+ });
30
+ target[p] = reactive(render, [], binders.get(p));
31
+ }
32
+ return target[p];
33
+ }
34
+ }
35
+ );
36
+
37
+ export { $React };
package/react.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import * as react from 'react';
2
- import { ReactNode, ReactElement, FC, LegacyRef, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction, ComponentClass } from 'react';
3
- import { ObservableParam, Observable, ObservableBoolean, Selector, RecursiveValueOrFunction, ObserveOptions, ObserveEvent, ObserveEventCallback } from '@legendapp/state';
1
+ import * as React from 'react';
2
+ import { ReactNode, ReactElement, FC, NamedExoticComponent, LegacyRef, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction, ComponentClass } from 'react';
3
+ import { ObservableParam, Observable, ObservableBoolean, Selector, GetOptions, RecursiveValueOrFunction, ObserveOptions, ObserveEvent, ObserveEventCallback } from '@legendapp/state';
4
4
 
5
5
  declare function Computed({ children }: {
6
6
  children: ObservableParam | (() => ReactNode);
@@ -22,11 +22,14 @@ declare function For<T, TProps>({ each, optimized: isOptimized, item, itemProps,
22
22
  declare function usePauseProvider(): {
23
23
  PauseProvider: ({ children }: {
24
24
  children: ReactNode;
25
- }) => react.FunctionComponentElement<react.ProviderProps<ObservableBoolean>>;
25
+ }) => React.FunctionComponentElement<React.ProviderProps<ObservableBoolean>>;
26
26
  isPaused$: ObservableBoolean;
27
27
  };
28
28
 
29
- declare const Memo: react.MemoExoticComponent<typeof Computed>;
29
+ declare const Memo: NamedExoticComponent<{
30
+ children: any;
31
+ scoped?: boolean;
32
+ }>;
30
33
 
31
34
  interface IReactive {
32
35
  }
@@ -54,11 +57,11 @@ declare function Switch<T extends object>({ value, children, }: {
54
57
  children: Partial<Record<keyof T | 'null' | 'undefined' | 'default', () => ReactNode>>;
55
58
  }): ReactElement | null;
56
59
  declare function Switch<T extends string | number | symbol>({ value, children, }: {
57
- value?: Selector<T>;
60
+ value?: Selector<T | undefined | null>;
58
61
  children: Partial<Record<T | 'null' | 'undefined' | 'default', () => ReactNode>>;
59
62
  }): ReactElement | null;
60
63
  declare function Switch<T extends boolean>({ value, children, }: {
61
- value?: Selector<T>;
64
+ value?: Selector<T | undefined | null>;
62
65
  children: Partial<Record<'false' | 'true' | 'null' | 'undefined' | 'default', () => ReactNode>>;
63
66
  }): ReactElement | null;
64
67
  declare function Switch<T>({ value, children, }: {
@@ -71,20 +74,20 @@ type ShapeWithNew$<T> = Partial<Omit<T, 'children'>> & {
71
74
  } & {
72
75
  children?: Selector<ReactNode>;
73
76
  };
74
- interface BindKey<P> {
75
- handler?: keyof P;
76
- getValue?: (e: any) => any;
77
+ interface BindKey<P, K extends keyof P = keyof P> {
78
+ handler?: K;
79
+ getValue?: P[K] extends infer T ? T extends (...args: any) => any ? (params: Parameters<T>[0]) => any : (e: any) => any : (e: any) => any;
77
80
  defaultValue?: any;
78
81
  selector?: (propsOut: Record<string, any>, p: Observable<any>) => any;
79
82
  }
80
- type BindKeys<P = any> = Record<keyof P, BindKey<P>>;
83
+ type BindKeys<P = any, K extends keyof P = keyof P> = Partial<Record<K, BindKey<P>>>;
81
84
  type FCReactiveObject<T> = {
82
85
  [K in keyof T]: FC<ShapeWithNew$<T[K]>>;
83
86
  };
84
87
  type FCReactive<P, P2> = P & FC<ShapeWithNew$<P2> & {
85
88
  ref?: LegacyRef<P> | undefined;
86
89
  }>;
87
- interface UseSelectorOptions {
90
+ interface UseSelectorOptions extends GetOptions {
88
91
  suspense?: boolean;
89
92
  skipCheck?: boolean;
90
93
  }
@@ -99,13 +102,26 @@ type ObjectShapeWith$<T> = {
99
102
  [K in keyof T]: T[K] extends FC<infer P> ? FC<ShapeWith$<P>> : T[K];
100
103
  };
101
104
  type ExtractFCPropsType<T> = T extends FC<infer P> ? P : never;
105
+ type ReactifyProps<T, K extends keyof T> = Omit<T, K> & {
106
+ [P in K]: Selector<T[P]>;
107
+ };
102
108
  declare const hasSymbol: false | ((key: string) => symbol);
103
109
  declare function observer<P extends FC<any>>(component: P): P;
104
- declare function reactive<T extends FC<any>>(component: T, bindKeys?: BindKeys<ExtractFCPropsType<T>>): T | FC<ShapeWith$<ExtractFCPropsType<T>>>;
105
- declare function reactive<T extends FC<any>, T2 extends keyof ExtractFCPropsType<T>>(component: T, bindKeys?: BindKeys<ExtractFCPropsType<T>>): T | FC<ShapeWithPick$<ExtractFCPropsType<T>, T2>>;
106
- declare function reactiveObserver<T extends FC<any>>(component: T, bindKeys?: BindKeys<ExtractFCPropsType<T>>): T | FC<ShapeWith$<ExtractFCPropsType<T>>>;
107
- declare function reactiveObserver<T extends FC<any>, T2 extends keyof ExtractFCPropsType<T>>(component: T, bindKeys?: BindKeys<ExtractFCPropsType<T>>): T | FC<ShapeWithPick$<ExtractFCPropsType<T>, T2>>;
108
- declare function reactiveComponents<P extends Record<string, FC>>(components: P): ObjectShapeWith$<P>;
110
+ declare function reactive<T extends object>(component: React.ComponentClass<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.FC<ShapeWith$<T>>;
111
+ declare function reactive<T extends object>(component: React.FC<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.FC<ShapeWith$<T>>;
112
+ declare function reactive<T extends object>(component: React.ForwardRefExoticComponent<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
113
+ declare function reactive<T extends object, K extends keyof T>(component: React.FC<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.FC<ReactifyProps<T, K>>;
114
+ declare function reactive<T extends object, K extends keyof T>(component: React.ForwardRefExoticComponent<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.ForwardRefExoticComponent<ReactifyProps<T, K>>;
115
+ declare function reactive<T extends object>(component: React.ComponentClass<T>): React.ComponentClass<ShapeWith$<T>>;
116
+ declare function reactive<T extends object>(component: React.FC<T>): React.FC<ShapeWith$<T>>;
117
+ declare function reactive<T extends object>(component: React.ForwardRefExoticComponent<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
118
+ declare function reactiveObserver<T extends object>(component: React.FC<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.FC<ShapeWith$<T>>;
119
+ declare function reactiveObserver<T extends object>(component: React.ForwardRefExoticComponent<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
120
+ declare function reactiveObserver<T extends object, K extends keyof T>(component: React.FC<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.FC<ReactifyProps<T, K>>;
121
+ declare function reactiveObserver<T extends object, K extends keyof T>(component: React.ForwardRefExoticComponent<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.ForwardRefExoticComponent<ReactifyProps<T, K>>;
122
+ declare function reactiveObserver<T extends object>(component: React.FC<T>): React.FC<ShapeWith$<T>>;
123
+ declare function reactiveObserver<T extends object>(component: React.ForwardRefExoticComponent<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
124
+ declare function reactiveComponents<P extends Record<string, any>>(components: P): ObjectShapeWith$<P>;
109
125
 
110
126
  declare function useComputed<T>(get: () => T | Promise<T>): Observable<T>;
111
127
  declare function useComputed<T>(get: () => T | Promise<T>, deps: any[]): Observable<T>;
@@ -151,12 +167,14 @@ declare function useSelector<T>(selector: Selector<T>, options?: UseSelectorOpti
151
167
  declare function useUnmount(fn: () => void): void;
152
168
  declare const useUnmountOnce: typeof useUnmount;
153
169
 
154
- declare function useWhen<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
155
- declare function useWhenReady<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
170
+ declare function useWhen<T>(predicate: Selector<T>): Promise<T>;
171
+ declare function useWhen<T, T2>(predicate: Selector<T>, effect: (value: T) => T2): Promise<T2>;
172
+ declare function useWhenReady<T>(predicate: Selector<T>): Promise<T>;
173
+ declare function useWhenReady<T, T2>(predicate: Selector<T>, effect: (value: T) => T2 | (() => T2)): Promise<T2>;
156
174
 
157
175
  declare function configureReactive({ components, binders, }: {
158
176
  components?: Record<string, FC | ComponentClass<any>>;
159
177
  binders?: Record<string, BindKeys>;
160
178
  }): void;
161
179
 
162
- export { type BindKey, type BindKeys, Computed, type ExtractFCPropsType, type FCReactive, type FCReactiveObject, For, type IReactive, Memo, type ObjectShapeWith$, Reactive, type ShapeWith$, type ShapeWithNew$, type ShapeWithPick$, Show, Switch, type UseObserveOptions, type UseSelectorOptions, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
180
+ export { type BindKey, type BindKeys, Computed, type ExtractFCPropsType, type FCReactive, type FCReactiveObject, For, type IReactive, Memo, type ObjectShapeWith$, type ReactifyProps, Reactive, type ShapeWith$, type ShapeWithNew$, type ShapeWithPick$, Show, Switch, type UseObserveOptions, type UseSelectorOptions, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useSelector as use$, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
package/react.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import * as react from 'react';
2
- import { ReactNode, ReactElement, FC, LegacyRef, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction, ComponentClass } from 'react';
3
- import { ObservableParam, Observable, ObservableBoolean, Selector, RecursiveValueOrFunction, ObserveOptions, ObserveEvent, ObserveEventCallback } from '@legendapp/state';
1
+ import * as React from 'react';
2
+ import { ReactNode, ReactElement, FC, NamedExoticComponent, LegacyRef, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction, ComponentClass } from 'react';
3
+ import { ObservableParam, Observable, ObservableBoolean, Selector, GetOptions, RecursiveValueOrFunction, ObserveOptions, ObserveEvent, ObserveEventCallback } from '@legendapp/state';
4
4
 
5
5
  declare function Computed({ children }: {
6
6
  children: ObservableParam | (() => ReactNode);
@@ -22,11 +22,14 @@ declare function For<T, TProps>({ each, optimized: isOptimized, item, itemProps,
22
22
  declare function usePauseProvider(): {
23
23
  PauseProvider: ({ children }: {
24
24
  children: ReactNode;
25
- }) => react.FunctionComponentElement<react.ProviderProps<ObservableBoolean>>;
25
+ }) => React.FunctionComponentElement<React.ProviderProps<ObservableBoolean>>;
26
26
  isPaused$: ObservableBoolean;
27
27
  };
28
28
 
29
- declare const Memo: react.MemoExoticComponent<typeof Computed>;
29
+ declare const Memo: NamedExoticComponent<{
30
+ children: any;
31
+ scoped?: boolean;
32
+ }>;
30
33
 
31
34
  interface IReactive {
32
35
  }
@@ -54,11 +57,11 @@ declare function Switch<T extends object>({ value, children, }: {
54
57
  children: Partial<Record<keyof T | 'null' | 'undefined' | 'default', () => ReactNode>>;
55
58
  }): ReactElement | null;
56
59
  declare function Switch<T extends string | number | symbol>({ value, children, }: {
57
- value?: Selector<T>;
60
+ value?: Selector<T | undefined | null>;
58
61
  children: Partial<Record<T | 'null' | 'undefined' | 'default', () => ReactNode>>;
59
62
  }): ReactElement | null;
60
63
  declare function Switch<T extends boolean>({ value, children, }: {
61
- value?: Selector<T>;
64
+ value?: Selector<T | undefined | null>;
62
65
  children: Partial<Record<'false' | 'true' | 'null' | 'undefined' | 'default', () => ReactNode>>;
63
66
  }): ReactElement | null;
64
67
  declare function Switch<T>({ value, children, }: {
@@ -71,20 +74,20 @@ type ShapeWithNew$<T> = Partial<Omit<T, 'children'>> & {
71
74
  } & {
72
75
  children?: Selector<ReactNode>;
73
76
  };
74
- interface BindKey<P> {
75
- handler?: keyof P;
76
- getValue?: (e: any) => any;
77
+ interface BindKey<P, K extends keyof P = keyof P> {
78
+ handler?: K;
79
+ getValue?: P[K] extends infer T ? T extends (...args: any) => any ? (params: Parameters<T>[0]) => any : (e: any) => any : (e: any) => any;
77
80
  defaultValue?: any;
78
81
  selector?: (propsOut: Record<string, any>, p: Observable<any>) => any;
79
82
  }
80
- type BindKeys<P = any> = Record<keyof P, BindKey<P>>;
83
+ type BindKeys<P = any, K extends keyof P = keyof P> = Partial<Record<K, BindKey<P>>>;
81
84
  type FCReactiveObject<T> = {
82
85
  [K in keyof T]: FC<ShapeWithNew$<T[K]>>;
83
86
  };
84
87
  type FCReactive<P, P2> = P & FC<ShapeWithNew$<P2> & {
85
88
  ref?: LegacyRef<P> | undefined;
86
89
  }>;
87
- interface UseSelectorOptions {
90
+ interface UseSelectorOptions extends GetOptions {
88
91
  suspense?: boolean;
89
92
  skipCheck?: boolean;
90
93
  }
@@ -99,13 +102,26 @@ type ObjectShapeWith$<T> = {
99
102
  [K in keyof T]: T[K] extends FC<infer P> ? FC<ShapeWith$<P>> : T[K];
100
103
  };
101
104
  type ExtractFCPropsType<T> = T extends FC<infer P> ? P : never;
105
+ type ReactifyProps<T, K extends keyof T> = Omit<T, K> & {
106
+ [P in K]: Selector<T[P]>;
107
+ };
102
108
  declare const hasSymbol: false | ((key: string) => symbol);
103
109
  declare function observer<P extends FC<any>>(component: P): P;
104
- declare function reactive<T extends FC<any>>(component: T, bindKeys?: BindKeys<ExtractFCPropsType<T>>): T | FC<ShapeWith$<ExtractFCPropsType<T>>>;
105
- declare function reactive<T extends FC<any>, T2 extends keyof ExtractFCPropsType<T>>(component: T, bindKeys?: BindKeys<ExtractFCPropsType<T>>): T | FC<ShapeWithPick$<ExtractFCPropsType<T>, T2>>;
106
- declare function reactiveObserver<T extends FC<any>>(component: T, bindKeys?: BindKeys<ExtractFCPropsType<T>>): T | FC<ShapeWith$<ExtractFCPropsType<T>>>;
107
- declare function reactiveObserver<T extends FC<any>, T2 extends keyof ExtractFCPropsType<T>>(component: T, bindKeys?: BindKeys<ExtractFCPropsType<T>>): T | FC<ShapeWithPick$<ExtractFCPropsType<T>, T2>>;
108
- declare function reactiveComponents<P extends Record<string, FC>>(components: P): ObjectShapeWith$<P>;
110
+ declare function reactive<T extends object>(component: React.ComponentClass<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.FC<ShapeWith$<T>>;
111
+ declare function reactive<T extends object>(component: React.FC<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.FC<ShapeWith$<T>>;
112
+ declare function reactive<T extends object>(component: React.ForwardRefExoticComponent<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
113
+ declare function reactive<T extends object, K extends keyof T>(component: React.FC<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.FC<ReactifyProps<T, K>>;
114
+ declare function reactive<T extends object, K extends keyof T>(component: React.ForwardRefExoticComponent<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.ForwardRefExoticComponent<ReactifyProps<T, K>>;
115
+ declare function reactive<T extends object>(component: React.ComponentClass<T>): React.ComponentClass<ShapeWith$<T>>;
116
+ declare function reactive<T extends object>(component: React.FC<T>): React.FC<ShapeWith$<T>>;
117
+ declare function reactive<T extends object>(component: React.ForwardRefExoticComponent<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
118
+ declare function reactiveObserver<T extends object>(component: React.FC<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.FC<ShapeWith$<T>>;
119
+ declare function reactiveObserver<T extends object>(component: React.ForwardRefExoticComponent<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
120
+ declare function reactiveObserver<T extends object, K extends keyof T>(component: React.FC<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.FC<ReactifyProps<T, K>>;
121
+ declare function reactiveObserver<T extends object, K extends keyof T>(component: React.ForwardRefExoticComponent<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.ForwardRefExoticComponent<ReactifyProps<T, K>>;
122
+ declare function reactiveObserver<T extends object>(component: React.FC<T>): React.FC<ShapeWith$<T>>;
123
+ declare function reactiveObserver<T extends object>(component: React.ForwardRefExoticComponent<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
124
+ declare function reactiveComponents<P extends Record<string, any>>(components: P): ObjectShapeWith$<P>;
109
125
 
110
126
  declare function useComputed<T>(get: () => T | Promise<T>): Observable<T>;
111
127
  declare function useComputed<T>(get: () => T | Promise<T>, deps: any[]): Observable<T>;
@@ -151,12 +167,14 @@ declare function useSelector<T>(selector: Selector<T>, options?: UseSelectorOpti
151
167
  declare function useUnmount(fn: () => void): void;
152
168
  declare const useUnmountOnce: typeof useUnmount;
153
169
 
154
- declare function useWhen<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
155
- declare function useWhenReady<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
170
+ declare function useWhen<T>(predicate: Selector<T>): Promise<T>;
171
+ declare function useWhen<T, T2>(predicate: Selector<T>, effect: (value: T) => T2): Promise<T2>;
172
+ declare function useWhenReady<T>(predicate: Selector<T>): Promise<T>;
173
+ declare function useWhenReady<T, T2>(predicate: Selector<T>, effect: (value: T) => T2 | (() => T2)): Promise<T2>;
156
174
 
157
175
  declare function configureReactive({ components, binders, }: {
158
176
  components?: Record<string, FC | ComponentClass<any>>;
159
177
  binders?: Record<string, BindKeys>;
160
178
  }): void;
161
179
 
162
- export { type BindKey, type BindKeys, Computed, type ExtractFCPropsType, type FCReactive, type FCReactiveObject, For, type IReactive, Memo, type ObjectShapeWith$, Reactive, type ShapeWith$, type ShapeWithNew$, type ShapeWithPick$, Show, Switch, type UseObserveOptions, type UseSelectorOptions, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
180
+ export { type BindKey, type BindKeys, Computed, type ExtractFCPropsType, type FCReactive, type FCReactiveObject, For, type IReactive, Memo, type ObjectShapeWith$, type ReactifyProps, Reactive, type ShapeWith$, type ShapeWithNew$, type ShapeWithPick$, Show, Switch, type UseObserveOptions, type UseSelectorOptions, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useSelector as use$, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };