create-foldkit-app 0.27.3 → 0.28.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 (460) hide show
  1. package/dist/index.js +1 -5
  2. package/{templates → dist/templates}/base/AGENTS.md +17 -19
  3. package/dist/templates/examples/api-cache/package.json +29 -0
  4. package/dist/templates/examples/api-cache/src/data.test.ts +28 -0
  5. package/dist/templates/examples/api-cache/src/data.ts +126 -0
  6. package/dist/templates/examples/api-cache/src/entry.ts +17 -0
  7. package/dist/templates/examples/api-cache/src/main.fixtures.ts +70 -0
  8. package/dist/templates/examples/api-cache/src/main.ts +744 -0
  9. package/dist/templates/examples/api-cache/src/scene.test.ts +120 -0
  10. package/dist/templates/examples/api-cache/src/story.test.ts +288 -0
  11. package/dist/templates/examples/api-cache/src/styles.css +1 -0
  12. package/dist/templates/examples/api-cache/src/vitest-setup.ts +3 -0
  13. package/dist/templates/examples/auth/package.json +30 -0
  14. package/dist/templates/examples/auth/src/command.ts +49 -0
  15. package/dist/templates/examples/auth/src/constant.ts +1 -0
  16. package/dist/templates/examples/auth/src/domain/session.ts +9 -0
  17. package/dist/templates/examples/auth/src/entry.ts +25 -0
  18. package/dist/templates/examples/auth/src/main.ts +75 -0
  19. package/dist/templates/examples/auth/src/message.ts +22 -0
  20. package/dist/templates/examples/auth/src/model.ts +9 -0
  21. package/dist/templates/examples/auth/src/notFoundView.ts +25 -0
  22. package/dist/templates/examples/auth/src/page/index.ts +2 -0
  23. package/dist/templates/examples/auth/src/page/loggedIn/index.ts +4 -0
  24. package/dist/templates/examples/auth/src/page/loggedIn/message.ts +17 -0
  25. package/dist/templates/examples/auth/src/page/loggedIn/model.ts +21 -0
  26. package/dist/templates/examples/auth/src/page/loggedIn/page/dashboard.ts +40 -0
  27. package/dist/templates/examples/auth/src/page/loggedIn/page/settings.ts +71 -0
  28. package/dist/templates/examples/auth/src/page/loggedIn/update.ts +16 -0
  29. package/dist/templates/examples/auth/src/page/loggedIn/view.ts +87 -0
  30. package/dist/templates/examples/auth/src/page/loggedOut/index.ts +4 -0
  31. package/dist/templates/examples/auth/src/page/loggedOut/message.ts +20 -0
  32. package/dist/templates/examples/auth/src/page/loggedOut/model.ts +21 -0
  33. package/dist/templates/examples/auth/src/page/loggedOut/page/home.ts +68 -0
  34. package/dist/templates/examples/auth/src/page/loggedOut/page/login.scene.test.ts +116 -0
  35. package/dist/templates/examples/auth/src/page/loggedOut/page/login.story.test.ts +112 -0
  36. package/dist/templates/examples/auth/src/page/loggedOut/page/login.ts +346 -0
  37. package/dist/templates/examples/auth/src/page/loggedOut/update.ts +32 -0
  38. package/dist/templates/examples/auth/src/page/loggedOut/view.ts +31 -0
  39. package/dist/templates/examples/auth/src/route.ts +56 -0
  40. package/dist/templates/examples/auth/src/scene.test.ts +61 -0
  41. package/dist/templates/examples/auth/src/styles.css +1 -0
  42. package/dist/templates/examples/auth/src/update.ts +179 -0
  43. package/dist/templates/examples/auth/src/view.ts +40 -0
  44. package/dist/templates/examples/auth/src/vitest-setup.ts +3 -0
  45. package/dist/templates/examples/canvas-art/package.json +29 -0
  46. package/dist/templates/examples/canvas-art/src/entry.ts +17 -0
  47. package/dist/templates/examples/canvas-art/src/main.ts +274 -0
  48. package/dist/templates/examples/canvas-art/src/scene.test.ts +70 -0
  49. package/dist/templates/examples/canvas-art/src/story.test.ts +155 -0
  50. package/dist/templates/examples/canvas-art/src/styles.css +1 -0
  51. package/dist/templates/examples/canvas-art/src/vitest-setup.ts +3 -0
  52. package/dist/templates/examples/charting/package.json +31 -0
  53. package/dist/templates/examples/charting/src/chartHost.ts +20 -0
  54. package/dist/templates/examples/charting/src/command.ts +62 -0
  55. package/dist/templates/examples/charting/src/domain.ts +175 -0
  56. package/dist/templates/examples/charting/src/echarts.ts +408 -0
  57. package/dist/templates/examples/charting/src/entry.ts +25 -0
  58. package/dist/templates/examples/charting/src/githubApi.ts +271 -0
  59. package/dist/templates/examples/charting/src/http.ts +50 -0
  60. package/dist/templates/examples/charting/src/init.test.ts +14 -0
  61. package/dist/templates/examples/charting/src/init.ts +29 -0
  62. package/dist/templates/examples/charting/src/main.fixtures.ts +162 -0
  63. package/dist/templates/examples/charting/src/message.ts +23 -0
  64. package/dist/templates/examples/charting/src/model.ts +22 -0
  65. package/dist/templates/examples/charting/src/npmApi.ts +75 -0
  66. package/dist/templates/examples/charting/src/radioGroups.ts +11 -0
  67. package/dist/templates/examples/charting/src/scene.test.ts +103 -0
  68. package/dist/templates/examples/charting/src/story.test.ts +145 -0
  69. package/dist/templates/examples/charting/src/styles.css +1 -0
  70. package/dist/templates/examples/charting/src/subscription.ts +70 -0
  71. package/dist/templates/examples/charting/src/telemetry.test.ts +64 -0
  72. package/dist/templates/examples/charting/src/telemetry.ts +432 -0
  73. package/dist/templates/examples/charting/src/update.ts +217 -0
  74. package/dist/templates/examples/charting/src/view/chart.ts +129 -0
  75. package/dist/templates/examples/charting/src/view/format.ts +23 -0
  76. package/dist/templates/examples/charting/src/view/index.ts +1 -0
  77. package/dist/templates/examples/charting/src/view/layout.ts +175 -0
  78. package/dist/templates/examples/charting/src/view/sidebar.ts +309 -0
  79. package/dist/templates/examples/charting/src/view/view.ts +23 -0
  80. package/dist/templates/examples/charting/src/vitest-setup.ts +3 -0
  81. package/dist/templates/examples/charting/src/weeks.ts +105 -0
  82. package/dist/templates/examples/counter/package.json +29 -0
  83. package/dist/templates/examples/counter/src/entry.ts +16 -0
  84. package/dist/templates/examples/counter/src/main.ts +95 -0
  85. package/dist/templates/examples/counter/src/scene.test.ts +57 -0
  86. package/dist/templates/examples/counter/src/story.test.ts +71 -0
  87. package/dist/templates/examples/counter/src/styles.css +1 -0
  88. package/dist/templates/examples/counter/src/vitest-setup.ts +3 -0
  89. package/dist/templates/examples/counters/package.json +29 -0
  90. package/dist/templates/examples/counters/src/counter.ts +70 -0
  91. package/dist/templates/examples/counters/src/entry.ts +16 -0
  92. package/dist/templates/examples/counters/src/main.ts +171 -0
  93. package/dist/templates/examples/counters/src/scene.test.ts +90 -0
  94. package/dist/templates/examples/counters/src/story.test.ts +127 -0
  95. package/dist/templates/examples/counters/src/styles.css +1 -0
  96. package/dist/templates/examples/counters/src/vitest-setup.ts +3 -0
  97. package/dist/templates/examples/crash-view/package.json +29 -0
  98. package/dist/templates/examples/crash-view/src/entry.ts +28 -0
  99. package/dist/templates/examples/crash-view/src/main.ts +104 -0
  100. package/dist/templates/examples/crash-view/src/scene.test.ts +14 -0
  101. package/dist/templates/examples/crash-view/src/story.test.ts +11 -0
  102. package/dist/templates/examples/crash-view/src/styles.css +1 -0
  103. package/dist/templates/examples/crash-view/src/vitest-setup.ts +3 -0
  104. package/dist/templates/examples/embedding/package.json +29 -0
  105. package/dist/templates/examples/embedding/src/entry.ts +3 -0
  106. package/dist/templates/examples/embedding/src/host.ts +108 -0
  107. package/dist/templates/examples/embedding/src/main.ts +144 -0
  108. package/dist/templates/examples/embedding/src/scene.test.ts +28 -0
  109. package/dist/templates/examples/embedding/src/story.test.ts +64 -0
  110. package/dist/templates/examples/embedding/src/styles.css +1 -0
  111. package/dist/templates/examples/embedding/src/vitest-setup.ts +3 -0
  112. package/dist/templates/examples/form/package.json +30 -0
  113. package/dist/templates/examples/form/src/entry.ts +16 -0
  114. package/dist/templates/examples/form/src/main.ts +493 -0
  115. package/dist/templates/examples/form/src/scene.test.ts +165 -0
  116. package/dist/templates/examples/form/src/story.test.ts +190 -0
  117. package/dist/templates/examples/form/src/styles.css +1 -0
  118. package/dist/templates/examples/form/src/vitest-setup.ts +3 -0
  119. package/dist/templates/examples/generative-art/package.json +29 -0
  120. package/dist/templates/examples/generative-art/src/command.ts +109 -0
  121. package/dist/templates/examples/generative-art/src/constant.ts +68 -0
  122. package/dist/templates/examples/generative-art/src/entry.ts +22 -0
  123. package/dist/templates/examples/generative-art/src/main.ts +59 -0
  124. package/dist/templates/examples/generative-art/src/message.ts +35 -0
  125. package/dist/templates/examples/generative-art/src/model.ts +33 -0
  126. package/dist/templates/examples/generative-art/src/noise.ts +93 -0
  127. package/dist/templates/examples/generative-art/src/scene.test.ts +103 -0
  128. package/dist/templates/examples/generative-art/src/story.test.ts +203 -0
  129. package/dist/templates/examples/generative-art/src/styles.css +1 -0
  130. package/dist/templates/examples/generative-art/src/subscription.ts +35 -0
  131. package/dist/templates/examples/generative-art/src/update.ts +319 -0
  132. package/dist/templates/examples/generative-art/src/view.ts +451 -0
  133. package/dist/templates/examples/generative-art/src/vitest-setup.ts +3 -0
  134. package/dist/templates/examples/interrupting-commands/package.json +29 -0
  135. package/dist/templates/examples/interrupting-commands/src/entry.ts +16 -0
  136. package/dist/templates/examples/interrupting-commands/src/main.ts +354 -0
  137. package/dist/templates/examples/interrupting-commands/src/scene.test.ts +89 -0
  138. package/dist/templates/examples/interrupting-commands/src/story.test.ts +224 -0
  139. package/dist/templates/examples/interrupting-commands/src/styles.css +1 -0
  140. package/dist/templates/examples/interrupting-commands/src/vitest-setup.ts +3 -0
  141. package/dist/templates/examples/job-application/package.json +30 -0
  142. package/dist/templates/examples/job-application/src/command.ts +23 -0
  143. package/dist/templates/examples/job-application/src/domain/index.ts +3 -0
  144. package/dist/templates/examples/job-application/src/domain/proficiencyLevel.ts +11 -0
  145. package/dist/templates/examples/job-application/src/domain/pronounOption.ts +13 -0
  146. package/dist/templates/examples/job-application/src/domain/step.ts +28 -0
  147. package/dist/templates/examples/job-application/src/entry.ts +17 -0
  148. package/dist/templates/examples/job-application/src/main.ts +69 -0
  149. package/dist/templates/examples/job-application/src/message.ts +44 -0
  150. package/dist/templates/examples/job-application/src/model.ts +47 -0
  151. package/dist/templates/examples/job-application/src/scene.test.ts +269 -0
  152. package/dist/templates/examples/job-application/src/step/attachments.ts +111 -0
  153. package/dist/templates/examples/job-application/src/step/coverLetter.ts +34 -0
  154. package/dist/templates/examples/job-application/src/step/education/education.ts +121 -0
  155. package/dist/templates/examples/job-application/src/step/education/entry.ts +168 -0
  156. package/dist/templates/examples/job-application/src/step/education/index.ts +2 -0
  157. package/dist/templates/examples/job-application/src/step/index.ts +6 -0
  158. package/dist/templates/examples/job-application/src/step/personalInfo.ts +305 -0
  159. package/dist/templates/examples/job-application/src/step/skills/entry.ts +126 -0
  160. package/dist/templates/examples/job-application/src/step/skills/index.ts +2 -0
  161. package/dist/templates/examples/job-application/src/step/skills/skills.ts +118 -0
  162. package/dist/templates/examples/job-application/src/step/validation.ts +6 -0
  163. package/dist/templates/examples/job-application/src/step/workHistory/entry.ts +206 -0
  164. package/dist/templates/examples/job-application/src/step/workHistory/index.ts +2 -0
  165. package/dist/templates/examples/job-application/src/step/workHistory/workHistory.ts +121 -0
  166. package/dist/templates/examples/job-application/src/story.test.ts +775 -0
  167. package/dist/templates/examples/job-application/src/styles.css +1 -0
  168. package/dist/templates/examples/job-application/src/update.ts +183 -0
  169. package/dist/templates/examples/job-application/src/view/attachments.ts +215 -0
  170. package/dist/templates/examples/job-application/src/view/coverLetter.ts +73 -0
  171. package/dist/templates/examples/job-application/src/view/datePicker.ts +207 -0
  172. package/dist/templates/examples/job-application/src/view/education.ts +63 -0
  173. package/dist/templates/examples/job-application/src/view/educationEntry.ts +165 -0
  174. package/dist/templates/examples/job-application/src/view/field.ts +183 -0
  175. package/dist/templates/examples/job-application/src/view/format.ts +50 -0
  176. package/dist/templates/examples/job-application/src/view/icon.ts +21 -0
  177. package/dist/templates/examples/job-application/src/view/index.ts +352 -0
  178. package/dist/templates/examples/job-application/src/view/personalInfo.ts +224 -0
  179. package/dist/templates/examples/job-application/src/view/preview.ts +265 -0
  180. package/dist/templates/examples/job-application/src/view/review.ts +388 -0
  181. package/dist/templates/examples/job-application/src/view/skillEntry.ts +102 -0
  182. package/dist/templates/examples/job-application/src/view/skills.ts +49 -0
  183. package/dist/templates/examples/job-application/src/view/stepNav.ts +181 -0
  184. package/dist/templates/examples/job-application/src/view/workEntry.ts +159 -0
  185. package/dist/templates/examples/job-application/src/view/workHistory.ts +55 -0
  186. package/dist/templates/examples/job-application/src/vitest-setup.ts +3 -0
  187. package/dist/templates/examples/kanban/package.json +31 -0
  188. package/dist/templates/examples/kanban/src/command.ts +46 -0
  189. package/dist/templates/examples/kanban/src/constant.ts +149 -0
  190. package/dist/templates/examples/kanban/src/domain/card.ts +10 -0
  191. package/dist/templates/examples/kanban/src/domain/column.ts +115 -0
  192. package/dist/templates/examples/kanban/src/domain/index.ts +2 -0
  193. package/dist/templates/examples/kanban/src/entry.ts +27 -0
  194. package/dist/templates/examples/kanban/src/main.ts +56 -0
  195. package/dist/templates/examples/kanban/src/message.ts +21 -0
  196. package/dist/templates/examples/kanban/src/model.ts +21 -0
  197. package/dist/templates/examples/kanban/src/scene.test.ts +161 -0
  198. package/dist/templates/examples/kanban/src/story.test.ts +461 -0
  199. package/dist/templates/examples/kanban/src/styles.css +1 -0
  200. package/dist/templates/examples/kanban/src/subscription.ts +16 -0
  201. package/dist/templates/examples/kanban/src/update.ts +205 -0
  202. package/dist/templates/examples/kanban/src/view/card.ts +79 -0
  203. package/dist/templates/examples/kanban/src/view/column.ts +283 -0
  204. package/dist/templates/examples/kanban/src/view/index.ts +71 -0
  205. package/dist/templates/examples/kanban/src/vitest-setup.ts +3 -0
  206. package/dist/templates/examples/managed-resource-layer/package.json +29 -0
  207. package/dist/templates/examples/managed-resource-layer/src/entry.ts +17 -0
  208. package/dist/templates/examples/managed-resource-layer/src/main.ts +309 -0
  209. package/dist/templates/examples/managed-resource-layer/src/scene.test.ts +117 -0
  210. package/dist/templates/examples/managed-resource-layer/src/story.test.ts +118 -0
  211. package/dist/templates/examples/managed-resource-layer/src/styles.css +1 -0
  212. package/dist/templates/examples/managed-resource-layer/src/vitest-setup.ts +3 -0
  213. package/dist/templates/examples/map/package.json +31 -0
  214. package/dist/templates/examples/map/src/entry.ts +17 -0
  215. package/dist/templates/examples/map/src/locations.ts +69 -0
  216. package/dist/templates/examples/map/src/main.fixtures.ts +28 -0
  217. package/dist/templates/examples/map/src/main.ts +781 -0
  218. package/dist/templates/examples/map/src/mapHost.ts +23 -0
  219. package/dist/templates/examples/map/src/scene.test.ts +136 -0
  220. package/dist/templates/examples/map/src/story.test.ts +190 -0
  221. package/dist/templates/examples/map/src/styles.css +2 -0
  222. package/dist/templates/examples/map/src/vitest-setup.ts +3 -0
  223. package/dist/templates/examples/pixel-art/package.json +31 -0
  224. package/dist/templates/examples/pixel-art/src/command.ts +87 -0
  225. package/dist/templates/examples/pixel-art/src/comparison.bench.test.ts +204 -0
  226. package/dist/templates/examples/pixel-art/src/constant.ts +21 -0
  227. package/dist/templates/examples/pixel-art/src/entry.ts +27 -0
  228. package/dist/templates/examples/pixel-art/src/grid.ts +134 -0
  229. package/dist/templates/examples/pixel-art/src/main.bench.ts +133 -0
  230. package/dist/templates/examples/pixel-art/src/main.ts +85 -0
  231. package/dist/templates/examples/pixel-art/src/message.ts +36 -0
  232. package/dist/templates/examples/pixel-art/src/model.ts +79 -0
  233. package/dist/templates/examples/pixel-art/src/palette.ts +134 -0
  234. package/dist/templates/examples/pixel-art/src/scene.test.ts +250 -0
  235. package/dist/templates/examples/pixel-art/src/story.test.ts +482 -0
  236. package/dist/templates/examples/pixel-art/src/styles.css +1 -0
  237. package/dist/templates/examples/pixel-art/src/subscription.ts +61 -0
  238. package/dist/templates/examples/pixel-art/src/update.ts +469 -0
  239. package/dist/templates/examples/pixel-art/src/view/canvas.ts +134 -0
  240. package/dist/templates/examples/pixel-art/src/view/dialog.ts +152 -0
  241. package/dist/templates/examples/pixel-art/src/view/history.ts +214 -0
  242. package/dist/templates/examples/pixel-art/src/view/index.ts +1 -0
  243. package/dist/templates/examples/pixel-art/src/view/toolbar.ts +452 -0
  244. package/dist/templates/examples/pixel-art/src/view/view.ts +183 -0
  245. package/dist/templates/examples/pixel-art/src/vitest-setup.ts +3 -0
  246. package/dist/templates/examples/query-sync/package.json +30 -0
  247. package/dist/templates/examples/query-sync/src/data.ts +166 -0
  248. package/dist/templates/examples/query-sync/src/entry.ts +20 -0
  249. package/dist/templates/examples/query-sync/src/main.ts +898 -0
  250. package/dist/templates/examples/query-sync/src/scene.test.ts +89 -0
  251. package/dist/templates/examples/query-sync/src/story.test.ts +151 -0
  252. package/dist/templates/examples/query-sync/src/styles.css +1 -0
  253. package/dist/templates/examples/query-sync/src/vitest-setup.ts +3 -0
  254. package/dist/templates/examples/route-transitions/package.json +28 -0
  255. package/dist/templates/examples/route-transitions/src/data.ts +61 -0
  256. package/dist/templates/examples/route-transitions/src/entry.ts +20 -0
  257. package/dist/templates/examples/route-transitions/src/main.ts +798 -0
  258. package/dist/templates/examples/route-transitions/src/route.ts +48 -0
  259. package/dist/templates/examples/route-transitions/src/story.test.ts +225 -0
  260. package/dist/templates/examples/route-transitions/src/styles.css +1 -0
  261. package/dist/templates/examples/route-transitions/src/vitest-setup.ts +3 -0
  262. package/dist/templates/examples/routing/package.json +29 -0
  263. package/dist/templates/examples/routing/src/entry.ts +20 -0
  264. package/dist/templates/examples/routing/src/fileTree.ts +98 -0
  265. package/dist/templates/examples/routing/src/main.ts +573 -0
  266. package/dist/templates/examples/routing/src/page/index.ts +1 -0
  267. package/dist/templates/examples/routing/src/page/people.ts +349 -0
  268. package/dist/templates/examples/routing/src/route.ts +82 -0
  269. package/dist/templates/examples/routing/src/scene.test.ts +180 -0
  270. package/dist/templates/examples/routing/src/story.test.ts +242 -0
  271. package/dist/templates/examples/routing/src/styles.css +1 -0
  272. package/dist/templates/examples/routing/src/vitest-setup.ts +3 -0
  273. package/dist/templates/examples/shopping-cart/package.json +29 -0
  274. package/dist/templates/examples/shopping-cart/src/data/products.ts +10 -0
  275. package/dist/templates/examples/shopping-cart/src/domain/cart.ts +77 -0
  276. package/dist/templates/examples/shopping-cart/src/domain/index.ts +2 -0
  277. package/dist/templates/examples/shopping-cart/src/domain/item.ts +16 -0
  278. package/dist/templates/examples/shopping-cart/src/entry.ts +20 -0
  279. package/dist/templates/examples/shopping-cart/src/main.ts +307 -0
  280. package/dist/templates/examples/shopping-cart/src/page/cart.ts +203 -0
  281. package/dist/templates/examples/shopping-cart/src/page/checkout.ts +205 -0
  282. package/dist/templates/examples/shopping-cart/src/page/index.ts +3 -0
  283. package/dist/templates/examples/shopping-cart/src/page/products.ts +267 -0
  284. package/dist/templates/examples/shopping-cart/src/route.ts +43 -0
  285. package/dist/templates/examples/shopping-cart/src/scene.test.ts +138 -0
  286. package/dist/templates/examples/shopping-cart/src/story.test.ts +233 -0
  287. package/dist/templates/examples/shopping-cart/src/styles.css +1 -0
  288. package/dist/templates/examples/shopping-cart/src/vitest-setup.ts +3 -0
  289. package/dist/templates/examples/slow-warnings/package.json +28 -0
  290. package/dist/templates/examples/slow-warnings/src/entry.ts +29 -0
  291. package/dist/templates/examples/slow-warnings/src/handleSlow.test.ts +43 -0
  292. package/dist/templates/examples/slow-warnings/src/main.ts +574 -0
  293. package/dist/templates/examples/slow-warnings/src/scene.test.ts +57 -0
  294. package/dist/templates/examples/slow-warnings/src/story.test.ts +118 -0
  295. package/dist/templates/examples/slow-warnings/src/styles.css +1 -0
  296. package/dist/templates/examples/slow-warnings/src/vitest-setup.ts +3 -0
  297. package/dist/templates/examples/snake/package.json +28 -0
  298. package/dist/templates/examples/snake/src/constants.ts +11 -0
  299. package/dist/templates/examples/snake/src/domain/apple.ts +22 -0
  300. package/dist/templates/examples/snake/src/domain/direction.ts +17 -0
  301. package/dist/templates/examples/snake/src/domain/index.ts +4 -0
  302. package/dist/templates/examples/snake/src/domain/position.ts +32 -0
  303. package/dist/templates/examples/snake/src/domain/snake.ts +43 -0
  304. package/dist/templates/examples/snake/src/entry.ts +17 -0
  305. package/dist/templates/examples/snake/src/main.ts +345 -0
  306. package/dist/templates/examples/snake/src/scene.test.ts +77 -0
  307. package/dist/templates/examples/snake/src/story.test.ts +165 -0
  308. package/dist/templates/examples/snake/src/styles.css +1 -0
  309. package/dist/templates/examples/snake/src/vitest-setup.ts +3 -0
  310. package/dist/templates/examples/ssg/package.json +29 -0
  311. package/dist/templates/examples/ssg/src/entry.server.ts +14 -0
  312. package/{templates/rendering → dist/templates/examples}/ssg/src/entry.ts +3 -11
  313. package/dist/templates/examples/ssg/src/main.ts +163 -0
  314. package/dist/templates/examples/ssg/src/styles.css +1 -0
  315. package/dist/templates/examples/ssr/package.json +33 -0
  316. package/dist/templates/examples/ssr/src/cookie.ts +13 -0
  317. package/dist/templates/examples/ssr/src/entry.server.ts +51 -0
  318. package/dist/templates/examples/ssr/src/main.ts +170 -0
  319. package/{templates/rendering → dist/templates/examples}/ssr/src/scene.test.ts +5 -8
  320. package/dist/templates/examples/ssr/src/styles.css +1 -0
  321. package/dist/templates/examples/ssr/src/vitest-setup.ts +3 -0
  322. package/dist/templates/examples/state-machine/package.json +30 -0
  323. package/dist/templates/examples/state-machine/src/entry.ts +17 -0
  324. package/dist/templates/examples/state-machine/src/icon.ts +51 -0
  325. package/dist/templates/examples/state-machine/src/main.ts +420 -0
  326. package/dist/templates/examples/state-machine/src/scene.test.ts +85 -0
  327. package/dist/templates/examples/state-machine/src/story.test.ts +199 -0
  328. package/dist/templates/examples/state-machine/src/styles.css +53 -0
  329. package/dist/templates/examples/state-machine/src/view.ts +1675 -0
  330. package/dist/templates/examples/state-machine/src/vitest-setup.ts +3 -0
  331. package/dist/templates/examples/stopwatch/package.json +29 -0
  332. package/dist/templates/examples/stopwatch/src/entry.ts +17 -0
  333. package/dist/templates/examples/stopwatch/src/main.ts +237 -0
  334. package/dist/templates/examples/stopwatch/src/scene.test.ts +124 -0
  335. package/dist/templates/examples/stopwatch/src/story.test.ts +126 -0
  336. package/dist/templates/examples/stopwatch/src/styles.css +1 -0
  337. package/dist/templates/examples/stopwatch/src/vitest-setup.ts +3 -0
  338. package/dist/templates/examples/todo/package.json +30 -0
  339. package/dist/templates/examples/todo/src/entry.ts +17 -0
  340. package/dist/templates/examples/todo/src/main.ts +682 -0
  341. package/dist/templates/examples/todo/src/scene.test.ts +177 -0
  342. package/dist/templates/examples/todo/src/story.test.ts +374 -0
  343. package/dist/templates/examples/todo/src/styles.css +1 -0
  344. package/dist/templates/examples/todo/src/vitest-setup.ts +3 -0
  345. package/dist/templates/examples/ui-showcase/package.json +30 -0
  346. package/dist/templates/examples/ui-showcase/src/entry.ts +31 -0
  347. package/dist/templates/examples/ui-showcase/src/icon.ts +64 -0
  348. package/dist/templates/examples/ui-showcase/src/main.ts +673 -0
  349. package/dist/templates/examples/ui-showcase/src/scene.test.ts +102 -0
  350. package/dist/templates/examples/ui-showcase/src/story.test.ts +128 -0
  351. package/dist/templates/examples/ui-showcase/src/styles.css +21 -0
  352. package/dist/templates/examples/ui-showcase/src/ui/init.ts +185 -0
  353. package/dist/templates/examples/ui-showcase/src/ui/message.ts +164 -0
  354. package/dist/templates/examples/ui-showcase/src/ui/model.ts +138 -0
  355. package/dist/templates/examples/ui-showcase/src/ui/subscriptions.ts +55 -0
  356. package/dist/templates/examples/ui-showcase/src/ui/toast.ts +13 -0
  357. package/dist/templates/examples/ui-showcase/src/ui/update.ts +1234 -0
  358. package/dist/templates/examples/ui-showcase/src/ui/view/animation.ts +58 -0
  359. package/dist/templates/examples/ui-showcase/src/ui/view/button.ts +64 -0
  360. package/dist/templates/examples/ui-showcase/src/ui/view/calendar.ts +202 -0
  361. package/dist/templates/examples/ui-showcase/src/ui/view/checkbox.ts +185 -0
  362. package/dist/templates/examples/ui-showcase/src/ui/view/combobox.ts +326 -0
  363. package/dist/templates/examples/ui-showcase/src/ui/view/datePicker.ts +263 -0
  364. package/dist/templates/examples/ui-showcase/src/ui/view/dialog.ts +427 -0
  365. package/dist/templates/examples/ui-showcase/src/ui/view/disclosure.ts +142 -0
  366. package/dist/templates/examples/ui-showcase/src/ui/view/dragAndDrop.ts +230 -0
  367. package/dist/templates/examples/ui-showcase/src/ui/view/fieldset.ts +284 -0
  368. package/dist/templates/examples/ui-showcase/src/ui/view/fileDrop.ts +119 -0
  369. package/dist/templates/examples/ui-showcase/src/ui/view/index.ts +24 -0
  370. package/dist/templates/examples/ui-showcase/src/ui/view/input.ts +90 -0
  371. package/dist/templates/examples/ui-showcase/src/ui/view/listbox.ts +263 -0
  372. package/dist/templates/examples/ui-showcase/src/ui/view/menu.ts +172 -0
  373. package/dist/templates/examples/ui-showcase/src/ui/view/popover.ts +262 -0
  374. package/dist/templates/examples/ui-showcase/src/ui/view/radioGroup.ts +192 -0
  375. package/dist/templates/examples/ui-showcase/src/ui/view/select.ts +129 -0
  376. package/dist/templates/examples/ui-showcase/src/ui/view/slider.ts +135 -0
  377. package/dist/templates/examples/ui-showcase/src/ui/view/switch.ts +82 -0
  378. package/dist/templates/examples/ui-showcase/src/ui/view/tabs.ts +187 -0
  379. package/dist/templates/examples/ui-showcase/src/ui/view/textarea.ts +99 -0
  380. package/dist/templates/examples/ui-showcase/src/ui/view/toast.ts +165 -0
  381. package/dist/templates/examples/ui-showcase/src/ui/view/tooltip.ts +123 -0
  382. package/dist/templates/examples/ui-showcase/src/ui/view/virtualList.ts +361 -0
  383. package/dist/templates/examples/ui-showcase/src/vitest-setup.ts +3 -0
  384. package/dist/templates/examples/view-transitions/package.json +28 -0
  385. package/dist/templates/examples/view-transitions/src/artwork.ts +80 -0
  386. package/dist/templates/examples/view-transitions/src/entry.ts +21 -0
  387. package/dist/templates/examples/view-transitions/src/main.ts +348 -0
  388. package/dist/templates/examples/view-transitions/src/route.ts +29 -0
  389. package/dist/templates/examples/view-transitions/src/scene.test.ts +130 -0
  390. package/dist/templates/examples/view-transitions/src/styles.css +66 -0
  391. package/dist/templates/examples/view-transitions/src/vitest-setup.ts +3 -0
  392. package/dist/templates/examples/weather/package.json +29 -0
  393. package/dist/templates/examples/weather/src/entry.ts +16 -0
  394. package/dist/templates/examples/weather/src/main.fixtures.ts +59 -0
  395. package/dist/templates/examples/weather/src/main.ts +356 -0
  396. package/dist/templates/examples/weather/src/scene.test.ts +109 -0
  397. package/dist/templates/examples/weather/src/story.test.ts +125 -0
  398. package/dist/templates/examples/weather/src/styles.css +1 -0
  399. package/dist/templates/examples/weather/src/vitest-setup.ts +3 -0
  400. package/dist/templates/examples/web-components/package.json +32 -0
  401. package/dist/templates/examples/web-components/src/entry.ts +16 -0
  402. package/dist/templates/examples/web-components/src/main.ts +327 -0
  403. package/dist/templates/examples/web-components/src/scene.test.ts +90 -0
  404. package/dist/templates/examples/web-components/src/story.test.ts +90 -0
  405. package/dist/templates/examples/web-components/src/styles.css +1 -0
  406. package/dist/templates/examples/web-components/src/vitest-setup.ts +3 -0
  407. package/dist/templates/examples/websocket-chat/package.json +29 -0
  408. package/dist/templates/examples/websocket-chat/src/entry.ts +26 -0
  409. package/dist/templates/examples/websocket-chat/src/main.ts +626 -0
  410. package/dist/templates/examples/websocket-chat/src/scene.test.ts +166 -0
  411. package/dist/templates/examples/websocket-chat/src/story.test.ts +183 -0
  412. package/dist/templates/examples/websocket-chat/src/styles.css +1 -0
  413. package/dist/templates/examples/websocket-chat/src/vitest-setup.ts +3 -0
  414. package/dist/templates/release.json +27 -0
  415. package/dist/templates/rendering/ssg/src/entry.ts +20 -0
  416. package/{templates → dist/templates}/rendering/ssg/src/main.ts +36 -43
  417. package/dist/templates/rendering/ssg/src/route.ts +20 -0
  418. package/dist/templates/rendering/ssg/src/vite-env.d.ts +19 -0
  419. package/dist/templates/rendering/ssr/src/entry.ts +17 -0
  420. package/{templates → dist/templates}/rendering/ssr/src/main.ts +17 -25
  421. package/dist/templates/rendering/ssr/src/scene.test.ts +40 -0
  422. package/dist/templates/rendering/ssr/src/vite-env.d.ts +19 -0
  423. package/dist/utils/files.js +23 -71
  424. package/dist/utils/packages.js +63 -44
  425. package/package.json +3 -4
  426. /package/{templates → dist/templates}/base/.mcp.json +0 -0
  427. /package/{templates → dist/templates}/base/.oxlintrc.json +0 -0
  428. /package/{templates → dist/templates}/base/.prettierignore +0 -0
  429. /package/{templates → dist/templates}/base/.prettierrc +0 -0
  430. /package/{templates → dist/templates}/base/README.md +0 -0
  431. /package/{templates → dist/templates}/base/gitignore +0 -0
  432. /package/{templates → dist/templates}/base/ignore +0 -0
  433. /package/{templates → dist/templates}/base/index.html +0 -0
  434. /package/{templates → dist/templates}/base/package.json +0 -0
  435. /package/{templates → dist/templates}/base/src/styles.css +0 -0
  436. /package/{templates → dist/templates}/base/src/vitest-setup.ts +0 -0
  437. /package/{templates → dist/templates}/base/tsconfig.json +0 -0
  438. /package/{templates → dist/templates}/base/vite.config.ts +0 -0
  439. /package/{templates → dist/templates}/base/vitest.config.ts +0 -0
  440. /package/{templates/rendering → dist/templates/examples}/ssg/src/route.ts +0 -0
  441. /package/{templates/rendering → dist/templates/examples}/ssg/src/vite-env.d.ts +0 -0
  442. /package/{templates/rendering → dist/templates/examples}/ssr/src/entry.ts +0 -0
  443. /package/{templates/rendering → dist/templates/examples}/ssr/src/vite-env.d.ts +0 -0
  444. /package/{templates → dist/templates}/package-managers/pnpm/pnpm-workspace.yaml +0 -0
  445. /package/{templates → dist/templates}/rendering/ssg/README.md +0 -0
  446. /package/{templates → dist/templates}/rendering/ssg/package.json +0 -0
  447. /package/{templates → dist/templates}/rendering/ssg/scripts/build.mjs +0 -0
  448. /package/{templates → dist/templates}/rendering/ssg/scripts/prerender.ts +0 -0
  449. /package/{templates → dist/templates}/rendering/ssg/src/entry.server.ts +0 -0
  450. /package/{templates → dist/templates}/rendering/ssg/src/scene.test.ts +0 -0
  451. /package/{templates → dist/templates}/rendering/ssg/tsconfig.json +0 -0
  452. /package/{templates → dist/templates}/rendering/ssg/vite.config.ts +0 -0
  453. /package/{templates → dist/templates}/rendering/ssr/README.md +0 -0
  454. /package/{templates → dist/templates}/rendering/ssr/package.json +0 -0
  455. /package/{templates → dist/templates}/rendering/ssr/scripts/build.mjs +0 -0
  456. /package/{templates → dist/templates}/rendering/ssr/server/main.ts +0 -0
  457. /package/{templates → dist/templates}/rendering/ssr/src/cookie.ts +0 -0
  458. /package/{templates → dist/templates}/rendering/ssr/src/entry.server.ts +0 -0
  459. /package/{templates → dist/templates}/rendering/ssr/tsconfig.json +0 -0
  460. /package/{templates → dist/templates}/rendering/ssr/vite.config.ts +0 -0
