create-foldkit-app 0.32.0 → 0.32.1

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 (149) hide show
  1. package/dist/commands/create.js +9 -7
  2. package/dist/templates/base/FOLDKIT.md +22 -6
  3. package/dist/templates/examples/api-cache/src/data.ts +14 -14
  4. package/dist/templates/examples/api-cache/src/main.ts +42 -39
  5. package/dist/templates/examples/auth/src/command.ts +3 -3
  6. package/dist/templates/examples/auth/src/domain/session.ts +8 -6
  7. package/dist/templates/examples/auth/src/main.ts +11 -11
  8. package/dist/templates/examples/auth/src/message.ts +3 -3
  9. package/dist/templates/examples/auth/src/model.ts +2 -2
  10. package/dist/templates/examples/auth/src/page/loggedIn/index.ts +1 -1
  11. package/dist/templates/examples/auth/src/page/loggedIn/view.ts +3 -3
  12. package/dist/templates/examples/auth/src/page/loggedOut/index.ts +1 -1
  13. package/dist/templates/examples/auth/src/page/loggedOut/page/login.ts +9 -17
  14. package/dist/templates/examples/auth/src/page/loggedOut/update.ts +4 -6
  15. package/dist/templates/examples/auth/src/page/loggedOut/view.ts +3 -3
  16. package/dist/templates/examples/auth/src/route.ts +2 -2
  17. package/dist/templates/examples/auth/src/update.ts +37 -40
  18. package/dist/templates/examples/auth/src/view.ts +6 -6
  19. package/dist/templates/examples/canvas-art/src/main.ts +22 -30
  20. package/dist/templates/examples/charting/src/command.ts +3 -3
  21. package/dist/templates/examples/charting/src/domain.ts +53 -48
  22. package/dist/templates/examples/charting/src/echarts.ts +6 -6
  23. package/dist/templates/examples/charting/src/githubApi.ts +33 -34
  24. package/dist/templates/examples/charting/src/http.ts +7 -7
  25. package/dist/templates/examples/charting/src/message.ts +6 -6
  26. package/dist/templates/examples/charting/src/model.ts +6 -6
  27. package/dist/templates/examples/charting/src/npmApi.ts +19 -15
  28. package/dist/templates/examples/charting/src/subscription.ts +5 -5
  29. package/dist/templates/examples/charting/src/telemetry.test.ts +18 -12
  30. package/dist/templates/examples/charting/src/telemetry.ts +11 -18
  31. package/dist/templates/examples/charting/src/update.ts +17 -23
  32. package/dist/templates/examples/charting/src/view/chart.ts +2 -2
  33. package/dist/templates/examples/counter/src/main.ts +2 -2
  34. package/dist/templates/examples/counters/src/counter.ts +2 -2
  35. package/dist/templates/examples/counters/src/main.ts +8 -8
  36. package/dist/templates/examples/embedding/src/main.ts +10 -7
  37. package/dist/templates/examples/form/src/main.ts +18 -14
  38. package/dist/templates/examples/generative-art/src/command.ts +7 -2
  39. package/dist/templates/examples/generative-art/src/message.ts +14 -14
  40. package/dist/templates/examples/generative-art/src/model.ts +21 -21
  41. package/dist/templates/examples/generative-art/src/update.ts +15 -17
  42. package/dist/templates/examples/interrupting-commands/src/main.ts +30 -27
  43. package/dist/templates/examples/job-application/src/domain/proficiencyLevel.ts +2 -2
  44. package/dist/templates/examples/job-application/src/domain/pronounOption.ts +2 -2
  45. package/dist/templates/examples/job-application/src/domain/step.ts +11 -11
  46. package/dist/templates/examples/job-application/src/main.ts +5 -5
  47. package/dist/templates/examples/job-application/src/message.ts +2 -2
  48. package/dist/templates/examples/job-application/src/model.ts +5 -5
  49. package/dist/templates/examples/job-application/src/step/attachments.ts +32 -34
  50. package/dist/templates/examples/job-application/src/step/coverLetter.ts +4 -4
  51. package/dist/templates/examples/job-application/src/step/education/education.ts +11 -14
  52. package/dist/templates/examples/job-application/src/step/education/entry.ts +21 -22
  53. package/dist/templates/examples/job-application/src/step/personalInfo.ts +44 -54
  54. package/dist/templates/examples/job-application/src/step/skills/entry.ts +12 -14
  55. package/dist/templates/examples/job-application/src/step/skills/skills.ts +11 -14
  56. package/dist/templates/examples/job-application/src/step/workHistory/entry.ts +43 -45
  57. package/dist/templates/examples/job-application/src/step/workHistory/workHistory.ts +11 -14
  58. package/dist/templates/examples/job-application/src/update.ts +17 -17
  59. package/dist/templates/examples/job-application/src/view/attachments.ts +5 -5
  60. package/dist/templates/examples/job-application/src/view/datePicker.ts +3 -3
  61. package/dist/templates/examples/job-application/src/view/field.ts +5 -5
  62. package/dist/templates/examples/job-application/src/view/index.ts +28 -22
  63. package/dist/templates/examples/kanban/src/command.ts +4 -4
  64. package/dist/templates/examples/kanban/src/domain/card.ts +6 -6
  65. package/dist/templates/examples/kanban/src/domain/column.ts +9 -9
  66. package/dist/templates/examples/kanban/src/main.ts +4 -4
  67. package/dist/templates/examples/kanban/src/message.ts +6 -6
  68. package/dist/templates/examples/kanban/src/model.ts +11 -9
  69. package/dist/templates/examples/kanban/src/update.ts +5 -5
  70. package/dist/templates/examples/managed-resource-layer/src/main.ts +20 -20
  71. package/dist/templates/examples/map/src/locations.ts +7 -7
  72. package/dist/templates/examples/map/src/main.ts +83 -44
  73. package/dist/templates/examples/map/src/mount.test.ts +127 -0
  74. package/dist/templates/examples/pixel-art/src/command.ts +12 -5
  75. package/dist/templates/examples/pixel-art/src/main.ts +4 -4
  76. package/dist/templates/examples/pixel-art/src/message.ts +7 -7
  77. package/dist/templates/examples/pixel-art/src/model.ts +34 -29
  78. package/dist/templates/examples/pixel-art/src/subscription.ts +2 -2
  79. package/dist/templates/examples/pixel-art/src/update.ts +79 -86
  80. package/dist/templates/examples/query-sync/src/main.ts +106 -102
  81. package/dist/templates/examples/route-transitions/src/data.ts +6 -6
  82. package/dist/templates/examples/route-transitions/src/main.ts +23 -29
  83. package/dist/templates/examples/route-transitions/src/route.ts +3 -3
  84. package/dist/templates/examples/routing/src/fileTree.ts +10 -8
  85. package/dist/templates/examples/routing/src/main.ts +23 -21
  86. package/dist/templates/examples/routing/src/page/people.ts +14 -22
  87. package/dist/templates/examples/routing/src/route.ts +7 -7
  88. package/dist/templates/examples/shopping-cart/src/main.ts +30 -31
  89. package/dist/templates/examples/shopping-cart/src/page/products.ts +10 -10
  90. package/dist/templates/examples/shopping-cart/src/route.ts +6 -4
  91. package/dist/templates/examples/slow-warnings/src/main.ts +35 -43
  92. package/dist/templates/examples/snake/src/domain/snake.ts +2 -2
  93. package/dist/templates/examples/snake/src/main.ts +39 -47
  94. package/dist/templates/examples/ssg/src/main.ts +5 -5
  95. package/dist/templates/examples/ssg/src/route.ts +2 -2
  96. package/dist/templates/examples/ssr/src/cookie.ts +3 -3
  97. package/dist/templates/examples/ssr/src/main.ts +10 -10
  98. package/dist/templates/examples/state-machine/src/main.ts +55 -53
  99. package/dist/templates/examples/state-machine/src/view.ts +7 -7
  100. package/dist/templates/examples/stopwatch/src/main.ts +10 -10
  101. package/dist/templates/examples/todo/src/main.ts +41 -34
  102. package/dist/templates/examples/ui-showcase/src/main.ts +54 -42
  103. package/dist/templates/examples/ui-showcase/src/scene.test.ts +1 -1
  104. package/dist/templates/examples/ui-showcase/src/ui/init.ts +1 -2
  105. package/dist/templates/examples/ui-showcase/src/ui/message.ts +17 -18
  106. package/dist/templates/examples/ui-showcase/src/ui/model.ts +47 -44
  107. package/dist/templates/examples/ui-showcase/src/ui/subscriptions.ts +1 -1
  108. package/dist/templates/examples/ui-showcase/src/ui/toast.ts +4 -4
  109. package/dist/templates/examples/ui-showcase/src/ui/update.ts +287 -298
  110. package/dist/templates/examples/ui-showcase/src/ui/view/animation.ts +2 -2
  111. package/dist/templates/examples/ui-showcase/src/ui/view/button.ts +1 -1
  112. package/dist/templates/examples/ui-showcase/src/ui/view/calendar.ts +4 -4
  113. package/dist/templates/examples/ui-showcase/src/ui/view/checkbox.ts +1 -1
  114. package/dist/templates/examples/ui-showcase/src/ui/view/combobox.ts +1 -1
  115. package/dist/templates/examples/ui-showcase/src/ui/view/datePicker.ts +4 -4
  116. package/dist/templates/examples/ui-showcase/src/ui/view/dialog.ts +1 -1
  117. package/dist/templates/examples/ui-showcase/src/ui/view/disclosure.ts +1 -1
  118. package/dist/templates/examples/ui-showcase/src/ui/view/dragAndDrop.ts +1 -1
  119. package/dist/templates/examples/ui-showcase/src/ui/view/fieldset.ts +1 -1
  120. package/dist/templates/examples/ui-showcase/src/ui/view/fileDrop.ts +6 -6
  121. package/dist/templates/examples/ui-showcase/src/ui/view/hoverIntent.ts +9 -20
  122. package/dist/templates/examples/ui-showcase/src/ui/view/input.ts +1 -1
  123. package/dist/templates/examples/ui-showcase/src/ui/view/listbox.ts +1 -1
  124. package/dist/templates/examples/ui-showcase/src/ui/view/menu.ts +15 -15
  125. package/dist/templates/examples/ui-showcase/src/ui/view/popover.ts +1 -1
  126. package/dist/templates/examples/ui-showcase/src/ui/view/radioGroup.ts +1 -1
  127. package/dist/templates/examples/ui-showcase/src/ui/view/select.ts +1 -1
  128. package/dist/templates/examples/ui-showcase/src/ui/view/slider.ts +1 -1
  129. package/dist/templates/examples/ui-showcase/src/ui/view/switch.ts +1 -1
  130. package/dist/templates/examples/ui-showcase/src/ui/view/tabs.ts +7 -7
  131. package/dist/templates/examples/ui-showcase/src/ui/view/textarea.ts +1 -1
  132. package/dist/templates/examples/ui-showcase/src/ui/view/toast.ts +8 -8
  133. package/dist/templates/examples/ui-showcase/src/ui/view/tooltip.ts +1 -1
  134. package/dist/templates/examples/ui-showcase/src/ui/view/virtualList.ts +7 -7
  135. package/dist/templates/examples/view-transitions/src/artwork.ts +7 -7
  136. package/dist/templates/examples/view-transitions/src/main.ts +6 -6
  137. package/dist/templates/examples/view-transitions/src/route.ts +3 -3
  138. package/dist/templates/examples/weather/src/main.ts +42 -42
  139. package/dist/templates/examples/weather/src/story.test.ts +5 -5
  140. package/dist/templates/examples/web-components/src/main.ts +16 -16
  141. package/dist/templates/examples/websocket-chat/src/main.ts +30 -30
  142. package/dist/templates/release.json +13 -13
  143. package/dist/templates/rendering/ssg/src/main.ts +5 -5
  144. package/dist/templates/rendering/ssg/src/route.ts +2 -2
  145. package/dist/templates/rendering/ssr/server/main.ts +15 -15
  146. package/dist/templates/rendering/ssr/src/cookie.ts +3 -3
  147. package/dist/templates/rendering/ssr/src/main.ts +10 -10
  148. package/dist/utils/packages.js +17 -0
  149. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { Array, Match as M, Number, Option, pipe } from 'effect'
