foldkit 0.33.5 → 0.34.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 (82) hide show
  1. package/README.md +19 -19
  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 +3 -0
  5. package/dist/devtools/overlay.d.ts.map +1 -1
  6. package/dist/devtools/overlay.js +79 -34
  7. package/dist/html/index.d.ts +431 -5
  8. package/dist/html/index.d.ts.map +1 -1
  9. package/dist/html/index.js +1 -0
  10. package/dist/html/public.d.ts +1 -2
  11. package/dist/html/public.d.ts.map +1 -1
  12. package/dist/html/public.js +1 -2
  13. package/dist/task/dom.d.ts +6 -6
  14. package/dist/task/dom.js +6 -6
  15. package/dist/task/inert.d.ts +2 -2
  16. package/dist/task/inert.js +2 -2
  17. package/dist/task/scrollLock.d.ts +2 -2
  18. package/dist/task/scrollLock.js +2 -2
  19. package/dist/ui/checkbox/index.d.ts +5 -9
  20. package/dist/ui/checkbox/index.d.ts.map +1 -1
  21. package/dist/ui/checkbox/index.js +7 -10
  22. package/dist/ui/checkbox/public.d.ts +1 -1
  23. package/dist/ui/checkbox/public.d.ts.map +1 -1
  24. package/dist/ui/combobox/multi.d.ts +31 -10
  25. package/dist/ui/combobox/multi.d.ts.map +1 -1
  26. package/dist/ui/combobox/multi.js +1 -1
  27. package/dist/ui/combobox/public.d.ts +1 -1
  28. package/dist/ui/combobox/public.d.ts.map +1 -1
  29. package/dist/ui/combobox/shared.d.ts +53 -14
  30. package/dist/ui/combobox/shared.d.ts.map +1 -1
  31. package/dist/ui/combobox/shared.js +72 -28
  32. package/dist/ui/combobox/single.d.ts +31 -10
  33. package/dist/ui/combobox/single.d.ts.map +1 -1
  34. package/dist/ui/combobox/single.js +1 -1
  35. package/dist/ui/dialog/index.d.ts +14 -8
  36. package/dist/ui/dialog/index.d.ts.map +1 -1
  37. package/dist/ui/dialog/index.js +21 -12
  38. package/dist/ui/dialog/public.d.ts +1 -1
  39. package/dist/ui/dialog/public.d.ts.map +1 -1
  40. package/dist/ui/dialog/public.js +1 -1
  41. package/dist/ui/disclosure/index.d.ts +11 -8
  42. package/dist/ui/disclosure/index.d.ts.map +1 -1
  43. package/dist/ui/disclosure/index.js +20 -18
  44. package/dist/ui/disclosure/public.d.ts +1 -1
  45. package/dist/ui/disclosure/public.d.ts.map +1 -1
  46. package/dist/ui/listbox/multi.d.ts +34 -9
  47. package/dist/ui/listbox/multi.d.ts.map +1 -1
  48. package/dist/ui/listbox/multi.js +1 -1
  49. package/dist/ui/listbox/public.d.ts +1 -1
  50. package/dist/ui/listbox/public.d.ts.map +1 -1
  51. package/dist/ui/listbox/shared.d.ts +57 -13
  52. package/dist/ui/listbox/shared.d.ts.map +1 -1
  53. package/dist/ui/listbox/shared.js +77 -27
  54. package/dist/ui/listbox/single.d.ts +34 -9
  55. package/dist/ui/listbox/single.d.ts.map +1 -1
  56. package/dist/ui/listbox/single.js +1 -1
  57. package/dist/ui/menu/index.d.ts +39 -11
  58. package/dist/ui/menu/index.d.ts.map +1 -1
  59. package/dist/ui/menu/index.js +81 -32
  60. package/dist/ui/menu/public.d.ts +1 -1
  61. package/dist/ui/menu/public.d.ts.map +1 -1
  62. package/dist/ui/popover/index.d.ts +28 -12
  63. package/dist/ui/popover/index.d.ts.map +1 -1
  64. package/dist/ui/popover/index.js +50 -24
  65. package/dist/ui/popover/public.d.ts +1 -1
  66. package/dist/ui/popover/public.d.ts.map +1 -1
  67. package/dist/ui/radioGroup/index.d.ts +8 -7
  68. package/dist/ui/radioGroup/index.d.ts.map +1 -1
  69. package/dist/ui/radioGroup/index.js +12 -9
  70. package/dist/ui/radioGroup/public.d.ts +1 -1
  71. package/dist/ui/radioGroup/public.d.ts.map +1 -1
  72. package/dist/ui/switch/index.d.ts +5 -9
  73. package/dist/ui/switch/index.d.ts.map +1 -1
  74. package/dist/ui/switch/index.js +7 -10
  75. package/dist/ui/switch/public.d.ts +1 -1
  76. package/dist/ui/switch/public.d.ts.map +1 -1
  77. package/dist/ui/tabs/index.d.ts +9 -7
  78. package/dist/ui/tabs/index.d.ts.map +1 -1
  79. package/dist/ui/tabs/index.js +27 -17
  80. package/dist/ui/tabs/public.d.ts +1 -1
  81. package/dist/ui/tabs/public.d.ts.map +1 -1
  82. package/package.json +3 -3
