foldkit 0.150.0 → 0.151.0

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 (97) hide show
  1. package/README.md +13 -13
  2. package/dist/asyncData/asyncData.d.ts +3 -4
  3. package/dist/asyncData/asyncData.d.ts.map +1 -1
  4. package/dist/asyncData/asyncData.js +3 -4
  5. package/dist/command/index.d.ts +14 -13
  6. package/dist/command/index.d.ts.map +1 -1
  7. package/dist/command/index.js +13 -12
  8. package/dist/experimental/machine/machine.d.ts +9 -2
  9. package/dist/experimental/machine/machine.d.ts.map +1 -1
  10. package/dist/experimental/machine/machine.js +3 -3
  11. package/dist/experimental/server/server.d.ts +6 -5
  12. package/dist/experimental/server/server.d.ts.map +1 -1
  13. package/dist/experimental/server/server.js +1 -2
  14. package/dist/html/submodel.d.ts +4 -4
  15. package/dist/html/submodel.d.ts.map +1 -1
  16. package/dist/runtime/runtime.d.ts +11 -47
  17. package/dist/runtime/runtime.d.ts.map +1 -1
  18. package/dist/runtime/runtime.js +9 -5
  19. package/dist/test/apps/attributes.d.ts +11 -4
  20. package/dist/test/apps/attributes.d.ts.map +1 -1
  21. package/dist/test/apps/attributes.js +1 -1
  22. package/dist/test/apps/bubbling.d.ts +13 -4
  23. package/dist/test/apps/bubbling.d.ts.map +1 -1
  24. package/dist/test/apps/bubbling.js +8 -6
  25. package/dist/test/apps/colorPicker.d.ts +11 -3
  26. package/dist/test/apps/colorPicker.d.ts.map +1 -1
  27. package/dist/test/apps/colorPicker.js +3 -1
  28. package/dist/test/apps/contextMenu.d.ts +16 -8
  29. package/dist/test/apps/contextMenu.d.ts.map +1 -1
  30. package/dist/test/apps/contextMenu.js +3 -4
  31. package/dist/test/apps/counter.d.ts +10 -10
  32. package/dist/test/apps/counter.d.ts.map +1 -1
  33. package/dist/test/apps/counter.js +26 -20
  34. package/dist/test/apps/crashOnRender.d.ts +12 -12
  35. package/dist/test/apps/crashOnRender.d.ts.map +1 -1
  36. package/dist/test/apps/crashOnRender.js +6 -7
  37. package/dist/test/apps/drafts.d.ts +10 -10
  38. package/dist/test/apps/drafts.d.ts.map +1 -1
  39. package/dist/test/apps/drafts.js +7 -5
  40. package/dist/test/apps/feedSocket.d.ts +19 -4
  41. package/dist/test/apps/feedSocket.d.ts.map +1 -1
  42. package/dist/test/apps/feedSocket.js +12 -7
  43. package/dist/test/apps/fileUpload.d.ts +11 -3
  44. package/dist/test/apps/fileUpload.d.ts.map +1 -1
  45. package/dist/test/apps/fileUpload.js +3 -1
  46. package/dist/test/apps/formChild.d.ts +48 -3
  47. package/dist/test/apps/formChild.d.ts.map +1 -1
  48. package/dist/test/apps/formChild.js +33 -38
  49. package/dist/test/apps/interactions.d.ts +25 -7
  50. package/dist/test/apps/interactions.d.ts.map +1 -1
  51. package/dist/test/apps/interactions.js +20 -10
  52. package/dist/test/apps/keypress.d.ts +15 -4
  53. package/dist/test/apps/keypress.d.ts.map +1 -1
  54. package/dist/test/apps/keypress.js +13 -5
  55. package/dist/test/apps/login.d.ts +13 -13
  56. package/dist/test/apps/login.d.ts.map +1 -1
  57. package/dist/test/apps/login.js +28 -18
  58. package/dist/test/apps/logoutButton.d.ts +15 -6
  59. package/dist/test/apps/logoutButton.d.ts.map +1 -1
  60. package/dist/test/apps/logoutButton.js +6 -3
  61. package/dist/test/apps/mountPanel.d.ts +25 -5
  62. package/dist/test/apps/mountPanel.d.ts.map +1 -1
  63. package/dist/test/apps/mountPanel.js +14 -10
  64. package/dist/test/apps/multiRole.d.ts +10 -3
  65. package/dist/test/apps/multiRole.d.ts.map +1 -1
  66. package/dist/test/apps/multiRole.js +5 -2
  67. package/dist/test/apps/pointer.d.ts +16 -5
  68. package/dist/test/apps/pointer.d.ts.map +1 -1
  69. package/dist/test/apps/pointer.js +6 -8
  70. package/dist/test/apps/resumeUpload.d.ts +25 -4
  71. package/dist/test/apps/resumeUpload.d.ts.map +1 -1
  72. package/dist/test/apps/resumeUpload.js +16 -15
  73. package/dist/test/apps/scorePanel.d.ts +10 -3
  74. package/dist/test/apps/scorePanel.d.ts.map +1 -1
  75. package/dist/test/apps/scorePanel.js +3 -1
  76. package/dist/test/apps/selectiveKeys.d.ts +14 -3
  77. package/dist/test/apps/selectiveKeys.d.ts.map +1 -1
  78. package/dist/test/apps/selectiveKeys.js +7 -3
  79. package/dist/test/apps/uploads.d.ts +13 -13
  80. package/dist/test/apps/uploads.d.ts.map +1 -1
  81. package/dist/test/apps/uploads.js +23 -24
  82. package/dist/test/internal.d.ts +18 -3
  83. package/dist/test/internal.d.ts.map +1 -1
  84. package/dist/test/internal.js +8 -16
  85. package/dist/test/scene.d.ts +16 -19
  86. package/dist/test/scene.d.ts.map +1 -1
  87. package/dist/test/scene.js +11 -27
  88. package/dist/test/story.d.ts +16 -8
  89. package/dist/test/story.d.ts.map +1 -1
  90. package/dist/test/story.js +12 -17
  91. package/dist/update/public.d.ts +2 -2
  92. package/dist/update/public.d.ts.map +1 -1
  93. package/dist/update/public.js +1 -1
  94. package/dist/update/update.d.ts +143 -69
  95. package/dist/update/update.d.ts.map +1 -1
  96. package/dist/update/update.js +72 -42
  97. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"feedSocket.d.ts","sourceRoot":"","sources":["../../../src/test/apps/feedSocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE7D,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,eAAe,MAAM,gCAAgC,CAAA;AAMjE,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;;;;;;;EAKlB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAMvD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;kBANoB,MAAM;;kBAAN,MAAM;;;;;;;;;;;;;;;;;;;;;;CA8BjD,CAAA;AAIH,eAAO,MAAM,YAAY;;;CAGvB,CAAA;AAIF,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;;oBASjD,CAAA;AAIJ,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAU1D,CAAA"}
