foldkit 0.56.0 → 0.58.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 (105) hide show
  1. package/README.md +21 -11
  2. package/dist/devtools/overlay-styles.d.ts +1 -1
  3. package/dist/devtools/overlay-styles.d.ts.map +1 -1
  4. package/dist/devtools/overlay-styles.js +5 -1
  5. package/dist/devtools/overlay.d.ts.map +1 -1
  6. package/dist/devtools/overlay.js +52 -19
  7. package/dist/file/error.d.ts +10 -0
  8. package/dist/file/error.d.ts.map +1 -0
  9. package/dist/file/error.js +4 -0
  10. package/dist/file/file.d.ts +24 -0
  11. package/dist/file/file.d.ts.map +1 -0
  12. package/dist/file/file.js +16 -0
  13. package/dist/file/index.d.ts +5 -0
  14. package/dist/file/index.d.ts.map +1 -0
  15. package/dist/file/index.js +4 -0
  16. package/dist/file/public.d.ts +2 -0
  17. package/dist/file/public.d.ts.map +1 -0
  18. package/dist/file/public.js +1 -0
  19. package/dist/file/reader.d.ts +56 -0
  20. package/dist/file/reader.d.ts.map +1 -0
  21. package/dist/file/reader.js +92 -0
  22. package/dist/file/select.d.ts +36 -0
  23. package/dist/file/select.d.ts.map +1 -0
  24. package/dist/file/select.js +60 -0
  25. package/dist/html/index.d.ts +34 -3
  26. package/dist/html/index.d.ts.map +1 -1
  27. package/dist/html/index.js +40 -1
  28. package/dist/html/lazy.d.ts +7 -5
  29. package/dist/html/lazy.d.ts.map +1 -1
  30. package/dist/html/lazy.js +12 -8
  31. package/dist/index.d.ts +1 -0
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +1 -0
  34. package/dist/runtime/runtime.d.ts.map +1 -1
  35. package/dist/runtime/runtime.js +2 -4
  36. package/dist/test/apps/disabledButton.d.ts +11 -3
  37. package/dist/test/apps/disabledButton.d.ts.map +1 -1
  38. package/dist/test/apps/fileUpload.d.ts +17 -0
  39. package/dist/test/apps/fileUpload.d.ts.map +1 -0
  40. package/dist/test/apps/fileUpload.js +29 -0
  41. package/dist/test/apps/resumeUpload.d.ts +43 -0
  42. package/dist/test/apps/resumeUpload.d.ts.map +1 -0
  43. package/dist/test/apps/resumeUpload.js +85 -0
  44. package/dist/test/query.d.ts +2 -1
  45. package/dist/test/query.d.ts.map +1 -1
  46. package/dist/test/query.js +15 -2
  47. package/dist/test/scene.d.ts +18 -0
  48. package/dist/test/scene.d.ts.map +1 -1
  49. package/dist/test/scene.js +46 -0
  50. package/dist/ui/combobox/multi.d.ts +31 -10
  51. package/dist/ui/combobox/multi.d.ts.map +1 -1
  52. package/dist/ui/combobox/public.d.ts +1 -2
  53. package/dist/ui/combobox/public.d.ts.map +1 -1
  54. package/dist/ui/combobox/public.js +1 -2
  55. package/dist/ui/combobox/shared.d.ts +33 -33
  56. package/dist/ui/combobox/shared.d.ts.map +1 -1
  57. package/dist/ui/combobox/shared.js +89 -112
  58. package/dist/ui/combobox/single.d.ts +31 -10
  59. package/dist/ui/combobox/single.d.ts.map +1 -1
  60. package/dist/ui/combobox/single.js +1 -5
  61. package/dist/ui/dialog/index.d.ts +10 -15
  62. package/dist/ui/dialog/index.d.ts.map +1 -1
  63. package/dist/ui/dialog/index.js +68 -73
  64. package/dist/ui/dialog/public.d.ts +1 -1
  65. package/dist/ui/dialog/public.d.ts.map +1 -1
  66. package/dist/ui/dialog/public.js +1 -1
  67. package/dist/ui/listbox/multi.d.ts +30 -9
  68. package/dist/ui/listbox/multi.d.ts.map +1 -1
  69. package/dist/ui/listbox/public.d.ts +1 -2
  70. package/dist/ui/listbox/public.d.ts.map +1 -1
  71. package/dist/ui/listbox/public.js +1 -2
  72. package/dist/ui/listbox/shared.d.ts +35 -36
  73. package/dist/ui/listbox/shared.d.ts.map +1 -1
  74. package/dist/ui/listbox/shared.js +106 -104
  75. package/dist/ui/listbox/single.d.ts +30 -9
  76. package/dist/ui/listbox/single.d.ts.map +1 -1
  77. package/dist/ui/listbox/single.js +9 -12
  78. package/dist/ui/menu/index.d.ts +22 -26
  79. package/dist/ui/menu/index.d.ts.map +1 -1
  80. package/dist/ui/menu/index.js +103 -91
  81. package/dist/ui/menu/public.d.ts +1 -2
  82. package/dist/ui/menu/public.d.ts.map +1 -1
  83. package/dist/ui/menu/public.js +1 -2
  84. package/dist/ui/popover/index.d.ts +21 -22
  85. package/dist/ui/popover/index.d.ts.map +1 -1
  86. package/dist/ui/popover/index.js +92 -75
  87. package/dist/ui/popover/public.d.ts +1 -2
  88. package/dist/ui/popover/public.d.ts.map +1 -1
  89. package/dist/ui/popover/public.js +1 -2
  90. package/dist/ui/transition/index.d.ts +8 -58
  91. package/dist/ui/transition/index.d.ts.map +1 -1
  92. package/dist/ui/transition/index.js +21 -111
  93. package/dist/ui/transition/public.d.ts +1 -1
  94. package/dist/ui/transition/public.d.ts.map +1 -1
  95. package/dist/ui/transition/public.js +1 -1
  96. package/dist/ui/transition/schema.d.ts +43 -0
  97. package/dist/ui/transition/schema.d.ts.map +1 -0
  98. package/dist/ui/transition/schema.js +35 -0
  99. package/dist/ui/transition/update.d.ts +22 -0
  100. package/dist/ui/transition/update.d.ts.map +1 -0
  101. package/dist/ui/transition/update.js +68 -0
  102. package/package.json +5 -1
  103. package/dist/ui/transition.d.ts +0 -5
  104. package/dist/ui/transition.d.ts.map +0 -1
  105. package/dist/ui/transition.js +0 -3
