chizu 0.2.62 → 0.2.63

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/README.md CHANGED
@@ -113,7 +113,19 @@ actions.useAction(Actions.Search, async (context) => {
113
113
 
114
114
  For more details, see the [referential equality recipe](./recipes/referential-equality.md).
115
115
 
116
- If your component doesn't need local state but still needs to dispatch or listen to actions, pass `void` as the model type. No initial model is required:
116
+ Both the model and actions type parameters default to `void`, so you can call `useActions()` with no generics at all when neither is needed:
117
+
118
+ ```tsx
119
+ import { useActions, Lifecycle } from "chizu";
120
+
121
+ const actions = useActions();
122
+
123
+ actions.useAction(Lifecycle.Mount, () => {
124
+ console.log("Mounted!");
125
+ });
126
+ ```
127
+
128
+ If your component doesn't need local state but still needs to dispatch or listen to typed actions, pass `void` as the model type. No initial model is required:
117
129
 
118
130
  ```tsx
119
131
  import { useActions, Action, Lifecycle } from "chizu";
@@ -39,5 +39,5 @@ export { With } from './utils.ts';
39
39
  * );
40
40
  * ```
41
41
  */
42
- export declare function useActions<_M extends void, A extends Actions, D extends Props = Props>(getData?: Data<D>): UseActions<void, A, D>;
43
- export declare function useActions<M extends Model, A extends Actions, D extends Props = Props>(initialModel: M, getData?: Data<D>): UseActions<M, A, D>;
42
+ export declare function useActions<_M extends void = void, A extends Actions | void = void, D extends Props = Props>(getData?: Data<D>): UseActions<void, A, D>;
43
+ export declare function useActions<M extends Model, A extends Actions | void = void, D extends Props = Props>(initialModel: M, getData?: Data<D>): UseActions<M, A, D>;
@@ -25,13 +25,13 @@ export type References<M extends Model | void> = {
25
25
  * @template AC - The actions class type
26
26
  * @template D - The data props type
27
27
  */
28
- export type Handler<M extends Model | void = Model, AC extends Actions = Actions, D extends Props = Props> = (context: HandlerContext<M, AC, D>, payload: unknown) => void | Promise<void> | AsyncGenerator | Generator;
28
+ export type Handler<M extends Model | void = Model, AC extends Actions | void = Actions, D extends Props = Props> = (context: HandlerContext<M, AC, D>, payload: unknown) => void | Promise<void> | AsyncGenerator | Generator;
29
29
  /**
30
30
  * Entry for an action handler with a reactive channel getter.
31
31
  * When getChannel returns undefined, the handler fires for all dispatches.
32
32
  * When getChannel returns a channel, dispatches must match.
33
33
  */
34
- export type HandlerEntry<M extends Model | void = Model, AC extends Actions = Actions, D extends Props = Props> = {
34
+ export type HandlerEntry<M extends Model | void = Model, AC extends Actions | void = Actions, D extends Props = Props> = {
35
35
  handler: Handler<M, AC, D>;
36
36
  getChannel: () => Filter | undefined;
37
37
  };
@@ -43,7 +43,7 @@ export type HandlerEntry<M extends Model | void = Model, AC extends Actions = Ac
43
43
  * @template AC - The actions class type
44
44
  * @template D - The data props type
45
45
  */
46
- export type Scope<M extends Model | void = Model, AC extends Actions = Actions, D extends Props = Props> = {
46
+ export type Scope<M extends Model | void = Model, AC extends Actions | void = Actions, D extends Props = Props> = {
47
47
  /** All handlers for each action, with optional channels */
48
48
  handlers: Map<ActionId, Set<HandlerEntry<M, AC, D>>>;
49
49
  };
@@ -68,7 +68,7 @@ export declare function useData<P extends Props>(props: P): P;
68
68
  * actions.useAction(Actions.Visitor, With("name")); // Country -> string ✗
69
69
  * ```
70
70
  */
71
- export declare function With<K extends string>(key: K): <M extends Model, AC extends Actions, D extends Props, P extends K extends keyof M ? M[K] : never>(context: HandlerContext<M, AC, D>, payload: P) => void;
71
+ export declare function With<K extends string>(key: K): <M extends Model, AC extends Actions | void, D extends Props, P extends K extends keyof M ? M[K] : never>(context: HandlerContext<M, AC, D>, payload: P) => void;
72
72
  export { isChanneledAction, getActionSymbol };
73
73
  /**
74
74
  * Return type for useActionSets hook.
@@ -139,7 +139,7 @@ export declare function useActionSets(): ActionSets;
139
139
  *
140
140
  * @internal
141
141
  */
142
- export declare function useRegisterHandler<M extends Model | void, AC extends Actions, D extends Props>(scope: React.RefObject<Scope<M, AC, D>>, action: ActionId | HandlerPayload | ChanneledAction, handler: (context: HandlerContext<M, AC, D>, payload: unknown) => void | Promise<void> | AsyncGenerator | Generator): void;
142
+ export declare function useRegisterHandler<M extends Model | void, AC extends Actions | void, D extends Props>(scope: React.RefObject<Scope<M, AC, D>>, action: ActionId | HandlerPayload | ChanneledAction, handler: (context: HandlerContext<M, AC, D>, payload: unknown) => void | Promise<void> | AsyncGenerator | Generator): void;
143
143
  /**
144
144
  * Manages captured DOM nodes for a model type.
145
145
  * Returns refs for nodes, pending captures, and last emitted nodes.
@@ -440,7 +440,7 @@ export type Actions = object;
440
440
  export type Result = {
441
441
  processes: Set<Process>;
442
442
  };
443
- export type HandlerContext<M extends Model | void, _AC extends Actions, D extends Props = Props> = {
443
+ export type HandlerContext<M extends Model | void, _AC extends Actions | void, D extends Props = Props> = {
444
444
  readonly model: Readonly<M>;
445
445
  /**
446
446
  * The current lifecycle phase of the component.
@@ -658,7 +658,7 @@ export type HandlerContext<M extends Model | void, _AC extends Actions, D extend
658
658
  *
659
659
  * @see {@link Handlers} for the recommended HKT pattern
660
660
  */
661
- export type Handler<M extends Model | void, AC extends Actions, K extends keyof AC, D extends Props = Props> = (context: HandlerContext<M, AC, D>, payload: Payload<AC[K] & HandlerPayload<unknown>>) => void | Promise<void> | AsyncGenerator | Generator;
661
+ export type Handler<M extends Model | void, AC extends Actions | void, K extends keyof AC & string, D extends Props = Props> = (context: HandlerContext<M, AC, D>, payload: Payload<AC[K] & HandlerPayload<unknown>>) => void | Promise<void> | AsyncGenerator | Generator;
662
662
  /**
663
663
  * Resolves the action value at a (possibly dot-notated) path within an actions object.
664
664
  * For a simple key like `"SetName"`, returns `AC["SetName"]`.
@@ -719,10 +719,10 @@ type FlattenKeys<AC, Prefix extends string = never> = {
719
719
  * export const handlePaymentSent: H["Broadcast.PaymentSent"] = (context) => { ... };
720
720
  * ```
721
721
  */
722
- export type Handlers<M extends Model | void, AC extends Actions, D extends Props = Props> = {
722
+ export type Handlers<M extends Model | void, AC extends Actions | void, D extends Props = Props> = {
723
723
  [K in FlattenKeys<AC>]: (context: HandlerContext<M, AC, D>, payload: Payload<DeepAction<AC, K> & HandlerPayload<unknown>>) => void | Promise<void> | AsyncGenerator | Generator;
724
724
  };
725
- export type UseActions<M extends Model | void, AC extends Actions, D extends Props = Props> = [
725
+ export type UseActions<M extends Model | void, AC extends Actions | void, D extends Props = Props> = [
726
726
  Readonly<M>,
727
727
  {
728
728
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chizu",
3
- "version": "0.2.62",
3
+ "version": "0.2.63",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "packageManager": "yarn@1.22.22",