@@ -80,8 +80,26 @@ export const MovedPointerOverItem = m('MovedPointerOverItem', {
80
80
  screenX: S.Number,
81
81
  screenY: S.Number,
82
82
  });
83
- /** Placeholder message used when no action is needed. */
84
- export const NoOp = m('NoOp');
83
+ /** Sent when the scroll lock command completes. */
84
+ export const CompletedScrollLock = m('CompletedScrollLock');
85
+ /** Sent when the scroll unlock command completes. */
86
+ export const CompletedScrollUnlock = m('CompletedScrollUnlock');
87
+ /** Sent when the inert-others command completes. */
88
+ export const CompletedInertSetup = m('CompletedInertSetup');
89
+ /** Sent when the restore-inert command completes. */
90
+ export const CompletedInertTeardown = m('CompletedInertTeardown');
91
+ /** Sent when the focus-button command completes after closing. */
92
+ export const CompletedButtonFocus = m('CompletedButtonFocus');
93
+ /** Sent when the focus-items command completes after opening. */
94
+ export const CompletedItemsFocus = m('CompletedItemsFocus');
95
+ /** Sent when the scroll-into-view command completes after keyboard activation. */
96
+ export const CompletedScrollIntoView = m('CompletedScrollIntoView');
97
+ /** Sent when the programmatic item click command completes. */
98
+ export const CompletedItemClick = m('CompletedItemClick');
99
+ /** Sent when a mouse click on the button is ignored because pointer-down already handled the toggle. */
100
+ export const IgnoredMouseClick = m('IgnoredMouseClick');
101
+ /** Sent when a Space key-up is captured to prevent page scrolling. */
102
+ export const SuppressedSpaceScroll = m('SuppressedSpaceScroll');
85
103
  /** Sent internally when a double-rAF completes, advancing the transition to its animating phase. */
86
104
  export const AdvancedTransitionFrame = m('AdvancedTransitionFrame');
87
105
  /** Sent internally when all CSS transitions on the listbox items container have completed. */
@@ -94,7 +112,7 @@ export const PressedPointerOnButton = m('PressedPointerOnButton', {
94
112
  button: S.Number,
95
113
  });
96
114
  /** Union of all messages the listbox component can produce. */
97
- export const Message = S.Union(Opened, Closed, ClosedByTab, ActivatedItem, DeactivatedItem, SelectedItem, MovedPointerOverItem, RequestedItemClick, Searched, ClearedSearch, NoOp, AdvancedTransitionFrame, EndedTransition, DetectedButtonMovement, PressedPointerOnButton);
115
+ export const Message = S.Union(Opened, Closed, ClosedByTab, ActivatedItem, DeactivatedItem, SelectedItem, MovedPointerOverItem, RequestedItemClick, Searched, ClearedSearch, CompletedScrollLock, CompletedScrollUnlock, CompletedInertSetup, CompletedInertTeardown, CompletedButtonFocus, CompletedItemsFocus, CompletedScrollIntoView, CompletedItemClick, IgnoredMouseClick, SuppressedSpaceScroll, AdvancedTransitionFrame, EndedTransition, DetectedButtonMovement, PressedPointerOnButton);
98
116
  // CONSTANTS
99
117
  export const SEARCH_DEBOUNCE_MILLISECONDS = 350;
100
118
  export const LEFT_MOUSE_BUTTON = 0;