@@ -1,4 +1,4 @@
1
- import { Array, Effect, Match as M, Option, Predicate, Schema as S, String as Str, pipe, } from 'effect';
1
+ import { Array, Effect, Equal, Match as M, Option, Predicate, Schema as S, String as Str, pipe, } from 'effect';
2
2
  import * as Command from '../../command';
3
3
  import { OptionExt } from '../../effectExtensions';
4
4
  import { html } from '../../html';
@@ -8,7 +8,11 @@ import * as Task from '../../task';
8
8
  import { anchorHooks } from '../anchor';
9
9
  import { groupContiguous } from '../group';
10
10
  import { findFirstEnabledIndex, isPrintableKey, keyToIndex } from '../keyboard';
11
- import { TransitionState } from '../transition';
11
+ // NOTE: Transition imports are split across schema + update to avoid a circular
12
+ // dependency: transition → html → runtime → devtools → listbox → transition.
13
+ // The barrel (../transition) imports from html, which starts the cycle.
14
+ import { EndedTransition as TransitionEndedTransition, Hidden as TransitionHidden, Message as TransitionMessage, Model as TransitionModel, Showed as TransitionShowed, init as transitionInit, } from '../transition/schema';
15
+ import { update as transitionUpdate } from '../transition/update';
12
16
  import { resolveTypeaheadMatch } from '../typeahead';
13
17
  export { resolveTypeaheadMatch };
14
18
  // MODEL
