foldkit 0.133.0 → 0.135.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 (88) hide show
  1. package/README.md +13 -17
  2. package/dist/canvas/view.d.ts +18 -11
  3. package/dist/canvas/view.d.ts.map +1 -1
  4. package/dist/canvas/view.js +18 -11
  5. package/dist/customElement/index.d.ts +12 -6
  6. package/dist/customElement/index.d.ts.map +1 -1
  7. package/dist/customElement/index.js +17 -4
  8. package/dist/html/index.d.ts +625 -1601
  9. package/dist/html/index.d.ts.map +1 -1
  10. package/dist/html/index.js +52 -15
  11. package/dist/html/public.d.ts +2 -2
  12. package/dist/html/public.d.ts.map +1 -1
  13. package/dist/html/public.js +1 -1
  14. package/dist/html/runtimeSingleton.d.ts +1 -1
  15. package/dist/html/runtimeSingleton.d.ts.map +1 -1
  16. package/dist/html/runtimeSingleton.js +1 -1
  17. package/dist/html/submodel.d.ts +51 -19
  18. package/dist/html/submodel.d.ts.map +1 -1
  19. package/dist/html/submodel.js +37 -13
  20. package/dist/managedResource/managedResource.d.ts +21 -10
  21. package/dist/managedResource/managedResource.d.ts.map +1 -1
  22. package/dist/managedResource/managedResource.js +6 -1
  23. package/dist/runtime/crashUI.d.ts.map +1 -1
  24. package/dist/runtime/crashUI.js +29 -30
  25. package/dist/runtime/runtime.d.ts +9 -6
  26. package/dist/runtime/runtime.d.ts.map +1 -1
  27. package/dist/runtime/runtime.js +9 -8
  28. package/dist/test/apps/attributes.d.ts +2 -2
  29. package/dist/test/apps/attributes.d.ts.map +1 -1
  30. package/dist/test/apps/attributes.js +1 -3
  31. package/dist/test/apps/bubbling.d.ts +2 -2
  32. package/dist/test/apps/bubbling.d.ts.map +1 -1
  33. package/dist/test/apps/bubbling.js +1 -3
  34. package/dist/test/apps/colorPicker.d.ts +28 -0
  35. package/dist/test/apps/colorPicker.d.ts.map +1 -0
  36. package/dist/test/apps/colorPicker.js +43 -0
  37. package/dist/test/apps/counter.d.ts +5 -3
  38. package/dist/test/apps/counter.d.ts.map +1 -1
  39. package/dist/test/apps/counter.js +12 -7
  40. package/dist/test/apps/crashOnRender.d.ts +2 -2
  41. package/dist/test/apps/crashOnRender.d.ts.map +1 -1
  42. package/dist/test/apps/crashOnRender.js +1 -3
  43. package/dist/test/apps/drafts.d.ts +2 -2
  44. package/dist/test/apps/drafts.d.ts.map +1 -1
  45. package/dist/test/apps/drafts.js +1 -3
  46. package/dist/test/apps/feedSocket.d.ts +74 -0
  47. package/dist/test/apps/feedSocket.d.ts.map +1 -0
  48. package/dist/test/apps/feedSocket.js +69 -0
  49. package/dist/test/apps/fileUpload.d.ts +2 -2
  50. package/dist/test/apps/fileUpload.d.ts.map +1 -1
  51. package/dist/test/apps/fileUpload.js +1 -3
  52. package/dist/test/apps/interactions.d.ts +2 -2
  53. package/dist/test/apps/interactions.d.ts.map +1 -1
  54. package/dist/test/apps/interactions.js +1 -3
  55. package/dist/test/apps/keypress.d.ts +2 -2
  56. package/dist/test/apps/keypress.d.ts.map +1 -1
  57. package/dist/test/apps/keypress.js +1 -3
  58. package/dist/test/apps/login.d.ts +2 -2
  59. package/dist/test/apps/login.d.ts.map +1 -1
  60. package/dist/test/apps/login.js +1 -3
  61. package/dist/test/apps/logoutButton.d.ts +2 -2
  62. package/dist/test/apps/logoutButton.d.ts.map +1 -1
  63. package/dist/test/apps/logoutButton.js +1 -3
  64. package/dist/test/apps/mountPanel.d.ts +4 -4
  65. package/dist/test/apps/mountPanel.d.ts.map +1 -1
  66. package/dist/test/apps/mountPanel.js +3 -7
  67. package/dist/test/apps/multiRole.d.ts +2 -2
  68. package/dist/test/apps/multiRole.d.ts.map +1 -1
  69. package/dist/test/apps/multiRole.js +1 -3
  70. package/dist/test/apps/pointer.d.ts +2 -2
  71. package/dist/test/apps/pointer.d.ts.map +1 -1
  72. package/dist/test/apps/pointer.js +1 -3
  73. package/dist/test/apps/resumeUpload.d.ts +2 -2
  74. package/dist/test/apps/resumeUpload.d.ts.map +1 -1
  75. package/dist/test/apps/resumeUpload.js +3 -6
  76. package/dist/test/apps/scorePanel.d.ts +32 -0
  77. package/dist/test/apps/scorePanel.d.ts.map +1 -0
  78. package/dist/test/apps/scorePanel.js +19 -0
  79. package/dist/test/apps/uploads.d.ts +2 -2
  80. package/dist/test/apps/uploads.d.ts.map +1 -1
  81. package/dist/test/apps/uploads.js +1 -3
  82. package/dist/test/scene.d.ts +81 -9
  83. package/dist/test/scene.d.ts.map +1 -1
  84. package/dist/test/scene.js +206 -26
  85. package/dist/test/story.d.ts +4 -5
  86. package/dist/test/story.d.ts.map +1 -1
  87. package/dist/test/story.js +1 -2
  88. package/package.json +1 -1
