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.
- package/dist/commands/create.js +9 -7
- package/dist/templates/base/FOLDKIT.md +22 -6
- package/dist/templates/examples/api-cache/src/data.ts +14 -14
- package/dist/templates/examples/api-cache/src/main.ts +42 -39
- package/dist/templates/examples/auth/src/command.ts +3 -3
- package/dist/templates/examples/auth/src/domain/session.ts +8 -6
- package/dist/templates/examples/auth/src/main.ts +11 -11
- package/dist/templates/examples/auth/src/message.ts +3 -3
- package/dist/templates/examples/auth/src/model.ts +2 -2
- package/dist/templates/examples/auth/src/page/loggedIn/index.ts +1 -1
- package/dist/templates/examples/auth/src/page/loggedIn/view.ts +3 -3
- package/dist/templates/examples/auth/src/page/loggedOut/index.ts +1 -1
- package/dist/templates/examples/auth/src/page/loggedOut/page/login.ts +9 -17
- package/dist/templates/examples/auth/src/page/loggedOut/update.ts +4 -6
- package/dist/templates/examples/auth/src/page/loggedOut/view.ts +3 -3
- package/dist/templates/examples/auth/src/route.ts +2 -2
- package/dist/templates/examples/auth/src/update.ts +37 -40
- package/dist/templates/examples/auth/src/view.ts +6 -6
- package/dist/templates/examples/canvas-art/src/main.ts +22 -30
- package/dist/templates/examples/charting/src/command.ts +3 -3
- package/dist/templates/examples/charting/src/domain.ts +53 -48
- package/dist/templates/examples/charting/src/echarts.ts +6 -6
- package/dist/templates/examples/charting/src/githubApi.ts +33 -34
- package/dist/templates/examples/charting/src/http.ts +7 -7
- package/dist/templates/examples/charting/src/message.ts +6 -6
- package/dist/templates/examples/charting/src/model.ts +6 -6
- package/dist/templates/examples/charting/src/npmApi.ts +19 -15
- package/dist/templates/examples/charting/src/subscription.ts +5 -5
- package/dist/templates/examples/charting/src/telemetry.test.ts +18 -12
- package/dist/templates/examples/charting/src/telemetry.ts +11 -18
- package/dist/templates/examples/charting/src/update.ts +17 -23
- package/dist/templates/examples/charting/src/view/chart.ts +2 -2
- package/dist/templates/examples/counter/src/main.ts +2 -2
- package/dist/templates/examples/counters/src/counter.ts +2 -2
- package/dist/templates/examples/counters/src/main.ts +8 -8
- package/dist/templates/examples/embedding/src/main.ts +10 -7
- package/dist/templates/examples/form/src/main.ts +18 -14
- package/dist/templates/examples/generative-art/src/command.ts +7 -2
- package/dist/templates/examples/generative-art/src/message.ts +14 -14
- package/dist/templates/examples/generative-art/src/model.ts +21 -21
- package/dist/templates/examples/generative-art/src/update.ts +15 -17
- package/dist/templates/examples/interrupting-commands/src/main.ts +30 -27
- package/dist/templates/examples/job-application/src/domain/proficiencyLevel.ts +2 -2
- package/dist/templates/examples/job-application/src/domain/pronounOption.ts +2 -2
- package/dist/templates/examples/job-application/src/domain/step.ts +11 -11
- package/dist/templates/examples/job-application/src/main.ts +5 -5
- package/dist/templates/examples/job-application/src/message.ts +2 -2
- package/dist/templates/examples/job-application/src/model.ts +5 -5
- package/dist/templates/examples/job-application/src/step/attachments.ts +32 -34
- package/dist/templates/examples/job-application/src/step/coverLetter.ts +4 -4
- package/dist/templates/examples/job-application/src/step/education/education.ts +11 -14
- package/dist/templates/examples/job-application/src/step/education/entry.ts +21 -22
- package/dist/templates/examples/job-application/src/step/personalInfo.ts +44 -54
- package/dist/templates/examples/job-application/src/step/skills/entry.ts +12 -14
- package/dist/templates/examples/job-application/src/step/skills/skills.ts +11 -14
- package/dist/templates/examples/job-application/src/step/workHistory/entry.ts +43 -45
- package/dist/templates/examples/job-application/src/step/workHistory/workHistory.ts +11 -14
- package/dist/templates/examples/job-application/src/update.ts +17 -17
- package/dist/templates/examples/job-application/src/view/attachments.ts +5 -5
- package/dist/templates/examples/job-application/src/view/datePicker.ts +3 -3
- package/dist/templates/examples/job-application/src/view/field.ts +5 -5
- package/dist/templates/examples/job-application/src/view/index.ts +28 -22
- package/dist/templates/examples/kanban/src/command.ts +4 -4
- package/dist/templates/examples/kanban/src/domain/card.ts +6 -6
- package/dist/templates/examples/kanban/src/domain/column.ts +9 -9
- package/dist/templates/examples/kanban/src/main.ts +4 -4
- package/dist/templates/examples/kanban/src/message.ts +6 -6
- package/dist/templates/examples/kanban/src/model.ts +11 -9
- package/dist/templates/examples/kanban/src/update.ts +5 -5
- package/dist/templates/examples/managed-resource-layer/src/main.ts +20 -20
- package/dist/templates/examples/map/src/locations.ts +7 -7
- package/dist/templates/examples/map/src/main.ts +83 -44
- package/dist/templates/examples/map/src/mount.test.ts +127 -0
- package/dist/templates/examples/pixel-art/src/command.ts +12 -5
- package/dist/templates/examples/pixel-art/src/main.ts +4 -4
- package/dist/templates/examples/pixel-art/src/message.ts +7 -7
- package/dist/templates/examples/pixel-art/src/model.ts +34 -29
- package/dist/templates/examples/pixel-art/src/subscription.ts +2 -2
- package/dist/templates/examples/pixel-art/src/update.ts +79 -86
- package/dist/templates/examples/query-sync/src/main.ts +106 -102
- package/dist/templates/examples/route-transitions/src/data.ts +6 -6
- package/dist/templates/examples/route-transitions/src/main.ts +23 -29
- package/dist/templates/examples/route-transitions/src/route.ts +3 -3
- package/dist/templates/examples/routing/src/fileTree.ts +10 -8
- package/dist/templates/examples/routing/src/main.ts +23 -21
- package/dist/templates/examples/routing/src/page/people.ts +14 -22
- package/dist/templates/examples/routing/src/route.ts +7 -7
- package/dist/templates/examples/shopping-cart/src/main.ts +30 -31
- package/dist/templates/examples/shopping-cart/src/page/products.ts +10 -10
- package/dist/templates/examples/shopping-cart/src/route.ts +6 -4
- package/dist/templates/examples/slow-warnings/src/main.ts +35 -43
- package/dist/templates/examples/snake/src/domain/snake.ts +2 -2
- package/dist/templates/examples/snake/src/main.ts +39 -47
- package/dist/templates/examples/ssg/src/main.ts +5 -5
- package/dist/templates/examples/ssg/src/route.ts +2 -2
- package/dist/templates/examples/ssr/src/cookie.ts +3 -3
- package/dist/templates/examples/ssr/src/main.ts +10 -10
- package/dist/templates/examples/state-machine/src/main.ts +55 -53
- package/dist/templates/examples/state-machine/src/view.ts +7 -7
- package/dist/templates/examples/stopwatch/src/main.ts +10 -10
- package/dist/templates/examples/todo/src/main.ts +41 -34
- package/dist/templates/examples/ui-showcase/src/main.ts +54 -42
- package/dist/templates/examples/ui-showcase/src/scene.test.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/init.ts +1 -2
- package/dist/templates/examples/ui-showcase/src/ui/message.ts +17 -18
- package/dist/templates/examples/ui-showcase/src/ui/model.ts +47 -44
- package/dist/templates/examples/ui-showcase/src/ui/subscriptions.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/toast.ts +4 -4
- package/dist/templates/examples/ui-showcase/src/ui/update.ts +287 -298
- package/dist/templates/examples/ui-showcase/src/ui/view/animation.ts +2 -2
- package/dist/templates/examples/ui-showcase/src/ui/view/button.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/calendar.ts +4 -4
- package/dist/templates/examples/ui-showcase/src/ui/view/checkbox.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/combobox.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/datePicker.ts +4 -4
- package/dist/templates/examples/ui-showcase/src/ui/view/dialog.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/disclosure.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/dragAndDrop.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/fieldset.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/fileDrop.ts +6 -6
- package/dist/templates/examples/ui-showcase/src/ui/view/hoverIntent.ts +9 -20
- package/dist/templates/examples/ui-showcase/src/ui/view/input.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/listbox.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/menu.ts +15 -15
- package/dist/templates/examples/ui-showcase/src/ui/view/popover.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/radioGroup.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/select.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/slider.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/switch.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/tabs.ts +7 -7
- package/dist/templates/examples/ui-showcase/src/ui/view/textarea.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/toast.ts +8 -8
- package/dist/templates/examples/ui-showcase/src/ui/view/tooltip.ts +1 -1
- package/dist/templates/examples/ui-showcase/src/ui/view/virtualList.ts +7 -7
- package/dist/templates/examples/view-transitions/src/artwork.ts +7 -7
- package/dist/templates/examples/view-transitions/src/main.ts +6 -6
- package/dist/templates/examples/view-transitions/src/route.ts +3 -3
- package/dist/templates/examples/weather/src/main.ts +42 -42
- package/dist/templates/examples/weather/src/story.test.ts +5 -5
- package/dist/templates/examples/web-components/src/main.ts +16 -16
- package/dist/templates/examples/websocket-chat/src/main.ts +30 -30
- package/dist/templates/release.json +13 -13
- package/dist/templates/rendering/ssg/src/main.ts +5 -5
- package/dist/templates/rendering/ssg/src/route.ts +2 -2
- package/dist/templates/rendering/ssr/server/main.ts +15 -15
- package/dist/templates/rendering/ssr/src/cookie.ts +3 -3
- package/dist/templates/rendering/ssr/src/main.ts +10 -10
- package/dist/utils/packages.js +17 -0
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import clsx from 'clsx'
|
|
2
|
-
import { Array, Effect, Match
|
|
2
|
+
import { Array, Effect, Match, Option, Schema, pipe } from 'effect'
|
|
3
3
|
import {
|
|
4
4
|
Calendar,
|
|
5
5
|
Command,
|
|
@@ -20,10 +20,10 @@ import { Dialog, Nav } from '@foldkit/ui'
|
|
|
20
20
|
|
|
21
21
|
import * as Icon from './icon'
|
|
22
22
|
import { uiInit } from './ui/init'
|
|
23
|
-
import { UiMessage } from './ui/message'
|
|
23
|
+
import { Message as UiMessage } from './ui/message'
|
|
24
24
|
import { UiModel } from './ui/model'
|
|
25
25
|
import * as UiSubscriptions from './ui/subscriptions'
|
|
26
|
-
import { uiUpdate } from './ui/update'
|
|
26
|
+
import { closeMobileMenu, openMobileMenu, uiUpdate } from './ui/update'
|
|
27
27
|
import * as View from './ui/view'
|
|
28
28
|
|
|
29
29
|
// ROUTE
|
|
@@ -55,7 +55,7 @@ export const AppRoute = defineRouteUnion({
|
|
|
55
55
|
Tooltip: {},
|
|
56
56
|
Animation: {},
|
|
57
57
|
VirtualList: {},
|
|
58
|
-
NotFound: { path:
|
|
58
|
+
NotFound: { path: Schema.String },
|
|
59
59
|
})
|
|
60
60
|
|
|
61
61
|
export type AppRoute = typeof AppRoute.Type
|
|
@@ -144,7 +144,7 @@ const urlToAppRoute = Route.parseUrlWithFallback(routeParser, AppRoute.NotFound)
|
|
|
144
144
|
|
|
145
145
|
// MODEL
|
|
146
146
|
|
|
147
|
-
export const Model =
|
|
147
|
+
export const Model = Schema.Struct({
|
|
148
148
|
route: AppRoute,
|
|
149
149
|
uiModel: UiModel,
|
|
150
150
|
})
|
|
@@ -158,6 +158,7 @@ export const Message = defineMessageUnion({
|
|
|
158
158
|
CompletedLoadExternal: {},
|
|
159
159
|
ClickedLink: { request: UrlRequest },
|
|
160
160
|
ChangedUrl: { url: Url },
|
|
161
|
+
ClickedOpenMobileMenu: {},
|
|
161
162
|
GotUiMessage: { message: UiMessage },
|
|
162
163
|
})
|
|
163
164
|
|
|
@@ -166,14 +167,14 @@ export type Message = typeof Message.Type
|
|
|
166
167
|
// COMMAND
|
|
167
168
|
|
|
168
169
|
const NavigateInternal = Command.define('NavigateInternal', {
|
|
169
|
-
args: { url:
|
|
170
|
+
args: { url: Schema.String },
|
|
170
171
|
messages: [Message.CompletedNavigateInternal],
|
|
171
172
|
execute: ({ url }) =>
|
|
172
173
|
pushUrl(url).pipe(Effect.as(Message.CompletedNavigateInternal())),
|
|
173
174
|
})
|
|
174
175
|
|
|
175
176
|
const LoadExternal = Command.define('LoadExternal', {
|
|
176
|
-
args: { href:
|
|
177
|
+
args: { href: Schema.String },
|
|
177
178
|
messages: [Message.CompletedLoadExternal],
|
|
178
179
|
execute: ({ href }) =>
|
|
179
180
|
load(href).pipe(Effect.as(Message.CompletedLoadExternal())),
|
|
@@ -181,7 +182,7 @@ const LoadExternal = Command.define('LoadExternal', {
|
|
|
181
182
|
|
|
182
183
|
// INIT
|
|
183
184
|
|
|
184
|
-
export const Flags =
|
|
185
|
+
export const Flags = Schema.Struct({
|
|
185
186
|
today: Calendar.CalendarDate,
|
|
186
187
|
})
|
|
187
188
|
|
|
@@ -211,14 +212,9 @@ export const init: Runtime.RoutingApplicationInit<Model, Message, Flags> = (
|
|
|
211
212
|
|
|
212
213
|
// UPDATE
|
|
213
214
|
|
|
214
|
-
const toUiMessage = (message:
|
|
215
|
+
const toUiMessage = (message: UiMessage): Message =>
|
|
215
216
|
Message.GotUiMessage({ message })
|
|
216
217
|
|
|
217
|
-
const toMobileMenuDialogMessage = (message: Dialog.Message): Message =>
|
|
218
|
-
Message.GotUiMessage({
|
|
219
|
-
message: UiMessage.GotMobileMenuDialogMessage({ message }),
|
|
220
|
-
})
|
|
221
|
-
|
|
222
218
|
const foldUi = Update.foldChild({
|
|
223
219
|
update: uiUpdate,
|
|
224
220
|
read: (model: Model) => Option.some(model.uiModel),
|
|
@@ -226,23 +222,18 @@ const foldUi = Update.foldChild({
|
|
|
226
222
|
toParentMessage: toUiMessage,
|
|
227
223
|
})
|
|
228
224
|
|
|
229
|
-
const
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
)
|
|
225
|
+
const foldUiOpenMobileMenu = Update.foldChildStep({
|
|
226
|
+
update: openMobileMenu,
|
|
227
|
+
read: (model: Model) => Option.some(model.uiModel),
|
|
228
|
+
write: (model, nextUiModel) => evo(model, { uiModel: () => nextUiModel }),
|
|
229
|
+
toParentMessage: toUiMessage,
|
|
230
|
+
})
|
|
236
231
|
|
|
237
|
-
const
|
|
238
|
-
update:
|
|
239
|
-
read: (model: Model) => Option.some(model.uiModel
|
|
240
|
-
write: (model,
|
|
241
|
-
|
|
242
|
-
uiModel: evo({ mobileMenuDialog: () => nextMobileMenuDialog }),
|
|
243
|
-
}),
|
|
244
|
-
toParentMessage: toMobileMenuDialogMessage,
|
|
245
|
-
foldOutMessage: foldMobileMenuDialogOutMessage,
|
|
232
|
+
const foldUiCloseMobileMenu = Update.foldChildStep({
|
|
233
|
+
update: closeMobileMenu,
|
|
234
|
+
read: (model: Model) => Option.some(model.uiModel),
|
|
235
|
+
write: (model, nextUiModel) => evo(model, { uiModel: () => nextUiModel }),
|
|
236
|
+
toParentMessage: toUiMessage,
|
|
246
237
|
})
|
|
247
238
|
|
|
248
239
|
type UpdateReturn = Update.Return<Model, Message>
|
|
@@ -269,9 +260,11 @@ export const update = (model: Model, message: Message) =>
|
|
|
269
260
|
stepModel => ({
|
|
270
261
|
model: evo(stepModel, { route: () => urlToAppRoute(url) }),
|
|
271
262
|
}),
|
|
272
|
-
|
|
263
|
+
foldUiCloseMobileMenu,
|
|
273
264
|
]),
|
|
274
265
|
|
|
266
|
+
ClickedOpenMobileMenu: () => foldUiOpenMobileMenu(model),
|
|
267
|
+
|
|
275
268
|
GotUiMessage: ({ message }) => foldUi(model, message),
|
|
276
269
|
})
|
|
277
270
|
|
|
@@ -348,7 +341,7 @@ const componentNav = (
|
|
|
348
341
|
toView,
|
|
349
342
|
})
|
|
350
343
|
|
|
351
|
-
const navListView = (
|
|
344
|
+
const navListView = <Message>(
|
|
352
345
|
items: ReadonlyArray<Nav.ItemInfo>,
|
|
353
346
|
linkClassName: (isActive: boolean) => string,
|
|
354
347
|
h: HtmlBuilder<Message>,
|
|
@@ -421,7 +414,7 @@ const sidebarView = (currentRoute: AppRoute, h: HtmlBuilder<Message>): Html =>
|
|
|
421
414
|
const mobileMenuContent = (
|
|
422
415
|
currentRoute: AppRoute,
|
|
423
416
|
closeButton: Dialog.RenderInfo['closeButton'],
|
|
424
|
-
h: HtmlBuilder<
|
|
417
|
+
h: HtmlBuilder<UiMessage>,
|
|
425
418
|
): Html =>
|
|
426
419
|
h.div(
|
|
427
420
|
[h.Class('flex flex-col h-full')],
|
|
@@ -510,17 +503,25 @@ const mobileHeaderView = (model: Model, h: HtmlBuilder<Message>): Html =>
|
|
|
510
503
|
),
|
|
511
504
|
h.AriaExpanded(model.uiModel.mobileMenuDialog.isOpen),
|
|
512
505
|
h.AriaLabel('Toggle menu'),
|
|
513
|
-
h.OnClick(
|
|
506
|
+
h.OnClick(Message.ClickedOpenMobileMenu()),
|
|
514
507
|
],
|
|
515
508
|
[Icon.menu('w-6 h-6')],
|
|
516
509
|
),
|
|
517
510
|
],
|
|
518
511
|
)
|
|
519
512
|
|
|
520
|
-
|
|
513
|
+
type MobileMenuViewInputs = Readonly<{
|
|
514
|
+
currentRoute: AppRoute
|
|
515
|
+
}>
|
|
516
|
+
|
|
517
|
+
const mobileMenuDialogView = Submodel.defineView<
|
|
518
|
+
UiModel,
|
|
519
|
+
UiMessage,
|
|
520
|
+
MobileMenuViewInputs
|
|
521
|
+
>((model, { currentRoute }, h): Html =>
|
|
521
522
|
h.submodel({
|
|
522
|
-
slotId: model.
|
|
523
|
-
model: model.
|
|
523
|
+
slotId: model.mobileMenuDialog.id,
|
|
524
|
+
model: model.mobileMenuDialog,
|
|
524
525
|
view: Dialog.view,
|
|
525
526
|
viewInputs: {
|
|
526
527
|
toView: ({ dialog, backdrop, panel, closeButton, isVisible }) =>
|
|
@@ -534,13 +535,24 @@ const mobileMenuView = (model: Model, h: HtmlBuilder<Message>): Html =>
|
|
|
534
535
|
...panel,
|
|
535
536
|
h.Class('fixed inset-0 z-[60] bg-white flex flex-col'),
|
|
536
537
|
],
|
|
537
|
-
[mobileMenuContent(
|
|
538
|
+
[mobileMenuContent(currentRoute, closeButton, h)],
|
|
538
539
|
),
|
|
539
540
|
]
|
|
540
541
|
: [],
|
|
541
542
|
),
|
|
542
543
|
},
|
|
543
|
-
toParentMessage: message =>
|
|
544
|
+
toParentMessage: message =>
|
|
545
|
+
UiMessage.GotMobileMenuDialogMessage({ message }),
|
|
546
|
+
}),
|
|
547
|
+
)
|
|
548
|
+
|
|
549
|
+
const mobileMenuView = (model: Model, h: HtmlBuilder<Message>): Html =>
|
|
550
|
+
h.submodel({
|
|
551
|
+
slotId: 'mobile-menu',
|
|
552
|
+
model: model.uiModel,
|
|
553
|
+
view: mobileMenuDialogView,
|
|
554
|
+
viewInputs: { currentRoute: model.route },
|
|
555
|
+
toParentMessage: toUiMessage,
|
|
544
556
|
})
|
|
545
557
|
|
|
546
558
|
const homeView = (h: HtmlBuilder<Message>): Html =>
|
|
@@ -626,9 +638,9 @@ const contentView = (model: Model, h: HtmlBuilder<Message>): Html => {
|
|
|
626
638
|
}
|
|
627
639
|
|
|
628
640
|
const routeTitle = (route: Model['route']): string =>
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
641
|
+
Match.value(route).pipe(
|
|
642
|
+
Match.tag('Home', () => 'Foldkit UI Showcase'),
|
|
643
|
+
Match.orElse(({ _tag }) => `${_tag} | Foldkit UI Showcase`),
|
|
632
644
|
)
|
|
633
645
|
|
|
634
646
|
export const view = (model: Model, h: HtmlBuilder<Message>): Document => ({
|
|
@@ -71,7 +71,7 @@ describe('view', () => {
|
|
|
71
71
|
{ update, view },
|
|
72
72
|
given(modelForRoute(AppRoute.HoverIntent())),
|
|
73
73
|
expect(role('heading', { name: 'Hover Intent' })).toExist(),
|
|
74
|
-
expect(role('button', { name: '
|
|
74
|
+
expect(role('button', { name: 'More information' })).toExist(),
|
|
75
75
|
)
|
|
76
76
|
})
|
|
77
77
|
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
VirtualList,
|
|
21
21
|
} from '@foldkit/ui'
|
|
22
22
|
|
|
23
|
-
import type { UiMessage } from './message'
|
|
23
|
+
import type { Message as UiMessage } from './message'
|
|
24
24
|
import type { UiModel } from './model'
|
|
25
25
|
import { Toast } from './toast'
|
|
26
26
|
|
|
@@ -173,7 +173,6 @@ export const uiInit = (today: Calendar.CalendarDate): InitReturn => ({
|
|
|
173
173
|
showDelay: 0,
|
|
174
174
|
}),
|
|
175
175
|
animationDemo: Animation.init({ id: 'animation-demo' }),
|
|
176
|
-
isAnimationDemoShowing: false,
|
|
177
176
|
virtualListDemo: VirtualList.init({
|
|
178
177
|
id: 'virtual-list-demo',
|
|
179
178
|
rowHeightPx: 56,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Schema
|
|
1
|
+
import { Schema } from 'effect'
|
|
2
2
|
import { defineMessageUnion } from 'foldkit/message'
|
|
3
3
|
|
|
4
4
|
import {
|
|
@@ -22,21 +22,20 @@ import {
|
|
|
22
22
|
|
|
23
23
|
import { Toast } from './toast'
|
|
24
24
|
|
|
25
|
-
export const
|
|
25
|
+
export const Message = defineMessageUnion({
|
|
26
26
|
GotMobileMenuDialogMessage: { message: Dialog.Message },
|
|
27
|
-
ClickedOpenMobileMenu: {},
|
|
28
27
|
ClickedButtonDemo: {},
|
|
29
28
|
GotAnimationDemoMessage: { message: Animation.Message },
|
|
30
29
|
ToggledAnimationDemo: {},
|
|
31
|
-
UpdatedInputDemoValue: { value:
|
|
32
|
-
UpdatedTextareaDemoValue: { value:
|
|
33
|
-
UpdatedFieldsetInputValue: { value:
|
|
34
|
-
UpdatedFieldsetTextareaValue: { value:
|
|
35
|
-
ToggledFieldsetCheckboxDemo: { isChecked:
|
|
36
|
-
ToggledCheckboxBasicDemo: { isChecked:
|
|
37
|
-
ToggledCheckboxAllDemo: { isChecked:
|
|
38
|
-
ToggledCheckboxOptionADemo: { isChecked:
|
|
39
|
-
ToggledCheckboxOptionBDemo: { isChecked:
|
|
30
|
+
UpdatedInputDemoValue: { value: Schema.String },
|
|
31
|
+
UpdatedTextareaDemoValue: { value: Schema.String },
|
|
32
|
+
UpdatedFieldsetInputValue: { value: Schema.String },
|
|
33
|
+
UpdatedFieldsetTextareaValue: { value: Schema.String },
|
|
34
|
+
ToggledFieldsetCheckboxDemo: { isChecked: Schema.Boolean },
|
|
35
|
+
ToggledCheckboxBasicDemo: { isChecked: Schema.Boolean },
|
|
36
|
+
ToggledCheckboxAllDemo: { isChecked: Schema.Boolean },
|
|
37
|
+
ToggledCheckboxOptionADemo: { isChecked: Schema.Boolean },
|
|
38
|
+
ToggledCheckboxOptionBDemo: { isChecked: Schema.Boolean },
|
|
40
39
|
GotComboboxDemoMessage: { message: Combobox.Message },
|
|
41
40
|
GotComboboxNullableDemoMessage: { message: Combobox.Message },
|
|
42
41
|
GotComboboxMultiDemoMessage: { message: Combobox.Message },
|
|
@@ -53,13 +52,13 @@ export const UiMessage = defineMessageUnion({
|
|
|
53
52
|
ClickedOpenAnimatedDialog: {},
|
|
54
53
|
ClickedEditFilters: {},
|
|
55
54
|
ClickedOpenProjectSettings: {},
|
|
56
|
-
ToggledDisclosureBasicDemo: { isOpen:
|
|
57
|
-
ToggledDisclosureAnimatedDemo: { isOpen:
|
|
55
|
+
ToggledDisclosureBasicDemo: { isOpen: Schema.Boolean },
|
|
56
|
+
ToggledDisclosureAnimatedDemo: { isOpen: Schema.Boolean },
|
|
58
57
|
GotCalendarBasicDemoMessage: { message: Calendar.Message },
|
|
59
58
|
GotDatePickerBasicDemoMessage: { message: DatePicker.Message },
|
|
60
59
|
GotDragAndDropDemoMessage: { message: DragAndDrop.Message },
|
|
61
60
|
GotFileDropBasicDemoMessage: { message: FileDrop.Message },
|
|
62
|
-
ClickedRemoveFileDropDemoFile: { fileIndex:
|
|
61
|
+
ClickedRemoveFileDropDemoFile: { fileIndex: Schema.Number },
|
|
63
62
|
GotHoverIntentDemoMessage: { message: HoverIntent.Message },
|
|
64
63
|
GotListboxDemoMessage: { message: Listbox.Message },
|
|
65
64
|
GotListboxMultiDemoMessage: { message: Listbox.Message },
|
|
@@ -72,10 +71,10 @@ export const UiMessage = defineMessageUnion({
|
|
|
72
71
|
GotPopoverNestedChildDemoMessage: { message: Popover.Message },
|
|
73
72
|
GotVerticalRadioGroupDemoMessage: { message: RadioGroup.Message },
|
|
74
73
|
GotHorizontalRadioGroupDemoMessage: { message: RadioGroup.Message },
|
|
75
|
-
UpdatedSelectDemoValue: { value:
|
|
74
|
+
UpdatedSelectDemoValue: { value: Schema.String },
|
|
76
75
|
GotSliderRatingDemoMessage: { message: Slider.Message },
|
|
77
76
|
GotSliderVolumeDemoMessage: { message: Slider.Message },
|
|
78
|
-
ToggledSwitchDemo: { isChecked:
|
|
77
|
+
ToggledSwitchDemo: { isChecked: Schema.Boolean },
|
|
79
78
|
GotHorizontalTabsDemoMessage: { message: Tabs.Message },
|
|
80
79
|
GotVerticalTabsDemoMessage: { message: Tabs.Message },
|
|
81
80
|
GotToastDemoMessage: { message: Toast.Message },
|
|
@@ -93,4 +92,4 @@ export const UiMessage = defineMessageUnion({
|
|
|
93
92
|
ClickedVirtualListVariableScrollToMiddle: {},
|
|
94
93
|
})
|
|
95
94
|
|
|
96
|
-
export type
|
|
95
|
+
export type Message = typeof Message.Type
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Schema
|
|
1
|
+
import { Schema } from 'effect'
|
|
2
2
|
import { File, Calendar as FoldkitCalendar } from 'foldkit'
|
|
3
3
|
|
|
4
4
|
import {
|
|
@@ -22,13 +22,13 @@ import {
|
|
|
22
22
|
|
|
23
23
|
import { Toast } from './toast'
|
|
24
24
|
|
|
25
|
-
export const Plan =
|
|
25
|
+
export const Plan = Schema.Literals(['Startup', 'Business', 'Enterprise'])
|
|
26
26
|
export type Plan = typeof Plan.Type
|
|
27
27
|
|
|
28
|
-
export const DemoTab =
|
|
28
|
+
export const DemoTab = Schema.Literals(['Foldkit', 'React', 'Elm'])
|
|
29
29
|
export type DemoTab = typeof DemoTab.Type
|
|
30
30
|
|
|
31
|
-
export const City =
|
|
31
|
+
export const City = Schema.Literals([
|
|
32
32
|
'Johannesburg',
|
|
33
33
|
'Kyiv',
|
|
34
34
|
'Oxford',
|
|
@@ -39,7 +39,7 @@ export const City = S.Literals([
|
|
|
39
39
|
])
|
|
40
40
|
export type City = typeof City.Type
|
|
41
41
|
|
|
42
|
-
export const ListboxItem =
|
|
42
|
+
export const ListboxItem = Schema.Literals([
|
|
43
43
|
'Michael Bluth',
|
|
44
44
|
'Lindsay Funke',
|
|
45
45
|
'Gob Bluth',
|
|
@@ -51,64 +51,68 @@ export const ListboxItem = S.Literals([
|
|
|
51
51
|
])
|
|
52
52
|
export type ListboxItem = typeof ListboxItem.Type
|
|
53
53
|
|
|
54
|
-
export const DemoCard =
|
|
55
|
-
id:
|
|
56
|
-
label:
|
|
54
|
+
export const DemoCard = Schema.Struct({
|
|
55
|
+
id: Schema.String,
|
|
56
|
+
label: Schema.String,
|
|
57
57
|
})
|
|
58
58
|
export type DemoCard = typeof DemoCard.Type
|
|
59
59
|
|
|
60
|
-
export const DemoColumn =
|
|
61
|
-
id:
|
|
62
|
-
label:
|
|
63
|
-
cards:
|
|
60
|
+
export const DemoColumn = Schema.Struct({
|
|
61
|
+
id: Schema.String,
|
|
62
|
+
label: Schema.String,
|
|
63
|
+
cards: Schema.Array(DemoCard),
|
|
64
64
|
})
|
|
65
65
|
export type DemoColumn = typeof DemoColumn.Type
|
|
66
66
|
|
|
67
|
-
export const UiModel =
|
|
67
|
+
export const UiModel = Schema.Struct({
|
|
68
68
|
mobileMenuDialog: Dialog.Model,
|
|
69
|
-
buttonClickCount:
|
|
70
|
-
inputDemoValue:
|
|
71
|
-
textareaDemoValue:
|
|
72
|
-
fieldsetInputValue:
|
|
73
|
-
fieldsetTextareaValue:
|
|
74
|
-
isFieldsetCheckboxDemoChecked:
|
|
69
|
+
buttonClickCount: Schema.Number,
|
|
70
|
+
inputDemoValue: Schema.String,
|
|
71
|
+
textareaDemoValue: Schema.String,
|
|
72
|
+
fieldsetInputValue: Schema.String,
|
|
73
|
+
fieldsetTextareaValue: Schema.String,
|
|
74
|
+
isFieldsetCheckboxDemoChecked: Schema.Boolean,
|
|
75
75
|
calendarBasicDemo: Calendar.Model,
|
|
76
|
-
maybeCalendarBasicDemoSelectedDate:
|
|
76
|
+
maybeCalendarBasicDemoSelectedDate: Schema.Option(
|
|
77
|
+
FoldkitCalendar.CalendarDate,
|
|
78
|
+
),
|
|
77
79
|
datePickerBasicDemo: DatePicker.Model,
|
|
78
|
-
maybeDatePickerBasicDemoSelectedDate:
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
maybeDatePickerBasicDemoSelectedDate: Schema.Option(
|
|
81
|
+
FoldkitCalendar.CalendarDate,
|
|
82
|
+
),
|
|
83
|
+
isCheckboxBasicDemoChecked: Schema.Boolean,
|
|
84
|
+
isCheckboxOptionADemoChecked: Schema.Boolean,
|
|
85
|
+
isCheckboxOptionBDemoChecked: Schema.Boolean,
|
|
82
86
|
comboboxDemo: Combobox.Model,
|
|
83
|
-
maybeComboboxDemoSelectedCity:
|
|
87
|
+
maybeComboboxDemoSelectedCity: Schema.Option(City),
|
|
84
88
|
comboboxNullableDemo: Combobox.Model,
|
|
85
|
-
maybeComboboxNullableDemoSelectedCity:
|
|
89
|
+
maybeComboboxNullableDemoSelectedCity: Schema.Option(City),
|
|
86
90
|
comboboxMultiDemo: Combobox.Multi.Model,
|
|
87
|
-
comboboxMultiDemoSelectedCities:
|
|
91
|
+
comboboxMultiDemoSelectedCities: Schema.Array(City),
|
|
88
92
|
comboboxPlacementLockDemo: Combobox.Model,
|
|
89
|
-
maybeComboboxPlacementLockDemoSelectedCity:
|
|
93
|
+
maybeComboboxPlacementLockDemoSelectedCity: Schema.Option(City),
|
|
90
94
|
comboboxSelectOnFocusDemo: Combobox.Model,
|
|
91
|
-
maybeComboboxSelectOnFocusDemoSelectedCity:
|
|
95
|
+
maybeComboboxSelectOnFocusDemoSelectedCity: Schema.Option(City),
|
|
92
96
|
dialogDemo: Dialog.Model,
|
|
93
97
|
dialogAnimatedDemo: Dialog.Model,
|
|
94
98
|
overlayDialogDemo: Dialog.Model,
|
|
95
99
|
overlayComboboxDemo: Combobox.Model,
|
|
96
|
-
maybeOverlayComboboxDemoSelectedCity:
|
|
100
|
+
maybeOverlayComboboxDemoSelectedCity: Schema.Option(City),
|
|
97
101
|
nestedDialogParentDemo: Dialog.Model,
|
|
98
102
|
nestedDialogChildDemo: Dialog.Model,
|
|
99
|
-
isDisclosureBasicDemoOpen:
|
|
100
|
-
isDisclosureAnimatedDemoOpen:
|
|
103
|
+
isDisclosureBasicDemoOpen: Schema.Boolean,
|
|
104
|
+
isDisclosureAnimatedDemoOpen: Schema.Boolean,
|
|
101
105
|
dragAndDropDemo: DragAndDrop.Model,
|
|
102
|
-
dragAndDropDemoColumns:
|
|
106
|
+
dragAndDropDemoColumns: Schema.Array(DemoColumn),
|
|
103
107
|
fileDropBasicDemo: FileDrop.Model,
|
|
104
|
-
fileDropBasicDemoFiles:
|
|
108
|
+
fileDropBasicDemoFiles: Schema.Array(File.File),
|
|
105
109
|
hoverIntentDemo: HoverIntent.Model,
|
|
106
110
|
listboxDemo: Listbox.Model,
|
|
107
|
-
maybeListboxDemoSelectedItem:
|
|
111
|
+
maybeListboxDemoSelectedItem: Schema.Option(ListboxItem),
|
|
108
112
|
listboxMultiDemo: Listbox.Multi.Model,
|
|
109
|
-
listboxMultiDemoSelectedItems:
|
|
113
|
+
listboxMultiDemoSelectedItems: Schema.Array(ListboxItem),
|
|
110
114
|
listboxGroupedDemo: Listbox.Model,
|
|
111
|
-
maybeListboxGroupedDemoSelectedItem:
|
|
115
|
+
maybeListboxGroupedDemoSelectedItem: Schema.Option(Schema.String),
|
|
112
116
|
menuBasicDemo: Menu.Model,
|
|
113
117
|
menuAnimatedDemo: Menu.Model,
|
|
114
118
|
popoverBasicDemo: Popover.Model,
|
|
@@ -116,15 +120,15 @@ export const UiModel = S.Struct({
|
|
|
116
120
|
popoverNestedParentDemo: Popover.Model,
|
|
117
121
|
popoverNestedChildDemo: Popover.Model,
|
|
118
122
|
verticalRadioGroupDemo: RadioGroup.Model,
|
|
119
|
-
verticalRadioGroupDemoValue:
|
|
123
|
+
verticalRadioGroupDemoValue: Schema.Option(Plan),
|
|
120
124
|
horizontalRadioGroupDemo: RadioGroup.Model,
|
|
121
|
-
horizontalRadioGroupDemoValue:
|
|
122
|
-
selectDemoValue:
|
|
125
|
+
horizontalRadioGroupDemoValue: Schema.Option(Plan),
|
|
126
|
+
selectDemoValue: Schema.String,
|
|
123
127
|
sliderRatingDemo: Slider.Model,
|
|
124
|
-
sliderRatingValue:
|
|
128
|
+
sliderRatingValue: Schema.Number,
|
|
125
129
|
sliderVolumeDemo: Slider.Model,
|
|
126
|
-
sliderVolumeValue:
|
|
127
|
-
isSwitchDemoChecked:
|
|
130
|
+
sliderVolumeValue: Schema.Number,
|
|
131
|
+
isSwitchDemoChecked: Schema.Boolean,
|
|
128
132
|
horizontalTabsDemo: Tabs.Model,
|
|
129
133
|
horizontalTabsDemoTab: DemoTab,
|
|
130
134
|
verticalTabsDemo: Tabs.Model,
|
|
@@ -133,7 +137,6 @@ export const UiModel = S.Struct({
|
|
|
133
137
|
tooltipBasicDemo: Tooltip.Model,
|
|
134
138
|
tooltipNoDelayDemo: Tooltip.Model,
|
|
135
139
|
animationDemo: Animation.Model,
|
|
136
|
-
isAnimationDemoShowing: S.Boolean,
|
|
137
140
|
virtualListDemo: VirtualList.Model,
|
|
138
141
|
virtualListVariableDemo: VirtualList.Model,
|
|
139
142
|
})
|
|
@@ -2,7 +2,7 @@ import { Subscription } from 'foldkit'
|
|
|
2
2
|
|
|
3
3
|
import { DragAndDrop, Slider, VirtualList } from '@foldkit/ui'
|
|
4
4
|
|
|
5
|
-
import { UiMessage } from './message'
|
|
5
|
+
import { Message as UiMessage } from './message'
|
|
6
6
|
import type { UiModel } from './model'
|
|
7
7
|
|
|
8
8
|
const dragAndDropSubscriptions = Subscription.lift({
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { Schema
|
|
1
|
+
import { Schema } from 'effect'
|
|
2
2
|
|
|
3
3
|
import { Toast as UiToast } from '@foldkit/ui'
|
|
4
4
|
|
|
5
5
|
/** Payload shape for the showcase's toast stack. Consumer decides what goes
|
|
6
6
|
* in each entry; the Toast component owns only lifecycle and a11y. */
|
|
7
|
-
export const ToastPayload =
|
|
8
|
-
title:
|
|
9
|
-
maybeDescription:
|
|
7
|
+
export const ToastPayload = Schema.Struct({
|
|
8
|
+
title: Schema.String,
|
|
9
|
+
maybeDescription: Schema.Option(Schema.String),
|
|
10
10
|
})
|
|
11
11
|
export type ToastPayload = typeof ToastPayload.Type
|
|
12
12
|
|