foldkit 0.161.0 → 0.162.0-canary.01d0205a4e2b

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 (65) hide show
  1. package/README.md +4 -4
  2. package/dist/asyncData/asyncData.d.ts +1 -1
  3. package/dist/asyncData/asyncData.js +1 -1
  4. package/dist/devTools/store.d.ts.map +1 -1
  5. package/dist/devTools/store.js +16 -16
  6. package/dist/experimental/machine/machine.d.ts +1 -1
  7. package/dist/experimental/machine/machine.js +1 -1
  8. package/dist/experimental/server/server.d.ts +9 -6
  9. package/dist/experimental/server/server.d.ts.map +1 -1
  10. package/dist/experimental/server/server.js +3 -28
  11. package/dist/html/index.d.ts +24 -16
  12. package/dist/html/index.d.ts.map +1 -1
  13. package/dist/runtime/deepFreeze.d.ts +1 -1
  14. package/dist/runtime/deepFreeze.js +1 -1
  15. package/dist/runtime/documentMetadata.d.ts.map +1 -1
  16. package/dist/runtime/documentMetadata.js +69 -47
  17. package/dist/runtime/managedResourceFibers.d.ts +1 -1
  18. package/dist/runtime/managedResourceFibers.d.ts.map +1 -1
  19. package/dist/runtime/managedResourceFibers.js +3 -2
  20. package/dist/runtime/subscriptionFibers.d.ts +1 -1
  21. package/dist/runtime/subscriptionFibers.d.ts.map +1 -1
  22. package/dist/runtime/subscriptionFibers.js +3 -2
  23. package/dist/struct/index.d.ts +4 -4
  24. package/dist/struct/index.d.ts.map +1 -1
  25. package/dist/struct/index.js +4 -4
  26. package/dist/struct/public.d.ts +1 -1
  27. package/dist/struct/public.d.ts.map +1 -1
  28. package/dist/struct/public.js +1 -1
  29. package/dist/submodel/submodel.d.ts +3 -3
  30. package/dist/subscription/{keyboardShortcuts.d.ts → keyBindings.d.ts} +23 -23
  31. package/dist/subscription/keyBindings.d.ts.map +1 -0
  32. package/dist/subscription/{keyboardShortcuts.js → keyBindings.js} +42 -43
  33. package/dist/subscription/public.d.ts +2 -2
  34. package/dist/subscription/public.d.ts.map +1 -1
  35. package/dist/subscription/public.js +1 -1
  36. package/dist/test/apps/bubbling.js +5 -5
  37. package/dist/test/apps/colorPicker.js +2 -2
  38. package/dist/test/apps/contentEditableEditor.js +3 -3
  39. package/dist/test/apps/contextMenu.js +2 -2
  40. package/dist/test/apps/counter.d.ts.map +1 -1
  41. package/dist/test/apps/counter.js +8 -5
  42. package/dist/test/apps/crashOnRender.js +3 -3
  43. package/dist/test/apps/drafts.js +3 -3
  44. package/dist/test/apps/feedSocket.js +5 -5
  45. package/dist/test/apps/fileUpload.js +2 -2
  46. package/dist/test/apps/focusBoundary.js +3 -3
  47. package/dist/test/apps/formChild.js +4 -4
  48. package/dist/test/apps/interactions.js +7 -7
  49. package/dist/test/apps/keypress.js +3 -3
  50. package/dist/test/apps/keypressSelf.js +2 -2
  51. package/dist/test/apps/login.js +7 -7
  52. package/dist/test/apps/mountPanel.js +4 -4
  53. package/dist/test/apps/multiRole.js +2 -2
  54. package/dist/test/apps/pointer.js +3 -3
  55. package/dist/test/apps/resumeUpload.js +5 -5
  56. package/dist/test/apps/scorePanel.js +2 -2
  57. package/dist/test/apps/selectiveKeys.d.ts.map +1 -1
  58. package/dist/test/apps/selectiveKeys.js +5 -3
  59. package/dist/test/apps/uploads.d.ts.map +1 -1
  60. package/dist/test/apps/uploads.js +13 -7
  61. package/dist/test/query.js +5 -5
  62. package/dist/update/update.d.ts +4 -4
  63. package/dist/update/update.js +3 -3
  64. package/package.json +1 -1
  65. package/dist/subscription/keyboardShortcuts.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { Array, Effect, Schema } 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
+ import { modifyFields } from '../../struct/index.js';
5
5
  // MODEL