@@ -1,5 +1,4 @@
1
1
  import { Match as M, Schema as S } from 'effect';
2
- import { html } from '../../html/index.js';
3
2
  import { m } from '../../message/index.js';
4
3
  // MODEL
5
4
  export const Model = S.Struct({
@@ -24,8 +23,7 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
24
23
  ],
25
24
  }));
26
25
  // VIEW
27
- export const view = (model) => {
28
- const h = html();
26
+ export const view = (model, h) => {
29
27
  return h.div([], [
30
28
  h.div([h.Role('option'), h.OnClick(ClickedContainer())], [h.span([], [`clicks=${model.clicks}`])]),
31
29
  h.div([h.Role('listitem'), h.OnDoubleClick(DoubleClickedContainer())], [h.span([], [`dbl=${model.doubleClicks}`])]),
@@ -0,0 +1,28 @@
1
+ import { Schema as S } from 'effect';
2
+ import * as CustomElement from '../../customElement/index.js';
3
+ import type { Html, HtmlBuilder } from '../../html/index.js';
4
+ export declare const hexColorPicker: CustomElement.CustomElementSpec<"hex-color-picker", {
5
+ color: S.String;
6
+ }, {
7
+ 'color-changed': S.Struct<{
8
+ readonly value: S.String;
9
+ }>;
10
+ }>;
11
+ export declare const Model: S.Struct<{
12
+ readonly color: S.String;
13
+ }>;
14
+ export type Model = typeof Model.Type;
15
+ export declare const ChangedColor: import("../../schema/index.js").CallableTaggedStruct<"ChangedColor", {
16
+ value: S.String;
17
+ }>;
18
+ export declare const Message: S.Union<readonly [import("../../schema/index.js").CallableTaggedStruct<"ChangedColor", {
19
+ value: S.String;
20
+ }>]>;
21
+ export type Message = typeof Message.Type;
22
+ export declare const initialModel: {
23
+ readonly color: string;
24
+ };
25
+ export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<never>];
26
+ export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
27
+ export declare const viewWithoutHandler: (model: Model, h: HtmlBuilder<Message>) => Html;
28
+ //# sourceMappingURL=colorPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorPicker.d.ts","sourceRoot":"","sources":["../../../src/test/apps/colorPicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhD,OAAO,KAAK,aAAa,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAM5D,eAAO,MAAM,cAAc;;;;;;EAQzB,CAAA;AAIF,eAAO,MAAM,KAAK;;EAAgC,CAAA;AAClD,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,YAAY;;EAAyC,CAAA;AAElE,eAAO,MAAM,OAAO;;IAA0B,CAAA;AAC9C,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY;;CAAmC,CAAA;AAI5D,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,IAkB5D,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC7B,OAAO,KAAK,EACZ,GAAG,WAAW,CAAC,OAAO,CAAC,KACtB,IAUF,CAAA"}
@@ -0,0 +1,43 @@
1
+ import { Match as M, Schema as S } from 'effect';
2
+ import * as CustomElement from '../../customElement/index.js';
3
+ import { m } from '../../message/index.js';
4
+ import { evo } from '../../struct/index.js';
5
+ // CUSTOM ELEMENT
6
+ export const hexColorPicker = CustomElement.define({
7
+ tag: 'hex-color-picker',
8
+ properties: {
9
+ color: S.String,
10
+ },
11
+ events: {
12
+ 'color-changed': S.Struct({ value: S.String }),
13
+ },
14
+ });
15
+ // MODEL
16
+ export const Model = S.Struct({ color: S.String });
17
+ // MESSAGE
18
+ export const ChangedColor = m('ChangedColor', { value: S.String });
19
+ export const Message = S.Union([ChangedColor]);
20
+ // INIT
21
+ export const initialModel = Model.make({ color: '#000000' });
22
+ // UPDATE
23
+ export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
24
+ ChangedColor: ({ value }) => [evo(model, { color: () => value }), []],
25
+ }));
26
+ // VIEW
27
+ export const view = (model, h) => {
28
+ const picker = hexColorPicker.withMessage(h);
29
+ return h.div([], [
30
+ picker([
31
+ picker.Color(model.color),
32
+ picker.OnColorChanged(detail => ChangedColor({ value: detail.value })),
33
+ ], []),
34
+ h.span([h.Role('status')], [model.color]),
35
+ ]);
36
+ };
37
+ export const viewWithoutHandler = (model, h) => {
38
+ const picker = hexColorPicker.withMessage(h);
39
+ return h.div([], [
40
+ picker([picker.Color(model.color)], []),
41
+ h.span([h.Role('status')], [model.color]),
42
+ ]);
43
+ };
@@ -1,6 +1,6 @@
1
1
  import { Effect, Schema as S } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