@@ -0,0 +1,1234 @@
1
+ import { Array, Match as M, Number, Option, pipe } from 'effect'
2
+ import { Command, Update } from 'foldkit'
3
+ import { evo } from 'foldkit/struct'
4
+
5
+ import {
6
+ Animation,
7
+ Calendar,
8
+ Combobox,
9
+ DatePicker,
10
+ Dialog,
11
+ DragAndDrop,
12
+ FileDrop,
13
+ Listbox,
14
+ Menu,
15
+ Popover,
16
+ RadioGroup,
17
+ Slider,
18
+ Tabs,
19
+ Tooltip,
20
+ VirtualList,
21
+ } from '@foldkit/ui'
22
+ import { Message as AnimationMessage } from '@foldkit/ui/animation'
23
+
24
+ import { UiMessage } from './message'
25
+ import type {
26
+ City,
27
+ DemoColumn,
28
+ DemoTab,
29
+ ListboxItem,
30
+ Plan,
31
+ UiModel,
32
+ } from './model'
33
+ import { Toast } from './toast'
34
+ import { CityCombobox, CityMultiCombobox } from './view/combobox'
35
+ import { CharacterListbox, ItemListbox, ItemMultiListbox } from './view/listbox'
36
+ import { PlanRadioGroup } from './view/radioGroup'
37
+ import { DemoTabs } from './view/tabs'
38
+ import {
39
+ ROW_COUNT as VIRTUAL_LIST_ROW_COUNT,
40
+ variableActivities,
41
+ variableRowHeightPx,
42
+ } from './view/virtualList'
43
+
44
+ const reorderColumns = (
45
+ columns: ReadonlyArray<DemoColumn>,
46
+ itemId: string,
47
+ fromContainerId: string,
48
+ toContainerId: string,
49
+ toIndex: number,
50
+ ): ReadonlyArray<DemoColumn> => {
51
+ const maybeCard = pipe(
52
+ columns,
53
+ Array.findFirst(({ id }) => id === fromContainerId),
54
+ Option.flatMap(column =>
55
+ Array.findFirst(column.cards, ({ id }) => id === itemId),
56
+ ),
57
+ )
58
+
59
+ return Option.match(maybeCard, {
60
+ onNone: () => columns,
61
+ onSome: card =>
62
+ Array.map(columns, column => {
63
+ const withRemoved =
64
+ column.id === fromContainerId
65
+ ? Array.filter(column.cards, ({ id }) => id !== itemId)
66
+ : column.cards
67
+
68
+ if (column.id !== toContainerId) {
69
+ return evo(column, { cards: () => withRemoved })
70
+ }
71
+
72
+ const inserted = [
73
+ ...Array.take(withRemoved, toIndex),
74
+ card,
75
+ ...Array.drop(withRemoved, toIndex),
76
+ ]
77
+
78
+ return evo(column, { cards: () => inserted })
79
+ }),
80
+ })
81
+ }
82
+
83
+ export type UiUpdateReturn = readonly [
84
+ UiModel,
85
+ ReadonlyArray<Command.Command<UiMessage>>,
86
+ ]
87
+
88
+ const DemoMenu = Menu.create<string>()
89
+
90
+ const foldDialogOutMessage = M.type<Dialog.OutMessage>().pipe(
91
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
92
+ M.tagsExhaustive({
93
+ Opened: () => model => [model, []],
94
+ Closed: () => model => [model, []],
95
+ }),
96
+ )
97
+
98
+ const foldMenuOutMessage = M.type<Menu.OutMessage<string>>().pipe(
99
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
100
+ M.tagsExhaustive({
101
+ Selected: () => model => [model, []],
102
+ }),
103
+ )
104
+
105
+ const foldPopoverOutMessage = M.type<Popover.OutMessage>().pipe(
106
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
107
+ M.tagsExhaustive({
108
+ Opened: () => model => [model, []],
109
+ Closed: () => model => [model, []],
110
+ }),
111
+ )
112
+
113
+ const foldToastOutMessage = M.type<typeof Toast.OutMessage.Type>().pipe(
114
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
115
+ M.tagsExhaustive({
116
+ DismissedToast: () => model => [model, []],
117
+ }),
118
+ )
119
+
120
+ const foldTooltipOutMessage = M.type<Tooltip.OutMessage>().pipe(
121
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
122
+ M.tagsExhaustive({
123
+ Shown: () => model => [model, []],
124
+ Hidden: () => model => [model, []],
125
+ }),
126
+ )
127
+
128
+ const foldMobileMenuDialog = Update.foldChild({
129
+ update: Dialog.update,
130
+ read: (model: UiModel) => Option.some(model.mobileMenuDialog),
131
+ write: (model, nextMobileMenuDialog) =>
132
+ evo(model, { mobileMenuDialog: () => nextMobileMenuDialog }),
133
+ toParentMessage: message => UiMessage.GotMobileMenuDialogMessage({ message }),
134
+ foldOutMessage: foldDialogOutMessage,
135
+ })
136
+
137
+ const foldComboboxDemoOutMessage = M.type<Combobox.OutMessage<City>>().pipe(
138
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
139
+ M.tagsExhaustive({
140
+ Selected:
141
+ ({ value }) =>
142
+ model => [
143
+ evo(model, {
144
+ maybeComboboxDemoSelectedCity: () => Option.some(value),
145
+ }),
146
+ [],
147
+ ],
148
+ ClearedSelection: () => model => [model, []],
149
+ }),
150
+ )
151
+
152
+ const foldComboboxDemo = Update.foldChild({
153
+ update: CityCombobox.update,
154
+ read: (model: UiModel) => Option.some(model.comboboxDemo),
155
+ write: (model, nextComboboxDemo) =>
156
+ evo(model, { comboboxDemo: () => nextComboboxDemo }),
157
+ toParentMessage: message => UiMessage.GotComboboxDemoMessage({ message }),
158
+ foldOutMessage: foldComboboxDemoOutMessage,
159
+ })
160
+
161
+ const foldComboboxNullableDemoOutMessage = M.type<
162
+ Combobox.OutMessage<City>
163
+ >().pipe(
164
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
165
+ M.tagsExhaustive({
166
+ Selected:
167
+ ({ value }) =>
168
+ model => [
169
+ evo(model, {
170
+ maybeComboboxNullableDemoSelectedCity: () =>
171
+ Option.contains(model.maybeComboboxNullableDemoSelectedCity, value)
172
+ ? Option.none()
173
+ : Option.some(value),
174
+ }),
175
+ [],
176
+ ],
177
+ ClearedSelection: () => model => [
178
+ evo(model, {
179
+ maybeComboboxNullableDemoSelectedCity: () => Option.none(),
180
+ }),
181
+ [],
182
+ ],
183
+ }),
184
+ )
185
+
186
+ const foldComboboxNullableDemo = Update.foldChild({
187
+ update: CityCombobox.update,
188
+ read: (model: UiModel) => Option.some(model.comboboxNullableDemo),
189
+ write: (model, nextComboboxNullableDemo) =>
190
+ evo(model, { comboboxNullableDemo: () => nextComboboxNullableDemo }),
191
+ toParentMessage: message =>
192
+ UiMessage.GotComboboxNullableDemoMessage({ message }),
193
+ foldOutMessage: foldComboboxNullableDemoOutMessage,
194
+ })
195
+
196
+ const foldComboboxMultiDemoOutMessage = M.type<
197
+ Combobox.OutMessage<City>
198
+ >().pipe(
199
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
200
+ M.tagsExhaustive({
201
+ Selected:
202
+ ({ value }) =>
203
+ model => [
204
+ evo(model, {
205
+ comboboxMultiDemoSelectedCities: () =>
206
+ Array.contains(model.comboboxMultiDemoSelectedCities, value)
207
+ ? Array.filter(
208
+ model.comboboxMultiDemoSelectedCities,
209
+ city => city !== value,
210
+ )
211
+ : Array.append(model.comboboxMultiDemoSelectedCities, value),
212
+ }),
213
+ [],
214
+ ],
215
+ ClearedSelection: () => model => [model, []],
216
+ }),
217
+ )
218
+
219
+ const foldComboboxMultiDemo = Update.foldChild({
220
+ update: CityMultiCombobox.update,
221
+ read: (model: UiModel) => Option.some(model.comboboxMultiDemo),
222
+ write: (model, nextComboboxMultiDemo) =>
223
+ evo(model, { comboboxMultiDemo: () => nextComboboxMultiDemo }),
224
+ toParentMessage: message =>
225
+ UiMessage.GotComboboxMultiDemoMessage({ message }),
226
+ foldOutMessage: foldComboboxMultiDemoOutMessage,
227
+ })
228
+
229
+ const foldComboboxPlacementLockDemoOutMessage = M.type<
230
+ Combobox.OutMessage<City>
231
+ >().pipe(
232
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
233
+ M.tagsExhaustive({
234
+ Selected:
235
+ ({ value }) =>
236
+ model => [
237
+ evo(model, {
238
+ maybeComboboxPlacementLockDemoSelectedCity: () => Option.some(value),
239
+ }),
240
+ [],
241
+ ],
242
+ ClearedSelection: () => model => [model, []],
243
+ }),
244
+ )
245
+
246
+ const foldComboboxPlacementLockDemo = Update.foldChild({
247
+ update: CityCombobox.update,
248
+ read: (model: UiModel) => Option.some(model.comboboxPlacementLockDemo),
249
+ write: (model, nextComboboxPlacementLockDemo) =>
250
+ evo(model, {
251
+ comboboxPlacementLockDemo: () => nextComboboxPlacementLockDemo,
252
+ }),
253
+ toParentMessage: message =>
254
+ UiMessage.GotComboboxPlacementLockDemoMessage({ message }),
255
+ foldOutMessage: foldComboboxPlacementLockDemoOutMessage,
256
+ })
257
+
258
+ const foldComboboxSelectOnFocusDemoOutMessage = M.type<
259
+ Combobox.OutMessage<City>
260
+ >().pipe(
261
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
262
+ M.tagsExhaustive({
263
+ Selected:
264
+ ({ value }) =>
265
+ model => [
266
+ evo(model, {
267
+ maybeComboboxSelectOnFocusDemoSelectedCity: () => Option.some(value),
268
+ }),
269
+ [],
270
+ ],
271
+ ClearedSelection: () => model => [model, []],
272
+ }),
273
+ )
274
+
275
+ const foldComboboxSelectOnFocusDemo = Update.foldChild({
276
+ update: CityCombobox.update,
277
+ read: (model: UiModel) => Option.some(model.comboboxSelectOnFocusDemo),
278
+ write: (model, nextComboboxSelectOnFocusDemo) =>
279
+ evo(model, {
280
+ comboboxSelectOnFocusDemo: () => nextComboboxSelectOnFocusDemo,
281
+ }),
282
+ toParentMessage: message =>
283
+ UiMessage.GotComboboxSelectOnFocusDemoMessage({ message }),
284
+ foldOutMessage: foldComboboxSelectOnFocusDemoOutMessage,
285
+ })
286
+
287
+ const foldDialogDemo = Update.foldChild({
288
+ update: Dialog.update,
289
+ read: (model: UiModel) => Option.some(model.dialogDemo),
290
+ write: (model, nextDialogDemo) =>
291
+ evo(model, { dialogDemo: () => nextDialogDemo }),
292
+ toParentMessage: message => UiMessage.GotDialogDemoMessage({ message }),
293
+ foldOutMessage: foldDialogOutMessage,
294
+ })
295
+
296
+ const foldDialogAnimatedDemo = Update.foldChild({
297
+ update: Dialog.update,
298
+ read: (model: UiModel) => Option.some(model.dialogAnimatedDemo),
299
+ write: (model, nextDialogAnimatedDemo) =>
300
+ evo(model, { dialogAnimatedDemo: () => nextDialogAnimatedDemo }),
301
+ toParentMessage: message =>
302
+ UiMessage.GotDialogAnimatedDemoMessage({ message }),
303
+ foldOutMessage: foldDialogOutMessage,
304
+ })
305
+
306
+ const foldOverlayDialogDemo = Update.foldChild({
307
+ update: Dialog.update,
308
+ read: (model: UiModel) => Option.some(model.overlayDialogDemo),
309
+ write: (model, nextOverlayDialogDemo) =>
310
+ evo(model, { overlayDialogDemo: () => nextOverlayDialogDemo }),
311
+ toParentMessage: message =>
312
+ UiMessage.GotOverlayDialogDemoMessage({ message }),
313
+ foldOutMessage: foldDialogOutMessage,
314
+ })
315
+
316
+ const foldOverlayComboboxDemoOutMessage = M.type<
317
+ Combobox.OutMessage<City>
318
+ >().pipe(
319
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
320
+ M.tagsExhaustive({
321
+ Selected:
322
+ ({ value }) =>
323
+ model => [
324
+ evo(model, {
325
+ maybeOverlayComboboxDemoSelectedCity: () => Option.some(value),
326
+ }),
327
+ [],
328
+ ],
329
+ ClearedSelection: () => model => [model, []],
330
+ }),
331
+ )
332
+
333
+ const foldOverlayComboboxDemo = Update.foldChild({
334
+ update: CityCombobox.update,
335
+ read: (model: UiModel) => Option.some(model.overlayComboboxDemo),
336
+ write: (model, nextOverlayComboboxDemo) =>
337
+ evo(model, { overlayComboboxDemo: () => nextOverlayComboboxDemo }),
338
+ toParentMessage: message =>
339
+ UiMessage.GotOverlayComboboxDemoMessage({ message }),
340
+ foldOutMessage: foldOverlayComboboxDemoOutMessage,
341
+ })
342
+
343
+ const foldNestedDialogParentDemo = Update.foldChild({
344
+ update: Dialog.update,
345
+ read: (model: UiModel) => Option.some(model.nestedDialogParentDemo),
346
+ write: (model, nextNestedDialogParentDemo) =>
347
+ evo(model, { nestedDialogParentDemo: () => nextNestedDialogParentDemo }),
348
+ toParentMessage: message =>
349
+ UiMessage.GotNestedDialogParentDemoMessage({ message }),
350
+ foldOutMessage: foldDialogOutMessage,
351
+ })
352
+
353
+ const foldNestedDialogChildDemo = Update.foldChild({
354
+ update: Dialog.update,
355
+ read: (model: UiModel) => Option.some(model.nestedDialogChildDemo),
356
+ write: (model, nextNestedDialogChildDemo) =>
357
+ evo(model, { nestedDialogChildDemo: () => nextNestedDialogChildDemo }),
358
+ toParentMessage: message =>
359
+ UiMessage.GotNestedDialogChildDemoMessage({ message }),
360
+ foldOutMessage: foldDialogOutMessage,
361
+ })
362
+
363
+ const foldCalendarBasicDemoOutMessage = M.type<Calendar.OutMessage>().pipe(
364
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
365
+ M.tagsExhaustive({
366
+ SelectedDate:
367
+ ({ date }) =>
368
+ model => [
369
+ evo(model, {
370
+ maybeCalendarBasicDemoSelectedDate: () => Option.some(date),
371
+ }),
372
+ [],
373
+ ],
374
+ ChangedViewMonth: () => model => [model, []],
375
+ }),
376
+ )
377
+
378
+ const foldCalendarBasicDemo = Update.foldChild({
379
+ update: Calendar.update,
380
+ read: (model: UiModel) => Option.some(model.calendarBasicDemo),
381
+ write: (model, nextCalendarBasicDemo) =>
382
+ evo(model, { calendarBasicDemo: () => nextCalendarBasicDemo }),
383
+ toParentMessage: message =>
384
+ UiMessage.GotCalendarBasicDemoMessage({ message }),
385
+ foldOutMessage: foldCalendarBasicDemoOutMessage,
386
+ })
387
+
388
+ const foldDatePickerBasicDemoOutMessage = M.type<DatePicker.OutMessage>().pipe(
389
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
390
+ M.tagsExhaustive({
391
+ SelectedDate:
392
+ ({ date }) =>
393
+ model => [
394
+ evo(model, {
395
+ maybeDatePickerBasicDemoSelectedDate: () => Option.some(date),
396
+ }),
397
+ [],
398
+ ],
399
+ ClearedDate: () => model => [
400
+ evo(model, {
401
+ maybeDatePickerBasicDemoSelectedDate: () => Option.none(),
402
+ }),
403
+ [],
404
+ ],
405
+ ChangedViewMonth: () => model => [model, []],
406
+ }),
407
+ )
408
+
409
+ const foldDatePickerBasicDemo = Update.foldChild({
410
+ update: DatePicker.update,
411
+ read: (model: UiModel) => Option.some(model.datePickerBasicDemo),
412
+ write: (model, nextDatePickerBasicDemo) =>
413
+ evo(model, { datePickerBasicDemo: () => nextDatePickerBasicDemo }),
414
+ toParentMessage: message =>
415
+ UiMessage.GotDatePickerBasicDemoMessage({ message }),
416
+ foldOutMessage: foldDatePickerBasicDemoOutMessage,
417
+ })
418
+
419
+ const foldDragAndDropDemoOutMessage = M.type<DragAndDrop.OutMessage>().pipe(
420
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
421
+ M.tagsExhaustive({
422
+ Reordered:
423
+ ({ itemId, fromContainerId, toContainerId, toIndex }) =>
424
+ model => [
425
+ evo(model, {
426
+ dragAndDropDemoColumns: () =>
427
+ reorderColumns(
428
+ model.dragAndDropDemoColumns,
429
+ itemId,
430
+ fromContainerId,
431
+ toContainerId,
432
+ toIndex,
433
+ ),
434
+ }),
435
+ [],
436
+ ],
437
+ Cancelled: () => model => [model, []],
438
+ }),
439
+ )
440
+
441
+ const foldDragAndDropDemo = Update.foldChild({
442
+ update: DragAndDrop.update,
443
+ read: (model: UiModel) => Option.some(model.dragAndDropDemo),
444
+ write: (model, nextDragAndDropDemo) =>
445
+ evo(model, { dragAndDropDemo: () => nextDragAndDropDemo }),
446
+ toParentMessage: message => UiMessage.GotDragAndDropDemoMessage({ message }),
447
+ foldOutMessage: foldDragAndDropDemoOutMessage,
448
+ })
449
+
450
+ const foldFileDropBasicDemoOutMessage = M.type<FileDrop.OutMessage>().pipe(
451
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
452
+ M.tagsExhaustive({
453
+ ReceivedFiles:
454
+ ({ files }) =>
455
+ model => [
456
+ evo(model, {
457
+ fileDropBasicDemoFiles: () => [
458
+ ...model.fileDropBasicDemoFiles,
459
+ ...files,
460
+ ],
461
+ }),
462
+ [],
463
+ ],
464
+ RejectedNonFiles: () => model => [model, []],
465
+ }),
466
+ )
467
+
468
+ const foldFileDropBasicDemo = Update.foldChild({
469
+ update: FileDrop.update,
470
+ read: (model: UiModel) => Option.some(model.fileDropBasicDemo),
471
+ write: (model, nextFileDropBasicDemo) =>
472
+ evo(model, { fileDropBasicDemo: () => nextFileDropBasicDemo }),
473
+ toParentMessage: message =>
474
+ UiMessage.GotFileDropBasicDemoMessage({ message }),
475
+ foldOutMessage: foldFileDropBasicDemoOutMessage,
476
+ })
477
+
478
+ const foldListboxDemoOutMessage = M.type<
479
+ Listbox.OutMessage<ListboxItem>
480
+ >().pipe(
481
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
482
+ M.tagsExhaustive({
483
+ Selected:
484
+ ({ value }) =>
485
+ model => [
486
+ evo(model, {
487
+ maybeListboxDemoSelectedItem: () => Option.some(value),
488
+ }),
489
+ [],
490
+ ],
491
+ }),
492
+ )
493
+
494
+ const foldListboxDemo = Update.foldChild({
495
+ update: ItemListbox.update,
496
+ read: (model: UiModel) => Option.some(model.listboxDemo),
497
+ write: (model, nextListboxDemo) =>
498
+ evo(model, { listboxDemo: () => nextListboxDemo }),
499
+ toParentMessage: message => UiMessage.GotListboxDemoMessage({ message }),
500
+ foldOutMessage: foldListboxDemoOutMessage,
501
+ })
502
+
503
+ const foldListboxMultiDemoOutMessage: (
504
+ outMessage: Listbox.OutMessage<ListboxItem>,
505
+ ) => Update.Step<UiModel, UiMessage> = M.type<
506
+ Listbox.OutMessage<ListboxItem>
507
+ >().pipe(
508
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
509
+ M.tagsExhaustive({
510
+ Selected:
511
+ ({ value }) =>
512
+ model => [
513
+ evo(model, {
514
+ listboxMultiDemoSelectedItems: () =>
515
+ Array.contains(model.listboxMultiDemoSelectedItems, value)
516
+ ? Array.filter(
517
+ model.listboxMultiDemoSelectedItems,
518
+ item => item !== value,
519
+ )
520
+ : Array.append(model.listboxMultiDemoSelectedItems, value),
521
+ }),
522
+ [],
523
+ ],
524
+ }),
525
+ )
526
+
527
+ const foldListboxMultiDemo = Update.foldChild({
528
+ update: ItemMultiListbox.update,
529
+ read: (model: UiModel) => Option.some(model.listboxMultiDemo),
530
+ write: (model, nextListboxMultiDemo) =>
531
+ evo(model, { listboxMultiDemo: () => nextListboxMultiDemo }),
532
+ toParentMessage: message => UiMessage.GotListboxMultiDemoMessage({ message }),
533
+ foldOutMessage: foldListboxMultiDemoOutMessage,
534
+ })
535
+
536
+ const foldListboxGroupedDemoOutMessage = M.type<Listbox.OutMessage>().pipe(
537
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
538
+ M.tagsExhaustive({
539
+ Selected:
540
+ ({ value }) =>
541
+ model => [
542
+ evo(model, {
543
+ maybeListboxGroupedDemoSelectedItem: () => Option.some(value),
544
+ }),
545
+ [],
546
+ ],
547
+ }),
548
+ )
549
+
550
+ const foldListboxGroupedDemo = Update.foldChild({
551
+ update: CharacterListbox.update,
552
+ read: (model: UiModel) => Option.some(model.listboxGroupedDemo),
553
+ write: (model, nextListboxGroupedDemo) =>
554
+ evo(model, { listboxGroupedDemo: () => nextListboxGroupedDemo }),
555
+ toParentMessage: message =>
556
+ UiMessage.GotListboxGroupedDemoMessage({ message }),
557
+ foldOutMessage: foldListboxGroupedDemoOutMessage,
558
+ })
559
+
560
+ const foldMenuBasicDemo = Update.foldChild({
561
+ update: DemoMenu.update,
562
+ read: (model: UiModel) => Option.some(model.menuBasicDemo),
563
+ write: (model, nextMenuBasicDemo) =>
564
+ evo(model, { menuBasicDemo: () => nextMenuBasicDemo }),
565
+ toParentMessage: message => UiMessage.GotMenuBasicDemoMessage({ message }),
566
+ foldOutMessage: foldMenuOutMessage,
567
+ })
568
+
569
+ const foldMenuAnimatedDemo = Update.foldChild({
570
+ update: DemoMenu.update,
571
+ read: (model: UiModel) => Option.some(model.menuAnimatedDemo),
572
+ write: (model, nextMenuAnimatedDemo) =>
573
+ evo(model, { menuAnimatedDemo: () => nextMenuAnimatedDemo }),
574
+ toParentMessage: message => UiMessage.GotMenuAnimatedDemoMessage({ message }),
575
+ foldOutMessage: foldMenuOutMessage,
576
+ })
577
+
578
+ const foldPopoverBasicDemo = Update.foldChild({
579
+ update: Popover.update,
580
+ read: (model: UiModel) => Option.some(model.popoverBasicDemo),
581
+ write: (model, nextPopoverBasicDemo) =>
582
+ evo(model, { popoverBasicDemo: () => nextPopoverBasicDemo }),
583
+ toParentMessage: message => UiMessage.GotPopoverBasicDemoMessage({ message }),
584
+ foldOutMessage: foldPopoverOutMessage,
585
+ })
586
+
587
+ const foldPopoverAnimatedDemo = Update.foldChild({
588
+ update: Popover.update,
589
+ read: (model: UiModel) => Option.some(model.popoverAnimatedDemo),
590
+ write: (model, nextPopoverAnimatedDemo) =>
591
+ evo(model, { popoverAnimatedDemo: () => nextPopoverAnimatedDemo }),
592
+ toParentMessage: message =>
593
+ UiMessage.GotPopoverAnimatedDemoMessage({ message }),
594
+ foldOutMessage: foldPopoverOutMessage,
595
+ })
596
+
597
+ const foldPopoverNestedParentDemo = Update.foldChild({
598
+ update: Popover.update,
599
+ read: (model: UiModel) => Option.some(model.popoverNestedParentDemo),
600
+ write: (model, nextPopoverNestedParentDemo) =>
601
+ evo(model, { popoverNestedParentDemo: () => nextPopoverNestedParentDemo }),
602
+ toParentMessage: message =>
603
+ UiMessage.GotPopoverNestedParentDemoMessage({ message }),
604
+ foldOutMessage: foldPopoverOutMessage,
605
+ })
606
+
607
+ const foldPopoverNestedChildDemo = Update.foldChild({
608
+ update: Popover.update,
609
+ read: (model: UiModel) => Option.some(model.popoverNestedChildDemo),
610
+ write: (model, nextPopoverNestedChildDemo) =>
611
+ evo(model, { popoverNestedChildDemo: () => nextPopoverNestedChildDemo }),
612
+ toParentMessage: message =>
613
+ UiMessage.GotPopoverNestedChildDemoMessage({ message }),
614
+ foldOutMessage: foldPopoverOutMessage,
615
+ })
616
+
617
+ const foldVerticalRadioGroupDemoOutMessage = M.type<
618
+ RadioGroup.OutMessage<Plan>
619
+ >().pipe(
620
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
621
+ M.tagsExhaustive({
622
+ Selected:
623
+ ({ value }) =>
624
+ model => [
625
+ evo(model, { verticalRadioGroupDemoValue: () => Option.some(value) }),
626
+ [],
627
+ ],
628
+ }),
629
+ )
630
+
631
+ const foldVerticalRadioGroupDemo = Update.foldChild({
632
+ update: PlanRadioGroup.update,
633
+ read: (model: UiModel) => Option.some(model.verticalRadioGroupDemo),
634
+ write: (model, nextVerticalRadioGroupDemo) =>
635
+ evo(model, { verticalRadioGroupDemo: () => nextVerticalRadioGroupDemo }),
636
+ toParentMessage: message =>
637
+ UiMessage.GotVerticalRadioGroupDemoMessage({ message }),
638
+ foldOutMessage: foldVerticalRadioGroupDemoOutMessage,
639
+ })
640
+
641
+ const foldHorizontalRadioGroupDemoOutMessage = M.type<
642
+ RadioGroup.OutMessage<Plan>
643
+ >().pipe(
644
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
645
+ M.tagsExhaustive({
646
+ Selected:
647
+ ({ value }) =>
648
+ model => [
649
+ evo(model, { horizontalRadioGroupDemoValue: () => Option.some(value) }),
650
+ [],
651
+ ],
652
+ }),
653
+ )
654
+
655
+ const foldHorizontalRadioGroupDemo = Update.foldChild({
656
+ update: PlanRadioGroup.update,
657
+ read: (model: UiModel) => Option.some(model.horizontalRadioGroupDemo),
658
+ write: (model, nextHorizontalRadioGroupDemo) =>
659
+ evo(model, {
660
+ horizontalRadioGroupDemo: () => nextHorizontalRadioGroupDemo,
661
+ }),
662
+ toParentMessage: message =>
663
+ UiMessage.GotHorizontalRadioGroupDemoMessage({ message }),
664
+ foldOutMessage: foldHorizontalRadioGroupDemoOutMessage,
665
+ })
666
+
667
+ const foldSliderRatingDemoOutMessage = M.type<Slider.OutMessage>().pipe(
668
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
669
+ M.tagsExhaustive({
670
+ ChangedValue:
671
+ ({ value }) =>
672
+ model => [evo(model, { sliderRatingValue: () => value }), []],
673
+ }),
674
+ )
675
+
676
+ const foldSliderRatingDemo = Update.foldChild({
677
+ update: Slider.update,
678
+ read: (model: UiModel) => Option.some(model.sliderRatingDemo),
679
+ write: (model, nextSliderRatingDemo) =>
680
+ evo(model, { sliderRatingDemo: () => nextSliderRatingDemo }),
681
+ toParentMessage: message => UiMessage.GotSliderRatingDemoMessage({ message }),
682
+ foldOutMessage: foldSliderRatingDemoOutMessage,
683
+ })
684
+
685
+ const foldSliderVolumeDemoOutMessage = M.type<Slider.OutMessage>().pipe(
686
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
687
+ M.tagsExhaustive({
688
+ ChangedValue:
689
+ ({ value }) =>
690
+ model => [evo(model, { sliderVolumeValue: () => value }), []],
691
+ }),
692
+ )
693
+
694
+ const foldSliderVolumeDemo = Update.foldChild({
695
+ update: Slider.update,
696
+ read: (model: UiModel) => Option.some(model.sliderVolumeDemo),
697
+ write: (model, nextSliderVolumeDemo) =>
698
+ evo(model, { sliderVolumeDemo: () => nextSliderVolumeDemo }),
699
+ toParentMessage: message => UiMessage.GotSliderVolumeDemoMessage({ message }),
700
+ foldOutMessage: foldSliderVolumeDemoOutMessage,
701
+ })
702
+
703
+ const foldHorizontalTabsDemoOutMessage = M.type<
704
+ Tabs.OutMessage<DemoTab>
705
+ >().pipe(
706
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
707
+ M.tagsExhaustive({
708
+ Selected:
709
+ ({ value }) =>
710
+ model => [evo(model, { horizontalTabsDemoTab: () => value }), []],
711
+ }),
712
+ )
713
+
714
+ const foldHorizontalTabsDemo = Update.foldChild({
715
+ update: DemoTabs.update,
716
+ read: (model: UiModel) => Option.some(model.horizontalTabsDemo),
717
+ write: (model, nextHorizontalTabsDemo) =>
718
+ evo(model, { horizontalTabsDemo: () => nextHorizontalTabsDemo }),
719
+ toParentMessage: message =>
720
+ UiMessage.GotHorizontalTabsDemoMessage({ message }),
721
+ foldOutMessage: foldHorizontalTabsDemoOutMessage,
722
+ })
723
+
724
+ const foldVerticalTabsDemoOutMessage = M.type<Tabs.OutMessage<DemoTab>>().pipe(
725
+ M.withReturnType<Update.Step<UiModel, UiMessage>>(),
726
+ M.tagsExhaustive({
727
+ Selected:
728
+ ({ value }) =>
729
+ model => [evo(model, { verticalTabsDemoTab: () => value }), []],
730
+ }),
731
+ )
732
+
733
+ const foldVerticalTabsDemo = Update.foldChild({
734
+ update: DemoTabs.update,
735
+ read: (model: UiModel) => Option.some(model.verticalTabsDemo),
736
+ write: (model, nextVerticalTabsDemo) =>
737
+ evo(model, { verticalTabsDemo: () => nextVerticalTabsDemo }),
738
+ toParentMessage: message => UiMessage.GotVerticalTabsDemoMessage({ message }),
739
+ foldOutMessage: foldVerticalTabsDemoOutMessage,
740
+ })
741
+
742
+ const foldToastDemo = Update.foldChild({
743
+ update: Toast.update,
744
+ read: (model: UiModel) => Option.some(model.toastDemo),
745
+ write: (model, nextToastDemo) =>
746
+ evo(model, { toastDemo: () => nextToastDemo }),
747
+ toParentMessage: message => UiMessage.GotToastDemoMessage({ message }),
748
+ foldOutMessage: foldToastOutMessage,
749
+ })
750
+
751
+ const foldTooltipBasicDemo = Update.foldChild({
752
+ update: Tooltip.update,
753
+ read: (model: UiModel) => Option.some(model.tooltipBasicDemo),
754
+ write: (model, nextTooltipBasicDemo) =>
755
+ evo(model, { tooltipBasicDemo: () => nextTooltipBasicDemo }),
756
+ toParentMessage: message => UiMessage.GotTooltipBasicDemoMessage({ message }),
757
+ foldOutMessage: foldTooltipOutMessage,
758
+ })
759
+
760
+ const foldTooltipNoDelayDemo = Update.foldChild({
761
+ update: Tooltip.update,
762
+ read: (model: UiModel) => Option.some(model.tooltipNoDelayDemo),
763
+ write: (model, nextTooltipNoDelayDemo) =>
764
+ evo(model, { tooltipNoDelayDemo: () => nextTooltipNoDelayDemo }),
765
+ toParentMessage: message =>
766
+ UiMessage.GotTooltipNoDelayDemoMessage({ message }),
767
+ foldOutMessage: foldTooltipOutMessage,
768
+ })
769
+
770
+ const foldAnimationDemoOutMessage: (
771
+ outMessage: Animation.OutMessage,
772
+ context: Update.FoldContext<Animation.Message, UiMessage>,
773
+ ) => Update.Step<UiModel, UiMessage> = (outMessage, { liftCommand }) =>
774
+ Animation.OutMessage.match<Update.Step<UiModel, UiMessage>>(outMessage, {
775
+ StartedLeaveAnimating: () => model => [
776
+ model,
777
+ [liftCommand(Animation.defaultLeaveCommand(model.animationDemo))],
778
+ ],
779
+ TransitionedOut: () => model => [model, []],
780
+ })
781
+
782
+ const foldAnimationDemo = Update.foldChild({
783
+ update: Animation.update,
784
+ read: (model: UiModel) => Option.some(model.animationDemo),
785
+ write: (model, nextAnimationDemo) =>
786
+ evo(model, { animationDemo: () => nextAnimationDemo }),
787
+ toParentMessage: message => UiMessage.GotAnimationDemoMessage({ message }),
788
+ foldOutMessage: foldAnimationDemoOutMessage,
789
+ })
790
+
791
+ const foldVirtualListDemo = Update.foldChild({
792
+ update: VirtualList.update,
793
+ read: (model: UiModel) => Option.some(model.virtualListDemo),
794
+ write: (model, nextVirtualListDemo) =>
795
+ evo(model, { virtualListDemo: () => nextVirtualListDemo }),
796
+ toParentMessage: message => UiMessage.GotVirtualListDemoMessage({ message }),
797
+ })
798
+
799
+ const foldVirtualListVariableDemo = Update.foldChild({
800
+ update: VirtualList.update,
801
+ read: (model: UiModel) => Option.some(model.virtualListVariableDemo),
802
+ write: (model, nextVirtualListVariableDemo) =>
803
+ evo(model, { virtualListVariableDemo: () => nextVirtualListVariableDemo }),
804
+ toParentMessage: message =>
805
+ UiMessage.GotVirtualListVariableDemoMessage({ message }),
806
+ })
807
+
808
+ export const uiUpdate = (model: UiModel, message: UiMessage): UiUpdateReturn =>
809
+ UiMessage.match<UiUpdateReturn>(message, {
810
+ ClickedOpenMobileMenu: () => {
811
+ const [nextMobileMenuDialog, mobileMenuDialogCommands] = Dialog.open(
812
+ model.mobileMenuDialog,
813
+ )
814
+
815
+ return [
816
+ evo(model, {
817
+ mobileMenuDialog: () => nextMobileMenuDialog,
818
+ }),
819
+ Command.mapMessages(mobileMenuDialogCommands, message =>
820
+ UiMessage.GotMobileMenuDialogMessage({ message }),
821
+ ),
822
+ ]
823
+ },
824
+
825
+ GotMobileMenuDialogMessage: ({ message }) =>
826
+ foldMobileMenuDialog(model, message),
827
+
828
+ UpdatedInputDemoValue: ({ value }) => [
829
+ evo(model, { inputDemoValue: () => value }),
830
+ [],
831
+ ],
832
+
833
+ UpdatedTextareaDemoValue: ({ value }) => [
834
+ evo(model, { textareaDemoValue: () => value }),
835
+ [],
836
+ ],
837
+
838
+ UpdatedFieldsetInputValue: ({ value }) => [
839
+ evo(model, { fieldsetInputValue: () => value }),
840
+ [],
841
+ ],
842
+
843
+ UpdatedFieldsetTextareaValue: ({ value }) => [
844
+ evo(model, { fieldsetTextareaValue: () => value }),
845
+ [],
846
+ ],
847
+
848
+ UpdatedSelectDemoValue: ({ value }) => [
849
+ evo(model, { selectDemoValue: () => value }),
850
+ [],
851
+ ],
852
+
853
+ ToggledFieldsetCheckboxDemo: ({ isChecked }) => [
854
+ evo(model, {
855
+ isFieldsetCheckboxDemoChecked: () => isChecked,
856
+ }),
857
+ [],
858
+ ],
859
+
860
+ ClickedButtonDemo: () => [
861
+ evo(model, {
862
+ buttonClickCount: Number.increment,
863
+ }),
864
+ [],
865
+ ],
866
+
867
+ ToggledCheckboxBasicDemo: ({ isChecked }) => [
868
+ evo(model, {
869
+ isCheckboxBasicDemoChecked: () => isChecked,
870
+ }),
871
+ [],
872
+ ],
873
+
874
+ ToggledCheckboxAllDemo: ({ isChecked }) => [
875
+ evo(model, {
876
+ isCheckboxOptionADemoChecked: () => isChecked,
877
+ isCheckboxOptionBDemoChecked: () => isChecked,
878
+ }),
879
+ [],
880
+ ],
881
+
882
+ ToggledCheckboxOptionADemo: ({ isChecked }) => [
883
+ evo(model, {
884
+ isCheckboxOptionADemoChecked: () => isChecked,
885
+ }),
886
+ [],
887
+ ],
888
+
889
+ ToggledCheckboxOptionBDemo: ({ isChecked }) => [
890
+ evo(model, {
891
+ isCheckboxOptionBDemoChecked: () => isChecked,
892
+ }),
893
+ [],
894
+ ],
895
+
896
+ GotComboboxDemoMessage: ({ message }) => foldComboboxDemo(model, message),
897
+
898
+ GotComboboxNullableDemoMessage: ({ message }) =>
899
+ foldComboboxNullableDemo(model, message),
900
+
901
+ GotComboboxMultiDemoMessage: ({ message }) =>
902
+ foldComboboxMultiDemo(model, message),
903
+
904
+ GotComboboxPlacementLockDemoMessage: ({ message }) =>
905
+ foldComboboxPlacementLockDemo(model, message),
906
+
907
+ GotComboboxSelectOnFocusDemoMessage: ({ message }) =>
908
+ foldComboboxSelectOnFocusDemo(model, message),
909
+
910
+ GotDialogDemoMessage: ({ message }) => foldDialogDemo(model, message),
911
+
912
+ GotDialogAnimatedDemoMessage: ({ message }) =>
913
+ foldDialogAnimatedDemo(model, message),
914
+
915
+ GotOverlayDialogDemoMessage: ({ message }) =>
916
+ foldOverlayDialogDemo(model, message),
917
+
918
+ GotOverlayComboboxDemoMessage: ({ message }) =>
919
+ foldOverlayComboboxDemo(model, message),
920
+
921
+ GotNestedDialogParentDemoMessage: ({ message }) =>
922
+ foldNestedDialogParentDemo(model, message),
923
+
924
+ GotNestedDialogChildDemoMessage: ({ message }) =>
925
+ foldNestedDialogChildDemo(model, message),
926
+
927
+ ClickedDeleteProject: () => {
928
+ const [nextNestedDialogChildDemo, nestedDialogChildCommands] =
929
+ Dialog.open(model.nestedDialogChildDemo)
930
+
931
+ return [
932
+ evo(model, {
933
+ nestedDialogChildDemo: () => nextNestedDialogChildDemo,
934
+ }),
935
+ Command.mapMessages(nestedDialogChildCommands, message =>
936
+ UiMessage.GotNestedDialogChildDemoMessage({ message }),
937
+ ),
938
+ ]
939
+ },
940
+
941
+ ClickedOpenDialog: () => {
942
+ const [nextDialogDemo, dialogCommands] = Dialog.open(model.dialogDemo)
943
+
944
+ return [
945
+ evo(model, { dialogDemo: () => nextDialogDemo }),
946
+ Command.mapMessages(dialogCommands, message =>
947
+ UiMessage.GotDialogDemoMessage({ message }),
948
+ ),
949
+ ]
950
+ },
951
+
952
+ ClickedOpenAnimatedDialog: () => {
953
+ const [nextDialogAnimatedDemo, dialogAnimatedCommands] = Dialog.open(
954
+ model.dialogAnimatedDemo,
955
+ )
956
+
957
+ return [
958
+ evo(model, { dialogAnimatedDemo: () => nextDialogAnimatedDemo }),
959
+ Command.mapMessages(dialogAnimatedCommands, message =>
960
+ UiMessage.GotDialogAnimatedDemoMessage({ message }),
961
+ ),
962
+ ]
963
+ },
964
+
965
+ ClickedEditFilters: () => {
966
+ const [nextOverlayDialogDemo, overlayDialogCommands] = Dialog.open(
967
+ model.overlayDialogDemo,
968
+ )
969
+
970
+ return [
971
+ evo(model, { overlayDialogDemo: () => nextOverlayDialogDemo }),
972
+ Command.mapMessages(overlayDialogCommands, message =>
973
+ UiMessage.GotOverlayDialogDemoMessage({ message }),
974
+ ),
975
+ ]
976
+ },
977
+
978
+ ClickedOpenProjectSettings: () => {
979
+ const [nextNestedDialogParentDemo, nestedDialogParentCommands] =
980
+ Dialog.open(model.nestedDialogParentDemo)
981
+
982
+ return [
983
+ evo(model, {
984
+ nestedDialogParentDemo: () => nextNestedDialogParentDemo,
985
+ }),
986
+ Command.mapMessages(nestedDialogParentCommands, message =>
987
+ UiMessage.GotNestedDialogParentDemoMessage({ message }),
988
+ ),
989
+ ]
990
+ },
991
+
992
+ ToggledDisclosureBasicDemo: ({ isOpen }) => [
993
+ evo(model, {
994
+ isDisclosureBasicDemoOpen: () => isOpen,
995
+ }),
996
+ [],
997
+ ],
998
+
999
+ ToggledDisclosureAnimatedDemo: ({ isOpen }) => [
1000
+ evo(model, {
1001
+ isDisclosureAnimatedDemoOpen: () => isOpen,
1002
+ }),
1003
+ [],
1004
+ ],
1005
+
1006
+ GotCalendarBasicDemoMessage: ({ message }) =>
1007
+ foldCalendarBasicDemo(model, message),
1008
+
1009
+ GotDatePickerBasicDemoMessage: ({ message }) =>
1010
+ foldDatePickerBasicDemo(model, message),
1011
+
1012
+ GotDragAndDropDemoMessage: ({ message }) =>
1013
+ foldDragAndDropDemo(model, message),
1014
+
1015
+ GotFileDropBasicDemoMessage: ({ message }) =>
1016
+ foldFileDropBasicDemo(model, message),
1017
+
1018
+ ClickedRemoveFileDropDemoFile: ({ fileIndex }) => [
1019
+ evo(model, {
1020
+ fileDropBasicDemoFiles: () =>
1021
+ Array.remove(model.fileDropBasicDemoFiles, fileIndex),
1022
+ }),
1023
+ [],
1024
+ ],
1025
+
1026
+ GotListboxDemoMessage: ({ message }) => foldListboxDemo(model, message),
1027
+
1028
+ GotListboxMultiDemoMessage: ({ message }) =>
1029
+ foldListboxMultiDemo(model, message),
1030
+
1031
+ GotListboxGroupedDemoMessage: ({ message }) =>
1032
+ foldListboxGroupedDemo(model, message),
1033
+
1034
+ GotMenuBasicDemoMessage: ({ message }) => foldMenuBasicDemo(model, message),
1035
+
1036
+ GotMenuAnimatedDemoMessage: ({ message }) =>
1037
+ foldMenuAnimatedDemo(model, message),
1038
+
1039
+ GotPopoverBasicDemoMessage: ({ message }) =>
1040
+ foldPopoverBasicDemo(model, message),
1041
+
1042
+ GotPopoverAnimatedDemoMessage: ({ message }) =>
1043
+ foldPopoverAnimatedDemo(model, message),
1044
+
1045
+ GotPopoverNestedParentDemoMessage: ({ message }) =>
1046
+ foldPopoverNestedParentDemo(model, message),
1047
+
1048
+ GotPopoverNestedChildDemoMessage: ({ message }) =>
1049
+ foldPopoverNestedChildDemo(model, message),
1050
+
1051
+ GotVerticalRadioGroupDemoMessage: ({ message }) =>
1052
+ foldVerticalRadioGroupDemo(model, message),
1053
+
1054
+ GotHorizontalRadioGroupDemoMessage: ({ message }) =>
1055
+ foldHorizontalRadioGroupDemo(model, message),
1056
+
1057
+ GotSliderRatingDemoMessage: ({ message }) =>
1058
+ foldSliderRatingDemo(model, message),
1059
+
1060
+ GotSliderVolumeDemoMessage: ({ message }) =>
1061
+ foldSliderVolumeDemo(model, message),
1062
+
1063
+ ToggledSwitchDemo: ({ isChecked }) => [
1064
+ evo(model, {
1065
+ isSwitchDemoChecked: () => isChecked,
1066
+ }),
1067
+ [],
1068
+ ],
1069
+
1070
+ GotHorizontalTabsDemoMessage: ({ message }) =>
1071
+ foldHorizontalTabsDemo(model, message),
1072
+
1073
+ GotVerticalTabsDemoMessage: ({ message }) =>
1074
+ foldVerticalTabsDemo(model, message),
1075
+
1076
+ GotToastDemoMessage: ({ message }) => foldToastDemo(model, message),
1077
+
1078
+ ClickedShowInfoToast: () => {
1079
+ const [nextToastDemo, toastCommands] = Toast.show(model.toastDemo, {
1080
+ variant: 'Info',
1081
+ payload: {
1082
+ title: 'Changes saved',
1083
+ maybeDescription: Option.some('Your preferences have been updated.'),
1084
+ },
1085
+ })
1086
+
1087
+ return [
1088
+ evo(model, { toastDemo: () => nextToastDemo }),
1089
+ Command.mapMessages(toastCommands, message =>
1090
+ UiMessage.GotToastDemoMessage({ message }),
1091
+ ),
1092
+ ]
1093
+ },
1094
+
1095
+ ClickedShowSuccessToast: () => {
1096
+ const [nextToastDemo, toastCommands] = Toast.show(model.toastDemo, {
1097
+ variant: 'Success',
1098
+ payload: {
1099
+ title: 'Uploaded successfully',
1100
+ maybeDescription: Option.some('kit-manual.pdf is now available.'),
1101
+ },
1102
+ })
1103
+
1104
+ return [
1105
+ evo(model, { toastDemo: () => nextToastDemo }),
1106
+ Command.mapMessages(toastCommands, message =>
1107
+ UiMessage.GotToastDemoMessage({ message }),
1108
+ ),
1109
+ ]
1110
+ },
1111
+
1112
+ ClickedShowWarningToast: () => {
1113
+ const [nextToastDemo, toastCommands] = Toast.show(model.toastDemo, {
1114
+ variant: 'Warning',
1115
+ payload: {
1116
+ title: 'Network slow',
1117
+ maybeDescription: Option.some(
1118
+ 'Some assets are loading over a weak connection.',
1119
+ ),
1120
+ },
1121
+ })
1122
+
1123
+ return [
1124
+ evo(model, { toastDemo: () => nextToastDemo }),
1125
+ Command.mapMessages(toastCommands, message =>
1126
+ UiMessage.GotToastDemoMessage({ message }),
1127
+ ),
1128
+ ]
1129
+ },
1130
+
1131
+ ClickedShowErrorToast: () => {
1132
+ const [nextToastDemo, toastCommands] = Toast.show(model.toastDemo, {
1133
+ variant: 'Error',
1134
+ payload: {
1135
+ title: 'Failed to save',
1136
+ maybeDescription: Option.some('Check your connection and try again.'),
1137
+ },
1138
+ })
1139
+
1140
+ return [
1141
+ evo(model, { toastDemo: () => nextToastDemo }),
1142
+ Command.mapMessages(toastCommands, message =>
1143
+ UiMessage.GotToastDemoMessage({ message }),
1144
+ ),
1145
+ ]
1146
+ },
1147
+
1148
+ ClickedShowStickyToast: () => {
1149
+ const [nextToastDemo, toastCommands] = Toast.show(model.toastDemo, {
1150
+ variant: 'Info',
1151
+ payload: {
1152
+ title: 'Review pending',
1153
+ maybeDescription: Option.some(
1154
+ 'Action required. This stays until dismissed.',
1155
+ ),
1156
+ },
1157
+ sticky: true,
1158
+ })
1159
+
1160
+ return [
1161
+ evo(model, { toastDemo: () => nextToastDemo }),
1162
+ Command.mapMessages(toastCommands, message =>
1163
+ UiMessage.GotToastDemoMessage({ message }),
1164
+ ),
1165
+ ]
1166
+ },
1167
+
1168
+ ClickedDismissAllToasts: () => {
1169
+ const [nextToastDemo, toastCommands] = Toast.dismissAll(model.toastDemo)
1170
+
1171
+ return [
1172
+ evo(model, { toastDemo: () => nextToastDemo }),
1173
+ Command.mapMessages(toastCommands, message =>
1174
+ UiMessage.GotToastDemoMessage({ message }),
1175
+ ),
1176
+ ]
1177
+ },
1178
+
1179
+ GotTooltipBasicDemoMessage: ({ message }) =>
1180
+ foldTooltipBasicDemo(model, message),
1181
+
1182
+ GotTooltipNoDelayDemoMessage: ({ message }) =>
1183
+ foldTooltipNoDelayDemo(model, message),
1184
+
1185
+ GotAnimationDemoMessage: ({ message }) => foldAnimationDemo(model, message),
1186
+
1187
+ ToggledAnimationDemo: () => {
1188
+ const nextShowing = !model.isAnimationDemoShowing
1189
+ return foldAnimationDemo(
1190
+ evo(model, { isAnimationDemoShowing: () => nextShowing }),
1191
+ nextShowing ? AnimationMessage.Showed() : AnimationMessage.Hid(),
1192
+ )
1193
+ },
1194
+
1195
+ GotVirtualListDemoMessage: ({ message }) =>
1196
+ foldVirtualListDemo(model, message),
1197
+
1198
+ ClickedVirtualListScrollToMiddle: () => {
1199
+ const [nextVirtualListDemo, virtualListCommands] =
1200
+ VirtualList.scrollToIndex(
1201
+ model.virtualListDemo,
1202
+ Math.floor(VIRTUAL_LIST_ROW_COUNT / 2),
1203
+ )
1204
+
1205
+ return [
1206
+ evo(model, { virtualListDemo: () => nextVirtualListDemo }),
1207
+ Command.mapMessages(virtualListCommands, message =>
1208
+ UiMessage.GotVirtualListDemoMessage({ message }),
1209
+ ),
1210
+ ]
1211
+ },
1212
+
1213
+ GotVirtualListVariableDemoMessage: ({ message }) =>
1214
+ foldVirtualListVariableDemo(model, message),
1215
+
1216
+ ClickedVirtualListVariableScrollToMiddle: () => {
1217
+ const [nextVirtualListVariableDemo, virtualListCommands] =
1218
+ VirtualList.scrollToIndexVariable(
1219
+ model.virtualListVariableDemo,
1220
+ variableActivities,
1221
+ variableRowHeightPx,
1222
+ Math.floor(VIRTUAL_LIST_ROW_COUNT / 2),
1223
+ )
1224
+
1225
+ return [
1226
+ evo(model, {
1227
+ virtualListVariableDemo: () => nextVirtualListVariableDemo,
1228
+ }),
1229
+ Command.mapMessages(virtualListCommands, message =>
1230
+ UiMessage.GotVirtualListVariableDemoMessage({ message }),
1231
+ ),
1232
+ ]
1233
+ },
1234
+ })