@@ -23,7 +27,7 @@ export const BaseModel = S.Struct({
23
27
  isAnimated: S.Boolean,
24
28
  isModal: S.Boolean,
25
29
  orientation: Orientation,
26
- transitionState: TransitionState,
30
+ transition: TransitionModel,
27
31
  maybeActiveItemIndex: S.OptionFromSelf(S.Number),
28
32
  activationTrigger: ActivationTrigger,
29
33
  searchQuery: S.String,
@@ -38,7 +42,7 @@ export const baseInit = (config) => ({
38
42
  isAnimated: config.isAnimated ?? false,
39
43
  isModal: config.isModal ?? false,
40
44
  orientation: config.orientation ?? 'Vertical',
41
- transitionState: 'Idle',
45
+ transition: transitionInit({ id: `${config.id}-listbox` }),
42
46
  maybeActiveItemIndex: Option.none(),
43
47
  activationTrigger: 'Keyboard',
44
48
  searchQuery: '',
@@ -101,19 +105,17 @@ export const CompletedClickItem = m('CompletedClickItem');
101
105
  export const IgnoredMouseClick = m('IgnoredMouseClick');
102
106
  /** Sent when a Space key-up is captured to prevent page scrolling. */
103
107
  export const SuppressedSpaceScroll = m('SuppressedSpaceScroll');
104
- /** Sent internally when a double-rAF completes, advancing the transition to its animating phase. */
105
- export const AdvancedTransitionFrame = m('AdvancedTransitionFrame');
106
- /** Sent internally when all CSS transitions on the listbox items container have completed. */
107
- export const EndedTransition = m('EndedTransition');
108
- /** Sent internally when the listbox button moves in the viewport during a leave transition, cancelling the animation. */
109
- export const DetectedButtonMovement = m('DetectedButtonMovement');
108
+ /** Wraps a Transition submodel message for delegation. */
109
+ export const GotTransitionMessage = m('GotTransitionMessage', {
110
+ message: TransitionMessage,
111
+ });
110
112
  /** Sent when the user presses a pointer device on the listbox button. Records pointer type for click handling. */
111
113
  export const PressedPointerOnButton = m('PressedPointerOnButton', {
112
114
  pointerType: S.String,
113
115
  button: S.Number,
114
116
  });
115
117
  /** Union of all messages the listbox component can produce. */
116
- export const Message = S.Union(Opened, Closed, ClosedByTab, ActivatedItem, DeactivatedItem, SelectedItem, MovedPointerOverItem, RequestedItemClick, Searched, ClearedSearch, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusButton, CompletedFocusItems, CompletedScrollIntoView, CompletedClickItem, IgnoredMouseClick, SuppressedSpaceScroll, AdvancedTransitionFrame, EndedTransition, DetectedButtonMovement, PressedPointerOnButton);
118
+ export const Message = S.Union(Opened, Closed, ClosedByTab, ActivatedItem, DeactivatedItem, SelectedItem, MovedPointerOverItem, RequestedItemClick, Searched, ClearedSearch, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusButton, CompletedFocusItems, CompletedScrollIntoView, CompletedClickItem, IgnoredMouseClick, SuppressedSpaceScroll, GotTransitionMessage, PressedPointerOnButton);
117
119
  // CONSTANTS
118
120
  export const SEARCH_DEBOUNCE_MILLISECONDS = 350;
119
121
  export const LEFT_MOUSE_BUTTON = 0;
@@ -126,15 +128,12 @@ export const itemId = (id, index) => `${id}-item-${index}`;
126
128
  const constrainedEvo = makeConstrainedEvo();
127
129
  export const closedModel = (model) => constrainedEvo(model, {
128
130
  isOpen: () => false,
129
- transitionState: () => model.isAnimated ? 'LeaveStart' : 'Idle',
130
131
  maybeActiveItemIndex: () => Option.none(),
131
132
  searchQuery: () => '',
132
133
  searchVersion: () => 0,
133
134
  maybeLastPointerPosition: () => Option.none(),
134
135
  maybeLastButtonPointerType: () => Option.none(),
135
136
  });
136
- /** Advances the listbox's enter/leave transition by waiting a double-rAF. */
137
- export const RequestFrame = Command.define('RequestFrame', AdvancedTransitionFrame);
138
137
  /** Prevents page scrolling while the listbox is open in modal mode. */
139
138
  export const LockScroll = Command.define('LockScroll', CompletedLockScroll);
140
139
  /** Re-enables page scrolling after the listbox closes. */
@@ -153,14 +152,50 @@ export const ScrollIntoView = Command.define('ScrollIntoView', CompletedScrollIn
153
152
  export const ClickItem = Command.define('ClickItem', CompletedClickItem);
154
153
  /** Waits for the typeahead search debounce period before clearing the query. */
155
154
  export const DelayClearSearch = Command.define('DelayClearSearch', ClearedSearch);
156
- /** Waits for all CSS transitions on the listbox items container to complete. */
157
- export const WaitForTransitions = Command.define('WaitForTransitions', EndedTransition);
158
- /** Detects whether the listbox button moved or the leave transition ended — whichever comes first. */
159
- export const DetectMovementOrTransitionEnd = Command.define('DetectMovementOrTransitionEnd', DetectedButtonMovement, EndedTransition);
155
+ /** Detects whether the listbox button moved or the leave transition ended whichever comes first. Both outcomes signal the Transition submodel that leave is complete. */
156
+ export const DetectMovementOrTransitionEnd = Command.define('DetectMovementOrTransitionEnd', GotTransitionMessage);
160
157
  export const makeUpdate = (handleSelectedItem) => {
161
158
  const withUpdateReturn = M.withReturnType();
159
+ const delegateToTransition = (model, transitionMessage) => {
160
+ const [nextTransition, transitionCommands, maybeOutMessage] = transitionUpdate(model.transition, transitionMessage);
161
+ const mappedCommands = transitionCommands.map(Command.mapEffect(Effect.map(message => GotTransitionMessage({ message }))));
162
+ const additionalCommands = Option.match(maybeOutMessage, {
163
+ onNone: () => [],
164
+ onSome: M.type().pipe(M.tagsExhaustive({
165
+ StartedLeaveAnimating: () => [
166
+ DetectMovementOrTransitionEnd(Effect.raceFirst(Task.detectElementMovement(buttonSelector(model.id)).pipe(Effect.as(GotTransitionMessage({
167
+ message: TransitionEndedTransition(),
168
+ }))), Task.waitForTransitions(itemsSelector(model.id)).pipe(Effect.as(GotTransitionMessage({
169
+ message: TransitionEndedTransition(),
170
+ }))))),
171
+ ],
172
+ TransitionedOut: () => [],
173
+ })),
174
+ });
175
+ return [
176
+ constrainedEvo(model, { transition: () => nextTransition }),
177
+ [...mappedCommands, ...additionalCommands],
178
+ ];
179
+ };
180
+ const openListbox = (baseModel, openCommands) => {
181
+ if (baseModel.isAnimated) {
182
+ const [nextModel, transitionCommands] = delegateToTransition(baseModel, TransitionShowed());
183
+ return [
184
+ constrainedEvo(nextModel, { isOpen: () => true }),
185
+ [...openCommands, ...transitionCommands],
186
+ ];
187
+ }
188
+ return [constrainedEvo(baseModel, { isOpen: () => true }), openCommands];
189
+ };
190
+ const closeListbox = (baseModel, commands) => {
191
+ const closed = closedModel(baseModel);
192
+ if (baseModel.isAnimated) {
193
+ const [nextModel, transitionCommands] = delegateToTransition(closed, TransitionHidden());
194
+ return [nextModel, [...commands, ...transitionCommands]];
195
+ }
196
+ return [closed, commands];
197
+ };
162
198
  return (model, message) => {
163
- const maybeNextFrame = OptionExt.when(model.isAnimated, RequestFrame(Task.nextFrame.pipe(Effect.as(AdvancedTransitionFrame()))));
164
199
  const maybeLockScroll = OptionExt.when(model.isModal, LockScroll(Task.lockScroll.pipe(Effect.as(CompletedLockScroll()))));
165
200
  const maybeUnlockScroll = OptionExt.when(model.isModal, UnlockScroll(Task.unlockScroll.pipe(Effect.as(CompletedUnlockScroll()))));
166
201
  const maybeInertOthers = OptionExt.when(model.isModal, InertOthers(Task.inertOthers(model.id, [
@@ -169,45 +204,37 @@ export const makeUpdate = (handleSelectedItem) => {
169
204
  ]).pipe(Effect.as(CompletedSetupInert()))));
170
205
  const maybeRestoreInert = OptionExt.when(model.isModal, RestoreInert(Task.restoreInert(model.id).pipe(Effect.as(CompletedTeardownInert()))));
171
206
  const focusButton = FocusButton(Task.focus(buttonSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedFocusButton())));
207
+ const focusItems = FocusItems(Task.focus(itemsSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedFocusItems())));
208
+ const openCommands = [
209
+ focusItems,
210
+ ...Array.getSomes([maybeLockScroll, maybeInertOthers]),
211
+ ];
212
+ const closeWithFocusCommands = [
213
+ focusButton,
214
+ ...Array.getSomes([maybeUnlockScroll, maybeRestoreInert]),
215
+ ];
216
+ const closeWithoutFocusCommands = Array.getSomes([
217
+ maybeUnlockScroll,
218
+ maybeRestoreInert,
219
+ ]);
172
220
  return M.value(message).pipe(withUpdateReturn, M.tagsExhaustive({
173
- Opened: ({ maybeActiveItemIndex }) => {
174
- const nextModel = constrainedEvo(model, {
175
- isOpen: () => true,
176
- transitionState: () => model.isAnimated ? 'EnterStart' : 'Idle',
177
- maybeActiveItemIndex: () => maybeActiveItemIndex,
178
- activationTrigger: () => Option.match(maybeActiveItemIndex, {
179
- onNone: () => 'Pointer',
180
- onSome: () => 'Keyboard',
181
- }),
182
- searchQuery: () => '',
183
- searchVersion: () => 0,
184
- maybeLastPointerPosition: () => Option.none(),
185
- });
186
- return [
187
- nextModel,
188
- pipe(Array.getSomes([
189
- maybeNextFrame,
190
- maybeLockScroll,
191
- maybeInertOthers,
192
- ]), Array.prepend(FocusItems(Task.focus(itemsSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedFocusItems()))))),
193
- ];
221
+ Opened: ({ maybeActiveItemIndex }) => openListbox(constrainedEvo(model, {
222
+ maybeActiveItemIndex: () => maybeActiveItemIndex,
223
+ activationTrigger: () => Option.match(maybeActiveItemIndex, {
224
+ onNone: () => 'Pointer',
225
+ onSome: () => 'Keyboard',
226
+ }),
227
+ searchQuery: () => '',
228
+ searchVersion: () => 0,
229
+ maybeLastPointerPosition: () => Option.none(),
230
+ }), openCommands),
231
+ Closed: () => closeListbox(model, closeWithFocusCommands),
232
+ ClosedByTab: () => {
233
+ if (Option.exists(model.maybeLastButtonPointerType, Equal.equals('mouse'))) {
234
+ return [model, []];
235
+ }
236
+ return closeListbox(model, closeWithoutFocusCommands);
194
237
  },
195
- Closed: () => [
196
- closedModel(model),
197
- pipe(Array.getSomes([
198
- maybeNextFrame,
199
- maybeUnlockScroll,
200
- maybeRestoreInert,
201
- ]), Array.prepend(focusButton)),
202
- ],
203
- ClosedByTab: () => [
204
- closedModel(model),
205
- Array.getSomes([
206
- maybeNextFrame,
207
- maybeUnlockScroll,
208
- maybeRestoreInert,
209
- ]),
210
- ],
211
238
  ActivatedItem: ({ index, activationTrigger }) => [
212
239
  constrainedEvo(model, {
213
240
  maybeActiveItemIndex: () => Option.some(index),
@@ -242,10 +269,8 @@ export const makeUpdate = (handleSelectedItem) => {
242
269
  ]
243
270
  : [model, []],
244
271
  SelectedItem: ({ item }) => handleSelectedItem(model, item, {
245
- focusButton,
246
- maybeNextFrame,
247
- maybeUnlockScroll,
248
- maybeRestoreInert,
272
+ closeWithFocus: closeModel => closeListbox(closeModel, closeWithFocusCommands),
273
+ closeWithoutFocus: closeModel => closeListbox(closeModel, closeWithoutFocusCommands),
249
274
  }),
250
275
  RequestedItemClick: ({ index }) => [
251
276
  model,
@@ -273,29 +298,7 @@ export const makeUpdate = (handleSelectedItem) => {
273
298
  }
274
299
  return [constrainedEvo(model, { searchQuery: () => '' }), []];
275
300
  },
276
- AdvancedTransitionFrame: () => M.value(model.transitionState).pipe(withUpdateReturn, M.when('EnterStart', () => [
277
- constrainedEvo(model, {
278
- transitionState: () => 'EnterAnimating',
279
- }),
280
- [
281
- WaitForTransitions(Task.waitForTransitions(itemsSelector(model.id)).pipe(Effect.as(EndedTransition()))),
282
- ],
283
- ]), M.when('LeaveStart', () => [
284
- constrainedEvo(model, {
285
- transitionState: () => 'LeaveAnimating',
286
- }),
287
- [
288
- DetectMovementOrTransitionEnd(Effect.raceFirst(Task.detectElementMovement(buttonSelector(model.id)).pipe(Effect.as(DetectedButtonMovement())), Task.waitForTransitions(itemsSelector(model.id)).pipe(Effect.as(EndedTransition())))),
289
- ],
290
- ]), M.orElse(() => [model, []])),
291
- EndedTransition: () => M.value(model.transitionState).pipe(withUpdateReturn, M.whenOr('EnterAnimating', 'LeaveAnimating', () => [
292
- constrainedEvo(model, { transitionState: () => 'Idle' }),
293
- [],
294
- ]), M.orElse(() => [model, []])),
295
- DetectedButtonMovement: () => M.value(model.transitionState).pipe(withUpdateReturn, M.when('LeaveAnimating', () => [
296
- constrainedEvo(model, { transitionState: () => 'Idle' }),
297
- [],
298
- ]), M.orElse(() => [model, []])),
301
+ GotTransitionMessage: ({ message: transitionMessage }) => delegateToTransition(model, transitionMessage),
299
302
  PressedPointerOnButton: ({ pointerType, button }) => {
300
303
  const withPointerType = constrainedEvo(model, {
301
304
  maybeLastButtonPointerType: () => Option.some(pointerType),
@@ -304,32 +307,21 @@ export const makeUpdate = (handleSelectedItem) => {
304
307
  return [withPointerType, []];
305
308
  }
306
309
  if (model.isOpen) {
310
+ const [closed, commands] = closeListbox(withPointerType, closeWithFocusCommands);
307
311
  return [
308
- closedModel(withPointerType),
309
- pipe(Array.getSomes([
310
- maybeNextFrame,
311
- maybeUnlockScroll,
312
- maybeRestoreInert,
313
- ]), Array.prepend(focusButton)),
312
+ constrainedEvo(closed, {
313
+ maybeLastButtonPointerType: () => Option.some(pointerType),
314
+ }),
315
+ commands,
314
316
  ];
315
317
  }
316
- const nextModel = constrainedEvo(withPointerType, {
317
- isOpen: () => true,
318
- transitionState: () => model.isAnimated ? 'EnterStart' : 'Idle',
318
+ return openListbox(constrainedEvo(withPointerType, {
319
319
  maybeActiveItemIndex: () => Option.none(),
320
320
  activationTrigger: () => 'Pointer',
321
321
  searchQuery: () => '',
322
322
  searchVersion: () => 0,
323
323
  maybeLastPointerPosition: () => Option.none(),
324
- });
325
- return [
326
- nextModel,
327
- pipe(Array.getSomes([
328
- maybeNextFrame,
329
- maybeLockScroll,
330
- maybeInertOthers,
331
- ]), Array.prepend(FocusItems(Task.focus(itemsSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedFocusItems()))))),
332
- ];
324
+ }), openCommands);
333
325
  },
334
326
  CompletedLockScroll: () => [model, []],
335
327
  CompletedUnlockScroll: () => [model, []],
@@ -339,14 +331,19 @@ export const makeUpdate = (handleSelectedItem) => {
339
331
  CompletedFocusItems: () => [model, []],
340
332
  CompletedScrollIntoView: () => [model, []],
341
333
  CompletedClickItem: () => [model, []],
342
- IgnoredMouseClick: () => [model, []],
334
+ IgnoredMouseClick: () => [
335
+ constrainedEvo(model, {
336
+ maybeLastButtonPointerType: () => Option.none(),
337
+ }),
338
+ [],
339
+ ],
343
340
  SuppressedSpaceScroll: () => [model, []],
344
341
  }));
345
342
  };
346
343
  };
347
344
  export const makeView = (behavior) => (config) => {
348
345
  const { div, input, AriaActiveDescendant, AriaControls, AriaDisabled, AriaExpanded, AriaHasPopup, AriaLabelledBy, AriaMultiSelectable, AriaOrientation, AriaSelected, Attribute, Class, DataAttribute, Id, Name, OnBlur, OnClick, OnDestroy, OnInsert, OnKeyDownPreventDefault, OnKeyUpPreventDefault, OnPointerDown, OnPointerLeave, OnPointerMove, Role, Style, Tabindex, Type, Value, keyed, } = html();
349
- const { model: { id, isOpen, orientation, transitionState, maybeActiveItemIndex, searchQuery, maybeLastButtonPointerType, }, toParentMessage, onSelectedItem, items, itemToConfig, isItemDisabled, isButtonDisabled, buttonContent, buttonClassName, buttonAttributes = [], itemsClassName, itemsAttributes = [], itemsScrollClassName, itemsScrollAttributes = [], backdropClassName, backdropAttributes = [], className, attributes = [], itemGroupKey, groupToHeading, groupClassName, groupAttributes = [], separatorClassName, separatorAttributes = [], anchor, name, form, isDisabled, isInvalid, } = config;
346
+ const { model: { id, isOpen, orientation, transition: { transitionState }, maybeActiveItemIndex, searchQuery, maybeLastButtonPointerType, }, toParentMessage, onSelectedItem, items, itemToConfig, isItemDisabled, isButtonDisabled, buttonContent, buttonClassName, buttonAttributes = [], itemsClassName, itemsAttributes = [], itemsScrollClassName, itemsScrollAttributes = [], backdropClassName, backdropAttributes = [], className, attributes = [], itemGroupKey, groupToHeading, groupClassName, groupAttributes = [], separatorClassName, separatorAttributes = [], anchor, name, form, isDisabled, isInvalid, } = config;
350
347
  const itemToValue = config.itemToValue ?? (item => String(item));
351
348
  const itemToSearchText = config.itemToSearchText ?? (item => itemToValue(item));
352
349
  const dispatchSelectedItem = (value) => onSelectedItem
@@ -442,7 +439,12 @@ export const makeView = (behavior) => (config) => {
442
439
  OnKeyUpPreventDefault(handleSpaceKeyUp),
443
440
  OnClick(handleButtonClick()),
444
441
  ]),
445
- ...(isVisible ? [DataAttribute('open', '')] : []),
442
+ ...(isVisible
443
+ ? [
444
+ DataAttribute('open', ''),
445
+ Style({ position: 'relative', zIndex: '1' }),
446
+ ]
447
+ : []),
446
448
  ...(isInvalid ? [DataAttribute('invalid', '')] : []),
447
449
  ...(buttonClassName ? [Class(buttonClassName)] : []),
448
450
  ...buttonAttributes,
@@ -9,7 +9,11 @@ export declare const Model: S.extend<S.Struct<{
9
9
  isAnimated: typeof S.Boolean;
10
10
  isModal: typeof S.Boolean;
11
11
  orientation: S.Literal<["Vertical", "Horizontal"]>;
12
- transitionState: S.Literal<["Idle", "EnterStart", "EnterAnimating", "LeaveStart", "LeaveAnimating"]>;
12
+ transition: S.Struct<{
13
+ id: typeof S.String;
14
+ isShowing: typeof S.Boolean;
15
+ transitionState: S.Literal<["Idle", "EnterStart", "EnterAnimating", "LeaveStart", "LeaveAnimating"]>;
16
+ }>;
13
17
  maybeActiveItemIndex: S.OptionFromSelf<typeof S.Number>;
14
18
  activationTrigger: S.Literal<["Pointer", "Keyboard"]>;
15
19
  searchQuery: typeof S.String;
@@ -36,7 +40,11 @@ export declare const update: (model: {
36
40
  readonly isAnimated: boolean;
37
41
  readonly isModal: boolean;
38
42
  readonly orientation: "Vertical" | "Horizontal";
39
- readonly transitionState: "Idle" | "EnterStart" | "EnterAnimating" | "LeaveStart" | "LeaveAnimating";
43
+ readonly transition: {
44
+ readonly id: string;
45
+ readonly isShowing: boolean;
46
+ readonly transitionState: "Idle" | "EnterStart" | "EnterAnimating" | "LeaveStart" | "LeaveAnimating";
47
+ };
40
48
  readonly maybeActiveItemIndex: Option.Option<number>;
41
49
  readonly activationTrigger: "Pointer" | "Keyboard";
42
50
  readonly searchQuery: string;
@@ -54,7 +62,11 @@ export declare const update: (model: {
54
62
  readonly isAnimated: boolean;
55
63
  readonly isModal: boolean;
56
64
  readonly orientation: "Vertical" | "Horizontal";
57
- readonly transitionState: "Idle" | "EnterStart" | "EnterAnimating" | "LeaveStart" | "LeaveAnimating";
65
+ readonly transition: {
66
+ readonly id: string;
67
+ readonly isShowing: boolean;
68
+ readonly transitionState: "Idle" | "EnterStart" | "EnterAnimating" | "LeaveStart" | "LeaveAnimating";
69
+ };
58
70
  readonly maybeActiveItemIndex: Option.Option<number>;
59
71
  readonly activationTrigger: "Pointer" | "Keyboard";
60
72
  readonly searchQuery: string;
@@ -120,11 +132,16 @@ export declare const update: (model: {
120
132
  } | {
121
133
  readonly _tag: "SuppressedSpaceScroll";
122
134
  } | {
123
- readonly _tag: "AdvancedTransitionFrame";
124
- } | {
125
- readonly _tag: "EndedTransition";
126
- } | {
127
- readonly _tag: "DetectedButtonMovement";
135
+ readonly _tag: "GotTransitionMessage";
136
+ readonly message: {
137
+ readonly _tag: "Showed";
138
+ } | {
139
+ readonly _tag: "Hidden";
140
+ } | {
141
+ readonly _tag: "AdvancedTransitionFrame";
142
+ } | {
143
+ readonly _tag: "EndedTransition";
144
+ };
128
145
  } | {
129
146
  readonly _tag: "PressedPointerOnButton";
130
147
  readonly button: number;
@@ -144,7 +161,11 @@ export declare const view: <Message, Item>(config: Readonly<{
144
161
  readonly isAnimated: boolean;
145
162
  readonly isModal: boolean;
146
163
  readonly orientation: "Vertical" | "Horizontal";
147
- readonly transitionState: "Idle" | "EnterStart" | "EnterAnimating" | "LeaveStart" | "LeaveAnimating";
164
+ readonly transition: {
165
+ readonly id: string;
166
+ readonly isShowing: boolean;
167
+ readonly transitionState: "Idle" | "EnterStart" | "EnterAnimating" | "LeaveStart" | "LeaveAnimating";
168
+ };
148
169
  readonly maybeActiveItemIndex: Option.Option<number>;
149
170
  readonly activationTrigger: "Pointer" | "Keyboard";
150
171
  readonly searchQuery: string;
@@ -1 +1 @@
1
- {"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../../src/ui/listbox/single.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,IAAI,CAAC,EAAQ,MAAM,QAAQ,CAAA;AAEzD,OAAO,KAAK,KAAK,OAAO,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,KAAK,IAAI,EAAc,MAAM,YAAY,CAAA;AAElD,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,EACnB,KAAK,OAAO,EACZ,YAAY,EAKb,MAAM,UAAU,CAAA;AAIjB,mJAAmJ;AACnJ,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;GAEjB,CAAA;AAED,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,6RAA6R;AAC7R,MAAM,MAAM,UAAU,GAAG,cAAc,GACrC,QAAQ,CAAC;IACP,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAC,CAAA;AAEJ,6HAA6H;AAC7H,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAIF,qIAAqI;AACrI,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAYjB,CAAA;AAEF;gGACgG;AAChG,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,MAAM,MAAM,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACpB,CAAA;AAIvC,uEAAuE;AACvE,MAAM,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAE5E,2JAA2J;AAC3J,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAWf,CAAA;AAEF;mFACmF;AACnF,eAAO,MAAM,IAAI,GAAI,OAAO,EAAE,IAAI,EAChC,cAAc,IAAI,CAChB,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EACzB,OAAO,GAAG,iBAAiB,GAAG,gBAAgB,CAC/C,KACA,CAAC,CACF,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,KACrE,IAAI,CAoBR,CAAA"}
1
+ {"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../../src/ui/listbox/single.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEnD,OAAO,KAAK,KAAK,OAAO,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,KAAK,IAAI,EAAc,MAAM,YAAY,CAAA;AAElD,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,EACnB,KAAK,OAAO,EACZ,YAAY,EAIb,MAAM,UAAU,CAAA;AAIjB,mJAAmJ;AACnJ,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;GAEjB,CAAA;AAED,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,6RAA6R;AAC7R,MAAM,MAAM,UAAU,GAAG,cAAc,GACrC,QAAQ,CAAC;IACP,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAC,CAAA;AAEJ,6HAA6H;AAC7H,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAIF,qIAAqI;AACrI,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAMjB,CAAA;AAEF;gGACgG;AAChG,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,MAAM,MAAM,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACpB,CAAA;AAIvC,uEAAuE;AACvE,MAAM,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAE5E,2JAA2J;AAC3J,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAWf,CAAA;AAEF;mFACmF;AACnF,eAAO,MAAM,IAAI,GAAI,OAAO,EAAE,IAAI,EAChC,cAAc,IAAI,CAChB,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EACzB,OAAO,GAAG,iBAAiB,GAAG,gBAAgB,CAC/C,KACA,CAAC,CACF,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,KACrE,IAAI,CAoBR,CAAA"}
@@ -1,7 +1,7 @@
1
- import { Array, Option, Schema as S, pipe } from 'effect';
1
+ import { Array, Option, Schema as S } from 'effect';
2
2
  import { createLazy } from '../../html';
3
3
  import { evo } from '../../struct';
4
- import { BaseModel, SelectedItem, baseInit, closedModel, makeUpdate, makeView, } from './shared';
4
+ import { BaseModel, SelectedItem, baseInit, makeUpdate, makeView, } from './shared';
5
5
  // MODEL
6
6
  /** Schema for the listbox component's state, tracking open/closed status, active item, selected item, activation trigger, and typeahead search. */
7
7
  export const Model = BaseModel.pipe(S.extend(S.Struct({ maybeSelectedItem: S.OptionFromSelf(S.String) })));
@@ -12,16 +12,13 @@ export const init = (config) => ({
12
12
  });
13
13
  // UPDATE
14
14
  /** Processes a listbox message and returns the next model and commands. Closes the listbox on selection (single-select behavior). */
15
- export const update = makeUpdate((model, item, context) => [
16
- evo(closedModel(model), {
17
- maybeSelectedItem: () => Option.some(item),
18
- }),
19
- pipe(Array.getSomes([
20
- context.maybeNextFrame,
21
- context.maybeUnlockScroll,
22
- context.maybeRestoreInert,
23
- ]), Array.prepend(context.focusButton)),
24
- ]);
15
+ export const update = makeUpdate((model, item, context) => {
16
+ const [closedModelResult, commands] = context.closeWithFocus(model);
17
+ return [
18
+ evo(closedModelResult, { maybeSelectedItem: () => Option.some(item) }),
19
+ commands,
20
+ ];
21
+ });
25
22
  /** Programmatically selects an item in the single-select listbox, closing the listbox and returning
26
23
  * focus commands. Use this in domain-event handlers when the listbox uses `onSelectedItem`. */
27
24
  export const selectItem = (model, item) => update(model, SelectedItem({ item }));
@@ -13,7 +13,11 @@ export declare const Model: S.Struct<{
13
13
  isOpen: typeof S.Boolean;
14
14
  isAnimated: typeof S.Boolean;
15
15
  isModal: typeof S.Boolean;
16
- transitionState: S.Literal<["Idle", "EnterStart", "EnterAnimating", "LeaveStart", "LeaveAnimating"]>;
16
+ transition: S.Struct<{
17
+ id: typeof S.String;
18
+ isShowing: typeof S.Boolean;
19
+ transitionState: S.Literal<["Idle", "EnterStart", "EnterAnimating", "LeaveStart", "LeaveAnimating"]>;
20
+ }>;
17
21
  maybeActiveItemIndex: S.OptionFromSelf<typeof S.Number>;
18
22
  activationTrigger: S.Literal<["Pointer", "Keyboard"]>;
19
23
  searchQuery: typeof S.String;
@@ -90,12 +94,10 @@ export declare const CompletedAdvanceFocus: import("../../schema").CallableTagge
90
94
  export declare const IgnoredMouseClick: import("../../schema").CallableTaggedStruct<"IgnoredMouseClick", {}>;
91
95
  /** Sent when a Space key-up is captured to prevent page scrolling. */
92
96
  export declare const SuppressedSpaceScroll: import("../../schema").CallableTaggedStruct<"SuppressedSpaceScroll", {}>;
93
- /** Sent internally when a double-rAF completes, advancing the transition to its animating phase. */
94
- export declare const AdvancedTransitionFrame: import("../../schema").CallableTaggedStruct<"AdvancedTransitionFrame", {}>;
95
- /** Sent internally when all CSS transitions on the menu items container have completed. */
96
- export declare const EndedTransition: import("../../schema").CallableTaggedStruct<"EndedTransition", {}>;
97
- /** Sent internally when the menu button moves in the viewport during a leave transition, cancelling the animation. */
98
- export declare const DetectedButtonMovement: import("../../schema").CallableTaggedStruct<"DetectedButtonMovement", {}>;
97
+ /** Wraps a Transition submodel message for delegation. */
98
+ export declare const GotTransitionMessage: import("../../schema").CallableTaggedStruct<"GotTransitionMessage", {
99
+ message: S.Union<[import("../../schema").CallableTaggedStruct<"Showed", {}>, import("../../schema").CallableTaggedStruct<"Hidden", {}>, import("../../schema").CallableTaggedStruct<"AdvancedTransitionFrame", {}>, import("../../schema").CallableTaggedStruct<"EndedTransition", {}>]>;
100
+ }>;
99
101
  /** Sent when the user presses a pointer device on the menu button. Records pointer type and toggles for mouse. */
100
102
  export declare const PressedPointerOnButton: import("../../schema").CallableTaggedStruct<"PressedPointerOnButton", {
101
103
  pointerType: typeof S.String;
@@ -133,12 +135,11 @@ export declare const Message: S.Union<[
133
135
  typeof CompletedAdvanceFocus,
134
136
  typeof IgnoredMouseClick,
135
137
  typeof SuppressedSpaceScroll,
136
- typeof AdvancedTransitionFrame,
137
- typeof EndedTransition,
138
- typeof DetectedButtonMovement,
138
+ typeof GotTransitionMessage,
139
139
  typeof PressedPointerOnButton,
140
140
  typeof ReleasedPointerOnItems
141
141
  ]>;
142
+ export type Message = typeof Message.Type;
142
143
  export type Opened = typeof Opened.Type;
143
144
  export type Closed = typeof Closed.Type;
144
145
  export type ClosedByTab = typeof ClosedByTab.Type;
@@ -151,12 +152,8 @@ export type Searched = typeof Searched.Type;
151
152
  export type ClearedSearch = typeof ClearedSearch.Type;
152
153
  export type IgnoredMouseClick = typeof IgnoredMouseClick.Type;
153
154
  export type SuppressedSpaceScroll = typeof SuppressedSpaceScroll.Type;
154
- export type AdvancedTransitionFrame = typeof AdvancedTransitionFrame.Type;
155
- export type EndedTransition = typeof EndedTransition.Type;
156
- export type DetectedButtonMovement = typeof DetectedButtonMovement.Type;
157
155
  export type PressedPointerOnButton = typeof PressedPointerOnButton.Type;
158
156
  export type ReleasedPointerOnItems = typeof ReleasedPointerOnItems.Type;
159
- export type Message = typeof Message.Type;
160
157
  /** Configuration for creating a menu model with `init`. `isAnimated` enables CSS transition coordination (default `false`). `isModal` locks page scroll and inerts other elements when open (default `false`). */
161
158
  export type InitConfig = Readonly<{
162
159
  id: string;
@@ -166,10 +163,6 @@ export type InitConfig = Readonly<{
166
163
  /** Creates an initial menu model from a config. Defaults to closed with no active item. */
167
164
  export declare const init: (config: InitConfig) => Model;
168
165
  type UpdateReturn = readonly [Model, ReadonlyArray<Command.Command<Message>>];
169
- /** Advances the menu's enter/leave transition by waiting a double-rAF. */
170
- export declare const RequestFrame: Command.CommandDefinition<"RequestFrame", {
171
- readonly _tag: "AdvancedTransitionFrame";
172
- }>;
173
166
  /** Prevents page scrolling while the menu is open. */
174
167
  export declare const LockScroll: Command.CommandDefinition<"LockScroll", {
175
168
  readonly _tag: "CompletedLockScroll";
@@ -207,15 +200,18 @@ export declare const DelayClearSearch: Command.CommandDefinition<"DelayClearSear
207
200
  readonly _tag: "ClearedSearch";
208
201
  readonly version: number;
209
202
  }>;
210
- /** Waits for all CSS transitions on the menu items container to complete. */
211
- export declare const WaitForTransitions: Command.CommandDefinition<"WaitForTransitions", {
212
- readonly _tag: "EndedTransition";
213
- }>;
214
- /** Detects whether the menu button moved or the leave transition ended — whichever comes first. */
203
+ /** Detects whether the menu button moved or the leave transition ended whichever comes first. Both outcomes signal the Transition submodel that leave is complete. */
215
204
  export declare const DetectMovementOrTransitionEnd: Command.CommandDefinition<"DetectMovementOrTransitionEnd", {
216
- readonly _tag: "EndedTransition";
217
- } | {
218
- readonly _tag: "DetectedButtonMovement";
205
+ readonly _tag: "GotTransitionMessage";
206
+ readonly message: {
207
+ readonly _tag: "Showed";
208
+ } | {
209
+ readonly _tag: "Hidden";
210
+ } | {
211
+ readonly _tag: "AdvancedTransitionFrame";
212
+ } | {
213
+ readonly _tag: "EndedTransition";
214
+ };
219
215
  }>;
220
216
  /** Processes a menu message and returns the next model and commands. */
221
217
  export declare const update: (model: Model, message: Message) => UpdateReturn;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/index.ts"],"names":[],"mappings":"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"}