- import { type Html } from '../../html/index.js';
3
+ import type { Html, HtmlBuilder } from '../../html/index.js';
4
4
  export declare const Model: S.Struct<{
5
5
  readonly count: S.Number;
6
6
  readonly log: S.$Array<S.Number>;
@@ -12,6 +12,8 @@ export declare const ClickedFetch: import("../../schema/index.js").CallableTagge
12
12
  export declare const ClickedFetchById: import("../../schema/index.js").CallableTaggedStruct<"ClickedFetchById", {
13
13
  id: S.Number;
14
14
  }>;
15
+ export declare const Ticked: import("../../schema/index.js").CallableTaggedStruct<"Ticked", {}>;
16
+ export declare const PolledCount: import("../../schema/index.js").CallableTaggedStruct<"PolledCount", {}>;
15
17
  export declare const StartedThreeFetches: import("../../schema/index.js").CallableTaggedStruct<"StartedThreeFetches", {}>;
16
18
  export declare const StartedTwoFetchesById: import("../../schema/index.js").CallableTaggedStruct<"StartedTwoFetchesById", {}>;
17
19
  export declare const StartedMixedFetches: import("../../schema/index.js").CallableTaggedStruct<"StartedMixedFetches", {}>;
@@ -23,7 +25,7 @@ export declare const FailedFetchCount: import("../../schema/index.js").CallableT
23
25
  }>;
