foldkit 0.100.1 → 0.102.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.
- package/README.md +3 -2
- package/dist/canvas/view.d.ts +1 -1
- package/dist/canvas/view.d.ts.map +1 -1
- package/dist/canvas/view.js +5 -5
- package/dist/command/index.d.ts +71 -0
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +34 -1
- package/dist/command/public.d.ts +1 -1
- package/dist/command/public.d.ts.map +1 -1
- package/dist/command/public.js +1 -1
- package/dist/devTools/overlay.d.ts.map +1 -1
- package/dist/devTools/overlay.js +156 -149
- package/dist/dom/dom.d.ts +8 -11
- package/dist/dom/dom.d.ts.map +1 -1
- package/dist/dom/dom.js +8 -11
- package/dist/dom/elementMovement.d.ts +1 -3
- package/dist/dom/elementMovement.d.ts.map +1 -1
- package/dist/dom/elementMovement.js +1 -3
- package/dist/dom/inert.d.ts +2 -4
- package/dist/dom/inert.d.ts.map +1 -1
- package/dist/dom/inert.js +2 -4
- package/dist/dom/scrollLock.d.ts +2 -2
- package/dist/dom/scrollLock.js +2 -2
- package/dist/dom/waitForAnimation.d.ts +1 -1
- package/dist/dom/waitForAnimation.js +1 -1
- package/dist/html/boundary.d.ts +98 -0
- package/dist/html/boundary.d.ts.map +1 -0
- package/dist/html/boundary.js +176 -0
- package/dist/html/childAttribute.d.ts +44 -0
- package/dist/html/childAttribute.d.ts.map +1 -0
- package/dist/html/childAttribute.js +34 -0
- package/dist/html/index.d.ts +70 -23
- package/dist/html/index.d.ts.map +1 -1
- package/dist/html/index.js +639 -575
- package/dist/html/lazy.d.ts +12 -7
- package/dist/html/lazy.d.ts.map +1 -1
- package/dist/html/lazy.js +30 -11
- package/dist/html/public.d.ts +2 -2
- package/dist/html/public.d.ts.map +1 -1
- package/dist/html/public.js +1 -1
- package/dist/html/runtimeSingleton.d.ts +72 -0
- package/dist/html/runtimeSingleton.d.ts.map +1 -0
- package/dist/html/runtimeSingleton.js +112 -0
- package/dist/html/submodel.d.ts +98 -0
- package/dist/html/submodel.d.ts.map +1 -0
- package/dist/html/submodel.js +190 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/render/render.d.ts +1 -1
- package/dist/render/render.js +1 -1
- package/dist/runtime/messagePriority.d.ts +5 -1
- package/dist/runtime/messagePriority.d.ts.map +1 -1
- package/dist/runtime/messagePriority.js +25 -4
- package/dist/runtime/runtime.d.ts +11 -11
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +118 -63
- package/dist/runtime/subscription.d.ts +139 -19
- package/dist/runtime/subscription.d.ts.map +1 -1
- package/dist/runtime/subscription.js +90 -9
- package/dist/submodel/public.d.ts +4 -0
- package/dist/submodel/public.d.ts.map +1 -0
- package/dist/submodel/public.js +1 -0
- package/dist/submodel/submodel.d.ts +32 -0
- package/dist/submodel/submodel.d.ts.map +1 -0
- package/dist/submodel/submodel.js +1 -0
- package/dist/subscription/animationFrame.d.ts +23 -26
- package/dist/subscription/animationFrame.d.ts.map +1 -1
- package/dist/subscription/animationFrame.js +17 -18
- package/dist/subscription/public.d.ts +2 -2
- package/dist/subscription/public.d.ts.map +1 -1
- package/dist/subscription/public.js +1 -1
- package/dist/test/apps/disabledButton.d.ts +4 -5
- package/dist/test/apps/disabledButton.d.ts.map +1 -1
- package/dist/test/apps/disabledButton.js +16 -16
- package/dist/test/scene.d.ts +8 -8
- package/dist/test/scene.d.ts.map +1 -1
- package/dist/test/scene.js +25 -13
- package/dist/test/story.d.ts +15 -8
- package/dist/test/story.d.ts.map +1 -1
- package/dist/test/story.js +21 -9
- package/dist/ui/animation/index.d.ts +30 -14
- package/dist/ui/animation/index.d.ts.map +1 -1
- package/dist/ui/animation/index.js +9 -19
- package/dist/ui/animation/public.d.ts +2 -2
- package/dist/ui/animation/public.d.ts.map +1 -1
- package/dist/ui/animation/public.js +1 -1
- package/dist/ui/calendar/index.d.ts +199 -84
- package/dist/ui/calendar/index.d.ts.map +1 -1
- package/dist/ui/calendar/index.js +129 -140
- package/dist/ui/calendar/public.d.ts +2 -2
- package/dist/ui/calendar/public.d.ts.map +1 -1
- package/dist/ui/calendar/public.js +1 -1
- package/dist/ui/checkbox/index.d.ts +93 -21
- package/dist/ui/checkbox/index.d.ts.map +1 -1
- package/dist/ui/checkbox/index.js +62 -33
- package/dist/ui/checkbox/public.d.ts +2 -2
- package/dist/ui/checkbox/public.d.ts.map +1 -1
- package/dist/ui/checkbox/public.js +1 -1
- package/dist/ui/combobox/multi.d.ts +35 -91
- package/dist/ui/combobox/multi.d.ts.map +1 -1
- package/dist/ui/combobox/multi.js +34 -17
- package/dist/ui/combobox/multiPublic.d.ts +2 -2
- package/dist/ui/combobox/multiPublic.d.ts.map +1 -1
- package/dist/ui/combobox/multiPublic.js +1 -1
- package/dist/ui/combobox/public.d.ts +3 -3
- package/dist/ui/combobox/public.d.ts.map +1 -1
- package/dist/ui/combobox/public.js +2 -2
- package/dist/ui/combobox/shared.d.ts +56 -31
- package/dist/ui/combobox/shared.d.ts.map +1 -1
- package/dist/ui/combobox/shared.js +333 -322
- package/dist/ui/combobox/single.d.ts +46 -93
- package/dist/ui/combobox/single.d.ts.map +1 -1
- package/dist/ui/combobox/single.js +44 -17
- package/dist/ui/datePicker/index.d.ts +256 -48
- package/dist/ui/datePicker/index.d.ts.map +1 -1
- package/dist/ui/datePicker/index.js +149 -104
- package/dist/ui/datePicker/public.d.ts +2 -2
- package/dist/ui/datePicker/public.d.ts.map +1 -1
- package/dist/ui/datePicker/public.js +1 -1
- package/dist/ui/dialog/index.d.ts +95 -39
- package/dist/ui/dialog/index.d.ts.map +1 -1
- package/dist/ui/dialog/index.js +71 -62
- package/dist/ui/dialog/public.d.ts +2 -2
- package/dist/ui/dialog/public.d.ts.map +1 -1
- package/dist/ui/dialog/public.js +1 -1
- package/dist/ui/disclosure/index.d.ts +71 -31
- package/dist/ui/disclosure/index.d.ts.map +1 -1
- package/dist/ui/disclosure/index.js +57 -62
- package/dist/ui/disclosure/public.d.ts +2 -2
- package/dist/ui/disclosure/public.d.ts.map +1 -1
- package/dist/ui/disclosure/public.js +1 -1
- package/dist/ui/dragAndDrop/index.d.ts +385 -103
- package/dist/ui/dragAndDrop/index.d.ts.map +1 -1
- package/dist/ui/dragAndDrop/index.js +26 -31
- package/dist/ui/dragAndDrop/public.d.ts +1 -1
- package/dist/ui/dragAndDrop/public.d.ts.map +1 -1
- package/dist/ui/dragAndDrop/public.js +1 -1
- package/dist/ui/fileDrop/index.d.ts +42 -46
- package/dist/ui/fileDrop/index.d.ts.map +1 -1
- package/dist/ui/fileDrop/index.js +30 -46
- package/dist/ui/fileDrop/public.d.ts +2 -2
- package/dist/ui/fileDrop/public.d.ts.map +1 -1
- package/dist/ui/fileDrop/public.js +1 -1
- package/dist/ui/listbox/multi.d.ts +39 -84
- package/dist/ui/listbox/multi.d.ts.map +1 -1
- package/dist/ui/listbox/multi.js +38 -20
- package/dist/ui/listbox/multiPublic.d.ts +2 -2
- package/dist/ui/listbox/multiPublic.d.ts.map +1 -1
- package/dist/ui/listbox/multiPublic.js +1 -1
- package/dist/ui/listbox/public.d.ts +3 -3
- package/dist/ui/listbox/public.d.ts.map +1 -1
- package/dist/ui/listbox/public.js +2 -2
- package/dist/ui/listbox/shared.d.ts +71 -30
- package/dist/ui/listbox/shared.d.ts.map +1 -1
- package/dist/ui/listbox/shared.js +319 -296
- package/dist/ui/listbox/single.d.ts +57 -85
- package/dist/ui/listbox/single.d.ts.map +1 -1
- package/dist/ui/listbox/single.js +48 -24
- package/dist/ui/menu/index.d.ts +80 -36
- package/dist/ui/menu/index.d.ts.map +1 -1
- package/dist/ui/menu/index.js +117 -86
- package/dist/ui/menu/public.d.ts +2 -2
- package/dist/ui/menu/public.d.ts.map +1 -1
- package/dist/ui/menu/public.js +1 -1
- package/dist/ui/popover/index.d.ts +117 -44
- package/dist/ui/popover/index.d.ts.map +1 -1
- package/dist/ui/popover/index.js +88 -101
- package/dist/ui/popover/public.d.ts +2 -2
- package/dist/ui/popover/public.d.ts.map +1 -1
- package/dist/ui/popover/public.js +1 -1
- package/dist/ui/radioGroup/index.d.ts +122 -45
- package/dist/ui/radioGroup/index.d.ts.map +1 -1
- package/dist/ui/radioGroup/index.js +111 -72
- package/dist/ui/radioGroup/public.d.ts +2 -2
- package/dist/ui/radioGroup/public.d.ts.map +1 -1
- package/dist/ui/radioGroup/public.js +1 -1
- package/dist/ui/slider/index.d.ts +247 -103
- package/dist/ui/slider/index.d.ts.map +1 -1
- package/dist/ui/slider/index.js +52 -68
- package/dist/ui/slider/public.d.ts +2 -2
- package/dist/ui/slider/public.d.ts.map +1 -1
- package/dist/ui/slider/public.js +1 -1
- package/dist/ui/switch/index.d.ts +74 -21
- package/dist/ui/switch/index.d.ts.map +1 -1
- package/dist/ui/switch/index.js +62 -33
- package/dist/ui/switch/public.d.ts +2 -2
- package/dist/ui/switch/public.d.ts.map +1 -1
- package/dist/ui/switch/public.js +1 -1
- package/dist/ui/tabs/index.d.ts +107 -45
- package/dist/ui/tabs/index.d.ts.map +1 -1
- package/dist/ui/tabs/index.js +99 -81
- package/dist/ui/tabs/public.d.ts +2 -2
- package/dist/ui/tabs/public.d.ts.map +1 -1
- package/dist/ui/tabs/public.js +1 -1
- package/dist/ui/toast/index.d.ts +93 -109
- package/dist/ui/toast/index.d.ts.map +1 -1
- package/dist/ui/toast/index.js +16 -29
- package/dist/ui/toast/schema.d.ts +15 -4
- package/dist/ui/toast/schema.d.ts.map +1 -1
- package/dist/ui/toast/schema.js +11 -4
- package/dist/ui/toast/update.d.ts +36 -18
- package/dist/ui/toast/update.d.ts.map +1 -1
- package/dist/ui/toast/update.js +33 -14
- package/dist/ui/tooltip/index.d.ts +94 -42
- package/dist/ui/tooltip/index.d.ts.map +1 -1
- package/dist/ui/tooltip/index.js +64 -73
- package/dist/ui/tooltip/public.d.ts +2 -2
- package/dist/ui/tooltip/public.d.ts.map +1 -1
- package/dist/ui/tooltip/public.js +1 -1
- package/dist/ui/virtualList/index.d.ts +63 -80
- package/dist/ui/virtualList/index.d.ts.map +1 -1
- package/dist/ui/virtualList/index.js +22 -49
- package/dist/ui/virtualList/public.d.ts +2 -2
- package/dist/ui/virtualList/public.d.ts.map +1 -1
- package/dist/ui/virtualList/public.js +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Function, Match as M, Option, Schema as S } from 'effect';
|
|
2
2
|
import * as Calendar from '../../calendar/index.js';
|
|
3
3
|
import * as Command from '../../command/index.js';
|
|
4
|
-
import {
|
|
4
|
+
import { defineView, html, } from '../../html/index.js';
|
|
5
5
|
import { m } from '../../message/index.js';
|
|
6
6
|
import { evo } from '../../struct/index.js';
|
|
7
7
|
import * as UiCalendar from '../calendar/index.js';
|
|
@@ -27,7 +27,9 @@ export const GotPopoverMessage = m('GotPopoverMessage', {
|
|
|
27
27
|
});
|
|
28
28
|
/** Sent when the user commits a date via click or keyboard. Updates the
|
|
29
29
|
* selected date, syncs the calendar, and closes the popover. */
|
|
30
|
-
export const
|
|
30
|
+
export const RequestedSelectDate = m('RequestedSelectDate', {
|
|
31
|
+
date: Calendar.CalendarDate,
|
|
32
|
+
});
|
|
31
33
|
/** Sent when the user clears the selected date. Does not close the popover. */
|
|
32
34
|
export const Cleared = m('Cleared');
|
|
33
35
|
/** Sent when the popover should open. Triggers focus-grid on the embedded
|
|
@@ -40,7 +42,7 @@ export const Closed = m('Closed');
|
|
|
40
42
|
export const Message = S.Union([
|
|
41
43
|
GotCalendarMessage,
|
|
42
44
|
GotPopoverMessage,
|
|
43
|
-
|
|
45
|
+
RequestedSelectDate,
|
|
44
46
|
Cleared,
|
|
45
47
|
Opened,
|
|
46
48
|
Closed,
|
|
@@ -52,10 +54,14 @@ export const ChangedViewMonth = m('ChangedViewMonth', {
|
|
|
52
54
|
year: S.Int,
|
|
53
55
|
month: S.Int,
|
|
54
56
|
});
|
|
55
|
-
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
export const
|
|
57
|
+
/** Emitted when the user commits a date selection (propagated from the
|
|
58
|
+
* embedded Calendar). The popover has already closed; the parent reads the
|
|
59
|
+
* committed date and lifts it into domain state. */
|
|
60
|
+
export const SelectedDate = m('SelectedDate', {
|
|
61
|
+
date: Calendar.CalendarDate,
|
|
62
|
+
});
|
|
63
|
+
/** Union of out-messages the date picker can produce. */
|
|
64
|
+
export const OutMessage = S.Union([ChangedViewMonth, SelectedDate]);
|
|
59
65
|
/** Creates an initial date picker model from a config. The calendar and
|
|
60
66
|
* popover submodels are created with derived ids so their DOM elements stay
|
|
61
67
|
* addressable. The popover is opened in `contentFocus` mode so focus lands on
|
|
@@ -86,26 +92,57 @@ export const init = (config) => ({
|
|
|
86
92
|
}),
|
|
87
93
|
});
|
|
88
94
|
const withUpdateReturn = M.withReturnType();
|
|
89
|
-
const mapCalendarCommands = (commands) =>
|
|
90
|
-
const mapPopoverCommands = (commands) =>
|
|
91
|
-
const mapCalendarOutMessage = (maybeOutMessage) => Option.map(maybeOutMessage, M.type().pipe(M.tagsExhaustive({
|
|
92
|
-
ChangedViewMonth: ({ year, month }) => ChangedViewMonth({ year, month }),
|
|
93
|
-
})));
|
|
95
|
+
const mapCalendarCommands = (commands) => Command.mapMessages(commands, message => GotCalendarMessage({ message }));
|
|
96
|
+
const mapPopoverCommands = (commands) => Command.mapMessages(commands, message => GotPopoverMessage({ message }));
|
|
94
97
|
const delegateToCalendar = (model, calendarMessage) => {
|
|
95
98
|
const [nextCalendar, calendarCommands, maybeCalendarOutMessage] = UiCalendar.update(model.calendar, calendarMessage);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
const modelWithCalendar = evo(model, { calendar: () => nextCalendar });
|
|
100
|
+
return Option.match(maybeCalendarOutMessage, {
|
|
101
|
+
onNone: () => [
|
|
102
|
+
modelWithCalendar,
|
|
103
|
+
mapCalendarCommands(calendarCommands),
|
|
104
|
+
Option.none(),
|
|
105
|
+
],
|
|
106
|
+
onSome: M.type().pipe(M.withReturnType(), M.tagsExhaustive({
|
|
107
|
+
ChangedViewMonth: ({ year, month }) => [
|
|
108
|
+
modelWithCalendar,
|
|
109
|
+
mapCalendarCommands(calendarCommands),
|
|
110
|
+
Option.some(ChangedViewMonth({ year, month })),
|
|
111
|
+
],
|
|
112
|
+
SelectedDate: ({ date }) => {
|
|
113
|
+
const [nextPopover, popoverCommands] = Popover.close(model.popover);
|
|
114
|
+
return [
|
|
115
|
+
evo(modelWithCalendar, {
|
|
116
|
+
maybeSelectedDate: () => Option.some(date),
|
|
117
|
+
popover: () => nextPopover,
|
|
118
|
+
}),
|
|
119
|
+
[
|
|
120
|
+
...mapCalendarCommands(calendarCommands),
|
|
121
|
+
...mapPopoverCommands(popoverCommands),
|
|
122
|
+
],
|
|
123
|
+
Option.some(SelectedDate({ date })),
|
|
124
|
+
];
|
|
125
|
+
},
|
|
126
|
+
})),
|
|
127
|
+
});
|
|
101
128
|
};
|
|
102
129
|
const delegateToPopover = (model, popoverMessage) => {
|
|
103
|
-
const [nextPopover, popoverCommands] = Popover.update(model.popover, popoverMessage);
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
130
|
+
const [nextPopover, popoverCommands, maybePopoverOutMessage] = Popover.update(model.popover, popoverMessage);
|
|
131
|
+
const modelWithPopover = evo(model, { popover: () => nextPopover });
|
|
132
|
+
return Option.match(maybePopoverOutMessage, {
|
|
133
|
+
onNone: () => [
|
|
134
|
+
modelWithPopover,
|
|
135
|
+
mapPopoverCommands(popoverCommands),
|
|
136
|
+
Option.none(),
|
|
137
|
+
],
|
|
138
|
+
onSome: () => [
|
|
139
|
+
evo(modelWithPopover, {
|
|
140
|
+
calendar: () => UiCalendar.dropToDays(modelWithPopover.calendar),
|
|
141
|
+
}),
|
|
142
|
+
mapPopoverCommands(popoverCommands),
|
|
143
|
+
Option.none(),
|
|
144
|
+
],
|
|
145
|
+
});
|
|
109
146
|
};
|
|
110
147
|
/** Processes a date picker message and returns the next model, commands, and
|
|
111
148
|
* optional OutMessage. */
|
|
@@ -134,7 +171,7 @@ export const update = (model, message) => M.value(message).pipe(withUpdateReturn
|
|
|
134
171
|
Option.none(),
|
|
135
172
|
];
|
|
136
173
|
},
|
|
137
|
-
|
|
174
|
+
RequestedSelectDate: ({ date }) => {
|
|
138
175
|
const [nextCalendar, calendarCommands] = UiCalendar.selectDate(model.calendar, date);
|
|
139
176
|
const [nextPopover, popoverCommands] = Popover.close(model.popover);
|
|
140
177
|
return [
|
|
@@ -147,105 +184,123 @@ export const update = (model, message) => M.value(message).pipe(withUpdateReturn
|
|
|
147
184
|
...mapCalendarCommands(calendarCommands),
|
|
148
185
|
...mapPopoverCommands(popoverCommands),
|
|
149
186
|
],
|
|
150
|
-
Option.
|
|
187
|
+
Option.some(SelectedDate({ date })),
|
|
151
188
|
];
|
|
152
189
|
},
|
|
153
190
|
Cleared: () => [
|
|
154
|
-
evo(model, {
|
|
191
|
+
evo(model, {
|
|
192
|
+
maybeSelectedDate: () => Option.none(),
|
|
193
|
+
calendar: UiCalendar.reflectSelectedDate(Option.none()),
|
|
194
|
+
}),
|
|
155
195
|
[],
|
|
156
196
|
Option.none(),
|
|
157
197
|
],
|
|
158
198
|
}));
|
|
159
199
|
/** Programmatically opens the date picker, updating the model and returning
|
|
160
200
|
* focus and popover commands. Use this in domain-event handlers. */
|
|
161
|
-
export const open = (model) =>
|
|
162
|
-
const [nextModel, commands] = toModelAndCommands(update(model, Opened()));
|
|
163
|
-
return [nextModel, commands];
|
|
164
|
-
};
|
|
201
|
+
export const open = (model) => update(model, Opened());
|
|
165
202
|
/** Programmatically closes the date picker. Use this in domain-event handlers. */
|
|
166
|
-
export const close = (model) =>
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
};
|
|
170
|
-
/** Programmatically selects a date, committing it and closing the popover. */
|
|
171
|
-
export const selectDate = (model, date) => {
|
|
172
|
-
const [nextModel, commands] = toModelAndCommands(update(model, SelectedDate({ date })));
|
|
173
|
-
return [nextModel, commands];
|
|
174
|
-
};
|
|
203
|
+
export const close = (model) => update(model, Closed());
|
|
204
|
+
/** Programmatically selects a date, committing it and closing the popover. Emits a `SelectedDate` OutMessage just like a user-initiated selection. */
|
|
205
|
+
export const selectDate = (model, date) => update(model, RequestedSelectDate({ date }));
|
|
175
206
|
/** Programmatically clears the selected date. */
|
|
176
|
-
export const clear = (model) =>
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
207
|
+
export const clear = (model) => update(model, Cleared());
|
|
208
|
+
/** Reflects an externally-sourced selected date onto the date picker
|
|
209
|
+
* without emitting an OutMessage or touching the popover. Sets the
|
|
210
|
+
* picker's selection and reflects it onto the embedded calendar (moving
|
|
211
|
+
* the calendar's view to the date), mirroring `selectDate`'s state change
|
|
212
|
+
* minus the `SelectedDate` announcement and the popover close. Pass
|
|
213
|
+
* `Option.none()` to clear. Use this to mirror external truth (a URL
|
|
214
|
+
* parameter, a saved draft) onto the picker. Contrast with `selectDate`,
|
|
215
|
+
* a user or programmatic *choice* that emits `SelectedDate`. Returns the
|
|
216
|
+
* model directly because it produces no commands and no OutMessage. */
|
|
217
|
+
export const reflectSelectedDate = Function.dual(2, (model, maybeDate) => evo(model, {
|
|
218
|
+
maybeSelectedDate: () => maybeDate,
|
|
219
|
+
calendar: () => UiCalendar.reflectSelectedDate(model.calendar, maybeDate),
|
|
220
|
+
}));
|
|
221
|
+
/** Reflects the minimum selectable date onto the embedded calendar. Pass
|
|
181
222
|
* `Option.none()` to remove the minimum. Use this when the minimum derives
|
|
182
223
|
* from other Model state (e.g. a start date field whose current selection
|
|
183
224
|
* constrains an end date picker).
|
|
184
225
|
*
|
|
185
|
-
* Does NOT reconcile the current selection
|
|
226
|
+
* Does NOT reconcile the current selection. If a previously-selected date
|
|
186
227
|
* is now below the new minimum, it remains selected. Callers should `clear`
|
|
187
228
|
* or reassign the selection explicitly if their domain requires it. */
|
|
188
|
-
export const
|
|
189
|
-
calendar: () => UiCalendar.
|
|
190
|
-
});
|
|
191
|
-
/**
|
|
229
|
+
export const reflectMinDate = Function.dual(2, (model, maybeMinDate) => evo(model, {
|
|
230
|
+
calendar: () => UiCalendar.reflectMinDate(model.calendar, maybeMinDate),
|
|
231
|
+
}));
|
|
232
|
+
/** Reflects the maximum selectable date onto the embedded calendar. Pass
|
|
192
233
|
* `Option.none()` to remove the maximum. Does NOT reconcile the current
|
|
193
234
|
* selection. */
|
|
194
|
-
export const
|
|
195
|
-
calendar: () => UiCalendar.
|
|
196
|
-
});
|
|
197
|
-
/**
|
|
198
|
-
* Pass an empty array to clear. Does NOT reconcile the current
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
235
|
+
export const reflectMaxDate = Function.dual(2, (model, maybeMaxDate) => evo(model, {
|
|
236
|
+
calendar: () => UiCalendar.reflectMaxDate(model.calendar, maybeMaxDate),
|
|
237
|
+
}));
|
|
238
|
+
/** Reflects the list of individually-disabled dates onto the embedded
|
|
239
|
+
* calendar. Pass an empty array to clear. Does NOT reconcile the current
|
|
240
|
+
* selection. */
|
|
241
|
+
export const reflectDisabledDates = Function.dual(2, (model, disabledDates) => evo(model, {
|
|
242
|
+
calendar: () => UiCalendar.reflectDisabledDates(model.calendar, disabledDates),
|
|
243
|
+
}));
|
|
244
|
+
/** Reflects the days of the week that are disabled onto the embedded calendar
|
|
203
245
|
* (e.g. weekends). Pass an empty array to clear. Does NOT reconcile the
|
|
204
246
|
* current selection. */
|
|
205
|
-
export const
|
|
206
|
-
calendar: () => UiCalendar.
|
|
207
|
-
});
|
|
208
|
-
const toModelAndCommands = (result) => {
|
|
209
|
-
const [nextModel, commands] = result;
|
|
210
|
-
return [nextModel, commands];
|
|
211
|
-
};
|
|
247
|
+
export const reflectDisabledDaysOfWeek = Function.dual(2, (model, disabledDaysOfWeek) => evo(model, {
|
|
248
|
+
calendar: () => UiCalendar.reflectDisabledDaysOfWeek(model.calendar, disabledDaysOfWeek),
|
|
249
|
+
}));
|
|
212
250
|
// VIEW
|
|
213
251
|
const encodeIsoDate = S.encodeSync(Calendar.CalendarDateFromIsoString);
|
|
214
252
|
/** Renders an accessible date picker: a trigger button that opens a popover
|
|
215
253
|
* containing an accessible calendar grid. The date picker assembles the
|
|
216
|
-
* embedded Calendar and Popover components into one flat API
|
|
254
|
+
* embedded Calendar and Popover components into one flat API. Consumers
|
|
217
255
|
* provide the trigger face and the calendar grid layout, DatePicker handles
|
|
218
256
|
* focus choreography, open/close state, and form submission. */
|
|
219
|
-
export const view = (
|
|
257
|
+
export const view = defineView((model, viewInputs) => {
|
|
220
258
|
const h = html();
|
|
221
|
-
const {
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
: toParentMessage(SelectedDate({ date }));
|
|
225
|
-
const calendarVNode = UiCalendar.view({
|
|
259
|
+
const { anchor, triggerContent, toCalendarView, isDisabled, name, className, attributes = [], triggerClassName, triggerAttributes = [], panelClassName, panelAttributes = [], backdropClassName, backdropAttributes = [], } = viewInputs;
|
|
260
|
+
const calendarVNode = h.submodel({
|
|
261
|
+
slotId: model.calendar.id,
|
|
226
262
|
model: model.calendar,
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
263
|
+
view: UiCalendar.view,
|
|
264
|
+
viewInputs: { toView: toCalendarView },
|
|
265
|
+
toParentMessage: message => GotCalendarMessage({ message }),
|
|
230
266
|
});
|
|
231
|
-
const popoverVNode =
|
|
267
|
+
const popoverVNode = h.submodel({
|
|
268
|
+
slotId: model.popover.id,
|
|
232
269
|
model: model.popover,
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
270
|
+
view: Popover.view,
|
|
271
|
+
viewInputs: {
|
|
272
|
+
anchor,
|
|
273
|
+
...(isDisabled !== undefined && { isDisabled }),
|
|
274
|
+
focusSelector: `#${model.calendar.id}-grid`,
|
|
275
|
+
toView: ({ button, panel, backdrop, isVisible }) => h.div([], [
|
|
276
|
+
h.button([
|
|
277
|
+
...button,
|
|
278
|
+
...(triggerClassName !== undefined
|
|
279
|
+
? [h.Class(triggerClassName)]
|
|
280
|
+
: []),
|
|
281
|
+
...triggerAttributes,
|
|
282
|
+
], [triggerContent(model.maybeSelectedDate)]),
|
|
283
|
+
...(isVisible
|
|
284
|
+
? [
|
|
285
|
+
h.div([
|
|
286
|
+
...backdrop,
|
|
287
|
+
...(backdropClassName !== undefined
|
|
288
|
+
? [h.Class(backdropClassName)]
|
|
289
|
+
: []),
|
|
290
|
+
...backdropAttributes,
|
|
291
|
+
], []),
|
|
292
|
+
h.div([
|
|
293
|
+
...panel,
|
|
294
|
+
...(panelClassName !== undefined
|
|
295
|
+
? [h.Class(panelClassName)]
|
|
296
|
+
: []),
|
|
297
|
+
...panelAttributes,
|
|
298
|
+
], [calendarVNode]),
|
|
299
|
+
]
|
|
300
|
+
: []),
|
|
301
|
+
]),
|
|
302
|
+
},
|
|
303
|
+
toParentMessage: message => GotPopoverMessage({ message }),
|
|
249
304
|
});
|
|
250
305
|
const hiddenInputValue = Option.match(model.maybeSelectedDate, {
|
|
251
306
|
onNone: () => '',
|
|
@@ -259,14 +314,4 @@ export const view = (config) => {
|
|
|
259
314
|
...attributes,
|
|
260
315
|
];
|
|
261
316
|
return h.div(wrapperAttributes, [popoverVNode, ...maybeHiddenInput]);
|
|
262
|
-
};
|
|
263
|
-
/** Creates a memoized date picker view. Static config is captured in a closure;
|
|
264
|
-
* only `model` and `toParentMessage` are compared per render via `createLazy`. */
|
|
265
|
-
export const lazy = (staticConfig) => {
|
|
266
|
-
const lazyView = createLazy();
|
|
267
|
-
return (model, toParentMessage) => lazyView((currentModel, currentToParentMessage) => view({
|
|
268
|
-
...staticConfig,
|
|
269
|
-
model: currentModel,
|
|
270
|
-
toParentMessage: currentToParentMessage,
|
|
271
|
-
}), [model, toParentMessage]);
|
|
272
|
-
};
|
|
317
|
+
});
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { init, update, view,
|
|
2
|
-
export type { InitConfig,
|
|
1
|
+
export { init, update, view, open, close, selectDate, clear, reflectSelectedDate, reflectMinDate, reflectMaxDate, reflectDisabledDates, reflectDisabledDaysOfWeek, Model, Message, OutMessage, GotCalendarMessage, GotPopoverMessage, RequestedSelectDate, SelectedDate, Cleared, Opened, Closed, ChangedViewMonth, } from './index.js';
|
|
2
|
+
export type { InitConfig, ViewInputs } from './index.js';
|
|
3
3
|
//# sourceMappingURL=public.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/ui/datePicker/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/ui/datePicker/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,UAAU,EACV,KAAK,EACL,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,yBAAyB,EACzB,KAAK,EACL,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,OAAO,EACP,MAAM,EACN,MAAM,EACN,gBAAgB,GACjB,MAAM,YAAY,CAAA;AAEnB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { init, update, view,
|
|
1
|
+
export { init, update, view, open, close, selectDate, clear, reflectSelectedDate, reflectMinDate, reflectMaxDate, reflectDisabledDates, reflectDisabledDaysOfWeek, Model, Message, OutMessage, GotCalendarMessage, GotPopoverMessage, RequestedSelectDate, SelectedDate, Cleared, Opened, Closed, ChangedViewMonth, } from './index.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Effect, Schema as S } from 'effect';
|
|
1
|
+
import { Effect, Option, Schema as S } from 'effect';
|
|
2
2
|
import * as Command from '../../command/index.js';
|
|
3
|
-
import { type
|
|
3
|
+
import { type ChildAttribute, type Html } from '../../html/index.js';
|
|
4
4
|
/** Schema for the dialog component's state, tracking its unique ID, open/closed status, animation support, and animation lifecycle phase. */
|
|
5
5
|
export declare const Model: S.Struct<{
|
|
6
6
|
readonly id: S.String;
|
|
@@ -15,12 +15,12 @@ export declare const Model: S.Struct<{
|
|
|
15
15
|
}>;
|
|
16
16
|
export type Model = typeof Model.Type;
|
|
17
17
|
/** Sent when the dialog should open. Triggers the showModal command. */
|
|
18
|
-
export declare const
|
|
19
|
-
/** Sent when the dialog should close (Escape key, backdrop click, or programmatic).
|
|
20
|
-
export declare const
|
|
21
|
-
/** Sent when the show-dialog command completes
|
|
18
|
+
export declare const RequestedOpen: import("../../schema/index.js").CallableTaggedStruct<"RequestedOpen", {}>;
|
|
19
|
+
/** Sent when the dialog should close (Escape key, backdrop click, or programmatic). */
|
|
20
|
+
export declare const RequestedClose: import("../../schema/index.js").CallableTaggedStruct<"RequestedClose", {}>;
|
|
21
|
+
/** Sent when the show-dialog command completes. */
|
|
22
22
|
export declare const CompletedShowDialog: import("../../schema/index.js").CallableTaggedStruct<"CompletedShowDialog", {}>;
|
|
23
|
-
/** Sent when the close-dialog command completes
|
|
23
|
+
/** Sent when the close-dialog command completes. */
|
|
24
24
|
export declare const CompletedCloseDialog: import("../../schema/index.js").CallableTaggedStruct<"CompletedCloseDialog", {}>;
|
|
25
25
|
/** Wraps an Animation submodel message for delegation. */
|
|
26
26
|
export declare const GotAnimationMessage: import("../../schema/index.js").CallableTaggedStruct<"GotAnimationMessage", {
|
|
@@ -28,18 +28,33 @@ export declare const GotAnimationMessage: import("../../schema/index.js").Callab
|
|
|
28
28
|
}>;
|
|
29
29
|
/** Union of all messages the dialog component can produce. */
|
|
30
30
|
export declare const Message: S.Union<[
|
|
31
|
-
typeof
|
|
32
|
-
typeof
|
|
31
|
+
typeof RequestedOpen,
|
|
32
|
+
typeof RequestedClose,
|
|
33
33
|
typeof CompletedShowDialog,
|
|
34
34
|
typeof CompletedCloseDialog,
|
|
35
35
|
typeof GotAnimationMessage
|
|
36
36
|
]>;
|
|
37
|
-
export type
|
|
38
|
-
export type
|
|
37
|
+
export type RequestedOpen = typeof RequestedOpen.Type;
|
|
38
|
+
export type RequestedClose = typeof RequestedClose.Type;
|
|
39
39
|
export type CompletedShowDialog = typeof CompletedShowDialog.Type;
|
|
40
40
|
export type CompletedCloseDialog = typeof CompletedCloseDialog.Type;
|
|
41
41
|
export type Message = typeof Message.Type;
|
|
42
|
-
/**
|
|
42
|
+
/** Sent once the dialog has transitioned to open. Fires after `update`
|
|
43
|
+
* has processed `RequestedOpen` and `isOpen` reflects the new state.
|
|
44
|
+
* Programmatic `Dialog.open` on an already-open model is a no-op that
|
|
45
|
+
* does not re-emit. */
|
|
46
|
+
export declare const Opened: import("../../schema/index.js").CallableTaggedStruct<"Opened", {}>;
|
|
47
|
+
/** Sent once the dialog has transitioned to closed. Programmatic
|
|
48
|
+
* `Dialog.close` on an already-closed model is a no-op that does not
|
|
49
|
+
* re-emit; calling close while a leave animation is in progress is
|
|
50
|
+
* also a no-op. */
|
|
51
|
+
export declare const Closed: import("../../schema/index.js").CallableTaggedStruct<"Closed", {}>;
|
|
52
|
+
/** Union of out-messages the dialog component can produce. */
|
|
53
|
+
export declare const OutMessage: S.Union<readonly [import("../../schema/index.js").CallableTaggedStruct<"Opened", {}>, import("../../schema/index.js").CallableTaggedStruct<"Closed", {}>]>;
|
|
54
|
+
export type Opened = typeof Opened.Type;
|
|
55
|
+
export type Closed = typeof Closed.Type;
|
|
56
|
+
export type OutMessage = typeof OutMessage.Type;
|
|
57
|
+
/** Configuration for creating a dialog model with `init`. */
|
|
43
58
|
export type InitConfig = Readonly<{
|
|
44
59
|
id: string;
|
|
45
60
|
isOpen?: boolean;
|
|
@@ -48,7 +63,11 @@ export type InitConfig = Readonly<{
|
|
|
48
63
|
}>;
|
|
49
64
|
/** Creates an initial dialog model from a config. Defaults to closed and non-animated. */
|
|
50
65
|
export declare const init: (config: InitConfig) => Model;
|
|
51
|
-
type UpdateReturn = readonly [
|
|
66
|
+
type UpdateReturn = readonly [
|
|
67
|
+
Model,
|
|
68
|
+
ReadonlyArray<Command.Command<Message>>,
|
|
69
|
+
Option.Option<OutMessage>
|
|
70
|
+
];
|
|
52
71
|
/** Locks page scroll and calls `showModal()` on the native dialog element. */
|
|
53
72
|
export declare const ShowDialog: Command.CommandDefinitionWithArgs<"ShowDialog", {
|
|
54
73
|
id: S.String;
|
|
@@ -64,36 +83,73 @@ export declare const CloseDialog: Command.CommandDefinitionWithArgs<"CloseDialog
|
|
|
64
83
|
}, never, never>>;
|
|
65
84
|
/** Processes a dialog message and returns the next model and commands. */
|
|
66
85
|
export declare const update: (model: Model, message: Message) => UpdateReturn;
|
|
86
|
+
/** Programmatically opens the dialog. */
|
|
87
|
+
export declare const open: (model: Model) => UpdateReturn;
|
|
88
|
+
/** Programmatically closes the dialog. */
|
|
89
|
+
export declare const close: (model: Model) => UpdateReturn;
|
|
67
90
|
/** Returns the ID used for `aria-labelledby` on the dialog. Apply this to your title element. */
|
|
68
91
|
export declare const titleId: (model: Model) => string;
|
|
69
92
|
/** Returns the ID used for `aria-describedby` on the dialog. Apply this to your description element. */
|
|
70
93
|
export declare const descriptionId: (model: Model) => string;
|
|
71
|
-
/**
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
94
|
+
/** Render-time payload published to the consumer's `toView`.
|
|
95
|
+
*
|
|
96
|
+
* - `dialog`: attributes for the native `<dialog>` element. Carries
|
|
97
|
+
* the id, ARIA labelling, `open` prop, positioning style, and the
|
|
98
|
+
* `OnCancel` handler that wires Escape to `RequestedClose`. The
|
|
99
|
+
* consumer MUST render an `h.dialog(...)` element so the framework's
|
|
100
|
+
* `showModal`/`close()` commands can target it.
|
|
101
|
+
* - `backdrop`: attributes for the backdrop element. Includes the
|
|
102
|
+
* Animation data attributes and the `OnClick` handler that closes
|
|
103
|
+
* the dialog on outside-click (suppressed while a leave animation
|
|
104
|
+
* is in progress).
|
|
105
|
+
* - `panel`: attributes for the panel element. Includes the panel id
|
|
106
|
+
* (`${model.id}-panel`) and the Animation data attributes.
|
|
107
|
+
* - `isVisible`: derived from `isOpen` and the Animation
|
|
108
|
+
* `transitionState`. The consumer renders backdrop + panel only
|
|
109
|
+
* while this is true. */
|
|
110
|
+
export type RenderInfo = Readonly<{
|
|
111
|
+
dialog: ReadonlyArray<ChildAttribute>;
|
|
112
|
+
backdrop: ReadonlyArray<ChildAttribute>;
|
|
113
|
+
panel: ReadonlyArray<ChildAttribute>;
|
|
114
|
+
isVisible: boolean;
|
|
115
|
+
}>;
|
|
116
|
+
/** Per-render view inputs passed to `view` via `h.submodel`'s `viewInputs` field. */
|
|
117
|
+
export type ViewInputs = Readonly<{
|
|
118
|
+
toView: (render: RenderInfo) => Html;
|
|
83
119
|
}>;
|
|
84
|
-
/**
|
|
85
|
-
*
|
|
86
|
-
export declare const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
120
|
+
/** Renders a headless dialog component backed by the native `<dialog>`
|
|
121
|
+
* element with `showModal()`. */
|
|
122
|
+
export declare const view: import("../../html/submodel.js").SubmodelView<{
|
|
123
|
+
readonly id: string;
|
|
124
|
+
readonly isOpen: boolean;
|
|
125
|
+
readonly isAnimated: boolean;
|
|
126
|
+
readonly animation: {
|
|
127
|
+
readonly id: string;
|
|
128
|
+
readonly isShowing: boolean;
|
|
129
|
+
readonly transitionState: "Idle" | "EnterStart" | "EnterAnimating" | "LeaveStart" | "LeaveAnimating";
|
|
130
|
+
};
|
|
131
|
+
readonly maybeFocusSelector: Option.Option<string>;
|
|
132
|
+
}, {
|
|
133
|
+
readonly _tag: "RequestedOpen";
|
|
134
|
+
} | {
|
|
135
|
+
readonly _tag: "RequestedClose";
|
|
136
|
+
} | {
|
|
137
|
+
readonly _tag: "CompletedShowDialog";
|
|
138
|
+
} | {
|
|
139
|
+
readonly _tag: "CompletedCloseDialog";
|
|
140
|
+
} | {
|
|
141
|
+
readonly _tag: "GotAnimationMessage";
|
|
142
|
+
readonly message: {
|
|
143
|
+
readonly _tag: "Showed";
|
|
144
|
+
} | {
|
|
145
|
+
readonly _tag: "Hid";
|
|
146
|
+
} | {
|
|
147
|
+
readonly _tag: "AdvancedAnimationFrame";
|
|
148
|
+
} | {
|
|
149
|
+
readonly _tag: "EndedAnimation";
|
|
150
|
+
};
|
|
151
|
+
}, Readonly<{
|
|
152
|
+
toView: (render: RenderInfo) => Html;
|
|
153
|
+
}>>;
|
|
98
154
|
export {};
|
|
99
155
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/dialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/dialog/index.ts"],"names":[],"mappings":"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"}
|