@charcuterie/ui 3.14.2 → 3.14.4
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Combobox.d.ts","sourceRoot":"","sources":["../../src/Combobox/Combobox.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,YAAY,EAEZ,SAAS,EACT,SAAS,EACV,MAAM,OAAO,CAAA;AAGd,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAMzD,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,oEAAoE;IACpE,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC7C,iEAAiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,iEAAiE;IACjE,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAA;IAC1C;;;;OAIG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB,CAAA;AA4BD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,QAAQ,GAAI,4MAmBtB,aAAa,KAAG,
|
|
1
|
+
{"version":3,"file":"Combobox.d.ts","sourceRoot":"","sources":["../../src/Combobox/Combobox.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,YAAY,EAEZ,SAAS,EACT,SAAS,EACV,MAAM,OAAO,CAAA;AAGd,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAMzD,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,oEAAoE;IACpE,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC7C,iEAAiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,iEAAiE;IACjE,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAA;IAC1C;;;;OAIG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB,CAAA;AA4BD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,QAAQ,GAAI,4MAmBtB,aAAa,KAAG,SAmsBlB,CAAA"}
|
|
@@ -114,6 +114,59 @@ export const Combobox = ({ className, emptyLabel = "No matches", error, footer,
|
|
|
114
114
|
overscan: 8,
|
|
115
115
|
});
|
|
116
116
|
const optionDomId = (value) => `${listboxId}-opt-${value}`;
|
|
117
|
+
// ─── Opening lands on the chosen option, not the top of the list ────
|
|
118
|
+
//
|
|
119
|
+
// The APG listbox rule, and the one `Listbox` has always followed: a
|
|
120
|
+
// reopened picker resumes on its current value. Combobox seeded 0
|
|
121
|
+
// instead, so reopening a long list showed its head with the chosen
|
|
122
|
+
// row scrolled out of sight — correcting a misclick meant hunting the
|
|
123
|
+
// list for the value you had just set, and the panel read as though
|
|
124
|
+
// nothing had been chosen at all.
|
|
125
|
+
const seedValue = selected[0];
|
|
126
|
+
// Derived in render, not read from a ref inside the effect, so it
|
|
127
|
+
// recomputes as `options` arrive: a picker that fetches its list when
|
|
128
|
+
// it opens still lands on its value once the rows turn up.
|
|
129
|
+
const openSeedIndex = seedValue === undefined
|
|
130
|
+
? -1
|
|
131
|
+
: filtered.findIndex((option) => option.value === seedValue &&
|
|
132
|
+
!option.isDisabled);
|
|
133
|
+
const hasSeededOnOpen = useRef(false);
|
|
134
|
+
// The seed sets the index and the in-view effect further down scrolls
|
|
135
|
+
// to it, one commit later — the virtualizer measures its scroll
|
|
136
|
+
// element in an effect of its own, so a `scrollToIndex` issued any
|
|
137
|
+
// earlier has nothing to scroll and is dropped. That effect must not
|
|
138
|
+
// scroll the *stale* highlight in the meantime, which would undo the
|
|
139
|
+
// centring, so it is told which index to wait for and skips every pass
|
|
140
|
+
// short of it.
|
|
141
|
+
const pendingSeedIndex = useRef(null);
|
|
142
|
+
useEffect(() => {
|
|
143
|
+
if (!isVisible) {
|
|
144
|
+
hasSeededOnOpen.current = false;
|
|
145
|
+
pendingSeedIndex.current = null;
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
// A live query owns the highlight: its top match, not the old value.
|
|
149
|
+
if (hasSeededOnOpen.current ||
|
|
150
|
+
currentQuery.length > 0) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (openSeedIndex < 0) {
|
|
154
|
+
setActiveIndex(0);
|
|
155
|
+
// Nothing chosen means the top of the list is the right seed and
|
|
156
|
+
// there is nothing left to wait for. A chosen value that is not in
|
|
157
|
+
// the list *yet* keeps waiting — this effect reruns when it lands.
|
|
158
|
+
hasSeededOnOpen.current = seedValue === undefined;
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
hasSeededOnOpen.current = true;
|
|
162
|
+
pendingSeedIndex.current = openSeedIndex;
|
|
163
|
+
setActiveIndex(openSeedIndex);
|
|
164
|
+
}, [
|
|
165
|
+
isVisible,
|
|
166
|
+
currentQuery.length,
|
|
167
|
+
openSeedIndex,
|
|
168
|
+
seedValue,
|
|
169
|
+
]);
|
|
117
170
|
// `activeIndex` is seeded at 0 on open and on every query reset, which
|
|
118
171
|
// can land on a disabled option; arrowing skips disabled but the seed
|
|
119
172
|
// does not. Resolve to the nearest enabled row and drive the highlight,
|
|
@@ -128,6 +181,22 @@ export const Combobox = ({ className, emptyLabel = "No matches", error, footer,
|
|
|
128
181
|
const activeValue = resolvedActiveIndex < 0
|
|
129
182
|
? undefined
|
|
130
183
|
: filtered[resolvedActiveIndex]?.value;
|
|
184
|
+
// A windowed list only renders its window, and the virtualizer moves
|
|
185
|
+
// that window a tick *after* `scrollToIndex` sets the scroll offset.
|
|
186
|
+
// Naming a row that is not in the DOM leaves `aria-activedescendant`
|
|
187
|
+
// pointing at nothing — an idref a screen reader cannot resolve, and
|
|
188
|
+
// an `aria-valid-attr-value` failure. So the reference waits for its
|
|
189
|
+
// row: the virtualizer re-renders as the range catches up, one frame
|
|
190
|
+
// later, and the announcement is right rather than broken. The
|
|
191
|
+
// highlight and every commit still run off `resolvedActiveIndex`, so
|
|
192
|
+
// only the announcement waits, never the behaviour.
|
|
193
|
+
const activeDescendantId = activeValue === undefined ||
|
|
194
|
+
(isWindowed &&
|
|
195
|
+
!rowVirtualizer
|
|
196
|
+
.getVirtualItems()
|
|
197
|
+
.some((row) => row.index === resolvedActiveIndex))
|
|
198
|
+
? undefined
|
|
199
|
+
: optionDomId(activeValue);
|
|
131
200
|
const commitValue = (value) => {
|
|
132
201
|
if (isMultiple) {
|
|
133
202
|
setSelected((previous) => previous.includes(value)
|
|
@@ -233,14 +302,28 @@ export const Combobox = ({ className, emptyLabel = "No matches", error, footer,
|
|
|
233
302
|
if (!isVisible) {
|
|
234
303
|
return;
|
|
235
304
|
}
|
|
305
|
+
const isSeeding = pendingSeedIndex.current !== null;
|
|
306
|
+
if (isSeeding &&
|
|
307
|
+
pendingSeedIndex.current !== resolvedActiveIndex) {
|
|
308
|
+
// The seeded index has not reached this render yet. Scrolling the
|
|
309
|
+
// stale highlight now would drag the list off the chosen row.
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
pendingSeedIndex.current = null;
|
|
313
|
+
// The open seed centres its row; an arrow move only pulls the next
|
|
314
|
+
// one just into view. "nearest" on open would park the chosen row
|
|
315
|
+
// against the panel's bottom edge with nothing after it, so the
|
|
316
|
+
// neighbours the list was reopened to reach stay off screen.
|
|
236
317
|
if (isWindowed) {
|
|
237
|
-
rowVirtualizer.scrollToIndex(resolvedActiveIndex);
|
|
318
|
+
rowVirtualizer.scrollToIndex(resolvedActiveIndex, isSeeding ? { align: "center" } : undefined);
|
|
238
319
|
return;
|
|
239
320
|
}
|
|
240
321
|
if (activeValue !== undefined) {
|
|
241
322
|
listElement.current
|
|
242
323
|
?.querySelector(`#${CSS.escape(`${listboxId}-opt-${activeValue}`)}`)
|
|
243
|
-
?.scrollIntoView({
|
|
324
|
+
?.scrollIntoView({
|
|
325
|
+
block: isSeeding ? "center" : "nearest",
|
|
326
|
+
});
|
|
244
327
|
}
|
|
245
328
|
}, [
|
|
246
329
|
resolvedActiveIndex,
|
|
@@ -289,13 +372,11 @@ export const Combobox = ({ className, emptyLabel = "No matches", error, footer,
|
|
|
289
372
|
if (isVisible) {
|
|
290
373
|
element.setAttribute("aria-expanded", "true");
|
|
291
374
|
element.setAttribute("aria-controls", listboxId);
|
|
292
|
-
if (
|
|
375
|
+
if (activeDescendantId === undefined) {
|
|
293
376
|
element.removeAttribute("aria-activedescendant");
|
|
294
377
|
}
|
|
295
378
|
else {
|
|
296
|
-
|
|
297
|
-
// the stable `listboxId`, not a per-render closure.
|
|
298
|
-
element.setAttribute("aria-activedescendant", `${listboxId}-opt-${activeValue}`);
|
|
379
|
+
element.setAttribute("aria-activedescendant", activeDescendantId);
|
|
299
380
|
}
|
|
300
381
|
}
|
|
301
382
|
else {
|
|
@@ -306,7 +387,7 @@ export const Combobox = ({ className, emptyLabel = "No matches", error, footer,
|
|
|
306
387
|
}, [
|
|
307
388
|
isAttached,
|
|
308
389
|
isVisible,
|
|
309
|
-
|
|
390
|
+
activeDescendantId,
|
|
310
391
|
listboxId,
|
|
311
392
|
inputRef,
|
|
312
393
|
]);
|
|
@@ -316,9 +397,7 @@ export const Combobox = ({ className, emptyLabel = "No matches", error, footer,
|
|
|
316
397
|
}, type: "button", children: [chipLabel(value), _jsx("span", { "aria-hidden": "true", className: "text-content-secondary", children: "\u2715" })] }, value))) })) : null, clonedTrigger, isVisible ? (_jsx(FloatingPortal, { children: _jsx(FloatingFocusManager, { context: context,
|
|
317
398
|
// Attached mode keeps focus in the consumer's input — the
|
|
318
399
|
// panel must never grab it.
|
|
319
|
-
disabled: isAttached, initialFocus: inputElement, modal: false, children: _jsxs("div", { ...floatingProps, className: toClassName(PANEL_SURFACE_CLASS, "z-[var(--layer-modal)] flex min-w-64 flex-col overflow-hidden", className), ref: setFloating, style: floatingStyles, children: [isAttached ? null : (_jsx("div", { className: "flex items-center gap-1 border-border-subtle border-b px-3 py-2", children: _jsx("input", { "aria-activedescendant":
|
|
320
|
-
? undefined
|
|
321
|
-
: optionDomId(activeValue), "aria-autocomplete": "list", "aria-controls": listboxId, "aria-expanded": "true", "aria-labelledby": triggerId, className: "min-w-24 flex-1 bg-transparent text-content-primary text-sm outline-none placeholder:text-content-muted", onChange: (changeEvent) => {
|
|
400
|
+
disabled: isAttached, initialFocus: inputElement, modal: false, children: _jsxs("div", { ...floatingProps, className: toClassName(PANEL_SURFACE_CLASS, "z-[var(--layer-modal)] flex min-w-64 flex-col overflow-hidden", className), ref: setFloating, style: floatingStyles, children: [isAttached ? null : (_jsx("div", { className: "flex items-center gap-1 border-border-subtle border-b px-3 py-2", children: _jsx("input", { "aria-activedescendant": activeDescendantId, "aria-autocomplete": "list", "aria-controls": listboxId, "aria-expanded": "true", "aria-labelledby": triggerId, className: "min-w-24 flex-1 bg-transparent text-content-primary text-sm outline-none placeholder:text-content-muted", onChange: (changeEvent) => {
|
|
322
401
|
setQuery(changeEvent.target.value);
|
|
323
402
|
}, onKeyDown: handleKeyDown, placeholder: placeholder, ref: internalInputElement, role: "combobox", type: "text", value: currentQuery }) })), _jsx("div", { "aria-label": isAttached ? "Suggestions" : undefined, "aria-labelledby": isAttached ? undefined : triggerId, className: "min-h-0 flex-1 overflow-auto p-1", id: listboxId, ref: listElement, role: "listbox", children: isLoading ? (_jsx("p", { className: "px-2 py-3 text-center text-content-secondary text-sm", children: "Loading\u2026" })) : error ? (_jsx("div", { className: "px-2 py-3 text-center text-intent-danger-content text-sm", children: error })) : filtered.length === 0 ? (_jsx("p", { className: "px-2 py-3 text-center text-content-secondary text-sm", children: emptyLabel })) : isWindowed ? (_jsx("div", { className: "relative w-full", style: {
|
|
324
403
|
height: `${rowVirtualizer.getTotalSize()}px`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Combobox.js","sourceRoot":"","sources":["../../src/Combobox/Combobox.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Combobox.js","sourceRoot":"","sources":["../../src/Combobox/Combobox.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@charcuterie/ui",
|
|
3
|
-
"version": "3.14.
|
|
3
|
+
"version": "3.14.4",
|
|
4
4
|
"description": "The Charcuterie components. Tokens for look, @charcuterie/logic for state, ARIA that agents can actually drive.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"typecheck": "tsc --noEmit"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@charcuterie/logic": "2.
|
|
56
|
+
"@charcuterie/logic": "2.2.0",
|
|
57
57
|
"@charcuterie/tokens": "1.6.0",
|
|
58
58
|
"@floating-ui/react": "^0.27.20",
|
|
59
59
|
"@tanstack/react-virtual": "^3.13.12",
|
|
@@ -527,3 +527,54 @@ export const VirtualizedLongOptions: Story = {
|
|
|
527
527
|
/>
|
|
528
528
|
),
|
|
529
529
|
}
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* A chosen value far down the list. Opening lands on it — highlighted,
|
|
533
|
+
* ticked and centred in the panel — rather than at the head of the list
|
|
534
|
+
* with the current value scrolled out of sight. Reopening to correct a
|
|
535
|
+
* misclick is then one glance, not a hunt.
|
|
536
|
+
*
|
|
537
|
+
* Not windowed (seven options), so this covers the plain DOM path;
|
|
538
|
+
* `VirtualizedChosenValue` covers the virtualized one.
|
|
539
|
+
*/
|
|
540
|
+
export const ChosenValueOnOpen: Story = {
|
|
541
|
+
args: {
|
|
542
|
+
isVisible: false,
|
|
543
|
+
onDismiss: () => {},
|
|
544
|
+
onSelect: () => {},
|
|
545
|
+
options: LANGUAGES,
|
|
546
|
+
selectedValue: "por",
|
|
547
|
+
trigger: <Button>Search languages</Button>,
|
|
548
|
+
},
|
|
549
|
+
render: () => (
|
|
550
|
+
<ComboboxHarness
|
|
551
|
+
className="max-h-48"
|
|
552
|
+
options={LANGUAGES}
|
|
553
|
+
selectedValue="por"
|
|
554
|
+
triggerLabel="Search languages"
|
|
555
|
+
/>
|
|
556
|
+
),
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
/**
|
|
560
|
+
* The same rule through the virtualizer: track 400 of 500 is chosen, so
|
|
561
|
+
* opening scrolls the window to it instead of rendering rows 1–12.
|
|
562
|
+
*/
|
|
563
|
+
export const VirtualizedChosenValue: Story = {
|
|
564
|
+
args: {
|
|
565
|
+
isVisible: false,
|
|
566
|
+
onDismiss: () => {},
|
|
567
|
+
onSelect: () => {},
|
|
568
|
+
options: MANY,
|
|
569
|
+
selectedValue: "track-400",
|
|
570
|
+
trigger: <Button>Search 500 tracks</Button>,
|
|
571
|
+
},
|
|
572
|
+
render: () => (
|
|
573
|
+
<ComboboxHarness
|
|
574
|
+
isInitiallyVisible
|
|
575
|
+
options={MANY}
|
|
576
|
+
selectedValue="track-400"
|
|
577
|
+
triggerLabel="Search 500 tracks"
|
|
578
|
+
/>
|
|
579
|
+
),
|
|
580
|
+
}
|
|
@@ -10,12 +10,14 @@ import * as stories from "./Combobox.stories.tsx"
|
|
|
10
10
|
const {
|
|
11
11
|
AllVariants,
|
|
12
12
|
AttachedInputDrillDown,
|
|
13
|
+
ChosenValueOnOpen,
|
|
13
14
|
Default,
|
|
14
15
|
DisabledFirstOption,
|
|
15
16
|
Interactive,
|
|
16
17
|
LongFooter,
|
|
17
18
|
TrailingElement,
|
|
18
19
|
Virtualized,
|
|
20
|
+
VirtualizedChosenValue,
|
|
19
21
|
} = composeStories(stories)
|
|
20
22
|
|
|
21
23
|
const openMulti = async () => {
|
|
@@ -461,3 +463,118 @@ test("a windowed list carries aria-setsize and aria-posinset", async () => {
|
|
|
461
463
|
|
|
462
464
|
await expect(options[0]).toHaveAttribute("aria-posinset")
|
|
463
465
|
})
|
|
466
|
+
|
|
467
|
+
test("opening lands on the chosen option, not the top of the list", async () => {
|
|
468
|
+
const mounted = await mountStory(ChosenValueOnOpen)
|
|
469
|
+
|
|
470
|
+
await userEvent.click(
|
|
471
|
+
expectAgentDrivable(mounted.canvas, {
|
|
472
|
+
name: "Search languages",
|
|
473
|
+
role: "button",
|
|
474
|
+
}),
|
|
475
|
+
)
|
|
476
|
+
|
|
477
|
+
const input = expectAgentDrivable(mounted.body, {
|
|
478
|
+
role: "combobox",
|
|
479
|
+
})
|
|
480
|
+
|
|
481
|
+
// "por" is last of the seven, so index 0 would be the old behaviour.
|
|
482
|
+
const chosen = mounted.body.getByRole("option", {
|
|
483
|
+
name: "Portuguese",
|
|
484
|
+
})
|
|
485
|
+
|
|
486
|
+
await waitFor(() => {
|
|
487
|
+
expect(input).toHaveAttribute(
|
|
488
|
+
"aria-activedescendant",
|
|
489
|
+
chosen.id,
|
|
490
|
+
)
|
|
491
|
+
})
|
|
492
|
+
|
|
493
|
+
await expect(chosen).toHaveAttribute(
|
|
494
|
+
"aria-selected",
|
|
495
|
+
"true",
|
|
496
|
+
)
|
|
497
|
+
|
|
498
|
+
// The seed is the chosen row, not merely a non-zero index.
|
|
499
|
+
await expect(
|
|
500
|
+
mounted.body.getAllByRole("option")[0],
|
|
501
|
+
).toHaveAttribute("aria-selected", "false")
|
|
502
|
+
})
|
|
503
|
+
|
|
504
|
+
test("typing reseeds the highlight to the top match, not the chosen row", async () => {
|
|
505
|
+
const mounted = await mountStory(ChosenValueOnOpen)
|
|
506
|
+
|
|
507
|
+
await userEvent.click(
|
|
508
|
+
expectAgentDrivable(mounted.canvas, {
|
|
509
|
+
name: "Search languages",
|
|
510
|
+
role: "button",
|
|
511
|
+
}),
|
|
512
|
+
)
|
|
513
|
+
|
|
514
|
+
const input = expectAgentDrivable(mounted.body, {
|
|
515
|
+
role: "combobox",
|
|
516
|
+
})
|
|
517
|
+
|
|
518
|
+
// Matches "English", "French", "German" and "Portuguese" — the open
|
|
519
|
+
// seed must not drag the highlight down to the chosen one.
|
|
520
|
+
await userEvent.type(input, "n")
|
|
521
|
+
|
|
522
|
+
await waitFor(() => {
|
|
523
|
+
expect(input).toHaveAttribute(
|
|
524
|
+
"aria-activedescendant",
|
|
525
|
+
mounted.body.getAllByRole("option")[0]?.id,
|
|
526
|
+
)
|
|
527
|
+
})
|
|
528
|
+
})
|
|
529
|
+
|
|
530
|
+
test("reopening after a pick lands on what was just picked", async () => {
|
|
531
|
+
const mounted = await mountStory(ChosenValueOnOpen)
|
|
532
|
+
|
|
533
|
+
const trigger = expectAgentDrivable(mounted.canvas, {
|
|
534
|
+
name: "Search languages",
|
|
535
|
+
role: "button",
|
|
536
|
+
})
|
|
537
|
+
|
|
538
|
+
await userEvent.click(trigger)
|
|
539
|
+
|
|
540
|
+
await userEvent.click(
|
|
541
|
+
mounted.body.getByRole("option", { name: "German" }),
|
|
542
|
+
)
|
|
543
|
+
|
|
544
|
+
await waitFor(() => {
|
|
545
|
+
expect(mounted.body.queryByRole("combobox")).toBeNull()
|
|
546
|
+
})
|
|
547
|
+
|
|
548
|
+
await userEvent.click(trigger)
|
|
549
|
+
|
|
550
|
+
const reopened = expectAgentDrivable(mounted.body, {
|
|
551
|
+
role: "combobox",
|
|
552
|
+
})
|
|
553
|
+
|
|
554
|
+
await waitFor(() => {
|
|
555
|
+
expect(reopened).toHaveAttribute(
|
|
556
|
+
"aria-activedescendant",
|
|
557
|
+
mounted.body.getByRole("option", { name: "German" })
|
|
558
|
+
.id,
|
|
559
|
+
)
|
|
560
|
+
})
|
|
561
|
+
})
|
|
562
|
+
|
|
563
|
+
test("a windowed list scrolls its chosen option into the window on open", async () => {
|
|
564
|
+
const { body } = await mountStory(VirtualizedChosenValue)
|
|
565
|
+
|
|
566
|
+
// Rows 1–12 would be the window if the seed were still index 0.
|
|
567
|
+
await waitFor(() => {
|
|
568
|
+
expect(
|
|
569
|
+
body.getByRole("option", { name: "Track 400" }),
|
|
570
|
+
).toBeInTheDocument()
|
|
571
|
+
})
|
|
572
|
+
|
|
573
|
+
await expect(
|
|
574
|
+
body.getByRole("option", { name: "Track 400" }),
|
|
575
|
+
).toHaveAttribute("aria-selected", "true")
|
|
576
|
+
|
|
577
|
+
await expect(
|
|
578
|
+
body.queryByRole("option", { name: "Track 1" }),
|
|
579
|
+
).toBeNull()
|
|
580
|
+
})
|
|
@@ -255,6 +255,78 @@ export const Combobox = ({
|
|
|
255
255
|
const optionDomId = (value: string) =>
|
|
256
256
|
`${listboxId}-opt-${value}`
|
|
257
257
|
|
|
258
|
+
// ─── Opening lands on the chosen option, not the top of the list ────
|
|
259
|
+
//
|
|
260
|
+
// The APG listbox rule, and the one `Listbox` has always followed: a
|
|
261
|
+
// reopened picker resumes on its current value. Combobox seeded 0
|
|
262
|
+
// instead, so reopening a long list showed its head with the chosen
|
|
263
|
+
// row scrolled out of sight — correcting a misclick meant hunting the
|
|
264
|
+
// list for the value you had just set, and the panel read as though
|
|
265
|
+
// nothing had been chosen at all.
|
|
266
|
+
const seedValue = selected[0]
|
|
267
|
+
|
|
268
|
+
// Derived in render, not read from a ref inside the effect, so it
|
|
269
|
+
// recomputes as `options` arrive: a picker that fetches its list when
|
|
270
|
+
// it opens still lands on its value once the rows turn up.
|
|
271
|
+
const openSeedIndex =
|
|
272
|
+
seedValue === undefined
|
|
273
|
+
? -1
|
|
274
|
+
: filtered.findIndex(
|
|
275
|
+
(option) =>
|
|
276
|
+
option.value === seedValue &&
|
|
277
|
+
!option.isDisabled,
|
|
278
|
+
)
|
|
279
|
+
|
|
280
|
+
const hasSeededOnOpen = useRef(false)
|
|
281
|
+
|
|
282
|
+
// The seed sets the index and the in-view effect further down scrolls
|
|
283
|
+
// to it, one commit later — the virtualizer measures its scroll
|
|
284
|
+
// element in an effect of its own, so a `scrollToIndex` issued any
|
|
285
|
+
// earlier has nothing to scroll and is dropped. That effect must not
|
|
286
|
+
// scroll the *stale* highlight in the meantime, which would undo the
|
|
287
|
+
// centring, so it is told which index to wait for and skips every pass
|
|
288
|
+
// short of it.
|
|
289
|
+
const pendingSeedIndex = useRef<null | number>(null)
|
|
290
|
+
|
|
291
|
+
useEffect(() => {
|
|
292
|
+
if (!isVisible) {
|
|
293
|
+
hasSeededOnOpen.current = false
|
|
294
|
+
pendingSeedIndex.current = null
|
|
295
|
+
|
|
296
|
+
return
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// A live query owns the highlight: its top match, not the old value.
|
|
300
|
+
if (
|
|
301
|
+
hasSeededOnOpen.current ||
|
|
302
|
+
currentQuery.length > 0
|
|
303
|
+
) {
|
|
304
|
+
return
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
if (openSeedIndex < 0) {
|
|
308
|
+
setActiveIndex(0)
|
|
309
|
+
|
|
310
|
+
// Nothing chosen means the top of the list is the right seed and
|
|
311
|
+
// there is nothing left to wait for. A chosen value that is not in
|
|
312
|
+
// the list *yet* keeps waiting — this effect reruns when it lands.
|
|
313
|
+
hasSeededOnOpen.current = seedValue === undefined
|
|
314
|
+
|
|
315
|
+
return
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
hasSeededOnOpen.current = true
|
|
319
|
+
|
|
320
|
+
pendingSeedIndex.current = openSeedIndex
|
|
321
|
+
|
|
322
|
+
setActiveIndex(openSeedIndex)
|
|
323
|
+
}, [
|
|
324
|
+
isVisible,
|
|
325
|
+
currentQuery.length,
|
|
326
|
+
openSeedIndex,
|
|
327
|
+
seedValue,
|
|
328
|
+
])
|
|
329
|
+
|
|
258
330
|
// `activeIndex` is seeded at 0 on open and on every query reset, which
|
|
259
331
|
// can land on a disabled option; arrowing skips disabled but the seed
|
|
260
332
|
// does not. Resolve to the nearest enabled row and drive the highlight,
|
|
@@ -273,6 +345,24 @@ export const Combobox = ({
|
|
|
273
345
|
? undefined
|
|
274
346
|
: filtered[resolvedActiveIndex]?.value
|
|
275
347
|
|
|
348
|
+
// A windowed list only renders its window, and the virtualizer moves
|
|
349
|
+
// that window a tick *after* `scrollToIndex` sets the scroll offset.
|
|
350
|
+
// Naming a row that is not in the DOM leaves `aria-activedescendant`
|
|
351
|
+
// pointing at nothing — an idref a screen reader cannot resolve, and
|
|
352
|
+
// an `aria-valid-attr-value` failure. So the reference waits for its
|
|
353
|
+
// row: the virtualizer re-renders as the range catches up, one frame
|
|
354
|
+
// later, and the announcement is right rather than broken. The
|
|
355
|
+
// highlight and every commit still run off `resolvedActiveIndex`, so
|
|
356
|
+
// only the announcement waits, never the behaviour.
|
|
357
|
+
const activeDescendantId =
|
|
358
|
+
activeValue === undefined ||
|
|
359
|
+
(isWindowed &&
|
|
360
|
+
!rowVirtualizer
|
|
361
|
+
.getVirtualItems()
|
|
362
|
+
.some((row) => row.index === resolvedActiveIndex))
|
|
363
|
+
? undefined
|
|
364
|
+
: optionDomId(activeValue)
|
|
365
|
+
|
|
276
366
|
const commitValue = (value: string) => {
|
|
277
367
|
if (isMultiple) {
|
|
278
368
|
setSelected((previous) =>
|
|
@@ -435,8 +525,28 @@ export const Combobox = ({
|
|
|
435
525
|
return
|
|
436
526
|
}
|
|
437
527
|
|
|
528
|
+
const isSeeding = pendingSeedIndex.current !== null
|
|
529
|
+
|
|
530
|
+
if (
|
|
531
|
+
isSeeding &&
|
|
532
|
+
pendingSeedIndex.current !== resolvedActiveIndex
|
|
533
|
+
) {
|
|
534
|
+
// The seeded index has not reached this render yet. Scrolling the
|
|
535
|
+
// stale highlight now would drag the list off the chosen row.
|
|
536
|
+
return
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
pendingSeedIndex.current = null
|
|
540
|
+
|
|
541
|
+
// The open seed centres its row; an arrow move only pulls the next
|
|
542
|
+
// one just into view. "nearest" on open would park the chosen row
|
|
543
|
+
// against the panel's bottom edge with nothing after it, so the
|
|
544
|
+
// neighbours the list was reopened to reach stay off screen.
|
|
438
545
|
if (isWindowed) {
|
|
439
|
-
rowVirtualizer.scrollToIndex(
|
|
546
|
+
rowVirtualizer.scrollToIndex(
|
|
547
|
+
resolvedActiveIndex,
|
|
548
|
+
isSeeding ? { align: "center" } : undefined,
|
|
549
|
+
)
|
|
440
550
|
|
|
441
551
|
return
|
|
442
552
|
}
|
|
@@ -446,7 +556,9 @@ export const Combobox = ({
|
|
|
446
556
|
?.querySelector(
|
|
447
557
|
`#${CSS.escape(`${listboxId}-opt-${activeValue}`)}`,
|
|
448
558
|
)
|
|
449
|
-
?.scrollIntoView({
|
|
559
|
+
?.scrollIntoView({
|
|
560
|
+
block: isSeeding ? "center" : "nearest",
|
|
561
|
+
})
|
|
450
562
|
}
|
|
451
563
|
}, [
|
|
452
564
|
resolvedActiveIndex,
|
|
@@ -508,14 +620,12 @@ export const Combobox = ({
|
|
|
508
620
|
element.setAttribute("aria-expanded", "true")
|
|
509
621
|
element.setAttribute("aria-controls", listboxId)
|
|
510
622
|
|
|
511
|
-
if (
|
|
623
|
+
if (activeDescendantId === undefined) {
|
|
512
624
|
element.removeAttribute("aria-activedescendant")
|
|
513
625
|
} else {
|
|
514
|
-
// Inlined rather than via `optionDomId` so the effect depends on
|
|
515
|
-
// the stable `listboxId`, not a per-render closure.
|
|
516
626
|
element.setAttribute(
|
|
517
627
|
"aria-activedescendant",
|
|
518
|
-
|
|
628
|
+
activeDescendantId,
|
|
519
629
|
)
|
|
520
630
|
}
|
|
521
631
|
} else {
|
|
@@ -526,7 +636,7 @@ export const Combobox = ({
|
|
|
526
636
|
}, [
|
|
527
637
|
isAttached,
|
|
528
638
|
isVisible,
|
|
529
|
-
|
|
639
|
+
activeDescendantId,
|
|
530
640
|
listboxId,
|
|
531
641
|
inputRef,
|
|
532
642
|
])
|
|
@@ -617,9 +727,7 @@ export const Combobox = ({
|
|
|
617
727
|
<div className="flex items-center gap-1 border-border-subtle border-b px-3 py-2">
|
|
618
728
|
<input
|
|
619
729
|
aria-activedescendant={
|
|
620
|
-
|
|
621
|
-
? undefined
|
|
622
|
-
: optionDomId(activeValue)
|
|
730
|
+
activeDescendantId
|
|
623
731
|
}
|
|
624
732
|
aria-autocomplete="list"
|
|
625
733
|
aria-controls={listboxId}
|