6
6
  export const RawSource = Schema.Struct({
7
7
  kind: Schema.Literal('Book'),
@@ -47,12 +47,12 @@ export const initialModel = { sources: validSources };
47
47
  export const update = (model, message) => Message.match(message, {
48
48
  ClickedReload: () => ({ model, commands: [ReloadSources()] }),
49
49
  CompletedReloadSources: ({ sources }) => ({
50
- model: evo(model, { sources: () => sources }),
50
+ model: modifyFields(model, { sources: () => sources }),
51
51
  }),
52
52
  SelectedSource: () => ({ model }),
53
53
  SubmittedNewSourceId: ({ id }) => {
54
54
  const source = Source.make({ kind: 'Book', id });
55
- return { model: evo(model, { sources: Array.append(source) }) };
55
+ return { model: modifyFields(model, { sources: Array.append(source) }) };
56
56
  },
57
57
  });
58
58
  // VIEW
@@ -1,7 +1,7 @@
1
1
  import { Effect, Schema } 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
+ import { modifyFields } from '../../struct/index.js';
5
5
  // MODEL
6
6
  export const SaveStatus = Schema.Literals(['Editing', 'Saving', 'Saved']);
7
7
  export const Model = Schema.Struct({
@@ -26,11 +26,11 @@ export const initialModel = { revision: 0, status: 'Editing' };
26
26
  // UPDATE
27
27
  export const update = (model, message) => Message.match(message, {
28
28
  ClickedSaveDraft: () => ({
29
- model: evo(model, { status: () => 'Saving' }),
29
+ model: modifyFields(model, { status: () => 'Saving' }),
30
30
  commands: [SaveDraft({ revision: model.revision })],
31
31
  }),
32
32
  SucceededSaveDraft: () => ({
33
- model: evo(model, { status: () => 'Saved' }),
33
+ model: modifyFields(model, { status: () => 'Saved' }),
34
34
  }),
35
35
  });
36
36
  // VIEW
@@ -1,7 +1,7 @@
1
1
  import { Boolean, Effect, Option, Schema } from 'effect';
2
2
  import * as ManagedResource from '../../managedResource/index.js';
3
3
  import { defineMessageUnion } from '../../message/index.js';
4
- import { evo } from '../../struct/index.js';
4
+ import { modifyFields } from '../../struct/index.js';
5
5
  // MODEL
6
6
  export const Model = Schema.Struct({
7
7
  isFeedOpen: Schema.Boolean,
@@ -44,16 +44,16 @@ export const initialModel = Model.make({
44
44
  // UPDATE
45
45
  export const update = (model, message) => Message.match(message, {
46
46
  ClickedToggleFeed: () => ({
47
- model: evo(model, { isFeedOpen: Boolean.not }),
47
+ model: modifyFields(model, { isFeedOpen: Boolean.not }),
48
48
  }),
49
49
  AcquiredFeedSocket: () => ({
50
- model: evo(model, { status: () => 'Connected' }),
50
+ model: modifyFields(model, { status: () => 'Connected' }),
51
51
  }),
52
52
  ReleasedFeedSocket: () => ({
53
- model: evo(model, { status: () => 'Disconnected' }),
53
+ model: modifyFields(model, { status: () => 'Disconnected' }),
54
54
  }),
55
55
  FailedAcquireFeedSocket: () => ({
56
- model: evo(model, { status: () => 'Failed' }),
56
+ model: modifyFields(model, { status: () => 'Failed' }),
57
57
  }),
58
58
  });
59
59
  // VIEW
@@ -1,7 +1,7 @@
1
1
  import { Schema } from 'effect';
2
2
  import { File } from '../../file/index.js';
3
3
  import { defineMessageUnion } from '../../message/index.js';
4
- import { evo } from '../../struct/index.js';
4
+ import { modifyFields } from '../../struct/index.js';
5
5
  export const initialModel = { receivedFiles: [] };
6
6
  // MESSAGE
7
7
  export const Message = defineMessageUnion({
@@ -10,7 +10,7 @@ export const Message = defineMessageUnion({
10
10
  // UPDATE
11
11
  export const update = (model, message) => Message.match(message, {
12
12
  ReceivedFiles: ({ files }) => ({
13
- model: evo(model, { receivedFiles: () => files }),
13
+ model: modifyFields(model, { receivedFiles: () => files }),
14
14
  }),
15
15
  });
16
16
  // VIEW
@@ -1,6 +1,6 @@
1
1
  import { Schema } from 'effect';
2
2
  import { defineMessageUnion } from '../../message/index.js';
3
- import { evo } from '../../struct/index.js';
3
+ import { modifyFields } from '../../struct/index.js';
4
4
  // MODEL
5
5
  const FocusState = Schema.Literals(['Outside', 'Within']);
6
6
  export const Model = Schema.Struct({
@@ -18,10 +18,10 @@ export const initialModel = {
18
18
  // UPDATE
19
19
  export const update = (model, message) => Message.match(message, {
20
20
  EnteredFocusRegion: () => ({
21
- model: evo(model, { focusState: () => 'Within' }),
21
+ model: modifyFields(model, { focusState: () => 'Within' }),
22
22
  }),
23
23
  LeftFocusRegion: () => ({
24
- model: evo(model, { focusState: () => 'Outside' }),
24
+ model: modifyFields(model, { focusState: () => 'Outside' }),
25
25
  }),
26
26
  });
27
27
  // VIEW
@@ -1,7 +1,7 @@
1
1
  import { Array, Effect, Option, Schema } 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
+ import { modifyFields } from '../../struct/index.js';
5
5
  import * as Update from '../../update/index.js';
6
6
  // CHILD MODEL
7
7
  export const ChildModel = Schema.Struct({
@@ -67,16 +67,16 @@ export const initialParentModel = {
67
67
  // PARENT UPDATE
68
68
  const foldChildOutMessage = ChildOutMessage.match({
69
69
  RequestedSave: ({ id }) => model => ({
70
- model: evo(model, { savedIds: Array.append(id) }),
70
+ model: modifyFields(model, { savedIds: Array.append(id) }),
71
71
  }),
72
72
  RequestedCancel: () => model => ({
73
- model: evo(model, { cancelled: () => true }),
73
+ model: modifyFields(model, { cancelled: () => true }),
74
74
  }),
75
75
  });
76
76
  const foldChildUpdate = Update.foldChild({
77
77
  update: childUpdate,
78
78
  read: (model) => Option.some(model.child),
79
- write: (model, nextChild) => evo(model, { child: () => nextChild }),
79
+ write: (model, nextChild) => modifyFields(model, { child: () => nextChild }),
80
80
  toParentMessage: message => ParentMessage.GotChildMessage({ message }),
81
81
  foldOutMessage: foldChildOutMessage,
82
82
  });
@@ -1,6 +1,6 @@
1
1
  import { Number, Schema } from 'effect';
2
2
  import { defineMessageUnion } from '../../message/index.js';
3
- import { evo } from '../../struct/index.js';
3
+ import { modifyFields } from '../../struct/index.js';
4
4
  // MODEL
5
5
  export const Model = Schema.Struct({
6
6
  clicks: Schema.Number,
@@ -29,22 +29,22 @@ export const initialModel = {
29
29
  // UPDATE
30
30
  export const update = (model, message) => Message.match(message, {
31
31
  ClickedButton: () => ({
32
- model: evo(model, { clicks: Number.increment }),
32
+ model: modifyFields(model, { clicks: Number.increment }),
33
33
  }),
34
34
  DoubleClickedButton: () => ({
35
- model: evo(model, { doubleClicks: Number.increment }),
35
+ model: modifyFields(model, { doubleClicks: Number.increment }),
36
36
  }),
37
37
  HoveredTarget: () => ({
38
- model: evo(model, { hovered: () => true }),
38
+ model: modifyFields(model, { hovered: () => true }),
39
39
  }),
40
40
  FocusedInput: () => ({
41
- model: evo(model, { focused: () => true }),
41
+ model: modifyFields(model, { focused: () => true }),
42
42
  }),
43
43
  BlurredInput: () => ({
44
- model: evo(model, { focused: () => false }),
44
+ model: modifyFields(model, { focused: () => false }),
45
45
  }),
46
46
  ChangedSelect: ({ value }) => ({
47
- model: evo(model, { changed: () => value }),
47
+ model: modifyFields(model, { changed: () => value }),
48
48
  }),
49
49
  });
50
50
  // VIEW
@@ -1,6 +1,6 @@
1
1
  import { Schema } from 'effect';
2
2
  import { defineMessageUnion } from '../../message/index.js';
3
- import { evo } from '../../struct/index.js';
3
+ import { modifyFields } from '../../struct/index.js';
4
4
  // MODEL
5
5
  export const Model = Schema.Struct({
6
6
  lastKey: Schema.String,
@@ -19,13 +19,13 @@ export const initialModel = {
19
19
  // UPDATE
20
20
  export const update = (model, message) => Message.match(message, {
21
21
  PressedKey: ({ key }) => ({
22
- model: evo(model, {
22
+ model: modifyFields(model, {
23
23
  lastKey: () => key,
24
24
  isShifted: () => false,
25
25
  }),
26
26
  }),
27
27
  PressedShiftKey: ({ key }) => ({
28
- model: evo(model, {
28
+ model: modifyFields(model, {
29
29
  lastKey: () => key,
30
30
  isShifted: () => true,
31
31
  }),
@@ -1,6 +1,6 @@
1
1
  import { Schema } from 'effect';
2
2
  import { defineMessageUnion } from '../../message/index.js';
3
- import { evo } from '../../struct/index.js';
3
+ import { modifyFields } from '../../struct/index.js';
4
4
  // MODEL
5
5
  export const Model = Schema.Struct({
6
6
  lastKey: Schema.String,
@@ -16,7 +16,7 @@ export const initialModel = {
16
16
  // UPDATE
17
17
  export const update = (model, message) => Message.match(message, {
18
18
  PressedSelfKey: ({ key }) => ({
19
- model: evo(model, { lastKey: () => key }),
19
+ model: modifyFields(model, { lastKey: () => key }),
20
20
  }),
21
21
  });
22
22
  // VIEW
@@ -1,7 +1,7 @@
1
1
  import { Effect, Match, Schema } 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
+ import { modifyFields } from '../../struct/index.js';
5
5
  // MODEL
6
6
  export const Model = Schema.Struct({
7
7
  email: Schema.String,
@@ -35,26 +35,26 @@ export const initialModel = {
35
35
  // UPDATE
36
36
  export const update = (model, message) => Message.match(message, {
37
37
  UpdatedEmail: ({ value }) => ({
38
- model: evo(model, { email: () => value }),
38
+ model: modifyFields(model, { email: () => value }),
39
39
  }),
40
40
  UpdatedPassword: ({ value }) => ({
41
- model: evo(model, { password: () => value }),
41
+ model: modifyFields(model, { password: () => value }),
42
42
  }),
43
43
  SubmittedLogin: () => ({
44
- model: evo(model, { status: () => 'Submitting' }),
44
+ model: modifyFields(model, { status: () => 'Submitting' }),
45
45
  commands: [Authenticate()],
46
46
  }),
47
47
  SucceededAuthenticate: ({ username }) => ({
48
- model: evo(model, {
48
+ model: modifyFields(model, {
49
49
  status: () => 'LoggedIn',
50
50
  username: () => username,
51
51
  }),
52
52
  }),
53
53
  FailedAuthenticate: ({ error }) => ({
54
- model: evo(model, { status: () => 'Error', error: () => error }),
54
+ model: modifyFields(model, { status: () => 'Error', error: () => error }),
55
55
  }),
56
56
  ClickedLogout: () => ({
57
- model: evo(model, {
57
+ model: modifyFields(model, {
58
58
  status: () => 'Idle',
59
59
  username: () => '',
60
60
  email: () => '',
@@ -1,7 +1,7 @@
1
1
  import { Effect, Number, Option, Schema } from 'effect';
2
2
  import { defineMessageUnion } from '../../message/index.js';
3
3
  import * as Mount from '../../mount/index.js';
4
- import { evo } from '../../struct/index.js';
4
+ import { modifyFields } from '../../struct/index.js';
5
5
  // MODEL
6
6
  export const Model = Schema.Struct({
7
7
  isOpen: Schema.Boolean,
@@ -52,15 +52,15 @@ export const initialModel = {
52
52
  // UPDATE
53
53
  export const update = (model, message) => Message.match(message, {
54
54
  ClickedToggle: () => ({
55
- model: evo(model, { isOpen: isOpen => !isOpen }),
55
+ model: modifyFields(model, { isOpen: isOpen => !isOpen }),
56
56
  }),
57
57
  MeasuredPanel: ({ width }) => ({
58
- model: evo(model, { measuredWidth: () => Option.some(width) }),
58
+ model: modifyFields(model, { measuredWidth: () => Option.some(width) }),
59
59
  }),
60
60
  CompletedFocusButton: () => ({ model }),
61
61
  FailedMountSidebar: () => ({ model }),
62
62
  ClickedIncrement: () => ({
63
- model: evo(model, { count: Number.increment }),
63
+ model: modifyFields(model, { count: Number.increment }),
64
64
  }),
65
65
  ScrolledTo: () => ({ model }),
66
66
  });
@@ -1,6 +1,6 @@
1
1
  import { Number, Schema } from 'effect';
2
2
  import { defineMessageUnion } from '../../message/index.js';
3
- import { evo } from '../../struct/index.js';
3
+ import { modifyFields } from '../../struct/index.js';
4
4
  // MODEL
5
5
  export const Model = Schema.Struct({ clicks: Schema.Number });
6
6
  // MESSAGE
@@ -12,7 +12,7 @@ export const initialModel = { clicks: 0 };
12
12
  // UPDATE
13
13
  export const update = (model, message) => Message.match(message, {
14
14
  ClickedFallback: () => ({
15
- model: evo(model, { clicks: Number.increment }),
15
+ model: modifyFields(model, { clicks: Number.increment }),
16
16
  }),
17
17
  });
18
18
  // VIEW
@@ -1,6 +1,6 @@
1
1
  import { Number, Option, Schema } from 'effect';
2
2
  import { defineMessageUnion } from '../../message/index.js';
3
- import { evo } from '../../struct/index.js';
3
+ import { modifyFields } from '../../struct/index.js';
4
4
  // MODEL
5
5
  export const Model = Schema.Struct({
6
6
  pointerDownCount: Schema.Number,
@@ -21,13 +21,13 @@ export const initialModel = {
21
21
  // UPDATE
22
22
  export const update = (model, message) => Message.match(message, {
23
23
  PressedPointerDown: ({ pointerType }) => ({
24
- model: evo(model, {
24
+ model: modifyFields(model, {
25
25
  pointerDownCount: Number.increment,
26
26
  lastPointerType: () => pointerType,
27
27
  }),
28
28
  }),
29
29
  ReleasedPointerUp: ({ pointerType }) => ({
30
- model: evo(model, {
30
+ model: modifyFields(model, {
31
31
  pointerUpCount: Number.increment,
32
32
  lastPointerType: () => pointerType,
33
33
  }),
@@ -2,7 +2,7 @@ import { Effect, Match, Option, Schema } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
3
  import * as File from '../../file/index.js';
4
4
  import { defineMessageUnion } from '../../message/index.js';
5
- import { evo } from '../../struct/index.js';
5
+ import { modifyFields } from '../../struct/index.js';
6
6
  // MODEL
7
7
  export const Model = Schema.Struct({
8
8
  maybeResume: Schema.Option(File.File),
@@ -41,7 +41,7 @@ export const initialModel = {
41
41
  export const update = (model, message) => Message.match(message, {
42
42
  ClickedChooseResume: () => ({ model, commands: [SelectResume()] }),
43
43
  CompletedSelectResume: ({ file }) => ({
44
- model: evo(model, {
44
+ model: modifyFields(model, {
45
45
  maybeResume: () => Option.some(file),
46
46
  maybePreviewDataUrl: () => Option.none(),
47
47
  readStatus: () => 'Reading',
@@ -50,16 +50,16 @@ export const update = (model, message) => Message.match(message, {
50
50
  }),
51
51
  CancelledSelectResume: () => ({ model }),
52
52
  SucceededReadPreview: ({ dataUrl }) => ({
53
- model: evo(model, {
53
+ model: modifyFields(model, {
54
54
  maybePreviewDataUrl: () => Option.some(dataUrl),
55
55
  readStatus: () => 'Idle',
56
56
  }),
57
57
  }),
58
58
  FailedReadPreview: () => ({
59
- model: evo(model, { readStatus: () => 'Failed' }),
59
+ model: modifyFields(model, { readStatus: () => 'Failed' }),
60
60
  }),
61
61
  ClickedRemoveResume: () => ({
62
- model: evo(model, {
62
+ model: modifyFields(model, {
63
63
  maybeResume: () => Option.none(),
64
64
  maybePreviewDataUrl: () => Option.none(),
65
65
  readStatus: () => 'Idle',
@@ -1,6 +1,6 @@
1
1
  import { Number, Schema } from 'effect';
2
2
  import { defineMessageUnion } from '../../message/index.js';
3
- import { evo } from '../../struct/index.js';
3
+ import { modifyFields } from '../../struct/index.js';
4
4
  import { defineView } from '../../submodel/public.js';
5
5
  // MODEL
6
6
  export const Model = Schema.Struct({ score: Schema.Number });
@@ -13,7 +13,7 @@ export const initialModel = Model.make({ score: 0 });
13
13
  // UPDATE
14
14
  export const update = (model, message) => Message.match(message, {
15
15
  ClickedIncrement: () => ({
16
- model: evo(model, { score: Number.increment }),
16
+ model: modifyFields(model, { score: Number.increment }),
17
17
  }),
18
18
  });
19
19
  export const view = defineView((model, viewInputs, h) => h.div([], [
@@ -1 +1 @@
1
- {"version":3,"file":"selectiveKeys.d.ts","sourceRoot":"","sources":["../../../src/test/apps/selectiveKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEvD,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;;EAEhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;;EAIlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAEzC;mEACmE;AACnE,eAAO,MAAM,WAAW;;iBAGtB,CAAA;AAIF,eAAO,MAAM,YAAY,EAAE,KAAsB,CAAA;AAIjD,eAAO,MAAM,MAAM,UAAW,KAAK,WAAW,OAAO;;;;;;;;;;;;EAQjD,CAAA;AAIJ,eAAO,MAAM,KAAK,mBAAmB,CAAA;AACrC,eAAO,MAAM,OAAO,yBAAyB,CAAA;AAE7C,eAAO,MAAM,IAAI,UAAW,KAAK,KAAK,WAAW,CAAC,OAAO,CAAC,KAAG,IAY1D,CAAA"}
1
+ {"version":3,"file":"selectiveKeys.d.ts","sourceRoot":"","sources":["../../../src/test/apps/selectiveKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEvD,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;;EAEhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;;EAIlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAEzC;mEACmE;AACnE,eAAO,MAAM,WAAW;;iBAGtB,CAAA;AAIF,eAAO,MAAM,YAAY,EAAE,KAAsB,CAAA;AAIjD,eAAO,MAAM,MAAM,UAAW,KAAK,WAAW,OAAO;;;;;;;;;;;;EAUjD,CAAA;AAIJ,eAAO,MAAM,KAAK,mBAAmB,CAAA;AACrC,eAAO,MAAM,OAAO,yBAAyB,CAAA;AAE7C,eAAO,MAAM,IAAI,UAAW,KAAK,KAAK,WAAW,CAAC,OAAO,CAAC,KAAG,IAY1D,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { Effect, Number, Option, Schema } 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
+ import { modifyFields } from '../../struct/index.js';
5
5
  // MODEL
6
6
  export const Model = Schema.Struct({
7
7
  commits: Schema.Number,
@@ -22,9 +22,11 @@ export const RecordReset = Command.define('RecordReset', {
22
22
  export const initialModel = { commits: 0 };
23
23
  // UPDATE
24
24
  export const update = (model, message) => Message.match(message, {
25
- Committed: () => ({ model: evo(model, { commits: Number.increment }) }),
25
+ Committed: () => ({
26
+ model: modifyFields(model, { commits: Number.increment }),
27
+ }),
26
28
  Reset: () => ({
27
- model: evo(model, { commits: () => 0 }),
29
+ model: modifyFields(model, { commits: () => 0 }),
28
30
  commands: [RecordReset()],
29
31
  }),
30
32
  CompletedRecordReset: () => ({ model }),
@@ -1 +1 @@
1
- {"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../../../src/test/apps/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAA;AAGtD,OAAO,KAAK,aAAa,MAAM,sCAAsC,CAAA;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAGhE,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAIpD,eAAO,MAAM,YAAY,wEAKvB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD,eAAO,MAAM,MAAM;;;EAGjB,CAAA;AACF,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AAEvC,eAAO,MAAM,KAAK;;;;;;EAGhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;QAEI,QAAQ;;;QACP,QAAQ;;;QACR,QAAQ;;;QACX,QAAQ;;;QAE1B,QAAQ;QACR,OAAO;;;;;EAET,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,cAAc;;EAA6C,CAAA;AACxE,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;AAEvD,eAAO,MAAM,UAAU;;;;;;;iBASrB,CAAA;AAEF,eAAO,MAAM,gBAAgB,iBAAkB,cAAc;;;;;;;;;;;;;;;EAG1D,CAAA;AAIH,eAAO,MAAM,YAAY,EAAE,KAAoC,CAAA;AAW/D,eAAO,MAAM,MAAM,UAAW,KAAK,WAAW,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCjD,CAAA;AAIJ,eAAO,MAAM,IAAI,UAAW,KAAK,KAAK,WAAW,CAAC,OAAO,CAAC,KAAG,QA6B5D,CAAA"}
1
+ {"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../../../src/test/apps/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAA;AAGtD,OAAO,KAAK,aAAa,MAAM,sCAAsC,CAAA;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAGhE,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAIpD,eAAO,MAAM,YAAY,wEAKvB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD,eAAO,MAAM,MAAM;;;EAGjB,CAAA;AACF,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AAEvC,eAAO,MAAM,KAAK;;;;;;EAGhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,OAAO;;;QAEI,QAAQ;;;QACP,QAAQ;;;QACR,QAAQ;;;QACX,QAAQ;;;QAE1B,QAAQ;QACR,OAAO;;;;;EAET,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,cAAc;;EAA6C,CAAA;AACxE,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;AAEvD,eAAO,MAAM,UAAU;;;;;;;iBASrB,CAAA;AAEF,eAAO,MAAM,gBAAgB,iBAAkB,cAAc;;;;;;;;;;;;;;;EAG1D,CAAA;AAIH,eAAO,MAAM,YAAY,EAAE,KAAoC,CAAA;AAa/D,eAAO,MAAM,MAAM,UAAW,KAAK,WAAW,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0CjD,CAAA;AAIJ,eAAO,MAAM,IAAI,UAAW,KAAK,KAAK,WAAW,CAAC,OAAO,CAAC,KAAG,QA6B5D,CAAA"}
@@ -2,7 +2,7 @@ import { Array, Effect, Number, Schema } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
3
  import * as Interruptible from '../../command/interruptible/index.js';
4
4
  import { defineMessageUnion } from '../../message/index.js';
5
- import { evo } from '../../struct/index.js';
5
+ import { modifyFields } from '../../struct/index.js';
6
6
  // MODEL
7
7
  export const UploadStatus = Schema.Literals([
8
8
  'Uploading',
@@ -45,7 +45,9 @@ export const CancelUploadFile = ({ uploadId }) => UploadFile.Interrupt({ uploadI
45
45
  // INIT
46
46
  export const initialModel = { uploadId: 0, uploads: [] };
47
47
  // UPDATE
48
- const setStatusById = (uploadId, status) => Array.map((upload) => upload.id === uploadId ? evo(upload, { status: () => status }) : upload);
48
+ const setStatusById = (uploadId, status) => Array.map((upload) => upload.id === uploadId
49
+ ? modifyFields(upload, { status: () => status })
50
+ : upload);
49
51
  export const update = (model, message) => Message.match(message, {
50
52
  ClickedStartUpload: () => {
51
53
  const startedUpload = {
@@ -53,7 +55,7 @@ export const update = (model, message) => Message.match(message, {
53
55
  status: 'Uploading',
54
56
  };
55
57
  return {
56
- model: evo(model, {
58
+ model: modifyFields(model, {
57
59
  uploadId: Number.increment,
58
60
  uploads: Array.append(startedUpload),
59
61
  }),
@@ -61,7 +63,9 @@ export const update = (model, message) => Message.match(message, {
61
63
  };
62
64
  },
63
65
  ClickedRetryUpload: ({ uploadId }) => ({
64
- model: evo(model, { uploads: setStatusById(uploadId, 'Uploading') }),
66
+ model: modifyFields(model, {
67
+ uploads: setStatusById(uploadId, 'Uploading'),
68
+ }),
65
69
  commands: [UploadFile({ uploadId })],
66
70
  }),
67
71
  ClickedCancelUpload: ({ uploadId }) => ({
@@ -69,14 +73,16 @@ export const update = (model, message) => Message.match(message, {
69
73
  commands: [CancelUploadFile({ uploadId })],
70
74
  }),
71
75
  SucceededUploadFile: ({ uploadId }) => ({
72
- model: evo(model, { uploads: setStatusById(uploadId, 'Done') }),
76
+ model: modifyFields(model, { uploads: setStatusById(uploadId, 'Done') }),
73
77
  }),
74
78
  FailedUploadFile: ({ uploadId }) => ({
75
- model: evo(model, { uploads: setStatusById(uploadId, 'Failed') }),
79
+ model: modifyFields(model, {
80
+ uploads: setStatusById(uploadId, 'Failed'),
81
+ }),
76
82
  }),
77
83
  CompletedCancelUploadFile: ({ uploadId, outcome }) => Interruptible.Outcome.match(outcome, {
78
84
  Interrupted: () => ({
79
- model: evo(model, {
85
+ model: modifyFields(model, {
80
86
  uploads: setStatusById(uploadId, 'Cancelled'),
81
87
  }),
82
88
  }),
@@ -1,6 +1,6 @@
1
1
  import { Array, Equal, Match, Number, Option, Predicate, Record, Result, String, flow, pipe, } from 'effect';
2
2
  import { dual } from 'effect/Function';
3
- import { evo } from '../struct/index.js';
3
+ import { modifyFields } from '../struct/index.js';
4
4
  const ID_PATTERN = /^#([a-zA-Z0-9_-]+)/;
5
5
  const CLASS_PATTERN = /^\.([a-zA-Z0-9_-]+)/;
6
6
  const ATTRIBUTE_PATTERN = /^\[([a-zA-Z][a-zA-Z0-9_-]*)(?:(\^)?="([^"]*)")?\]/;
@@ -16,15 +16,15 @@ const emptySelector = {
16
16
  classes: [],
17
17
  attributes: [],
18
18
  };
19
- const tryParseId = (input, accumulator) => pipe(input, matchGroup(ID_PATTERN), Option.map(({ consumed, group }) => parseModifiers(input.slice(consumed.length), evo(accumulator, {
19
+ const tryParseId = (input, accumulator) => pipe(input, matchGroup(ID_PATTERN), Option.map(({ consumed, group }) => parseModifiers(input.slice(consumed.length), modifyFields(accumulator, {
20
20
  id: () => Option.some(group),
21
21
  }))));
22
- const tryParseClass = (input, accumulator) => pipe(input, matchGroup(CLASS_PATTERN), Option.map(({ consumed, group }) => parseModifiers(input.slice(consumed.length), evo(accumulator, {
22
+ const tryParseClass = (input, accumulator) => pipe(input, matchGroup(CLASS_PATTERN), Option.map(({ consumed, group }) => parseModifiers(input.slice(consumed.length), modifyFields(accumulator, {
23
23
  classes: Array.append(group),
24
24
  }))));
25
25
  const tryParseAttribute = (input, accumulator) => pipe(input, String.match(ATTRIBUTE_PATTERN), Option.flatMap(match => pipe(match, Array.get(1), Option.map(name => {
26
26
  const mode = match[2] === '^' ? 'StartsWith' : 'Exact';
27
- return parseModifiers(input.slice(match[0].length), evo(accumulator, {
27
+ return parseModifiers(input.slice(match[0].length), modifyFields(accumulator, {
28
28
  attributes: Array.append({
29
29
  name,
30
30
  value: Option.fromNullishOr(match[3]),
@@ -43,7 +43,7 @@ const parseModifiers = (input, accumulator) => {
43
43
  };
44
44
  const parseCompoundSelector = (segment) => pipe(segment, String.match(TAG_PATTERN), Option.match({
45
45
  onNone: () => parseModifiers(segment, emptySelector),
46
- onSome: match => parseModifiers(segment.slice(match[0].length), evo(emptySelector, { tag: () => Array.get(match, 1) })),
46
+ onSome: match => parseModifiers(segment.slice(match[0].length), modifyFields(emptySelector, { tag: () => Array.get(match, 1) })),
47
47
  }));
48
48
  export const parseSelector = (input) => {
49
49
  const trimmed = String.trim(input);
@@ -22,7 +22,7 @@ export type Commands<Message, R = never> = ReadonlyArray<Command<Message, never,
22
22
  * Message.match<Update.Return<Model, Message>>(message, {
23
23
  * ClickedSave: () => ({ model, commands: [Save()] }),
24
24
  * SucceededSave: ({ note }) => ({
25
- * model: evo(model, { note: () => note }),
25
+ * model: modifyFields(model, { note: () => note }),
26
26
  * }),
27
27
  * })
28
28
  * ```
@@ -137,7 +137,7 @@ export type Refreshable<Model, Message, A, E, R = never> = Readonly<{
137
137
  * const refreshAllNotes = refresh({
138
138
  * read: model => Option.some(model.allNotes),
139
139
  * revalidate: AsyncData.revalidate,
140
- * write: (model, nextAllNotes) => evo(model, { allNotes: () => nextAllNotes }),
140
+ * write: (model, nextAllNotes) => modifyFields(model, { allNotes: () => nextAllNotes }),
141
141
  * load: LoadAllNotes(),
142
142
  * })
143
143
  * ``` */
@@ -293,7 +293,7 @@ export type FoldWithOutMessage<ParentModel, ParentMessage, Input, ParentOutMessa
293
293
  * const foldSearch = Update.foldChild({
294
294
  * update: Search.update,
295
295
  * read: (model: Model) => Option.some(model.search),
296
- * write: (model, nextSearch) => evo(model, { search: () => nextSearch }),
296
+ * write: (model, nextSearch) => modifyFields(model, { search: () => nextSearch }),
297
297
  * toParentMessage: message => GotSearchMessage({ message }),
298
298
  * })
299
299
  *
@@ -464,7 +464,7 @@ export declare const foldChildStep: {
464
464
  * ```ts
465
465
  * const foldSearchOutMessage = Search.OutMessage.match<Update.Step<Model, Message>>({
466
466
  * RequestedSearch: ({ query }) => model => ({
467
- * model: evo(model, { results: () => AsyncData.Loading() }),
467
+ * model: modifyFields(model, { results: () => AsyncData.Loading() }),
468
468
  * commands: [FetchResults({ query })],
469
469
  * }),
470
470
  * })
@@ -65,7 +65,7 @@ export const combine = Function.dual(2, (model, steps) => {
65
65
  * const refreshAllNotes = refresh({
66
66
  * read: model => Option.some(model.allNotes),
67
67
  * revalidate: AsyncData.revalidate,
68
- * write: (model, nextAllNotes) => evo(model, { allNotes: () => nextAllNotes }),
68
+ * write: (model, nextAllNotes) => modifyFields(model, { allNotes: () => nextAllNotes }),
69
69
  * load: LoadAllNotes(),
70
70
  * })
71
71
  * ``` */
@@ -86,7 +86,7 @@ export const refresh = (refreshable) => model => pipe(refreshable.read(model), O
86
86
  * const foldSearch = Update.foldChild({
87
87
  * update: Search.update,
88
88
  * read: (model: Model) => Option.some(model.search),
89
- * write: (model, nextSearch) => evo(model, { search: () => nextSearch }),
89
+ * write: (model, nextSearch) => modifyFields(model, { search: () => nextSearch }),
90
90
  * toParentMessage: message => GotSearchMessage({ message }),
91
91
  * })
92
92
  *
@@ -232,7 +232,7 @@ const appendOutMessageStep = (foldOutMessage, outMessage, context, modelWithChil
232
232
  * ```ts
233
233
  * const foldSearchOutMessage = Search.OutMessage.match<Update.Step<Model, Message>>({
234
234
  * RequestedSearch: ({ query }) => model => ({
235
- * model: evo(model, { results: () => AsyncData.Loading() }),
235
+ * model: modifyFields(model, { results: () => AsyncData.Loading() }),
236
236
  * commands: [FetchResults({ query })],
237
237
  * }),
238
238
  * })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foldkit",
3
- "version": "0.161.0",
3
+ "version": "0.162.0-canary.01d0205a4e2b",
4
4
  "description": "A TypeScript frontend framework, built on Effect and architected like Elm",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"file":"keyboardShortcuts.d.ts","sourceRoot":"","sources":["../../src/subscription/keyboardShortcuts.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAOR,MAAM,EAGP,MAAM,QAAQ,CAAA;AAEf,0FAA0F;AAC1F,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,CAAA;AAE9C,mEAAmE;AACnE,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAEhD,KAAK,WAAW,CAAC,OAAO,IAAI,QAAQ,CAAC;IACnC,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAA;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAC,CAAA;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,GACjE,CACI,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;CAClC,CAAC,GACF,QAAQ,CAAC;IACP,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACtD,YAAY,CAAC,EAAE,KAAK,CAAA;CACrB,CAAC,CACL,CAAA;AAEH,KAAK,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;AAEhC,qEAAqE;AACrE,MAAM,MAAM,uBAAuB,CAAC,OAAO,IAAI,QAAQ,CAAC;IACtD,QAAQ,EAAE,aAAa,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAA;IACzD,MAAM,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,CAAC,CAAA;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,eAAe,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAA;CACjC,CAAC,CAAA;AA8sBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,UAC/B,uBAAuB,CAAC,OAAO,CAAC,KACvC,MAAM,CAAC,MAAM,CAAC,OAAO,CACwC,CAAA"}