foldkit 0.148.2 → 0.149.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 (80) hide show
  1. package/README.md +15 -24
  2. package/dist/message/index.d.ts +2 -1
  3. package/dist/message/index.d.ts.map +1 -1
  4. package/dist/message/index.js +1 -1
  5. package/dist/message/public.d.ts +2 -1
  6. package/dist/message/public.d.ts.map +1 -1
  7. package/dist/message/public.js +1 -1
  8. package/dist/runtime/runtime.d.ts +1 -2
  9. package/dist/runtime/runtime.d.ts.map +1 -1
  10. package/dist/schema/index.d.ts +53 -8
  11. package/dist/schema/index.d.ts.map +1 -1
  12. package/dist/schema/index.js +179 -21
  13. package/dist/subscription/subscription.d.ts +1 -1
  14. package/dist/subscription/subscription.js +1 -1
  15. package/dist/test/apps/attributes.d.ts +7 -4
  16. package/dist/test/apps/attributes.d.ts.map +1 -1
  17. package/dist/test/apps/attributes.js +6 -6
  18. package/dist/test/apps/bubbling.d.ts +8 -2
  19. package/dist/test/apps/bubbling.d.ts.map +1 -1
  20. package/dist/test/apps/bubbling.js +10 -9
  21. package/dist/test/apps/colorPicker.d.ts +7 -6
  22. package/dist/test/apps/colorPicker.d.ts.map +1 -1
  23. package/dist/test/apps/colorPicker.js +8 -7
  24. package/dist/test/apps/contextMenu.d.ts +14 -4
  25. package/dist/test/apps/contextMenu.d.ts.map +1 -1
  26. package/dist/test/apps/contextMenu.js +8 -9
  27. package/dist/test/apps/counter.d.ts +52 -24
  28. package/dist/test/apps/counter.d.ts.map +1 -1
  29. package/dist/test/apps/counter.js +23 -34
  30. package/dist/test/apps/crashOnRender.d.ts +44 -28
  31. package/dist/test/apps/crashOnRender.d.ts.map +1 -1
  32. package/dist/test/apps/crashOnRender.js +17 -20
  33. package/dist/test/apps/drafts.d.ts +19 -8
  34. package/dist/test/apps/drafts.d.ts.map +1 -1
  35. package/dist/test/apps/drafts.js +10 -11
  36. package/dist/test/apps/feedSocket.d.ts +13 -13
  37. package/dist/test/apps/feedSocket.d.ts.map +1 -1
  38. package/dist/test/apps/feedSocket.js +17 -28
  39. package/dist/test/apps/fileUpload.d.ts +7 -6
  40. package/dist/test/apps/fileUpload.d.ts.map +1 -1
  41. package/dist/test/apps/fileUpload.js +9 -8
  42. package/dist/test/apps/formChild.d.ts +40 -24
  43. package/dist/test/apps/formChild.d.ts.map +1 -1
  44. package/dist/test/apps/formChild.js +31 -32
  45. package/dist/test/apps/interactions.d.ts +16 -11
  46. package/dist/test/apps/interactions.d.ts.map +1 -1
  47. package/dist/test/apps/interactions.js +21 -24
  48. package/dist/test/apps/keypress.d.ts +11 -11
  49. package/dist/test/apps/keypress.d.ts.map +1 -1
  50. package/dist/test/apps/keypress.js +12 -12
  51. package/dist/test/apps/login.d.ts +43 -23
  52. package/dist/test/apps/login.d.ts.map +1 -1
  53. package/dist/test/apps/login.js +17 -25
  54. package/dist/test/apps/logoutButton.d.ts +12 -6
  55. package/dist/test/apps/logoutButton.d.ts.map +1 -1
  56. package/dist/test/apps/logoutButton.js +15 -11
  57. package/dist/test/apps/mountPanel.d.ts +19 -20
  58. package/dist/test/apps/mountPanel.d.ts.map +1 -1
  59. package/dist/test/apps/mountPanel.js +22 -24
  60. package/dist/test/apps/multiRole.d.ts +6 -3
  61. package/dist/test/apps/multiRole.d.ts.map +1 -1
  62. package/dist/test/apps/multiRole.js +8 -7
  63. package/dist/test/apps/pointer.d.ts +13 -6
  64. package/dist/test/apps/pointer.d.ts.map +1 -1
  65. package/dist/test/apps/pointer.js +11 -10
  66. package/dist/test/apps/resumeUpload.d.ts +11 -14
  67. package/dist/test/apps/resumeUpload.d.ts.map +1 -1
  68. package/dist/test/apps/resumeUpload.js +17 -27
  69. package/dist/test/apps/scorePanel.d.ts +6 -3
  70. package/dist/test/apps/scorePanel.d.ts.map +1 -1
  71. package/dist/test/apps/scorePanel.js +8 -7
  72. package/dist/test/apps/selectiveKeys.d.ts +5 -1
  73. package/dist/test/apps/selectiveKeys.d.ts.map +1 -1
  74. package/dist/test/apps/selectiveKeys.js +13 -12
  75. package/dist/test/apps/uploads.d.ts +52 -30
  76. package/dist/test/apps/uploads.d.ts.map +1 -1
  77. package/dist/test/apps/uploads.js +20 -30
  78. package/dist/update/update.d.ts +4 -7
  79. package/dist/update/update.d.ts.map +1 -1
  80. package/package.json +1 -1