1
+ import { Array, Number, Option, pipe } from 'effect'
2
2
  import { Update } from 'foldkit'
3
3
  import { evo } from 'foldkit/struct'
4
4
 
@@ -20,9 +20,8 @@ import {
20
20
  Tooltip,
21
21
  VirtualList,
22
22
  } from '@foldkit/ui'
23
- import { Message as AnimationMessage } from '@foldkit/ui/animation'
24
23
 
25
- import { UiMessage } from './message'
24
+ import { Message as UiMessage } from './message'
26
25
  import type {
27
26
  City,
28
27
  DemoColumn,
@@ -83,51 +82,46 @@ const reorderColumns = (
83
82
 
84
83
  const DemoMenu = Menu.create<string>()
85
84
 
86
- const foldDialogOutMessage = M.type<Dialog.OutMessage>().pipe(
87
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
88
- M.tagsExhaustive({
89
- Opened: () => model => ({ model }),
90
- Closed: () => model => ({ model }),
91
- }),
92
- )
85
+ const foldDialogOutMessage = Dialog.OutMessage.match<
86
+ Update.Step<UiModel, UiMessage>
87
+ >({
88
+ Opened: () => model => ({ model }),
89
+ Closed: () => model => ({ model }),
90
+ })
93
91
 
94
- const foldMenuOutMessage = M.type<Menu.OutMessage<string>>().pipe(
95
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
96
- M.tagsExhaustive({
97
- Selected: () => model => ({ model }),
98
- }),
99
- )
92
+ const foldMenuOutMessage = Menu.OutMessage.match<
93
+ Update.Step<UiModel, UiMessage>,
94
+ Menu.OutMessage<string>
95
+ >({
96
+ Selected: () => model => ({ model }),
97
+ })
100
98
 
101
- const foldPopoverOutMessage = M.type<Popover.OutMessage>().pipe(
102
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
103
- M.tagsExhaustive({
104
- Opened: () => model => ({ model }),
105
- Closed: () => model => ({ model }),
106
- }),
107
- )
99
+ const foldPopoverOutMessage = Popover.OutMessage.match<
100
+ Update.Step<UiModel, UiMessage>
101
+ >({
102
+ Opened: () => model => ({ model }),
103
+ Closed: () => model => ({ model }),
104
+ })
108
105
 
109
- const foldToastOutMessage = M.type<typeof Toast.OutMessage.Type>().pipe(
110
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
111
- M.tagsExhaustive({
112
- DismissedToast: () => model => ({ model }),
113
- }),
114
- )
106
+ const foldToastOutMessage = Toast.OutMessage.match<
107
+ Update.Step<UiModel, UiMessage>
108
+ >({
109
+ DismissedToast: () => model => ({ model }),
110
+ })
115
111
 
116
- const foldTooltipOutMessage = M.type<Tooltip.OutMessage>().pipe(
117
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
118
- M.tagsExhaustive({
119
- Shown: () => model => ({ model }),
120
- Hidden: () => model => ({ model }),
121
- }),
122
- )
112
+ const foldTooltipOutMessage = Tooltip.OutMessage.match<
113
+ Update.Step<UiModel, UiMessage>
114
+ >({
115
+ Shown: () => model => ({ model }),
116
+ Hidden: () => model => ({ model }),
117
+ })
123
118
 
124
- const foldHoverIntentOutMessage = M.type<HoverIntent.OutMessage>().pipe(
125
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
126
- M.tagsExhaustive({
127
- Opened: () => model => ({ model }),
128
- Closed: () => model => ({ model }),
129
- }),
130
- )
119
+ const foldHoverIntentOutMessage = HoverIntent.OutMessage.match<
120
+ Update.Step<UiModel, UiMessage>
121
+ >({
122
+ Opened: () => model => ({ model }),
123
+ Closed: () => model => ({ model }),
124
+ })
131
125
 
132
126
  const foldMobileMenuDialog = Update.foldChild({
133
127
  update: Dialog.update,
@@ -147,19 +141,28 @@ const foldMobileMenuDialogOpen = Update.foldChildStep({
147
141
  foldOutMessage: foldDialogOutMessage,
148
142
  })
149
143
 
150
- const foldComboboxDemoOutMessage = M.type<Combobox.OutMessage<City>>().pipe(
151
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
152
- M.tagsExhaustive({
153
- Selected:
154
- ({ value }) =>
155
- model => ({
156
- model: evo(model, {
157
- maybeComboboxDemoSelectedCity: () => Option.some(value),
158
- }),
144
+ const foldMobileMenuDialogClose = Update.foldChildStep({
145
+ update: Dialog.close,
146
+ read: (model: UiModel) => Option.some(model.mobileMenuDialog),
147
+ write: (model, nextMobileMenuDialog) =>
148
+ evo(model, { mobileMenuDialog: () => nextMobileMenuDialog }),
149
+ toParentMessage: message => UiMessage.GotMobileMenuDialogMessage({ message }),
150
+ foldOutMessage: foldDialogOutMessage,
151
+ })
152
+
153
+ const foldComboboxDemoOutMessage = Combobox.OutMessage.match<
154
+ Update.Step<UiModel, UiMessage>,
155
+ Combobox.OutMessage<City>
156
+ >({
157
+ Selected:
158
+ ({ value }) =>
159
+ model => ({
160
+ model: evo(model, {
161
+ maybeComboboxDemoSelectedCity: () => Option.some(value),
159
162
  }),
160
- ClearedSelection: () => model => ({ model }),
161
- }),
162
- )
163
+ }),
164
+ ClearedSelection: () => model => ({ model }),
165
+ })
163
166
 
164
167
  const foldComboboxDemo = Update.foldChild({
165
168
  update: CityCombobox.update,
@@ -170,28 +173,27 @@ const foldComboboxDemo = Update.foldChild({
170
173
  foldOutMessage: foldComboboxDemoOutMessage,
171
174
  })
172
175
 
173
- const foldComboboxNullableDemoOutMessage = M.type<
176
+ const foldComboboxNullableDemoOutMessage = Combobox.OutMessage.match<
177
+ Update.Step<UiModel, UiMessage>,
174
178
  Combobox.OutMessage<City>
175
- >().pipe(
176
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
177
- M.tagsExhaustive({
178
- Selected:
179
- ({ value }) =>
180
- model => ({
181
- model: evo(model, {
182
- maybeComboboxNullableDemoSelectedCity: () =>
183
- Option.contains(model.maybeComboboxNullableDemoSelectedCity, value)
179
+ >({
180
+ Selected:
181
+ ({ value }) =>
182
+ model => ({
183
+ model: evo(model, {
184
+ maybeComboboxNullableDemoSelectedCity:
185
+ maybeComboboxNullableDemoSelectedCity =>
186
+ Option.contains(maybeComboboxNullableDemoSelectedCity, value)
184
187
  ? Option.none()
185
188
  : Option.some(value),
186
- }),
187
- }),
188
- ClearedSelection: () => model => ({
189
- model: evo(model, {
190
- maybeComboboxNullableDemoSelectedCity: () => Option.none(),
191
189
  }),
192
190
  }),
191
+ ClearedSelection: () => model => ({
192
+ model: evo(model, {
193
+ maybeComboboxNullableDemoSelectedCity: () => Option.none(),
194
+ }),
193
195
  }),
194
- )
196
+ })
195
197
 
196
198
  const foldComboboxNullableDemo = Update.foldChild({
197
199
  update: CityCombobox.update,
@@ -203,27 +205,25 @@ const foldComboboxNullableDemo = Update.foldChild({
203
205
  foldOutMessage: foldComboboxNullableDemoOutMessage,
204
206
  })
205
207
 
206
- const foldComboboxMultiDemoOutMessage = M.type<
208
+ const foldComboboxMultiDemoOutMessage = Combobox.OutMessage.match<
209
+ Update.Step<UiModel, UiMessage>,
207
210
  Combobox.OutMessage<City>
208
- >().pipe(
209
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
210
- M.tagsExhaustive({
211
- Selected:
212
- ({ value }) =>
213
- model => ({
214
- model: evo(model, {
215
- comboboxMultiDemoSelectedCities: () =>
216
- Array.contains(model.comboboxMultiDemoSelectedCities, value)
217
- ? Array.filter(
218
- model.comboboxMultiDemoSelectedCities,
219
- city => city !== value,
220
- )
221
- : Array.append(model.comboboxMultiDemoSelectedCities, value),
222
- }),
211
+ >({
212
+ Selected:
213
+ ({ value }) =>
214
+ model => ({
215
+ model: evo(model, {
216
+ comboboxMultiDemoSelectedCities: comboboxMultiDemoSelectedCities =>
217
+ Array.contains(comboboxMultiDemoSelectedCities, value)
218
+ ? Array.filter(
219
+ comboboxMultiDemoSelectedCities,
220
+ city => city !== value,
221
+ )
222
+ : Array.append(comboboxMultiDemoSelectedCities, value),
223
223
  }),
224
- ClearedSelection: () => model => ({ model }),
225
- }),
226
- )
224
+ }),
225
+ ClearedSelection: () => model => ({ model }),
226
+ })
227
227
 
228
228
  const foldComboboxMultiDemo = Update.foldChild({
229
229
  update: CityMultiCombobox.update,
@@ -235,21 +235,19 @@ const foldComboboxMultiDemo = Update.foldChild({
235
235
  foldOutMessage: foldComboboxMultiDemoOutMessage,
236
236
  })
237
237
 
238
- const foldComboboxPlacementLockDemoOutMessage = M.type<
238
+ const foldComboboxPlacementLockDemoOutMessage = Combobox.OutMessage.match<
239
+ Update.Step<UiModel, UiMessage>,
239
240
  Combobox.OutMessage<City>
240
- >().pipe(
241
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
242
- M.tagsExhaustive({
243
- Selected:
244
- ({ value }) =>
245
- model => ({
246
- model: evo(model, {
247
- maybeComboboxPlacementLockDemoSelectedCity: () => Option.some(value),
248
- }),
241
+ >({
242
+ Selected:
243
+ ({ value }) =>
244
+ model => ({
245
+ model: evo(model, {
246
+ maybeComboboxPlacementLockDemoSelectedCity: () => Option.some(value),
249
247
  }),
250
- ClearedSelection: () => model => ({ model }),
251
- }),
252
- )
248
+ }),
249
+ ClearedSelection: () => model => ({ model }),
250
+ })
253
251
 
254
252
  const foldComboboxPlacementLockDemo = Update.foldChild({
255
253
  update: CityCombobox.update,
@@ -263,21 +261,19 @@ const foldComboboxPlacementLockDemo = Update.foldChild({
263
261
  foldOutMessage: foldComboboxPlacementLockDemoOutMessage,
264
262
  })
265
263
 
266
- const foldComboboxSelectOnFocusDemoOutMessage = M.type<
264
+ const foldComboboxSelectOnFocusDemoOutMessage = Combobox.OutMessage.match<
265
+ Update.Step<UiModel, UiMessage>,
267
266
  Combobox.OutMessage<City>
268
- >().pipe(
269
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
270
- M.tagsExhaustive({
271
- Selected:
272
- ({ value }) =>
273
- model => ({
274
- model: evo(model, {
275
- maybeComboboxSelectOnFocusDemoSelectedCity: () => Option.some(value),
276
- }),
267
+ >({
268
+ Selected:
269
+ ({ value }) =>
270
+ model => ({
271
+ model: evo(model, {
272
+ maybeComboboxSelectOnFocusDemoSelectedCity: () => Option.some(value),
277
273
  }),
278
- ClearedSelection: () => model => ({ model }),
279
- }),
280
- )
274
+ }),
275
+ ClearedSelection: () => model => ({ model }),
276
+ })
281
277
 
282
278
  const foldComboboxSelectOnFocusDemo = Update.foldChild({
283
279
  update: CityCombobox.update,
@@ -349,21 +345,19 @@ const foldOverlayDialogDemoOpen = Update.foldChildStep({
349
345
  foldOutMessage: foldDialogOutMessage,
350
346
  })
351
347
 
352
- const foldOverlayComboboxDemoOutMessage = M.type<
348
+ const foldOverlayComboboxDemoOutMessage = Combobox.OutMessage.match<
349
+ Update.Step<UiModel, UiMessage>,
353
350
  Combobox.OutMessage<City>
354
- >().pipe(
355
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
356
- M.tagsExhaustive({
357
- Selected:
358
- ({ value }) =>
359
- model => ({
360
- model: evo(model, {
361
- maybeOverlayComboboxDemoSelectedCity: () => Option.some(value),
362
- }),
351
+ >({
352
+ Selected:
353
+ ({ value }) =>
354
+ model => ({
355
+ model: evo(model, {
356
+ maybeOverlayComboboxDemoSelectedCity: () => Option.some(value),
363
357
  }),
364
- ClearedSelection: () => model => ({ model }),
365
- }),
366
- )
358
+ }),
359
+ ClearedSelection: () => model => ({ model }),
360
+ })
367
361
 
368
362
  const foldOverlayComboboxDemo = Update.foldChild({
369
363
  update: CityCombobox.update,
@@ -415,19 +409,18 @@ const foldNestedDialogChildDemoOpen = Update.foldChildStep({
415
409
  foldOutMessage: foldDialogOutMessage,
416
410
  })
417
411
 
418
- const foldCalendarBasicDemoOutMessage = M.type<Calendar.OutMessage>().pipe(
419
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
420
- M.tagsExhaustive({
421
- SelectedDate:
422
- ({ date }) =>
423
- model => ({
424
- model: evo(model, {
425
- maybeCalendarBasicDemoSelectedDate: () => Option.some(date),
426
- }),
412
+ const foldCalendarBasicDemoOutMessage = Calendar.OutMessage.match<
413
+ Update.Step<UiModel, UiMessage>
414
+ >({
415
+ SelectedDate:
416
+ ({ date }) =>
417
+ model => ({
418
+ model: evo(model, {
419
+ maybeCalendarBasicDemoSelectedDate: () => Option.some(date),
427
420
  }),
428
- ChangedViewMonth: () => model => ({ model }),
429
- }),
430
- )
421
+ }),
422
+ ChangedViewMonth: () => model => ({ model }),
423
+ })
431
424
 
432
425
  const foldCalendarBasicDemo = Update.foldChild({
433
426
  update: Calendar.update,
@@ -439,24 +432,23 @@ const foldCalendarBasicDemo = Update.foldChild({
439
432
  foldOutMessage: foldCalendarBasicDemoOutMessage,
440
433
  })
441
434
 
442
- const foldDatePickerBasicDemoOutMessage = M.type<DatePicker.OutMessage>().pipe(
443
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
444
- M.tagsExhaustive({
445
- SelectedDate:
446
- ({ date }) =>
447
- model => ({
448
- model: evo(model, {
449
- maybeDatePickerBasicDemoSelectedDate: () => Option.some(date),
450
- }),
451
- }),
452
- ClearedDate: () => model => ({
435
+ const foldDatePickerBasicDemoOutMessage = DatePicker.OutMessage.match<
436
+ Update.Step<UiModel, UiMessage>
437
+ >({
438
+ SelectedDate:
439
+ ({ date }) =>
440
+ model => ({
453
441
  model: evo(model, {
454
- maybeDatePickerBasicDemoSelectedDate: () => Option.none(),
442
+ maybeDatePickerBasicDemoSelectedDate: () => Option.some(date),
455
443
  }),
456
444
  }),
457
- ChangedViewMonth: () => model => ({ model }),
445
+ ClearedDate: () => model => ({
446
+ model: evo(model, {
447
+ maybeDatePickerBasicDemoSelectedDate: () => Option.none(),
448
+ }),
458
449
  }),
459
- )
450
+ ChangedViewMonth: () => model => ({ model }),
451
+ })
460
452
 
461
453
  const foldDatePickerBasicDemo = Update.foldChild({
462
454
  update: DatePicker.update,
@@ -468,26 +460,25 @@ const foldDatePickerBasicDemo = Update.foldChild({
468
460
  foldOutMessage: foldDatePickerBasicDemoOutMessage,
469
461
  })
470
462
 
471
- const foldDragAndDropDemoOutMessage = M.type<DragAndDrop.OutMessage>().pipe(
472
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
473
- M.tagsExhaustive({
474
- Reordered:
475
- ({ itemId, fromContainerId, toContainerId, toIndex }) =>
476
- model => ({
477
- model: evo(model, {
478
- dragAndDropDemoColumns: () =>
479
- reorderColumns(
480
- model.dragAndDropDemoColumns,
481
- itemId,
482
- fromContainerId,
483
- toContainerId,
484
- toIndex,
485
- ),
486
- }),
463
+ const foldDragAndDropDemoOutMessage = DragAndDrop.OutMessage.match<
464
+ Update.Step<UiModel, UiMessage>
465
+ >({
466
+ Reordered:
467
+ ({ itemId, fromContainerId, toContainerId, toIndex }) =>
468
+ model => ({
469
+ model: evo(model, {
470
+ dragAndDropDemoColumns: dragAndDropDemoColumns =>
471
+ reorderColumns(
472
+ dragAndDropDemoColumns,
473
+ itemId,
474
+ fromContainerId,
475
+ toContainerId,
476
+ toIndex,
477
+ ),
487
478
  }),
488
- Cancelled: () => model => ({ model }),
489
- }),
490
- )
479
+ }),
480
+ Cancelled: () => model => ({ model }),
481
+ })
491
482
 
492
483
  const foldDragAndDropDemo = Update.foldChild({
493
484
  update: DragAndDrop.update,
@@ -498,22 +489,18 @@ const foldDragAndDropDemo = Update.foldChild({
498
489
  foldOutMessage: foldDragAndDropDemoOutMessage,
499
490
  })
500
491
 
501
- const foldFileDropBasicDemoOutMessage = M.type<FileDrop.OutMessage>().pipe(
502
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
503
- M.tagsExhaustive({
504
- ReceivedFiles:
505
- ({ files }) =>
506
- model => ({
507
- model: evo(model, {
508
- fileDropBasicDemoFiles: () => [
509
- ...model.fileDropBasicDemoFiles,
510
- ...files,
511
- ],
512
- }),
492
+ const foldFileDropBasicDemoOutMessage = FileDrop.OutMessage.match<
493
+ Update.Step<UiModel, UiMessage>
494
+ >({
495
+ ReceivedFiles:
496
+ ({ files }) =>
497
+ model => ({
498
+ model: evo(model, {
499
+ fileDropBasicDemoFiles: Array.appendAll(files),
513
500
  }),
514
- RejectedNonFiles: () => model => ({ model }),
515
- }),
516
- )
501
+ }),
502
+ RejectedNonFiles: () => model => ({ model }),
503
+ })
517
504
 
518
505
  const foldFileDropBasicDemo = Update.foldChild({
519
506
  update: FileDrop.update,
@@ -525,20 +512,18 @@ const foldFileDropBasicDemo = Update.foldChild({
525
512
  foldOutMessage: foldFileDropBasicDemoOutMessage,
526
513
  })
527
514
 
528
- const foldListboxDemoOutMessage = M.type<
515
+ const foldListboxDemoOutMessage = Listbox.OutMessage.match<
516
+ Update.Step<UiModel, UiMessage>,
529
517
  Listbox.OutMessage<ListboxItem>
530
- >().pipe(
531
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
532
- M.tagsExhaustive({
533
- Selected:
534
- ({ value }) =>
535
- model => ({
536
- model: evo(model, {
537
- maybeListboxDemoSelectedItem: () => Option.some(value),
538
- }),
518
+ >({
519
+ Selected:
520
+ ({ value }) =>
521
+ model => ({
522
+ model: evo(model, {
523
+ maybeListboxDemoSelectedItem: () => Option.some(value),
539
524
  }),
540
- }),
541
- )
525
+ }),
526
+ })
542
527
 
543
528
  const foldListboxDemo = Update.foldChild({
544
529
  update: ItemListbox.update,
@@ -549,28 +534,24 @@ const foldListboxDemo = Update.foldChild({
549
534
  foldOutMessage: foldListboxDemoOutMessage,
550
535
  })
551
536
 
552
- const foldListboxMultiDemoOutMessage: (
553
- outMessage: Listbox.OutMessage<ListboxItem>,
554
- ) => Update.Step<UiModel, UiMessage> = M.type<
537
+ const foldListboxMultiDemoOutMessage = Listbox.OutMessage.match<
538
+ Update.Step<UiModel, UiMessage>,
555
539
  Listbox.OutMessage<ListboxItem>
556
- >().pipe(
557
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
558
- M.tagsExhaustive({
559
- Selected:
560
- ({ value }) =>
561
- model => ({
562
- model: evo(model, {
563
- listboxMultiDemoSelectedItems: () =>
564
- Array.contains(model.listboxMultiDemoSelectedItems, value)
565
- ? Array.filter(
566
- model.listboxMultiDemoSelectedItems,
567
- item => item !== value,
568
- )
569
- : Array.append(model.listboxMultiDemoSelectedItems, value),
570
- }),
540
+ >({
541
+ Selected:
542
+ ({ value }) =>
543
+ model => ({
544
+ model: evo(model, {
545
+ listboxMultiDemoSelectedItems: listboxMultiDemoSelectedItems =>
546
+ Array.contains(listboxMultiDemoSelectedItems, value)
547
+ ? Array.filter(
548
+ listboxMultiDemoSelectedItems,
549
+ item => item !== value,
550
+ )
551
+ : Array.append(listboxMultiDemoSelectedItems, value),
571
552
  }),
572
- }),
573
- )
553
+ }),
554
+ })
574
555
 
575
556
  const foldListboxMultiDemo = Update.foldChild({
576
557
  update: ItemMultiListbox.update,
@@ -581,18 +562,17 @@ const foldListboxMultiDemo = Update.foldChild({
581
562
  foldOutMessage: foldListboxMultiDemoOutMessage,
582
563
  })
583
564
 
584
- const foldListboxGroupedDemoOutMessage = M.type<Listbox.OutMessage>().pipe(
585
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
586
- M.tagsExhaustive({
587
- Selected:
588
- ({ value }) =>
589
- model => ({
590
- model: evo(model, {
591
- maybeListboxGroupedDemoSelectedItem: () => Option.some(value),
592
- }),
565
+ const foldListboxGroupedDemoOutMessage = Listbox.OutMessage.match<
566
+ Update.Step<UiModel, UiMessage>
567
+ >({
568
+ Selected:
569
+ ({ value }) =>
570
+ model => ({
571
+ model: evo(model, {
572
+ maybeListboxGroupedDemoSelectedItem: () => Option.some(value),
593
573
  }),
594
- }),
595
- )
574
+ }),
575
+ })
596
576
 
597
577
  const foldListboxGroupedDemo = Update.foldChild({
598
578
  update: CharacterListbox.update,
@@ -661,20 +641,18 @@ const foldPopoverNestedChildDemo = Update.foldChild({
661
641
  foldOutMessage: foldPopoverOutMessage,
662
642
  })
663
643
 
664
- const foldVerticalRadioGroupDemoOutMessage = M.type<
644
+ const foldVerticalRadioGroupDemoOutMessage = RadioGroup.OutMessage.match<
645
+ Update.Step<UiModel, UiMessage>,
665
646
  RadioGroup.OutMessage<Plan>
666
- >().pipe(
667
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
668
- M.tagsExhaustive({
669
- Selected:
670
- ({ value }) =>
671
- model => ({
672
- model: evo(model, {
673
- verticalRadioGroupDemoValue: () => Option.some(value),
674
- }),
647
+ >({
648
+ Selected:
649
+ ({ value }) =>
650
+ model => ({
651
+ model: evo(model, {
652
+ verticalRadioGroupDemoValue: () => Option.some(value),
675
653
  }),
676
- }),
677
- )
654
+ }),
655
+ })
678
656
 
679
657
  const foldVerticalRadioGroupDemo = Update.foldChild({
680
658
  update: PlanRadioGroup.update,
@@ -686,20 +664,18 @@ const foldVerticalRadioGroupDemo = Update.foldChild({
686
664
  foldOutMessage: foldVerticalRadioGroupDemoOutMessage,
687
665
  })
688
666
 
689
- const foldHorizontalRadioGroupDemoOutMessage = M.type<
667
+ const foldHorizontalRadioGroupDemoOutMessage = RadioGroup.OutMessage.match<
668
+ Update.Step<UiModel, UiMessage>,
690
669
  RadioGroup.OutMessage<Plan>
691
- >().pipe(
692
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
693
- M.tagsExhaustive({
694
- Selected:
695
- ({ value }) =>
696
- model => ({
697
- model: evo(model, {
698
- horizontalRadioGroupDemoValue: () => Option.some(value),
699
- }),
670
+ >({
671
+ Selected:
672
+ ({ value }) =>
673
+ model => ({
674
+ model: evo(model, {
675
+ horizontalRadioGroupDemoValue: () => Option.some(value),
700
676
  }),
701
- }),
702
- )
677
+ }),
678
+ })
703
679
 
704
680
  const foldHorizontalRadioGroupDemo = Update.foldChild({
705
681
  update: PlanRadioGroup.update,
@@ -713,14 +689,13 @@ const foldHorizontalRadioGroupDemo = Update.foldChild({
713
689
  foldOutMessage: foldHorizontalRadioGroupDemoOutMessage,
714
690
  })
715
691
 
716
- const foldSliderRatingDemoOutMessage = M.type<Slider.OutMessage>().pipe(
717
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
718
- M.tagsExhaustive({
719
- ChangedValue:
720
- ({ value }) =>
721
- model => ({ model: evo(model, { sliderRatingValue: () => value }) }),
722
- }),
723
- )
692
+ const foldSliderRatingDemoOutMessage = Slider.OutMessage.match<
693
+ Update.Step<UiModel, UiMessage>
694
+ >({
695
+ ChangedValue:
696
+ ({ value }) =>
697
+ model => ({ model: evo(model, { sliderRatingValue: () => value }) }),
698
+ })
724
699
 
725
700
  const foldSliderRatingDemo = Update.foldChild({
726
701
  update: Slider.update,
@@ -731,14 +706,13 @@ const foldSliderRatingDemo = Update.foldChild({
731
706
  foldOutMessage: foldSliderRatingDemoOutMessage,
732
707
  })
733
708
 
734
- const foldSliderVolumeDemoOutMessage = M.type<Slider.OutMessage>().pipe(
735
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
736
- M.tagsExhaustive({
737
- ChangedValue:
738
- ({ value }) =>
739
- model => ({ model: evo(model, { sliderVolumeValue: () => value }) }),
740
- }),
741
- )
709
+ const foldSliderVolumeDemoOutMessage = Slider.OutMessage.match<
710
+ Update.Step<UiModel, UiMessage>
711
+ >({
712
+ ChangedValue:
713
+ ({ value }) =>
714
+ model => ({ model: evo(model, { sliderVolumeValue: () => value }) }),
715
+ })
742
716
 
743
717
  const foldSliderVolumeDemo = Update.foldChild({
744
718
  update: Slider.update,
@@ -749,16 +723,14 @@ const foldSliderVolumeDemo = Update.foldChild({
749
723
  foldOutMessage: foldSliderVolumeDemoOutMessage,
750
724
  })
751
725
 
752
- const foldHorizontalTabsDemoOutMessage = M.type<
726
+ const foldHorizontalTabsDemoOutMessage = Tabs.OutMessage.match<
727
+ Update.Step<UiModel, UiMessage>,
753
728
  Tabs.OutMessage<DemoTab>
754
- >().pipe(
755
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
756
- M.tagsExhaustive({
757
- Selected:
758
- ({ value }) =>
759
- model => ({ model: evo(model, { horizontalTabsDemoTab: () => value }) }),
760
- }),
761
- )
729
+ >({
730
+ Selected:
731
+ ({ value }) =>
732
+ model => ({ model: evo(model, { horizontalTabsDemoTab: () => value }) }),
733
+ })
762
734
 
763
735
  const foldHorizontalTabsDemo = Update.foldChild({
764
736
  update: DemoTabs.update,
@@ -770,14 +742,14 @@ const foldHorizontalTabsDemo = Update.foldChild({
770
742
  foldOutMessage: foldHorizontalTabsDemoOutMessage,
771
743
  })
772
744
 
773
- const foldVerticalTabsDemoOutMessage = M.type<Tabs.OutMessage<DemoTab>>().pipe(
774
- M.withReturnType<Update.Step<UiModel, UiMessage>>(),
775
- M.tagsExhaustive({
776
- Selected:
777
- ({ value }) =>
778
- model => ({ model: evo(model, { verticalTabsDemoTab: () => value }) }),
779
- }),
780
- )
745
+ const foldVerticalTabsDemoOutMessage = Tabs.OutMessage.match<
746
+ Update.Step<UiModel, UiMessage>,
747
+ Tabs.OutMessage<DemoTab>
748
+ >({
749
+ Selected:
750
+ ({ value }) =>
751
+ model => ({ model: evo(model, { verticalTabsDemoTab: () => value }) }),
752
+ })
781
753
 
782
754
  const foldVerticalTabsDemo = Update.foldChild({
783
755
  update: DemoTabs.update,
@@ -866,6 +838,22 @@ const foldAnimationDemo = Update.foldChild({
866
838
  foldOutMessage: foldAnimationDemoOutMessage,
867
839
  })
868
840
 
841
+ const foldAnimationDemoShow = Update.foldChildStep({
842
+ update: Animation.show,
843
+ read: (model: UiModel) => Option.some(model.animationDemo),
844
+ write: (model, nextAnimationDemo) =>
845
+ evo(model, { animationDemo: () => nextAnimationDemo }),
846
+ toParentMessage: message => UiMessage.GotAnimationDemoMessage({ message }),
847
+ })
848
+
849
+ const foldAnimationDemoHide = Update.foldChildStep({
850
+ update: Animation.hide,
851
+ read: (model: UiModel) => Option.some(model.animationDemo),
852
+ write: (model, nextAnimationDemo) =>
853
+ evo(model, { animationDemo: () => nextAnimationDemo }),
854
+ toParentMessage: message => UiMessage.GotAnimationDemoMessage({ message }),
855
+ })
856
+
869
857
  const foldVirtualListDemo = Update.foldChild({
870
858
  update: VirtualList.update,
871
859
  read: (model: UiModel) => Option.some(model.virtualListDemo),
@@ -908,8 +896,6 @@ const foldVirtualListVariableDemoScrollToIndex = Update.foldChild({
908
896
 
909
897
  export const uiUpdate = (model: UiModel, message: UiMessage) =>
910
898
  UiMessage.match<Update.Return<UiModel, UiMessage>>(message, {
911
- ClickedOpenMobileMenu: () => foldMobileMenuDialogOpen(model),
912
-
913
899
  GotMobileMenuDialogMessage: ({ message }) =>
914
900
  foldMobileMenuDialog(model, message),
915
901
 
@@ -1156,13 +1142,10 @@ export const uiUpdate = (model: UiModel, message: UiMessage) =>
1156
1142
 
1157
1143
  GotAnimationDemoMessage: ({ message }) => foldAnimationDemo(model, message),
1158
1144
 
1159
- ToggledAnimationDemo: () => {
1160
- const nextShowing = !model.isAnimationDemoShowing
1161
- return foldAnimationDemo(
1162
- evo(model, { isAnimationDemoShowing: () => nextShowing }),
1163
- nextShowing ? AnimationMessage.Showed() : AnimationMessage.Hid(),
1164
- )
1165
- },
1145
+ ToggledAnimationDemo: () =>
1146
+ model.animationDemo.isShowing
1147
+ ? foldAnimationDemoHide(model)
1148
+ : foldAnimationDemoShow(model),
1166
1149
 
1167
1150
  GotVirtualListDemoMessage: ({ message }) =>
1168
1151
  foldVirtualListDemo(model, message),
@@ -1182,3 +1165,9 @@ export const uiUpdate = (model: UiModel, message: UiMessage) =>
1182
1165
  Math.floor(VIRTUAL_LIST_ROW_COUNT / 2),
1183
1166
  ),
1184
1167
  })
1168
+
1169
+ export const openMobileMenu = (model: UiModel) =>
1170
+ foldMobileMenuDialogOpen(model)
1171
+
1172
+ export const closeMobileMenu = (model: UiModel) =>
1173
+ foldMobileMenuDialogClose(model)