@@ -119,14 +137,14 @@ export const makeUpdate = (handleSelectedItem) => {
119
137
  const withUpdateReturn = M.withReturnType();
120
138
  return (model, message) => {
121
139
  const maybeNextFrame = OptionExt.when(model.isAnimated, Task.nextFrame.pipe(Effect.as(AdvancedTransitionFrame())));
122
- const maybeLockScroll = OptionExt.when(model.isModal, Task.lockScroll.pipe(Effect.as(NoOp())));
123
- const maybeUnlockScroll = OptionExt.when(model.isModal, Task.unlockScroll.pipe(Effect.as(NoOp())));
140
+ const maybeLockScroll = OptionExt.when(model.isModal, Task.lockScroll.pipe(Effect.as(CompletedScrollLock())));
141
+ const maybeUnlockScroll = OptionExt.when(model.isModal, Task.unlockScroll.pipe(Effect.as(CompletedScrollUnlock())));
124
142
  const maybeInertOthers = OptionExt.when(model.isModal, Task.inertOthers(model.id, [
125
143
  buttonSelector(model.id),
126
144
  itemsSelector(model.id),
127
- ]).pipe(Effect.as(NoOp())));
128
- const maybeRestoreInert = OptionExt.when(model.isModal, Task.restoreInert(model.id).pipe(Effect.as(NoOp())));
129
- const focusButton = Task.focus(buttonSelector(model.id)).pipe(Effect.ignore, Effect.as(NoOp()));
145
+ ]).pipe(Effect.as(CompletedInertSetup())));
146
+ const maybeRestoreInert = OptionExt.when(model.isModal, Task.restoreInert(model.id).pipe(Effect.as(CompletedInertTeardown())));
147
+ const focusButton = Task.focus(buttonSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedButtonFocus()));
130
148
  return M.value(message).pipe(withUpdateReturn, M.tagsExhaustive({
131
149
  Opened: ({ maybeActiveItemIndex }) => {
132
150
  const nextModel = constrainedEvo(model, {
@@ -147,7 +165,7 @@ export const makeUpdate = (handleSelectedItem) => {
147
165
  maybeNextFrame,
148
166
  maybeLockScroll,
149
167
  maybeInertOthers,
150
- ]), Array.prepend(Task.focus(itemsSelector(model.id)).pipe(Effect.ignore, Effect.as(NoOp())))),
168
+ ]), Array.prepend(Task.focus(itemsSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedItemsFocus())))),
151
169
  ];
152
170
  },
153
171
  Closed: () => [
@@ -173,7 +191,7 @@ export const makeUpdate = (handleSelectedItem) => {
173
191
  }),
174
192
  activationTrigger === 'Keyboard'
175
193
  ? [
176
- Task.scrollIntoView(itemSelector(model.id, index)).pipe(Effect.ignore, Effect.as(NoOp())),
194
+ Task.scrollIntoView(itemSelector(model.id, index)).pipe(Effect.ignore, Effect.as(CompletedScrollIntoView())),
177
195
  ]
178
196
  : [],
179
197
  ],
@@ -208,7 +226,7 @@ export const makeUpdate = (handleSelectedItem) => {
208
226
  RequestedItemClick: ({ index }) => [
209
227
  model,
210
228
  [
211
- Task.clickElement(itemSelector(model.id, index)).pipe(Effect.ignore, Effect.as(NoOp())),
229
+ Task.clickElement(itemSelector(model.id, index)).pipe(Effect.ignore, Effect.as(CompletedItemClick())),
212
230
  ],
213
231
  ],
214
232
  Searched: ({ key, maybeTargetIndex }) => {
@@ -286,16 +304,25 @@ export const makeUpdate = (handleSelectedItem) => {
286
304
  maybeNextFrame,
287
305
  maybeLockScroll,
288
306
  maybeInertOthers,
289
- ]), Array.prepend(Task.focus(itemsSelector(model.id)).pipe(Effect.ignore, Effect.as(NoOp())))),
307
+ ]), Array.prepend(Task.focus(itemsSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedItemsFocus())))),
290
308
  ];
291
309
  },
292
- NoOp: () => [model, []],
310
+ CompletedScrollLock: () => [model, []],
311
+ CompletedScrollUnlock: () => [model, []],
312
+ CompletedInertSetup: () => [model, []],
313
+ CompletedInertTeardown: () => [model, []],
314
+ CompletedButtonFocus: () => [model, []],
315
+ CompletedItemsFocus: () => [model, []],
316
+ CompletedScrollIntoView: () => [model, []],
317
+ CompletedItemClick: () => [model, []],
318
+ IgnoredMouseClick: () => [model, []],
319
+ SuppressedSpaceScroll: () => [model, []],
293
320
  }));
294
321
  };
295
322
  };