@@ -1,37 +1,37 @@
1
- import { Match as M, Schema as S } from 'effect';
2
- import { m } from '../../message/index.js';
1
+ import { Schema as S } from 'effect';
2
+ import { defineMessageUnion } from '../../message/index.js';
3
3
  // MODEL
4
4
  export const Model = S.Struct({
5
5
  lastKey: S.String,
6
6
  isShifted: S.Boolean,
7
7
  });
8
8
  // MESSAGE
9
- export const PressedKey = m('PressedKey', { key: S.String });
10
- export const PressedShiftKey = m('PressedShiftKey', { key: S.String });
11
- export const Message = S.Union([PressedKey, PressedShiftKey]);
9
+ export const Message = defineMessageUnion({
10
+ PressedKey: { key: S.String },
11
+ PressedShiftKey: { key: S.String },
12
+ });
12
13
  // INIT
13
14
  export const initialModel = {
14
15
  lastKey: '',
15
16
  isShifted: false,
16
17
  };
17
18
  // UPDATE
18
- export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
19
- PressedKey: ({ key }) => [
20
- { ...model, lastKey: key, isShifted: false },
21
- [],
22
- ],
19
+ export const update = (model, message) => Message.match(message, {
20
+ PressedKey: ({ key }) => [{ ...model, lastKey: key, isShifted: false }, []],
23
21
  PressedShiftKey: ({ key }) => [
24
22
  { ...model, lastKey: key, isShifted: true },
25
23
  [],
26
24
  ],
27
- }));
25
+ });
28
26
  // VIEW
