foldkit 0.71.0 → 0.72.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/dist/task/index.d.ts +1 -1
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task/index.js +1 -1
- package/dist/task/public.d.ts +1 -1
- package/dist/task/public.d.ts.map +1 -1
- package/dist/task/public.js +1 -1
- package/dist/task/timing.d.ts +9 -5
- package/dist/task/timing.d.ts.map +1 -1
- package/dist/task/timing.js +11 -11
- package/dist/test/apps/disabledButton.d.ts +5 -5
- package/dist/ui/{transition → animation}/index.d.ts +9 -8
- package/dist/ui/animation/index.d.ts.map +1 -0
- package/dist/ui/{transition → animation}/index.js +8 -7
- package/dist/ui/animation/public.d.ts +3 -0
- package/dist/ui/animation/public.d.ts.map +1 -0
- package/dist/ui/animation/public.js +1 -0
- package/dist/ui/{transition → animation}/schema.d.ts +14 -14
- package/dist/ui/animation/schema.d.ts.map +1 -0
- package/dist/ui/animation/schema.js +35 -0
- package/dist/ui/{transition → animation}/update.d.ts +7 -7
- package/dist/ui/animation/update.d.ts.map +1 -0
- package/dist/ui/{transition → animation}/update.js +12 -12
- package/dist/ui/combobox/multi.d.ts +7 -7
- package/dist/ui/combobox/public.d.ts +1 -1
- 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 +13 -13
- package/dist/ui/combobox/shared.d.ts.map +1 -1
- package/dist/ui/combobox/shared.js +31 -31
- package/dist/ui/combobox/single.d.ts +7 -7
- package/dist/ui/datePicker/index.d.ts +3 -3
- package/dist/ui/dialog/index.d.ts +7 -7
- package/dist/ui/dialog/index.d.ts.map +1 -1
- package/dist/ui/dialog/index.js +28 -28
- 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/index.d.ts +1 -1
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +1 -1
- package/dist/ui/listbox/multi.d.ts +7 -7
- package/dist/ui/listbox/public.d.ts +1 -1
- package/dist/ui/listbox/public.d.ts.map +1 -1
- package/dist/ui/listbox/public.js +1 -1
- package/dist/ui/listbox/shared.d.ts +13 -13
- package/dist/ui/listbox/shared.d.ts.map +1 -1
- package/dist/ui/listbox/shared.js +29 -29
- package/dist/ui/listbox/single.d.ts +7 -7
- package/dist/ui/menu/index.d.ts +11 -11
- package/dist/ui/menu/index.d.ts.map +1 -1
- package/dist/ui/menu/index.js +29 -29
- package/dist/ui/menu/public.d.ts +1 -1
- 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 +12 -12
- package/dist/ui/popover/index.d.ts.map +1 -1
- package/dist/ui/popover/index.js +30 -30
- package/dist/ui/popover/public.d.ts +1 -1
- package/dist/ui/popover/public.d.ts.map +1 -1
- package/dist/ui/popover/public.js +1 -1
- package/dist/ui/toast/index.d.ts +44 -44
- package/dist/ui/toast/index.d.ts.map +1 -1
- package/dist/ui/toast/index.js +7 -7
- package/dist/ui/toast/public.d.ts +1 -1
- package/dist/ui/toast/public.d.ts.map +1 -1
- package/dist/ui/toast/public.js +1 -1
- package/dist/ui/toast/schema.d.ts +11 -11
- package/dist/ui/toast/schema.d.ts.map +1 -1
- package/dist/ui/toast/schema.js +7 -7
- package/dist/ui/toast/update.d.ts +35 -35
- package/dist/ui/toast/update.d.ts.map +1 -1
- package/dist/ui/toast/update.js +16 -16
- package/package.json +5 -5
- package/dist/ui/transition/index.d.ts.map +0 -1
- package/dist/ui/transition/public.d.ts +0 -3
- package/dist/ui/transition/public.d.ts.map +0 -1
- package/dist/ui/transition/public.js +0 -1
- package/dist/ui/transition/schema.d.ts.map +0 -1
- package/dist/ui/transition/schema.js +0 -35
- package/dist/ui/transition/update.d.ts.map +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { init, update, open, close, selectItem, view, lazy, Model, } from './single';
|
|
2
|
-
export { Message, Orientation, SelectedItem, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusButton, CompletedFocusItems, CompletedScrollIntoView, CompletedClickItem, ClearedSearch,
|
|
2
|
+
export { Message, Orientation, SelectedItem, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusButton, CompletedFocusItems, CompletedScrollIntoView, CompletedClickItem, ClearedSearch, GotAnimationMessage, LockScroll, UnlockScroll, InertOthers, RestoreInert, FocusButton, FocusItems, ScrollIntoView, ClickItem, DelayClearSearch, DetectMovementOrAnimationEnd, } from './shared';
|
|
3
3
|
export * as Multi from './multiPublic';
|
|
@@ -17,7 +17,7 @@ export declare const BaseModel: S.Struct<{
|
|
|
17
17
|
isAnimated: typeof S.Boolean;
|
|
18
18
|
isModal: typeof S.Boolean;
|
|
19
19
|
orientation: S.Literal<["Vertical", "Horizontal"]>;
|
|
20
|
-
|
|
20
|
+
animation: S.Struct<{
|
|
21
21
|
id: typeof S.String;
|
|
22
22
|
isShowing: typeof S.Boolean;
|
|
23
23
|
transitionState: S.Literal<["Idle", "EnterStart", "EnterAnimating", "LeaveStart", "LeaveAnimating"]>;
|
|
@@ -100,9 +100,9 @@ export declare const CompletedClickItem: import("../../schema").CallableTaggedSt
|
|
|
100
100
|
export declare const IgnoredMouseClick: import("../../schema").CallableTaggedStruct<"IgnoredMouseClick", {}>;
|
|
101
101
|
/** Sent when a Space key-up is captured to prevent page scrolling. */
|
|
102
102
|
export declare const SuppressedSpaceScroll: import("../../schema").CallableTaggedStruct<"SuppressedSpaceScroll", {}>;
|
|
103
|
-
/** Wraps
|
|
104
|
-
export declare const
|
|
105
|
-
message: S.Union<[import("../../schema").CallableTaggedStruct<"Showed", {}>, import("../../schema").CallableTaggedStruct<"Hid", {}>, import("../../schema").CallableTaggedStruct<"
|
|
103
|
+
/** Wraps an Animation submodel message for delegation. */
|
|
104
|
+
export declare const GotAnimationMessage: import("../../schema").CallableTaggedStruct<"GotAnimationMessage", {
|
|
105
|
+
message: S.Union<[import("../../schema").CallableTaggedStruct<"Showed", {}>, import("../../schema").CallableTaggedStruct<"Hid", {}>, import("../../schema").CallableTaggedStruct<"AdvancedAnimationFrame", {}>, import("../../schema").CallableTaggedStruct<"EndedAnimation", {}>]>;
|
|
106
106
|
}>;
|
|
107
107
|
/** Sent when the user presses a pointer device on the listbox button. Records pointer type for click handling. */
|
|
108
108
|
export declare const PressedPointerOnButton: import("../../schema").CallableTaggedStruct<"PressedPointerOnButton", {
|
|
@@ -131,7 +131,7 @@ export declare const Message: S.Union<[
|
|
|
131
131
|
typeof CompletedClickItem,
|
|
132
132
|
typeof IgnoredMouseClick,
|
|
133
133
|
typeof SuppressedSpaceScroll,
|
|
134
|
-
typeof
|
|
134
|
+
typeof GotAnimationMessage,
|
|
135
135
|
typeof PressedPointerOnButton
|
|
136
136
|
]>;
|
|
137
137
|
export type Opened = typeof Opened.Type;
|
|
@@ -196,17 +196,17 @@ export declare const DelayClearSearch: Command.CommandDefinition<"DelayClearSear
|
|
|
196
196
|
readonly _tag: "ClearedSearch";
|
|
197
197
|
readonly version: number;
|
|
198
198
|
}>;
|
|
199
|
-
/** Detects whether the listbox button moved or the leave
|
|
200
|
-
export declare const
|
|
201
|
-
readonly _tag: "
|
|
199
|
+
/** Detects whether the listbox button moved or the leave animation ended — whichever comes first. Both outcomes signal the Animation submodel that leave is complete. */
|
|
200
|
+
export declare const DetectMovementOrAnimationEnd: Command.CommandDefinition<"DetectMovementOrAnimationEnd", {
|
|
201
|
+
readonly _tag: "GotAnimationMessage";
|
|
202
202
|
readonly message: {
|
|
203
203
|
readonly _tag: "Showed";
|
|
204
204
|
} | {
|
|
205
205
|
readonly _tag: "Hid";
|
|
206
206
|
} | {
|
|
207
|
-
readonly _tag: "
|
|
207
|
+
readonly _tag: "AdvancedAnimationFrame";
|
|
208
208
|
} | {
|
|
209
|
-
readonly _tag: "
|
|
209
|
+
readonly _tag: "EndedAnimation";
|
|
210
210
|
};
|
|
211
211
|
}>;
|
|
212
212
|
export declare const makeUpdate: <Model extends BaseModel>(handleSelectedItem: (model: Model, item: string, context: SelectedItemContext<Model>) => [Model, ReadonlyArray<Command.Command<Message>>]) => (model: Model, message: Message) => readonly [Model, readonly Readonly<{
|
|
@@ -263,15 +263,15 @@ export declare const makeUpdate: <Model extends BaseModel>(handleSelectedItem: (
|
|
|
263
263
|
} | {
|
|
264
264
|
readonly _tag: "SuppressedSpaceScroll";
|
|
265
265
|
} | {
|
|
266
|
-
readonly _tag: "
|
|
266
|
+
readonly _tag: "GotAnimationMessage";
|
|
267
267
|
readonly message: {
|
|
268
268
|
readonly _tag: "Showed";
|
|
269
269
|
} | {
|
|
270
270
|
readonly _tag: "Hid";
|
|
271
271
|
} | {
|
|
272
|
-
readonly _tag: "
|
|
272
|
+
readonly _tag: "AdvancedAnimationFrame";
|
|
273
273
|
} | {
|
|
274
|
-
readonly _tag: "
|
|
274
|
+
readonly _tag: "EndedAnimation";
|
|
275
275
|
};
|
|
276
276
|
} | {
|
|
277
277
|
readonly _tag: "PressedPointerOnButton";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/ui/listbox/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EAGN,MAAM,EAEN,MAAM,IAAI,CAAC,EAGZ,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,IAAI,EAAQ,MAAM,YAAY,CAAA;AAK5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAgB7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEpD,OAAO,EAAE,qBAAqB,EAAE,CAAA;AAIhC,6FAA6F;AAC7F,eAAO,MAAM,iBAAiB,oCAAmC,CAAA;AACjE,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAE7D,0FAA0F;AAC1F,eAAO,MAAM,WAAW,uCAAsC,CAAA;AAC9D,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AAEjD,mKAAmK;AACnK,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;EAepB,CAAA;AACF,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAE7C,2EAA2E;AAC3E,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,WAAW,CAAC,IAAI,CAAA;CACtC,CAAC,CAAA;AAEF,gIAAgI;AAChI,eAAO,MAAM,QAAQ,GAAI,QAAQ,cAAc,KAAG,SAahD,CAAA;AAIF,sJAAsJ;AACtJ,eAAO,MAAM,MAAM;;EAEjB,CAAA;AACF,qEAAqE;AACrE,eAAO,MAAM,MAAM,2DAAc,CAAA;AACjC,8EAA8E;AAC9E,eAAO,MAAM,WAAW,gEAAmB,CAAA;AAC3C,mGAAmG;AACnG,eAAO,MAAM,aAAa;;;EAGxB,CAAA;AACF,kDAAkD;AAClD,eAAO,MAAM,eAAe,oEAAuB,CAAA;AACnD,kGAAkG;AAClG,eAAO,MAAM,YAAY;;EAAwC,CAAA;AACjE,kHAAkH;AAClH,eAAO,MAAM,kBAAkB;;EAE7B,CAAA;AACF,qEAAqE;AACrE,eAAO,MAAM,QAAQ;;;EAGnB,CAAA;AACF,4EAA4E;AAC5E,eAAO,MAAM,aAAa;;EAA4C,CAAA;AACtE,mHAAmH;AACnH,eAAO,MAAM,oBAAoB;;;;EAI/B,CAAA;AACF,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,kEAAkE;AAClE,eAAO,MAAM,oBAAoB,yEAA4B,CAAA;AAC7D,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,wEAA2B,CAAA;AAC3D,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,4EAA+B,CAAA;AACnE,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,uEAA0B,CAAA;AACzD,wGAAwG;AACxG,eAAO,MAAM,iBAAiB,sEAAyB,CAAA;AACvD,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,0EAA6B,CAAA;AAC/D,0DAA0D;AAC1D,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/ui/listbox/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,13 +6,13 @@ import { m } from '../../message';
|
|
|
6
6
|
import { makeConstrainedEvo } from '../../struct';
|
|
7
7
|
import * as Task from '../../task';
|
|
8
8
|
import { anchorHooks } from '../anchor';
|
|
9
|
+
// NOTE: Animation imports are split across schema + update to avoid a circular
|
|
10
|
+
// dependency: animation → html → runtime → devtools → listbox → animation.
|
|
11
|
+
// The barrel (../animation) imports from html, which starts the cycle.
|
|
12
|
+
import { EndedAnimation as AnimationEndedAnimation, Hid as AnimationHid, Message as AnimationMessage, Model as AnimationModel, Showed as AnimationShowed, init as animationInit, } from '../animation/schema';
|
|
13
|
+
import { update as animationUpdate } from '../animation/update';
|
|
9
14
|
import { groupContiguous } from '../group';
|
|
10
15
|
import { findFirstEnabledIndex, isPrintableKey, keyToIndex } from '../keyboard';
|
|
11
|
-
// NOTE: Transition imports are split across schema + update to avoid a circular
|
|
12
|
-
// dependency: transition → html → runtime → devtools → listbox → transition.
|
|
13
|
-
// The barrel (../transition) imports from html, which starts the cycle.
|
|
14
|
-
import { EndedTransition as TransitionEndedTransition, Hid as TransitionHid, Message as TransitionMessage, Model as TransitionModel, Showed as TransitionShowed, init as transitionInit, } from '../transition/schema';
|
|
15
|
-
import { update as transitionUpdate } from '../transition/update';
|
|
16
16
|
import { resolveTypeaheadMatch } from '../typeahead';
|
|
17
17
|
export { resolveTypeaheadMatch };
|
|
18
18
|
// MODEL
|
|
@@ -27,7 +27,7 @@ export const BaseModel = S.Struct({
|
|
|
27
27
|
isAnimated: S.Boolean,
|
|
28
28
|
isModal: S.Boolean,
|
|
29
29
|
orientation: Orientation,
|
|
30
|
-
|
|
30
|
+
animation: AnimationModel,
|
|
31
31
|
maybeActiveItemIndex: S.OptionFromSelf(S.Number),
|
|
32
32
|
activationTrigger: ActivationTrigger,
|
|
33
33
|
searchQuery: S.String,
|
|
@@ -42,7 +42,7 @@ export const baseInit = (config) => ({
|
|
|
42
42
|
isAnimated: config.isAnimated ?? false,
|
|
43
43
|
isModal: config.isModal ?? false,
|
|
44
44
|
orientation: config.orientation ?? 'Vertical',
|
|
45
|
-
|
|
45
|
+
animation: animationInit({ id: `${config.id}-listbox` }),
|
|
46
46
|
maybeActiveItemIndex: Option.none(),
|
|
47
47
|
activationTrigger: 'Keyboard',
|
|
48
48
|
searchQuery: '',
|
|
@@ -105,9 +105,9 @@ export const CompletedClickItem = m('CompletedClickItem');
|
|
|
105
105
|
export const IgnoredMouseClick = m('IgnoredMouseClick');
|
|
106
106
|
/** Sent when a Space key-up is captured to prevent page scrolling. */
|
|
107
107
|
export const SuppressedSpaceScroll = m('SuppressedSpaceScroll');
|
|
108
|
-
/** Wraps
|
|
109
|
-
export const
|
|
110
|
-
message:
|
|
108
|
+
/** Wraps an Animation submodel message for delegation. */
|
|
109
|
+
export const GotAnimationMessage = m('GotAnimationMessage', {
|
|
110
|
+
message: AnimationMessage,
|
|
111
111
|
});
|
|
112
112
|
/** Sent when the user presses a pointer device on the listbox button. Records pointer type for click handling. */
|
|
113
113
|
export const PressedPointerOnButton = m('PressedPointerOnButton', {
|
|
@@ -115,7 +115,7 @@ export const PressedPointerOnButton = m('PressedPointerOnButton', {
|
|
|
115
115
|
button: S.Number,
|
|
116
116
|
});
|
|
117
117
|
/** Union of all messages the listbox component can produce. */
|
|
118
|
-
export const Message = S.Union(Opened, Closed, ClosedByTab, ActivatedItem, DeactivatedItem, SelectedItem, MovedPointerOverItem, RequestedItemClick, Searched, ClearedSearch, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusButton, CompletedFocusItems, CompletedScrollIntoView, CompletedClickItem, IgnoredMouseClick, SuppressedSpaceScroll,
|
|
118
|
+
export const Message = S.Union(Opened, Closed, ClosedByTab, ActivatedItem, DeactivatedItem, SelectedItem, MovedPointerOverItem, RequestedItemClick, Searched, ClearedSearch, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusButton, CompletedFocusItems, CompletedScrollIntoView, CompletedClickItem, IgnoredMouseClick, SuppressedSpaceScroll, GotAnimationMessage, PressedPointerOnButton);
|
|
119
119
|
// CONSTANTS
|
|
120
120
|
export const SEARCH_DEBOUNCE_MILLISECONDS = 350;
|
|
121
121
|
export const LEFT_MOUSE_BUTTON = 0;
|
|
@@ -152,37 +152,37 @@ export const ScrollIntoView = Command.define('ScrollIntoView', CompletedScrollIn
|
|
|
152
152
|
export const ClickItem = Command.define('ClickItem', CompletedClickItem);
|
|
153
153
|
/** Waits for the typeahead search debounce period before clearing the query. */
|
|
154
154
|
export const DelayClearSearch = Command.define('DelayClearSearch', ClearedSearch);
|
|
155
|
-
/** Detects whether the listbox button moved or the leave
|
|
156
|
-
export const
|
|
155
|
+
/** Detects whether the listbox button moved or the leave animation ended — whichever comes first. Both outcomes signal the Animation submodel that leave is complete. */
|
|
156
|
+
export const DetectMovementOrAnimationEnd = Command.define('DetectMovementOrAnimationEnd', GotAnimationMessage);
|
|
157
157
|
export const makeUpdate = (handleSelectedItem) => {
|
|
158
158
|
const withUpdateReturn = M.withReturnType();
|
|
159
|
-
const
|
|
160
|
-
const [
|
|
161
|
-
const mappedCommands =
|
|
159
|
+
const delegateToAnimation = (model, animationMessage) => {
|
|
160
|
+
const [nextAnimation, animationCommands, maybeOutMessage] = animationUpdate(model.animation, animationMessage);
|
|
161
|
+
const mappedCommands = animationCommands.map(Command.mapEffect(Effect.map(message => GotAnimationMessage({ message }))));
|
|
162
162
|
const additionalCommands = Option.match(maybeOutMessage, {
|
|
163
163
|
onNone: () => [],
|
|
164
164
|
onSome: M.type().pipe(M.tagsExhaustive({
|
|
165
165
|
StartedLeaveAnimating: () => [
|
|
166
|
-
|
|
167
|
-
message:
|
|
168
|
-
}))), Task.
|
|
169
|
-
message:
|
|
166
|
+
DetectMovementOrAnimationEnd(Effect.raceFirst(Task.detectElementMovement(buttonSelector(model.id)).pipe(Effect.as(GotAnimationMessage({
|
|
167
|
+
message: AnimationEndedAnimation(),
|
|
168
|
+
}))), Task.waitForAnimationSettled(itemsSelector(model.id)).pipe(Effect.as(GotAnimationMessage({
|
|
169
|
+
message: AnimationEndedAnimation(),
|
|
170
170
|
}))))),
|
|
171
171
|
],
|
|
172
172
|
TransitionedOut: () => [],
|
|
173
173
|
})),
|
|
174
174
|
});
|
|
175
175
|
return [
|
|
176
|
-
constrainedEvo(model, {
|
|
176
|
+
constrainedEvo(model, { animation: () => nextAnimation }),
|
|
177
177
|
[...mappedCommands, ...additionalCommands],
|
|
178
178
|
];
|
|
179
179
|
};
|
|
180
180
|
const openListbox = (baseModel, openCommands) => {
|
|
181
181
|
if (baseModel.isAnimated) {
|
|
182
|
-
const [nextModel,
|
|
182
|
+
const [nextModel, animationCommands] = delegateToAnimation(baseModel, AnimationShowed());
|
|
183
183
|
return [
|
|
184
184
|
constrainedEvo(nextModel, { isOpen: () => true }),
|
|
185
|
-
[...openCommands, ...
|
|
185
|
+
[...openCommands, ...animationCommands],
|
|
186
186
|
];
|
|
187
187
|
}
|
|
188
188
|
return [constrainedEvo(baseModel, { isOpen: () => true }), openCommands];
|
|
@@ -190,8 +190,8 @@ export const makeUpdate = (handleSelectedItem) => {
|
|
|
190
190
|
const closeListbox = (baseModel, commands) => {
|
|
191
191
|
const closed = closedModel(baseModel);
|
|
192
192
|
if (baseModel.isAnimated) {
|
|
193
|
-
const [nextModel,
|
|
194
|
-
return [nextModel, [...commands, ...
|
|
193
|
+
const [nextModel, animationCommands] = delegateToAnimation(closed, AnimationHid());
|
|
194
|
+
return [nextModel, [...commands, ...animationCommands]];
|
|
195
195
|
}
|
|
196
196
|
return [closed, commands];
|
|
197
197
|
};
|
|
@@ -298,7 +298,7 @@ export const makeUpdate = (handleSelectedItem) => {
|
|
|
298
298
|
}
|
|
299
299
|
return [constrainedEvo(model, { searchQuery: () => '' }), []];
|
|
300
300
|
},
|
|
301
|
-
|
|
301
|
+
GotAnimationMessage: ({ message: animationMessage }) => delegateToAnimation(model, animationMessage),
|
|
302
302
|
PressedPointerOnButton: ({ pointerType, button }) => {
|
|
303
303
|
const withPointerType = constrainedEvo(model, {
|
|
304
304
|
maybeLastButtonPointerType: () => Option.some(pointerType),
|
|
@@ -343,7 +343,7 @@ export const makeUpdate = (handleSelectedItem) => {
|
|
|
343
343
|
};
|
|
344
344
|
export const makeView = (behavior) => (config) => {
|
|
345
345
|
const { div, input, AriaActiveDescendant, AriaControls, AriaDisabled, AriaExpanded, AriaHasPopup, AriaLabelledBy, AriaMultiSelectable, AriaOrientation, AriaSelected, Attribute, Class, DataAttribute, Id, Name, OnBlur, OnClick, OnDestroy, OnInsert, OnKeyDownPreventDefault, OnKeyUpPreventDefault, OnPointerDown, OnPointerLeave, OnPointerMove, Role, Style, Tabindex, Type, Value, keyed, } = html();
|
|
346
|
-
const { model: { id, isOpen, orientation,
|
|
346
|
+
const { model: { id, isOpen, orientation, animation: { 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;
|
|
347
347
|
const itemToValue = config.itemToValue ?? (item => String(item));
|
|
348
348
|
const itemToSearchText = config.itemToSearchText ?? (item => itemToValue(item));
|
|
349
349
|
const dispatchSelectedItem = (value) => onSelectedItem
|
|
@@ -351,7 +351,7 @@ export const makeView = (behavior) => (config) => {
|
|
|
351
351
|
: toParentMessage(SelectedItem({ item: value }));
|
|
352
352
|
const isLeaving = transitionState === 'LeaveStart' || transitionState === 'LeaveAnimating';
|
|
353
353
|
const isVisible = isOpen || isLeaving;
|
|
354
|
-
const
|
|
354
|
+
const animationAttributes = M.value(transitionState).pipe(M.when('EnterStart', () => [
|
|
355
355
|
DataAttribute('closed', ''),
|
|
356
356
|
DataAttribute('enter', ''),
|
|
357
357
|
DataAttribute('transition', ''),
|
|
@@ -481,7 +481,7 @@ export const makeView = (behavior) => (config) => {
|
|
|
481
481
|
...maybeActiveDescendant,
|
|
482
482
|
Tabindex(0),
|
|
483
483
|
...anchorAttributes,
|
|
484
|
-
...
|
|
484
|
+
...animationAttributes,
|
|
485
485
|
...(isLeaving
|
|
486
486
|
? []
|
|
487
487
|
: [
|
|
@@ -9,7 +9,7 @@ export declare const Model: S.extend<S.Struct<{
|
|
|
9
9
|
isAnimated: typeof S.Boolean;
|
|
10
10
|
isModal: typeof S.Boolean;
|
|
11
11
|
orientation: S.Literal<["Vertical", "Horizontal"]>;
|
|
12
|
-
|
|
12
|
+
animation: S.Struct<{
|
|
13
13
|
id: typeof S.String;
|
|
14
14
|
isShowing: typeof S.Boolean;
|
|
15
15
|
transitionState: S.Literal<["Idle", "EnterStart", "EnterAnimating", "LeaveStart", "LeaveAnimating"]>;
|
|
@@ -40,7 +40,7 @@ export declare const update: (model: {
|
|
|
40
40
|
readonly isAnimated: boolean;
|
|
41
41
|
readonly isModal: boolean;
|
|
42
42
|
readonly orientation: "Vertical" | "Horizontal";
|
|
43
|
-
readonly
|
|
43
|
+
readonly animation: {
|
|
44
44
|
readonly id: string;
|
|
45
45
|
readonly isShowing: boolean;
|
|
46
46
|
readonly transitionState: "Idle" | "EnterStart" | "EnterAnimating" | "LeaveStart" | "LeaveAnimating";
|
|
@@ -62,7 +62,7 @@ export declare const update: (model: {
|
|
|
62
62
|
readonly isAnimated: boolean;
|
|
63
63
|
readonly isModal: boolean;
|
|
64
64
|
readonly orientation: "Vertical" | "Horizontal";
|
|
65
|
-
readonly
|
|
65
|
+
readonly animation: {
|
|
66
66
|
readonly id: string;
|
|
67
67
|
readonly isShowing: boolean;
|
|
68
68
|
readonly transitionState: "Idle" | "EnterStart" | "EnterAnimating" | "LeaveStart" | "LeaveAnimating";
|
|
@@ -132,15 +132,15 @@ export declare const update: (model: {
|
|
|
132
132
|
} | {
|
|
133
133
|
readonly _tag: "SuppressedSpaceScroll";
|
|
134
134
|
} | {
|
|
135
|
-
readonly _tag: "
|
|
135
|
+
readonly _tag: "GotAnimationMessage";
|
|
136
136
|
readonly message: {
|
|
137
137
|
readonly _tag: "Showed";
|
|
138
138
|
} | {
|
|
139
139
|
readonly _tag: "Hid";
|
|
140
140
|
} | {
|
|
141
|
-
readonly _tag: "
|
|
141
|
+
readonly _tag: "AdvancedAnimationFrame";
|
|
142
142
|
} | {
|
|
143
|
-
readonly _tag: "
|
|
143
|
+
readonly _tag: "EndedAnimation";
|
|
144
144
|
};
|
|
145
145
|
} | {
|
|
146
146
|
readonly _tag: "PressedPointerOnButton";
|
|
@@ -167,7 +167,7 @@ export declare const view: <Message, Item>(config: Readonly<{
|
|
|
167
167
|
readonly isAnimated: boolean;
|
|
168
168
|
readonly isModal: boolean;
|
|
169
169
|
readonly orientation: "Vertical" | "Horizontal";
|
|
170
|
-
readonly
|
|
170
|
+
readonly animation: {
|
|
171
171
|
readonly id: string;
|
|
172
172
|
readonly isShowing: boolean;
|
|
173
173
|
readonly transitionState: "Idle" | "EnterStart" | "EnterAnimating" | "LeaveStart" | "LeaveAnimating";
|
package/dist/ui/menu/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare const Model: S.Struct<{
|
|
|
13
13
|
isOpen: typeof S.Boolean;
|
|
14
14
|
isAnimated: typeof S.Boolean;
|
|
15
15
|
isModal: typeof S.Boolean;
|
|
16
|
-
|
|
16
|
+
animation: S.Struct<{
|
|
17
17
|
id: typeof S.String;
|
|
18
18
|
isShowing: typeof S.Boolean;
|
|
19
19
|
transitionState: S.Literal<["Idle", "EnterStart", "EnterAnimating", "LeaveStart", "LeaveAnimating"]>;
|
|
@@ -94,9 +94,9 @@ export declare const CompletedAdvanceFocus: import("../../schema").CallableTagge
|
|
|
94
94
|
export declare const IgnoredMouseClick: import("../../schema").CallableTaggedStruct<"IgnoredMouseClick", {}>;
|
|
95
95
|
/** Sent when a Space key-up is captured to prevent page scrolling. */
|
|
96
96
|
export declare const SuppressedSpaceScroll: import("../../schema").CallableTaggedStruct<"SuppressedSpaceScroll", {}>;
|
|
97
|
-
/** Wraps
|
|
98
|
-
export declare const
|
|
99
|
-
message: S.Union<[import("../../schema").CallableTaggedStruct<"Showed", {}>, import("../../schema").CallableTaggedStruct<"Hid", {}>, import("../../schema").CallableTaggedStruct<"
|
|
97
|
+
/** Wraps an Animation submodel message for delegation. */
|
|
98
|
+
export declare const GotAnimationMessage: import("../../schema").CallableTaggedStruct<"GotAnimationMessage", {
|
|
99
|
+
message: S.Union<[import("../../schema").CallableTaggedStruct<"Showed", {}>, import("../../schema").CallableTaggedStruct<"Hid", {}>, import("../../schema").CallableTaggedStruct<"AdvancedAnimationFrame", {}>, import("../../schema").CallableTaggedStruct<"EndedAnimation", {}>]>;
|
|
100
100
|
}>;
|
|
101
101
|
/** Sent when the user presses a pointer device on the menu button. Records pointer type and toggles for mouse. */
|
|
102
102
|
export declare const PressedPointerOnButton: import("../../schema").CallableTaggedStruct<"PressedPointerOnButton", {
|
|
@@ -135,7 +135,7 @@ export declare const Message: S.Union<[
|
|
|
135
135
|
typeof CompletedAdvanceFocus,
|
|
136
136
|
typeof IgnoredMouseClick,
|
|
137
137
|
typeof SuppressedSpaceScroll,
|
|
138
|
-
typeof
|
|
138
|
+
typeof GotAnimationMessage,
|
|
139
139
|
typeof PressedPointerOnButton,
|
|
140
140
|
typeof ReleasedPointerOnItems
|
|
141
141
|
]>;
|
|
@@ -154,7 +154,7 @@ export type IgnoredMouseClick = typeof IgnoredMouseClick.Type;
|
|
|
154
154
|
export type SuppressedSpaceScroll = typeof SuppressedSpaceScroll.Type;
|
|
155
155
|
export type PressedPointerOnButton = typeof PressedPointerOnButton.Type;
|
|
156
156
|
export type ReleasedPointerOnItems = typeof ReleasedPointerOnItems.Type;
|
|
157
|
-
/** Configuration for creating a menu model with `init`. `isAnimated` enables
|
|
157
|
+
/** Configuration for creating a menu model with `init`. `isAnimated` enables animation coordination (default `false`). `isModal` locks page scroll and inerts other elements when open (default `false`). */
|
|
158
158
|
export type InitConfig = Readonly<{
|
|
159
159
|
id: string;
|
|
160
160
|
isAnimated?: boolean;
|
|
@@ -200,17 +200,17 @@ export declare const DelayClearSearch: Command.CommandDefinition<"DelayClearSear
|
|
|
200
200
|
readonly _tag: "ClearedSearch";
|
|
201
201
|
readonly version: number;
|
|
202
202
|
}>;
|
|
203
|
-
/** Detects whether the menu button moved or the leave
|
|
204
|
-
export declare const
|
|
205
|
-
readonly _tag: "
|
|
203
|
+
/** Detects whether the menu button moved or the leave animation ended — whichever comes first. Both outcomes signal the Animation submodel that leave is complete. */
|
|
204
|
+
export declare const DetectMovementOrAnimationEnd: Command.CommandDefinition<"DetectMovementOrAnimationEnd", {
|
|
205
|
+
readonly _tag: "GotAnimationMessage";
|
|
206
206
|
readonly message: {
|
|
207
207
|
readonly _tag: "Showed";
|
|
208
208
|
} | {
|
|
209
209
|
readonly _tag: "Hid";
|
|
210
210
|
} | {
|
|
211
|
-
readonly _tag: "
|
|
211
|
+
readonly _tag: "AdvancedAnimationFrame";
|
|
212
212
|
} | {
|
|
213
|
-
readonly _tag: "
|
|
213
|
+
readonly _tag: "EndedAnimation";
|
|
214
214
|
};
|
|
215
215
|
}>;
|
|
216
216
|
/** Processes a menu message and returns the next model and commands. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/menu/index.js
CHANGED
|
@@ -6,13 +6,13 @@ import { m } from '../../message';
|
|
|
6
6
|
import { evo } from '../../struct';
|
|
7
7
|
import * as Task from '../../task';
|
|
8
8
|
import { anchorHooks } from '../anchor';
|
|
9
|
+
// NOTE: Animation imports are split across schema + update to avoid a circular
|
|
10
|
+
// dependency: animation → html → runtime → devtools → menu → animation.
|
|
11
|
+
// The barrel (../animation) imports from html, which starts the cycle.
|
|
12
|
+
import { EndedAnimation as AnimationEndedAnimation, Hid as AnimationHid, Message as AnimationMessage, Model as AnimationModel, Showed as AnimationShowed, init as animationInit, } from '../animation/schema';
|
|
13
|
+
import { update as animationUpdate } from '../animation/update';
|
|
9
14
|
import { groupContiguous } from '../group';
|
|
10
15
|
import { findFirstEnabledIndex, isPrintableKey, keyToIndex } from '../keyboard';
|
|
11
|
-
// NOTE: Transition imports are split across schema + update to avoid a circular
|
|
12
|
-
// dependency: transition → html → runtime → devtools → menu → transition.
|
|
13
|
-
// The barrel (../transition) imports from html, which starts the cycle.
|
|
14
|
-
import { EndedTransition as TransitionEndedTransition, Hid as TransitionHid, Message as TransitionMessage, Model as TransitionModel, Showed as TransitionShowed, init as transitionInit, } from '../transition/schema';
|
|
15
|
-
import { update as transitionUpdate } from '../transition/update';
|
|
16
16
|
import { resolveTypeaheadMatch } from '../typeahead';
|
|
17
17
|
// MODEL
|
|
18
18
|
/** Schema for the activation trigger — whether the user interacted via mouse or keyboard. */
|
|
@@ -28,7 +28,7 @@ export const Model = S.Struct({
|
|
|
28
28
|
isOpen: S.Boolean,
|
|
29
29
|
isAnimated: S.Boolean,
|
|
30
30
|
isModal: S.Boolean,
|
|
31
|
-
|
|
31
|
+
animation: AnimationModel,
|
|
32
32
|
maybeActiveItemIndex: S.OptionFromSelf(S.Number),
|
|
33
33
|
activationTrigger: ActivationTrigger,
|
|
34
34
|
searchQuery: S.String,
|
|
@@ -94,9 +94,9 @@ export const CompletedAdvanceFocus = m('CompletedAdvanceFocus');
|
|
|
94
94
|
export const IgnoredMouseClick = m('IgnoredMouseClick');
|
|
95
95
|
/** Sent when a Space key-up is captured to prevent page scrolling. */
|
|
96
96
|
export const SuppressedSpaceScroll = m('SuppressedSpaceScroll');
|
|
97
|
-
/** Wraps
|
|
98
|
-
export const
|
|
99
|
-
message:
|
|
97
|
+
/** Wraps an Animation submodel message for delegation. */
|
|
98
|
+
export const GotAnimationMessage = m('GotAnimationMessage', {
|
|
99
|
+
message: AnimationMessage,
|
|
100
100
|
});
|
|
101
101
|
/** Sent when the user presses a pointer device on the menu button. Records pointer type and toggles for mouse. */
|
|
102
102
|
export const PressedPointerOnButton = m('PressedPointerOnButton', {
|
|
@@ -113,7 +113,7 @@ export const ReleasedPointerOnItems = m('ReleasedPointerOnItems', {
|
|
|
113
113
|
timeStamp: S.Number,
|
|
114
114
|
});
|
|
115
115
|
/** Union of all messages the menu component can produce. */
|
|
116
|
-
export const Message = S.Union(Opened, Closed, ClosedByTab, ActivatedItem, DeactivatedItem, SelectedItem, MovedPointerOverItem, RequestedItemClick, Searched, ClearedSearch, CompletedFocusItems, CompletedFocusButton, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedScrollIntoView, CompletedClickItem, CompletedAdvanceFocus, IgnoredMouseClick, SuppressedSpaceScroll,
|
|
116
|
+
export const Message = S.Union(Opened, Closed, ClosedByTab, ActivatedItem, DeactivatedItem, SelectedItem, MovedPointerOverItem, RequestedItemClick, Searched, ClearedSearch, CompletedFocusItems, CompletedFocusButton, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedScrollIntoView, CompletedClickItem, CompletedAdvanceFocus, IgnoredMouseClick, SuppressedSpaceScroll, GotAnimationMessage, PressedPointerOnButton, ReleasedPointerOnItems);
|
|
117
117
|
// INIT
|
|
118
118
|
const SEARCH_DEBOUNCE_MILLISECONDS = 350;
|
|
119
119
|
const LEFT_MOUSE_BUTTON = 0;
|
|
@@ -125,7 +125,7 @@ export const init = (config) => ({
|
|
|
125
125
|
isOpen: false,
|
|
126
126
|
isAnimated: config.isAnimated ?? false,
|
|
127
127
|
isModal: config.isModal ?? false,
|
|
128
|
-
|
|
128
|
+
animation: animationInit({ id: `${config.id}-items` }),
|
|
129
129
|
maybeActiveItemIndex: Option.none(),
|
|
130
130
|
activationTrigger: 'Keyboard',
|
|
131
131
|
searchQuery: '',
|
|
@@ -166,26 +166,26 @@ export const ScrollIntoView = Command.define('ScrollIntoView', CompletedScrollIn
|
|
|
166
166
|
export const ClickItem = Command.define('ClickItem', CompletedClickItem);
|
|
167
167
|
/** Waits for the typeahead search debounce period before clearing the query. */
|
|
168
168
|
export const DelayClearSearch = Command.define('DelayClearSearch', ClearedSearch);
|
|
169
|
-
/** Detects whether the menu button moved or the leave
|
|
170
|
-
export const
|
|
171
|
-
const
|
|
172
|
-
const [
|
|
173
|
-
const mappedCommands =
|
|
169
|
+
/** Detects whether the menu button moved or the leave animation ended — whichever comes first. Both outcomes signal the Animation submodel that leave is complete. */
|
|
170
|
+
export const DetectMovementOrAnimationEnd = Command.define('DetectMovementOrAnimationEnd', GotAnimationMessage);
|
|
171
|
+
const delegateToAnimation = (model, animationMessage) => {
|
|
172
|
+
const [nextAnimation, animationCommands, maybeOutMessage] = animationUpdate(model.animation, animationMessage);
|
|
173
|
+
const mappedCommands = animationCommands.map(Command.mapEffect(Effect.map(message => GotAnimationMessage({ message }))));
|
|
174
174
|
const additionalCommands = Option.match(maybeOutMessage, {
|
|
175
175
|
onNone: () => [],
|
|
176
176
|
onSome: M.type().pipe(M.tagsExhaustive({
|
|
177
177
|
StartedLeaveAnimating: () => [
|
|
178
|
-
|
|
179
|
-
message:
|
|
180
|
-
}))), Task.
|
|
181
|
-
message:
|
|
178
|
+
DetectMovementOrAnimationEnd(Effect.raceFirst(Task.detectElementMovement(buttonSelector(model.id)).pipe(Effect.as(GotAnimationMessage({
|
|
179
|
+
message: AnimationEndedAnimation(),
|
|
180
|
+
}))), Task.waitForAnimationSettled(itemsSelector(model.id)).pipe(Effect.as(GotAnimationMessage({
|
|
181
|
+
message: AnimationEndedAnimation(),
|
|
182
182
|
}))))),
|
|
183
183
|
],
|
|
184
184
|
TransitionedOut: () => [],
|
|
185
185
|
})),
|
|
186
186
|
});
|
|
187
187
|
return [
|
|
188
|
-
evo(model, {
|
|
188
|
+
evo(model, { animation: () => nextAnimation }),
|
|
189
189
|
[...mappedCommands, ...additionalCommands],
|
|
190
190
|
];
|
|
191
191
|
};
|
|
@@ -210,10 +210,10 @@ export const update = (model, message) => {
|
|
|
210
210
|
]);
|
|
211
211
|
const openMenu = (baseModel) => {
|
|
212
212
|
if (model.isAnimated) {
|
|
213
|
-
const [nextModel,
|
|
213
|
+
const [nextModel, animationCommands] = delegateToAnimation(baseModel, AnimationShowed());
|
|
214
214
|
return [
|
|
215
215
|
evo(nextModel, { isOpen: () => true }),
|
|
216
|
-
[...openCommands, ...
|
|
216
|
+
[...openCommands, ...animationCommands],
|
|
217
217
|
];
|
|
218
218
|
}
|
|
219
219
|
return [evo(baseModel, { isOpen: () => true }), openCommands];
|
|
@@ -221,8 +221,8 @@ export const update = (model, message) => {
|
|
|
221
221
|
const closeMenu = (baseModel, commands) => {
|
|
222
222
|
const closed = closedModel(baseModel);
|
|
223
223
|
if (model.isAnimated) {
|
|
224
|
-
const [nextModel,
|
|
225
|
-
return [nextModel, [...commands, ...
|
|
224
|
+
const [nextModel, animationCommands] = delegateToAnimation(closed, AnimationHid());
|
|
225
|
+
return [nextModel, [...commands, ...animationCommands]];
|
|
226
226
|
}
|
|
227
227
|
return [closed, commands];
|
|
228
228
|
};
|
|
@@ -299,7 +299,7 @@ export const update = (model, message) => {
|
|
|
299
299
|
}
|
|
300
300
|
return [evo(model, { searchQuery: () => '' }), []];
|
|
301
301
|
},
|
|
302
|
-
|
|
302
|
+
GotAnimationMessage: ({ message: animationMessage }) => delegateToAnimation(model, animationMessage),
|
|
303
303
|
PressedPointerOnButton: ({ pointerType, button, screenX, screenY, timeStamp, }) => {
|
|
304
304
|
const withPointerType = evo(model, {
|
|
305
305
|
maybeLastButtonPointerType: () => Option.some(pointerType),
|
|
@@ -376,13 +376,13 @@ const itemId = (id, index) => `${id}-item-${index}`;
|
|
|
376
376
|
/** Renders a headless menu with typeahead search, keyboard navigation, and aria-activedescendant focus management. */
|
|
377
377
|
export const view = (config) => {
|
|
378
378
|
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();
|
|
379
|
-
const { model: { id, isOpen,
|
|
379
|
+
const { model: { id, isOpen, animation: { 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;
|
|
380
380
|
const dispatchSelectedItem = (index) => onSelectedItem
|
|
381
381
|
? onSelectedItem(index)
|
|
382
382
|
: toParentMessage(SelectedItem({ index }));
|
|
383
383
|
const isLeaving = transitionState === 'LeaveStart' || transitionState === 'LeaveAnimating';
|
|
384
384
|
const isVisible = isOpen || isLeaving;
|
|
385
|
-
const
|
|
385
|
+
const animationAttributes = M.value(transitionState).pipe(M.when('EnterStart', () => [
|
|
386
386
|
DataAttribute('closed', ''),
|
|
387
387
|
DataAttribute('enter', ''),
|
|
388
388
|
DataAttribute('transition', ''),
|
|
@@ -497,7 +497,7 @@ export const view = (config) => {
|
|
|
497
497
|
...maybeActiveDescendant,
|
|
498
498
|
Tabindex(0),
|
|
499
499
|
...anchorAttributes,
|
|
500
|
-
...
|
|
500
|
+
...animationAttributes,
|
|
501
501
|
...(isLeaving
|
|
502
502
|
? []
|
|
503
503
|
: [
|
package/dist/ui/menu/public.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { init, update, open, close, selectItem, view, lazy, Model, Message, SelectedItem, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusItems, CompletedFocusButton, CompletedScrollIntoView, CompletedClickItem, ClearedSearch,
|
|
1
|
+
export { init, update, open, close, selectItem, view, lazy, Model, Message, SelectedItem, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusItems, CompletedFocusButton, CompletedScrollIntoView, CompletedClickItem, ClearedSearch, GotAnimationMessage, LockScroll, UnlockScroll, InertOthers, RestoreInert, FocusItems, FocusButton, ScrollIntoView, ClickItem, DelayClearSearch, DetectMovementOrAnimationEnd, } from './index';
|
|
2
2
|
export type { ActivationTrigger, Opened, Closed, ClosedByTab, ActivatedItem, DeactivatedItem, MovedPointerOverItem, RequestedItemClick, Searched, PressedPointerOnButton, ReleasedPointerOnItems, IgnoredMouseClick, SuppressedSpaceScroll, InitConfig, ViewConfig, ItemConfig, GroupHeading, } from './index';
|
|
3
3
|
export type { AnchorConfig } from '../anchor';
|
|
4
4
|
//# sourceMappingURL=public.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,4BAA4B,GAC7B,MAAM,SAAS,CAAA;AAEhB,YAAY,EACV,iBAAiB,EACjB,MAAM,EACN,MAAM,EACN,WAAW,EACX,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,QAAQ,EACR,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA"}
|
package/dist/ui/menu/public.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { init, update, open, close, selectItem, view, lazy, Model, Message, SelectedItem, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusItems, CompletedFocusButton, CompletedScrollIntoView, CompletedClickItem, ClearedSearch,
|
|
1
|
+
export { init, update, open, close, selectItem, view, lazy, Model, Message, SelectedItem, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusItems, CompletedFocusButton, CompletedScrollIntoView, CompletedClickItem, ClearedSearch, GotAnimationMessage, LockScroll, UnlockScroll, InertOthers, RestoreInert, FocusItems, FocusButton, ScrollIntoView, ClickItem, DelayClearSearch, DetectMovementOrAnimationEnd, } from './index';
|