296
323
  export const makeView = (behavior) => (config) => {
297
324
  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();
298
- const { model: { id, isOpen, orientation, transitionState, maybeActiveItemIndex, searchQuery, maybeLastButtonPointerType, }, toMessage, items, itemToConfig, isItemDisabled, isButtonDisabled, buttonContent, buttonClassName, itemsClassName, itemsScrollClassName, backdropClassName, className, itemGroupKey, groupToHeading, groupClassName, separatorClassName, anchor, name, form, isDisabled, isInvalid, } = config;
325
+ const { model: { id, isOpen, orientation, transitionState, maybeActiveItemIndex, searchQuery, maybeLastButtonPointerType, }, toMessage, 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;
299
326
  const itemToValue = config.itemToValue ?? (item => String(item));
300
327
  const itemToSearchText = config.itemToSearchText ?? (item => itemToValue(item));
301
328
  const isLeaving = transitionState === 'LeaveStart' || transitionState === 'LeaveAnimating';
@@ -344,7 +371,7 @@ export const makeView = (behavior) => (config) => {
344
371
  const handleButtonClick = () => {
345
372
  const isMouse = Option.exists(maybeLastButtonPointerType, type => type === 'mouse');
346
373
  if (isMouse) {
347
- return toMessage(NoOp());
374
+ return toMessage(IgnoredMouseClick());
348
375
  }
349
376
  else if (isOpen) {
350
377
  return toMessage(Closed());
@@ -353,7 +380,7 @@ export const makeView = (behavior) => (config) => {
353
380
  return toMessage(Opened({ maybeActiveItemIndex: Option.none() }));
354
381
  }
355
382
  };
356
- const handleSpaceKeyUp = (key) => OptionExt.when(key === ' ', toMessage(NoOp()));
383
+ const handleSpaceKeyUp = (key) => OptionExt.when(key === ' ', toMessage(SuppressedSpaceScroll()));
357
384
  const resolveActiveIndex = (key) => Option.match(maybeActiveItemIndex, {
358
385
  onNone: () => M.value(key).pipe(M.whenOr(previousKey, 'End', 'PageDown', () => lastEnabledIndex), M.orElse(() => firstEnabledIndex)),
359
386
  onSome: activeIndex => keyToIndex(nextKey, previousKey, items.length, activeIndex, isItemDisabledByIndex)(key),
@@ -369,10 +396,9 @@ export const makeView = (behavior) => (config) => {
369
396
  index: resolveActiveIndex(key),
370
397
  activationTrigger: 'Keyboard',
371
398
  })))), M.when(isPrintableKey, () => searchForKey(key)), M.orElse(() => Option.none()));
372
- const buttonAttributes = [
399
+ const resolvedButtonAttributes = [
373
400
  Id(`${id}-button`),
374
401
  Type('button'),
375
- Class(buttonClassName),
376
402
  AriaHasPopup('listbox'),
377
403
  AriaExpanded(isVisible),
378
404
  AriaControls(`${id}-items`),
@@ -386,6 +412,8 @@ export const makeView = (behavior) => (config) => {
386
412
  ]),
387
413
  ...(isVisible ? [DataAttribute('open', '')] : []),
388
414
  ...(isInvalid ? [DataAttribute('invalid', '')] : []),
415
+ ...(buttonClassName ? [Class(buttonClassName)] : []),
416
+ ...buttonAttributes,
389
417
  ];
390
418
  const maybeActiveDescendant = Option.match(maybeActiveItemIndex, {
391
419
  onNone: () => [],
@@ -409,7 +437,6 @@ export const makeView = (behavior) => (config) => {
409
437
  AriaLabelledBy(`${id}-button`),
410
438
  ...maybeActiveDescendant,
411
439
  Tabindex(0),
412
- Class(itemsClassName),
413
440
  ...anchorAttributes,
414
441
  ...transitionAttributes,
415
442
  ...(isLeaving
@@ -419,6 +446,8 @@ export const makeView = (behavior) => (config) => {
419
446
  OnKeyUpPreventDefault(handleSpaceKeyUp),
420
447
  OnBlur(toMessage(ClosedByTab())),
421
448
  ]),
449
+ ...(itemsClassName ? [Class(itemsClassName)] : []),
450
+ ...itemsAttributes,
422
451
  ];
423
452
  const listboxItems = Array.map(items, (item, index) => {
424
453
  const isActiveItem = Option.exists(maybeActiveItemIndex, activeIndex => activeIndex === index);
@@ -434,7 +463,6 @@ export const makeView = (behavior) => (config) => {
434
463
  Id(itemId(id, index)),
435
464
  Role('option'),
436
465
  AriaSelected(isSelectedItem),
437
- Class(itemConfig.className),
438
466
  ...(isActiveItem ? [DataAttribute('active', '')] : []),
439
467
  ...(isSelectedItem ? [DataAttribute('selected', '')] : []),
440
468
  ...(isDisabledItem
@@ -451,6 +479,7 @@ export const makeView = (behavior) => (config) => {
451
479
  OnPointerLeave(pointerType => OptionExt.when(pointerType !== 'touch', toMessage(DeactivatedItem()))),
452
480
  ]
453
481
  : []),
482
+ ...(itemConfig.className ? [Class(itemConfig.className)] : []),
454
483
  ], [itemConfig.content]);
455
484
  });
456
485
  const renderGroupedItems = () => {
@@ -467,7 +496,11 @@ export const makeView = (behavior) => (config) => {
467
496
  const headingElement = Option.match(maybeHeading, {
468
497
  onNone: () => [],
469
498
  onSome: heading => [
470
- keyed('div')(headingId, [Id(headingId), Role('presentation'), Class(heading.className)], [heading.content]),
499
+ keyed('div')(headingId, [
500
+ Id(headingId),
501
+ Role('presentation'),
502
+ ...(heading.className ? [Class(heading.className)] : []),
503
+ ], [heading.content]),
471
504
  ],
472
505
  });
473
506
  const groupContent = [...headingElement, ...segment.items];
@@ -475,22 +508,36 @@ export const makeView = (behavior) => (config) => {
475
508
  Role('group'),
476
509
  ...(Option.isSome(maybeHeading) ? [AriaLabelledBy(headingId)] : []),
477
510
  ...(groupClassName ? [Class(groupClassName)] : []),
511
+ ...groupAttributes,
478
512
  ], groupContent);
479
- const separator = segmentIndex > 0 && separatorClassName
513
+ const separator = segmentIndex > 0 &&
514
+ (separatorClassName ||
515
+ Array.isNonEmptyReadonlyArray(separatorAttributes))
480
516
  ? [
481
- keyed('div')(`${id}-separator-${segmentIndex}`, [Role('separator'), Class(separatorClassName)], []),
517
+ keyed('div')(`${id}-separator-${segmentIndex}`, [
518
+ Role('separator'),
519
+ ...(separatorClassName ? [Class(separatorClassName)] : []),
520
+ ...separatorAttributes,
521
+ ], []),
482
522
  ]
483
523
  : [];
484
524
  return [...separator, groupElement];
485
525
  });
486
526
  };
