foldkit 0.88.1 → 0.90.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/command/index.d.ts.map +1 -1
- package/dist/command/index.js +3 -11
- package/dist/devTools/overlay.d.ts +3 -3
- package/dist/devTools/overlay.d.ts.map +1 -1
- package/dist/devTools/overlay.js +62 -24
- package/dist/devTools/protocol.d.ts +77 -19
- package/dist/devTools/protocol.d.ts.map +1 -1
- package/dist/devTools/protocol.js +10 -5
- package/dist/devTools/serialize.d.ts +8 -2
- package/dist/devTools/serialize.d.ts.map +1 -1
- package/dist/devTools/serialize.js +11 -2
- package/dist/devTools/store.d.ts +9 -5
- package/dist/devTools/store.d.ts.map +1 -1
- package/dist/devTools/store.js +13 -13
- package/dist/devTools/webSocketBridge.d.ts.map +1 -1
- package/dist/devTools/webSocketBridge.js +2 -2
- package/dist/html/index.d.ts +12 -0
- package/dist/html/index.d.ts.map +1 -1
- package/dist/html/index.js +20 -4
- package/dist/mount/index.d.ts +64 -21
- package/dist/mount/index.d.ts.map +1 -1
- package/dist/mount/index.js +43 -32
- package/dist/mount/public.d.ts +1 -1
- package/dist/mount/public.d.ts.map +1 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +4 -4
- package/dist/test/apps/counter.d.ts +5 -1
- package/dist/test/apps/counter.d.ts.map +1 -1
- package/dist/test/apps/counter.js +34 -5
- package/dist/test/apps/mountPanel.d.ts +19 -3
- package/dist/test/apps/mountPanel.d.ts.map +1 -1
- package/dist/test/apps/mountPanel.js +36 -15
- package/dist/test/internal.d.ts +56 -26
- package/dist/test/internal.d.ts.map +1 -1
- package/dist/test/internal.js +75 -82
- package/dist/test/scene.d.ts +12 -8
- package/dist/test/scene.d.ts.map +1 -1
- package/dist/test/scene.js +56 -39
- package/dist/test/story.d.ts +5 -1
- package/dist/test/story.d.ts.map +1 -1
- package/dist/test/story.js +16 -4
- package/dist/ui/anchor.d.ts +12 -8
- package/dist/ui/anchor.d.ts.map +1 -1
- package/dist/ui/anchor.js +41 -16
- package/dist/ui/combobox/multi.d.ts +1 -7
- package/dist/ui/combobox/multi.d.ts.map +1 -1
- package/dist/ui/combobox/shared.d.ts +14 -5
- package/dist/ui/combobox/shared.d.ts.map +1 -1
- package/dist/ui/combobox/shared.js +40 -40
- package/dist/ui/combobox/single.d.ts +1 -7
- package/dist/ui/combobox/single.d.ts.map +1 -1
- package/dist/ui/listbox/multi.d.ts +1 -7
- package/dist/ui/listbox/multi.d.ts.map +1 -1
- package/dist/ui/listbox/shared.d.ts +12 -3
- package/dist/ui/listbox/shared.d.ts.map +1 -1
- package/dist/ui/listbox/shared.js +8 -12
- package/dist/ui/listbox/single.d.ts +1 -7
- package/dist/ui/listbox/single.d.ts.map +1 -1
- package/dist/ui/menu/index.d.ts +12 -3
- package/dist/ui/menu/index.d.ts.map +1 -1
- package/dist/ui/menu/index.js +8 -12
- package/dist/ui/popover/index.d.ts +13 -3
- package/dist/ui/popover/index.d.ts.map +1 -1
- package/dist/ui/popover/index.js +22 -15
- package/dist/ui/tooltip/index.d.ts +11 -2
- package/dist/ui/tooltip/index.d.ts.map +1 -1
- package/dist/ui/tooltip/index.js +10 -10
- package/package.json +1 -1
package/dist/test/story.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Array, Option, Predicate, pipe } from 'effect';
|
|
1
|
+
import { Array, Equal, Option, Predicate, pipe } from 'effect';
|
|
2
2
|
import { assertAllCommandsResolved, assertExactCommands, assertHasCommands, assertNoUnresolvedCommands, assertZeroCommands, formatCommand, formatMatcher, resolveAllInternal, resolveByMatcher, } from './internal.js';
|
|
3
3
|
const toInternal = (simulation) =>
|
|
4
4
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
@@ -57,7 +57,15 @@ const resolveCommand = (matcher, resultMessage, toParentMessage) => (simulation)
|
|
|
57
57
|
return next;
|
|
58
58
|
/* eslint-enable @typescript-eslint/consistent-type-assertions */
|
|
59
59
|
};
|
|
60
|
-
/** Resolves
|
|
60
|
+
/** Resolves listed Commands with their result Messages, cascading through any
|
|
61
|
+
* Commands the result produces. Each entry is consumed by exactly one
|
|
62
|
+
* matching dispatch in declaration order, so
|
|
63
|
+
* `[Def, m1], [Def, m2], [Def, m3]` reads as a sequence of three responses.
|
|
64
|
+
* For N identical responses, compose with
|
|
65
|
+
* `Array.makeBy(n, () => [Def, message])`. Resolvers carry across
|
|
66
|
+
* `resolveAll` calls: unused entries can match later dispatches, and a new
|
|
67
|
+
* entry replaces any leftover resolvers sharing its Definition or Instance
|
|
68
|
+
* shape (latest wins). */
|
|
61
69
|
const resolveAllCommands = (...resolvers) => (simulation) =>
|
|
62
70
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
63
71
|
resolveAllInternal(toInternal(simulation), resolvers);
|
|
@@ -90,7 +98,11 @@ const expectNoCommandsStep = () => (simulation) => {
|
|
|
90
98
|
export const Command = {
|
|
91
99
|
/** Resolves a specific pending Command with the given result Message. */
|
|
92
100
|
resolve: resolveCommand,
|
|
93
|
-
/** Resolves
|
|
101
|
+
/** Resolves listed Commands with their result Messages, cascading through any
|
|
102
|
+
* Commands the result produces. Each entry resolves exactly one matching
|
|
103
|
+
* dispatch in declaration order; compose with `Array.makeBy` for N
|
|
104
|
+
* identical responses. Resolvers carry across calls; a new entry replaces
|
|
105
|
+
* any leftovers sharing its Definition or Instance shape (latest wins). */
|
|
94
106
|
resolveAll: resolveAllCommands,
|
|
95
107
|
/** Asserts that every given Command is among the pending Commands. */
|
|
96
108
|
expectHas: expectHasCommandsStep,
|
|
@@ -105,7 +117,7 @@ export const expectOutMessage = (expected) => (simulation) => {
|
|
|
105
117
|
const outMessage = internal.outMessage;
|
|
106
118
|
if (!Option.isOption(outMessage) ||
|
|
107
119
|
Option.isNone(outMessage) ||
|
|
108
|
-
|
|
120
|
+
!Equal.equals(outMessage.value, expected)) {
|
|
109
121
|
throw new Error(`Expected OutMessage:\n\n Some(${JSON.stringify(expected)})\n\nBut got:\n\n ${JSON.stringify(outMessage)}`);
|
|
110
122
|
}
|
|
111
123
|
return simulation;
|
package/dist/ui/anchor.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Schema as S } from 'effect';
|
|
2
|
+
/** Schema mirroring `@floating-ui/dom`'s `Placement` literal union: a side
|
|
3
|
+
* (`top`/`right`/`bottom`/`left`) optionally suffixed with `-start` or `-end`. */
|
|
4
|
+
export declare const Placement: S.Literals<readonly ["top", "right", "bottom", "left", "top-start", "top-end", "right-start", "right-end", "bottom-start", "bottom-end", "left-start", "left-end"]>;
|
|
2
5
|
/** Static configuration for anchor-based positioning of a floating element relative to a button. */
|
|
3
|
-
export
|
|
4
|
-
placement
|
|
5
|
-
gap
|
|
6
|
-
offset
|
|
7
|
-
padding
|
|
8
|
-
portal
|
|
6
|
+
export declare const AnchorConfig: S.Struct<{
|
|
7
|
+
readonly placement: S.optional<S.Literals<readonly ["top", "right", "bottom", "left", "top-start", "top-end", "right-start", "right-end", "bottom-start", "bottom-end", "left-start", "left-end"]>>;
|
|
8
|
+
readonly gap: S.optional<S.Number>;
|
|
9
|
+
readonly offset: S.optional<S.Number>;
|
|
10
|
+
readonly padding: S.optional<S.Number>;
|
|
11
|
+
readonly portal: S.optional<S.Boolean>;
|
|
9
12
|
}>;
|
|
13
|
+
export type AnchorConfig = typeof AnchorConfig.Type;
|
|
10
14
|
/** Relocates an element into the shared `foldkit-portal-root` div appended to
|
|
11
15
|
* `document.body`, escaping any ancestor stacking context. Returns a cleanup
|
|
12
16
|
* function that removes the element from the portal root. Designed to be
|
|
@@ -30,5 +34,5 @@ export declare const anchorSetup: (config: {
|
|
|
30
34
|
interceptTab?: boolean;
|
|
31
35
|
focusAfterPosition?: boolean;
|
|
32
36
|
focusSelector?: string;
|
|
33
|
-
}) => (
|
|
37
|
+
}) => (element: Element) => (() => void);
|
|
34
38
|
//# sourceMappingURL=anchor.d.ts.map
|
package/dist/ui/anchor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchor.d.ts","sourceRoot":"","sources":["../../src/ui/anchor.ts"],"names":[],"mappings":"AAQA,OAAO,
|
|
1
|
+
{"version":3,"file":"anchor.d.ts","sourceRoot":"","sources":["../../src/ui/anchor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAY,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE9C;mFACmF;AACnF,eAAO,MAAM,SAAS,qKAapB,CAAA;AAEF,oGAAoG;AACpG,eAAO,MAAM,YAAY;;;;;;EAMvB,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAwBnD;;;;4EAI4E;AAC5E,eAAO,MAAM,YAAY,GAAI,SAAS,OAAO,KAAG,CAAC,MAAM,IAAI,CAW1D,CAAA;AAED;;;;;;;;;;2DAU2D;AAC3D,eAAO,MAAM,WAAW,GACrB,QAAQ;IACP,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,YAAY,CAAA;IACpB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,MACA,SAAS,OAAO,KAAG,CAAC,MAAM,IAAI,CAiF9B,CAAA"}
|
package/dist/ui/anchor.js
CHANGED
|
@@ -1,4 +1,29 @@
|
|
|
1
1
|
import { autoUpdate, computePosition, flip, offset as floatingOffset, shift, size, } from '@floating-ui/dom';
|
|
2
|
+
import { Function, Schema as S } from 'effect';
|
|
3
|
+
/** Schema mirroring `@floating-ui/dom`'s `Placement` literal union: a side
|
|
4
|
+
* (`top`/`right`/`bottom`/`left`) optionally suffixed with `-start` or `-end`. */
|
|
5
|
+
export const Placement = S.Literals([
|
|
6
|
+
'top',
|
|
7
|
+
'right',
|
|
8
|
+
'bottom',
|
|
9
|
+
'left',
|
|
10
|
+
'top-start',
|
|
11
|
+
'top-end',
|
|
12
|
+
'right-start',
|
|
13
|
+
'right-end',
|
|
14
|
+
'bottom-start',
|
|
15
|
+
'bottom-end',
|
|
16
|
+
'left-start',
|
|
17
|
+
'left-end',
|
|
18
|
+
]);
|
|
19
|
+
/** Static configuration for anchor-based positioning of a floating element relative to a button. */
|
|
20
|
+
export const AnchorConfig = S.Struct({
|
|
21
|
+
placement: S.optional(Placement),
|
|
22
|
+
gap: S.optional(S.Number),
|
|
23
|
+
offset: S.optional(S.Number),
|
|
24
|
+
padding: S.optional(S.Number),
|
|
25
|
+
portal: S.optional(S.Boolean),
|
|
26
|
+
});
|
|
2
27
|
const PORTAL_ROOT_ID = 'foldkit-portal-root';
|
|
3
28
|
const getOrCreatePortalRoot = () => {
|
|
4
29
|
const existing = document.getElementById(PORTAL_ROOT_ID);
|
|
@@ -45,18 +70,18 @@ export const portalToBody = (element) => {
|
|
|
45
70
|
* requestAnimationFrame so the element is painted before focus fires.
|
|
46
71
|
* `focusSelector` optionally targets a descendant (e.g. a calendar grid
|
|
47
72
|
* inside a popover panel) instead of the panel itself. */
|
|
48
|
-
export const anchorSetup = (config) => (
|
|
73
|
+
export const anchorSetup = (config) => (element) => {
|
|
49
74
|
const button = document.getElementById(config.buttonId);
|
|
50
|
-
if (!(button instanceof HTMLElement) || !(
|
|
51
|
-
return
|
|
75
|
+
if (!(button instanceof HTMLElement) || !(element instanceof HTMLElement)) {
|
|
76
|
+
return Function.constVoid;
|
|
52
77
|
}
|
|
53
78
|
const isPortal = config.anchor.portal ?? true;
|
|
54
|
-
const portalCleanup = isPortal ? portalToBody(
|
|
79
|
+
const portalCleanup = isPortal ? portalToBody(element) : undefined;
|
|
55
80
|
const { placement, gap, offset: crossAxis, padding } = config.anchor;
|
|
56
81
|
const shouldInterceptTab = config.interceptTab ?? true;
|
|
57
82
|
let isFirstUpdate = true;
|
|
58
|
-
const floatingCleanup = autoUpdate(button,
|
|
59
|
-
computePosition(button,
|
|
83
|
+
const floatingCleanup = autoUpdate(button, element, () => {
|
|
84
|
+
computePosition(button, element, {
|
|
60
85
|
placement: placement ?? 'bottom-start',
|
|
61
86
|
strategy: 'absolute',
|
|
62
87
|
middleware: [
|
|
@@ -69,24 +94,24 @@ export const anchorSetup = (config) => (items) => {
|
|
|
69
94
|
size({
|
|
70
95
|
padding: padding ?? 0,
|
|
71
96
|
apply({ rects, availableHeight }) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
97
|
+
element.style.setProperty('--button-width', `${rects.reference.width}px`);
|
|
98
|
+
element.style.maxHeight = `${availableHeight}px`;
|
|
99
|
+
element.style.overflowY = 'auto';
|
|
100
|
+
element.style.overscrollBehavior = 'none';
|
|
76
101
|
},
|
|
77
102
|
}),
|
|
78
103
|
],
|
|
79
104
|
}).then(({ x, y }) => {
|
|
80
|
-
|
|
81
|
-
|
|
105
|
+
element.style.left = `${x}px`;
|
|
106
|
+
element.style.top = `${y}px`;
|
|
82
107
|
if (isFirstUpdate) {
|
|
83
108
|
isFirstUpdate = false;
|
|
84
|
-
|
|
109
|
+
element.style.visibility = '';
|
|
85
110
|
if (config.focusAfterPosition ?? false) {
|
|
86
111
|
requestAnimationFrame(() => {
|
|
87
112
|
const target = config.focusSelector
|
|
88
113
|
? document.querySelector(config.focusSelector)
|
|
89
|
-
:
|
|
114
|
+
: element;
|
|
90
115
|
if (target instanceof HTMLElement) {
|
|
91
116
|
target.focus();
|
|
92
117
|
}
|
|
@@ -101,10 +126,10 @@ export const anchorSetup = (config) => (items) => {
|
|
|
101
126
|
button.focus();
|
|
102
127
|
}
|
|
103
128
|
};
|
|
104
|
-
|
|
129
|
+
element.addEventListener('keydown', handleTabKey);
|
|
105
130
|
return () => {
|
|
106
131
|
floatingCleanup();
|
|
107
|
-
|
|
132
|
+
element.removeEventListener('keydown', handleTabKey);
|
|
108
133
|
portalCleanup?.();
|
|
109
134
|
};
|
|
110
135
|
}
|
|
@@ -232,13 +232,7 @@ export declare const view: <ParentMessage, Item extends string>(config: Readonly
|
|
|
232
232
|
groupAttributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
|
|
233
233
|
separatorClassName?: string;
|
|
234
234
|
separatorAttributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
|
|
235
|
-
anchor?:
|
|
236
|
-
placement?: import("@floating-ui/dom").Placement;
|
|
237
|
-
gap?: number;
|
|
238
|
-
offset?: number;
|
|
239
|
-
padding?: number;
|
|
240
|
-
portal?: boolean;
|
|
241
|
-
}>;
|
|
235
|
+
anchor?: import("./public.js").AnchorConfig;
|
|
242
236
|
}>) => Html;
|
|
243
237
|
/** Creates a memoized multi-select combobox view. Static config is captured in a closure;
|
|
244
238
|
* only `model` and `toParentMessage` are compared per render via `createLazy`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi.d.ts","sourceRoot":"","sources":["../../../src/ui/combobox/multi.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,EAKb,MAAM,aAAa,CAAA;AAIpB,yIAAyI;AACzI,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,8RAA8R;AAC9R,MAAM,MAAM,UAAU,GAAG,cAAc,GACrC,QAAQ,CAAC;IACP,aAAa,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACtC,CAAC,CAAA;AAEJ,2IAA2I;AAC3I,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAcF,yJAAyJ;AACzJ,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwBjB,CAAA;AAEF;wFACwF;AACxF,eAAO,MAAM,IAAI,GACf,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACK,CAAA;AAEhE;yFACyF;AACzF,eAAO,MAAM,KAAK,GAChB,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAClC,CAAA;AAEzB,gJAAgJ;AAChJ,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,MAAM,MAAM,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACD,CAAA;AAI1D,uEAAuE;AACvE,MAAM,MAAM,UAAU,CAAC,aAAa,EAAE,IAAI,SAAS,MAAM,IAAI,cAAc,CACzE,aAAa,EACb,IAAI,EACJ,KAAK,CACN,CAAA;AAED,yIAAyI;AACzI,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"multi.d.ts","sourceRoot":"","sources":["../../../src/ui/combobox/multi.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,EAKb,MAAM,aAAa,CAAA;AAIpB,yIAAyI;AACzI,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,8RAA8R;AAC9R,MAAM,MAAM,UAAU,GAAG,cAAc,GACrC,QAAQ,CAAC;IACP,aAAa,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACtC,CAAC,CAAA;AAEJ,2IAA2I;AAC3I,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAcF,yJAAyJ;AACzJ,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwBjB,CAAA;AAEF;wFACwF;AACxF,eAAO,MAAM,IAAI,GACf,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACK,CAAA;AAEhE;yFACyF;AACzF,eAAO,MAAM,KAAK,GAChB,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAClC,CAAA;AAEzB,gJAAgJ;AAChJ,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,MAAM,MAAM,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACD,CAAA;AAI1D,uEAAuE;AACvE,MAAM,MAAM,UAAU,CAAC,aAAa,EAAE,IAAI,SAAS,MAAM,IAAI,cAAc,CACzE,aAAa,EACb,IAAI,EACJ,KAAK,CACN,CAAA;AAED,yIAAyI;AACzI,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAIf,CAAA;AAEF;mFACmF;AACnF,eAAO,MAAM,IAAI,GAAI,aAAa,EAAE,IAAI,SAAS,MAAM,EACrD,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"}
|
|
@@ -2,7 +2,7 @@ import { Effect, Option, Schema as S } from 'effect';
|
|
|
2
2
|
import * as Command from '../../command/index.js';
|
|
3
3
|
import { type Attribute, type Html } from '../../html/index.js';
|
|
4
4
|
import * as Mount from '../../mount/index.js';
|
|
5
|
-
import
|
|
5
|
+
import { AnchorConfig } from '../anchor.js';
|
|
6
6
|
import { groupContiguous } from '../group.js';
|
|
7
7
|
export { groupContiguous };
|
|
8
8
|
/** Schema for the activation trigger — whether the user interacted via mouse or keyboard. */
|
|
@@ -299,26 +299,35 @@ export declare const makeUpdate: <Model extends BaseModel>(handlers: Readonly<{
|
|
|
299
299
|
/** The anchor-positioning Mount this Combobox renders when an anchor is
|
|
300
300
|
* configured. Exposed so Scene tests can call
|
|
301
301
|
* `Scene.Mount.resolve(AnchorCombobox, CompletedAnchorCombobox())`. */
|
|
302
|
-
export declare const AnchorCombobox: Mount.
|
|
302
|
+
export declare const AnchorCombobox: Mount.MountDefinitionWithArgs<"AnchorCombobox", {
|
|
303
|
+
buttonId: S.String;
|
|
304
|
+
anchor: S.Struct<{
|
|
305
|
+
readonly placement: S.optional<S.Literals<readonly ["top", "right", "bottom", "left", "top-start", "top-end", "right-start", "right-end", "bottom-start", "bottom-end", "left-start", "left-end"]>>;
|
|
306
|
+
readonly gap: S.optional<S.Number>;
|
|
307
|
+
readonly offset: S.optional<S.Number>;
|
|
308
|
+
readonly padding: S.optional<S.Number>;
|
|
309
|
+
readonly portal: S.optional<S.Boolean>;
|
|
310
|
+
}>;
|
|
311
|
+
}, {
|
|
303
312
|
readonly _tag: "CompletedAnchorCombobox";
|
|
304
313
|
}>;
|
|
305
314
|
/** The Mount this Combobox renders to install a `pointerdown`-cancelling
|
|
306
315
|
* capture listener that prevents blur on item presses. Exposed so Scene
|
|
307
316
|
* tests can call
|
|
308
317
|
* `Scene.Mount.resolve(AttachComboboxPreventBlur, CompletedAttachComboboxPreventBlur())`. */
|
|
309
|
-
export declare const AttachComboboxPreventBlur: Mount.
|
|
318
|
+
export declare const AttachComboboxPreventBlur: Mount.MountDefinitionNoArgs<"AttachComboboxPreventBlur", {
|
|
310
319
|
readonly _tag: "CompletedAttachComboboxPreventBlur";
|
|
311
320
|
}>;
|
|
312
321
|
/** The Mount this Combobox renders to install the input's select-on-focus
|
|
313
322
|
* behavior. Exposed so Scene tests can call
|
|
314
323
|
* `Scene.Mount.resolve(AttachComboboxSelectOnFocus, CompletedAttachComboboxSelectOnFocus())`. */
|
|
315
|
-
export declare const AttachComboboxSelectOnFocus: Mount.
|
|
324
|
+
export declare const AttachComboboxSelectOnFocus: Mount.MountDefinitionNoArgs<"AttachComboboxSelectOnFocus", {
|
|
316
325
|
readonly _tag: "CompletedAttachComboboxSelectOnFocus";
|
|
317
326
|
}>;
|
|
318
327
|
/** The backdrop-portaling Mount this Combobox renders. Exposed so Scene tests can
|
|
319
328
|
* call `Scene.Mount.resolve(PortalComboboxBackdrop, CompletedPortalComboboxBackdrop())` to
|
|
320
329
|
* acknowledge the mount produced by the rendered backdrop. */
|
|
321
|
-
export declare const PortalComboboxBackdrop: Mount.
|
|
330
|
+
export declare const PortalComboboxBackdrop: Mount.MountDefinitionNoArgs<"PortalComboboxBackdrop", {
|
|
322
331
|
readonly _tag: "CompletedPortalComboboxBackdrop";
|
|
323
332
|
}>;
|
|
324
333
|
/** Configuration for an individual combobox item's appearance. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/ui/combobox/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EAEN,MAAM,EAGN,MAAM,IAAI,CAAC,EAEZ,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AAGjD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,IAAI,EAGV,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/ui/combobox/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { html, } from '../../html/index.js';
|
|
|
6
6
|
import { m } from '../../message/index.js';
|
|
7
7
|
import * as Mount from '../../mount/index.js';
|
|
8
8
|
import { makeConstrainedEvo } from '../../struct/index.js';
|
|
9
|
-
import { anchorSetup, portalToBody } from '../anchor.js';
|
|
9
|
+
import { AnchorConfig, anchorSetup, portalToBody } from '../anchor.js';
|
|
10
10
|
// NOTE: Animation imports are split across schema + update to avoid a circular
|
|
11
11
|
// dependency: animation → html → runtime → devtools → combobox → animation.
|
|
12
12
|
// The barrel (../animation) imports from html, which starts the cycle.
|
|
@@ -330,21 +330,31 @@ export const makeUpdate = (handlers) => {
|
|
|
330
330
|
/** The anchor-positioning Mount this Combobox renders when an anchor is
|
|
331
331
|
* configured. Exposed so Scene tests can call
|
|
332
332
|
* `Scene.Mount.resolve(AnchorCombobox, CompletedAnchorCombobox())`. */
|
|
333
|
-
export const AnchorCombobox = Mount.define('AnchorCombobox', CompletedAnchorCombobox)
|
|
333
|
+
export const AnchorCombobox = Mount.define('AnchorCombobox', { buttonId: S.String, anchor: AnchorConfig }, CompletedAnchorCombobox)(({ buttonId, anchor }) => (element) => Effect.sync(() => {
|
|
334
|
+
const preventBlur = (event) => {
|
|
335
|
+
event.preventDefault();
|
|
336
|
+
};
|
|
337
|
+
element.addEventListener('pointerdown', preventBlur, { capture: true });
|
|
338
|
+
const teardownAnchor = anchorSetup({
|
|
339
|
+
buttonId,
|
|
340
|
+
anchor,
|
|
341
|
+
interceptTab: false,
|
|
342
|
+
})(element);
|
|
343
|
+
return {
|
|
344
|
+
message: CompletedAnchorCombobox(),
|
|
345
|
+
cleanup: () => {
|
|
346
|
+
element.removeEventListener('pointerdown', preventBlur, {
|
|
347
|
+
capture: true,
|
|
348
|
+
});
|
|
349
|
+
teardownAnchor();
|
|
350
|
+
},
|
|
351
|
+
};
|
|
352
|
+
}));
|
|
334
353
|
/** The Mount this Combobox renders to install a `pointerdown`-cancelling
|
|
335
354
|
* capture listener that prevents blur on item presses. Exposed so Scene
|
|
336
355
|
* tests can call
|
|
337
356
|
* `Scene.Mount.resolve(AttachComboboxPreventBlur, CompletedAttachComboboxPreventBlur())`. */
|
|
338
|
-
export const AttachComboboxPreventBlur = Mount.define('AttachComboboxPreventBlur', CompletedAttachComboboxPreventBlur)
|
|
339
|
-
/** The Mount this Combobox renders to install the input's select-on-focus
|
|
340
|
-
* behavior. Exposed so Scene tests can call
|
|
341
|
-
* `Scene.Mount.resolve(AttachComboboxSelectOnFocus, CompletedAttachComboboxSelectOnFocus())`. */
|
|
342
|
-
export const AttachComboboxSelectOnFocus = Mount.define('AttachComboboxSelectOnFocus', CompletedAttachComboboxSelectOnFocus);
|
|
343
|
-
/** The backdrop-portaling Mount this Combobox renders. Exposed so Scene tests can
|
|
344
|
-
* call `Scene.Mount.resolve(PortalComboboxBackdrop, CompletedPortalComboboxBackdrop())` to
|
|
345
|
-
* acknowledge the mount produced by the rendered backdrop. */
|
|
346
|
-
export const PortalComboboxBackdrop = Mount.define('PortalComboboxBackdrop', CompletedPortalComboboxBackdrop);
|
|
347
|
-
const attachComboboxPreventBlur = AttachComboboxPreventBlur((element) => Effect.sync(() => {
|
|
357
|
+
export const AttachComboboxPreventBlur = Mount.define('AttachComboboxPreventBlur', CompletedAttachComboboxPreventBlur)((element) => Effect.sync(() => {
|
|
348
358
|
const handler = (event) => {
|
|
349
359
|
event.preventDefault();
|
|
350
360
|
};
|
|
@@ -356,7 +366,10 @@ const attachComboboxPreventBlur = AttachComboboxPreventBlur((element) => Effect.
|
|
|
356
366
|
}),
|
|
357
367
|
};
|
|
358
368
|
}));
|
|
359
|
-
|
|
369
|
+
/** The Mount this Combobox renders to install the input's select-on-focus
|
|
370
|
+
* behavior. Exposed so Scene tests can call
|
|
371
|
+
* `Scene.Mount.resolve(AttachComboboxSelectOnFocus, CompletedAttachComboboxSelectOnFocus())`. */
|
|
372
|
+
export const AttachComboboxSelectOnFocus = Mount.define('AttachComboboxSelectOnFocus', CompletedAttachComboboxSelectOnFocus)((element) => Effect.sync(() => {
|
|
360
373
|
const handler = () => {
|
|
361
374
|
if (element instanceof HTMLInputElement) {
|
|
362
375
|
element.select();
|
|
@@ -368,7 +381,10 @@ const attachComboboxSelectOnFocus = AttachComboboxSelectOnFocus((element) => Eff
|
|
|
368
381
|
cleanup: () => element.removeEventListener('focus', handler),
|
|
369
382
|
};
|
|
370
383
|
}));
|
|
371
|
-
|
|
384
|
+
/** The backdrop-portaling Mount this Combobox renders. Exposed so Scene tests can
|
|
385
|
+
* call `Scene.Mount.resolve(PortalComboboxBackdrop, CompletedPortalComboboxBackdrop())` to
|
|
386
|
+
* acknowledge the mount produced by the rendered backdrop. */
|
|
387
|
+
export const PortalComboboxBackdrop = Mount.define('PortalComboboxBackdrop', CompletedPortalComboboxBackdrop)((element) => Effect.sync(() => {
|
|
372
388
|
const cleanup = portalToBody(element);
|
|
373
389
|
return { message: CompletedPortalComboboxBackdrop(), cleanup };
|
|
374
390
|
}));
|
|
@@ -487,7 +503,7 @@ export const makeView = (behavior) => (config) => {
|
|
|
487
503
|
...(isVisible ? [DataAttribute('open', '')] : []),
|
|
488
504
|
...(config.model.selectInputOnFocus
|
|
489
505
|
? [
|
|
490
|
-
OnMount(Mount.mapMessage(
|
|
506
|
+
OnMount(Mount.mapMessage(AttachComboboxSelectOnFocus(), toParentMessage)),
|
|
491
507
|
]
|
|
492
508
|
: []),
|
|
493
509
|
...(inputClassName ? [Class(inputClassName)] : []),
|
|
@@ -496,30 +512,14 @@ export const makeView = (behavior) => (config) => {
|
|
|
496
512
|
const anchorAttributes = anchor
|
|
497
513
|
? [
|
|
498
514
|
Style({ position: 'absolute', margin: '0', visibility: 'hidden' }),
|
|
499
|
-
OnMount(Mount.mapMessage(AnchorCombobox(
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
items.addEventListener('pointerdown', preventBlur, {
|
|
504
|
-
capture: true,
|
|
505
|
-
});
|
|
506
|
-
const teardownAnchor = anchorSetup({
|
|
507
|
-
buttonId: `${id}-input-wrapper`,
|
|
508
|
-
anchor,
|
|
509
|
-
interceptTab: false,
|
|
510
|
-
})(items);
|
|
511
|
-
return {
|
|
512
|
-
message: CompletedAnchorCombobox(),
|
|
513
|
-
cleanup: () => {
|
|
514
|
-
items.removeEventListener('pointerdown', preventBlur, {
|
|
515
|
-
capture: true,
|
|
516
|
-
});
|
|
517
|
-
teardownAnchor();
|
|
518
|
-
},
|
|
519
|
-
};
|
|
520
|
-
})), toParentMessage)),
|
|
515
|
+
OnMount(Mount.mapMessage(AnchorCombobox({
|
|
516
|
+
buttonId: `${id}-input-wrapper`,
|
|
517
|
+
anchor,
|
|
518
|
+
}), toParentMessage)),
|
|
521
519
|
]
|
|
522
|
-
: [
|
|
520
|
+
: [
|
|
521
|
+
OnMount(Mount.mapMessage(AttachComboboxPreventBlur(), toParentMessage)),
|
|
522
|
+
];
|
|
523
523
|
const itemsContainerAttributes = [
|
|
524
524
|
Id(`${id}-items`),
|
|
525
525
|
Role('listbox'),
|
|
@@ -607,7 +607,7 @@ export const makeView = (behavior) => (config) => {
|
|
|
607
607
|
});
|
|
608
608
|
};
|
|
609
609
|
const backdrop = keyed('div')(`${id}-backdrop`, [
|
|
610
|
-
OnMount(Mount.mapMessage(
|
|
610
|
+
OnMount(Mount.mapMessage(PortalComboboxBackdrop(), toParentMessage)),
|
|
611
611
|
...(isLeaving ? [] : [OnClick(toParentMessage(Closed()))]),
|
|
612
612
|
...(backdropClassName ? [Class(backdropClassName)] : []),
|
|
613
613
|
...backdropAttributes,
|
|
@@ -643,7 +643,7 @@ export const makeView = (behavior) => (config) => {
|
|
|
643
643
|
...(isDisabled
|
|
644
644
|
? [AriaDisabled(true), DataAttribute('disabled', '')]
|
|
645
645
|
: [OnClick(toParentMessage(PressedToggleButton()))]),
|
|
646
|
-
OnMount(Mount.mapMessage(
|
|
646
|
+
OnMount(Mount.mapMessage(AttachComboboxPreventBlur(), toParentMessage)),
|
|
647
647
|
...(buttonClassName ? [Class(buttonClassName)] : []),
|
|
648
648
|
...buttonAttributes,
|
|
649
649
|
], [buttonContent]),
|
|
@@ -238,13 +238,7 @@ export declare const view: <ParentMessage, Item extends string>(config: Readonly
|
|
|
238
238
|
groupAttributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
|
|
239
239
|
separatorClassName?: string;
|
|
240
240
|
separatorAttributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
|
|
241
|
-
anchor?:
|
|
242
|
-
placement?: import("@floating-ui/dom").Placement;
|
|
243
|
-
gap?: number;
|
|
244
|
-
offset?: number;
|
|
245
|
-
padding?: number;
|
|
246
|
-
portal?: boolean;
|
|
247
|
-
}>;
|
|
241
|
+
anchor?: import("./public.js").AnchorConfig;
|
|
248
242
|
}>) => Html;
|
|
249
243
|
/** Creates a memoized single-select combobox view. Static config is captured in a closure;
|
|
250
244
|
* only `model` and `toParentMessage` are compared per render via `createLazy`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../../src/ui/combobox/single.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,IAAI,CAAC,EAAQ,MAAM,QAAQ,CAAA;AAEzD,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,EAKb,MAAM,aAAa,CAAA;AAIpB,uJAAuJ;AACvJ,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;EAIhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,8RAA8R;AAC9R,MAAM,MAAM,UAAU,GAAG,cAAc,GACrC,QAAQ,CAAC;IACP,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAC,CAAA;AAEJ,4IAA4I;AAC5I,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAMxC,CAAA;AAIF,uIAAuI;AACvI,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiDjB,CAAA;AAEF;wFACwF;AACxF,eAAO,MAAM,IAAI,GACf,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACK,CAAA;AAEhE;yFACyF;AACzF,eAAO,MAAM,KAAK,GAChB,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAClC,CAAA;AAEzB;iGACiG;AACjG,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,MAAM,MAAM,EACZ,aAAa,MAAM,KAClB,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACP,CAAA;AAIpD,wEAAwE;AACxE,MAAM,MAAM,UAAU,CAAC,aAAa,EAAE,IAAI,SAAS,MAAM,IAAI,cAAc,CACzE,aAAa,EACb,IAAI,EACJ,KAAK,CACN,CAAA;AAED,0IAA0I;AAC1I,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../../src/ui/combobox/single.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,IAAI,CAAC,EAAQ,MAAM,QAAQ,CAAA;AAEzD,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,EAKb,MAAM,aAAa,CAAA;AAIpB,uJAAuJ;AACvJ,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;EAIhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,8RAA8R;AAC9R,MAAM,MAAM,UAAU,GAAG,cAAc,GACrC,QAAQ,CAAC;IACP,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAC,CAAA;AAEJ,4IAA4I;AAC5I,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAMxC,CAAA;AAIF,uIAAuI;AACvI,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiDjB,CAAA;AAEF;wFACwF;AACxF,eAAO,MAAM,IAAI,GACf,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACK,CAAA;AAEhE;yFACyF;AACzF,eAAO,MAAM,KAAK,GAChB,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAClC,CAAA;AAEzB;iGACiG;AACjG,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,MAAM,MAAM,EACZ,aAAa,MAAM,KAClB,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACP,CAAA;AAIpD,wEAAwE;AACxE,MAAM,MAAM,UAAU,CAAC,aAAa,EAAE,IAAI,SAAS,MAAM,IAAI,cAAc,CACzE,aAAa,EACb,IAAI,EACJ,KAAK,CACN,CAAA;AAED,0IAA0I;AAC1I,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAOf,CAAA;AAEF;mFACmF;AACnF,eAAO,MAAM,IAAI,GAAI,aAAa,EAAE,IAAI,SAAS,MAAM,EACrD,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"}
|
|
@@ -223,13 +223,7 @@ export declare const view: <ParentMessage, Item>(config: Readonly<{
|
|
|
223
223
|
groupAttributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
|
|
224
224
|
separatorClassName?: string;
|
|
225
225
|
separatorAttributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
|
|
226
|
-
anchor?:
|
|
227
|
-
placement?: import("@floating-ui/dom").Placement;
|
|
228
|
-
gap?: number;
|
|
229
|
-
offset?: number;
|
|
230
|
-
padding?: number;
|
|
231
|
-
portal?: boolean;
|
|
232
|
-
}>;
|
|
226
|
+
anchor?: import("./public.js").AnchorConfig;
|
|
233
227
|
name?: string;
|
|
234
228
|
form?: string;
|
|
235
229
|
isDisabled?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi.d.ts","sourceRoot":"","sources":["../../../src/ui/listbox/multi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,IAAI,CAAC,EAAQ,MAAM,QAAQ,CAAA;AAEzD,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,iKAAiK;AACjK,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,aAAa,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACtC,CAAC,CAAA;AAEJ,4HAA4H;AAC5H,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAIF,wJAAwJ;AACxJ,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,8IAA8I;AAC9I,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,sEAAsE;AACtE,MAAM,MAAM,UAAU,CAAC,aAAa,EAAE,IAAI,IAAI,cAAc,CAC1D,aAAa,EACb,IAAI,EACJ,KAAK,CACN,CAAA;AAED,0JAA0J;AAC1J,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"multi.d.ts","sourceRoot":"","sources":["../../../src/ui/listbox/multi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,IAAI,CAAC,EAAQ,MAAM,QAAQ,CAAA;AAEzD,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,iKAAiK;AACjK,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,aAAa,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACtC,CAAC,CAAA;AAEJ,4HAA4H;AAC5H,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAIF,wJAAwJ;AACxJ,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,8IAA8I;AAC9I,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,sEAAsE;AACtE,MAAM,MAAM,UAAU,CAAC,aAAa,EAAE,IAAI,IAAI,cAAc,CAC1D,aAAa,EACb,IAAI,EACJ,KAAK,CACN,CAAA;AAED,0JAA0J;AAC1J,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAYf,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"}
|
|
@@ -2,7 +2,7 @@ import { Effect, Option, Schema as S } from 'effect';
|
|
|
2
2
|
import * as Command from '../../command/index.js';
|
|
3
3
|
import { type Attribute, type Html } from '../../html/index.js';
|
|
4
4
|
import * as Mount from '../../mount/index.js';
|
|
5
|
-
import
|
|
5
|
+
import { AnchorConfig } from '../anchor.js';
|
|
6
6
|
import { resolveTypeaheadMatch } from '../typeahead.js';
|
|
7
7
|
export { resolveTypeaheadMatch };
|
|
8
8
|
/** Schema for the activation trigger — whether the user interacted via mouse or keyboard. */
|
|
@@ -312,13 +312,22 @@ export declare const makeUpdate: <Model extends BaseModel>(handleSelectedItem: (
|
|
|
312
312
|
/** The anchor-positioning Mount this Listbox renders when an anchor is
|
|
313
313
|
* configured. Exposed so Scene tests can call
|
|
314
314
|
* `Scene.Mount.resolve(AnchorListbox, CompletedAnchorListbox())`. */
|
|
315
|
-
export declare const AnchorListbox: Mount.
|
|
315
|
+
export declare const AnchorListbox: Mount.MountDefinitionWithArgs<"AnchorListbox", {
|
|
316
|
+
buttonId: S.String;
|
|
317
|
+
anchor: S.Struct<{
|
|
318
|
+
readonly placement: S.optional<S.Literals<readonly ["top", "right", "bottom", "left", "top-start", "top-end", "right-start", "right-end", "bottom-start", "bottom-end", "left-start", "left-end"]>>;
|
|
319
|
+
readonly gap: S.optional<S.Number>;
|
|
320
|
+
readonly offset: S.optional<S.Number>;
|
|
321
|
+
readonly padding: S.optional<S.Number>;
|
|
322
|
+
readonly portal: S.optional<S.Boolean>;
|
|
323
|
+
}>;
|
|
324
|
+
}, {
|
|
316
325
|
readonly _tag: "CompletedAnchorListbox";
|
|
317
326
|
}>;
|
|
318
327
|
/** The backdrop-portaling Mount this Listbox renders. Exposed so Scene tests can
|
|
319
328
|
* call `Scene.Mount.resolve(PortalListboxBackdrop, CompletedPortalListboxBackdrop())` to
|
|
320
329
|
* acknowledge the mount produced by the rendered backdrop. */
|
|
321
|
-
export declare const PortalListboxBackdrop: Mount.
|
|
330
|
+
export declare const PortalListboxBackdrop: Mount.MountDefinitionNoArgs<"PortalListboxBackdrop", {
|
|
322
331
|
readonly _tag: "CompletedPortalListboxBackdrop";
|
|
323
332
|
}>;
|
|
324
333
|
/** Configuration for an individual listbox item's appearance. */
|
|
@@ -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,wBAAwB,CAAA;AAGjD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,IAAI,EAGV,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/ui/listbox/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { html, } from '../../html/index.js';
|
|
|
6
6
|
import { m } from '../../message/index.js';
|
|
7
7
|
import * as Mount from '../../mount/index.js';
|
|
8
8
|
import { makeConstrainedEvo } from '../../struct/index.js';
|
|
9
|
-
import { anchorSetup, portalToBody } from '../anchor.js';
|
|
9
|
+
import { AnchorConfig, anchorSetup, portalToBody } from '../anchor.js';
|
|
10
10
|
// NOTE: Animation imports are split across schema + update to avoid a circular
|
|
11
11
|
// dependency: animation → html → runtime → devtools → listbox → animation.
|
|
12
12
|
// The barrel (../animation) imports from html, which starts the cycle.
|
|
@@ -363,12 +363,14 @@ export const makeUpdate = (handleSelectedItem) => {
|
|
|
363
363
|
/** The anchor-positioning Mount this Listbox renders when an anchor is
|
|
364
364
|
* configured. Exposed so Scene tests can call
|
|
365
365
|
* `Scene.Mount.resolve(AnchorListbox, CompletedAnchorListbox())`. */
|
|
366
|
-
export const AnchorListbox = Mount.define('AnchorListbox', CompletedAnchorListbox)
|
|
366
|
+
export const AnchorListbox = Mount.define('AnchorListbox', { buttonId: S.String, anchor: AnchorConfig }, CompletedAnchorListbox)(({ buttonId, anchor }) => (element) => Effect.sync(() => {
|
|
367
|
+
const cleanup = anchorSetup({ buttonId, anchor })(element);
|
|
368
|
+
return { message: CompletedAnchorListbox(), cleanup };
|
|
369
|
+
}));
|
|
367
370
|
/** The backdrop-portaling Mount this Listbox renders. Exposed so Scene tests can
|
|
368
371
|
* call `Scene.Mount.resolve(PortalListboxBackdrop, CompletedPortalListboxBackdrop())` to
|
|
369
372
|
* acknowledge the mount produced by the rendered backdrop. */
|
|
370
|
-
export const PortalListboxBackdrop = Mount.define('PortalListboxBackdrop', CompletedPortalListboxBackdrop)
|
|
371
|
-
const portalListboxBackdrop = PortalListboxBackdrop((element) => Effect.sync(() => {
|
|
373
|
+
export const PortalListboxBackdrop = Mount.define('PortalListboxBackdrop', CompletedPortalListboxBackdrop)((element) => Effect.sync(() => {
|
|
372
374
|
const cleanup = portalToBody(element);
|
|
373
375
|
return { message: CompletedPortalListboxBackdrop(), cleanup };
|
|
374
376
|
}));
|
|
@@ -487,13 +489,7 @@ export const makeView = (behavior) => (config) => {
|
|
|
487
489
|
const anchorAttributes = anchor
|
|
488
490
|
? [
|
|
489
491
|
Style({ position: 'absolute', margin: '0', visibility: 'hidden' }),
|
|
490
|
-
OnMount(Mount.mapMessage(AnchorListbox(
|
|
491
|
-
const cleanup = anchorSetup({
|
|
492
|
-
buttonId: `${id}-button`,
|
|
493
|
-
anchor,
|
|
494
|
-
})(items);
|
|
495
|
-
return { message: CompletedAnchorListbox(), cleanup };
|
|
496
|
-
})), toParentMessage)),
|
|
492
|
+
OnMount(Mount.mapMessage(AnchorListbox({ buttonId: `${id}-button`, anchor }), toParentMessage)),
|
|
497
493
|
]
|
|
498
494
|
: [];
|
|
499
495
|
const itemsContainerAttributes = [
|
|
@@ -592,7 +588,7 @@ export const makeView = (behavior) => (config) => {
|
|
|
592
588
|
});
|
|
593
589
|
};
|
|
594
590
|
const backdrop = keyed('div')(`${id}-backdrop`, [
|
|
595
|
-
OnMount(Mount.mapMessage(
|
|
591
|
+
OnMount(Mount.mapMessage(PortalListboxBackdrop(), toParentMessage)),
|
|
596
592
|
...(isLeaving ? [] : [OnClick(toParentMessage(Closed()))]),
|
|
597
593
|
...(backdropClassName ? [Class(backdropClassName)] : []),
|
|
598
594
|
...backdropAttributes,
|