foldkit 0.33.6 → 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.
- package/README.md +19 -19
- package/dist/devtools/overlay.d.ts.map +1 -1
- package/dist/devtools/overlay.js +76 -33
- package/dist/html/index.d.ts +431 -5
- package/dist/html/index.d.ts.map +1 -1
- package/dist/html/index.js +1 -0
- package/dist/html/public.d.ts +1 -2
- package/dist/html/public.d.ts.map +1 -1
- package/dist/html/public.js +1 -2
- package/dist/task/dom.d.ts +6 -6
- package/dist/task/dom.js +6 -6
- package/dist/task/inert.d.ts +2 -2
- package/dist/task/inert.js +2 -2
- package/dist/task/scrollLock.d.ts +2 -2
- package/dist/task/scrollLock.js +2 -2
- package/dist/ui/checkbox/index.d.ts +5 -9
- package/dist/ui/checkbox/index.d.ts.map +1 -1
- package/dist/ui/checkbox/index.js +7 -10
- package/dist/ui/checkbox/public.d.ts +1 -1
- package/dist/ui/checkbox/public.d.ts.map +1 -1
- package/dist/ui/combobox/multi.d.ts +31 -10
- package/dist/ui/combobox/multi.d.ts.map +1 -1
- package/dist/ui/combobox/multi.js +1 -1
- package/dist/ui/combobox/public.d.ts +1 -1
- package/dist/ui/combobox/public.d.ts.map +1 -1
- package/dist/ui/combobox/shared.d.ts +53 -14
- package/dist/ui/combobox/shared.d.ts.map +1 -1
- package/dist/ui/combobox/shared.js +72 -28
- package/dist/ui/combobox/single.d.ts +31 -10
- package/dist/ui/combobox/single.d.ts.map +1 -1
- package/dist/ui/combobox/single.js +1 -1
- package/dist/ui/dialog/index.d.ts +14 -8
- package/dist/ui/dialog/index.d.ts.map +1 -1
- package/dist/ui/dialog/index.js +21 -12
- package/dist/ui/dialog/public.d.ts +1 -1
- 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 +11 -8
- package/dist/ui/disclosure/index.d.ts.map +1 -1
- package/dist/ui/disclosure/index.js +20 -18
- package/dist/ui/disclosure/public.d.ts +1 -1
- package/dist/ui/disclosure/public.d.ts.map +1 -1
- package/dist/ui/listbox/multi.d.ts +34 -9
- package/dist/ui/listbox/multi.d.ts.map +1 -1
- package/dist/ui/listbox/multi.js +1 -1
- package/dist/ui/listbox/public.d.ts +1 -1
- package/dist/ui/listbox/public.d.ts.map +1 -1
- package/dist/ui/listbox/shared.d.ts +57 -13
- package/dist/ui/listbox/shared.d.ts.map +1 -1
- package/dist/ui/listbox/shared.js +77 -27
- package/dist/ui/listbox/single.d.ts +34 -9
- package/dist/ui/listbox/single.d.ts.map +1 -1
- package/dist/ui/listbox/single.js +1 -1
- package/dist/ui/menu/index.d.ts +39 -11
- package/dist/ui/menu/index.d.ts.map +1 -1
- package/dist/ui/menu/index.js +81 -32
- package/dist/ui/menu/public.d.ts +1 -1
- package/dist/ui/menu/public.d.ts.map +1 -1
- package/dist/ui/popover/index.d.ts +28 -12
- package/dist/ui/popover/index.d.ts.map +1 -1
- package/dist/ui/popover/index.js +50 -24
- package/dist/ui/popover/public.d.ts +1 -1
- package/dist/ui/popover/public.d.ts.map +1 -1
- package/dist/ui/radioGroup/index.d.ts +8 -7
- package/dist/ui/radioGroup/index.d.ts.map +1 -1
- package/dist/ui/radioGroup/index.js +12 -9
- package/dist/ui/radioGroup/public.d.ts +1 -1
- package/dist/ui/radioGroup/public.d.ts.map +1 -1
- package/dist/ui/switch/index.d.ts +5 -9
- package/dist/ui/switch/index.d.ts.map +1 -1
- package/dist/ui/switch/index.js +7 -10
- package/dist/ui/switch/public.d.ts +1 -1
- package/dist/ui/switch/public.d.ts.map +1 -1
- package/dist/ui/tabs/index.d.ts +9 -7
- package/dist/ui/tabs/index.d.ts.map +1 -1
- package/dist/ui/tabs/index.js +27 -17
- package/dist/ui/tabs/public.d.ts +1 -1
- package/dist/ui/tabs/public.d.ts.map +1 -1
- 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
|
-
/**
|
|
84
|
-
export const
|
|
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,
|
|
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(
|
|
123
|
-
const maybeUnlockScroll = OptionExt.when(model.isModal, Task.unlockScroll.pipe(Effect.as(
|
|
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(
|
|
128
|
-
const maybeRestoreInert = OptionExt.when(model.isModal, Task.restoreInert(model.id).pipe(Effect.as(
|
|
129
|
-
const focusButton = Task.focus(buttonSelector(model.id)).pipe(Effect.ignore, Effect.as(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
307
|
+
]), Array.prepend(Task.focus(itemsSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedItemsFocus())))),
|
|
290
308
|
];
|
|
291
309
|
},
|
|
292
|
-
|
|
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(
|
|
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(
|
|
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
|
|
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, [
|
|
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 &&
|
|
513
|
+
const separator = segmentIndex > 0 &&
|
|
514
|
+
(separatorClassName ||
|
|
515
|
+
Array.isNonEmptyReadonlyArray(separatorAttributes))
|
|
480
516
|
? [
|
|
481
|
-
keyed('div')(`${id}-separator-${segmentIndex}`, [
|
|
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
|
-
|
|
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`,
|
|
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
|
|
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").
|
|
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
|
|
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
|
|
151
|
-
|
|
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
|
-
|
|
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
|
|
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,
|
|
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
|
|
2
|
+
import { createLazy } from '../../html';
|
|
3
3
|
import { evo } from '../../struct';
|
|
4
4
|
import { BaseModel, baseInit, closedModel, makeUpdate, makeView, } from './shared';
|
|
5
5
|
// MODEL
|
package/dist/ui/menu/index.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
72
|
-
export declare const
|
|
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<"
|
|
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
|
|
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
|
|
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
|
|
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 |
|
|
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
|
|
175
|
-
|
|
195
|
+
buttonClassName?: string;
|
|
196
|
+
buttonAttributes?: ReadonlyArray<Attribute<Message>>;
|
|
197
|
+
itemsClassName?: string;
|
|
198
|
+
itemsAttributes?: ReadonlyArray<Attribute<Message>>;
|
|
176
199
|
itemsScrollClassName?: string;
|
|
177
|
-
|
|
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":"AAAA,OAAO,EAML,MAAM,IAAI,CAAC,EAGZ,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,EAAE,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/index.ts"],"names":[],"mappings":"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"}
|