24
26
  export declare const Message: S.Union<readonly [import("../../schema/index.js").CallableTaggedStruct<"ClickedIncrement", {}>, import("../../schema/index.js").CallableTaggedStruct<"ClickedDecrement", {}>, import("../../schema/index.js").CallableTaggedStruct<"ClickedFetch", {}>, import("../../schema/index.js").CallableTaggedStruct<"ClickedFetchById", {
25
27
  id: S.Number;
26
- }>, import("../../schema/index.js").CallableTaggedStruct<"StartedThreeFetches", {}>, import("../../schema/index.js").CallableTaggedStruct<"StartedTwoFetchesById", {}>, import("../../schema/index.js").CallableTaggedStruct<"StartedMixedFetches", {}>, import("../../schema/index.js").CallableTaggedStruct<"SucceededFetchCount", {
28
+ }>, import("../../schema/index.js").CallableTaggedStruct<"Ticked", {}>, import("../../schema/index.js").CallableTaggedStruct<"PolledCount", {}>, import("../../schema/index.js").CallableTaggedStruct<"StartedThreeFetches", {}>, import("../../schema/index.js").CallableTaggedStruct<"StartedTwoFetchesById", {}>, import("../../schema/index.js").CallableTaggedStruct<"StartedMixedFetches", {}>, import("../../schema/index.js").CallableTaggedStruct<"SucceededFetchCount", {
27
29
  count: S.Number;
28
30
  }>, import("../../schema/index.js").CallableTaggedStruct<"FailedFetchCount", {
29
31
  error: S.String;
@@ -41,5 +43,5 @@ export declare const FetchCountById: Command.CommandDefinitionWithArgs<"FetchCou
41
43
  }, never, never>>;
42
44
  export declare const initialModel: Model;
43
45
  export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
44
- export declare const view: (model: Model) => Html;
46
+ export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
45
47
  //# sourceMappingURL=counter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"counter.d.ts","sourceRoot":"","sources":["../../../src/test/apps/counter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,qBAAqB,CAAA;AAKrD,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,gBAAgB,8EAAwB,CAAA;AACrD,eAAO,MAAM,gBAAgB,8EAAwB,CAAA;AACrD,eAAO,MAAM,YAAY,0EAAoB,CAAA;AAC7C,eAAO,MAAM,gBAAgB;;EAA0C,CAAA;AACvE,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,eAAO,MAAM,qBAAqB,mFAA6B,CAAA;AAC/D,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,eAAO,MAAM,mBAAmB;;EAAgD,CAAA;AAChF,eAAO,MAAM,gBAAgB;;EAA6C,CAAA;AAE1E,eAAO,MAAM,OAAO;;;;;;IAUlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,UAAU;;;iBAIgC,CAAA;AAEvD,eAAO,MAAM,cAAc;;;;;iBAKyC,CAAA;AAIpE,eAAO,MAAM,YAAY,EAAE,KAA6B,CAAA;AAIxD,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAiCxD,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IAiBnC,CAAA"}
1
+ {"version":3,"file":"counter.d.ts","sourceRoot":"","sources":["../../../src/test/apps/counter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAsB,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEvE,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAM5D,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,gBAAgB,8EAAwB,CAAA;AACrD,eAAO,MAAM,gBAAgB,8EAAwB,CAAA;AACrD,eAAO,MAAM,YAAY,0EAAoB,CAAA;AAC7C,eAAO,MAAM,gBAAgB;;EAA0C,CAAA;AACvE,eAAO,MAAM,MAAM,oEAAc,CAAA;AACjC,eAAO,MAAM,WAAW,yEAAmB,CAAA;AAC3C,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,eAAO,MAAM,qBAAqB,mFAA6B,CAAA;AAC/D,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,eAAO,MAAM,mBAAmB;;EAAgD,CAAA;AAChF,eAAO,MAAM,gBAAgB;;EAA6C,CAAA;AAE1E,eAAO,MAAM,OAAO;;;;;;IAYlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,UAAU;;;iBAIgC,CAAA;AAEvD,eAAO,MAAM,cAAc;;;;;iBAKyC,CAAA;AAIpE,eAAO,MAAM,YAAY,EAAE,KAA6B,CAAA;AAIxD,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAmCxD,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAe5D,CAAA"}
@@ -1,7 +1,7 @@
1
- import { Effect, Match as M, Schema as S } from 'effect';
1
+ import { Array, Effect, Match as M, Number, Schema as S } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
- import { html } from '../../html/index.js';
4
3
  import { m } from '../../message/index.js';
4
+ import { evo } from '../../struct/index.js';
5
5
  // MODEL
6
6
  export const Model = S.Struct({
7
7
  count: S.Number,
@@ -12,6 +12,8 @@ export const ClickedIncrement = m('ClickedIncrement');
12
12
  export const ClickedDecrement = m('ClickedDecrement');
13
13
  export const ClickedFetch = m('ClickedFetch');
14
14
  export const ClickedFetchById = m('ClickedFetchById', { id: S.Number });
15
+ export const Ticked = m('Ticked');
16
+ export const PolledCount = m('PolledCount');
15
17
  export const StartedThreeFetches = m('StartedThreeFetches');
16
18
  export const StartedTwoFetchesById = m('StartedTwoFetchesById');
17
19
  export const StartedMixedFetches = m('StartedMixedFetches');
@@ -22,6 +24,8 @@ export const Message = S.Union([
22
24
  ClickedDecrement,
23
25
  ClickedFetch,
24
26
  ClickedFetchById,
27
+ Ticked,
28
+ PolledCount,
25
29
  StartedThreeFetches,
26
30
  StartedTwoFetchesById,
27
31
  StartedMixedFetches,
@@ -35,10 +39,12 @@ export const FetchCountById = Command.define('FetchCountById', { id: S.Number },
35
39
  export const initialModel = { count: 0, log: [] };
36
40
  // UPDATE
37
41
  export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
38
- ClickedIncrement: () => [{ ...model, count: model.count + 1 }, []],
39
- ClickedDecrement: () => [{ ...model, count: model.count - 1 }, []],
42
+ ClickedIncrement: () => [evo(model, { count: Number.increment }), []],
43
+ ClickedDecrement: () => [evo(model, { count: Number.decrement }), []],
40
44
  ClickedFetch: () => [model, [FetchCount()]],
41
45
  ClickedFetchById: ({ id }) => [model, [FetchCountById({ id })]],
46
+ Ticked: () => [evo(model, { count: Number.increment }), []],
47
+ PolledCount: () => [model, [FetchCount()]],
42
48
  StartedThreeFetches: () => [
43
49
  model,
44
50
  [FetchCount(), FetchCount(), FetchCount()],
@@ -57,14 +63,13 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
57
63
  ],
58
64
  ],
59
65
  SucceededFetchCount: ({ count }) => [
60
- { count, log: [...model.log, count] },
66
+ evo(model, { count: () => count, log: Array.append(count) }),
61
67
  [],
62
68
  ],
63
69
  FailedFetchCount: () => [model, []],
64
70
  }));
65
71
  // VIEW
66
- export const view = (model) => {
67
- const h = html();
72
+ export const view = (model, h) => {
68
73
  return h.div([], [
69
74
  h.span([h.Role('status')], [`count: ${model.count}`]),
70
75
  h.button([h.OnClick(StartedThreeFetches()), h.Role('button')], ['Start three fetches']),
@@ -1,6 +1,6 @@
1
1
  import { Effect, Schema as S } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
- import { type Document } from '../../html/index.js';
3
+ import type { Document, HtmlBuilder } from '../../html/index.js';
4
4
  export declare const RawSource: S.Struct<{
5
5
  readonly kind: S.Literal<"Book">;
6
6
  readonly id: S.String;
@@ -60,5 +60,5 @@ export declare const validSources: ReadonlyArray<RawSource>;
60
60
  export declare const malformedSources: ReadonlyArray<RawSource>;
61
61
  export declare const initialModel: Model;
62
62
  export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
63
- export declare const view: (model: Model) => Document;
63
+ export declare const view: (model: Model, h: HtmlBuilder<Message>) => Document;
64
64
  //# sourceMappingURL=crashOnRender.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"crashOnRender.d.ts","sourceRoot":"","sources":["../../../src/test/apps/crashOnRender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE/D,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,KAAK,QAAQ,EAAQ,MAAM,qBAAqB,CAAA;AAMzD,eAAO,MAAM,SAAS;;;EAGpB,CAAA;AACF,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAK7C,eAAO,MAAM,MAAM;;;EAGjB,CAAA;AACF,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AAEvC,eAAO,MAAM,KAAK;;;;;EAEhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAC/C,eAAO,MAAM,aAAa;;;;;EAAsD,CAAA;AAChF,eAAO,MAAM,cAAc;;;;;EAA0C,CAAA;AACrE,eAAO,MAAM,oBAAoB;;EAA8C,CAAA;AAE/E,eAAO,MAAM,OAAO;;;;;;;;;;;;IAKlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAMzC,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,SAAS,CAGpD,CAAA;AAED,eAAO,MAAM,aAAa;;;;;;iBAGoC,CAAA;AAI9D,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,SAAS,CAEjD,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,SAAS,CAErD,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAAiC,CAAA;AAI5D,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAiBxD,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,QA8BnC,CAAA"}
1
+ {"version":3,"file":"crashOnRender.d.ts","sourceRoot":"","sources":["../../../src/test/apps/crashOnRender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE/D,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAMhE,eAAO,MAAM,SAAS;;;EAGpB,CAAA;AACF,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAK7C,eAAO,MAAM,MAAM;;;EAGjB,CAAA;AACF,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AAEvC,eAAO,MAAM,KAAK;;;;;EAEhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAC/C,eAAO,MAAM,aAAa;;;;;EAAsD,CAAA;AAChF,eAAO,MAAM,cAAc;;;;;EAA0C,CAAA;AACrE,eAAO,MAAM,oBAAoB;;EAA8C,CAAA;AAE/E,eAAO,MAAM,OAAO;;;;;;;;;;;;IAKlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAMzC,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,SAAS,CAGpD,CAAA;AAED,eAAO,MAAM,aAAa;;;;;;iBAGoC,CAAA;AAI9D,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,SAAS,CAEjD,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,SAAS,CAErD,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAAiC,CAAA;AAI5D,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAiBxD,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,QA4B5D,CAAA"}
@@ -1,6 +1,5 @@
1
1
  import { Array, Effect, Match as M, Schema as S } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
- import { html } from '../../html/index.js';
4
3
  import { m } from '../../message/index.js';
5
4
  import { evo } from '../../struct/index.js';
6
5
  // MODEL
@@ -59,8 +58,7 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
59
58
  },
60
59
  }));
61
60
  // VIEW
62
- export const view = (model) => {
63
- const h = html();
61
+ export const view = (model, h) => {
64
62
  const body = h.div([], [
65
63
  h.button([h.OnClick(ClickedReload()), h.Role('button')], ['Reload']),
66
64
  h.button([h.OnClick(SubmittedNewSourceId({ id: '' })), h.Role('button')], ['Add source']),
@@ -1,7 +1,7 @@
1
1
  import { Effect, Schema as S } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
3
  import * as Interruptible from '../../command/interruptible/index.js';
4
- import { type Document } from '../../html/index.js';
4
+ import type { Document, HtmlBuilder } from '../../html/index.js';
5
5
  export declare const SaveStatus: S.Literals<readonly ["Editing", "Saving", "Saved"]>;
6
6
  export type SaveStatus = typeof SaveStatus.Type;
7
7
  export declare const Model: S.Struct<{
@@ -29,5 +29,5 @@ export declare const SaveDraft: Interruptible.DefinitionWithArgsNameKeyed<"SaveD
29
29
  }, never, never>>;
30
30
  export declare const initialModel: Model;
31
31
  export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
32
- export declare const view: (model: Model) => Document;
32
+ export declare const view: (model: Model, h: HtmlBuilder<Message>) => Document;
33
33
  //# sourceMappingURL=drafts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"drafts.d.ts","sourceRoot":"","sources":["../../../src/test/apps/drafts.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,aAAa,MAAM,sCAAsC,CAAA;AACrE,OAAO,EAAE,KAAK,QAAQ,EAAQ,MAAM,qBAAqB,CAAA;AAMzD,eAAO,MAAM,UAAU,qDAA6C,CAAA;AACpE,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAE/C,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,gBAAgB,8EAAwB,CAAA;AACrD,eAAO,MAAM,kBAAkB;;EAE7B,CAAA;AAEF,eAAO,MAAM,OAAO;;IAAkD,CAAA;AACtE,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,aAAa;;EAAmC,CAAA;AAC7D,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,SAAS;;;;;iBAIwD,CAAA;AAI9E,eAAO,MAAM,YAAY,EAAE,KAA0C,CAAA;AAIrE,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAYxD,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,QAYnC,CAAA"}
1
+ {"version":3,"file":"drafts.d.ts","sourceRoot":"","sources":["../../../src/test/apps/drafts.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,aAAa,MAAM,sCAAsC,CAAA;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAMhE,eAAO,MAAM,UAAU,qDAA6C,CAAA;AACpE,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAE/C,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,gBAAgB,8EAAwB,CAAA;AACrD,eAAO,MAAM,kBAAkB;;EAE7B,CAAA;AAEF,eAAO,MAAM,OAAO;;IAAkD,CAAA;AACtE,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,aAAa;;EAAmC,CAAA;AAC7D,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,SAAS;;;;;iBAIwD,CAAA;AAI9E,eAAO,MAAM,YAAY,EAAE,KAA0C,CAAA;AAIrE,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAYxD,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,QAU5D,CAAA"}
@@ -1,6 +1,5 @@
1
1
  import { Effect, Match as M, Schema as S } from 'effect';
2
2
  import * as Interruptible from '../../command/interruptible/index.js';
3
- import { html } from '../../html/index.js';
4
3
  import { m } from '../../message/index.js';
5
4
  import { evo } from '../../struct/index.js';
6
5
  // MODEL
@@ -29,8 +28,7 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
29
28
  SucceededSaveDraft: () => [evo(model, { status: () => 'Saved' }), []],
30
29
  }));
31
30
  // VIEW
32
- export const view = (model) => {
33
- const h = html();
31
+ export const view = (model, h) => {
34
32
  const body = h.div([], [
35
33
  h.button([h.OnClick(ClickedSaveDraft())], ['Save draft']),
36
34
  h.span([], [`draft: ${model.status}`]),
@@ -0,0 +1,74 @@
1
+ import { Option, Schema as S } from 'effect';
2
+ import type { Html, HtmlBuilder } from '../../html/index.js';
3
+ import * as ManagedResource from '../../managedResource/index.js';
4
+ export declare const Model: S.Struct<{
5
+ readonly isFeedOpen: S.Boolean;
6
+ readonly status: S.Literals<readonly ["Disconnected", "Connected", "Failed"]>;
7
+ }>;
8
+ export type Model = typeof Model.Type;
9
+ export declare const ClickedToggleFeed: import("../../schema/index.js").CallableTaggedStruct<"ClickedToggleFeed", {}>;
10
+ export declare const AcquiredFeedSocket: import("../../schema/index.js").CallableTaggedStruct<"AcquiredFeedSocket", {
11
+ socketId: S.String;
12
+ }>;
13
+ export declare const ReleasedFeedSocket: import("../../schema/index.js").CallableTaggedStruct<"ReleasedFeedSocket", {}>;
14
+ export declare const FailedAcquireFeedSocket: import("../../schema/index.js").CallableTaggedStruct<"FailedAcquireFeedSocket", {
15
+ error: S.String;
16
+ }>;
17
+ export declare const Message: S.Union<readonly [import("../../schema/index.js").CallableTaggedStruct<"ClickedToggleFeed", {}>, import("../../schema/index.js").CallableTaggedStruct<"AcquiredFeedSocket", {
18
+ socketId: S.String;
19
+ }>, import("../../schema/index.js").CallableTaggedStruct<"ReleasedFeedSocket", {}>, import("../../schema/index.js").CallableTaggedStruct<"FailedAcquireFeedSocket", {
20
+ error: S.String;
21
+ }>]>;
22
+ export type Message = typeof Message.Type;
23
+ export type FeedSocket = Readonly<{
24
+ socketId: string;
25
+ }>;
26
+ export declare const feedResources: {
27
+ feedSocket: ManagedResource.Entry<{
28
+ readonly isFeedOpen: boolean;
29
+ readonly status: "Disconnected" | "Connected" | "Failed";
30
+ }, {
31
+ readonly _tag: "ClickedToggleFeed";
32
+ } | {
33
+ readonly _tag: "AcquiredFeedSocket";
34
+ readonly socketId: string;
35
+ } | {
36
+ readonly _tag: "ReleasedFeedSocket";
37
+ } | {
38
+ readonly _tag: "FailedAcquireFeedSocket";
39
+ readonly error: string;
40
+ }, Option.Option<{
41
+ readonly channel: string;
42
+ }>, Readonly<{
43
+ socketId: string;
44
+ }>, ManagedResource.ManagedResourceService<"FeedSocket">, (socket: Readonly<{
45
+ socketId: string;
46
+ }>) => {
47
+ readonly _tag: "AcquiredFeedSocket";
48
+ readonly socketId: string;
49
+ }>;
50
+ presence: ManagedResource.Entry<{
51
+ readonly isFeedOpen: boolean;
52
+ readonly status: "Disconnected" | "Connected" | "Failed";
53
+ }, {
54
+ readonly _tag: "ClickedToggleFeed";
55
+ } | {
56
+ readonly _tag: "AcquiredFeedSocket";
57
+ readonly socketId: string;
58
+ } | {
59
+ readonly _tag: "ReleasedFeedSocket";
60
+ } | {
61
+ readonly _tag: "FailedAcquireFeedSocket";
62
+ readonly error: string;
63
+ }, Option.Option<null>, string, ManagedResource.ManagedResourceService<"Presence">, () => {
64
+ readonly _tag: "AcquiredFeedSocket";
65
+ readonly socketId: string;
66
+ }>;
67
+ };
68
+ export declare const initialModel: {
69
+ readonly isFeedOpen: boolean;
70
+ readonly status: "Disconnected" | "Connected" | "Failed";
71
+ };
72
+ export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<never>];
73
+ export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
74
+ //# sourceMappingURL=feedSocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedSocket.d.ts","sourceRoot":"","sources":["../../../src/test/apps/feedSocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEzE,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,iBAAiB,+EAAyB,CAAA;AACvD,eAAO,MAAM,kBAAkB;;EAE7B,CAAA;AACF,eAAO,MAAM,kBAAkB,gFAA0B,CAAA;AACzD,eAAO,MAAM,uBAAuB;;EAElC,CAAA;AAEF,eAAO,MAAM,OAAO;;;;IAKlB,CAAA;AACF,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;;;;;;;;;;;;;;;;;;;;;;CA2BjD,CAAA;AAIH,eAAO,MAAM,YAAY;;;CAGvB,CAAA;AAIF,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAerC,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAU1D,CAAA"}
@@ -0,0 +1,69 @@
1
+ import { Boolean, Effect, Match as M, Option, Schema as S } from 'effect';
2
+ import * as ManagedResource from '../../managedResource/index.js';
3
+ import { m } from '../../message/index.js';
4
+ import { evo } from '../../struct/index.js';
5
+ // MODEL
6
+ export const Model = S.Struct({
7
+ isFeedOpen: S.Boolean,
8
+ status: S.Literals(['Disconnected', 'Connected', 'Failed']),
9
+ });
10
+ // MESSAGE
11
+ export const ClickedToggleFeed = m('ClickedToggleFeed');
12
+ export const AcquiredFeedSocket = m('AcquiredFeedSocket', {
13
+ socketId: S.String,
14
+ });
15
+ export const ReleasedFeedSocket = m('ReleasedFeedSocket');
16
+ export const FailedAcquireFeedSocket = m('FailedAcquireFeedSocket', {
17
+ error: S.String,
18
+ });
19
+ export const Message = S.Union([
20
+ ClickedToggleFeed,
21
+ AcquiredFeedSocket,
22
+ ReleasedFeedSocket,
23
+ FailedAcquireFeedSocket,
24
+ ]);
25
+ const FeedSocketResource = ManagedResource.tag()('FeedSocket');
26
+ const PresenceResource = ManagedResource.tag()('Presence');
27
+ export const feedResources = ManagedResource.make()(entry => ({
28
+ feedSocket: entry(S.Option(S.Struct({ channel: S.String })), {
29
+ resource: FeedSocketResource,
30
+ modelToMaybeRequirements: model => model.isFeedOpen ? Option.some({ channel: 'general' }) : Option.none(),
31
+ acquire: () => Effect.succeed({ socketId: 'live' }),
32
+ release: () => Effect.void,
33
+ onAcquired: socket => AcquiredFeedSocket({ socketId: socket.socketId }),
34
+ onReleased: () => ReleasedFeedSocket(),
35
+ onAcquireError: error => FailedAcquireFeedSocket({ error: String(error) }),
36
+ }),
37
+ presence: entry(S.Option(S.Null), {
38
+ resource: PresenceResource,
39
+ modelToMaybeRequirements: model => model.isFeedOpen ? Option.some(null) : Option.none(),
40
+ acquire: () => Effect.succeed('online'),
41
+ release: () => Effect.void,
42
+ onAcquired: () => AcquiredFeedSocket({ socketId: 'presence' }),
43
+ onReleased: () => ReleasedFeedSocket(),
44
+ onAcquireError: error => FailedAcquireFeedSocket({ error: String(error) }),
45
+ }),
46
+ }));
47
+ // INIT
48
+ export const initialModel = Model.make({
49
+ isFeedOpen: false,
50
+ status: 'Disconnected',
51
+ });
52
+ // UPDATE
53
+ export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
54
+ ClickedToggleFeed: () => [evo(model, { isFeedOpen: Boolean.not }), []],
55
+ AcquiredFeedSocket: () => [evo(model, { status: () => 'Connected' }), []],
56
+ ReleasedFeedSocket: () => [
57
+ evo(model, { status: () => 'Disconnected' }),
58
+ [],
59
+ ],
60
+ FailedAcquireFeedSocket: () => [
61
+ evo(model, { status: () => 'Failed' }),
62
+ [],
63
+ ],
64
+ }));
65
+ // VIEW
66
+ export const view = (model, h) => h.div([], [
67
+ h.span([h.Role('status')], [model.status]),
68
+ h.button([h.OnClick(ClickedToggleFeed()), h.Role('button')], [model.isFeedOpen ? 'Close feed' : 'Open feed']),
69
+ ]);
@@ -1,6 +1,6 @@
1
1
  import { Schema as S } from 'effect';
2
2
  import { File } from '../../file/index.js';
3
- import { type Html } from '../../html/index.js';
3
+ import type { Html, HtmlBuilder } from '../../html/index.js';
4
4
  export type Model = Readonly<{
5
5
  receivedFiles: ReadonlyArray<File>;
6
6
  }>;
@@ -13,5 +13,5 @@ export declare const Message: S.Union<readonly [import("../../schema/index.js").
13
13
  }>]>;
14
14
  export type Message = typeof Message.Type;
15
15
  export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<never>];
16
- export declare const view: (model: Model) => Html;
16
+ export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
17
17
  //# 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,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,qBAAqB,CAAA;AAKrD,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,aAAa;;EAA+C,CAAA;AAEzE,eAAO,MAAM,OAAO;;IAA2B,CAAA;AAC/C,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,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,KAAG,IA8BnC,CAAA"}
1
+ {"version":3,"file":"fileUpload.d.ts","sourceRoot":"","sources":["../../../src/test/apps/fileUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhD,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,aAAa;;EAA+C,CAAA;AAEzE,eAAO,MAAM,OAAO;;IAA2B,CAAA;AAC/C,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,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,IA4B5D,CAAA"}
@@ -1,6 +1,5 @@
1
1
  import { Match as M, Schema as S } from 'effect';
2
2
  import { File } from '../../file/index.js';
3
- import { html } from '../../html/index.js';
4
3
  import { m } from '../../message/index.js';
5
4
  export const initialModel = { receivedFiles: [] };
6
5
  // MESSAGE
@@ -11,8 +10,7 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
11
10
  ReceivedFiles: ({ files }) => [{ ...model, receivedFiles: files }, []],
12
11
  }));
13
12
  // VIEW
14
- export const view = (model) => {
15
- const h = html();
13
+ export const view = (model, h) => {
16
14
  return h.div([], [
17
15
  h.input([
18
16
  h.Key('file-input'),
@@ -1,5 +1,5 @@
1
1
  import { Schema as S } from 'effect';
2
- import { type Html } from '../../html/index.js';
2
+ import type { Html, HtmlBuilder } from '../../html/index.js';
3
3
  export declare const Model: S.Struct<{
4
4
  readonly clicks: S.Number;
5
5
  readonly doubleClicks: S.Number;
@@ -22,5 +22,5 @@ export declare const Message: S.Union<readonly [import("../../schema/index.js").
22
22
  export type Message = typeof Message.Type;
23
23
  export declare const initialModel: Model;
24
24
  export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<never>];
25
- export declare const view: (model: Model) => Html;
25
+ export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
26
26
  //# 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,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhD,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,qBAAqB,CAAA;AAKrD,eAAO,MAAM,KAAK;;;;;;EAMhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAC/C,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAC/C,eAAO,MAAM,YAAY,0EAAoB,CAAA;AAC7C,eAAO,MAAM,YAAY,0EAAoB,CAAA;AAC7C,eAAO,MAAM,aAAa;;EAA0C,CAAA;AAEpE,eAAO,MAAM,OAAO;;IAOlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY,EAAE,KAM1B,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,KAAG,IA8BnC,CAAA"}
1
+ {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../../src/test/apps/interactions.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;;;;;;EAMhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAC/C,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,eAAO,MAAM,aAAa,2EAAqB,CAAA;AAC/C,eAAO,MAAM,YAAY,0EAAoB,CAAA;AAC7C,eAAO,MAAM,YAAY,0EAAoB,CAAA;AAC7C,eAAO,MAAM,aAAa;;EAA0C,CAAA;AAEpE,eAAO,MAAM,OAAO;;IAOlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY,EAAE,KAM1B,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"}
@@ -1,5 +1,4 @@
1
1
  import { Match as M, Schema as S } from 'effect';
2
- import { html } from '../../html/index.js';
3
2
  import { m } from '../../message/index.js';
4
3
  // MODEL
5
4
  export const Model = S.Struct({
@@ -45,8 +44,7 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
45
44
  ChangedSelect: ({ value }) => [{ ...model, changed: value }, []],
46
45
  }));
47
46
  // VIEW
48
- export const view = (model) => {
49
- const h = html();
47
+ export const view = (model, h) => {
50
48
  return h.div([], [
51
49
  h.button([
52
50
  h.OnClick(ClickedButton()),
@@ -1,5 +1,5 @@
1
1
  import { Schema as S } from 'effect';
2
- import type { Html } from '../../html/index.js';
2
+ import type { Html, HtmlBuilder } from '../../html/index.js';
3
3
  export declare const Model: S.Struct<{
4
4
  readonly lastKey: S.String;
5
5
  readonly isShifted: S.Boolean;
@@ -19,5 +19,5 @@ export declare const Message: S.Union<readonly [import("../../schema/index.js").
19
19
  export type Message = typeof Message.Type;
20
20
  export declare const initialModel: Model;
21
21
  export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<never>];
22
- export declare const view: (model: Model) => Html;
22
+ export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
23
23
  //# 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,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAM/C,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,UAAU;;EAAqC,CAAA;AAC5D,eAAO,MAAM,eAAe;;EAA0C,CAAA;AAEtE,eAAO,MAAM,OAAO;;;;IAAyC,CAAA;AAC7D,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY,EAAE,KAG1B,CAAA;AAID,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAarC,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IAoBnC,CAAA"}
1
+ {"version":3,"file":"keypress.d.ts","sourceRoot":"","sources":["../../../src/test/apps/keypress.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;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,UAAU;;EAAqC,CAAA;AAC5D,eAAO,MAAM,eAAe;;EAA0C,CAAA;AAEtE,eAAO,MAAM,OAAO;;;;IAAyC,CAAA;AAC7D,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY,EAAE,KAG1B,CAAA;AAID,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAarC,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,IAkB5D,CAAA"}
@@ -1,5 +1,4 @@
1
1
  import { Match as M, Schema as S } from 'effect';
2
- import { html } from '../../html/index.js';
3
2
  import { m } from '../../message/index.js';
4
3
  // MODEL
5
4
  export const Model = S.Struct({
@@ -27,8 +26,7 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
27
26
  ],
28
27
  }));
29
28
  // VIEW
30
- export const view = (model) => {
31
- const h = html();
29
+ export const view = (model, h) => {
32
30
  return h.div([
33
31
  h.Id('key-app'),
34
32
  h.Role('application'),
@@ -1,6 +1,6 @@
1
1
  import { Effect, Schema as S } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
- import { type Html } from '../../html/index.js';
3
+ import type { Html, HtmlBuilder } from '../../html/index.js';
4
4
  export declare const Model: S.Struct<{
5
5
  readonly email: S.String;
6
6
  readonly password: S.String;
@@ -39,5 +39,5 @@ export declare const Authenticate: Command.CommandDefinitionNoArgs<"Authenticate
39
39
  }, never, never>>;
40
40
  export declare const initialModel: Model;
41
41
  export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
42
- export declare const view: (model: Model) => Html;
42
+ export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
43
43
  //# 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,EAAE,KAAK,IAAI,EAAQ,MAAM,qBAAqB,CAAA;AAKrD,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;;;iBAIyC,CAAA;AAIlE,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,KAAG,IAgFnC,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,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;;;iBAIyC,CAAA;AAIlE,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,6 +1,5 @@
1
1
  import { Effect, Match as M, Schema as S } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
- import { html } from '../../html/index.js';
4
3
  import { m } from '../../message/index.js';
5
4
  // MODEL
6
5
  export const Model = S.Struct({
@@ -59,8 +58,7 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
59
58
  ],
60
59
  }));
61
60
  // VIEW
62
- export const view = (model) => {
63
- const h = html();
61
+ export const view = (model, h) => {
64
62
  return h.div([h.Id('app')], [
65
63
  M.value(model.status).pipe(M.withReturnType(), M.when('Submitting', () => h.form([h.Class('login-form'), h.Disabled(true)], [h.button([h.Type('submit'), h.Disabled(true)], ['Signing in...'])])), M.when('LoggedIn', () => h.div([
66
64
  h.Class('logged-in'),
@@ -1,5 +1,5 @@
1
1
  import { Option, Schema as S } from 'effect';
2
- import type { Html } from '../../html/index.js';
2
+ import type { Html, HtmlBuilder } from '../../html/index.js';
3
3
  export declare const Model: S.Struct<{
4
4
  readonly label: S.String;
5
5
  }>;
@@ -13,5 +13,5 @@ export declare const OutMessage: S.Union<readonly [import("../../schema/index.js
13
13
  export type OutMessage = typeof OutMessage.Type;
14
14
  export declare const initialModel: Model;
15
15
  export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<never>, Option.Option<OutMessage>];
16
- export declare const view: (model: Model) => Html;
16
+ export declare const view: (model: Model, h: HtmlBuilder<Message>) => Html;
17
17
  //# 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,MAAM,qBAAqB,CAAA;AAM/C,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,KAAG,IAOnC,CAAA"}
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,5 +1,4 @@
1
1
  import { Match as M, Option, Schema as S } from 'effect';
2
- import { html } from '../../html/index.js';
3
2
  import { m } from '../../message/index.js';
4
3
  // MODEL
5
4
  export const Model = S.Struct({ label: S.String });
@@ -18,7 +17,6 @@ export const update = (model, message) => M.value(message).pipe(M.withReturnType
18
17
  CompletedAction: () => [model, [], Option.none()],
19
18
  }));
20
19
  // VIEW
21
- export const view = (model) => {
22
- const h = html();
20
+ export const view = (model, h) => {
23
21
  return h.div([], [h.button([h.OnClick(ClickedLogout()), h.Role('button')], [model.label])]);
24
22
  };