29
27
  export const view = (model, h) => {
30
28
  return h.div([
31
29
  h.Id('key-app'),
32
30
  h.Role('application'),
33
31
  h.AriaLabel('Key press area'),
34
- h.OnKeyDown((key, modifiers) => modifiers.shiftKey ? PressedShiftKey({ key }) : PressedKey({ key })),
32
+ h.OnKeyDown((key, modifiers) => modifiers.shiftKey
33
+ ? Message.PressedShiftKey({ key })
34
+ : Message.PressedKey({ key })),
35
35
  ], [
36
36
  h.span([h.Class('last-key'), h.AriaLabel('Last key')], [model.lastKey]),
37
37
  h.span([h.Class('shifted'), h.AriaLabel('Shift pressed')], [model.isShifted ? 'true' : 'false']),
@@ -9,35 +9,55 @@ export declare const Model: S.Struct<{
9
9
  readonly error: S.String;
10
10
  }>;
11
11
  export type Model = typeof Model.Type;
12
- export declare const UpdatedEmail: import("../../schema/index.js").CallableTaggedStruct<"UpdatedEmail", {
13
- value: S.String;
12
+ export declare const Message: import("../../schema/index.js").MessageUnion<{
13
+ readonly UpdatedEmail: {
14
+ readonly value: S.String;
15
+ };
16
+ readonly UpdatedPassword: {
17
+ readonly value: S.String;
18
+ };
19
+ readonly SubmittedLogin: {};
20
+ readonly SucceededAuthenticate: {
21
+ readonly username: S.String;
22
+ };
23
+ readonly FailedAuthenticate: {
24
+ readonly error: S.String;
25
+ };
26
+ readonly ClickedLogout: {};
14
27
  }>;
15
- export declare const UpdatedPassword: import("../../schema/index.js").CallableTaggedStruct<"UpdatedPassword", {
16
- value: S.String;
17
- }>;
18
- export declare const SubmittedLogin: import("../../schema/index.js").CallableTaggedStruct<"SubmittedLogin", {}>;
19
- export declare const SucceededAuthenticate: import("../../schema/index.js").CallableTaggedStruct<"SucceededAuthenticate", {
20
- username: S.String;
21
- }>;
22
- export declare const FailedAuthenticate: import("../../schema/index.js").CallableTaggedStruct<"FailedAuthenticate", {
23
- error: S.String;
24
- }>;
25
- export declare const ClickedLogout: import("../../schema/index.js").CallableTaggedStruct<"ClickedLogout", {}>;
26
- export declare const Message: S.Union<readonly [import("../../schema/index.js").CallableTaggedStruct<"UpdatedEmail", {
27
- value: S.String;
28
- }>, import("../../schema/index.js").CallableTaggedStruct<"UpdatedPassword", {
29
- value: S.String;
30
- }>, import("../../schema/index.js").CallableTaggedStruct<"SubmittedLogin", {}>, import("../../schema/index.js").CallableTaggedStruct<"SucceededAuthenticate", {
31
- username: S.String;
32
- }>, import("../../schema/index.js").CallableTaggedStruct<"FailedAuthenticate", {
33
- error: S.String;
34
- }>, import("../../schema/index.js").CallableTaggedStruct<"ClickedLogout", {}>]>;
35
28
  export type Message = typeof Message.Type;
36
29
  export declare const Authenticate: Command.CommandDefinitionNoArgs<"Authenticate", Effect.Effect<{
37
30
  readonly _tag: "SucceededAuthenticate";
38
31
  readonly username: string;
39
32
  }, never, never>>;
40
33
  export declare const initialModel: Model;
41
- export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
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<{
45
+ readonly _tag: "UpdatedEmail";
46
+ readonly value: string;
47
+ } | {
48
+ readonly _tag: "UpdatedPassword";
49
+ readonly value: string;
50
+ } | {
51
+ readonly _tag: "SubmittedLogin";
52
+ } | {
53
+ readonly _tag: "SucceededAuthenticate";
54
+ readonly username: string;
55
+ } | {
56
+ readonly _tag: "FailedAuthenticate";
57
+ readonly error: string;
58
+ } | {
59
+ readonly _tag: "ClickedLogout";
60
+ }, never, never>;
61
+ }>[]];
42
62
  export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
43
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,YAAY;;EAAyC,CAAA;AAClE,eAAO,MAAM,eAAe;;EAA4C,CAAA;AACxE,eAAO,MAAM,cAAc,4EAAsB,CAAA;AACjD,eAAO,MAAM,qBAAqB;;EAEhC,CAAA;AACF,eAAO,MAAM,kBAAkB;;EAA+C,CAAA;AAC9E,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAE/C,eAAO,MAAM,OAAO;;;;;;;;+EAOlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY;;;iBAGvB,CAAA;AAIF,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAID,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAyBxD,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;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,6 +1,6 @@
1
1
  import { Effect, Match as M, Schema as S } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
- import { m } from '../../message/index.js';
3
+ import { defineMessageUnion } from '../../message/index.js';
4
4
  // MODEL
5
5
  export const Model = S.Struct({
6
6
  email: S.String,
@@ -10,26 +10,18 @@ export const Model = S.Struct({
10
10
  error: S.String,
11
11
  });
12
12
  // MESSAGE
13
- export const UpdatedEmail = m('UpdatedEmail', { value: S.String });
14
- export const UpdatedPassword = m('UpdatedPassword', { value: S.String });
15
- export const SubmittedLogin = m('SubmittedLogin');
16
- export const SucceededAuthenticate = m('SucceededAuthenticate', {
17
- username: S.String,
13
+ export const Message = defineMessageUnion({
14
+ UpdatedEmail: { value: S.String },
15
+ UpdatedPassword: { value: S.String },
16
+ SubmittedLogin: {},
17
+ SucceededAuthenticate: { username: S.String },
18
+ FailedAuthenticate: { error: S.String },
19
+ ClickedLogout: {},
18
20
  });
19
- export const FailedAuthenticate = m('FailedAuthenticate', { error: S.String });
20
- export const ClickedLogout = m('ClickedLogout');
21
- export const Message = S.Union([
22
- UpdatedEmail,
23
- UpdatedPassword,
24
- SubmittedLogin,
25
- SucceededAuthenticate,
26
- FailedAuthenticate,
27
- ClickedLogout,
28
- ]);
29
21
  // COMMAND
30
22
  export const Authenticate = Command.define('Authenticate', {
31
- messages: [SucceededAuthenticate, FailedAuthenticate],
32
- execute: Effect.sync(() => SucceededAuthenticate({ username: 'alice' })),
23
+ messages: [Message.SucceededAuthenticate, Message.FailedAuthenticate],
24
+ execute: Effect.sync(() => Message.SucceededAuthenticate({ username: 'alice' })),
33
25
  });
34
26
  // INIT
35
27
  export const initialModel = {
@@ -40,7 +32,7 @@ export const initialModel = {
40
32
  error: '',
41
33
  };
42
34
  // UPDATE
43
- export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
35
+ export const update = (model, message) => Message.match(message, {
44
36
  UpdatedEmail: ({ value }) => [{ ...model, email: value }, []],
45
37
  UpdatedPassword: ({ value }) => [{ ...model, password: value }, []],
46
38
  SubmittedLogin: () => [
@@ -59,7 +51,7 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
59
51
  { ...model, status: 'Idle', username: '', email: '', password: '' },
60
52
  [],
61
53
  ],
62
- }));
54
+ });
63
55
  // VIEW
64
56
  export const view = (model, h) => {
65
57
  return h.div([h.Id('app')], [
@@ -70,21 +62,21 @@ export const view = (model, h) => {
70
62
  ], [
71
63
  h.span([h.Class('greeting'), h.Role('status')], [`Welcome, ${model.username}!`]),
72
64
  h.button([
73
- h.OnClick(ClickedLogout()),
65
+ h.OnClick(Message.ClickedLogout()),
74
66
  h.Role('button'),
75
67
  h.AriaExpanded(false),
76
68
  ], ['Log out']),
77
69
  ])), M.when('Error', () => h.div([], [
78
70
  h.p([h.Class('error'), h.Role('alert')], [model.error]),
79
- h.button([h.OnClick(SubmittedLogin()), h.Class('retry')], ['Retry']),
80
- ])), M.when('Idle', () => h.form([h.OnSubmit(SubmittedLogin()), h.Class('login-form')], [
71
+ h.button([h.OnClick(Message.SubmittedLogin()), h.Class('retry')], ['Retry']),
72
+ ])), M.when('Idle', () => h.form([h.OnSubmit(Message.SubmittedLogin()), h.Class('login-form')], [
81
73
  h.label([h.For('email'), h.Class('sr-only')], ['Email']),
82
74
  h.input([
83
75
  h.Id('email'),
84
76
  h.Type('email'),
85
77
  h.Placeholder('Email'),
86
78
  h.Value(model.email),
87
- h.OnInput(value => UpdatedEmail({ value })),
79
+ h.OnInput(value => Message.UpdatedEmail({ value })),
88
80
  ]),
89
81
  h.label([h.For('password'), h.Class('sr-only')], ['Password']),
90
82
  h.input([
@@ -92,7 +84,7 @@ export const view = (model, h) => {
92
84
  h.Type('password'),
93
85
  h.Placeholder('Password'),
94
86
  h.Value(model.password),
95
- h.OnInput(value => UpdatedPassword({ value })),
87
+ h.OnInput(value => Message.UpdatedPassword({ value })),
96
88
  ]),
97
89
  h.button([h.Type('submit'), h.Class('primary'), h.Disabled(false)], ['Sign in']),
98
90
  ])), M.exhaustive),
@@ -4,14 +4,20 @@ export declare const Model: S.Struct<{
4
4
  readonly label: S.String;
5
5
  }>;
6
6
  export type Model = typeof Model.Type;
7
- export declare const ClickedLogout: import("../../schema/index.js").CallableTaggedStruct<"ClickedLogout", {}>;
8
- export declare const CompletedAction: import("../../schema/index.js").CallableTaggedStruct<"CompletedAction", {}>;
9
- export declare const Message: S.Union<readonly [import("../../schema/index.js").CallableTaggedStruct<"ClickedLogout", {}>, import("../../schema/index.js").CallableTaggedStruct<"CompletedAction", {}>]>;
7
+ export declare const Message: import("../../schema/index.js").MessageUnion<{
8
+ readonly ClickedLogout: {};
9
+ readonly CompletedAction: {};
10
+ }>;
10
11
  export type Message = typeof Message.Type;
11
- export declare const RequestedLogout: import("../../schema/index.js").CallableTaggedStruct<"RequestedLogout", {}>;
12
- export declare const OutMessage: S.Union<readonly [import("../../schema/index.js").CallableTaggedStruct<"RequestedLogout", {}>]>;
12
+ export declare const OutMessage: import("../../schema/index.js").MessageUnion<{
13
+ readonly RequestedLogout: {};
14
+ }>;
13
15
  export type OutMessage = typeof OutMessage.Type;
14
16
  export declare const initialModel: Model;
15
- export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<never>, Option.Option<OutMessage>];
17
+ export declare const update: (model: Model, message: Message) => readonly [{
18
+ readonly label: string;
19
+ }, readonly never[], Option.Option<{
20
+ readonly _tag: "RequestedLogout";
21
+ }>];
16
22
  export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
17
23
  //# 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,EAAc,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,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,aAAa,2EAAqB,CAAA;AAC/C,eAAO,MAAM,eAAe,6EAAuB,CAAA;AAEnD,eAAO,MAAM,OAAO,4KAA4C,CAAA;AAChE,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,eAAe,6EAAuB,CAAA;AAEnD,eAAO,MAAM,UAAU,iGAA6B,CAAA;AACpD,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAI/C,eAAO,MAAM,YAAY,EAAE,KAA4B,CAAA;AAIvD,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAShE,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAK5D,CAAA"}
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,22 +1,26 @@
1
- import { Match as M, Option, Schema as S } from 'effect';
2
- import { m } from '../../message/index.js';
1
+ import { Option, Schema as S } from 'effect';
2
+ import { defineMessageUnion } from '../../message/index.js';
3
3
  // MODEL
4
4
  export const Model = S.Struct({ label: S.String });
5
5
  // MESSAGE
6
- export const ClickedLogout = m('ClickedLogout');
7
- export const CompletedAction = m('CompletedAction');
8
- export const Message = S.Union([ClickedLogout, CompletedAction]);
6
+ export const Message = defineMessageUnion({
7
+ ClickedLogout: {},
8
+ CompletedAction: {},
9
+ });
9
10
  // OUT MESSAGE
10
- export const RequestedLogout = m('RequestedLogout');
11
- export const OutMessage = S.Union([RequestedLogout]);
11
+ export const OutMessage = defineMessageUnion({
12
+ RequestedLogout: {},
13
+ });
12
14
  // INIT
13
15
  export const initialModel = { label: 'Log out' };
14
16
  // UPDATE
15
- export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
16
- ClickedLogout: () => [model, [], Option.some(RequestedLogout())],
17
+ export const update = (model, message) => Message.match(message, {
18
+ ClickedLogout: () => [model, [], Option.some(OutMessage.RequestedLogout())],
17
19
  CompletedAction: () => [model, [], Option.none()],
18
- }));
20
+ });
19
21
  // VIEW
20
22
  export const view = (model, h) => {
21
- return h.div([], [h.button([h.OnClick(ClickedLogout()), h.Role('button')], [model.label])]);
23
+ return h.div([], [
24
+ h.button([h.OnClick(Message.ClickedLogout()), h.Role('button')], [model.label]),
25
+ ]);
22
26
  };
@@ -1,4 +1,4 @@
1
- import { Schema as S } from 'effect';
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
4
  export declare const Model: S.Struct<{
@@ -7,25 +7,20 @@ export declare const Model: S.Struct<{
7
7
  readonly count: S.Number;
8
8
  }>;
9
9
  export type Model = typeof Model.Type;
10
- export declare const ClickedToggle: import("../../schema/index.js").CallableTaggedStruct<"ClickedToggle", {}>;
11
- export declare const MeasuredPanel: import("../../schema/index.js").CallableTaggedStruct<"MeasuredPanel", {
12
- width: S.Number;
10
+ export declare const Message: import("../../schema/index.js").MessageUnion<{
11
+ readonly ClickedToggle: {};
12
+ readonly MeasuredPanel: {
13
+ readonly width: S.Number;
14
+ };
15
+ readonly CompletedFocusButton: {};
16
+ readonly FailedMountSidebar: {
17
+ readonly reason: S.String;
18
+ };
19
+ readonly ClickedIncrement: {};
20
+ readonly ScrolledTo: {
21
+ readonly offset: S.Number;
22
+ };
13
23
  }>;
14
- export declare const CompletedFocusButton: import("../../schema/index.js").CallableTaggedStruct<"CompletedFocusButton", {}>;
15
- export declare const FailedMountSidebar: import("../../schema/index.js").CallableTaggedStruct<"FailedMountSidebar", {
16
- reason: S.String;
17
- }>;
18
- export declare const ClickedIncrement: import("../../schema/index.js").CallableTaggedStruct<"ClickedIncrement", {}>;
19
- export declare const ScrolledTo: import("../../schema/index.js").CallableTaggedStruct<"ScrolledTo", {
20
- offset: S.Number;
21
- }>;
22
- export declare const Message: S.Union<readonly [import("../../schema/index.js").CallableTaggedStruct<"ClickedToggle", {}>, import("../../schema/index.js").CallableTaggedStruct<"MeasuredPanel", {
23
- width: S.Number;
24
- }>, import("../../schema/index.js").CallableTaggedStruct<"CompletedFocusButton", {}>, import("../../schema/index.js").CallableTaggedStruct<"FailedMountSidebar", {
25
- reason: S.String;
26
- }>, import("../../schema/index.js").CallableTaggedStruct<"ClickedIncrement", {}>, import("../../schema/index.js").CallableTaggedStruct<"ScrolledTo", {
27
- offset: S.Number;
28
- }>]>;
29
24
  export type Message = typeof Message.Type;
30
25
  export declare const MeasurePanel: Mount.MountDefinitionNoArgs<"MeasurePanel", {
31
26
  readonly _tag: "MeasuredPanel";
@@ -44,7 +39,11 @@ export declare const ScrollList: Mount.MountDefinitionWithArgs<"ScrollList", {
44
39
  readonly offset: number;
45
40
  }>;
46
41
  export declare const initialModel: Model;
47
- export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<never>];
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[]];
48
47
  export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
49
48
  /** A view that always renders both the toggle button and the panel, exposing
50
49
  * 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,EAA8B,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhE,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,aAAa,2EAAqB,CAAA;AAC/C,eAAO,MAAM,aAAa;;EAA0C,CAAA;AACpE,eAAO,MAAM,oBAAoB,kFAA4B,CAAA;AAC7D,eAAO,MAAM,kBAAkB;;EAAgD,CAAA;AAC/E,eAAO,MAAM,gBAAgB,8EAAwB,CAAA;AACrD,eAAO,MAAM,UAAU;;EAAwC,CAAA;AAE/D,eAAO,MAAM,OAAO;;;;;;IAOlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAWzC,eAAO,MAAM,YAAY;;;;;;EAI6B,CAAA;AAEtD,eAAO,MAAM,WAAW;;EAGuB,CAAA;AAE/C,eAAO,MAAM,UAAU;;;;;EAatB,CAAA;AAID,eAAO,MAAM,YAAY,EAAE,KAI1B,CAAA;AAID,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAcrC,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IA4B5D,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,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,5 +1,5 @@
1
- import { Effect, Match as M, Option, Schema as S } from 'effect';
2
- import { m } from '../../message/index.js';
1
+ import { Effect, Option, Schema as S } from 'effect';
2
+ import { defineMessageUnion } from '../../message/index.js';
3
3
  import * as Mount from '../../mount/index.js';
4
4
  // MODEL
5
5
  export const Model = S.Struct({
@@ -8,20 +8,14 @@ export const Model = S.Struct({
8
8
  count: S.Number,
9
9
  });
10
10
  // MESSAGE
11
- export const ClickedToggle = m('ClickedToggle');
12
- export const MeasuredPanel = m('MeasuredPanel', { width: S.Number });
13
- export const CompletedFocusButton = m('CompletedFocusButton');
14
- export const FailedMountSidebar = m('FailedMountSidebar', { reason: S.String });
15
- export const ClickedIncrement = m('ClickedIncrement');
16
- export const ScrolledTo = m('ScrolledTo', { offset: S.Number });
17
- export const Message = S.Union([
18
- ClickedToggle,
19
- MeasuredPanel,
20
- CompletedFocusButton,
21
- FailedMountSidebar,
22
- ClickedIncrement,
23
- ScrolledTo,
24
- ]);
11
+ export const Message = defineMessageUnion({
12
+ ClickedToggle: {},
13
+ MeasuredPanel: { width: S.Number },
14
+ CompletedFocusButton: {},
15
+ FailedMountSidebar: { reason: S.String },
16
+ ClickedIncrement: {},
17
+ ScrolledTo: { offset: S.Number },
18
+ });
25
19
  // MOUNT
26
20
  // NOTE: these Mounts are runtime/Scene fixtures, not idiomatic examples of
27
21
  // Mount work. Their factory bodies skip the DOM measurement/manipulation that
@@ -29,13 +23,13 @@ export const Message = S.Union([
29
23
  // `element.focus()` for focus) and emit synthetic result Messages so tests can
30
24
  // pin specific values. See `ui/popover/popover.ts`, `ui/listbox/shared.ts`,
31
25
  // etc. for production-shaped Mounts that read or write the element handle.
32
- export const MeasurePanel = Mount.define('MeasurePanel', MeasuredPanel, FailedMountSidebar)(() => Effect.succeed(MeasuredPanel({ width: 320 })));
33
- export const FocusButton = Mount.define('FocusButton', CompletedFocusButton)(() => Effect.succeed(CompletedFocusButton()));
34
- export const ScrollList = Mount.define('ScrollList', { offset: S.Number }, ScrolledTo)(({ offset }) => element => Effect.sync(() => {
26
+ export const MeasurePanel = Mount.define('MeasurePanel', Message.MeasuredPanel, Message.FailedMountSidebar)(() => Effect.succeed(Message.MeasuredPanel({ width: 320 })));
27
+ export const FocusButton = Mount.define('FocusButton', Message.CompletedFocusButton)(() => Effect.succeed(Message.CompletedFocusButton()));
28
+ export const ScrollList = Mount.define('ScrollList', { offset: S.Number }, Message.ScrolledTo)(({ offset }) => element => Effect.sync(() => {
35
29
  if (element instanceof HTMLElement) {
36
30
  element.scrollTop = offset;
37
31
  }
38
- return ScrolledTo({ offset });
32
+ return Message.ScrolledTo({ offset });
39
33
  }));
40
34
  // INIT
41
35
  export const initialModel = {
@@ -44,7 +38,7 @@ export const initialModel = {
44
38
  count: 0,
45
39
  };
46
40
  // UPDATE
47
- export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
41
+ export const update = (model, message) => Message.match(message, {
48
42
  ClickedToggle: () => [{ ...model, isOpen: !model.isOpen }, []],
49
43
  MeasuredPanel: ({ width }) => [
50
44
  { ...model, measuredWidth: Option.some(width) },
@@ -54,11 +48,15 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
54
48
  FailedMountSidebar: () => [model, []],
55
49
  ClickedIncrement: () => [{ ...model, count: model.count + 1 }, []],
56
50
  ScrolledTo: () => [model, []],
57
- }));
51
+ });
58
52
  // VIEW
59
53
  export const view = (model, h) => {
60
54
  return h.div([h.Class('panel-test')], [
61
- h.button([h.Key('toggle'), h.OnClick(ClickedToggle()), h.OnMount(FocusButton())], [model.isOpen ? 'Close' : 'Open']),
55
+ h.button([
56
+ h.Key('toggle'),
57
+ h.OnClick(Message.ClickedToggle()),
58
+ h.OnMount(FocusButton()),
59
+ ], [model.isOpen ? 'Close' : 'Open']),
62
60
  ...(model.isOpen
63
61
  ? [
64
62
  h.div([h.Key('panel'), h.OnMount(MeasurePanel())], [
@@ -80,7 +78,7 @@ export const twoPanelView = (model, h) => {
80
78
  return h.div([h.Class('two-panels')], [
81
79
  h.div([h.Key('panel-a'), h.OnMount(MeasurePanel())], [h.span([], ['A'])]),
82
80
  h.div([h.Key('panel-b'), h.OnMount(MeasurePanel())], [h.span([], ['B'])]),
83
- h.button([h.Key('inc'), h.OnClick(ClickedIncrement())], [`count: ${model.count}`]),
81
+ h.button([h.Key('inc'), h.OnClick(Message.ClickedIncrement())], [`count: ${model.count}`]),
84
82
  ]);
85
83
  };
86
84
  /** A view that renders an arg-bearing Mount so Scene tests can exercise
@@ -4,10 +4,13 @@ export declare const Model: S.Struct<{
4
4
  readonly clicks: S.Number;
5
5
  }>;
6
6
  export type Model = typeof Model.Type;
7
- export declare const ClickedFallback: import("../../schema/index.js").CallableTaggedStruct<"ClickedFallback", {}>;
8
- export declare const Message: S.Union<readonly [import("../../schema/index.js").CallableTaggedStruct<"ClickedFallback", {}>]>;
7
+ export declare const Message: import("../../schema/index.js").MessageUnion<{
8
+ readonly ClickedFallback: {};
9
+ }>;
9
10
  export type Message = typeof Message.Type;
10
11
  export declare const initialModel: Model;
11
- export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<never>];
12
+ export declare const update: (model: Model, message: Message) => readonly [{
13
+ readonly clicks: number;
14
+ }, readonly never[]];
12
15
  export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
13
16
  //# sourceMappingURL=multiRole.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"multiRole.d.ts","sourceRoot":"","sources":["../../../src/test/apps/multiRole.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhD,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAK5D,eAAO,MAAM,KAAK;;EAAiC,CAAA;AACnD,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,eAAe,6EAAuB,CAAA;AAEnD,eAAO,MAAM,OAAO,iGAA6B,CAAA;AACjD,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY,EAAE,KAAqB,CAAA;AAIhD,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAMrC,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAU5D,CAAA"}
1
+ {"version":3,"file":"multiRole.d.ts","sourceRoot":"","sources":["../../../src/test/apps/multiRole.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;;EAAiC,CAAA;AACnD,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;EAElB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY,EAAE,KAAqB,CAAA;AAIhD,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;oBAGjD,CAAA;AAIJ,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAU5D,CAAA"}
@@ -1,19 +1,20 @@
1
- import { Match as M, Schema as S } from 'effect';
2
- import { m } from '../../message/index.js';
1
+ import { Schema as S } from 'effect';
2
+ import { defineMessageUnion } from '../../message/index.js';
3
3
  // MODEL
4
4
  export const Model = S.Struct({ clicks: S.Number });
5
5
  // MESSAGE
6
- export const ClickedFallback = m('ClickedFallback');
7
- export const Message = S.Union([ClickedFallback]);
6
+ export const Message = defineMessageUnion({
7
+ ClickedFallback: {},
8
+ });
8
9
  // INIT
9
10
  export const initialModel = { clicks: 0 };
10
11
  // UPDATE
11
- export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
12
+ export const update = (model, message) => Message.match(message, {
12
13
  ClickedFallback: () => [{ ...model, clicks: model.clicks + 1 }, []],
13
- }));
14
+ });
14
15
  // VIEW
15
16
  export const view = (model, h) => {
16
17
  return h.div([], [
17
- h.div([h.Role('doc-subtitle heading'), h.OnClick(ClickedFallback())], [`Fallback element clicks=${model.clicks}`]),
18
+ h.div([h.Role('doc-subtitle heading'), h.OnClick(Message.ClickedFallback())], [`Fallback element clicks=${model.clicks}`]),
18
19
  ]);
19
20
  };
@@ -6,14 +6,21 @@ export declare const Model: S.Struct<{
6
6
  readonly lastPointerType: S.String;
7
7
  }>;
8
8
  export type Model = typeof Model.Type;
9
- declare const Message: S.Union<readonly [import("../../schema/index.js").CallableTaggedStruct<"PressedPointerDown", {
10
- pointerType: S.String;
11
- }>, import("../../schema/index.js").CallableTaggedStruct<"ReleasedPointerUp", {
12
- pointerType: S.String;
13
- }>]>;
9
+ declare const Message: import("../../schema/index.js").MessageUnion<{
10
+ readonly PressedPointerDown: {
11
+ readonly pointerType: S.String;
12
+ };
13
+ readonly ReleasedPointerUp: {
14
+ readonly pointerType: S.String;
15
+ };
16
+ }>;
14
17
  type Message = typeof Message.Type;
15
18
  export declare const initialModel: Model;
16
- export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<never>];
19
+ export declare const update: (model: Model, message: Message) => readonly [{
20
+ readonly pointerDownCount: number;
21
+ readonly pointerUpCount: number;
22
+ readonly lastPointerType: string;
23
+ }, readonly never[]];
17
24
  export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
18
25
  export {};
19
26
  //# sourceMappingURL=pointer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../../src/test/apps/pointer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAK5D,eAAO,MAAM,KAAK;;;;EAIhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAOrC,QAAA,MAAM,OAAO;;;;IAAmD,CAAA;AAChE,KAAK,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIlC,eAAO,MAAM,YAAY,EAAE,KAI1B,CAAA;AAID,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAqBrC,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IA4B5D,CAAA"}
1
+ {"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../../src/test/apps/pointer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE5C,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAK5D,eAAO,MAAM,KAAK;;;;EAIhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,QAAA,MAAM,OAAO;;;;;;;EAGX,CAAA;AACF,KAAK,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIlC,eAAO,MAAM,YAAY,EAAE,KAI1B,CAAA;AAID,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO;;;;oBAkBjD,CAAA;AAIJ,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IA4B5D,CAAA"}
@@ -1,5 +1,5 @@
1
- import { Match as M, Option, Schema as S } from 'effect';
2
- import { m } from '../../message/index.js';
1
+ import { Option, Schema as S } from 'effect';
2
+ import { defineMessageUnion } from '../../message/index.js';
3
3
  // MODEL
4
4
  export const Model = S.Struct({
5
5
  pointerDownCount: S.Number,
@@ -7,9 +7,10 @@ export const Model = S.Struct({
7
7
  lastPointerType: S.String,
8
8
  });
9
9
  // MESSAGE
10
- const PressedPointerDown = m('PressedPointerDown', { pointerType: S.String });
11
- const ReleasedPointerUp = m('ReleasedPointerUp', { pointerType: S.String });
12
- const Message = S.Union([PressedPointerDown, ReleasedPointerUp]);
10
+ const Message = defineMessageUnion({
11
+ PressedPointerDown: { pointerType: S.String },
12
+ ReleasedPointerUp: { pointerType: S.String },
13
+ });
13
14
  // INIT
14
15
  export const initialModel = {
15
16
  pointerDownCount: 0,
@@ -17,7 +18,7 @@ export const initialModel = {
17
18
  lastPointerType: '',
18
19
  };
19
20
  // UPDATE
20
- export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
21
+ export const update = (model, message) => Message.match(message, {
21
22
  PressedPointerDown: ({ pointerType }) => [
22
23
  {
23
24
  ...model,
@@ -34,18 +35,18 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
34
35
  },
35
36
  [],
36
37
  ],
37
- }));
38
+ });
38
39
  // VIEW
39
40
  export const view = (model, h) => {
40
41
  return h.div([], [
41
42
  h.button([
42
43
  h.AriaLabel('pointer target'),
43
- h.OnPointerDown(pointerType => Option.some(PressedPointerDown({ pointerType }))),
44
- h.OnPointerUp((_screenX, _screenY, pointerType, _timeStamp) => Option.some(ReleasedPointerUp({ pointerType }))),
44
+ h.OnPointerDown(pointerType => Option.some(Message.PressedPointerDown({ pointerType }))),
45
+ h.OnPointerUp((_screenX, _screenY, pointerType, _timeStamp) => Option.some(Message.ReleasedPointerUp({ pointerType }))),
45
46
  ], [`down=${model.pointerDownCount} up=${model.pointerUpCount}`]),
46
47
  h.div([
47
48
  h.AriaLabel('nested target'),
48
- h.OnPointerDown(pointerType => Option.some(PressedPointerDown({ pointerType }))),
49
+ h.OnPointerDown(pointerType => Option.some(Message.PressedPointerDown({ pointerType }))),
49
50
  ], [h.span([], [`type=${model.lastPointerType}`])]),
50
51
  h.span([h.AriaLabel('no handler')], ['orphan']),
51
52
  ]);