foldkit 0.84.0 → 0.85.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/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +16 -6
- package/dist/task/dom.d.ts +11 -7
- package/dist/task/dom.d.ts.map +1 -1
- package/dist/task/dom.js +11 -7
- package/dist/test/apps/mountPanel.d.ts +3 -3
- package/dist/test/apps/mountPanel.js +9 -9
- package/dist/test/internal.d.ts +6 -1
- package/dist/test/internal.d.ts.map +1 -1
- package/dist/test/internal.js +18 -0
- package/dist/test/scene.d.ts +3 -0
- package/dist/test/scene.d.ts.map +1 -1
- package/dist/test/scene.js +62 -8
- package/dist/ui/combobox/multi.d.ts +10 -10
- 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 +27 -27
- package/dist/ui/combobox/shared.d.ts.map +1 -1
- package/dist/ui/combobox/shared.js +36 -36
- package/dist/ui/combobox/single.d.ts +10 -10
- package/dist/ui/datePicker/index.d.ts +1 -1
- package/dist/ui/listbox/multi.d.ts +4 -8
- package/dist/ui/listbox/multi.d.ts.map +1 -1
- package/dist/ui/listbox/public.d.ts +1 -1
- package/dist/ui/listbox/public.d.ts.map +1 -1
- package/dist/ui/listbox/public.js +1 -1
- package/dist/ui/listbox/shared.d.ts +13 -24
- package/dist/ui/listbox/shared.d.ts.map +1 -1
- package/dist/ui/listbox/shared.js +22 -40
- package/dist/ui/listbox/single.d.ts +4 -8
- package/dist/ui/listbox/single.d.ts.map +1 -1
- package/dist/ui/menu/index.d.ts +11 -20
- package/dist/ui/menu/index.d.ts.map +1 -1
- package/dist/ui/menu/index.js +26 -40
- 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 +11 -11
- package/dist/ui/popover/index.d.ts.map +1 -1
- package/dist/ui/popover/index.js +21 -21
- 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/tooltip/index.d.ts +6 -6
- package/dist/ui/tooltip/index.d.ts.map +1 -1
- package/dist/ui/tooltip/index.js +11 -11
- package/dist/ui/tooltip/public.d.ts +1 -1
- package/dist/ui/tooltip/public.d.ts.map +1 -1
- package/dist/ui/tooltip/public.js +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Array, Effect, Equal,
|
|
1
|
+
import { Array, Effect, Equal, Match as M, Option, Predicate, Schema as S, String as Str, pipe, } from 'effect';
|
|
2
2
|
import * as Command from '../../command/index.js';
|
|
3
3
|
import { OptionExt } from '../../effectExtensions/index.js';
|
|
4
4
|
import { html, } from '../../html/index.js';
|
|
@@ -107,11 +107,9 @@ export const IgnoredMouseClick = m('IgnoredMouseClick');
|
|
|
107
107
|
/** Sent when a Space key-up is captured to prevent page scrolling. */
|
|
108
108
|
export const SuppressedSpaceScroll = m('SuppressedSpaceScroll');
|
|
109
109
|
/** Sent when the listbox items panel mounts and Floating UI has positioned it. Update no-ops; surfaces the positioning side effect for DevTools. */
|
|
110
|
-
export const
|
|
111
|
-
/** Sent when the listbox items panel mounts and the no-anchor focus fallback runs. Update no-ops; surfaces the focus side effect for DevTools. */
|
|
112
|
-
export const CompletedFocusItemsOnMount = m('CompletedFocusItemsOnMount');
|
|
110
|
+
export const CompletedAnchorListbox = m('CompletedAnchorListbox');
|
|
113
111
|
/** Sent when the listbox backdrop mounts and is portaled to the document body. Update no-ops; surfaces the portal side effect for DevTools. */
|
|
114
|
-
export const
|
|
112
|
+
export const CompletedPortalListboxBackdrop = m('CompletedPortalListboxBackdrop');
|
|
115
113
|
/** Wraps an Animation submodel message for delegation. */
|
|
116
114
|
export const GotAnimationMessage = m('GotAnimationMessage', {
|
|
117
115
|
message: AnimationMessage,
|
|
@@ -143,9 +141,8 @@ export const Message = S.Union([
|
|
|
143
141
|
CompletedClickItem,
|
|
144
142
|
IgnoredMouseClick,
|
|
145
143
|
SuppressedSpaceScroll,
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
CompletedBackdropPortal,
|
|
144
|
+
CompletedAnchorListbox,
|
|
145
|
+
CompletedPortalListboxBackdrop,
|
|
149
146
|
GotAnimationMessage,
|
|
150
147
|
PressedPointerOnButton,
|
|
151
148
|
]);
|
|
@@ -239,8 +236,8 @@ export const makeUpdate = (handleSelectedItem) => {
|
|
|
239
236
|
const focusButton = FocusButton(Task.focus(buttonSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedFocusButton())));
|
|
240
237
|
const focusItems = FocusItems(Task.focus(itemsSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedFocusItems())));
|
|
241
238
|
const openCommands = [
|
|
242
|
-
focusItems,
|
|
243
239
|
...Array.getSomes([maybeLockScroll, maybeInertOthers]),
|
|
240
|
+
focusItems,
|
|
244
241
|
];
|
|
245
242
|
const closeWithFocusCommands = [
|
|
246
243
|
focusButton,
|
|
@@ -371,37 +368,23 @@ export const makeUpdate = (handleSelectedItem) => {
|
|
|
371
368
|
[],
|
|
372
369
|
],
|
|
373
370
|
SuppressedSpaceScroll: () => [model, []],
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
CompletedBackdropPortal: () => [model, []],
|
|
371
|
+
CompletedAnchorListbox: () => [model, []],
|
|
372
|
+
CompletedPortalListboxBackdrop: () => [model, []],
|
|
377
373
|
}));
|
|
378
374
|
};
|
|
379
375
|
};
|
|
380
376
|
/** The anchor-positioning Mount this Listbox renders when an anchor is
|
|
381
377
|
* configured. Exposed so Scene tests can call
|
|
382
|
-
* `Scene.Mount.resolve(
|
|
383
|
-
export const
|
|
384
|
-
/** The Mount this Listbox renders to focus its items container on open.
|
|
385
|
-
* Exposed so Scene tests can call
|
|
386
|
-
* `Scene.Mount.resolve(ListboxFocusItemsOnMount, CompletedFocusItemsOnMount())`. */
|
|
387
|
-
export const ListboxFocusItemsOnMount = Mount.define('ListboxFocusItemsOnMount', CompletedFocusItemsOnMount);
|
|
378
|
+
* `Scene.Mount.resolve(AnchorListbox, CompletedAnchorListbox())`. */
|
|
379
|
+
export const AnchorListbox = Mount.define('AnchorListbox', CompletedAnchorListbox);
|
|
388
380
|
/** The backdrop-portaling Mount this Listbox renders. Exposed so Scene tests can
|
|
389
|
-
* call `Scene.Mount.resolve(
|
|
381
|
+
* call `Scene.Mount.resolve(PortalListboxBackdrop, CompletedPortalListboxBackdrop())` to
|
|
390
382
|
* acknowledge the mount produced by the rendered backdrop. */
|
|
391
|
-
export const
|
|
392
|
-
const
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
}
|
|
396
|
-
return {
|
|
397
|
-
message: CompletedFocusItemsOnMount(),
|
|
398
|
-
cleanup: Function.constVoid,
|
|
399
|
-
};
|
|
383
|
+
export const PortalListboxBackdrop = Mount.define('PortalListboxBackdrop', CompletedPortalListboxBackdrop);
|
|
384
|
+
const portalListboxBackdrop = PortalListboxBackdrop((element) => Effect.sync(() => {
|
|
385
|
+
const cleanup = portalToBody(element);
|
|
386
|
+
return { message: CompletedPortalListboxBackdrop(), cleanup };
|
|
400
387
|
}));
|
|
401
|
-
const portalBackdropOnMount = ListboxBackdropPortal((element) => Effect.sync(() => ({
|
|
402
|
-
message: CompletedBackdropPortal(),
|
|
403
|
-
cleanup: portalToBody(element),
|
|
404
|
-
})));
|
|
405
388
|
export const makeView = (behavior) => (config) => {
|
|
406
389
|
const { div, input, AriaActiveDescendant, AriaControls, AriaDisabled, AriaExpanded, AriaHasPopup, AriaLabelledBy, AriaMultiSelectable, AriaOrientation, AriaSelected, Attribute, Class, DataAttribute, Id, Name, OnBlur, OnClick, OnKeyDownPreventDefault, OnKeyUpPreventDefault, OnMount, OnPointerDown, OnPointerLeave, OnPointerMove, Role, Style, Tabindex, Type, Value, keyed, } = html();
|
|
407
390
|
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;
|
|
@@ -517,16 +500,15 @@ export const makeView = (behavior) => (config) => {
|
|
|
517
500
|
const anchorAttributes = anchor
|
|
518
501
|
? [
|
|
519
502
|
Style({ position: 'absolute', margin: '0', visibility: 'hidden' }),
|
|
520
|
-
OnMount(Mount.mapMessage(
|
|
521
|
-
|
|
522
|
-
cleanup: anchorSetup({
|
|
503
|
+
OnMount(Mount.mapMessage(AnchorListbox((items) => Effect.sync(() => {
|
|
504
|
+
const cleanup = anchorSetup({
|
|
523
505
|
buttonId: `${id}-button`,
|
|
524
506
|
anchor,
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
}))
|
|
507
|
+
})(items);
|
|
508
|
+
return { message: CompletedAnchorListbox(), cleanup };
|
|
509
|
+
})), toParentMessage)),
|
|
528
510
|
]
|
|
529
|
-
: [
|
|
511
|
+
: [];
|
|
530
512
|
const itemsContainerAttributes = [
|
|
531
513
|
Id(`${id}-items`),
|
|
532
514
|
Role('listbox'),
|
|
@@ -623,7 +605,7 @@ export const makeView = (behavior) => (config) => {
|
|
|
623
605
|
});
|
|
624
606
|
};
|
|
625
607
|
const backdrop = keyed('div')(`${id}-backdrop`, [
|
|
626
|
-
OnMount(Mount.mapMessage(
|
|
608
|
+
OnMount(Mount.mapMessage(portalListboxBackdrop, toParentMessage)),
|
|
627
609
|
...(isLeaving ? [] : [OnClick(toParentMessage(Closed()))]),
|
|
628
610
|
...(backdropClassName ? [Class(backdropClassName)] : []),
|
|
629
611
|
...backdropAttributes,
|
|
@@ -129,11 +129,9 @@ export declare const update: (model: {
|
|
|
129
129
|
} | {
|
|
130
130
|
readonly _tag: "SuppressedSpaceScroll";
|
|
131
131
|
} | {
|
|
132
|
-
readonly _tag: "
|
|
132
|
+
readonly _tag: "CompletedAnchorListbox";
|
|
133
133
|
} | {
|
|
134
|
-
readonly _tag: "
|
|
135
|
-
} | {
|
|
136
|
-
readonly _tag: "CompletedBackdropPortal";
|
|
134
|
+
readonly _tag: "CompletedPortalListboxBackdrop";
|
|
137
135
|
} | {
|
|
138
136
|
readonly _tag: "GotAnimationMessage";
|
|
139
137
|
readonly message: {
|
|
@@ -187,11 +185,9 @@ export declare const view: <ParentMessage, Item>(config: Readonly<{
|
|
|
187
185
|
readonly maybeSelectedItem: Option.Option<string>;
|
|
188
186
|
};
|
|
189
187
|
toParentMessage: (message: Opened | Closed | import("./shared.js").BlurredItems | import("./shared.js").ActivatedItem | import("./shared.js").DeactivatedItem | SelectedItem | import("./shared.js").MovedPointerOverItem | import("./shared.js").RequestedItemClick | import("./shared.js").Searched | import("./shared.js").PressedPointerOnButton | import("./shared.js").IgnoredMouseClick | import("./shared.js").SuppressedSpaceScroll | {
|
|
190
|
-
readonly _tag: "
|
|
191
|
-
} | {
|
|
192
|
-
readonly _tag: "CompletedFocusItemsOnMount";
|
|
188
|
+
readonly _tag: "CompletedAnchorListbox";
|
|
193
189
|
} | {
|
|
194
|
-
readonly _tag: "
|
|
190
|
+
readonly _tag: "CompletedPortalListboxBackdrop";
|
|
195
191
|
}) => ParentMessage;
|
|
196
192
|
onSelectedItem?: (value: string) => ParentMessage;
|
|
197
193
|
items: readonly Item[];
|
|
@@ -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,EAAE,MAAM,QAAQ,CAAA;AAEnD,OAAO,KAAK,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,KAAK,IAAI,EAAc,MAAM,qBAAqB,CAAA;AAE3D,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,EACnB,MAAM,EACN,KAAK,OAAO,EACZ,MAAM,EACN,YAAY,EAIb,MAAM,aAAa,CAAA;AAIpB,mJAAmJ;AACnJ,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;EAGhB,CAAA;AAEF,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
|
|
1
|
+
{"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../../src/ui/listbox/single.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEnD,OAAO,KAAK,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,KAAK,IAAI,EAAc,MAAM,qBAAqB,CAAA;AAE3D,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,EACnB,MAAM,EACN,KAAK,OAAO,EACZ,MAAM,EACN,YAAY,EAIb,MAAM,aAAa,CAAA;AAIpB,mJAAmJ;AACnJ,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,6RAA6R;AAC7R,MAAM,MAAM,UAAU,GAAG,cAAc,GACrC,QAAQ,CAAC;IACP,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAC,CAAA;AAEJ,6HAA6H;AAC7H,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAIF,qIAAqI;AACrI,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAMjB,CAAA;AAEF;uFACuF;AACvF,eAAO,MAAM,IAAI,GACf,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACK,CAAA;AAEhE;wFACwF;AACxF,eAAO,MAAM,KAAK,GAChB,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAClC,CAAA;AAEzB;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,aAAa,EAAE,IAAI,IAAI,cAAc,CAC1D,aAAa,EACb,IAAI,EACJ,KAAK,CACN,CAAA;AAED,2JAA2J;AAC3J,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAWf,CAAA;AAEF;mFACmF;AACnF,eAAO,MAAM,IAAI,GAAI,aAAa,EAAE,IAAI,EACtC,cAAc,IAAI,CAChB,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,EAC/B,OAAO,GAAG,iBAAiB,GAAG,gBAAgB,CAC/C,KACA,CAAC,CACF,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,cAAc,CAC7B,aAAa,EACb,IAAI,EACJ,KAAK,CACN,CAAC,iBAAiB,CAAC,KACjB,IAAI,CAoBR,CAAA"}
|
package/dist/ui/menu/index.d.ts
CHANGED
|
@@ -96,11 +96,9 @@ export declare const IgnoredMouseClick: import("../../schema/index.js").Callable
|
|
|
96
96
|
/** Sent when a Space key-up is captured to prevent page scrolling. */
|
|
97
97
|
export declare const SuppressedSpaceScroll: import("../../schema/index.js").CallableTaggedStruct<"SuppressedSpaceScroll", {}>;
|
|
98
98
|
/** Sent when the menu items panel mounts and Floating UI has positioned it. Update no-ops; the side effect is the act of positioning, surfaced for DevTools observability. */
|
|
99
|
-
export declare const
|
|
100
|
-
/** Sent when the menu items panel mounts and the no-anchor focus fallback runs. Update no-ops; the side effect is the focus call, surfaced for DevTools observability. */
|
|
101
|
-
export declare const CompletedFocusItemsOnMount: import("../../schema/index.js").CallableTaggedStruct<"CompletedFocusItemsOnMount", {}>;
|
|
99
|
+
export declare const CompletedAnchorMenu: import("../../schema/index.js").CallableTaggedStruct<"CompletedAnchorMenu", {}>;
|
|
102
100
|
/** Sent when the menu backdrop mounts and is portaled to the document body. Update no-ops; surfaces the portal side effect for DevTools. */
|
|
103
|
-
export declare const
|
|
101
|
+
export declare const CompletedPortalMenuBackdrop: import("../../schema/index.js").CallableTaggedStruct<"CompletedPortalMenuBackdrop", {}>;
|
|
104
102
|
/** Wraps an Animation submodel message for delegation. */
|
|
105
103
|
export declare const GotAnimationMessage: import("../../schema/index.js").CallableTaggedStruct<"GotAnimationMessage", {
|
|
106
104
|
message: S.Union<[import("../../schema/index.js").CallableTaggedStruct<"Showed", {}>, import("../../schema/index.js").CallableTaggedStruct<"Hid", {}>, import("../../schema/index.js").CallableTaggedStruct<"AdvancedAnimationFrame", {}>, import("../../schema/index.js").CallableTaggedStruct<"EndedAnimation", {}>]>;
|
|
@@ -142,9 +140,8 @@ export declare const Message: S.Union<[
|
|
|
142
140
|
typeof CompletedAdvanceFocus,
|
|
143
141
|
typeof IgnoredMouseClick,
|
|
144
142
|
typeof SuppressedSpaceScroll,
|
|
145
|
-
typeof
|
|
146
|
-
typeof
|
|
147
|
-
typeof CompletedBackdropPortal,
|
|
143
|
+
typeof CompletedAnchorMenu,
|
|
144
|
+
typeof CompletedPortalMenuBackdrop,
|
|
148
145
|
typeof GotAnimationMessage,
|
|
149
146
|
typeof PressedPointerOnButton,
|
|
150
147
|
typeof ReleasedPointerOnItems
|
|
@@ -226,22 +223,16 @@ export declare const DetectMovementOrAnimationEnd: Command.CommandDefinition<"De
|
|
|
226
223
|
/** Processes a menu message and returns the next model and commands. */
|
|
227
224
|
export declare const update: (model: Model, message: Message) => UpdateReturn;
|
|
228
225
|
/** The anchor-positioning Mount this Menu renders on its panel. Exposed so
|
|
229
|
-
* Scene tests can call `Scene.Mount.resolve(
|
|
226
|
+
* Scene tests can call `Scene.Mount.resolve(AnchorMenu, CompletedAnchorMenu())`
|
|
230
227
|
* to acknowledge the mount produced by the rendered panel. */
|
|
231
|
-
export declare const
|
|
232
|
-
readonly _tag: "
|
|
233
|
-
}>;
|
|
234
|
-
/** The Mount this Menu renders to focus its first item on open. Exposed so
|
|
235
|
-
* Scene tests can call
|
|
236
|
-
* `Scene.Mount.resolve(MenuFocusItemsOnMount, CompletedFocusItemsOnMount())`. */
|
|
237
|
-
export declare const MenuFocusItemsOnMount: Mount.MountDefinition<"MenuFocusItemsOnMount", {
|
|
238
|
-
readonly _tag: "CompletedFocusItemsOnMount";
|
|
228
|
+
export declare const AnchorMenu: Mount.MountDefinition<"AnchorMenu", {
|
|
229
|
+
readonly _tag: "CompletedAnchorMenu";
|
|
239
230
|
}>;
|
|
240
231
|
/** The backdrop-portaling Mount this Menu renders. Exposed so Scene tests can
|
|
241
|
-
* call `Scene.Mount.resolve(
|
|
232
|
+
* call `Scene.Mount.resolve(PortalMenuBackdrop, CompletedPortalMenuBackdrop())` to
|
|
242
233
|
* acknowledge the mount produced by the rendered backdrop. */
|
|
243
|
-
export declare const
|
|
244
|
-
readonly _tag: "
|
|
234
|
+
export declare const PortalMenuBackdrop: Mount.MountDefinition<"PortalMenuBackdrop", {
|
|
235
|
+
readonly _tag: "CompletedPortalMenuBackdrop";
|
|
245
236
|
}>;
|
|
246
237
|
/** Programmatically opens the menu, updating the model and returning
|
|
247
238
|
* focus and modal commands. Use this in domain-event handlers to open the menu. */
|
|
@@ -265,7 +256,7 @@ export type GroupHeading = Readonly<{
|
|
|
265
256
|
/** Configuration for rendering a menu with `view`. */
|
|
266
257
|
export type ViewConfig<ParentMessage, Item extends string> = Readonly<{
|
|
267
258
|
model: Model;
|
|
268
|
-
toParentMessage: (message: Opened | Closed | BlurredItems | ActivatedItem | DeactivatedItem | SelectedItem | MovedPointerOverItem | RequestedItemClick | Searched | PressedPointerOnButton | ReleasedPointerOnItems | IgnoredMouseClick | SuppressedSpaceScroll | typeof
|
|
259
|
+
toParentMessage: (message: Opened | Closed | BlurredItems | ActivatedItem | DeactivatedItem | SelectedItem | MovedPointerOverItem | RequestedItemClick | Searched | PressedPointerOnButton | ReleasedPointerOnItems | IgnoredMouseClick | SuppressedSpaceScroll | typeof CompletedAnchorMenu.Type | typeof CompletedPortalMenuBackdrop.Type) => ParentMessage;
|
|
269
260
|
onSelectedItem?: (index: number) => ParentMessage;
|
|
270
261
|
items: ReadonlyArray<Item>;
|
|
271
262
|
itemToConfig: (item: Item, context: Readonly<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Array, Effect, Equal,
|
|
1
|
+
import { Array, Effect, Equal, Match as M, Option, Predicate, Schema as S, String as Str, pipe, } from 'effect';
|
|
2
2
|
import * as Command from '../../command/index.js';
|
|
3
3
|
import { OptionExt } from '../../effectExtensions/index.js';
|
|
4
4
|
import { createLazy, html, } from '../../html/index.js';
|
|
@@ -96,11 +96,9 @@ export const IgnoredMouseClick = m('IgnoredMouseClick');
|
|
|
96
96
|
/** Sent when a Space key-up is captured to prevent page scrolling. */
|
|
97
97
|
export const SuppressedSpaceScroll = m('SuppressedSpaceScroll');
|
|
98
98
|
/** Sent when the menu items panel mounts and Floating UI has positioned it. Update no-ops; the side effect is the act of positioning, surfaced for DevTools observability. */
|
|
99
|
-
export const
|
|
100
|
-
/** Sent when the menu items panel mounts and the no-anchor focus fallback runs. Update no-ops; the side effect is the focus call, surfaced for DevTools observability. */
|
|
101
|
-
export const CompletedFocusItemsOnMount = m('CompletedFocusItemsOnMount');
|
|
99
|
+
export const CompletedAnchorMenu = m('CompletedAnchorMenu');
|
|
102
100
|
/** Sent when the menu backdrop mounts and is portaled to the document body. Update no-ops; surfaces the portal side effect for DevTools. */
|
|
103
|
-
export const
|
|
101
|
+
export const CompletedPortalMenuBackdrop = m('CompletedPortalMenuBackdrop');
|
|
104
102
|
/** Wraps an Animation submodel message for delegation. */
|
|
105
103
|
export const GotAnimationMessage = m('GotAnimationMessage', {
|
|
106
104
|
message: AnimationMessage,
|
|
@@ -142,9 +140,8 @@ export const Message = S.Union([
|
|
|
142
140
|
CompletedAdvanceFocus,
|
|
143
141
|
IgnoredMouseClick,
|
|
144
142
|
SuppressedSpaceScroll,
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
CompletedBackdropPortal,
|
|
143
|
+
CompletedAnchorMenu,
|
|
144
|
+
CompletedPortalMenuBackdrop,
|
|
148
145
|
GotAnimationMessage,
|
|
149
146
|
PressedPointerOnButton,
|
|
150
147
|
ReleasedPointerOnItems,
|
|
@@ -234,7 +231,11 @@ export const update = (model, message) => {
|
|
|
234
231
|
]).pipe(Effect.as(CompletedSetupInert()))));
|
|
235
232
|
const maybeRestoreInert = OptionExt.when(model.isModal, RestoreInert(Task.restoreInert(model.id).pipe(Effect.as(CompletedTeardownInert()))));
|
|
236
233
|
const focusButton = FocusButton(Task.focus(buttonSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedFocusButton())));
|
|
237
|
-
const
|
|
234
|
+
const focusItems = FocusItems(Task.focus(itemsSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedFocusItems())));
|
|
235
|
+
const openCommands = [
|
|
236
|
+
...Array.getSomes([maybeLockScroll, maybeInertOthers]),
|
|
237
|
+
focusItems,
|
|
238
|
+
];
|
|
238
239
|
const closeWithFocusCommands = [
|
|
239
240
|
focusButton,
|
|
240
241
|
...Array.getSomes([maybeUnlockScroll, maybeRestoreInert]),
|
|
@@ -395,36 +396,22 @@ export const update = (model, message) => {
|
|
|
395
396
|
[],
|
|
396
397
|
],
|
|
397
398
|
SuppressedSpaceScroll: () => [model, []],
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
CompletedBackdropPortal: () => [model, []],
|
|
399
|
+
CompletedAnchorMenu: () => [model, []],
|
|
400
|
+
CompletedPortalMenuBackdrop: () => [model, []],
|
|
401
401
|
}));
|
|
402
402
|
};
|
|
403
403
|
/** The anchor-positioning Mount this Menu renders on its panel. Exposed so
|
|
404
|
-
* Scene tests can call `Scene.Mount.resolve(
|
|
404
|
+
* Scene tests can call `Scene.Mount.resolve(AnchorMenu, CompletedAnchorMenu())`
|
|
405
405
|
* to acknowledge the mount produced by the rendered panel. */
|
|
406
|
-
export const
|
|
407
|
-
/** The Mount this Menu renders to focus its first item on open. Exposed so
|
|
408
|
-
* Scene tests can call
|
|
409
|
-
* `Scene.Mount.resolve(MenuFocusItemsOnMount, CompletedFocusItemsOnMount())`. */
|
|
410
|
-
export const MenuFocusItemsOnMount = Mount.define('MenuFocusItemsOnMount', CompletedFocusItemsOnMount);
|
|
406
|
+
export const AnchorMenu = Mount.define('AnchorMenu', CompletedAnchorMenu);
|
|
411
407
|
/** The backdrop-portaling Mount this Menu renders. Exposed so Scene tests can
|
|
412
|
-
* call `Scene.Mount.resolve(
|
|
408
|
+
* call `Scene.Mount.resolve(PortalMenuBackdrop, CompletedPortalMenuBackdrop())` to
|
|
413
409
|
* acknowledge the mount produced by the rendered backdrop. */
|
|
414
|
-
export const
|
|
415
|
-
const
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
}
|
|
419
|
-
return {
|
|
420
|
-
message: CompletedFocusItemsOnMount(),
|
|
421
|
-
cleanup: Function.constVoid,
|
|
422
|
-
};
|
|
410
|
+
export const PortalMenuBackdrop = Mount.define('PortalMenuBackdrop', CompletedPortalMenuBackdrop);
|
|
411
|
+
const portalMenuBackdrop = PortalMenuBackdrop((element) => Effect.sync(() => {
|
|
412
|
+
const cleanup = portalToBody(element);
|
|
413
|
+
return { message: CompletedPortalMenuBackdrop(), cleanup };
|
|
423
414
|
}));
|
|
424
|
-
const portalBackdropOnMount = MenuBackdropPortal((element) => Effect.sync(() => ({
|
|
425
|
-
message: CompletedBackdropPortal(),
|
|
426
|
-
cleanup: portalToBody(element),
|
|
427
|
-
})));
|
|
428
415
|
/** Programmatically opens the menu, updating the model and returning
|
|
429
416
|
* focus and modal commands. Use this in domain-event handlers to open the menu. */
|
|
430
417
|
export const open = (model) => update(model, Opened({ maybeActiveItemIndex: Option.none() }));
|
|
@@ -537,16 +524,15 @@ export const view = (config) => {
|
|
|
537
524
|
const anchorAttributes = anchor
|
|
538
525
|
? [
|
|
539
526
|
Style({ position: 'absolute', margin: '0', visibility: 'hidden' }),
|
|
540
|
-
OnMount(Mount.mapMessage(
|
|
541
|
-
|
|
542
|
-
cleanup: anchorSetup({
|
|
527
|
+
OnMount(Mount.mapMessage(AnchorMenu((items) => Effect.sync(() => {
|
|
528
|
+
const cleanup = anchorSetup({
|
|
543
529
|
buttonId: `${id}-button`,
|
|
544
530
|
anchor,
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
}))
|
|
531
|
+
})(items);
|
|
532
|
+
return { message: CompletedAnchorMenu(), cleanup };
|
|
533
|
+
})), toParentMessage)),
|
|
548
534
|
]
|
|
549
|
-
: [
|
|
535
|
+
: [];
|
|
550
536
|
const itemsContainerAttributes = [
|
|
551
537
|
Id(`${id}-items`),
|
|
552
538
|
Role('menu'),
|
|
@@ -638,7 +624,7 @@ export const view = (config) => {
|
|
|
638
624
|
});
|
|
639
625
|
};
|
|
640
626
|
const backdrop = keyed('div')(`${id}-backdrop`, [
|
|
641
|
-
OnMount(Mount.mapMessage(
|
|
627
|
+
OnMount(Mount.mapMessage(portalMenuBackdrop, toParentMessage)),
|
|
642
628
|
...(isLeaving ? [] : [OnClick(toParentMessage(Closed()))]),
|
|
643
629
|
...(backdropClassName ? [Class(backdropClassName)] : []),
|
|
644
630
|
...backdropAttributes,
|
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,
|
|
1
|
+
export { init, update, open, close, selectItem, view, lazy, Model, Message, SelectedItem, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusItems, CompletedFocusButton, CompletedScrollIntoView, CompletedClickItem, CompletedAnchorMenu, CompletedPortalMenuBackdrop, AnchorMenu, PortalMenuBackdrop, ClearedSearch, GotAnimationMessage, LockScroll, UnlockScroll, InertOthers, RestoreInert, FocusItems, FocusButton, ScrollIntoView, ClickItem, DelayClearSearch, DetectMovementOrAnimationEnd, } from './index.js';
|
|
2
2
|
export type { ActivationTrigger, Opened, Closed, BlurredItems, ActivatedItem, DeactivatedItem, MovedPointerOverItem, RequestedItemClick, Searched, PressedPointerOnButton, ReleasedPointerOnItems, IgnoredMouseClick, SuppressedSpaceScroll, InitConfig, ViewConfig, ItemConfig, GroupHeading, } from './index.js';
|
|
3
3
|
export type { AnchorConfig } from '../anchor.js';
|
|
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,
|
|
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,mBAAmB,EACnB,2BAA2B,EAC3B,UAAU,EACV,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,YAAY,CAAA;AAEnB,YAAY,EACV,iBAAiB,EACjB,MAAM,EACN,MAAM,EACN,YAAY,EACZ,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,YAAY,CAAA;AAEnB,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,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,
|
|
1
|
+
export { init, update, open, close, selectItem, view, lazy, Model, Message, SelectedItem, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedFocusItems, CompletedFocusButton, CompletedScrollIntoView, CompletedClickItem, CompletedAnchorMenu, CompletedPortalMenuBackdrop, AnchorMenu, PortalMenuBackdrop, ClearedSearch, GotAnimationMessage, LockScroll, UnlockScroll, InertOthers, RestoreInert, FocusItems, FocusButton, ScrollIntoView, ClickItem, DelayClearSearch, DetectMovementOrAnimationEnd, } from './index.js';
|
|
@@ -46,9 +46,9 @@ export declare const IgnoredMouseClick: import("../../schema/index.js").Callable
|
|
|
46
46
|
/** Sent when a Space key-up is captured to prevent page scrolling. */
|
|
47
47
|
export declare const SuppressedSpaceScroll: import("../../schema/index.js").CallableTaggedStruct<"SuppressedSpaceScroll", {}>;
|
|
48
48
|
/** Sent when the popover panel mounts and Floating UI has positioned it. Update no-ops; the side effect is the act of positioning, surfaced for DevTools observability. */
|
|
49
|
-
export declare const
|
|
49
|
+
export declare const CompletedAnchorPopover: import("../../schema/index.js").CallableTaggedStruct<"CompletedAnchorPopover", {}>;
|
|
50
50
|
/** Sent when the popover backdrop mounts and is portaled to the document body. Update no-ops; surfaces the portal side effect for DevTools. */
|
|
51
|
-
export declare const
|
|
51
|
+
export declare const CompletedPortalPopoverBackdrop: import("../../schema/index.js").CallableTaggedStruct<"CompletedPortalPopoverBackdrop", {}>;
|
|
52
52
|
/** Wraps an Animation submodel message for delegation. */
|
|
53
53
|
export declare const GotAnimationMessage: import("../../schema/index.js").CallableTaggedStruct<"GotAnimationMessage", {
|
|
54
54
|
message: S.Union<[import("../../schema/index.js").CallableTaggedStruct<"Showed", {}>, import("../../schema/index.js").CallableTaggedStruct<"Hid", {}>, import("../../schema/index.js").CallableTaggedStruct<"AdvancedAnimationFrame", {}>, import("../../schema/index.js").CallableTaggedStruct<"EndedAnimation", {}>]>;
|
|
@@ -67,8 +67,8 @@ export declare const Message: S.Union<[
|
|
|
67
67
|
typeof CompletedTeardownInert,
|
|
68
68
|
typeof IgnoredMouseClick,
|
|
69
69
|
typeof SuppressedSpaceScroll,
|
|
70
|
-
typeof
|
|
71
|
-
typeof
|
|
70
|
+
typeof CompletedAnchorPopover,
|
|
71
|
+
typeof CompletedPortalPopoverBackdrop,
|
|
72
72
|
typeof GotAnimationMessage
|
|
73
73
|
]>;
|
|
74
74
|
export type Opened = typeof Opened.Type;
|
|
@@ -128,16 +128,16 @@ export declare const DetectMovementOrAnimationEnd: Command.CommandDefinition<"De
|
|
|
128
128
|
/** Processes a popover message and returns the next model and commands. */
|
|
129
129
|
export declare const update: (model: Model, message: Message) => UpdateReturn;
|
|
130
130
|
/** The anchor-positioning Mount this Popover renders on its panel. Exposed so
|
|
131
|
-
* Scene tests can call `Scene.Mount.resolve(
|
|
131
|
+
* Scene tests can call `Scene.Mount.resolve(AnchorPopover, CompletedAnchorPopover())`
|
|
132
132
|
* to acknowledge the mount produced by the rendered panel. */
|
|
133
|
-
export declare const
|
|
134
|
-
readonly _tag: "
|
|
133
|
+
export declare const AnchorPopover: Mount.MountDefinition<"AnchorPopover", {
|
|
134
|
+
readonly _tag: "CompletedAnchorPopover";
|
|
135
135
|
}>;
|
|
136
136
|
/** The backdrop-portaling Mount this Popover renders. Exposed so Scene tests can
|
|
137
|
-
* call `Scene.Mount.resolve(
|
|
137
|
+
* call `Scene.Mount.resolve(PortalPopoverBackdrop, CompletedPortalPopoverBackdrop())` to
|
|
138
138
|
* acknowledge the mount produced by the rendered backdrop. */
|
|
139
|
-
export declare const
|
|
140
|
-
readonly _tag: "
|
|
139
|
+
export declare const PortalPopoverBackdrop: Mount.MountDefinition<"PortalPopoverBackdrop", {
|
|
140
|
+
readonly _tag: "CompletedPortalPopoverBackdrop";
|
|
141
141
|
}>;
|
|
142
142
|
/** Programmatically opens the popover, updating the model and returning
|
|
143
143
|
* focus and modal commands. Use this in domain-event handlers when the popover uses `onOpened`. */
|
|
@@ -148,7 +148,7 @@ export declare const close: (model: Model) => readonly [Model, ReadonlyArray<Com
|
|
|
148
148
|
/** Configuration for rendering a popover with `view`. */
|
|
149
149
|
export type ViewConfig<ParentMessage> = Readonly<{
|
|
150
150
|
model: Model;
|
|
151
|
-
toParentMessage: (message: Opened | Closed | BlurredPanel | PressedPointerOnButton | IgnoredMouseClick | SuppressedSpaceScroll | typeof
|
|
151
|
+
toParentMessage: (message: Opened | Closed | BlurredPanel | PressedPointerOnButton | IgnoredMouseClick | SuppressedSpaceScroll | typeof CompletedAnchorPopover.Type | typeof CompletedPortalPopoverBackdrop.Type) => ParentMessage;
|
|
152
152
|
onOpened?: () => ParentMessage;
|
|
153
153
|
onClosed?: () => ParentMessage;
|
|
154
154
|
anchor: AnchorConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/popover/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE9E,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AAEjD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,IAAI,EAIV,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAA;AAI7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAiBhD,qGAAqG;AACrG,eAAO,MAAM,KAAK;;;;;;;;;;;;EAQhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,2EAA2E;AAC3E,eAAO,MAAM,MAAM,oEAAc,CAAA;AACjC,kGAAkG;AAClG,eAAO,MAAM,MAAM,oEAAc,CAAA;AACjC,oFAAoF;AACpF,eAAO,MAAM,YAAY,0EAAoB,CAAA;AAC7C,qHAAqH;AACrH,eAAO,MAAM,sBAAsB;;;EAGjC,CAAA;AACF,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,kEAAkE;AAClE,eAAO,MAAM,oBAAoB,kFAA4B,CAAA;AAC7D,mDAAmD;AACnD,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,mFAA6B,CAAA;AAC/D,oDAAoD;AACpD,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,qDAAqD;AACrD,eAAO,MAAM,sBAAsB,oFAA8B,CAAA;AACjE,wGAAwG;AACxG,eAAO,MAAM,iBAAiB,+EAAyB,CAAA;AACvD,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,mFAA6B,CAAA;AAC/D,2KAA2K;AAC3K,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/popover/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/popover/index.js
CHANGED
|
@@ -52,9 +52,9 @@ export const IgnoredMouseClick = m('IgnoredMouseClick');
|
|
|
52
52
|
/** Sent when a Space key-up is captured to prevent page scrolling. */
|
|
53
53
|
export const SuppressedSpaceScroll = m('SuppressedSpaceScroll');
|
|
54
54
|
/** Sent when the popover panel mounts and Floating UI has positioned it. Update no-ops; the side effect is the act of positioning, surfaced for DevTools observability. */
|
|
55
|
-
export const
|
|
55
|
+
export const CompletedAnchorPopover = m('CompletedAnchorPopover');
|
|
56
56
|
/** Sent when the popover backdrop mounts and is portaled to the document body. Update no-ops; surfaces the portal side effect for DevTools. */
|
|
57
|
-
export const
|
|
57
|
+
export const CompletedPortalPopoverBackdrop = m('CompletedPortalPopoverBackdrop');
|
|
58
58
|
/** Wraps an Animation submodel message for delegation. */
|
|
59
59
|
export const GotAnimationMessage = m('GotAnimationMessage', {
|
|
60
60
|
message: AnimationMessage,
|
|
@@ -73,8 +73,8 @@ export const Message = S.Union([
|
|
|
73
73
|
CompletedTeardownInert,
|
|
74
74
|
IgnoredMouseClick,
|
|
75
75
|
SuppressedSpaceScroll,
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
CompletedAnchorPopover,
|
|
77
|
+
CompletedPortalPopoverBackdrop,
|
|
78
78
|
GotAnimationMessage,
|
|
79
79
|
]);
|
|
80
80
|
// INIT
|
|
@@ -208,22 +208,22 @@ export const update = (model, message) => {
|
|
|
208
208
|
[],
|
|
209
209
|
],
|
|
210
210
|
SuppressedSpaceScroll: () => [model, []],
|
|
211
|
-
|
|
212
|
-
|
|
211
|
+
CompletedAnchorPopover: () => [model, []],
|
|
212
|
+
CompletedPortalPopoverBackdrop: () => [model, []],
|
|
213
213
|
}));
|
|
214
214
|
};
|
|
215
215
|
/** The anchor-positioning Mount this Popover renders on its panel. Exposed so
|
|
216
|
-
* Scene tests can call `Scene.Mount.resolve(
|
|
216
|
+
* Scene tests can call `Scene.Mount.resolve(AnchorPopover, CompletedAnchorPopover())`
|
|
217
217
|
* to acknowledge the mount produced by the rendered panel. */
|
|
218
|
-
export const
|
|
218
|
+
export const AnchorPopover = Mount.define('AnchorPopover', CompletedAnchorPopover);
|
|
219
219
|
/** The backdrop-portaling Mount this Popover renders. Exposed so Scene tests can
|
|
220
|
-
* call `Scene.Mount.resolve(
|
|
220
|
+
* call `Scene.Mount.resolve(PortalPopoverBackdrop, CompletedPortalPopoverBackdrop())` to
|
|
221
221
|
* acknowledge the mount produced by the rendered backdrop. */
|
|
222
|
-
export const
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
}))
|
|
222
|
+
export const PortalPopoverBackdrop = Mount.define('PortalPopoverBackdrop', CompletedPortalPopoverBackdrop);
|
|
223
|
+
const portalPopoverBackdrop = PortalPopoverBackdrop((element) => Effect.sync(() => {
|
|
224
|
+
const cleanup = portalToBody(element);
|
|
225
|
+
return { message: CompletedPortalPopoverBackdrop(), cleanup };
|
|
226
|
+
}));
|
|
227
227
|
/** Programmatically opens the popover, updating the model and returning
|
|
228
228
|
* focus and modal commands. Use this in domain-event handlers when the popover uses `onOpened`. */
|
|
229
229
|
export const open = (model) => update(model, Opened());
|
|
@@ -294,19 +294,19 @@ export const view = (config) => {
|
|
|
294
294
|
...(buttonClassName ? [Class(buttonClassName)] : []),
|
|
295
295
|
...buttonAttributes,
|
|
296
296
|
];
|
|
297
|
-
const
|
|
298
|
-
|
|
299
|
-
cleanup: anchorSetup({
|
|
297
|
+
const anchorPopover = Mount.mapMessage(AnchorPopover((items) => Effect.sync(() => {
|
|
298
|
+
const cleanup = anchorSetup({
|
|
300
299
|
buttonId: `${id}-button`,
|
|
301
300
|
anchor,
|
|
302
301
|
interceptTab: false,
|
|
303
302
|
focusAfterPosition: true,
|
|
304
303
|
...(focusSelector !== undefined && { focusSelector }),
|
|
305
|
-
})(items)
|
|
306
|
-
|
|
304
|
+
})(items);
|
|
305
|
+
return { message: CompletedAnchorPopover(), cleanup };
|
|
306
|
+
})), toParentMessage);
|
|
307
307
|
const anchorAttributes = [
|
|
308
308
|
Style({ position: 'absolute', margin: '0', visibility: 'hidden' }),
|
|
309
|
-
OnMount(
|
|
309
|
+
OnMount(anchorPopover),
|
|
310
310
|
];
|
|
311
311
|
const resolvedPanelAttributes = [
|
|
312
312
|
Id(`${id}-panel`),
|
|
@@ -323,7 +323,7 @@ export const view = (config) => {
|
|
|
323
323
|
...panelAttributes,
|
|
324
324
|
];
|
|
325
325
|
const backdrop = keyed('div')(`${id}-backdrop`, [
|
|
326
|
-
OnMount(Mount.mapMessage(
|
|
326
|
+
OnMount(Mount.mapMessage(portalPopoverBackdrop, toParentMessage)),
|
|
327
327
|
...(isLeaving ? [] : [OnClick(dispatchClosed())]),
|
|
328
328
|
...(backdropClassName ? [Class(backdropClassName)] : []),
|
|
329
329
|
...backdropAttributes,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { init, update, open, close, view, lazy, Model, Message, Opened, Closed, CompletedFocusPanel, CompletedFocusButton, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert,
|
|
1
|
+
export { init, update, open, close, view, lazy, Model, Message, Opened, Closed, CompletedFocusPanel, CompletedFocusButton, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedAnchorPopover, CompletedPortalPopoverBackdrop, AnchorPopover, PortalPopoverBackdrop, GotAnimationMessage, LockScroll, UnlockScroll, InertOthers, RestoreInert, FocusPanel, FocusButton, DetectMovementOrAnimationEnd, } from './index.js';
|
|
2
2
|
export type { BlurredPanel, PressedPointerOnButton, IgnoredMouseClick, SuppressedSpaceScroll, InitConfig, ViewConfig, } from './index.js';
|
|
3
3
|
export type { AnchorConfig } from '../anchor.js';
|
|
4
4
|
//# sourceMappingURL=public.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/ui/popover/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/ui/popover/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,4BAA4B,GAC7B,MAAM,YAAY,CAAA;AAEnB,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,UAAU,EACV,UAAU,GACX,MAAM,YAAY,CAAA;AAEnB,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { init, update, open, close, view, lazy, Model, Message, Opened, Closed, CompletedFocusPanel, CompletedFocusButton, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert,
|
|
1
|
+
export { init, update, open, close, view, lazy, Model, Message, Opened, Closed, CompletedFocusPanel, CompletedFocusButton, CompletedLockScroll, CompletedUnlockScroll, CompletedSetupInert, CompletedTeardownInert, CompletedAnchorPopover, CompletedPortalPopoverBackdrop, AnchorPopover, PortalPopoverBackdrop, GotAnimationMessage, LockScroll, UnlockScroll, InertOthers, RestoreInert, FocusPanel, FocusButton, DetectMovementOrAnimationEnd, } from './index.js';
|