foldkit 0.41.0 → 0.43.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 +1 -0
- package/dist/devtools/overlay.d.ts.map +1 -1
- package/dist/devtools/overlay.js +8 -5
- package/dist/runtime/runtime.d.ts +2 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +17 -3
- package/dist/runtime/subscription.d.ts +6 -8
- package/dist/runtime/subscription.d.ts.map +1 -1
- package/dist/runtime/subscription.js +5 -1
- package/dist/ui/checkbox/index.d.ts +3 -3
- package/dist/ui/checkbox/index.d.ts.map +1 -1
- package/dist/ui/checkbox/index.js +11 -8
- package/dist/ui/combobox/multi.d.ts +4 -3
- package/dist/ui/combobox/multi.d.ts.map +1 -1
- package/dist/ui/combobox/multi.js +4 -4
- package/dist/ui/combobox/public.d.ts +2 -2
- package/dist/ui/combobox/public.d.ts.map +1 -1
- package/dist/ui/combobox/public.js +1 -1
- package/dist/ui/combobox/shared.d.ts +12 -1
- package/dist/ui/combobox/shared.d.ts.map +1 -1
- package/dist/ui/combobox/shared.js +32 -19
- package/dist/ui/combobox/single.d.ts +4 -3
- package/dist/ui/combobox/single.d.ts.map +1 -1
- package/dist/ui/combobox/single.js +4 -4
- package/dist/ui/dialog/index.d.ts +11 -3
- package/dist/ui/dialog/index.d.ts.map +1 -1
- package/dist/ui/dialog/index.js +15 -7
- 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 +8 -3
- package/dist/ui/disclosure/index.d.ts.map +1 -1
- package/dist/ui/disclosure/index.js +12 -7
- package/dist/ui/disclosure/public.d.ts +2 -2
- package/dist/ui/disclosure/public.d.ts.map +1 -1
- package/dist/ui/disclosure/public.js +1 -1
- package/dist/ui/dragAndDrop/index.d.ts +285 -0
- package/dist/ui/dragAndDrop/index.d.ts.map +1 -0
- package/dist/ui/dragAndDrop/index.js +511 -0
- package/dist/ui/dragAndDrop/public.d.ts +3 -0
- package/dist/ui/dragAndDrop/public.d.ts.map +1 -0
- package/dist/ui/dragAndDrop/public.js +1 -0
- package/dist/ui/index.d.ts +1 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +1 -0
- package/dist/ui/listbox/multi.d.ts +4 -3
- package/dist/ui/listbox/multi.d.ts.map +1 -1
- package/dist/ui/listbox/multi.js +4 -4
- package/dist/ui/listbox/public.d.ts +3 -3
- package/dist/ui/listbox/public.d.ts.map +1 -1
- package/dist/ui/listbox/public.js +2 -2
- package/dist/ui/listbox/shared.d.ts +14 -1
- package/dist/ui/listbox/shared.d.ts.map +1 -1
- package/dist/ui/listbox/shared.js +31 -16
- package/dist/ui/listbox/single.d.ts +10 -5
- package/dist/ui/listbox/single.d.ts.map +1 -1
- package/dist/ui/listbox/single.js +8 -5
- package/dist/ui/menu/index.d.ts +19 -3
- package/dist/ui/menu/index.d.ts.map +1 -1
- package/dist/ui/menu/index.js +39 -21
- package/dist/ui/menu/public.d.ts +2 -2
- package/dist/ui/menu/public.d.ts.map +1 -1
- package/dist/ui/menu/public.js +1 -1
- package/dist/ui/popover/index.d.ts +20 -3
- package/dist/ui/popover/index.d.ts.map +1 -1
- package/dist/ui/popover/index.js +31 -14
- package/dist/ui/popover/public.d.ts +2 -2
- package/dist/ui/popover/public.d.ts.map +1 -1
- package/dist/ui/popover/public.js +1 -1
- package/dist/ui/radioGroup/index.d.ts +10 -5
- package/dist/ui/radioGroup/index.d.ts.map +1 -1
- package/dist/ui/radioGroup/index.js +18 -20
- package/dist/ui/radioGroup/public.d.ts +2 -2
- package/dist/ui/radioGroup/public.d.ts.map +1 -1
- package/dist/ui/radioGroup/public.js +1 -1
- package/dist/ui/switch/index.d.ts +3 -3
- package/dist/ui/switch/index.d.ts.map +1 -1
- package/dist/ui/switch/index.js +11 -8
- package/dist/ui/tabs/index.d.ts +8 -3
- package/dist/ui/tabs/index.d.ts.map +1 -1
- package/dist/ui/tabs/index.js +15 -8
- package/dist/ui/tabs/public.d.ts +2 -2
- package/dist/ui/tabs/public.d.ts.map +1 -1
- package/dist/ui/tabs/public.js +1 -1
- package/package.json +1 -1
|
@@ -164,40 +164,52 @@ type SelectedItemContext = Readonly<{
|
|
|
164
164
|
maybeUnlockScroll: Option.Option<Command.Command<Message>>;
|
|
165
165
|
maybeRestoreInert: Option.Option<Command.Command<Message>>;
|
|
166
166
|
}>;
|
|
167
|
+
/** Advances the listbox's enter/leave transition by waiting a double-rAF. */
|
|
167
168
|
export declare const RequestFrame: Command.CommandDefinition<"RequestFrame", {
|
|
168
169
|
readonly _tag: "AdvancedTransitionFrame";
|
|
169
170
|
}>;
|
|
171
|
+
/** Prevents page scrolling while the listbox is open in modal mode. */
|
|
170
172
|
export declare const LockScroll: Command.CommandDefinition<"LockScroll", {
|
|
171
173
|
readonly _tag: "CompletedLockScroll";
|
|
172
174
|
}>;
|
|
175
|
+
/** Re-enables page scrolling after the listbox closes. */
|
|
173
176
|
export declare const UnlockScroll: Command.CommandDefinition<"UnlockScroll", {
|
|
174
177
|
readonly _tag: "CompletedUnlockScroll";
|
|
175
178
|
}>;
|
|
179
|
+
/** Marks all elements outside the listbox as inert for modal behavior. */
|
|
176
180
|
export declare const InertOthers: Command.CommandDefinition<"InertOthers", {
|
|
177
181
|
readonly _tag: "CompletedSetupInert";
|
|
178
182
|
}>;
|
|
183
|
+
/** Removes the inert attribute from elements outside the listbox. */
|
|
179
184
|
export declare const RestoreInert: Command.CommandDefinition<"RestoreInert", {
|
|
180
185
|
readonly _tag: "CompletedTeardownInert";
|
|
181
186
|
}>;
|
|
187
|
+
/** Moves focus back to the listbox button after closing. */
|
|
182
188
|
export declare const FocusButton: Command.CommandDefinition<"FocusButton", {
|
|
183
189
|
readonly _tag: "CompletedFocusButton";
|
|
184
190
|
}>;
|
|
191
|
+
/** Moves focus to the listbox items container after opening. */
|
|
185
192
|
export declare const FocusItems: Command.CommandDefinition<"FocusItems", {
|
|
186
193
|
readonly _tag: "CompletedFocusItems";
|
|
187
194
|
}>;
|
|
195
|
+
/** Scrolls the active listbox item into view after keyboard navigation. */
|
|
188
196
|
export declare const ScrollIntoView: Command.CommandDefinition<"ScrollIntoView", {
|
|
189
197
|
readonly _tag: "CompletedScrollIntoView";
|
|
190
198
|
}>;
|
|
199
|
+
/** Programmatically clicks the active listbox item's DOM element. */
|
|
191
200
|
export declare const ClickItem: Command.CommandDefinition<"ClickItem", {
|
|
192
201
|
readonly _tag: "CompletedClickItem";
|
|
193
202
|
}>;
|
|
203
|
+
/** Waits for the typeahead search debounce period before clearing the query. */
|
|
194
204
|
export declare const DelayClearSearch: Command.CommandDefinition<"DelayClearSearch", {
|
|
195
205
|
readonly _tag: "ClearedSearch";
|
|
196
206
|
readonly version: number;
|
|
197
207
|
}>;
|
|
208
|
+
/** Waits for all CSS transitions on the listbox items container to complete. */
|
|
198
209
|
export declare const WaitForTransitions: Command.CommandDefinition<"WaitForTransitions", {
|
|
199
210
|
readonly _tag: "EndedTransition";
|
|
200
211
|
}>;
|
|
212
|
+
/** Detects whether the listbox button moved or the leave transition ended — whichever comes first. */
|
|
201
213
|
export declare const DetectMovementOrTransitionEnd: Command.CommandDefinition<"DetectMovementOrTransitionEnd", {
|
|
202
214
|
readonly _tag: "EndedTransition";
|
|
203
215
|
} | {
|
|
@@ -281,7 +293,8 @@ export type GroupHeading = Readonly<{
|
|
|
281
293
|
/** Configuration for rendering a listbox with `view`. */
|
|
282
294
|
export type BaseViewConfig<Message, Item, Model extends BaseModel> = Readonly<{
|
|
283
295
|
model: Model;
|
|
284
|
-
|
|
296
|
+
toParentMessage: (message: Opened | Closed | ClosedByTab | ActivatedItem | DeactivatedItem | SelectedItem | MovedPointerOverItem | RequestedItemClick | Searched | PressedPointerOnButton | IgnoredMouseClick | SuppressedSpaceScroll) => Message;
|
|
297
|
+
onSelectedItem?: (value: string) => Message;
|
|
285
298
|
items: ReadonlyArray<Item>;
|
|
286
299
|
itemToConfig: (item: Item, context: Readonly<{
|
|
287
300
|
isActive: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/ui/listbox/shared.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/ui/listbox/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -134,17 +134,29 @@ export const closedModel = (model) => constrainedEvo(model, {
|
|
|
134
134
|
maybeLastPointerPosition: () => Option.none(),
|
|
135
135
|
maybeLastButtonPointerType: () => Option.none(),
|
|
136
136
|
});
|
|
137
|
+
/** Advances the listbox's enter/leave transition by waiting a double-rAF. */
|
|
137
138
|
export const RequestFrame = Command.define('RequestFrame', AdvancedTransitionFrame);
|
|
139
|
+
/** Prevents page scrolling while the listbox is open in modal mode. */
|
|
138
140
|
export const LockScroll = Command.define('LockScroll', CompletedLockScroll);
|
|
141
|
+
/** Re-enables page scrolling after the listbox closes. */
|
|
139
142
|
export const UnlockScroll = Command.define('UnlockScroll', CompletedUnlockScroll);
|
|
143
|
+
/** Marks all elements outside the listbox as inert for modal behavior. */
|
|
140
144
|
export const InertOthers = Command.define('InertOthers', CompletedSetupInert);
|
|
145
|
+
/** Removes the inert attribute from elements outside the listbox. */
|
|
141
146
|
export const RestoreInert = Command.define('RestoreInert', CompletedTeardownInert);
|
|
147
|
+
/** Moves focus back to the listbox button after closing. */
|
|
142
148
|
export const FocusButton = Command.define('FocusButton', CompletedFocusButton);
|
|
149
|
+
/** Moves focus to the listbox items container after opening. */
|
|
143
150
|
export const FocusItems = Command.define('FocusItems', CompletedFocusItems);
|
|
151
|
+
/** Scrolls the active listbox item into view after keyboard navigation. */
|
|
144
152
|
export const ScrollIntoView = Command.define('ScrollIntoView', CompletedScrollIntoView);
|
|
153
|
+
/** Programmatically clicks the active listbox item's DOM element. */
|
|
145
154
|
export const ClickItem = Command.define('ClickItem', CompletedClickItem);
|
|
155
|
+
/** Waits for the typeahead search debounce period before clearing the query. */
|
|
146
156
|
export const DelayClearSearch = Command.define('DelayClearSearch', ClearedSearch);
|
|
157
|
+
/** Waits for all CSS transitions on the listbox items container to complete. */
|
|
147
158
|
export const WaitForTransitions = Command.define('WaitForTransitions', EndedTransition);
|
|
159
|
+
/** Detects whether the listbox button moved or the leave transition ended — whichever comes first. */
|
|
148
160
|
export const DetectMovementOrTransitionEnd = Command.define('DetectMovementOrTransitionEnd', DetectedButtonMovement, EndedTransition);
|
|
149
161
|
export const makeUpdate = (handleSelectedItem) => {
|
|
150
162
|
const withUpdateReturn = M.withReturnType();
|
|
@@ -335,9 +347,12 @@ export const makeUpdate = (handleSelectedItem) => {
|
|
|
335
347
|
};
|
|
336
348
|
export const makeView = (behavior) => (config) => {
|
|
337
349
|
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();
|
|
338
|
-
const { model: { id, isOpen, orientation, transitionState, maybeActiveItemIndex, searchQuery, maybeLastButtonPointerType, },
|
|
350
|
+
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;
|
|
339
351
|
const itemToValue = config.itemToValue ?? (item => String(item));
|
|
340
352
|
const itemToSearchText = config.itemToSearchText ?? (item => itemToValue(item));
|
|
353
|
+
const dispatchSelectedItem = (value) => onSelectedItem
|
|
354
|
+
? onSelectedItem(value)
|
|
355
|
+
: toParentMessage(SelectedItem({ item: value }));
|
|
341
356
|
const isLeaving = transitionState === 'LeaveStart' || transitionState === 'LeaveAnimating';
|
|
342
357
|
const isVisible = isOpen || isLeaving;
|
|
343
358
|
const transitionAttributes = M.value(transitionState).pipe(M.when('EnterStart', () => [
|
|
@@ -372,28 +387,28 @@ export const makeView = (behavior) => (config) => {
|
|
|
372
387
|
const firstEnabledIndex = findFirstEnabledIndex(items.length, 0, isItemDisabledByIndex)(0, 1);
|
|
373
388
|
const lastEnabledIndex = findFirstEnabledIndex(items.length, 0, isItemDisabledByIndex)(items.length - 1, -1);
|
|
374
389
|
const selectedItemIndex = behavior.selectedItemIndex(config.model, items, itemToValue);
|
|
375
|
-
const handleButtonKeyDown = (key) => M.value(key).pipe(M.whenOr('Enter', ' ', 'ArrowDown', () => Option.some(
|
|
390
|
+
const handleButtonKeyDown = (key) => M.value(key).pipe(M.whenOr('Enter', ' ', 'ArrowDown', () => Option.some(toParentMessage(Opened({
|
|
376
391
|
maybeActiveItemIndex: Option.orElse(selectedItemIndex, () => Option.some(firstEnabledIndex)),
|
|
377
|
-
})))), M.when('ArrowUp', () => Option.some(
|
|
392
|
+
})))), M.when('ArrowUp', () => Option.some(toParentMessage(Opened({
|
|
378
393
|
maybeActiveItemIndex: Option.orElse(selectedItemIndex, () => Option.some(lastEnabledIndex)),
|
|
379
394
|
})))), M.orElse(() => Option.none()));
|
|
380
|
-
const handleButtonPointerDown = (pointerType, button) => Option.some(
|
|
395
|
+
const handleButtonPointerDown = (pointerType, button) => Option.some(toParentMessage(PressedPointerOnButton({
|
|
381
396
|
pointerType,
|
|
382
397
|
button,
|
|
383
398
|
})));
|
|
384
399
|
const handleButtonClick = () => {
|
|
385
400
|
const isMouse = Option.exists(maybeLastButtonPointerType, type => type === 'mouse');
|
|
386
401
|
if (isMouse) {
|
|
387
|
-
return
|
|
402
|
+
return toParentMessage(IgnoredMouseClick());
|
|
388
403
|
}
|
|
389
404
|
else if (isOpen) {
|
|
390
|
-
return
|
|
405
|
+
return toParentMessage(Closed());
|
|
391
406
|
}
|
|
392
407
|
else {
|
|
393
|
-
return
|
|
408
|
+
return toParentMessage(Opened({ maybeActiveItemIndex: Option.none() }));
|
|
394
409
|
}
|
|
395
410
|
};
|
|
396
|
-
const handleSpaceKeyUp = (key) => OptionExt.when(key === ' ',
|
|
411
|
+
const handleSpaceKeyUp = (key) => OptionExt.when(key === ' ', toParentMessage(SuppressedSpaceScroll()));
|
|
397
412
|
const resolveActiveIndex = (key) => Option.match(maybeActiveItemIndex, {
|
|
398
413
|
onNone: () => M.value(key).pipe(M.whenOr(previousKey, 'End', 'PageDown', () => lastEnabledIndex), M.orElse(() => firstEnabledIndex)),
|
|
399
414
|
onSome: activeIndex => keyToIndex(nextKey, previousKey, items.length, activeIndex, isItemDisabledByIndex)(key),
|
|
@@ -401,11 +416,11 @@ export const makeView = (behavior) => (config) => {
|
|
|
401
416
|
const searchForKey = (key) => {
|
|
402
417
|
const nextQuery = searchQuery + key;
|
|
403
418
|
const maybeTargetIndex = resolveTypeaheadMatch(items, nextQuery, maybeActiveItemIndex, isItemDisabledByIndex, itemToSearchText, Str.isNonEmpty(searchQuery));
|
|
404
|
-
return Option.some(
|
|
419
|
+
return Option.some(toParentMessage(Searched({ key, maybeTargetIndex })));
|
|
405
420
|
};
|
|
406
|
-
const handleItemsKeyDown = (key) => M.value(key).pipe(M.when('Escape', () => Option.some(
|
|
421
|
+
const handleItemsKeyDown = (key) => M.value(key).pipe(M.when('Escape', () => Option.some(toParentMessage(Closed()))), M.when('Enter', () => Option.map(maybeActiveItemIndex, index => toParentMessage(RequestedItemClick({ index })))), M.when(' ', () => Str.isNonEmpty(searchQuery)
|
|
407
422
|
? searchForKey(' ')
|
|
408
|
-
: Option.map(maybeActiveItemIndex, index =>
|
|
423
|
+
: Option.map(maybeActiveItemIndex, index => toParentMessage(RequestedItemClick({ index })))), M.when(isNavigationKey, () => Option.some(toParentMessage(ActivatedItem({
|
|
409
424
|
index: resolveActiveIndex(key),
|
|
410
425
|
activationTrigger: 'Keyboard',
|
|
411
426
|
})))), M.when(isPrintableKey, () => searchForKey(key)), M.orElse(() => Option.none()));
|
|
@@ -457,7 +472,7 @@ export const makeView = (behavior) => (config) => {
|
|
|
457
472
|
: [
|
|
458
473
|
OnKeyDownPreventDefault(handleItemsKeyDown),
|
|
459
474
|
OnKeyUpPreventDefault(handleSpaceKeyUp),
|
|
460
|
-
OnBlur(
|
|
475
|
+
OnBlur(toParentMessage(ClosedByTab())),
|
|
461
476
|
]),
|
|
462
477
|
...(itemsClassName ? [Class(itemsClassName)] : []),
|
|
463
478
|
...itemsAttributes,
|
|
@@ -483,13 +498,13 @@ export const makeView = (behavior) => (config) => {
|
|
|
483
498
|
: []),
|
|
484
499
|
...(isInteractive
|
|
485
500
|
? [
|
|
486
|
-
OnClick(
|
|
501
|
+
OnClick(dispatchSelectedItem(itemToValue(item))),
|
|
487
502
|
...(isActiveItem
|
|
488
503
|
? []
|
|
489
504
|
: [
|
|
490
|
-
OnPointerMove((screenX, screenY, pointerType) => OptionExt.when(pointerType !== 'touch',
|
|
505
|
+
OnPointerMove((screenX, screenY, pointerType) => OptionExt.when(pointerType !== 'touch', toParentMessage(MovedPointerOverItem({ index, screenX, screenY })))),
|
|
491
506
|
]),
|
|
492
|
-
OnPointerLeave(pointerType => OptionExt.when(pointerType !== 'touch',
|
|
507
|
+
OnPointerLeave(pointerType => OptionExt.when(pointerType !== 'touch', toParentMessage(DeactivatedItem()))),
|
|
493
508
|
]
|
|
494
509
|
: []),
|
|
495
510
|
...(itemConfig.className ? [Class(itemConfig.className)] : []),
|
|
@@ -538,7 +553,7 @@ export const makeView = (behavior) => (config) => {
|
|
|
538
553
|
});
|
|
539
554
|
};
|
|
540
555
|
const backdrop = keyed('div')(`${id}-backdrop`, [
|
|
541
|
-
...(isLeaving ? [] : [OnClick(
|
|
556
|
+
...(isLeaving ? [] : [OnClick(toParentMessage(Closed()))]),
|
|
542
557
|
...(backdropClassName ? [Class(backdropClassName)] : []),
|
|
543
558
|
...backdropAttributes,
|
|
544
559
|
], []);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Option, Schema as S } from 'effect';
|
|
2
|
+
import type * as Command from '../../command';
|
|
2
3
|
import { type Html } from '../../html';
|
|
3
|
-
import { type BaseInitConfig, type BaseViewConfig } from './shared';
|
|
4
|
+
import { type BaseInitConfig, type BaseViewConfig, type Message, SelectedItem } from './shared';
|
|
4
5
|
/** Schema for the listbox component's state, tracking open/closed status, active item, selected item, activation trigger, and typeahead search. */
|
|
5
6
|
export declare const Model: S.extend<S.Struct<{
|
|
6
7
|
id: typeof S.String;
|
|
@@ -47,7 +48,7 @@ export declare const update: (model: {
|
|
|
47
48
|
readonly maybeLastButtonPointerType: Option.Option<string>;
|
|
48
49
|
} & {
|
|
49
50
|
readonly maybeSelectedItem: Option.Option<string>;
|
|
50
|
-
}, message:
|
|
51
|
+
}, message: Message) => readonly [{
|
|
51
52
|
readonly id: string;
|
|
52
53
|
readonly orientation: "Horizontal" | "Vertical";
|
|
53
54
|
readonly isOpen: boolean;
|
|
@@ -130,6 +131,9 @@ export declare const update: (model: {
|
|
|
130
131
|
readonly pointerType: string;
|
|
131
132
|
}, never, never>;
|
|
132
133
|
}>[]];
|
|
134
|
+
/** Programmatically selects an item in the single-select listbox, closing the listbox and returning
|
|
135
|
+
* focus commands. Use this in domain-event handlers when the listbox uses `onSelectedItem`. */
|
|
136
|
+
export declare const selectItem: (model: Model, item: string) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
|
|
133
137
|
/** Configuration for rendering a single-select listbox with `view`. */
|
|
134
138
|
export type ViewConfig<Message, Item> = BaseViewConfig<Message, Item, Model>;
|
|
135
139
|
/** Renders a headless single-select listbox with typeahead search, keyboard navigation, selection tracking, and aria-activedescendant focus management. */
|
|
@@ -153,7 +157,8 @@ export declare const view: <Message, Item>(config: Readonly<{
|
|
|
153
157
|
} & {
|
|
154
158
|
readonly maybeSelectedItem: Option.Option<string>;
|
|
155
159
|
};
|
|
156
|
-
|
|
160
|
+
toParentMessage: (message: import("./shared").Opened | import("./shared").Closed | import("./shared").ClosedByTab | import("./shared").ActivatedItem | import("./shared").DeactivatedItem | SelectedItem | import("./shared").MovedPointerOverItem | import("./shared").RequestedItemClick | import("./shared").Searched | import("./shared").PressedPointerOnButton | import("./shared").IgnoredMouseClick | import("./shared").SuppressedSpaceScroll) => Message;
|
|
161
|
+
onSelectedItem?: (value: string) => Message;
|
|
157
162
|
items: readonly Item[];
|
|
158
163
|
itemToConfig: (item: Item, context: Readonly<{
|
|
159
164
|
isActive: boolean;
|
|
@@ -200,6 +205,6 @@ export declare const view: <Message, Item>(config: Readonly<{
|
|
|
200
205
|
isInvalid?: boolean;
|
|
201
206
|
}>) => Html;
|
|
202
207
|
/** Creates a memoized single-select listbox view. Static config is captured in a closure;
|
|
203
|
-
* only `model` and `
|
|
204
|
-
export declare const lazy: <Message, Item>(staticConfig: Omit<ViewConfig<Message, Item>, "model" | "
|
|
208
|
+
* only `model` and `toParentMessage` are compared per render via `createLazy`. */
|
|
209
|
+
export declare const lazy: <Message, Item>(staticConfig: Omit<ViewConfig<Message, Item>, "model" | "toParentMessage" | "onSelectedItem">) => ((model: Model, toParentMessage: BaseViewConfig<Message, Item, Model>["toParentMessage"]) => Html);
|
|
205
210
|
//# sourceMappingURL=single.d.ts.map
|
|
@@ -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,EAAE,KAAK,IAAI,EAAc,MAAM,YAAY,CAAA;AAElD,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,
|
|
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,7 +1,7 @@
|
|
|
1
1
|
import { Array, Option, Schema as S, pipe } from 'effect';
|
|
2
2
|
import { createLazy } from '../../html';
|
|
3
3
|
import { evo } from '../../struct';
|
|
4
|
-
import { BaseModel, baseInit, closedModel, makeUpdate, makeView, } from './shared';
|
|
4
|
+
import { BaseModel, SelectedItem, baseInit, closedModel, 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) })));
|
|
@@ -22,6 +22,9 @@ export const update = makeUpdate((model, item, context) => [
|
|
|
22
22
|
context.maybeRestoreInert,
|
|
23
23
|
]), Array.prepend(context.focusButton)),
|
|
24
24
|
]);
|
|
25
|
+
/** Programmatically selects an item in the single-select listbox, closing the listbox and returning
|
|
26
|
+
* focus commands. Use this in domain-event handlers when the listbox uses `onSelectedItem`. */
|
|
27
|
+
export const selectItem = (model, item) => update(model, SelectedItem({ item }));
|
|
25
28
|
/** Renders a headless single-select listbox with typeahead search, keyboard navigation, selection tracking, and aria-activedescendant focus management. */
|
|
26
29
|
export const view = makeView({
|
|
27
30
|
isItemSelected: (model, itemValue) => Option.exists(model.maybeSelectedItem, selectedItem => selectedItem === itemValue),
|
|
@@ -29,12 +32,12 @@ export const view = makeView({
|
|
|
29
32
|
ariaMultiSelectable: false,
|
|
30
33
|
});
|
|
31
34
|
/** Creates a memoized single-select listbox view. Static config is captured in a closure;
|
|
32
|
-
* only `model` and `
|
|
35
|
+
* only `model` and `toParentMessage` are compared per render via `createLazy`. */
|
|
33
36
|
export const lazy = (staticConfig) => {
|
|
34
37
|
const lazyView = createLazy();
|
|
35
|
-
return (model,
|
|
38
|
+
return (model, toParentMessage) => lazyView((currentModel, currentToMessage) => view({
|
|
36
39
|
...staticConfig,
|
|
37
40
|
model: currentModel,
|
|
38
|
-
|
|
39
|
-
}), [model,
|
|
41
|
+
toParentMessage: currentToMessage,
|
|
42
|
+
}), [model, toParentMessage]);
|
|
40
43
|
};
|
package/dist/ui/menu/index.d.ts
CHANGED
|
@@ -166,40 +166,52 @@ export type InitConfig = Readonly<{
|
|
|
166
166
|
/** Creates an initial menu model from a config. Defaults to closed with no active item. */
|
|
167
167
|
export declare const init: (config: InitConfig) => Model;
|
|
168
168
|
type UpdateReturn = readonly [Model, ReadonlyArray<Command.Command<Message>>];
|
|
169
|
+
/** Advances the menu's enter/leave transition by waiting a double-rAF. */
|
|
169
170
|
export declare const RequestFrame: Command.CommandDefinition<"RequestFrame", {
|
|
170
171
|
readonly _tag: "AdvancedTransitionFrame";
|
|
171
172
|
}>;
|
|
173
|
+
/** Prevents page scrolling while the menu is open. */
|
|
172
174
|
export declare const LockScroll: Command.CommandDefinition<"LockScroll", {
|
|
173
175
|
readonly _tag: "CompletedLockScroll";
|
|
174
176
|
}>;
|
|
177
|
+
/** Re-enables page scrolling after the menu closes. */
|
|
175
178
|
export declare const UnlockScroll: Command.CommandDefinition<"UnlockScroll", {
|
|
176
179
|
readonly _tag: "CompletedUnlockScroll";
|
|
177
180
|
}>;
|
|
181
|
+
/** Marks all elements outside the menu as inert for modal behavior. */
|
|
178
182
|
export declare const InertOthers: Command.CommandDefinition<"InertOthers", {
|
|
179
183
|
readonly _tag: "CompletedSetupInert";
|
|
180
184
|
}>;
|
|
185
|
+
/** Removes the inert attribute from elements outside the menu. */
|
|
181
186
|
export declare const RestoreInert: Command.CommandDefinition<"RestoreInert", {
|
|
182
187
|
readonly _tag: "CompletedTeardownInert";
|
|
183
188
|
}>;
|
|
189
|
+
/** Moves focus to the menu items container after opening. */
|
|
184
190
|
export declare const FocusItems: Command.CommandDefinition<"FocusItems", {
|
|
185
191
|
readonly _tag: "CompletedFocusItems";
|
|
186
192
|
}>;
|
|
193
|
+
/** Moves focus back to the menu button after closing. */
|
|
187
194
|
export declare const FocusButton: Command.CommandDefinition<"FocusButton", {
|
|
188
195
|
readonly _tag: "CompletedFocusButton";
|
|
189
196
|
}>;
|
|
197
|
+
/** Scrolls the active menu item into view after keyboard navigation. */
|
|
190
198
|
export declare const ScrollIntoView: Command.CommandDefinition<"ScrollIntoView", {
|
|
191
199
|
readonly _tag: "CompletedScrollIntoView";
|
|
192
200
|
}>;
|
|
201
|
+
/** Programmatically clicks the active menu item's DOM element. */
|
|
193
202
|
export declare const ClickItem: Command.CommandDefinition<"ClickItem", {
|
|
194
203
|
readonly _tag: "CompletedClickItem";
|
|
195
204
|
}>;
|
|
205
|
+
/** Waits for the typeahead search debounce period before clearing the query. */
|
|
196
206
|
export declare const DelayClearSearch: Command.CommandDefinition<"DelayClearSearch", {
|
|
197
207
|
readonly _tag: "ClearedSearch";
|
|
198
208
|
readonly version: number;
|
|
199
209
|
}>;
|
|
210
|
+
/** Waits for all CSS transitions on the menu items container to complete. */
|
|
200
211
|
export declare const WaitForTransitions: Command.CommandDefinition<"WaitForTransitions", {
|
|
201
212
|
readonly _tag: "EndedTransition";
|
|
202
213
|
}>;
|
|
214
|
+
/** Detects whether the menu button moved or the leave transition ended — whichever comes first. */
|
|
203
215
|
export declare const DetectMovementOrTransitionEnd: Command.CommandDefinition<"DetectMovementOrTransitionEnd", {
|
|
204
216
|
readonly _tag: "EndedTransition";
|
|
205
217
|
} | {
|
|
@@ -207,6 +219,9 @@ export declare const DetectMovementOrTransitionEnd: Command.CommandDefinition<"D
|
|
|
207
219
|
}>;
|
|
208
220
|
/** Processes a menu message and returns the next model and commands. */
|
|
209
221
|
export declare const update: (model: Model, message: Message) => UpdateReturn;
|
|
222
|
+
/** Programmatically selects a menu item at the given index, closing the menu and returning
|
|
223
|
+
* focus commands. Use this in domain-event handlers when the menu uses `onSelectedItem`. */
|
|
224
|
+
export declare const selectItem: (model: Model, index: number) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
|
|
210
225
|
/** Configuration for an individual menu item's appearance. */
|
|
211
226
|
export type ItemConfig = Readonly<{
|
|
212
227
|
className?: string;
|
|
@@ -220,7 +235,8 @@ export type GroupHeading = Readonly<{
|
|
|
220
235
|
/** Configuration for rendering a menu with `view`. */
|
|
221
236
|
export type ViewConfig<Message, Item extends string> = Readonly<{
|
|
222
237
|
model: Model;
|
|
223
|
-
|
|
238
|
+
toParentMessage: (message: Opened | Closed | ClosedByTab | ActivatedItem | DeactivatedItem | SelectedItem | MovedPointerOverItem | RequestedItemClick | Searched | PressedPointerOnButton | ReleasedPointerOnItems | IgnoredMouseClick | SuppressedSpaceScroll) => Message;
|
|
239
|
+
onSelectedItem?: (index: number) => Message;
|
|
224
240
|
items: ReadonlyArray<Item>;
|
|
225
241
|
itemToConfig: (item: Item, context: Readonly<{
|
|
226
242
|
isActive: boolean;
|
|
@@ -252,6 +268,6 @@ export { groupContiguous, resolveTypeaheadMatch };
|
|
|
252
268
|
/** Renders a headless menu with typeahead search, keyboard navigation, and aria-activedescendant focus management. */
|
|
253
269
|
export declare const view: <Message, Item extends string>(config: ViewConfig<Message, Item>) => Html;
|
|
254
270
|
/** Creates a memoized menu view. Static config is captured in a closure;
|
|
255
|
-
* only `model` and `
|
|
256
|
-
export declare const lazy: <Message, Item extends string>(staticConfig: Omit<ViewConfig<Message, Item>, "model" | "
|
|
271
|
+
* only `model` and `toParentMessage` are compared per render via `createLazy`. */
|
|
272
|
+
export declare const lazy: <Message, Item extends string>(staticConfig: Omit<ViewConfig<Message, Item>, "model" | "toParentMessage" | "onSelectedItem">) => ((model: Model, toParentMessage: ViewConfig<Message, Item>["toParentMessage"]) => Html);
|
|
257
273
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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":"AAAA,OAAO,EAML,MAAM,IAAI,CAAC,EAGZ,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,IAAI,EAAoB,MAAM,YAAY,CAAA;AAKxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAG1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAIpD,6FAA6F;AAC7F,eAAO,MAAM,iBAAiB,oCAAmC,CAAA;AACjE,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAQ7D,iIAAiI;AACjI,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;EAehB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,mJAAmJ;AACnJ,eAAO,MAAM,MAAM;;EAEjB,CAAA;AACF,kEAAkE;AAClE,eAAO,MAAM,MAAM,2DAAc,CAAA;AACjC,2EAA2E;AAC3E,eAAO,MAAM,WAAW,gEAAmB,CAAA;AAC3C,mGAAmG;AACnG,eAAO,MAAM,aAAa;;;EAGxB,CAAA;AACF,kDAAkD;AAClD,eAAO,MAAM,eAAe,oEAAuB,CAAA;AACnD,gEAAgE;AAChE,eAAO,MAAM,YAAY;;EAAyC,CAAA;AAClE,kHAAkH;AAClH,eAAO,MAAM,kBAAkB;;EAE7B,CAAA;AACF,qEAAqE;AACrE,eAAO,MAAM,QAAQ;;;EAGnB,CAAA;AACF,4EAA4E;AAC5E,eAAO,MAAM,aAAa;;EAA4C,CAAA;AACtE,gHAAgH;AAChH,eAAO,MAAM,oBAAoB;;;;EAI/B,CAAA;AACF,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,wEAA2B,CAAA;AAC3D,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,yEAA4B,CAAA;AAC7D,mDAAmD;AACnD,eAAO,MAAM,mBAAmB,wEAA2B,CAAA;AAC3D,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,0EAA6B,CAAA;AAC/D,oDAAoD;AACpD,eAAO,MAAM,mBAAmB,wEAA2B,CAAA;AAC3D,qDAAqD;AACrD,eAAO,MAAM,sBAAsB,2EAA8B,CAAA;AACjE,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,4EAA+B,CAAA;AACnE,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,uEAA0B,CAAA;AACzD,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,0EAA6B,CAAA;AAC/D,wGAAwG;AACxG,eAAO,MAAM,iBAAiB,sEAAyB,CAAA;AACvD,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,0EAA6B,CAAA;AAC/D,oGAAoG;AACpG,eAAO,MAAM,uBAAuB,4EAA+B,CAAA;AACnE,2FAA2F;AAC3F,eAAO,MAAM,eAAe,oEAAuB,CAAA;AACnD,sHAAsH;AACtH,eAAO,MAAM,sBAAsB,2EAA8B,CAAA;AACjE,kHAAkH;AAClH,eAAO,MAAM,sBAAsB;;;;;;EAMjC,CAAA;AACF,uGAAuG;AACvG,eAAO,MAAM,sBAAsB;;;;EAIjC,CAAA;AAEF,4DAA4D;AAC5D,eAAO,MAAM,OAAO,EAAE,CAAC,CAAC,KAAK,CAC3B;IACE,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,WAAW;IAClB,OAAO,aAAa;IACpB,OAAO,eAAe;IACtB,OAAO,YAAY;IACnB,OAAO,oBAAoB;IAC3B,OAAO,kBAAkB;IACzB,OAAO,QAAQ;IACf,OAAO,aAAa;IACpB,OAAO,mBAAmB;IAC1B,OAAO,oBAAoB;IAC3B,OAAO,mBAAmB;IAC1B,OAAO,qBAAqB;IAC5B,OAAO,mBAAmB;IAC1B,OAAO,sBAAsB;IAC7B,OAAO,uBAAuB;IAC9B,OAAO,kBAAkB;IACzB,OAAO,qBAAqB;IAC5B,OAAO,iBAAiB;IACxB,OAAO,qBAAqB;IAC5B,OAAO,uBAAuB;IAC9B,OAAO,eAAe;IACtB,OAAO,sBAAsB;IAC7B,OAAO,sBAAsB;IAC7B,OAAO,sBAAsB;CAC9B,CA4BF,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AACvC,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AACvC,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AACjD,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AACrD,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AACzD,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AACnD,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAA;AACnE,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAA;AAC/D,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAC3C,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AACrD,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAC7D,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAA;AACrE,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAC,IAAI,CAAA;AACzE,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AACzD,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA;AACvE,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA;AACvE,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA;AAEvE,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AASzC,kNAAkN;AAClN,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAC,CAAA;AAEF,2FAA2F;AAC3F,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAaxC,CAAA;AAsBF,KAAK,YAAY,GAAG,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAG7E,0EAA0E;AAC1E,eAAO,MAAM,YAAY;;EAGxB,CAAA;AACD,sDAAsD;AACtD,eAAO,MAAM,UAAU;;EAAoD,CAAA;AAC3E,uDAAuD;AACvD,eAAO,MAAM,YAAY;;EAGxB,CAAA;AACD,uEAAuE;AACvE,eAAO,MAAM,WAAW;;EAAqD,CAAA;AAC7E,kEAAkE;AAClE,eAAO,MAAM,YAAY;;EAGxB,CAAA;AACD,6DAA6D;AAC7D,eAAO,MAAM,UAAU;;EAAoD,CAAA;AAC3E,yDAAyD;AACzD,eAAO,MAAM,WAAW;;EAAsD,CAAA;AAC9E,wEAAwE;AACxE,eAAO,MAAM,cAAc;;EAG1B,CAAA;AACD,kEAAkE;AAClE,eAAO,MAAM,SAAS;;EAAkD,CAAA;AACxE,gFAAgF;AAChF,eAAO,MAAM,gBAAgB;;;EAG5B,CAAA;AACD,6EAA6E;AAC7E,eAAO,MAAM,kBAAkB;;EAG9B,CAAA;AACD,mGAAmG;AACnG,eAAO,MAAM,6BAA6B;;;;EAIzC,CAAA;AAED,wEAAwE;AACxE,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO,KAAG,YA2WvD,CAAA;AAED;6FAC6F;AAC7F,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,OAAO,MAAM,KACZ,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACnB,CAAA;AAIxC,8DAA8D;AAC9D,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,IAAI,CAAA;CACd,CAAC,CAAA;AAEF,yEAAyE;AACzE,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,OAAO,EAAE,IAAI,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAC,CAAA;AAEF,sDAAsD;AACtD,MAAM,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,SAAS,MAAM,IAAI,QAAQ,CAAC;IAC9D,KAAK,EAAE,KAAK,CAAA;IACZ,eAAe,EAAE,CACf,OAAO,EACH,MAAM,GACN,MAAM,GACN,WAAW,GACX,aAAa,GACb,eAAe,GACf,YAAY,GACZ,oBAAoB,GACpB,kBAAkB,GAClB,QAAQ,GACR,sBAAsB,GACtB,sBAAsB,GACtB,iBAAiB,GACjB,qBAAqB,KACtB,OAAO,CAAA;IACZ,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IAC3C,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;IAC1B,YAAY,EAAE,CACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,QAAQ,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,KAC1D,UAAU,CAAA;IACf,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IACvD,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACxD,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,aAAa,EAAE,IAAI,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gBAAgB,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IACpD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IACnD,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,qBAAqB,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IACzD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kBAAkB,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IACtD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACpD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAA;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IACnD,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IACvD,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB,CAAC,CAAA;AAEF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,CAAA;AAIjD,sHAAsH;AACtH,eAAO,MAAM,IAAI,GAAI,OAAO,EAAE,IAAI,SAAS,MAAM,EAC/C,QAAQ,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,KAChC,IAkdF,CAAA;AAED;mFACmF;AACnF,eAAO,MAAM,IAAI,GAAI,OAAO,EAAE,IAAI,SAAS,MAAM,EAC/C,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,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,iBAAiB,CAAC,KAC1D,IAAI,CAgBR,CAAA"}
|
package/dist/ui/menu/index.js
CHANGED
|
@@ -148,17 +148,29 @@ const buttonSelector = (id) => `#${id}-button`;
|
|
|
148
148
|
const itemsSelector = (id) => `#${id}-items`;
|
|
149
149
|
const itemSelector = (id, index) => `#${id}-item-${index}`;
|
|
150
150
|
const withUpdateReturn = M.withReturnType();
|
|
151
|
+
/** Advances the menu's enter/leave transition by waiting a double-rAF. */
|
|
151
152
|
export const RequestFrame = Command.define('RequestFrame', AdvancedTransitionFrame);
|
|
153
|
+
/** Prevents page scrolling while the menu is open. */
|
|
152
154
|
export const LockScroll = Command.define('LockScroll', CompletedLockScroll);
|
|
155
|
+
/** Re-enables page scrolling after the menu closes. */
|
|
153
156
|
export const UnlockScroll = Command.define('UnlockScroll', CompletedUnlockScroll);
|
|
157
|
+
/** Marks all elements outside the menu as inert for modal behavior. */
|
|
154
158
|
export const InertOthers = Command.define('InertOthers', CompletedSetupInert);
|
|
159
|
+
/** Removes the inert attribute from elements outside the menu. */
|
|
155
160
|
export const RestoreInert = Command.define('RestoreInert', CompletedTeardownInert);
|
|
161
|
+
/** Moves focus to the menu items container after opening. */
|
|
156
162
|
export const FocusItems = Command.define('FocusItems', CompletedFocusItems);
|
|
163
|
+
/** Moves focus back to the menu button after closing. */
|
|
157
164
|
export const FocusButton = Command.define('FocusButton', CompletedFocusButton);
|
|
165
|
+
/** Scrolls the active menu item into view after keyboard navigation. */
|
|
158
166
|
export const ScrollIntoView = Command.define('ScrollIntoView', CompletedScrollIntoView);
|
|
167
|
+
/** Programmatically clicks the active menu item's DOM element. */
|
|
159
168
|
export const ClickItem = Command.define('ClickItem', CompletedClickItem);
|
|
169
|
+
/** Waits for the typeahead search debounce period before clearing the query. */
|
|
160
170
|
export const DelayClearSearch = Command.define('DelayClearSearch', ClearedSearch);
|
|
171
|
+
/** Waits for all CSS transitions on the menu items container to complete. */
|
|
161
172
|
export const WaitForTransitions = Command.define('WaitForTransitions', EndedTransition);
|
|
173
|
+
/** Detects whether the menu button moved or the leave transition ended — whichever comes first. */
|
|
162
174
|
export const DetectMovementOrTransitionEnd = Command.define('DetectMovementOrTransitionEnd', DetectedButtonMovement, EndedTransition);
|
|
163
175
|
/** Processes a menu message and returns the next model and commands. */
|
|
164
176
|
export const update = (model, message) => {
|
|
@@ -348,12 +360,18 @@ export const update = (model, message) => {
|
|
|
348
360
|
SuppressedSpaceScroll: () => [model, []],
|
|
349
361
|
}));
|
|
350
362
|
};
|
|
363
|
+
/** Programmatically selects a menu item at the given index, closing the menu and returning
|
|
364
|
+
* focus commands. Use this in domain-event handlers when the menu uses `onSelectedItem`. */
|
|
365
|
+
export const selectItem = (model, index) => update(model, SelectedItem({ index }));
|
|
351
366
|
export { groupContiguous, resolveTypeaheadMatch };
|
|
352
367
|
const itemId = (id, index) => `${id}-item-${index}`;
|
|
353
368
|
/** Renders a headless menu with typeahead search, keyboard navigation, and aria-activedescendant focus management. */
|
|
354
369
|
export const view = (config) => {
|
|
355
370
|
const { div, AriaActiveDescendant, AriaControls, AriaDisabled, AriaExpanded, AriaHasPopup, AriaLabelledBy, Class, DataAttribute, Id, OnBlur, OnClick, OnDestroy, OnInsert, OnKeyDownPreventDefault, OnKeyUpPreventDefault, OnPointerDown, OnPointerLeave, OnPointerMove, OnPointerUp, Role, Style, Tabindex, Type, keyed, } = html();
|
|
356
|
-
const { model: { id, isOpen, transitionState, maybeActiveItemIndex, searchQuery, maybeLastButtonPointerType, },
|
|
371
|
+
const { model: { id, isOpen, transitionState, maybeActiveItemIndex, searchQuery, maybeLastButtonPointerType, }, toParentMessage, onSelectedItem, items, itemToConfig, isItemDisabled, itemToSearchText = (item) => item, isButtonDisabled, buttonContent, buttonClassName, buttonAttributes = [], itemsClassName, itemsAttributes = [], itemsScrollClassName, itemsScrollAttributes = [], backdropClassName, backdropAttributes = [], className, attributes = [], itemGroupKey, groupToHeading, groupClassName, groupAttributes = [], separatorClassName, separatorAttributes = [], anchor, } = config;
|
|
372
|
+
const dispatchSelectedItem = (index) => onSelectedItem
|
|
373
|
+
? onSelectedItem(index)
|
|
374
|
+
: toParentMessage(SelectedItem({ index }));
|
|
357
375
|
const isLeaving = transitionState === 'LeaveStart' || transitionState === 'LeaveAnimating';
|
|
358
376
|
const isVisible = isOpen || isLeaving;
|
|
359
377
|
const transitionAttributes = M.value(transitionState).pipe(M.when('EnterStart', () => [
|
|
@@ -375,12 +393,12 @@ export const view = (config) => {
|
|
|
375
393
|
pipe(items, Array.get(index), Option.exists(item => isItemDisabled(item, index)));
|
|
376
394
|
const firstEnabledIndex = findFirstEnabledIndex(items.length, 0, isDisabled)(0, 1);
|
|
377
395
|
const lastEnabledIndex = findFirstEnabledIndex(items.length, 0, isDisabled)(items.length - 1, -1);
|
|
378
|
-
const handleButtonKeyDown = (key) => M.value(key).pipe(M.whenOr('Enter', ' ', 'ArrowDown', () => Option.some(
|
|
396
|
+
const handleButtonKeyDown = (key) => M.value(key).pipe(M.whenOr('Enter', ' ', 'ArrowDown', () => Option.some(toParentMessage(Opened({
|
|
379
397
|
maybeActiveItemIndex: Option.some(firstEnabledIndex),
|
|
380
|
-
})))), M.when('ArrowUp', () => Option.some(
|
|
398
|
+
})))), M.when('ArrowUp', () => Option.some(toParentMessage(Opened({
|
|
381
399
|
maybeActiveItemIndex: Option.some(lastEnabledIndex),
|
|
382
400
|
})))), M.orElse(() => Option.none()));
|
|
383
|
-
const handleButtonPointerDown = (pointerType, button, screenX, screenY, timeStamp) => Option.some(
|
|
401
|
+
const handleButtonPointerDown = (pointerType, button, screenX, screenY, timeStamp) => Option.some(toParentMessage(PressedPointerOnButton({
|
|
384
402
|
pointerType,
|
|
385
403
|
button,
|
|
386
404
|
screenX,
|
|
@@ -390,29 +408,29 @@ export const view = (config) => {
|
|
|
390
408
|
const handleButtonClick = () => {
|
|
391
409
|
const isMouse = Option.exists(maybeLastButtonPointerType, type => type === 'mouse');
|
|
392
410
|
if (isMouse) {
|
|
393
|
-
return
|
|
411
|
+
return toParentMessage(IgnoredMouseClick());
|
|
394
412
|
}
|
|
395
413
|
else if (isOpen) {
|
|
396
|
-
return
|
|
414
|
+
return toParentMessage(Closed());
|
|
397
415
|
}
|
|
398
416
|
else {
|
|
399
|
-
return
|
|
417
|
+
return toParentMessage(Opened({ maybeActiveItemIndex: Option.none() }));
|
|
400
418
|
}
|
|
401
419
|
};
|
|
402
|
-
const handleSpaceKeyUp = (key) => OptionExt.when(key === ' ',
|
|
420
|
+
const handleSpaceKeyUp = (key) => OptionExt.when(key === ' ', toParentMessage(SuppressedSpaceScroll()));
|
|
403
421
|
const resolveActiveIndex = keyToIndex('ArrowDown', 'ArrowUp', items.length, Option.getOrElse(maybeActiveItemIndex, () => 0), isDisabled);
|
|
404
422
|
const searchForKey = (key) => {
|
|
405
423
|
const nextQuery = searchQuery + key;
|
|
406
424
|
const maybeTargetIndex = resolveTypeaheadMatch(items, nextQuery, maybeActiveItemIndex, isDisabled, itemToSearchText, Str.isNonEmpty(searchQuery));
|
|
407
|
-
return Option.some(
|
|
425
|
+
return Option.some(toParentMessage(Searched({ key, maybeTargetIndex })));
|
|
408
426
|
};
|
|
409
|
-
const handleItemsKeyDown = (key) => M.value(key).pipe(M.when('Escape', () => Option.some(
|
|
427
|
+
const handleItemsKeyDown = (key) => M.value(key).pipe(M.when('Escape', () => Option.some(toParentMessage(Closed()))), M.when('Enter', () => Option.map(maybeActiveItemIndex, index => toParentMessage(RequestedItemClick({ index })))), M.when(' ', () => Str.isNonEmpty(searchQuery)
|
|
410
428
|
? searchForKey(' ')
|
|
411
|
-
: Option.map(maybeActiveItemIndex, index =>
|
|
429
|
+
: Option.map(maybeActiveItemIndex, index => toParentMessage(RequestedItemClick({ index })))), M.whenOr('ArrowDown', 'ArrowUp', 'Home', 'End', 'PageUp', 'PageDown', () => Option.some(toParentMessage(ActivatedItem({
|
|
412
430
|
index: resolveActiveIndex(key),
|
|
413
431
|
activationTrigger: 'Keyboard',
|
|
414
432
|
})))), M.when(isPrintableKey, () => searchForKey(key)), M.orElse(() => Option.none()));
|
|
415
|
-
const handleItemsPointerUp = (screenX, screenY, pointerType, timeStamp) => OptionExt.when(pointerType === 'mouse',
|
|
433
|
+
const handleItemsPointerUp = (screenX, screenY, pointerType, timeStamp) => OptionExt.when(pointerType === 'mouse', toParentMessage(ReleasedPointerOnItems({ screenX, screenY, timeStamp })));
|
|
416
434
|
const resolvedButtonAttributes = [
|
|
417
435
|
Id(`${id}-button`),
|
|
418
436
|
Type('button'),
|
|
@@ -459,7 +477,7 @@ export const view = (config) => {
|
|
|
459
477
|
OnKeyDownPreventDefault(handleItemsKeyDown),
|
|
460
478
|
OnKeyUpPreventDefault(handleSpaceKeyUp),
|
|
461
479
|
OnPointerUp(handleItemsPointerUp),
|
|
462
|
-
OnBlur(
|
|
480
|
+
OnBlur(toParentMessage(ClosedByTab())),
|
|
463
481
|
]),
|
|
464
482
|
...(itemsClassName ? [Class(itemsClassName)] : []),
|
|
465
483
|
...itemsAttributes,
|
|
@@ -481,13 +499,13 @@ export const view = (config) => {
|
|
|
481
499
|
: []),
|
|
482
500
|
...(isInteractive
|
|
483
501
|
? [
|
|
484
|
-
OnClick(
|
|
502
|
+
OnClick(dispatchSelectedItem(index)),
|
|
485
503
|
...(isActiveItem
|
|
486
504
|
? []
|
|
487
505
|
: [
|
|
488
|
-
OnPointerMove((screenX, screenY, pointerType) => OptionExt.when(pointerType !== 'touch',
|
|
506
|
+
OnPointerMove((screenX, screenY, pointerType) => OptionExt.when(pointerType !== 'touch', toParentMessage(MovedPointerOverItem({ index, screenX, screenY })))),
|
|
489
507
|
]),
|
|
490
|
-
OnPointerLeave(pointerType => OptionExt.when(pointerType !== 'touch',
|
|
508
|
+
OnPointerLeave(pointerType => OptionExt.when(pointerType !== 'touch', toParentMessage(DeactivatedItem()))),
|
|
491
509
|
]
|
|
492
510
|
: []),
|
|
493
511
|
...(itemConfig.className ? [Class(itemConfig.className)] : []),
|
|
@@ -536,7 +554,7 @@ export const view = (config) => {
|
|
|
536
554
|
});
|
|
537
555
|
};
|
|
538
556
|
const backdrop = keyed('div')(`${id}-backdrop`, [
|
|
539
|
-
...(isLeaving ? [] : [OnClick(
|
|
557
|
+
...(isLeaving ? [] : [OnClick(toParentMessage(Closed()))]),
|
|
540
558
|
...(backdropClassName ? [Class(backdropClassName)] : []),
|
|
541
559
|
...backdropAttributes,
|
|
542
560
|
], []);
|
|
@@ -564,12 +582,12 @@ export const view = (config) => {
|
|
|
564
582
|
]);
|
|
565
583
|
};
|
|
566
584
|
/** Creates a memoized menu view. Static config is captured in a closure;
|
|
567
|
-
* only `model` and `
|
|
585
|
+
* only `model` and `toParentMessage` are compared per render via `createLazy`. */
|
|
568
586
|
export const lazy = (staticConfig) => {
|
|
569
587
|
const lazyView = createLazy();
|
|
570
|
-
return (model,
|
|
588
|
+
return (model, toParentMessage) => lazyView((currentModel, currentToMessage) => view({
|
|
571
589
|
...staticConfig,
|
|
572
590
|
model: currentModel,
|
|
573
|
-
|
|
574
|
-
}), [model,
|
|
591
|
+
toParentMessage: currentToMessage,
|
|
592
|
+
}), [model, toParentMessage]);
|
|
575
593
|
};
|
package/dist/ui/menu/public.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { init, update, view, lazy, Model, Message } from './index';
|
|
1
|
+
export { init, update, selectItem, view, lazy, Model, Message, SelectedItem, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusItems, CompletedFocusButton, CompletedScrollIntoView, CompletedClickItem, ClearedSearch, AdvancedTransitionFrame, EndedTransition, DetectedButtonMovement, RequestFrame, LockScroll, UnlockScroll, InertOthers, RestoreInert, FocusItems, FocusButton, ScrollIntoView, ClickItem, DelayClearSearch, WaitForTransitions, DetectMovementOrTransitionEnd, } from './index';
|
|
2
2
|
export { TransitionState } from '../transition';
|
|
3
|
-
export type { ActivationTrigger, Opened, Closed, ClosedByTab, ActivatedItem, DeactivatedItem,
|
|
3
|
+
export type { ActivationTrigger, Opened, Closed, ClosedByTab, ActivatedItem, DeactivatedItem, MovedPointerOverItem, RequestedItemClick, Searched, PressedPointerOnButton, ReleasedPointerOnItems, IgnoredMouseClick, SuppressedSpaceScroll, InitConfig, ViewConfig, ItemConfig, GroupHeading, } from './index';
|
|
4
4
|
export type { AnchorConfig } from '../anchor';
|
|
5
5
|
//# sourceMappingURL=public.d.ts.map
|