487
527
  const backdrop = keyed('div')(`${id}-backdrop`, [
488
- Class(backdropClassName),
489
528
  ...(isLeaving ? [] : [OnClick(toMessage(Closed()))]),
529
+ ...(backdropClassName ? [Class(backdropClassName)] : []),
530
+ ...backdropAttributes,
490
531
  ], []);
491
532
  const renderedItems = renderGroupedItems();
492
- const scrollableItems = itemsScrollClassName
493
- ? [div([Class(itemsScrollClassName)], renderedItems)]
533
+ const scrollableItems = itemsScrollClassName ||
534
+ Array.isNonEmptyReadonlyArray(itemsScrollAttributes)
535
+ ? [
536
+ div([
537
+ ...(itemsScrollClassName ? [Class(itemsScrollClassName)] : []),
538
+ ...itemsScrollAttributes,
539
+ ], renderedItems),
540
+ ]
494
541
  : renderedItems;
495
542
  const visibleContent = [
496
543
  backdrop,
@@ -513,12 +560,15 @@ export const makeView = (behavior) => (config) => {
513
560
  : [];
514
561
  const wrapperAttributes = [
515
562
  ...(className ? [Class(className)] : []),
563
+ ...attributes,
516
564
  ...(isVisible ? [DataAttribute('open', '')] : []),
517
565
  ...(isDisabled ? [DataAttribute('disabled', '')] : []),
518
566
  ...(isInvalid ? [DataAttribute('invalid', '')] : []),
519
567
  ];
520
568
  return div(wrapperAttributes, [
521
- keyed('button')(`${id}-button`, buttonAttributes, [buttonContent]),
569
+ keyed('button')(`${id}-button`, resolvedButtonAttributes, [
570
+ buttonContent,
571
+ ]),
522
572
  ...hiddenInputs,
523
573
  ...(isVisible ? visibleContent : []),
524
574
  ]);
@@ -1,5 +1,5 @@
1
1
  import { Option, Schema as S } from 'effect';
2
- import type { Html } from '../../html';
2
+ import { type Html } from '../../html';
3
3
  import { type BaseInitConfig, type BaseViewConfig } from './shared';
4
4
  /** Schema for the listbox component's state, tracking open/closed status, active item, selected item, activation trigger, and typeahead search. */
5
5
  export declare const Model: S.extend<S.Struct<{
@@ -66,17 +66,29 @@ export declare const update: (model: {
66
66
  } & {
67
67
  readonly maybeSelectedItem: Option.Option<string>;
68
68
  }, readonly import("../../command").Command<{
69
- readonly _tag: "NoOp";
70
- } | {
71
69
  readonly _tag: "Closed";
72
70
  } | {
73
71
  readonly _tag: "ClosedByTab";
74
72
  } | {
75
73
  readonly _tag: "DeactivatedItem";
74
+ } | {
75
+ readonly _tag: "CompletedScrollLock";
76
+ } | {
77
+ readonly _tag: "CompletedScrollUnlock";
78
+ } | {
79
+ readonly _tag: "CompletedInertSetup";
80
+ } | {
81
+ readonly _tag: "CompletedInertTeardown";
82
+ } | {
83
+ readonly _tag: "CompletedScrollIntoView";
84
+ } | {
85
+ readonly _tag: "CompletedItemClick";
76
86
  } | {
77
87
  readonly _tag: "AdvancedTransitionFrame";
78
88
  } | {
79
89
  readonly _tag: "EndedTransition";
90
+ } | {
91
+ readonly _tag: "CompletedButtonFocus";
80
92
  } | {
81
93
  readonly _tag: "Opened";
82
94
  readonly maybeActiveItemIndex: Option.Option<number>;
@@ -102,6 +114,12 @@ export declare const update: (model: {
102
114
  } | {
103
115
  readonly _tag: "ClearedSearch";
104
116
  readonly version: number;
117
+ } | {
118
+ readonly _tag: "CompletedItemsFocus";
119
+ } | {
120
+ readonly _tag: "IgnoredMouseClick";
121
+ } | {
122
+ readonly _tag: "SuppressedSpaceScroll";
105
123
  } | {
106
124
  readonly _tag: "DetectedButtonMovement";
107
125
  } | {
@@ -132,14 +150,14 @@ export declare const view: <Message, Item>(config: Readonly<{
132
150
  } & {
133
151
  readonly maybeSelectedItem: Option.Option<string>;
134
152
  };
135
- toMessage: (message: import("./shared").Opened | import("./shared").Closed | import("./shared").ClosedByTab | import("./shared").ActivatedItem | import("./shared").DeactivatedItem | import("./shared").SelectedItem | import("./shared").MovedPointerOverItem | import("./shared").RequestedItemClick | import("./shared").Searched | import("./shared").PressedPointerOnButton | import("./shared").NoOp) => Message;
153
+ toMessage: (message: import("./shared").Opened | import("./shared").Closed | import("./shared").ClosedByTab | import("./shared").ActivatedItem | import("./shared").DeactivatedItem | import("./shared").SelectedItem | import("./shared").MovedPointerOverItem | import("./shared").RequestedItemClick | import("./shared").Searched | import("./shared").PressedPointerOnButton | import("./shared").IgnoredMouseClick | import("./shared").SuppressedSpaceScroll) => Message;
136
154
  items: readonly Item[];
137
155
  itemToConfig: (item: Item, context: Readonly<{
138
156
  isActive: boolean;
139
157
  isDisabled: boolean;
140
158
  isSelected: boolean;
141
159
  }>) => Readonly<{
142
- className: string;
160
+ className?: string;
143
161
  content: Html;
144
162
  }>;
145
163
  isItemDisabled?: (item: Item, index: number) => boolean;
@@ -147,18 +165,25 @@ export declare const view: <Message, Item>(config: Readonly<{
147
165
  itemToValue?: (item: Item) => string;
148
166
  isButtonDisabled?: boolean;
149
167
  buttonContent: Html;
150
- buttonClassName: string;
151
- itemsClassName: string;
168
+ buttonClassName?: string;
169
+ buttonAttributes?: readonly import("../../html").Attribute<Message>[];
170
+ itemsClassName?: string;
171
+ itemsAttributes?: readonly import("../../html").Attribute<Message>[];
152
172
  itemsScrollClassName?: string;
153
- backdropClassName: string;
173
+ itemsScrollAttributes?: readonly import("../../html").Attribute<Message>[];
174
+ backdropClassName?: string;
175
+ backdropAttributes?: readonly import("../../html").Attribute<Message>[];
154
176
  className?: string;
177
+ attributes?: readonly import("../../html").Attribute<Message>[];
155
178
  itemGroupKey?: (item: Item, index: number) => string;
156
179
  groupToHeading?: (groupKey: string) => Readonly<{
157
180
  content: Html;
158
- className: string;
181
+ className?: string;
159
182
  }> | undefined;
160
183
  groupClassName?: string;
184
+ groupAttributes?: readonly import("../../html").Attribute<Message>[];
161
185
  separatorClassName?: string;
186
+ separatorAttributes?: readonly import("../../html").Attribute<Message>[];
162
187
  anchor?: Readonly<{
163
188
  placement?: import("@floating-ui/dom").Placement;
164
189
  gap?: number;
@@ -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,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGtC,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,EAKpB,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;AAIF,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;6EAC6E;AAC7E,eAAO,MAAM,IAAI,GAAI,OAAO,EAAE,IAAI,EAChC,cAAc,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC,KACnE,CAAC,CACF,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,WAAW,CAAC,KACzD,IAAI,CAgBR,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,EAAQ,MAAM,QAAQ,CAAA;AAEzD,OAAO,EAAE,KAAK,IAAI,EAAc,MAAM,YAAY,CAAA;AAElD,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,EAKpB,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;AAIF,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;6EAC6E;AAC7E,eAAO,MAAM,IAAI,GAAI,OAAO,EAAE,IAAI,EAChC,cAAc,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC,KACnE,CAAC,CACF,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,WAAW,CAAC,KACzD,IAAI,CAgBR,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { Array, Option, Schema as S, pipe } from 'effect';
2
- import { createLazy } from '../../html/lazy';
2
+ import { createLazy } from '../../html';
3
3
  import { evo } from '../../struct';
4
4
  import { BaseModel, baseInit, closedModel, makeUpdate, makeView, } from './shared';
5
5
  // MODEL
@@ -1,6 +1,6 @@
1
1
  import { Schema as S } from 'effect';
2
2
  import type { Command } from '../../command';
3
- import { type Html } from '../../html';
3
+ import { type Attribute, type Html } from '../../html';
4
4
  import type { AnchorConfig } from '../anchor';
5
5
  import { groupContiguous } from '../group';
6
6
  import { resolveTypeaheadMatch } from '../typeahead';
@@ -68,8 +68,28 @@ export declare const MovedPointerOverItem: import("../../schema").CallableTagged
68
68
  screenX: typeof S.Number;
69
69
  screenY: typeof S.Number;
70
70
  }>;
71
- /** Placeholder message used when no action is needed. */
72
- export declare const NoOp: import("../../schema").CallableTaggedStruct<"NoOp", {}>;
71
+ /** Sent when the focus-items command completes after opening the menu. */
72
+ export declare const CompletedItemsFocus: import("../../schema").CallableTaggedStruct<"CompletedItemsFocus", {}>;
73
+ /** Sent when the focus-button command completes after closing or selecting. */
74
+ export declare const CompletedButtonFocus: import("../../schema").CallableTaggedStruct<"CompletedButtonFocus", {}>;
75
+ /** Sent when the scroll lock command completes. */
76
+ export declare const CompletedScrollLock: import("../../schema").CallableTaggedStruct<"CompletedScrollLock", {}>;
77
+ /** Sent when the scroll unlock command completes. */
78
+ export declare const CompletedScrollUnlock: import("../../schema").CallableTaggedStruct<"CompletedScrollUnlock", {}>;
79
+ /** Sent when the inert-others command completes. */
80
+ export declare const CompletedInertSetup: import("../../schema").CallableTaggedStruct<"CompletedInertSetup", {}>;
81
+ /** Sent when the restore-inert command completes. */
82
+ export declare const CompletedInertTeardown: import("../../schema").CallableTaggedStruct<"CompletedInertTeardown", {}>;
83
+ /** Sent when the scroll-into-view command completes after keyboard activation. */
84
+ export declare const CompletedScrollIntoView: import("../../schema").CallableTaggedStruct<"CompletedScrollIntoView", {}>;
85
+ /** Sent when the programmatic click command completes. */
86
+ export declare const CompletedItemClick: import("../../schema").CallableTaggedStruct<"CompletedItemClick", {}>;
87
+ /** Sent when the advance-focus command completes. */
88
+ export declare const CompletedFocusAdvance: import("../../schema").CallableTaggedStruct<"CompletedFocusAdvance", {}>;
89
+ /** Sent when a mouse click on the button is ignored because pointer-down already handled the toggle. */
90
+ export declare const IgnoredMouseClick: import("../../schema").CallableTaggedStruct<"IgnoredMouseClick", {}>;
91
+ /** Sent when a Space key-up is captured to prevent page scrolling. */
92
+ export declare const SuppressedSpaceScroll: import("../../schema").CallableTaggedStruct<"SuppressedSpaceScroll", {}>;
73
93
  /** Sent internally when a double-rAF completes, advancing the transition to its animating phase. */
74
94
  export declare const AdvancedTransitionFrame: import("../../schema").CallableTaggedStruct<"AdvancedTransitionFrame", {}>;
75
95
  /** Sent internally when all CSS transitions on the menu items container have completed. */
@@ -109,7 +129,7 @@ export declare const Message: S.Union<[import("../../schema").CallableTaggedStru
109
129
  maybeTargetIndex: S.OptionFromSelf<typeof S.Number>;
110
130
  }>, import("../../schema").CallableTaggedStruct<"ClearedSearch", {
111
131
  version: typeof S.Number;
112
- }>, import("../../schema").CallableTaggedStruct<"NoOp", {}>, import("../../schema").CallableTaggedStruct<"AdvancedTransitionFrame", {}>, import("../../schema").CallableTaggedStruct<"EndedTransition", {}>, import("../../schema").CallableTaggedStruct<"DetectedButtonMovement", {}>, import("../../schema").CallableTaggedStruct<"PressedPointerOnButton", {
132
+ }>, import("../../schema").CallableTaggedStruct<"CompletedItemsFocus", {}>, import("../../schema").CallableTaggedStruct<"CompletedButtonFocus", {}>, import("../../schema").CallableTaggedStruct<"CompletedScrollLock", {}>, import("../../schema").CallableTaggedStruct<"CompletedScrollUnlock", {}>, import("../../schema").CallableTaggedStruct<"CompletedInertSetup", {}>, import("../../schema").CallableTaggedStruct<"CompletedInertTeardown", {}>, import("../../schema").CallableTaggedStruct<"CompletedScrollIntoView", {}>, import("../../schema").CallableTaggedStruct<"CompletedItemClick", {}>, import("../../schema").CallableTaggedStruct<"CompletedFocusAdvance", {}>, import("../../schema").CallableTaggedStruct<"IgnoredMouseClick", {}>, import("../../schema").CallableTaggedStruct<"SuppressedSpaceScroll", {}>, import("../../schema").CallableTaggedStruct<"AdvancedTransitionFrame", {}>, import("../../schema").CallableTaggedStruct<"EndedTransition", {}>, import("../../schema").CallableTaggedStruct<"DetectedButtonMovement", {}>, import("../../schema").CallableTaggedStruct<"PressedPointerOnButton", {
113
133
  pointerType: typeof S.String;
114
134
  button: typeof S.Number;
115
135
  screenX: typeof S.Number;
@@ -130,7 +150,8 @@ export type MovedPointerOverItem = typeof MovedPointerOverItem.Type;
130
150
  export type RequestedItemClick = typeof RequestedItemClick.Type;
131
151
  export type Searched = typeof Searched.Type;
132
152
  export type ClearedSearch = typeof ClearedSearch.Type;
133
- export type NoOp = typeof NoOp.Type;
153
+ export type IgnoredMouseClick = typeof IgnoredMouseClick.Type;
154
+ export type SuppressedSpaceScroll = typeof SuppressedSpaceScroll.Type;
134
155
  export type AdvancedTransitionFrame = typeof AdvancedTransitionFrame.Type;
135
156
  export type EndedTransition = typeof EndedTransition.Type;
136
157
  export type DetectedButtonMovement = typeof DetectedButtonMovement.Type;
@@ -150,18 +171,18 @@ type UpdateReturn = [Model, ReadonlyArray<Command<Message>>];
150
171
  export declare const update: (model: Model, message: Message) => UpdateReturn;
151
172
  /** Configuration for an individual menu item's appearance. */
152
173
  export type ItemConfig = Readonly<{
153
- className: string;
174
+ className?: string;
154
175
  content: Html;
155
176
  }>;
156
177
  /** Configuration for a group heading rendered above a group of items. */
157
178
  export type GroupHeading = Readonly<{
158
179
  content: Html;
159
- className: string;
180
+ className?: string;
160
181
  }>;
161
182
  /** Configuration for rendering a menu with `view`. */
162
183
  export type ViewConfig<Message, Item extends string> = Readonly<{
163
184
  model: Model;
164
- toMessage: (message: Opened | Closed | ClosedByTab | ActivatedItem | DeactivatedItem | SelectedItem | MovedPointerOverItem | RequestedItemClick | Searched | PressedPointerOnButton | ReleasedPointerOnItems | NoOp) => Message;
185
+ toMessage: (message: Opened | Closed | ClosedByTab | ActivatedItem | DeactivatedItem | SelectedItem | MovedPointerOverItem | RequestedItemClick | Searched | PressedPointerOnButton | ReleasedPointerOnItems | IgnoredMouseClick | SuppressedSpaceScroll) => Message;
165
186
  items: ReadonlyArray<Item>;
166
187
  itemToConfig: (item: Item, context: Readonly<{
167
188
  isActive: boolean;
@@ -171,15 +192,22 @@ export type ViewConfig<Message, Item extends string> = Readonly<{
171
192
  itemToSearchText?: (item: Item, index: number) => string;
172
193
  isButtonDisabled?: boolean;
173
194
  buttonContent: Html;
174
- buttonClassName: string;
175
- itemsClassName: string;
195
+ buttonClassName?: string;
196
+ buttonAttributes?: ReadonlyArray<Attribute<Message>>;
197
+ itemsClassName?: string;
198
+ itemsAttributes?: ReadonlyArray<Attribute<Message>>;
176
199
  itemsScrollClassName?: string;
177
- backdropClassName: string;
200
+ itemsScrollAttributes?: ReadonlyArray<Attribute<Message>>;
201
+ backdropClassName?: string;
202
+ backdropAttributes?: ReadonlyArray<Attribute<Message>>;
178
203
  className?: string;
204
+ attributes?: ReadonlyArray<Attribute<Message>>;
179
205
  itemGroupKey?: (item: Item, index: number) => string;
180
206
  groupToHeading?: (groupKey: string) => GroupHeading | undefined;
181
207
  groupClassName?: string;
208
+ groupAttributes?: ReadonlyArray<Attribute<Message>>;
182
209
  separatorClassName?: string;
210
+ separatorAttributes?: ReadonlyArray<Attribute<Message>>;
183
211
  anchor?: AnchorConfig;
184
212
  }>;
185
213
  export { groupContiguous, resolveTypeaheadMatch };
@@ -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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"}