1
+ {"version":3,"file":"feedSocket.d.ts","sourceRoot":"","sources":["../../../src/test/apps/feedSocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE7D,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,eAAe,MAAM,gCAAgC,CAAA;AAGjE,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAIpD,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;;;;;;;EAKlB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAMvD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;kBANoB,MAAM;;kBAAN,MAAM;;;;;;;;;;;;;;;;;;;;;;CA8BjD,CAAA;AAIH,eAAO,MAAM,YAAY;;;CAGvB,CAAA;AAIF,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;;;;;;;;;;;;;;;;EAcjD,CAAA;AAIJ,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAU1D,CAAA"}
@@ -43,13 +43,18 @@ export const initialModel = Model.make({
43
43
  });
44
44
  // UPDATE
45
45
  export const update = (model, message) => Message.match(message, {
46
- ClickedToggleFeed: () => [evo(model, { isFeedOpen: Boolean.not }), []],
47
- AcquiredFeedSocket: () => [evo(model, { status: () => 'Connected' }), []],
48
- ReleasedFeedSocket: () => [
49
- evo(model, { status: () => 'Disconnected' }),
50
- [],
51
- ],
52
- FailedAcquireFeedSocket: () => [evo(model, { status: () => 'Failed' }), []],
46
+ ClickedToggleFeed: () => ({
47
+ model: evo(model, { isFeedOpen: Boolean.not }),
48
+ }),
49
+ AcquiredFeedSocket: () => ({
50
+ model: evo(model, { status: () => 'Connected' }),
51
+ }),
52
+ ReleasedFeedSocket: () => ({
53
+ model: evo(model, { status: () => 'Disconnected' }),
54
+ }),
55
+ FailedAcquireFeedSocket: () => ({
56
+ model: evo(model, { status: () => 'Failed' }),
57
+ }),
53
58
  });
54
59
  // VIEW
55
60
  export const view = (model, h) => h.div([], [
@@ -1,6 +1,7 @@
1
1
  import { Schema as S } from 'effect';
2
2
  import { File } from '../../file/index.js';
3
3
  import type { Html, HtmlBuilder } from '../../html/index.js';
4
+ import type * as Update from '../../update/index.js';
4
5
  export type Model = Readonly<{
5
6
  receivedFiles: ReadonlyArray<File>;
6
7
  }>;
@@ -11,8 +12,15 @@ export declare const Message: import("../../schema/index.js").MessageUnion<{
11
12
  };
12
13
  }>;
13
14
  export type Message = typeof Message.Type;
14
- export declare const update: (model: Model, message: Message) => readonly [Readonly<{
15
- receivedFiles: ReadonlyArray<File>;
16
- }>, readonly never[]];
15
+ export declare const update: (model: Model, message: Message) => Readonly<{
16
+ model: Readonly<{
17
+ receivedFiles: ReadonlyArray<File>;
18
+ }>;
19
+ commands?: Update.Commands<{
20
+ readonly _tag: "ReceivedFiles";
21
+ readonly files: readonly globalThis.File[];
22
+ }, never>;
23
+ outMessage?: never;
24
+ }>;
17
25
  export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
18
26
  //# sourceMappingURL=fileUpload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fileUpload.d.ts","sourceRoot":"","sources":["../../../src/test/apps/fileUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAK5D,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;CACnC,CAAC,CAAA;AAEF,eAAO,MAAM,YAAY,EAAE,KAA6B,CAAA;AAIxD,eAAO,MAAM,OAAO;;;;EAElB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;mBAfpC,aAAa,CAAC,IAAI,CAAC;qBAkBhC,CAAA;AAIJ,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IA4B5D,CAAA"}
1
+ {"version":3,"file":"fileUpload.d.ts","sourceRoot":"","sources":["../../../src/test/apps/fileUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAIpD,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;CACnC,CAAC,CAAA;AAEF,eAAO,MAAM,YAAY,EAAE,KAA6B,CAAA;AAIxD,eAAO,MAAM,OAAO;;;;EAElB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;uBAfpC,aAAa,CAAC,IAAI,CAAC;;;;;;;EAoBhC,CAAA;AAIJ,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IA4B5D,CAAA"}
@@ -8,7 +8,9 @@ export const Message = defineMessageUnion({
8
8
  });
9
9
  // UPDATE
10
10
  export const update = (model, message) => Message.match(message, {
11
- ReceivedFiles: ({ files }) => [{ ...model, receivedFiles: files }, []],
11
+ ReceivedFiles: ({ files }) => ({
12
+ model: { ...model, receivedFiles: files },
13
+ }),
12
14
  });
13
15
  // VIEW
14
16
  export const view = (model, h) => {
@@ -1,5 +1,6 @@
1
- import { Effect, Option, Schema as S } from 'effect';
1
+ import { Effect, Schema as S } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
+ import * as Update from '../../update/index.js';
3
4
  export declare const ChildModel: S.Struct<{
4
5
  readonly status: S.Literals<readonly ["Idle", "Submitting", "Submitted"]>;
5
6
  }>;
@@ -34,7 +35,27 @@ export declare const ResetForm: Command.CommandDefinitionNoArgs<"ResetForm", Eff
34
35
  readonly _tag: "CompletedResetForm";
35
36
  }, never, never>>;
36
37
  export declare const initialChildModel: ChildModel;
37
- export declare const childUpdate: (_model: ChildModel, message: ChildMessage) => readonly [ChildModel, ReadonlyArray<Command.Command<ChildMessage>>, Option.Option<ChildOutMessage>];
38
+ export declare const childUpdate: (_model: ChildModel, message: ChildMessage) => Readonly<{
39
+ model: {
40
+ readonly status: "Idle" | "Submitting" | "Submitted";
41
+ };
42
+ commands?: Update.Commands<{
43
+ readonly _tag: "SubmittedForm";
44
+ } | {
45
+ readonly _tag: "SucceededSubmitForm";
46
+ readonly id: string;
47
+ } | {
48
+ readonly _tag: "CancelledForm";
49
+ } | {
50
+ readonly _tag: "CompletedResetForm";
51
+ }, never>;
52
+ outMessage?: {
53
+ readonly _tag: "RequestedSave";
54
+ readonly id: string;
55
+ } | {
56
+ readonly _tag: "RequestedCancel";
57
+ };
58
+ }>;
38
59
  export declare const ParentModel: S.Struct<{
39
60
  readonly child: S.Struct<{
40
61
  readonly status: S.Literals<readonly ["Idle", "Submitting", "Submitted"]>;
@@ -68,5 +89,29 @@ export declare const GotChildMessage: import("../../schema/index.js").CallableTa
68
89
  }>, CompletedParentReset: import("../../schema/index.js").CallableTaggedStruct<"CompletedParentReset", {}>;
69
90
  export type ParentMessage = typeof ParentMessage.Type;
70
91
  export declare const initialParentModel: ParentModel;
71
- export declare const parentUpdate: (parentModel: ParentModel, message: ParentMessage) => readonly [ParentModel, ReadonlyArray<Command.Command<ParentMessage>>];
92
+ export declare const parentUpdate: (parentModel: ParentModel, message: ParentMessage) => Readonly<{
93
+ model: {
94
+ readonly child: {
95
+ readonly status: "Idle" | "Submitting" | "Submitted";
96
+ };
97
+ readonly savedIds: readonly string[];
98
+ readonly cancelled: boolean;
99
+ };
100
+ commands?: Update.Commands<{
101
+ readonly _tag: "GotChildMessage";
102
+ readonly message: {
103
+ readonly _tag: "SubmittedForm";
104
+ } | {
105
+ readonly _tag: "SucceededSubmitForm";
106
+ readonly id: string;
107
+ } | {
108
+ readonly _tag: "CancelledForm";
109
+ } | {
110
+ readonly _tag: "CompletedResetForm";
111
+ };
112
+ } | {
113
+ readonly _tag: "CompletedParentReset";
114
+ }, never>;
115
+ outMessage?: never;
116
+ }>;
72
117
  //# sourceMappingURL=formChild.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formChild.d.ts","sourceRoot":"","sources":["../../../src/test/apps/formChild.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEpD,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AAKjD,eAAO,MAAM,UAAU;;EAErB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAI/C,eAAO,MAAM,YAAY;;;;;;;EAKvB,CAAA;AAEF,eAAO,MACL,aAAa,6EACb,mBAAmB;;IACnB,aAAa,6EACb,kBAAkB,gFACJ,CAAA;AAEhB,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAInD,eAAO,MAAM,eAAe;;;;;EAG1B,CAAA;AAEF,eAAO,MAAQ,aAAa;;IAAE,eAAe,6EAAoB,CAAA;AAEjE,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AAIzD,eAAO,MAAM,UAAU;;;iBAGrB,CAAA;AAEF,eAAO,MAAM,SAAS;;iBAGpB,CAAA;AAIF,eAAO,MAAM,iBAAiB,EAAE,UAA+B,CAAA;AAI/D,eAAO,MAAM,WAAW,GACtB,QAAQ,UAAU,EAClB,SAAS,YAAY,KACpB,SAAS,CACV,UAAU,EACV,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAC5C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAyB5B,CAAA;AAIJ,eAAO,MAAM,WAAW;;;;;;EAItB,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AAIjD,eAAO,MAAM,aAAa;;;;;;;;;;;;EAGxB,CAAA;AAEF,eAAO,MAAQ,eAAe;;;;;;;;;IAAE,oBAAoB,kFAAkB,CAAA;AAEtE,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAIrD,eAAO,MAAM,kBAAkB,EAAE,WAIhC,CAAA;AAID,eAAO,MAAM,YAAY,GACvB,aAAa,WAAW,EACxB,SAAS,aAAa,KACrB,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CA+BnE,CAAA"}
1
+ {"version":3,"file":"formChild.d.ts","sourceRoot":"","sources":["../../../src/test/apps/formChild.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAsB,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhE,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AAEjD,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAI/C,eAAO,MAAM,UAAU;;EAErB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAI/C,eAAO,MAAM,YAAY;;;;;;;EAKvB,CAAA;AAEF,eAAO,MACL,aAAa,6EACb,mBAAmB;;IACnB,aAAa,6EACb,kBAAkB,gFACJ,CAAA;AAEhB,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAInD,eAAO,MAAM,eAAe;;;;;EAG1B,CAAA;AAEF,eAAO,MAAQ,aAAa;;IAAE,eAAe,6EAAoB,CAAA;AAEjE,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AAIzD,eAAO,MAAM,UAAU;;;iBAGrB,CAAA;AAEF,eAAO,MAAM,SAAS;;iBAGpB,CAAA;AAIF,eAAO,MAAM,iBAAiB,EAAE,UAA+B,CAAA;AAI/D,eAAO,MAAM,WAAW,GAAI,QAAQ,UAAU,EAAE,SAAS,YAAY;;;;;;;;;;;;;;;;;;;;EAkBjE,CAAA;AAIJ,eAAO,MAAM,WAAW;;;;;;EAItB,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AAIjD,eAAO,MAAM,aAAa;;;;;;;;;;;;EAGxB,CAAA;AAEF,eAAO,MAAQ,eAAe;;;;;;;;;IAAE,oBAAoB,kFAAkB,CAAA;AAEtE,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAIrD,eAAO,MAAM,kBAAkB,EAAE,WAIhC,CAAA;AA0BD,eAAO,MAAM,YAAY,GACvB,aAAa,WAAW,EACxB,SAAS,aAAa;;;;;;;;;;;;;;;;;;;;;;;;EAMpB,CAAA"}
@@ -1,6 +1,7 @@
1
- import { Effect, Option, Schema as S } from 'effect';
1
+ import { Effect, Match as M, Option, Schema as S } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
3
  import { defineMessageUnion } from '../../message/index.js';
4
+ import * as Update from '../../update/index.js';
4
5
  // CHILD MODEL
5
6
  export const ChildModel = S.Struct({
6
7
  status: S.Literals(['Idle', 'Submitting', 'Submitted']),
@@ -32,22 +33,20 @@ export const ResetForm = Command.define('ResetForm', {
32
33
  export const initialChildModel = { status: 'Idle' };
33
34
  // CHILD UPDATE
34
35
  export const childUpdate = (_model, message) => ChildMessage.match(message, {
35
- SubmittedForm: () => [
36
- { status: 'Submitting' },
37
- [SubmitForm()],
38
- Option.none(),
39
- ],
40
- SucceededSubmitForm: ({ id }) => [
41
- { status: 'Submitted' },
42
- [ResetForm()],
43
- Option.some(ChildOutMessage.RequestedSave({ id })),
44
- ],
45
- CancelledForm: () => [
46
- { status: 'Idle' },
47
- [],
48
- Option.some(ChildOutMessage.RequestedCancel()),
49
- ],
50
- CompletedResetForm: () => [{ status: 'Idle' }, [], Option.none()],
36
+ SubmittedForm: () => ({
37
+ model: { status: 'Submitting' },
38
+ commands: [SubmitForm()],
39
+ }),
40
+ SucceededSubmitForm: ({ id }) => ({
41
+ model: { status: 'Submitted' },
42
+ commands: [ResetForm()],
43
+ outMessage: ChildOutMessage.RequestedSave({ id }),
44
+ }),
45
+ CancelledForm: () => ({
46
+ model: { status: 'Idle' },
47
+ outMessage: ChildOutMessage.RequestedCancel(),
48
+ }),
49
+ CompletedResetForm: () => ({ model: { status: 'Idle' } }),
51
50
  });
52
51
  // PARENT MODEL
53
52
  export const ParentModel = S.Struct({
@@ -68,26 +67,22 @@ export const initialParentModel = {
68
67
  cancelled: false,
69
68
  };
70
69
  // PARENT UPDATE
70
+ const foldChildOutMessage = M.type().pipe(M.withReturnType(), M.tagsExhaustive({
71
+ RequestedSave: ({ id }) => model => ({
72
+ model: { ...model, savedIds: [...model.savedIds, id] },
73
+ }),
74
+ RequestedCancel: () => model => ({
75
+ model: { ...model, cancelled: true },
76
+ }),
77
+ }));
78
+ const foldChildUpdate = Update.foldChild({
79
+ update: childUpdate,
80
+ read: (model) => Option.some(model.child),
81
+ write: (model, nextChild) => ({ ...model, child: nextChild }),
82
+ toParentMessage: message => ParentMessage.GotChildMessage({ message }),
83
+ foldOutMessage: foldChildOutMessage,
84
+ });
71
85
  export const parentUpdate = (parentModel, message) => ParentMessage.match(message, {
72
- GotChildMessage: ({ message: childMessage }) => {
73
- const [nextChild, commands, maybeOutMessage] = childUpdate(parentModel.child, childMessage);
74
- const nextParent = Option.match(maybeOutMessage, {
75
- onNone: () => ({ ...parentModel, child: nextChild }),
76
- onSome: outMessage => ChildOutMessage.match(outMessage, {
77
- RequestedSave: ({ id }) => ({
78
- ...parentModel,
79
- child: nextChild,
80
- savedIds: [...parentModel.savedIds, id],
81
- }),
82
- RequestedCancel: () => ({
83
- ...parentModel,
84
- child: nextChild,
85
- cancelled: true,
86
- }),
87
- }),
88
- });
89
- const mappedCommands = Command.mapMessages(commands, childMessage => ParentMessage.GotChildMessage({ message: childMessage }));
90
- return [nextParent, mappedCommands];
91
- },
92
- CompletedParentReset: () => [parentModel, []],
86
+ GotChildMessage: ({ message: childMessage }) => foldChildUpdate(parentModel, childMessage),
87
+ CompletedParentReset: () => ({ model: parentModel }),
93
88
  });
@@ -1,5 +1,6 @@
1
1
  import { Schema as S } from 'effect';
2
2
  import type { Html, HtmlBuilder } from '../../html/index.js';
3
+ import type * as Update from '../../update/index.js';
3
4
  export declare const Model: S.Struct<{
4
5
  readonly clicks: S.Number;
5
6
  readonly doubleClicks: S.Number;
@@ -20,12 +21,29 @@ export declare const Message: import("../../schema/index.js").MessageUnion<{
20
21
  }>;
21
22
  export type Message = typeof Message.Type;
22
23
  export declare const initialModel: Model;
23
- export declare const update: (model: Model, message: Message) => readonly [{
24
- readonly clicks: number;
25
- readonly doubleClicks: number;
26
- readonly hovered: boolean;
27
- readonly focused: boolean;
28
- readonly changed: string;
29
- }, readonly never[]];
24
+ export declare const update: (model: Model, message: Message) => Readonly<{
25
+ model: {
26
+ readonly clicks: number;
27
+ readonly doubleClicks: number;
28
+ readonly hovered: boolean;
29
+ readonly focused: boolean;
30
+ readonly changed: string;
31
+ };
32
+ commands?: Update.Commands<{
33
+ readonly _tag: "ClickedButton";
34
+ } | {
35
+ readonly _tag: "DoubleClickedButton";
36
+ } | {
37
+ readonly _tag: "HoveredTarget";
38
+ } | {
39
+ readonly _tag: "FocusedInput";
40
+ } | {
41
+ readonly _tag: "BlurredInput";
42
+ } | {
43
+ readonly _tag: "ChangedSelect";
44
+ readonly value: string;
45
+ }, never>;
46
+ outMessage?: never;
47
+ }>;
30
48
  export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
31
49
  //# sourceMappingURL=interactions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../../src/test/apps/interactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAK5D,eAAO,MAAM,KAAK;;;;;;EAMhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;;;;;;;EAOlB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAID,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;;;;;oBAWjD,CAAA;AAIJ,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IA+B5D,CAAA"}
1
+ {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../../src/test/apps/interactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE5C,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAG5D,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAIpD,eAAO,MAAM,KAAK;;;;;;EAMhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;;;;;;;EAOlB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAID,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;;;;;;;;;;;;;;;;;;;;;;EAoBjD,CAAA;AAIJ,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IA+B5D,CAAA"}
@@ -1,5 +1,6 @@
1
- import { Schema as S } from 'effect';
1
+ import { Number, Schema as S } from 'effect';
2
2
  import { defineMessageUnion } from '../../message/index.js';
3
+ import { evo } from '../../struct/index.js';
3
4
  // MODEL
4
5
  export const Model = S.Struct({
5
6
  clicks: S.Number,
@@ -27,15 +28,24 @@ export const initialModel = {
27
28
  };
28
29
  // UPDATE
29
30
  export const update = (model, message) => Message.match(message, {
30
- ClickedButton: () => [{ ...model, clicks: model.clicks + 1 }, []],
31
- DoubleClickedButton: () => [
32
- { ...model, doubleClicks: model.doubleClicks + 1 },
33
- [],
34
- ],
35
- HoveredTarget: () => [{ ...model, hovered: true }, []],
36
- FocusedInput: () => [{ ...model, focused: true }, []],
37
- BlurredInput: () => [{ ...model, focused: false }, []],
38
- ChangedSelect: ({ value }) => [{ ...model, changed: value }, []],
31
+ ClickedButton: () => ({
32
+ model: evo(model, { clicks: Number.increment }),
33
+ }),
34
+ DoubleClickedButton: () => ({
35
+ model: evo(model, { doubleClicks: Number.increment }),
36
+ }),
37
+ HoveredTarget: () => ({
38
+ model: evo(model, { hovered: () => true }),
39
+ }),
40
+ FocusedInput: () => ({
41
+ model: evo(model, { focused: () => true }),
42
+ }),
43
+ BlurredInput: () => ({
44
+ model: evo(model, { focused: () => false }),
45
+ }),
46
+ ChangedSelect: ({ value }) => ({
47
+ model: evo(model, { changed: () => value }),
48
+ }),
39
49
  });
40
50
  // VIEW
41
51
  export const view = (model, h) => {
@@ -1,5 +1,6 @@
1
1
  import { Schema as S } from 'effect';
2
2
  import type { Html, HtmlBuilder } from '../../html/index.js';
3
+ import type * as Update from '../../update/index.js';
3
4
  export declare const Model: S.Struct<{
4
5
  readonly lastKey: S.String;
5
6
  readonly isShifted: S.Boolean;
@@ -15,9 +16,19 @@ export declare const Message: import("../../schema/index.js").MessageUnion<{
15
16
  }>;
16
17
  export type Message = typeof Message.Type;
17
18
  export declare const initialModel: Model;
18
- export declare const update: (model: Model, message: Message) => readonly [{
19
- readonly lastKey: string;
20
- readonly isShifted: boolean;
21
- }, readonly never[]];
19
+ export declare const update: (model: Model, message: Message) => Readonly<{
20
+ model: {
21
+ readonly lastKey: string;
22
+ readonly isShifted: boolean;
23
+ };
24
+ commands?: Update.Commands<{
25
+ readonly _tag: "PressedKey";
26
+ readonly key: string;
27
+ } | {
28
+ readonly _tag: "PressedShiftKey";
29
+ readonly key: string;
30
+ }, never>;
31
+ outMessage?: never;
32
+ }>;
22
33
  export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
23
34
  //# sourceMappingURL=keypress.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"keypress.d.ts","sourceRoot":"","sources":["../../../src/test/apps/keypress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAK5D,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;;;;;EAGlB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY,EAAE,KAG1B,CAAA;AAID,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;;oBAOjD,CAAA;AAIJ,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAoB5D,CAAA"}
1
+ {"version":3,"file":"keypress.d.ts","sourceRoot":"","sources":["../../../src/test/apps/keypress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAG5D,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAIpD,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;;;;;EAGlB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY,EAAE,KAG1B,CAAA;AAID,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;;;;;;;;;;;;EAcjD,CAAA;AAIJ,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAoB5D,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { Schema as S } from 'effect';
2
2
  import { defineMessageUnion } from '../../message/index.js';
3
+ import { evo } from '../../struct/index.js';
3
4
  // MODEL
4
5
  export const Model = S.Struct({
5
6
  lastKey: S.String,
@@ -17,11 +18,18 @@ export const initialModel = {
17
18
  };
18
19
  // UPDATE
19
20
  export const update = (model, message) => Message.match(message, {
20
- PressedKey: ({ key }) => [{ ...model, lastKey: key, isShifted: false }, []],
21
- PressedShiftKey: ({ key }) => [
22
- { ...model, lastKey: key, isShifted: true },
23
- [],
24
- ],
21
+ PressedKey: ({ key }) => ({
22
+ model: evo(model, {
23
+ lastKey: () => key,
24
+ isShifted: () => false,
25
+ }),
26
+ }),
27
+ PressedShiftKey: ({ key }) => ({
28
+ model: evo(model, {
29
+ lastKey: () => key,
30
+ isShifted: () => true,
31
+ }),
32
+ }),
25
33
  });
26
34
  // VIEW
27
35
  export const view = (model, h) => {
@@ -1,6 +1,7 @@
1
1
  import { Effect, Schema as S } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
3
  import type { Html, HtmlBuilder } from '../../html/index.js';
4
+ import type * as Update from '../../update/index.js';
4
5
  export declare const Model: S.Struct<{
5
6
  readonly email: S.String;
6
7
  readonly password: S.String;
@@ -31,17 +32,15 @@ export declare const Authenticate: Command.CommandDefinitionNoArgs<"Authenticate
31
32
  readonly username: string;
32
33
  }, never, never>>;
33
34
  export declare const initialModel: Model;
34
- export declare const update: (model: Model, message: Message) => readonly [{
35
- readonly email: string;
36
- readonly password: string;
37
- readonly status: "Idle" | "Error" | "Submitting" | "LoggedIn";
38
- readonly username: string;
39
- readonly error: string;
40
- }, readonly Readonly<{
41
- name: string;
42
- args?: Record<string, unknown>;
43
- key?: string;
44
- effect: Effect.Effect<{
35
+ export declare const update: (model: Model, message: Message) => Readonly<{
36
+ model: {
37
+ readonly email: string;
38
+ readonly password: string;
39
+ readonly status: "Idle" | "Error" | "Submitting" | "LoggedIn";
40
+ readonly username: string;
41
+ readonly error: string;
42
+ };
43
+ commands?: Update.Commands<{
45
44
  readonly _tag: "UpdatedEmail";
46
45
  readonly value: string;
47
46
  } | {
@@ -57,7 +56,8 @@ export declare const update: (model: Model, message: Message) => readonly [{
57
56
  readonly error: string;
58
57
  } | {
59
58
  readonly _tag: "ClickedLogout";
60
- }, never, never>;
61
- }>[]];
59
+ }, never>;
60
+ outMessage?: never;
61
+ }>;
62
62
  export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
63
63
  //# sourceMappingURL=login.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/test/apps/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAK5D,eAAO,MAAM,KAAK;;;;;;EAMhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;EAOlB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY;;;iBAKvB,CAAA;AAIF,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAID,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuBlD,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IA8E5D,CAAA"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/test/apps/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAG5D,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAIpD,eAAO,MAAM,KAAK;;;;;;EAMhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;EAOlB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY;;;iBAKvB,CAAA;AAIF,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAID,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BjD,CAAA;AAIJ,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IA8E5D,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { Effect, Match as M, Schema as S } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
3
  import { defineMessageUnion } from '../../message/index.js';
4
+ import { evo } from '../../struct/index.js';
4
5
  // MODEL
5
6
  export const Model = S.Struct({
6
7
  email: S.String,
@@ -33,24 +34,33 @@ export const initialModel = {
33
34
  };
34
35
  // UPDATE
35
36
  export const update = (model, message) => Message.match(message, {
36
- UpdatedEmail: ({ value }) => [{ ...model, email: value }, []],
37
- UpdatedPassword: ({ value }) => [{ ...model, password: value }, []],
38
- SubmittedLogin: () => [
39
- { ...model, status: 'Submitting' },
40
- [Authenticate()],
41
- ],
42
- SucceededAuthenticate: ({ username }) => [
43
- { ...model, status: 'LoggedIn', username },
44
- [],
45
- ],
46
- FailedAuthenticate: ({ error }) => [
47
- { ...model, status: 'Error', error },
48
- [],
49
- ],
50
- ClickedLogout: () => [
51
- { ...model, status: 'Idle', username: '', email: '', password: '' },
52
- [],
53
- ],
37
+ UpdatedEmail: ({ value }) => ({
38
+ model: evo(model, { email: () => value }),
39
+ }),
40
+ UpdatedPassword: ({ value }) => ({
41
+ model: evo(model, { password: () => value }),
42
+ }),
43
+ SubmittedLogin: () => ({
44
+ model: evo(model, { status: () => 'Submitting' }),
45
+ commands: [Authenticate()],
46
+ }),
47
+ SucceededAuthenticate: ({ username }) => ({
48
+ model: evo(model, {
49
+ status: () => 'LoggedIn',
50
+ username: () => username,
51
+ }),
52
+ }),
53
+ FailedAuthenticate: ({ error }) => ({
54
+ model: evo(model, { status: () => 'Error', error: () => error }),
55
+ }),
56
+ ClickedLogout: () => ({
57
+ model: evo(model, {
58
+ status: () => 'Idle',
59
+ username: () => '',
60
+ email: () => '',
61
+ password: () => '',
62
+ }),
63
+ }),
54
64
  });
55
65
  // VIEW
56
66
  export const view = (model, h) => {
@@ -1,5 +1,6 @@
1
- import { Option, Schema as S } from 'effect';
1
+ import { Schema as S } from 'effect';
2
2
  import type { Html, HtmlBuilder } from '../../html/index.js';
3
+ import type * as Update from '../../update/index.js';
3
4
  export declare const Model: S.Struct<{
4
5
  readonly label: S.String;
5
6
  }>;
@@ -14,10 +15,18 @@ export declare const OutMessage: import("../../schema/index.js").MessageUnion<{
14
15
  }>;
15
16
  export type OutMessage = typeof OutMessage.Type;
16
17
  export declare const initialModel: Model;
17
- export declare const update: (model: Model, message: Message) => readonly [{
18
- readonly label: string;
19
- }, readonly never[], Option.Option<{
20
- readonly _tag: "RequestedLogout";
21
- }>];
18
+ export declare const update: (model: Model, message: Message) => Readonly<{
19
+ model: {
20
+ readonly label: string;
21
+ };
22
+ commands?: Update.Commands<{
23
+ readonly _tag: "ClickedLogout";
24
+ } | {
25
+ readonly _tag: "CompletedAction";
26
+ }, never>;
27
+ outMessage?: {
28
+ readonly _tag: "RequestedLogout";
29
+ };
30
+ }>;
22
31
  export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
23
32
  //# sourceMappingURL=logoutButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logoutButton.d.ts","sourceRoot":"","sources":["../../../src/test/apps/logoutButton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE5C,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAK5D,eAAO,MAAM,KAAK;;EAAgC,CAAA;AAClD,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;EAGlB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,UAAU;;EAErB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAI/C,eAAO,MAAM,YAAY,EAAE,KAA4B,CAAA;AAIvD,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;;;GAMjD,CAAA;AAIJ,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAU5D,CAAA"}
1
+ {"version":3,"file":"logoutButton.d.ts","sourceRoot":"","sources":["../../../src/test/apps/logoutButton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAIpD,eAAO,MAAM,KAAK;;EAAgC,CAAA;AAClD,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;EAGlB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,UAAU;;EAErB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAI/C,eAAO,MAAM,YAAY,EAAE,KAA4B,CAAA;AAIvD,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;;;;;;;;;;;EAUlD,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAU5D,CAAA"}
@@ -1,4 +1,4 @@
1
- import { Option, Schema as S } from 'effect';
1
+ import { Schema as S } from 'effect';
2
2
  import { defineMessageUnion } from '../../message/index.js';
3
3
  // MODEL
4
4
  export const Model = S.Struct({ label: S.String });
@@ -15,8 +15,11 @@ export const OutMessage = defineMessageUnion({
15
15
  export const initialModel = { label: 'Log out' };
16
16
  // UPDATE
17
17
  export const update = (model, message) => Message.match(message, {
18
- ClickedLogout: () => [model, [], Option.some(OutMessage.RequestedLogout())],
19
- CompletedAction: () => [model, [], Option.none()],
18
+ ClickedLogout: () => ({
19
+ model,
20
+ outMessage: OutMessage.RequestedLogout(),
21
+ }),
22
+ CompletedAction: () => ({ model }),
20
23
  });
21
24
  // VIEW
22
25
  export const view = (model, h) => {
@@ -1,6 +1,7 @@
1
1
  import { Option, Schema as S } from 'effect';
2
2
  import type { Html, HtmlBuilder } from '../../html/index.js';
3
3
  import * as Mount from '../../mount/index.js';
4
+ import type * as Update from '../../update/index.js';
4
5
  export declare const Model: S.Struct<{
5
6
  readonly isOpen: S.Boolean;
6
7
  readonly measuredWidth: S.OptionFromNullOr<S.Number>;
@@ -39,11 +40,30 @@ export declare const ScrollList: Mount.MountDefinitionWithArgs<"ScrollList", {
39
40
  readonly offset: number;
40
41
  }>;
41
42
  export declare const initialModel: Model;
42
- export declare const update: (model: Model, message: Message) => readonly [{
43
- readonly isOpen: boolean;
44
- readonly measuredWidth: Option.Option<number>;
45
- readonly count: number;
46
- }, readonly never[]];
43
+ export declare const update: (model: Model, message: Message) => Readonly<{
44
+ model: {
45
+ readonly isOpen: boolean;
46
+ readonly measuredWidth: Option.Option<number>;
47
+ readonly count: number;
48
+ };
49
+ commands?: Update.Commands<{
50
+ readonly _tag: "ClickedIncrement";
51
+ } | {
52
+ readonly _tag: "ClickedToggle";
53
+ } | {
54
+ readonly _tag: "MeasuredPanel";
55
+ readonly width: number;
56
+ } | {
57
+ readonly _tag: "CompletedFocusButton";
58
+ } | {
59
+ readonly _tag: "FailedMountSidebar";
60
+ readonly reason: string;
61
+ } | {
62
+ readonly _tag: "ScrolledTo";
63
+ readonly offset: number;
64
+ }, never>;
65
+ outMessage?: never;
66
+ }>;
47
67
  export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
48
68
  /** A view that always renders both the toggle button and the panel, exposing
49
69
  * two MeasurePanel mounts simultaneously so we can exercise the (name,
@@ -1 +1 @@
1
- {"version":3,"file":"mountPanel.d.ts","sourceRoot":"","sources":["../../../src/test/apps/mountPanel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEpD,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAA;AAI7C,eAAO,MAAM,KAAK;;;;EAIhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;;;;;;;;;;;EAOlB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAWzC,eAAO,MAAM,YAAY;;;;;;EAIqC,CAAA;AAE9D,eAAO,MAAM,WAAW;;EAG+B,CAAA;AAEvD,eAAO,MAAM,UAAU;;;;;EAatB,CAAA;AAID,eAAO,MAAM,YAAY,EAAE,KAI1B,CAAA;AAID,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;;;oBAWjD,CAAA;AAIJ,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAgC5D,CAAA;AAED;;4BAE4B;AAC5B,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAYpE,CAAA;AAED;;;2DAG2D;AAC3D,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,GAAG,WAAW,CAAC,OAAO,CAAC,KACtB,IAKF,CAAA"}
1
+ {"version":3,"file":"mountPanel.d.ts","sourceRoot":"","sources":["../../../src/test/apps/mountPanel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE5D,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAA;AAE7C,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAIpD,eAAO,MAAM,KAAK;;;;EAIhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;;;;;;;;;;;EAOlB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAWzC,eAAO,MAAM,YAAY;;;;;;EAIqC,CAAA;AAE9D,eAAO,MAAM,WAAW;;EAG+B,CAAA;AAEvD,eAAO,MAAM,UAAU;;;;;EAatB,CAAA;AAID,eAAO,MAAM,YAAY,EAAE,KAI1B,CAAA;AAID,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;;;;;;;;;;;;;;;;;;;;;;EAcjD,CAAA;AAIJ,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAgC5D,CAAA;AAED;;4BAE4B;AAC5B,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAYpE,CAAA;AAED;;;2DAG2D;AAC3D,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,GAAG,WAAW,CAAC,OAAO,CAAC,KACtB,IAKF,CAAA"}