@akanjs/store 0.9.41 → 0.9.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/src/baseSt.js CHANGED
@@ -65,8 +65,7 @@ let RootStore = class extends (0, import_storeDecorators.scalarStateOf)("root",
65
65
  getSelf: async ({ reset } = {}) => {
66
66
  },
67
67
  deviceToken: "",
68
- currentPath: "",
69
- connectStatus: "disconnected"
68
+ currentPath: ""
70
69
  }) {
71
70
  setDevMode(value) {
72
71
  this.set({ devMode: value });
@@ -126,7 +126,10 @@ const createState = (gql) => {
126
126
  };
127
127
  return Object.assign(acc, singleSliceState);
128
128
  }, {});
129
- return { ...baseState, ...sliceState };
129
+ return {
130
+ ...baseState,
131
+ ...sliceState
132
+ };
130
133
  };
131
134
  const createActions = (gql) => {
132
135
  const formSetterActions = makeFormSetter(gql);
@@ -253,7 +256,6 @@ const makeFormSetter = (gql) => {
253
256
  const makeActions = (gql) => {
254
257
  const [fieldName, className] = [(0, import_common.lowerlize)(gql.refName), (0, import_common.capitalize)(gql.refName)];
255
258
  const modelRef = (0, import_constant.getFullModelRef)(className);
256
- const lightModelRef = (0, import_constant.getLightModelRef)(modelRef);
257
259
  const names = {
258
260
  model: fieldName,
259
261
  _model: `_${fieldName}`,
@@ -856,9 +858,6 @@ const scalarStateOf = (refName, state) => {
856
858
  const applyState = state;
857
859
  setStoreMeta(refName, { refName, useKeys: Object.keys(applyState), doKeys: [], slices: [] });
858
860
  class StateStore {
859
- get;
860
- set;
861
- pick;
862
861
  }
863
862
  Object.keys(applyState).forEach(
864
863
  (key) => Object.defineProperty(StateStore.prototype, key, { value: applyState[key] })
@@ -1042,39 +1041,9 @@ const makeStore = (st, storeRef, { library } = {}) => {
1042
1041
  );
1043
1042
  return createSelectors(zustandStore, st);
1044
1043
  };
1045
- const MixStore = (s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30) => {
1046
- const stores = [
1047
- s1,
1048
- s2,
1049
- s3,
1050
- s4,
1051
- s5,
1052
- s6,
1053
- s7,
1054
- s8,
1055
- s9,
1056
- s10,
1057
- s11,
1058
- s12,
1059
- s13,
1060
- s14,
1061
- s15,
1062
- s16,
1063
- s17,
1064
- s18,
1065
- s19,
1066
- s20,
1067
- s21,
1068
- s22,
1069
- s23,
1070
- s24,
1071
- s25,
1072
- s26,
1073
- s27,
1074
- s28,
1075
- s29,
1076
- s30
1077
- ].filter((s) => !!s);
1044
+ const MixStore = (...stores) => {
1045
+ if (stores.length === 0)
1046
+ throw new Error("MixStores requires at least one store");
1078
1047
  class Mix {
1079
1048
  }
1080
1049
  (0, import_common.applyMixins)(Mix, stores);
package/esm/src/baseSt.js CHANGED
@@ -43,8 +43,7 @@ let RootStore = class extends scalarStateOf("root", {
43
43
  getSelf: async ({ reset } = {}) => {
44
44
  },
45
45
  deviceToken: "",
46
- currentPath: "",
47
- connectStatus: "disconnected"
46
+ currentPath: ""
48
47
  }) {
49
48
  setDevMode(value) {
50
49
  this.set({ devMode: value });
@@ -1,5 +1,7 @@
1
1
  "use client";
2
- import { DataList } from "@akanjs/base";
2
+ import {
3
+ DataList
4
+ } from "@akanjs/base";
3
5
  import {
4
6
  applyMixins,
5
7
  capitalize,
@@ -12,8 +14,7 @@ import {
12
14
  import {
13
15
  getClassMeta,
14
16
  getFieldMetas,
15
- getFullModelRef,
16
- getLightModelRef
17
+ getFullModelRef
17
18
  } from "@akanjs/constant";
18
19
  import { msg } from "@akanjs/dictionary";
19
20
  import {
@@ -111,7 +112,10 @@ const createState = (gql) => {
111
112
  };
112
113
  return Object.assign(acc, singleSliceState);
113
114
  }, {});
114
- return { ...baseState, ...sliceState };
115
+ return {
116
+ ...baseState,
117
+ ...sliceState
118
+ };
115
119
  };
116
120
  const createActions = (gql) => {
117
121
  const formSetterActions = makeFormSetter(gql);
@@ -238,7 +242,6 @@ const makeFormSetter = (gql) => {
238
242
  const makeActions = (gql) => {
239
243
  const [fieldName, className] = [lowerlize(gql.refName), capitalize(gql.refName)];
240
244
  const modelRef = getFullModelRef(className);
241
- const lightModelRef = getLightModelRef(modelRef);
242
245
  const names = {
243
246
  model: fieldName,
244
247
  _model: `_${fieldName}`,
@@ -841,9 +844,6 @@ const scalarStateOf = (refName, state) => {
841
844
  const applyState = state;
842
845
  setStoreMeta(refName, { refName, useKeys: Object.keys(applyState), doKeys: [], slices: [] });
843
846
  class StateStore {
844
- get;
845
- set;
846
- pick;
847
847
  }
848
848
  Object.keys(applyState).forEach(
849
849
  (key) => Object.defineProperty(StateStore.prototype, key, { value: applyState[key] })
@@ -1027,39 +1027,9 @@ const makeStore = (st, storeRef, { library } = {}) => {
1027
1027
  );
1028
1028
  return createSelectors(zustandStore, st);
1029
1029
  };
1030
- const MixStore = (s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30) => {
1031
- const stores = [
1032
- s1,
1033
- s2,
1034
- s3,
1035
- s4,
1036
- s5,
1037
- s6,
1038
- s7,
1039
- s8,
1040
- s9,
1041
- s10,
1042
- s11,
1043
- s12,
1044
- s13,
1045
- s14,
1046
- s15,
1047
- s16,
1048
- s17,
1049
- s18,
1050
- s19,
1051
- s20,
1052
- s21,
1053
- s22,
1054
- s23,
1055
- s24,
1056
- s25,
1057
- s26,
1058
- s27,
1059
- s28,
1060
- s29,
1061
- s30
1062
- ].filter((s) => !!s);
1030
+ const MixStore = (...stores) => {
1031
+ if (stores.length === 0)
1032
+ throw new Error("MixStores requires at least one store");
1063
1033
  class Mix {
1064
1034
  }
1065
1035
  applyMixins(Mix, stores);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/store",
3
- "version": "0.9.41",
3
+ "version": "0.9.43",
4
4
  "sourceType": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
package/src/baseSt.d.ts CHANGED
@@ -6,81 +6,43 @@ declare const defaultMessage: {
6
6
  duration: number;
7
7
  key: string;
8
8
  };
9
- declare const RootStore_base: import("@akanjs/base").Type<{
10
- readonly get: () => {
11
- csrLoaded: boolean;
12
- path: string;
13
- pathname: string;
14
- params: {
15
- [key: string]: string;
16
- };
17
- searchParams: {
18
- [key: string]: string;
19
- };
20
- theme: string;
21
- prefix: string | undefined;
22
- innerWidth: number;
23
- innerHeight: number;
24
- responsive: Responsive;
25
- uiOperation: "sleep" | "loading" | "idle";
26
- messages: (typeof defaultMessage)[];
27
- tryJwt: string | null;
28
- trySignalType: SignalType;
29
- tryRoles: RoleType[];
30
- tryAccount: {
31
- __InternalArg__: "Account";
32
- self?: import("@akanjs/signal").Self;
33
- me?: import("@akanjs/signal").Me;
34
- appName: string;
35
- environment: import("@akanjs/base").Environment;
36
- };
37
- keyboardHeight: number;
38
- pageState: import("@akanjs/client").PageState;
39
- devMode: boolean;
40
- getSelf: ({ reset }?: {
41
- reset?: boolean;
42
- }) => Promise<void>;
43
- deviceToken: string;
44
- currentPath: string;
45
- connectStatus: "connected" | "connecting" | "disconnected";
9
+ declare const RootStore_base: import("@akanjs/base").Type<import("./storeDecorators").SetGet<{
10
+ csrLoaded: boolean;
11
+ path: string;
12
+ pathname: string;
13
+ params: {
14
+ [key: string]: string;
46
15
  };
47
- readonly set: (state: Partial<{
48
- csrLoaded: boolean;
49
- path: string;
50
- pathname: string;
51
- params: {
52
- [key: string]: string;
53
- };
54
- searchParams: {
55
- [key: string]: string;
56
- };
57
- theme: string;
58
- prefix: string | undefined;
59
- innerWidth: number;
60
- innerHeight: number;
61
- responsive: Responsive;
62
- uiOperation: "sleep" | "loading" | "idle";
63
- messages: (typeof defaultMessage)[];
64
- tryJwt: string | null;
65
- trySignalType: SignalType;
66
- tryRoles: RoleType[];
67
- tryAccount: {
68
- __InternalArg__: "Account";
69
- self?: import("@akanjs/signal").Self;
70
- me?: import("@akanjs/signal").Me;
71
- appName: string;
72
- environment: import("@akanjs/base").Environment;
73
- };
74
- keyboardHeight: number;
75
- pageState: import("@akanjs/client").PageState;
76
- devMode: boolean;
77
- getSelf: ({ reset }?: {
78
- reset?: boolean;
79
- }) => Promise<void>;
80
- deviceToken: string;
81
- currentPath: string;
82
- connectStatus: "connected" | "connecting" | "disconnected";
83
- }> | ((state: {
16
+ searchParams: {
17
+ [key: string]: string;
18
+ };
19
+ theme: string;
20
+ prefix: string | undefined;
21
+ innerWidth: number;
22
+ innerHeight: number;
23
+ responsive: Responsive;
24
+ uiOperation: "sleep" | "loading" | "idle";
25
+ messages: (typeof defaultMessage)[];
26
+ tryJwt: string | null;
27
+ trySignalType: SignalType;
28
+ tryRoles: RoleType[];
29
+ tryAccount: {
30
+ __InternalArg__: "Account";
31
+ self?: import("@akanjs/signal").Self;
32
+ me?: import("@akanjs/signal").Me;
33
+ appName: string;
34
+ environment: import("@akanjs/base").Environment;
35
+ };
36
+ keyboardHeight: number;
37
+ pageState: import("@akanjs/client").PageState;
38
+ devMode: boolean;
39
+ getSelf: ({ reset }?: {
40
+ reset?: boolean;
41
+ }) => Promise<void>;
42
+ deviceToken: string;
43
+ currentPath: string;
44
+ }> & {
45
+ __STATE_INFO__: {
84
46
  csrLoaded: boolean;
85
47
  path: string;
86
48
  pathname: string;
@@ -115,46 +77,19 @@ declare const RootStore_base: import("@akanjs/base").Type<{
115
77
  }) => Promise<void>;
116
78
  deviceToken: string;
117
79
  currentPath: string;
118
- connectStatus: "connected" | "connecting" | "disconnected";
119
- }) => any)) => void;
120
- readonly pick: (...fields: ("path" | "params" | "prefix" | "pathname" | "searchParams" | "innerHeight" | "innerWidth" | "csrLoaded" | "theme" | "tryAccount" | "keyboardHeight" | "pageState" | "devMode" | "getSelf" | "responsive" | "uiOperation" | "messages" | "tryJwt" | "trySignalType" | "tryRoles" | "deviceToken" | "currentPath" | "connectStatus")[]) => {
121
- path: string;
122
- params: {
123
- [key: string]: string;
124
- };
125
- prefix: string;
126
- pathname: string;
127
- searchParams: {
128
- [key: string]: string;
129
- };
130
- innerHeight: number;
131
- innerWidth: number;
132
- csrLoaded: boolean;
133
- theme: string;
134
- tryAccount: {
135
- __InternalArg__: "Account";
136
- self?: import("@akanjs/signal").Self;
137
- me?: import("@akanjs/signal").Me;
138
- appName: string;
139
- environment: import("@akanjs/base").Environment;
140
- };
141
- keyboardHeight: number;
142
- pageState: import("@akanjs/client").PageState;
143
- devMode: boolean;
144
- getSelf: ({ reset }?: {
145
- reset?: boolean;
146
- }) => Promise<void>;
147
- responsive: Responsive;
148
- uiOperation: "sleep" | "idle";
149
- messages: (typeof defaultMessage)[];
150
- tryJwt: string;
151
- trySignalType: SignalType;
152
- tryRoles: RoleType[];
153
- deviceToken: string;
154
- currentPath: string;
155
- connectStatus: "connected" | "connecting" | "disconnected";
156
80
  };
157
- } & {
81
+ __SLICE_INFO__: {};
82
+ }>;
83
+ export declare class RootStore extends RootStore_base {
84
+ setDevMode(value: boolean): void;
85
+ setWindowSize(): void;
86
+ showMessage(message: {
87
+ content: string | string[];
88
+ } & Partial<typeof defaultMessage>): void;
89
+ hideMessage(key: string): void;
90
+ }
91
+ export declare const store: typeof RootStore;
92
+ export declare const st: import("./storeDecorators").WithSelectors<{
158
93
  csrLoaded: boolean;
159
94
  path: string;
160
95
  pathname: string;
@@ -189,16 +124,5 @@ declare const RootStore_base: import("@akanjs/base").Type<{
189
124
  }) => Promise<void>;
190
125
  deviceToken: string;
191
126
  currentPath: string;
192
- connectStatus: "connected" | "connecting" | "disconnected";
193
- }>;
194
- export declare class RootStore extends RootStore_base {
195
- setDevMode(value: boolean): void;
196
- setWindowSize(): void;
197
- showMessage(message: {
198
- content: string | string[];
199
- } & Partial<typeof defaultMessage>): void;
200
- hideMessage(key: string): void;
201
- }
202
- export declare const store: typeof RootStore;
203
- export declare const st: import("./storeDecorators").WithSelectors<RootStore> & import("./storeDecorators").WithSelectors<any>;
127
+ }, RootStore, {}>;
204
128
  export {};
@@ -1,67 +1,69 @@
1
- import { DataList, type Dayjs, type Prettify, Type } from "@akanjs/base";
1
+ import { DataList, type MergeAllKeyOfTypes, type MergeAllTypes, type MergedValues, type Prettify, Type } from "@akanjs/base";
2
2
  import { type FetchPolicy } from "@akanjs/common";
3
- import { DocumentModel, type FilterType, type GetStateObject, ProtoFile, QueryOf, type SortOf } from "@akanjs/constant";
4
- import { DbGraphQL, DefaultOf, FetchInitForm, FieldState, FilterListArgs, FilterStateArgs, SliceMeta } from "@akanjs/signal";
3
+ import { DefaultOf, DocumentModel, FieldState, type FilterType, type GetActionObject, type GetStateObject, ProtoFile, QueryOf, type SortOf } from "@akanjs/constant";
4
+ import { DbGraphQL, type DynamicSliceArgMap, FetchInitForm } from "@akanjs/signal";
5
5
  import { RefObject } from "react";
6
6
  import { Mutate, StoreApi } from "zustand";
7
7
  import type { Submit } from "./types";
8
- export declare const baseSt: WithSelectors<any>;
9
- type BaseState<T extends string, Full> = {
10
- [K in Uncapitalize<T>]: Full | null;
8
+ export declare const baseSt: WithSelectors<unknown, unknown, {}>;
9
+ type BaseState<T extends string, Full, _Default = DefaultOf<Full>> = {
10
+ [K in T]: Full | null;
11
11
  } & {
12
- [K in `${Uncapitalize<T>}Loading`]: string | boolean;
12
+ [K in `${T}Loading`]: string | boolean;
13
13
  } & {
14
- [K in `${Uncapitalize<T>}Form`]: DefaultOf<Full>;
14
+ [K in `${T}Form`]: _Default;
15
15
  } & {
16
- [K in `${Uncapitalize<T>}FormLoading`]: string | boolean;
16
+ [K in `${T}FormLoading`]: string | boolean;
17
17
  } & {
18
- [K in `${Uncapitalize<T>}Submit`]: Submit;
18
+ [K in `${T}Submit`]: Submit;
19
19
  } & {
20
- [K in `${Uncapitalize<T>}ViewAt`]: Date;
20
+ [K in `${T}ViewAt`]: Date;
21
21
  } & {
22
- [K in `${Uncapitalize<T>}Modal`]: string | null;
22
+ [K in `${T}Modal`]: string | null;
23
23
  } & {
24
- [K in `${Uncapitalize<T>}Operation`]: "sleep" | "reset" | "idle" | "error" | "loading";
24
+ [K in `${T}Operation`]: "sleep" | "reset" | "idle" | "error" | "loading";
25
25
  };
26
26
  type SliceState<T extends string, Full, Light extends {
27
27
  id: string;
28
- }, QueryArgs, Insight, Filter extends FilterType, Suffix extends string = ""> = {
29
- [K in `default${Capitalize<T>}${Suffix}`]: DefaultOf<Full>;
28
+ }, QueryArgs, Insight, Filter extends FilterType, _CapitalizedT extends string = Capitalize<T>, _Default = DefaultOf<Full>, _Sort = SortOf<Filter>> = {
29
+ [K in `default${_CapitalizedT}`]: _Default;
30
30
  } & {
31
- [K in `${Uncapitalize<T>}List${Suffix}`]: DataList<Light>;
31
+ [K in `${T}List`]: DataList<Light>;
32
32
  } & {
33
- [K in `${Uncapitalize<T>}ListLoading${Suffix}`]: boolean;
33
+ [K in `${T}ListLoading`]: boolean;
34
34
  } & {
35
- [K in `${Uncapitalize<T>}InitList${Suffix}`]: DataList<Light>;
35
+ [K in `${T}InitList`]: DataList<Light>;
36
36
  } & {
37
- [K in `${Uncapitalize<T>}InitAt${Suffix}`]: Date;
37
+ [K in `${T}InitAt`]: Date;
38
38
  } & {
39
- [K in `${Uncapitalize<T>}Selection${Suffix}`]: DataList<Light>;
39
+ [K in `${T}Selection`]: DataList<Light>;
40
40
  } & {
41
- [K in `${Uncapitalize<T>}Insight${Suffix}`]: Insight;
41
+ [K in `${T}Insight`]: Insight;
42
42
  } & {
43
- [K in `lastPageOf${Capitalize<T>}${Suffix}`]: number;
43
+ [K in `lastPageOf${_CapitalizedT}`]: number;
44
44
  } & {
45
- [K in `pageOf${Capitalize<T>}${Suffix}`]: number;
45
+ [K in `pageOf${_CapitalizedT}`]: number;
46
46
  } & {
47
- [K in `limitOf${Capitalize<T>}${Suffix}`]: number;
47
+ [K in `limitOf${_CapitalizedT}`]: number;
48
48
  } & {
49
- [K in `queryArgsOf${Capitalize<T>}${Suffix}`]: QueryArgs;
49
+ [K in `queryArgsOf${_CapitalizedT}`]: QueryArgs;
50
50
  } & {
51
- [K in `sortOf${Capitalize<T>}${Suffix}`]: SortOf<Filter>;
51
+ [K in `sortOf${_CapitalizedT}`]: _Sort;
52
52
  };
53
- type MergeFields<T> = {
54
- [K in keyof T]: T[K] extends object ? T[K] : never;
55
- }[keyof T];
56
- type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
57
- type DefaultState<T extends string, Full, Light extends {
53
+ type DefaultState<T extends string, Input, Full, Light extends {
58
54
  id: string;
59
- }, Insight, Filter extends FilterType, Signal> = BaseState<T, Full> & SliceState<T, Full, Light, [query: QueryOf<DocumentModel<Full>>], Insight, Filter> & UnionToIntersection<MergeFields<{
60
- [K in keyof Signal as K extends `${T}List${infer Suffix}` ? K : never]: K extends `${T}List${infer Suffix}` ? Signal[K] extends (...args: infer Args) => Promise<Full[]> ? SliceState<T, Full, Light, FilterStateArgs<Args, Filter>, Insight, Filter, Suffix> : never : never;
61
- }>>;
55
+ }, Insight, Filter extends FilterType, Signal, _CapitalizedT extends string = Capitalize<T>, _Default = DefaultOf<Full>, _DefaultInput = DefaultOf<Input>, _DefaultState = GetStateObject<Full>, _DefaultStateInput = GetStateObject<Input>, _Doc = DocumentModel<Full>, _DocInput = DocumentModel<Input>, _QueryOfDoc = QueryOf<DocumentModel<Full>>, _Query = GetActionObject<Filter>, _Sort = SortOf<Filter>, _DynamicSliceArgMap = DynamicSliceArgMap<T, Input, Full, Filter, Signal, _CapitalizedT, _DefaultInput, _Sort>, _DefaultSliceState = SliceState<T, Full, Light, [
56
+ query: _QueryOfDoc
57
+ ], Insight, Filter, _CapitalizedT, _Default, _Sort>, _DynamicSliceStateMap = {
58
+ [Suffix in keyof _DynamicSliceArgMap as Suffix extends string ? Suffix : never]: Suffix extends string ? SliceState<T, Full, Light, _DynamicSliceArgMap[Suffix], Insight, Filter, _CapitalizedT, _Default, _Sort> : never;
59
+ }> = BaseState<T, Full, _Default> & _DefaultSliceState & MergedValues<{
60
+ [Suffix in keyof _DynamicSliceStateMap as Suffix extends string ? Suffix : never]: {
61
+ [K in keyof _DynamicSliceStateMap[Suffix] as K extends string ? Suffix extends string ? `${K}${Suffix}` : never : never]: _DynamicSliceStateMap[Suffix][K];
62
+ };
63
+ }>;
62
64
  export declare const createState: <T extends string, Input, Full, Light extends {
63
65
  id: string;
64
- }, Insight, Filter extends FilterType, Fetch, Signal>(gql: DbGraphQL<T, Input, Full, Light, Insight, Filter, Fetch, Signal>) => DefaultState<T, Full, Light, Insight, Filter, Signal>;
66
+ }, Insight, Filter extends FilterType, Fetch, Signal, _CapitalizedT extends string = Capitalize<T>, _Default = DefaultOf<Full>, _DefaultInput = DefaultOf<Input>, _DefaultState = GetStateObject<Full>, _DefaultStateInput = GetStateObject<Input>, _Doc = DocumentModel<Full>, _DocInput = DocumentModel<Input>, _QueryOfDoc = QueryOf<DocumentModel<Full>>, _Query = GetActionObject<Filter>, _Sort = SortOf<Filter>, _DynamicSliceArgMap = DynamicSliceArgMap<T, Input, Full, Filter, Signal, _CapitalizedT, _DefaultInput, _Sort>>(gql: DbGraphQL<T, Input, Full, Light, Insight, Filter, Fetch, Signal, _CapitalizedT, _Default, _DefaultInput, _DefaultState, _DefaultStateInput, _Doc, _DocInput, _QueryOfDoc, _Query, _Sort, _DynamicSliceArgMap>) => DefaultState<T, Input, Full, Light, Insight, Filter, Signal, _CapitalizedT, _Default, _DefaultInput, _Doc, _DocInput, _QueryOfDoc, _Query, _Sort, _DynamicSliceArgMap>;
65
67
  type GetState<T, K> = K extends keyof T ? T[K] : never;
66
68
  type PickState<G> = G extends () => infer S ? PickFunc<S, keyof S> : never;
67
69
  type PickFunc<T, F extends keyof T = keyof T> = (...fields: F[]) => {
@@ -99,91 +101,110 @@ type PartialOrNull<O> = {
99
101
  };
100
102
  type BaseAction<T extends string, Input, Full extends {
101
103
  id: string;
102
- }, Light> = {
103
- [K in `create${Capitalize<T>}InForm`]: (options?: CreateOption<Full>) => Promise<void>;
104
+ }, Light, _CapitalizedT extends string = Capitalize<T>, _CreateOption = CreateOption<Full>> = {
105
+ [K in `create${_CapitalizedT}InForm`]: (options?: _CreateOption) => Promise<void>;
104
106
  } & {
105
- [K in `update${Capitalize<T>}InForm`]: (options?: CreateOption<Full>) => Promise<void>;
107
+ [K in `update${_CapitalizedT}InForm`]: (options?: _CreateOption) => Promise<void>;
106
108
  } & {
107
- [K in `create${Capitalize<T>}`]: (data: GetStateObject<Input>, options?: CreateOption<Full>) => Promise<void>;
109
+ [K in `create${_CapitalizedT}`]: (data: Input, options?: _CreateOption) => Promise<void>;
108
110
  } & {
109
- [K in `update${Capitalize<T>}`]: (id: string, data: GetStateObject<Input>, options?: CreateOption<Full>) => Promise<void>;
111
+ [K in `update${_CapitalizedT}`]: (id: string, data: Input, options?: _CreateOption) => Promise<void>;
110
112
  } & {
111
- [K in `remove${Capitalize<T>}`]: (id: string, options?: FetchPolicy & {
113
+ [K in `remove${_CapitalizedT}`]: (id: string, options?: FetchPolicy & {
112
114
  modal?: string | null;
113
115
  }) => Promise<void>;
114
116
  } & {
115
- [K in `check${Capitalize<T>}Submitable`]: (disabled?: boolean) => Promise<void>;
117
+ [K in `check${_CapitalizedT}Submitable`]: (disabled?: boolean) => Promise<void>;
116
118
  } & {
117
- [K in `submit${Capitalize<T>}`]: (options?: CreateOption<Full>) => Promise<void>;
119
+ [K in `submit${_CapitalizedT}`]: (options?: _CreateOption) => Promise<void>;
118
120
  } & {
119
- [K in `new${Capitalize<T>}`]: (partial?: PartialOrNull<Full>, options?: NewOption) => void;
121
+ [K in `new${_CapitalizedT}`]: (partial?: PartialOrNull<Full>, options?: NewOption) => void;
120
122
  } & {
121
- [K in `edit${Capitalize<T>}`]: (model: Full | string, options?: {
123
+ [K in `edit${_CapitalizedT}`]: (model: Full | string, options?: {
122
124
  modal?: string | null;
123
125
  } & FetchPolicy) => Promise<void>;
124
126
  } & {
125
- [K in `merge${Capitalize<T>}`]: (model: Full | string, data: Partial<Full>, options?: FetchPolicy) => Promise<void>;
127
+ [K in `merge${_CapitalizedT}`]: (model: Full | string, data: Partial<Full>, options?: FetchPolicy) => Promise<void>;
126
128
  } & {
127
- [K in `view${Capitalize<T>}`]: (model: Full | string, options?: {
129
+ [K in `view${_CapitalizedT}`]: (model: Full | string, options?: {
128
130
  modal?: string | null;
129
131
  } & FetchPolicy) => Promise<void>;
130
132
  } & {
131
- [K in `set${Capitalize<T>}`]: (model: Full | Light) => void;
133
+ [K in `set${_CapitalizedT}`]: (model: Full | Light) => void;
132
134
  } & {
133
- [K in `reset${Capitalize<T>}`]: (model?: Full) => void;
135
+ [K in `reset${_CapitalizedT}`]: (model?: Full) => void;
134
136
  };
135
137
  type SliceAction<T extends string, Input, Full extends {
136
138
  id: string;
137
- }, Light, QueryArgs extends any[], Filter extends FilterType, Suffix extends string = ""> = {
138
- [K in `init${Capitalize<T>}${Suffix}`]: (...args: [...args: QueryArgs, initForm?: FetchInitForm<Input, Full, Filter> & FetchPolicy]) => Promise<void>;
139
+ }, Light, QueryArgs extends any[], Filter extends FilterType, _CapitalizedT extends string = Capitalize<T>, _Sort = SortOf<Filter>, _FetchInitFormWithFetchPolicy = FetchInitForm<Input, Full, Filter> & FetchPolicy> = {
140
+ [K in `init${_CapitalizedT}`]: (...args: [...args: QueryArgs, initForm?: _FetchInitFormWithFetchPolicy]) => Promise<void>;
139
141
  } & {
140
- [K in `refresh${Capitalize<T>}${Suffix}`]: (...args: [...args: QueryArgs, initForm?: FetchInitForm<Input, Full, Filter> & FetchPolicy]) => Promise<void>;
142
+ [K in `refresh${_CapitalizedT}`]: (...args: [...args: QueryArgs, initForm?: _FetchInitFormWithFetchPolicy]) => Promise<void>;
141
143
  } & {
142
- [K in `select${Capitalize<T>}${Suffix}`]: (model: Light | Light[], options?: {
144
+ [K in `select${_CapitalizedT}`]: (model: Light | Light[], options?: {
143
145
  refresh?: boolean;
144
146
  remove?: boolean;
145
147
  }) => void;
146
148
  } & {
147
- [K in `setPageOf${Capitalize<T>}${Suffix}`]: (page: number, options?: FetchPolicy) => Promise<void>;
149
+ [K in `setPageOf${_CapitalizedT}`]: (page: number, options?: FetchPolicy) => Promise<void>;
148
150
  } & {
149
- [K in `addPageOf${Capitalize<T>}${Suffix}`]: (page: number, options?: FetchPolicy) => Promise<void>;
151
+ [K in `addPageOf${_CapitalizedT}`]: (page: number, options?: FetchPolicy) => Promise<void>;
150
152
  } & {
151
- [K in `setLimitOf${Capitalize<T>}${Suffix}`]: (limit: number, options?: FetchPolicy) => Promise<void>;
153
+ [K in `setLimitOf${_CapitalizedT}`]: (limit: number, options?: FetchPolicy) => Promise<void>;
152
154
  } & {
153
- [K in `setQueryArgsOf${Capitalize<T>}${Suffix}`]: (...args: [...args: QueryArgs, options?: FetchPolicy]) => Promise<void>;
155
+ [K in `setQueryArgsOf${_CapitalizedT}`]: (...args: [...args: QueryArgs, options?: FetchPolicy]) => Promise<void>;
154
156
  } & {
155
- [K in `setSortOf${Capitalize<T>}${Suffix}`]: (sort: SortOf<Filter>, options?: FetchPolicy) => Promise<void>;
157
+ [K in `setSortOf${_CapitalizedT}`]: (sort: _Sort, options?: FetchPolicy) => Promise<void>;
156
158
  };
157
159
  type DefaultActions<T extends string, Input, Full extends {
158
160
  id: string;
159
- }, Light, Filter extends FilterType, Fetch, Signal> = BaseAction<T, Input, Full, Light> & FormSetter<Full, T> & SliceAction<T, Input, Full, Light, [query: QueryOf<DocumentModel<Full>>], Filter> & UnionToIntersection<MergeFields<{
160
- [K in keyof Signal as K extends `${T}List${infer Suffix}` ? K : never]: K extends `${T}List${infer Suffix}` ? Signal[K] extends (...args: infer Args) => Promise<Full[]> ? SliceAction<T, Input, Full, Light, FilterListArgs<Args, Filter>, Filter, Suffix> : never : never;
161
- }>>;
161
+ }, Light, Filter extends FilterType, Fetch, Signal, _CapitalizedT extends string = Capitalize<T>, _Default = DefaultOf<Full>, _DefaultInput = DefaultOf<Input>, _DefaultState = GetStateObject<_Default>, _DefaultStateInput = GetStateObject<_DefaultInput>, _Doc = DocumentModel<Full>, _DocInput = DocumentModel<Input>, _QueryOfDoc = QueryOf<DocumentModel<Full>>, _Sort = SortOf<Filter>, _DynamicSliceArgMap = DynamicSliceArgMap<T, Input, Full, Filter, Signal, _CapitalizedT, _DefaultInput, _Sort>, _CreateOption = CreateOption<Full>, _FetchInitFormWithFetchPolicy = FetchInitForm<Input, Full, Filter> & FetchPolicy, _DefaultSliceAction = SliceAction<T, Input, Full, Light, [
162
+ query: _QueryOfDoc
163
+ ], Filter, _CapitalizedT, _Sort, _FetchInitFormWithFetchPolicy>, _DynamicSliceActionMap = {
164
+ [Suffix in keyof _DynamicSliceArgMap as Suffix extends string ? Suffix : never]: Suffix extends string ? _DynamicSliceArgMap[Suffix] extends any[] ? SliceAction<T, Input, Full, Light, _DynamicSliceArgMap[Suffix], Filter, _CapitalizedT, _Sort, _FetchInitFormWithFetchPolicy> : never : never;
165
+ }> = BaseAction<T, Input, Full, Light, _CapitalizedT, _CreateOption> & FormSetter<Full, T, _CapitalizedT, _DefaultState> & _DefaultSliceAction & MergedValues<{
166
+ [Suffix in keyof _DynamicSliceActionMap as Suffix extends string ? Suffix : never]: {
167
+ [K in keyof _DynamicSliceActionMap[Suffix] as K extends string ? Suffix extends string ? `${K}${Suffix}` : never : never]: _DynamicSliceActionMap[Suffix][K];
168
+ };
169
+ }>;
162
170
  export declare const createActions: <T extends string, Input, Full extends {
163
171
  id: string;
164
172
  }, Light extends {
165
173
  id: string;
166
- }, Insight, Filter extends FilterType, Fetch, Signal>(gql: DbGraphQL<T, Input, Full, Light, Insight, Filter, Fetch, Signal>) => DefaultActions<T, Input, Full, Light, Filter, Fetch, Signal>;
174
+ }, Insight, Filter extends FilterType, Fetch, Signal, _CapitalizedT extends string, _Default, _DefaultInput, _DefaultState, _DefaultStateInput, _Doc, _DocInput, _QueryOfDoc, _Query, _Sort, _DynamicSliceArgMap>(gql: DbGraphQL<T, Input, Full, Light, Insight, Filter, Fetch, Signal, _CapitalizedT, _Default, _DefaultInput, _DefaultState, _DefaultStateInput, _Doc, _DocInput, _QueryOfDoc, _Query, _Sort, _DynamicSliceArgMap>) => DefaultActions<T, Input, Full, Light, Filter, Fetch, Signal, _CapitalizedT, _Default, _DefaultInput, _DefaultState, _DefaultStateInput, _Doc, _DocInput, _QueryOfDoc, _Query, _Sort, _DynamicSliceArgMap>;
167
175
  type SingleOf<M> = M extends (infer V)[] ? V : never;
168
- type SetterKey<Prefix extends string, K extends string, S extends string> = `${Prefix}${Capitalize<K>}On${Capitalize<S>}`;
169
- type FormSetter<Full, S extends string> = {
170
- [K in keyof Full as Full[K] extends (...args: any) => any ? never : SetterKey<"set", string & K, S>]: (value: FieldState<Full[K]>) => void;
171
- } & {
172
- [K in keyof Full as Full[K] extends any[] ? SetterKey<"add", string & K, S> : never]: (value: DefaultOf<SingleOf<Full[K]>> | DefaultOf<SingleOf<Full[K]>>[], options?: {
176
+ type SetterKey<Prefix extends string, K extends string, T extends string, _CapitalizedT extends string = Capitalize<T>, _CapitalizedK extends string = Capitalize<K>> = `${Prefix}${_CapitalizedK}On${_CapitalizedT}`;
177
+ type FieldFormSetter<DefaultState, T extends string, _CapitalizedT extends string = Capitalize<T>> = {
178
+ [K in keyof DefaultState as K extends string ? SetterKey<"set", K, T, _CapitalizedT> : never]: (value: FieldState<DefaultState[K]>) => void;
179
+ };
180
+ type ArrayFieldFormSetter<Key extends string, T extends string, SingleDefaultField, _CapitalizedT extends string = Capitalize<T>> = {
181
+ [K in SetterKey<"add", Key, T, _CapitalizedT>]: (value: SingleDefaultField | SingleDefaultField[], options?: {
173
182
  idx?: number;
174
183
  limit?: number;
175
184
  }) => void;
176
185
  } & {
177
- [K in keyof Full as Full[K] extends any[] ? SetterKey<"sub", string & K, S> : never]: (idx: number | number[]) => void;
186
+ [K in SetterKey<"sub", Key, T, _CapitalizedT>]: (idx: number | number[]) => void;
178
187
  } & {
179
- [K in keyof Full as Full[K] extends any[] ? SetterKey<"addOrSub", string & K, S> : never]: (value: SingleOf<Full[K]>, options?: {
188
+ [K in SetterKey<"addOrSub", Key, T, _CapitalizedT>]: (value: SingleDefaultField, options?: {
180
189
  idx?: number;
181
190
  limit?: number;
182
191
  }) => void;
192
+ };
193
+ type FormSetter<Full, T extends string, _CapitalizedT extends string = Capitalize<T>, _DefaultState = DefaultOf<Full>> = FieldFormSetter<_DefaultState, T, _CapitalizedT> & MergedValues<{
194
+ [K in keyof _DefaultState as _DefaultState[K] extends any[] ? K : never]: K extends string ? ArrayFieldFormSetter<K, T, DefaultOf<SingleOf<_DefaultState[K]>>, _CapitalizedT> : never;
195
+ }> & {
196
+ [K in keyof _DefaultState as _DefaultState[K] extends (ProtoFile | null) | ProtoFile[] ? K extends string ? SetterKey<"upload", K, T, _CapitalizedT> : never : never]: (fileList: FileList, idx?: number) => Promise<void>;
183
197
  } & {
184
- [K in keyof Full as Full[K] extends (ProtoFile | null) | ProtoFile[] ? SetterKey<"upload", string & K, S> : never]: (fileList: FileList, idx?: number) => Promise<void>;
185
- } & {
186
- [K in `writeOn${Capitalize<S>}`]: (path: string | (string | number)[], value: any) => void;
198
+ [K in `writeOn${_CapitalizedT}`]: (path: string | (string | number)[], value: any) => void;
199
+ };
200
+ interface SliceInfo<T extends string, State, Action> {
201
+ refName: T;
202
+ state: State;
203
+ action: Action;
204
+ }
205
+ type StoreInstance<ApplyState, ApplyAction, SliceInfoMap> = SetGet<ApplyState> & ApplyAction & {
206
+ __STATE_INFO__: ApplyState;
207
+ __SLICE_INFO__: SliceInfoMap;
187
208
  };
188
209
  export declare const stateOf: <T extends string, Input, Full extends {
189
210
  id: string;
@@ -191,74 +212,57 @@ export declare const stateOf: <T extends string, Input, Full extends {
191
212
  id: string;
192
213
  }, Insight, Filter extends FilterType, Fetch, Signal, State extends {
193
214
  [key: string]: any;
194
- }>(gql: DbGraphQL<T, Input, Full, Light, Insight, Filter, Fetch, Signal>, state: State) => Type<{
195
- readonly get: () => State & { [K in Uncapitalize<T>]: Full | null; } & { [K_1 in `${Uncapitalize<T>}Loading`]: string | boolean; } & { [K_2 in `${Uncapitalize<T>}Form`]: DefaultOf<Full>; } & { [K_3 in `${Uncapitalize<T>}FormLoading`]: string | boolean; } & { [K_4 in `${Uncapitalize<T>}Submit`]: Submit; } & { [K_5 in `${Uncapitalize<T>}ViewAt`]: Date; } & { [K_6 in `${Uncapitalize<T>}Modal`]: string | null; } & { [K_7 in `${Uncapitalize<T>}Operation`]: "error" | "reset" | "sleep" | "idle" | "loading"; } & { [K_8 in `default${Capitalize<T>}`]: DefaultOf<Full>; } & { [K_9 in `${Uncapitalize<T>}List`]: DataList<Light>; } & { [K_10 in `${Uncapitalize<T>}ListLoading`]: boolean; } & { [K_11 in `${Uncapitalize<T>}InitList`]: DataList<Light>; } & { [K_12 in `${Uncapitalize<T>}InitAt`]: Date; } & { [K_13 in `${Uncapitalize<T>}Selection`]: DataList<Light>; } & { [K_14 in `${Uncapitalize<T>}Insight`]: Insight; } & { [K_15 in `lastPageOf${Capitalize<T>}`]: number; } & { [K_16 in `pageOf${Capitalize<T>}`]: number; } & { [K_17 in `limitOf${Capitalize<T>}`]: number; } & { [K_18 in `queryArgsOf${Capitalize<T>}`]: [query: QueryOf<DocumentModel<Full, Dayjs>>]; } & { [K_19 in `sortOf${Capitalize<T>}`]: Exclude<keyof { [K_20 in keyof Filter as Filter[K_20] extends (...args: any) => any ? never : K_20]: Filter[K_20]; }, "prototype">; } & UnionToIntersection<MergeFields<{ [K_21 in keyof Signal as K_21 extends `${T}List${infer Suffix}` ? K_21 : never]: K_21 extends `${T}List${infer Suffix_1}` ? Signal[K_21] extends (...args: infer Args) => Promise<Full[]> ? SliceState<T, Full, Light, import("@akanjs/signal").FilterOutInternalArgs<Args> extends infer T_1 ? T_1 extends import("@akanjs/signal").FilterOutInternalArgs<Args> ? T_1 extends [...args: infer QueryArgs, skip: number | null, limit: number | null, sort: string | null] ? QueryArgs : never : never : never, Insight, Filter, Suffix_1> : never : never; }>>;
196
- readonly set: (state: Partial<MakeState<State & { [K in Uncapitalize<T>]: Full | null; } & { [K_1 in `${Uncapitalize<T>}Loading`]: string | boolean; } & { [K_2 in `${Uncapitalize<T>}Form`]: DefaultOf<Full>; } & { [K_3 in `${Uncapitalize<T>}FormLoading`]: string | boolean; } & { [K_4 in `${Uncapitalize<T>}Submit`]: Submit; } & { [K_5 in `${Uncapitalize<T>}ViewAt`]: Date; } & { [K_6 in `${Uncapitalize<T>}Modal`]: string | null; } & { [K_7 in `${Uncapitalize<T>}Operation`]: "error" | "reset" | "sleep" | "idle" | "loading"; } & { [K_8 in `default${Capitalize<T>}`]: DefaultOf<Full>; } & { [K_9 in `${Uncapitalize<T>}List`]: DataList<Light>; } & { [K_10 in `${Uncapitalize<T>}ListLoading`]: boolean; } & { [K_11 in `${Uncapitalize<T>}InitList`]: DataList<Light>; } & { [K_12 in `${Uncapitalize<T>}InitAt`]: Date; } & { [K_13 in `${Uncapitalize<T>}Selection`]: DataList<Light>; } & { [K_14 in `${Uncapitalize<T>}Insight`]: Insight; } & { [K_15 in `lastPageOf${Capitalize<T>}`]: number; } & { [K_16 in `pageOf${Capitalize<T>}`]: number; } & { [K_17 in `limitOf${Capitalize<T>}`]: number; } & { [K_18 in `queryArgsOf${Capitalize<T>}`]: [query: QueryOf<DocumentModel<Full, Dayjs>>]; } & { [K_19 in `sortOf${Capitalize<T>}`]: Exclude<keyof { [K_20 in keyof Filter as Filter[K_20] extends (...args: any) => any ? never : K_20]: Filter[K_20]; }, "prototype">; } & UnionToIntersection<MergeFields<{ [K_21 in keyof Signal as K_21 extends `${T}List${infer Suffix}` ? K_21 : never]: K_21 extends `${T}List${infer Suffix_1}` ? Signal[K_21] extends (...args: infer Args) => Promise<Full[]> ? SliceState<T, Full, Light, import("@akanjs/signal").FilterOutInternalArgs<Args> extends infer T_1 ? T_1 extends import("@akanjs/signal").FilterOutInternalArgs<Args> ? T_1 extends [...args: infer QueryArgs, skip: number | null, limit: number | null, sort: string | null] ? QueryArgs : never : never : never, Insight, Filter, Suffix_1> : never : never; }>>>> | ((state: MakeState<State & { [K in Uncapitalize<T>]: Full | null; } & { [K_1 in `${Uncapitalize<T>}Loading`]: string | boolean; } & { [K_2 in `${Uncapitalize<T>}Form`]: DefaultOf<Full>; } & { [K_3 in `${Uncapitalize<T>}FormLoading`]: string | boolean; } & { [K_4 in `${Uncapitalize<T>}Submit`]: Submit; } & { [K_5 in `${Uncapitalize<T>}ViewAt`]: Date; } & { [K_6 in `${Uncapitalize<T>}Modal`]: string | null; } & { [K_7 in `${Uncapitalize<T>}Operation`]: "error" | "reset" | "sleep" | "idle" | "loading"; } & { [K_8 in `default${Capitalize<T>}`]: DefaultOf<Full>; } & { [K_9 in `${Uncapitalize<T>}List`]: DataList<Light>; } & { [K_10 in `${Uncapitalize<T>}ListLoading`]: boolean; } & { [K_11 in `${Uncapitalize<T>}InitList`]: DataList<Light>; } & { [K_12 in `${Uncapitalize<T>}InitAt`]: Date; } & { [K_13 in `${Uncapitalize<T>}Selection`]: DataList<Light>; } & { [K_14 in `${Uncapitalize<T>}Insight`]: Insight; } & { [K_15 in `lastPageOf${Capitalize<T>}`]: number; } & { [K_16 in `pageOf${Capitalize<T>}`]: number; } & { [K_17 in `limitOf${Capitalize<T>}`]: number; } & { [K_18 in `queryArgsOf${Capitalize<T>}`]: [query: QueryOf<DocumentModel<Full, Dayjs>>]; } & { [K_19 in `sortOf${Capitalize<T>}`]: Exclude<keyof { [K_20 in keyof Filter as Filter[K_20] extends (...args: any) => any ? never : K_20]: Filter[K_20]; }, "prototype">; } & UnionToIntersection<MergeFields<{ [K_21 in keyof Signal as K_21 extends `${T}List${infer Suffix}` ? K_21 : never]: K_21 extends `${T}List${infer Suffix_1}` ? Signal[K_21] extends (...args: infer Args) => Promise<Full[]> ? SliceState<T, Full, Light, import("@akanjs/signal").FilterOutInternalArgs<Args> extends infer T_2 ? T_2 extends import("@akanjs/signal").FilterOutInternalArgs<Args> ? T_2 extends [...args: infer QueryArgs, skip: number | null, limit: number | null, sort: string | null] ? QueryArgs : never : never : never, Insight, Filter, Suffix_1> : never : never; }>>>) => any)) => void;
197
- readonly pick: PickState<GetState<Mutate<StoreApi<MakeState<State & { [K in Uncapitalize<T>]: Full | null; } & { [K_1 in `${Uncapitalize<T>}Loading`]: string | boolean; } & { [K_2 in `${Uncapitalize<T>}Form`]: DefaultOf<Full>; } & { [K_3 in `${Uncapitalize<T>}FormLoading`]: string | boolean; } & { [K_4 in `${Uncapitalize<T>}Submit`]: Submit; } & { [K_5 in `${Uncapitalize<T>}ViewAt`]: Date; } & { [K_6 in `${Uncapitalize<T>}Modal`]: string | null; } & { [K_7 in `${Uncapitalize<T>}Operation`]: "error" | "reset" | "sleep" | "idle" | "loading"; } & { [K_8 in `default${Capitalize<T>}`]: DefaultOf<Full>; } & { [K_9 in `${Uncapitalize<T>}List`]: DataList<Light>; } & { [K_10 in `${Uncapitalize<T>}ListLoading`]: boolean; } & { [K_11 in `${Uncapitalize<T>}InitList`]: DataList<Light>; } & { [K_12 in `${Uncapitalize<T>}InitAt`]: Date; } & { [K_13 in `${Uncapitalize<T>}Selection`]: DataList<Light>; } & { [K_14 in `${Uncapitalize<T>}Insight`]: Insight; } & { [K_15 in `lastPageOf${Capitalize<T>}`]: number; } & { [K_16 in `pageOf${Capitalize<T>}`]: number; } & { [K_17 in `limitOf${Capitalize<T>}`]: number; } & { [K_18 in `queryArgsOf${Capitalize<T>}`]: [query: QueryOf<DocumentModel<Full, Dayjs>>]; } & { [K_19 in `sortOf${Capitalize<T>}`]: Exclude<keyof { [K_20 in keyof Filter as Filter[K_20] extends (...args: any) => any ? never : K_20]: Filter[K_20]; }, "prototype">; } & UnionToIntersection<MergeFields<{ [K_21 in keyof Signal as K_21 extends `${T}List${infer Suffix}` ? K_21 : never]: K_21 extends `${T}List${infer Suffix_1}` ? Signal[K_21] extends (...args: infer Args) => Promise<Full[]> ? SliceState<T, Full, Light, import("@akanjs/signal").FilterOutInternalArgs<Args> extends infer T_1 ? T_1 extends import("@akanjs/signal").FilterOutInternalArgs<Args> ? T_1 extends [...args: infer QueryArgs, skip: number | null, limit: number | null, sort: string | null] ? QueryArgs : never : never : never, Insight, Filter, Suffix_1> : never : never; }>>>>, []>, "getState">>;
198
- } & (State & { [K in Uncapitalize<T>]: Full | null; } & { [K_1 in `${Uncapitalize<T>}Loading`]: string | boolean; } & { [K_2 in `${Uncapitalize<T>}Form`]: DefaultOf<Full>; } & { [K_3 in `${Uncapitalize<T>}FormLoading`]: string | boolean; } & { [K_4 in `${Uncapitalize<T>}Submit`]: Submit; } & { [K_5 in `${Uncapitalize<T>}ViewAt`]: Date; } & { [K_6 in `${Uncapitalize<T>}Modal`]: string | null; } & { [K_7 in `${Uncapitalize<T>}Operation`]: "error" | "reset" | "sleep" | "idle" | "loading"; } & { [K_8 in `default${Capitalize<T>}`]: DefaultOf<Full>; } & { [K_9 in `${Uncapitalize<T>}List`]: DataList<Light>; } & { [K_10 in `${Uncapitalize<T>}ListLoading`]: boolean; } & { [K_11 in `${Uncapitalize<T>}InitList`]: DataList<Light>; } & { [K_12 in `${Uncapitalize<T>}InitAt`]: Date; } & { [K_13 in `${Uncapitalize<T>}Selection`]: DataList<Light>; } & { [K_14 in `${Uncapitalize<T>}Insight`]: Insight; } & { [K_15 in `lastPageOf${Capitalize<T>}`]: number; } & { [K_16 in `pageOf${Capitalize<T>}`]: number; } & { [K_17 in `limitOf${Capitalize<T>}`]: number; } & { [K_18 in `queryArgsOf${Capitalize<T>}`]: [query: QueryOf<DocumentModel<Full, Dayjs>>]; } & { [K_19 in `sortOf${Capitalize<T>}`]: Exclude<keyof { [K_20 in keyof Filter as Filter[K_20] extends (...args: any) => any ? never : K_20]: Filter[K_20]; }, "prototype">; } & UnionToIntersection<MergeFields<{ [K_21 in keyof Signal as K_21 extends `${T}List${infer Suffix}` ? K_21 : never]: K_21 extends `${T}List${infer Suffix_1}` ? Signal[K_21] extends (...args: infer Args) => Promise<Full[]> ? SliceState<T, Full, Light, import("@akanjs/signal").FilterOutInternalArgs<Args> extends infer T_2 ? T_2 extends import("@akanjs/signal").FilterOutInternalArgs<Args> ? T_2 extends [...args: infer QueryArgs, skip: number | null, limit: number | null, sort: string | null] ? QueryArgs : never : never : never, Insight, Filter, Suffix_1> : never : never; }>>) & DefaultActions<T, Input, Full, Light, Filter, Fetch, Signal> & { [K_22 in keyof Fetch as K_22 extends `${T}List${infer Suffix_2}` ? `__SLICE__${T}${Suffix_2}` : never]: K_22 extends `${T}List${infer Suffix_3}` ? Fetch[K_22] extends (...args: [...args: infer QueryArgs_1, skip: null | undefined, limit: null | undefined, sort: null | undefined, option?: FetchPolicy]) => Promise<Light[]> ? StoreOf<T, RemoveSuffix<{ [K_23 in `default${Capitalize<T>}${Suffix_3}`]: DefaultOf<Full>; } & { [K_24 in `${Uncapitalize<T>}List${Suffix_3}`]: DataList<Light>; } & { [K_25 in `${Uncapitalize<T>}ListLoading${Suffix_3}`]: boolean; } & { [K_26 in `${Uncapitalize<T>}InitList${Suffix_3}`]: DataList<Light>; } & { [K_27 in `${Uncapitalize<T>}InitAt${Suffix_3}`]: Date; } & { [K_28 in `${Uncapitalize<T>}Selection${Suffix_3}`]: DataList<Light>; } & { [K_29 in `${Uncapitalize<T>}Insight${Suffix_3}`]: Insight; } & { [K_30 in `lastPageOf${Capitalize<T>}${Suffix_3}`]: number; } & { [K_31 in `pageOf${Capitalize<T>}${Suffix_3}`]: number; } & { [K_32 in `limitOf${Capitalize<T>}${Suffix_3}`]: number; } & { [K_33 in `queryArgsOf${Capitalize<T>}${Suffix_3}`]: QueryArgs_1; } & { [K_34 in `sortOf${Capitalize<T>}${Suffix_3}`]: Exclude<keyof { [K_20 in keyof Filter as Filter[K_20] extends (...args: any) => any ? never : K_20]: Filter[K_20]; }, "prototype">; } & { [K_35 in `init${Capitalize<T>}${Suffix_3}`]: (...args: [...args: QueryArgs_1, initForm?: (FetchInitForm<Input, Full, Filter> & FetchPolicy<any>) | undefined]) => Promise<void>; } & { [K_36 in `refresh${Capitalize<T>}${Suffix_3}`]: (...args: [...args: QueryArgs_1, initForm?: (FetchInitForm<Input, Full, Filter> & FetchPolicy<any>) | undefined]) => Promise<void>; } & { [K_37 in `select${Capitalize<T>}${Suffix_3}`]: (model: Light | Light[], options?: {
199
- refresh?: boolean;
200
- remove?: boolean;
201
- }) => void; } & { [K_38 in `setPageOf${Capitalize<T>}${Suffix_3}`]: (page: number, options?: FetchPolicy) => Promise<void>; } & { [K_39 in `addPageOf${Capitalize<T>}${Suffix_3}`]: (page: number, options?: FetchPolicy) => Promise<void>; } & { [K_40 in `setLimitOf${Capitalize<T>}${Suffix_3}`]: (limit: number, options?: FetchPolicy) => Promise<void>; } & { [K_41 in `setQueryArgsOf${Capitalize<T>}${Suffix_3}`]: (...args: [...args: QueryArgs_1, options?: FetchPolicy<any> | undefined]) => Promise<void>; } & { [K_42 in `setSortOf${Capitalize<T>}${Suffix_3}`]: (sort: Exclude<keyof { [K_20 in keyof Filter as Filter[K_20] extends (...args: any) => any ? never : K_20]: Filter[K_20]; }, "prototype">, options?: FetchPolicy) => Promise<void>; }, Suffix_3>> : never : never; }>;
202
- export declare const scalarStateOf: <T extends string, State extends {
215
+ }, _CapitalizedT extends string = Capitalize<T>, _Default = DefaultOf<Full>, _DefaultInput = DefaultOf<Input>, _DefaultState = GetStateObject<Full>, _DefaultStateInput = GetStateObject<Input>, _Doc = DocumentModel<Full>, _DocInput = DocumentModel<Input>, _QueryOfDoc = QueryOf<DocumentModel<Full>>, _Query = GetActionObject<Filter>, _Sort = SortOf<Filter>, _DynamicSliceArgMap = DynamicSliceArgMap<T, Input, Full, Filter, Signal, _CapitalizedT, _DefaultInput, _Sort>, _CreateOption = CreateOption<Full>, _FetchInitFormWithFetchPolicy = FetchInitForm<Input, Full, Filter> & FetchPolicy, _DefaultSliceState = SliceState<T, Full, Light, [query: _QueryOfDoc], Insight, Filter, _CapitalizedT, _Default, _Sort>, _DynamicSliceStateMap = { [Suffix in keyof _DynamicSliceArgMap as Suffix extends string ? Suffix : never]: Suffix extends string ? SliceState<T, Full, Light, _DynamicSliceArgMap[Suffix], Insight, Filter, _CapitalizedT, _Default, _Sort> : never; }, _DefaultSliceAction = SliceAction<T, Input, Full, Light, [query: _QueryOfDoc], Filter, _CapitalizedT, _Sort, _FetchInitFormWithFetchPolicy>, _DynamicSliceActionMap = { [Suffix in keyof _DynamicSliceArgMap as Suffix extends string ? Suffix : never]: Suffix extends string ? _DynamicSliceArgMap[Suffix] extends any[] ? SliceAction<T, Input, Full, Light, _DynamicSliceArgMap[Suffix], Filter, _CapitalizedT, _Sort, _FetchInitFormWithFetchPolicy> : never : never; }, _ApplyState = State & DefaultState<T, Input, Full, Light, Insight, Filter, Signal, _CapitalizedT, _Default, _DefaultInput, _DefaultState, _DefaultStateInput, _Doc, _DocInput, _QueryOfDoc, _Query, _Sort, _DynamicSliceArgMap, _DefaultSliceState, _DynamicSliceStateMap>, _ApplyAction = DefaultActions<T, Input, Full, Light, Filter, Fetch, Signal, _CapitalizedT, _Default, _DefaultInput, _DefaultState, _DefaultStateInput, _Doc, _DocInput, _QueryOfDoc, _Sort, _DynamicSliceArgMap, _CreateOption, _FetchInitFormWithFetchPolicy, _DefaultSliceAction, _DynamicSliceActionMap>, _SliceInfoMap = { [K in T]: SliceInfo<T, _DefaultSliceState, _DefaultSliceAction>; } & { [Suffix in keyof _DynamicSliceStateMap & keyof _DynamicSliceActionMap as Suffix extends string ? `${T}${Suffix}` : never]: Suffix extends string ? SliceInfo<`${T}${Suffix}`, _DynamicSliceStateMap[Suffix], _DynamicSliceActionMap[Suffix]> : never; }>(gql: DbGraphQL<T, Input, Full, Light, Insight, Filter, Fetch, Signal, _CapitalizedT, _Default, _DefaultInput, _DefaultState, _DefaultStateInput, _Doc, _DocInput, _QueryOfDoc, _Query, _Sort, _DynamicSliceArgMap>, state: State) => Type<StoreInstance<_ApplyState, _ApplyAction, _SliceInfoMap>>;
216
+ export declare const scalarStateOf: <State extends {
203
217
  [key: string]: any;
204
- }>(refName: string, state: State) => Type<{
205
- readonly get: () => State;
206
- readonly set: (state: Partial<MakeState<State>> | ((state: MakeState<State>) => any)) => void;
207
- readonly pick: PickState<GetState<Mutate<StoreApi<MakeState<State>>, []>, "getState">>;
208
- } & State>;
218
+ }>(refName: string, state: State) => Type<StoreInstance<State, {}, {}>>;
209
219
  interface StoreDecoratorInput {
210
220
  name: string;
211
221
  }
212
222
  export declare const Store: (returnsOrObj: (() => Type) | StoreDecoratorInput) => (target: Type) => void;
213
223
  type SetKey<T extends string> = `set${Capitalize<T>}`;
214
- export interface WithSelectors<SA> {
224
+ export interface WithSelectors<State, Action, SliceInfoMap> {
215
225
  sub: {
216
- (listener: (selectedState: SA, previousSelectedState: SA) => void): () => void;
217
- <U>(selector: (state: SA) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: {
226
+ (listener: (selectedState: State, previousSelectedState: State) => void): () => void;
227
+ <U>(selector: (state: State) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: {
218
228
  equalityFn?: (a: U, b: U) => boolean;
219
229
  fireImmediately?: boolean;
220
230
  }): () => void;
221
231
  };
222
- ref: <U>(selector: (state: SA) => U) => RefObject<U>;
223
- sel: <U>(selector: (state: SA) => U, equals?: (a: U, b: U) => boolean) => U;
232
+ ref: <U>(selector: (state: State) => U) => RefObject<U>;
233
+ sel: <U>(selector: (state: State) => U, equals?: (a: U, b: U) => boolean) => U;
224
234
  use: {
225
- [K in keyof SA as SA[K] extends (...args: any) => any ? never : K]: () => SA[K];
235
+ [K in keyof State]: () => State[K];
226
236
  };
227
- do: Prettify<{
228
- [K in keyof SA as SA[K] extends (...args: any) => any ? K : never]: SA[K];
237
+ do: {
238
+ [K in Exclude<keyof Action, "__SLICE_INFO__" | "__STATE_INFO__">]: Action[K];
229
239
  } & {
230
- [K in keyof SA as SA[K] extends (...args: any) => any ? never : SetKey<K & string>]: (value: FieldState<SA[K]>) => void;
231
- }>;
232
- get: () => SA;
233
- set: (state: Partial<SA> | ((state: SA) => any)) => void;
240
+ [K in keyof State as K extends string ? SetKey<K> : never]: (value: FieldState<State[K]>) => void;
241
+ };
242
+ get: () => State;
243
+ set: (state: Partial<State> | ((state: State) => any)) => void;
234
244
  slice: {
235
- [K in keyof SA as K extends `__SLICE__${infer S}` ? S : never]: SA[K];
245
+ [K in keyof SliceInfoMap]: SliceInfoMap[K] extends SliceInfo<infer T, infer State, infer Action> ? SliceSelectors<T, State, Action> : never;
236
246
  };
237
247
  }
238
- interface MakeStoreOption {
239
- library?: boolean;
240
- }
241
- export declare const makeStore: <BaseStore extends WithSelectors<any>, SA extends {
242
- [key: string]: any;
243
- }>(st: BaseStore, storeRef: Type<SA>, { library }?: MakeStoreOption) => WithSelectors<SA> & BaseStore;
244
- export type StoreOf<T extends string, State> = SliceMeta & {
248
+ export interface SliceSelectors<T extends string, State, Action> {
249
+ refName: T;
245
250
  use: {
246
- [K in keyof State as State[K] extends (...args: any) => any ? never : K]: () => State[K];
251
+ [K in keyof State]: () => State[K];
247
252
  };
248
- get: () => State;
249
- do: {
250
- [K in keyof State as State[K] extends (...args: any) => any ? K : never]: State[K];
253
+ do: Prettify<{
254
+ [K in keyof Action]: Action[K];
251
255
  } & {
252
- [K in keyof State as State[K] extends (...args: any) => any ? never : `set${Capitalize<K & string>}`]: (value: FieldState<State[K]>) => void;
253
- };
254
- };
255
- type RemoveSuffix<State, Suffix extends string> = {
256
- [K in keyof State as K extends `${infer Prefix}${Suffix}` ? Prefix : never]: State[K];
257
- };
258
- export type Store<State> = WithSelectors<State>;
259
- type OmitGetSetPick<T> = Omit<T, "get" | "set" | "pick">;
260
- export declare const MixStore: <S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15, S16, S17, S18, S19, S20, S21, S22, S23, S24, S25, S26, S27, S28, S29, S30>(s1: Type<S1>, s2?: Type<S2>, s3?: Type<S3>, s4?: Type<S4>, s5?: Type<S5>, s6?: Type<S6>, s7?: Type<S7>, s8?: Type<S8>, s9?: Type<S9>, s10?: Type<S10>, s11?: Type<S11>, s12?: Type<S12>, s13?: Type<S13>, s14?: Type<S14>, s15?: Type<S15>, s16?: Type<S16>, s17?: Type<S17>, s18?: Type<S18>, s19?: Type<S19>, s20?: Type<S20>, s21?: Type<S21>, s22?: Type<S22>, s23?: Type<S23>, s24?: Type<S24>, s25?: Type<S25>, s26?: Type<S26>, s27?: Type<S27>, s28?: Type<S28>, s29?: Type<S29>, s30?: Type<S30>) => Type<OmitGetSetPick<S1> & OmitGetSetPick<S2> & OmitGetSetPick<S3> & OmitGetSetPick<S4> & OmitGetSetPick<S5> & OmitGetSetPick<S6> & OmitGetSetPick<S7> & OmitGetSetPick<S8> & OmitGetSetPick<S9> & OmitGetSetPick<S10> & OmitGetSetPick<S11> & OmitGetSetPick<S12> & OmitGetSetPick<S13> & OmitGetSetPick<S14> & OmitGetSetPick<S15> & OmitGetSetPick<S16> & OmitGetSetPick<S17> & OmitGetSetPick<S18> & OmitGetSetPick<S19> & OmitGetSetPick<S20> & OmitGetSetPick<S21> & OmitGetSetPick<S22> & OmitGetSetPick<S23> & OmitGetSetPick<S24> & OmitGetSetPick<S25> & OmitGetSetPick<S26> & OmitGetSetPick<S27> & OmitGetSetPick<S28> & OmitGetSetPick<S29> & OmitGetSetPick<S30> & SetGet<OmitGetSetPick<S1> & OmitGetSetPick<S2> & OmitGetSetPick<S3> & OmitGetSetPick<S4> & OmitGetSetPick<S5> & OmitGetSetPick<S6> & OmitGetSetPick<S7> & OmitGetSetPick<S8> & OmitGetSetPick<S9> & OmitGetSetPick<S10> & OmitGetSetPick<S11> & OmitGetSetPick<S12> & OmitGetSetPick<S13> & OmitGetSetPick<S14> & OmitGetSetPick<S15> & OmitGetSetPick<S16> & OmitGetSetPick<S17> & OmitGetSetPick<S18> & OmitGetSetPick<S19> & OmitGetSetPick<S20> & OmitGetSetPick<S21> & OmitGetSetPick<S22> & OmitGetSetPick<S23> & OmitGetSetPick<S24> & OmitGetSetPick<S25> & OmitGetSetPick<S26> & OmitGetSetPick<S27> & OmitGetSetPick<S28> & OmitGetSetPick<S29> & OmitGetSetPick<S30>>>;
261
- export declare const rootStoreOf: <Store>(store: Type<Store>) => Type<Store>;
256
+ [K in keyof State as K extends string ? SetKey<K> : never]: (value: FieldState<State[K]>) => void;
257
+ }>;
258
+ get: () => State;
259
+ }
260
+ interface MakeStoreOption {
261
+ library?: boolean;
262
+ }
263
+ export declare const makeStore: <State, Action, SliceInfoMap>(st: WithSelectors<any, any, any>, storeRef: Type<StoreInstance<State, Action, SliceInfoMap>>, { library }?: MakeStoreOption) => WithSelectors<State, Action, SliceInfoMap>;
264
+ export declare const MixStore: <T extends Type[]>(...stores: [...T]) => Type<StoreInstance<Prettify<MergeAllKeyOfTypes<T, "__STATE_INFO__">>, MergeAllTypes<T, "get" | "set" | "pick" | "__STATE_INFO__" | "__SLICE_INFO__">, Prettify<MergeAllKeyOfTypes<T, "__SLICE_INFO__">>>>;
265
+ export declare const rootStoreOf: <State, Action, SliceInfoMap>(store: Type<StoreInstance<State, Action, SliceInfoMap>>) => Type<StoreInstance<State, Action, SliceInfoMap>>;
262
266
  interface ToastProps {
263
267
  root?: string;
264
268
  duration?: number;