@charcuterie/ui 2.10.2 → 2.12.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.
Files changed (51) hide show
  1. package/dist/Combobox/Combobox.d.ts.map +1 -1
  2. package/dist/Combobox/Combobox.js +5 -1
  3. package/dist/Combobox/Combobox.js.map +1 -1
  4. package/dist/Combobox/ComboboxOption.d.ts.map +1 -1
  5. package/dist/Combobox/ComboboxOption.js +1 -1
  6. package/dist/Combobox/ComboboxOption.js.map +1 -1
  7. package/dist/Overlay/useAnchoredOverlay.d.ts +9 -1
  8. package/dist/Overlay/useAnchoredOverlay.d.ts.map +1 -1
  9. package/dist/Overlay/useAnchoredOverlay.js +11 -5
  10. package/dist/Overlay/useAnchoredOverlay.js.map +1 -1
  11. package/dist/Toolbar/Toolbar.d.ts +156 -0
  12. package/dist/Toolbar/Toolbar.d.ts.map +1 -0
  13. package/dist/Toolbar/Toolbar.js +169 -0
  14. package/dist/Toolbar/Toolbar.js.map +1 -0
  15. package/dist/Toolbar/ToolbarSlot.d.ts +44 -0
  16. package/dist/Toolbar/ToolbarSlot.d.ts.map +1 -0
  17. package/dist/Toolbar/ToolbarSlot.js +69 -0
  18. package/dist/Toolbar/ToolbarSlot.js.map +1 -0
  19. package/dist/Toolbar/chooseVisibleCount.d.ts +38 -0
  20. package/dist/Toolbar/chooseVisibleCount.d.ts.map +1 -0
  21. package/dist/Toolbar/chooseVisibleCount.js +69 -0
  22. package/dist/Toolbar/chooseVisibleCount.js.map +1 -0
  23. package/dist/Toolbar/useToolbarOverflow.d.ts +49 -0
  24. package/dist/Toolbar/useToolbarOverflow.d.ts.map +1 -0
  25. package/dist/Toolbar/useToolbarOverflow.js +157 -0
  26. package/dist/Toolbar/useToolbarOverflow.js.map +1 -0
  27. package/dist/index.d.ts +3 -0
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +2 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/testing/expectAgentDrivable.d.ts.map +1 -1
  32. package/dist/testing/expectAgentDrivable.js +32 -7
  33. package/dist/testing/expectAgentDrivable.js.map +1 -1
  34. package/package.json +2 -2
  35. package/src/Combobox/Combobox.stories.tsx +80 -1
  36. package/src/Combobox/Combobox.test.tsx +55 -0
  37. package/src/Combobox/Combobox.tsx +5 -1
  38. package/src/Combobox/ComboboxOption.tsx +19 -8
  39. package/src/Overlay/useAnchoredOverlay.ts +31 -4
  40. package/src/Toolbar/Toolbar.mdx +126 -0
  41. package/src/Toolbar/Toolbar.stories.tsx +347 -0
  42. package/src/Toolbar/Toolbar.test.tsx +286 -0
  43. package/src/Toolbar/Toolbar.tsx +461 -0
  44. package/src/Toolbar/ToolbarSlot.tsx +122 -0
  45. package/src/Toolbar/chooseVisibleCount.test.ts +92 -0
  46. package/src/Toolbar/chooseVisibleCount.ts +92 -0
  47. package/src/Toolbar/useToolbarOverflow.ts +229 -0
  48. package/src/icons.storyHelpers.tsx +23 -0
  49. package/src/index.ts +8 -0
  50. package/src/sourceRules.test.ts +7 -1
  51. package/src/testing/expectAgentDrivable.ts +50 -20
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from "react";
3
+ /**
4
+ * Every focusable a toolbar knows how to hand a tab stop to.
5
+ *
6
+ * `[tabindex]` carries **no** `:not([tabindex="-1"])` clause, unlike
7
+ * the usual copy of this selector: the whole job here is to move a
8
+ * tab stop between elements, so an element this slot has already
9
+ * pushed out of the tab order still has to be findable to be let
10
+ * back in.
11
+ */
12
+ const FOCUSABLE_SELECTOR = "a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]";
13
+ /**
14
+ * One member of the toolbar's roving group: an action the toolbar
15
+ * rendered, or a control the caller handed in.
16
+ *
17
+ * Its own file because **registration is an effect**, and an effect
18
+ * cannot run in a loop — the same reason `MenuAction`, `TabTrigger`
19
+ * and `AccordionSection` are separate files.
20
+ *
21
+ * ### Why the tab stop is written imperatively
22
+ *
23
+ * Every other roving group in this library passes `tabIndex` as a
24
+ * prop, because it renders its own members. A toolbar does not: a
25
+ * `control` item is whatever the app already has — a `Switch`, a
26
+ * `ColorSchemeSwitcher`, a `SegmentedControl` — and most components
27
+ * in this library do not forward a `tabIndex` prop at all. Cloning
28
+ * one onto them would compile, do nothing, and leave the bar with
29
+ * one tab stop per control, which is precisely the APG violation
30
+ * this component exists to fix (mux-magic's `role="toolbar"` is six
31
+ * sequential tab stops).
32
+ *
33
+ * So the slot finds the one focusable in its subtree and writes
34
+ * `tabIndex` onto it. React never sets that attribute on these
35
+ * elements, so there is no second writer to fight with.
36
+ *
37
+ * A control holding **more than one** focusable is a nested
38
+ * composite the toolbar does not manage; only the first is given
39
+ * the tab stop, and `Toolbar.mdx` says so.
40
+ */
41
+ export const ToolbarSlot = ({ children, isDisabled = false, itemKey, register, tabIndex, trackElement, trackFocusable, }) => {
42
+ const slotRef = useRef(null);
43
+ useEffect(() => {
44
+ if (isDisabled) {
45
+ return;
46
+ }
47
+ return register(itemKey);
48
+ }, [isDisabled, itemKey, register]);
49
+ useEffect(() => {
50
+ // The first focusable that is not an `aria-hidden` prop —
51
+ // floating-ui plants focus guards (`<span tabindex="0">`) either
52
+ // side of an overlay's reference element, and the overflow
53
+ // trigger *is* one, so a bare `querySelector` can hand back a
54
+ // guard and give the tab stop to something no user can see.
55
+ const focusable = Array.from(slotRef.current?.querySelectorAll(FOCUSABLE_SELECTOR) ?? []).find((candidate) => candidate.getAttribute("aria-hidden") !== "true") ?? null;
56
+ trackFocusable(itemKey, focusable);
57
+ if (focusable && !isDisabled) {
58
+ focusable.tabIndex = tabIndex;
59
+ }
60
+ return () => {
61
+ trackFocusable(itemKey, null);
62
+ };
63
+ }, [isDisabled, itemKey, tabIndex, trackFocusable]);
64
+ return (_jsx("div", { className: "flex shrink-0 items-center", ref: (element) => {
65
+ slotRef.current = element;
66
+ trackElement(itemKey, element);
67
+ }, children: children }));
68
+ };
69
+ //# sourceMappingURL=ToolbarSlot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolbarSlot.js","sourceRoot":"","sources":["../../src/Toolbar/ToolbarSlot.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAEzC;;;;;;;;GAQG;AACH,MAAM,kBAAkB,GACtB,sHAAsH,CAAA;AAsBxH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAC1B,QAAQ,EACR,UAAU,GAAG,KAAK,EAClB,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,cAAc,GACG,EAAa,EAAE;IAChC,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,EAAE,CAAC;YACf,OAAM;QACR,CAAC;QAED,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEnC,SAAS,CAAC,GAAG,EAAE;QACb,0DAA0D;QAC1D,iEAAiE;QACjE,2DAA2D;QAC3D,8DAA8D;QAC9D,4DAA4D;QAC5D,MAAM,SAAS,GACb,KAAK,CAAC,IAAI,CACR,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAC/B,kBAAkB,CACnB,IAAI,EAAE,CACR,CAAC,IAAI,CACJ,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,MAAM,CACnD,IAAI,IAAI,CAAA;QAEX,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAElC,IAAI,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7B,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAC/B,CAAC;QAED,OAAO,GAAG,EAAE;YACV,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAC/B,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAA;IAEnD,OAAO,CACL,cACE,SAAS,EAAC,4BAA4B,EACtC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE;YACf,OAAO,CAAC,OAAO,GAAG,OAAO,CAAA;YAEzB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAChC,CAAC,YAEA,QAAQ,GACL,CACP,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * The collapse rule: how many of a toolbar's items fit, given what
3
+ * they measured.
4
+ *
5
+ * Pure arithmetic, in its own file for the same reason
6
+ * `chooseColumns` is — the rule is a table of numbers anyone can
7
+ * check in Node, and everything that needs a browser is quarantined
8
+ * in `useToolbarOverflow`.
9
+ *
10
+ * ## Priority is the array order
11
+ *
12
+ * `itemInlineSizes` is in **priority order, highest first**, which
13
+ * is also paint order: the toolbar collapses from the end. One axis
14
+ * rather than two, because a separate `priority` number and a
15
+ * separate display order is a pair a caller can put out of step,
16
+ * and neither mux-magic nor plex-channels has *any* ordering — they
17
+ * hardcode which controls live in the bar and which live in the
18
+ * popover, at every width.
19
+ *
20
+ * ## Why the trigger's width is an input
21
+ *
22
+ * The overflow trigger only exists once something has collapsed, so
23
+ * the question is not "how many fit" but "how many fit **beside a
24
+ * trigger** — unless all of them fit without one". Ignoring that is
25
+ * how an overflow control ends up wrapping to a second line at
26
+ * exactly the width where it first appears.
27
+ */
28
+ export declare const chooseVisibleCount: ({ availableInlineSize, gapInlineSize, itemInlineSizes, triggerInlineSize, }: {
29
+ /** The room the bar has, in CSS px. */
30
+ availableInlineSize: number;
31
+ /** The row's `column-gap`, in CSS px. */
32
+ gapInlineSize: number;
33
+ /** Each item's measured inline size, priority order, in CSS px. */
34
+ itemInlineSizes: readonly number[];
35
+ /** The overflow trigger's inline size, in CSS px. */
36
+ triggerInlineSize: number;
37
+ }) => number;
38
+ //# sourceMappingURL=chooseVisibleCount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chooseVisibleCount.d.ts","sourceRoot":"","sources":["../../src/Toolbar/chooseVisibleCount.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,eAAO,MAAM,kBAAkB,GAAI,6EAKhC;IACD,uCAAuC;IACvC,mBAAmB,EAAE,MAAM,CAAA;IAC3B,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAA;IACrB,mEAAmE;IACnE,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,qDAAqD;IACrD,iBAAiB,EAAE,MAAM,CAAA;CAC1B,KAAG,MAiDH,CAAA"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * The collapse rule: how many of a toolbar's items fit, given what
3
+ * they measured.
4
+ *
5
+ * Pure arithmetic, in its own file for the same reason
6
+ * `chooseColumns` is — the rule is a table of numbers anyone can
7
+ * check in Node, and everything that needs a browser is quarantined
8
+ * in `useToolbarOverflow`.
9
+ *
10
+ * ## Priority is the array order
11
+ *
12
+ * `itemInlineSizes` is in **priority order, highest first**, which
13
+ * is also paint order: the toolbar collapses from the end. One axis
14
+ * rather than two, because a separate `priority` number and a
15
+ * separate display order is a pair a caller can put out of step,
16
+ * and neither mux-magic nor plex-channels has *any* ordering — they
17
+ * hardcode which controls live in the bar and which live in the
18
+ * popover, at every width.
19
+ *
20
+ * ## Why the trigger's width is an input
21
+ *
22
+ * The overflow trigger only exists once something has collapsed, so
23
+ * the question is not "how many fit" but "how many fit **beside a
24
+ * trigger** — unless all of them fit without one". Ignoring that is
25
+ * how an overflow control ends up wrapping to a second line at
26
+ * exactly the width where it first appears.
27
+ */
28
+ export const chooseVisibleCount = ({ availableInlineSize, gapInlineSize, itemInlineSizes, triggerInlineSize, }) => {
29
+ const itemCount = itemInlineSizes.length;
30
+ if (itemCount === 0) {
31
+ return 0;
32
+ }
33
+ /**
34
+ * Nothing measured yet — show everything.
35
+ *
36
+ * The safe direction to be wrong in for one frame, and the same
37
+ * one `useAdaptiveColumns` argues from the other end: a bar that
38
+ * starts whole and collapses over-draws, where a bar that starts
39
+ * collapsed hides controls that were there. It is also what makes
40
+ * the first measurement possible at all, because an item that was
41
+ * never mounted has no width to read.
42
+ */
43
+ if (availableInlineSize <= 0) {
44
+ return itemCount;
45
+ }
46
+ const measure = (count, extra) => itemInlineSizes
47
+ .slice(0, count)
48
+ .reduce((total, size) => total + size, 0) +
49
+ gapInlineSize *
50
+ Math.max(count + (extra > 0 ? 1 : 0) - 1, 0) +
51
+ extra;
52
+ if (measure(itemCount, 0) <= availableInlineSize) {
53
+ return itemCount;
54
+ }
55
+ // Everything below here has an overflow trigger in the row, so
56
+ // every candidate pays for it. Counting down rather than up
57
+ // because the answer is usually near the top.
58
+ for (let count = itemCount - 1; count > 0; count -= 1) {
59
+ if (measure(count, triggerInlineSize) <=
60
+ availableInlineSize) {
61
+ return count;
62
+ }
63
+ }
64
+ // Not even one item and the trigger fit. Everything collapses;
65
+ // the trigger alone may still overflow, and a bar narrower than
66
+ // one control is a layout problem no collapse rule can solve.
67
+ return 0;
68
+ };
69
+ //# sourceMappingURL=chooseVisibleCount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chooseVisibleCount.js","sourceRoot":"","sources":["../../src/Toolbar/chooseVisibleCount.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,iBAAiB,GAUlB,EAAU,EAAE;IACX,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAA;IAExC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,CAAA;IACV,CAAC;IAED;;;;;;;;;OASG;IACH,IAAI,mBAAmB,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE,CAC/C,eAAe;SACZ,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,CAAC;QAC3C,aAAa;YACX,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9C,KAAK,CAAA;IAEP,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,mBAAmB,EAAE,CAAC;QACjD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,+DAA+D;IAC/D,4DAA4D;IAC5D,8CAA8C;IAC9C,KAAK,IAAI,KAAK,GAAG,SAAS,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,IACE,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC;YACjC,mBAAmB,EACnB,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,gEAAgE;IAChE,8DAA8D;IAC9D,OAAO,CAAC,CAAA;AACV,CAAC,CAAA"}
@@ -0,0 +1,49 @@
1
+ import type { RefObject } from "react";
2
+ /**
3
+ * The measuring half of progressive overflow — `chooseVisibleCount`
4
+ * is the decision, this is the tape measure.
5
+ *
6
+ * ## Measured, not breakpointed
7
+ *
8
+ * mux-magic collapses at a hardcoded `480px` and plex-channels at a
9
+ * hardcoded `760px`, and both numbers are wrong the moment a label
10
+ * gets longer, the density axis changes, or a rail takes half the
11
+ * row. A measured bar has no number to be wrong: it asks the
12
+ * elements how wide they actually are, in the font and density they
13
+ * are actually rendered in.
14
+ *
15
+ * ## One instance, and cached widths
16
+ *
17
+ * An item that has collapsed is **not in the DOM** — that is the
18
+ * whole point, against a mechanism that renders every action twice
19
+ * and hides one with a CSS specificity coin-flip. So its width
20
+ * cannot be re-read while it is away, and it is remembered from
21
+ * when it was last in the bar instead.
22
+ *
23
+ * The first paint is what seeds the cache: every item starts in the
24
+ * bar (`chooseVisibleCount` returns all of them for an unmeasured
25
+ * container), gets measured, and the row collapses **before paint**
26
+ * because the measuring runs in a layout effect. Any item whose
27
+ * width is still unknown forces one more all-visible pass rather
28
+ * than being guessed at — one extra layout pass, and it converges,
29
+ * because a mounted item always measures.
30
+ *
31
+ * ⚠️ **The measured element must not be sized by its own contents.**
32
+ * If the bar shrink-wraps its items, collapsing one narrows the box,
33
+ * which collapses another — a loop with no error anywhere.
34
+ * `Toolbar`'s root is `flex-1 min-w-0` for exactly this reason, the
35
+ * same trap `useAdaptiveColumns` documents about a container capped
36
+ * by its own answer.
37
+ */
38
+ export declare const useToolbarOverflow: ({ itemKeys, }: {
39
+ /** Priority order, highest first. */
40
+ itemKeys: readonly string[];
41
+ }) => {
42
+ containerRef: RefObject<HTMLDivElement | null>;
43
+ /** Callback ref for each item's box. `null` on unmount. */
44
+ trackItem: (key: string, element: HTMLElement | null) => void;
45
+ /** Callback ref for the overflow trigger's box. */
46
+ trackTrigger: (element: HTMLElement | null) => void;
47
+ visibleCount: number;
48
+ };
49
+ //# sourceMappingURL=useToolbarOverflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToolbarOverflow.d.ts","sourceRoot":"","sources":["../../src/Toolbar/useToolbarOverflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAUtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,kBAAkB,GAAI,eAEhC;IACD,qCAAqC;IACrC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAC5B,KAAG;IACF,YAAY,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IAC9C,2DAA2D;IAC3D,SAAS,EAAE,CACT,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,WAAW,GAAG,IAAI,KACxB,IAAI,CAAA;IACT,mDAAmD;IACnD,YAAY,EAAE,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;IACnD,YAAY,EAAE,MAAM,CAAA;CAwKrB,CAAA"}
@@ -0,0 +1,157 @@
1
+ import { useCallback, useLayoutEffect, useRef, useState, } from "react";
2
+ import { chooseVisibleCount } from "./chooseVisibleCount.js";
3
+ /**
4
+ * The measuring half of progressive overflow — `chooseVisibleCount`
5
+ * is the decision, this is the tape measure.
6
+ *
7
+ * ## Measured, not breakpointed
8
+ *
9
+ * mux-magic collapses at a hardcoded `480px` and plex-channels at a
10
+ * hardcoded `760px`, and both numbers are wrong the moment a label
11
+ * gets longer, the density axis changes, or a rail takes half the
12
+ * row. A measured bar has no number to be wrong: it asks the
13
+ * elements how wide they actually are, in the font and density they
14
+ * are actually rendered in.
15
+ *
16
+ * ## One instance, and cached widths
17
+ *
18
+ * An item that has collapsed is **not in the DOM** — that is the
19
+ * whole point, against a mechanism that renders every action twice
20
+ * and hides one with a CSS specificity coin-flip. So its width
21
+ * cannot be re-read while it is away, and it is remembered from
22
+ * when it was last in the bar instead.
23
+ *
24
+ * The first paint is what seeds the cache: every item starts in the
25
+ * bar (`chooseVisibleCount` returns all of them for an unmeasured
26
+ * container), gets measured, and the row collapses **before paint**
27
+ * because the measuring runs in a layout effect. Any item whose
28
+ * width is still unknown forces one more all-visible pass rather
29
+ * than being guessed at — one extra layout pass, and it converges,
30
+ * because a mounted item always measures.
31
+ *
32
+ * ⚠️ **The measured element must not be sized by its own contents.**
33
+ * If the bar shrink-wraps its items, collapsing one narrows the box,
34
+ * which collapses another — a loop with no error anywhere.
35
+ * `Toolbar`'s root is `flex-1 min-w-0` for exactly this reason, the
36
+ * same trap `useAdaptiveColumns` documents about a container capped
37
+ * by its own answer.
38
+ */
39
+ export const useToolbarOverflow = ({ itemKeys, }) => {
40
+ const containerRef = useRef(null);
41
+ const itemElements = useRef(new Map());
42
+ const triggerElement = useRef(null);
43
+ const itemInlineSizes = useRef(new Map());
44
+ /**
45
+ * Zero until the trigger has been in the row once.
46
+ *
47
+ * A bar that has never overflowed has no trigger to measure, and
48
+ * the very first decision to collapse is taken without one. It
49
+ * errs the only safe way: with the trigger costed at nothing, the
50
+ * chosen count is at worst one item too many, which resolves on
51
+ * the next pass once the trigger exists and measures.
52
+ */
53
+ const triggerInlineSize = useRef(0);
54
+ const [visibleCount, setVisibleCount] = useState(itemKeys.length);
55
+ /**
56
+ * Written during render, and deliberately.
57
+ *
58
+ * `itemKeys` is a fresh array on every render of the caller, so
59
+ * depending on it would give `measure` a new identity each time
60
+ * — which re-subscribes the `ResizeObserver` on every render. A
61
+ * ref is a pure cache here: a render React throws away and
62
+ * re-runs writes the same value, and nothing observable happens.
63
+ * Same reasoning as `useClonedChild`'s `useShallowStable`.
64
+ */
65
+ const itemKeysRef = useRef(itemKeys);
66
+ itemKeysRef.current = itemKeys;
67
+ const measure = useCallback(() => {
68
+ const container = containerRef.current;
69
+ if (!container) {
70
+ return;
71
+ }
72
+ const keys = itemKeysRef.current;
73
+ for (const [key, element] of itemElements.current) {
74
+ itemInlineSizes.current.set(key, element.getBoundingClientRect().width);
75
+ }
76
+ if (triggerElement.current) {
77
+ triggerInlineSize.current =
78
+ triggerElement.current.getBoundingClientRect().width;
79
+ }
80
+ const hasEveryWidth = keys.every((key) => itemInlineSizes.current.has(key));
81
+ const next = hasEveryWidth
82
+ ? chooseVisibleCount({
83
+ availableInlineSize: container.clientWidth,
84
+ gapInlineSize: Number.parseFloat(getComputedStyle(container).columnGap) || 0,
85
+ itemInlineSizes: keys.map((key) => itemInlineSizes.current.get(key) ?? 0),
86
+ triggerInlineSize: triggerInlineSize.current,
87
+ })
88
+ : // An item that has never been mounted has no width. Show
89
+ // everything for one pass so it can be measured, rather
90
+ // than guessing a number and collapsing around it.
91
+ keys.length;
92
+ setVisibleCount((current) => current === next ? current : next);
93
+ }, []);
94
+ /**
95
+ * A layout effect, not an effect: it runs after the DOM is
96
+ * written and **before the browser paints**, so the collapse that
97
+ * follows the first measurement is never a visible flash of a bar
98
+ * too wide for its box.
99
+ *
100
+ * No dependency array — it re-measures after every render, which
101
+ * is what keeps a changed label or a new item honest. It is cheap
102
+ * and it converges: `setVisibleCount` bails on an unchanged
103
+ * answer, so a stable bar renders once and stops.
104
+ */
105
+ useLayoutEffect(measure);
106
+ useLayoutEffect(() => {
107
+ const container = containerRef.current;
108
+ if (!container) {
109
+ return;
110
+ }
111
+ /**
112
+ * Only when the **box** changed.
113
+ *
114
+ * A `ResizeObserver` delivers a record on observe and again for
115
+ * every content reflow inside the frame it fired in, and
116
+ * measuring from each one is what raises chromium's
117
+ * "ResizeObserver loop completed with undelivered
118
+ * notifications" — the callback doing work that schedules more
119
+ * observation. The item-side re-measure is already covered by
120
+ * the layout effect above; this subscription exists for one
121
+ * question, which is whether the container got wider or
122
+ * narrower.
123
+ */
124
+ let lastInlineSize = -1;
125
+ const observer = new ResizeObserver(([entry]) => {
126
+ const inlineSize = entry?.contentRect.width ??
127
+ container.getBoundingClientRect().width;
128
+ if (inlineSize === lastInlineSize) {
129
+ return;
130
+ }
131
+ lastInlineSize = inlineSize;
132
+ measure();
133
+ });
134
+ observer.observe(container);
135
+ return () => {
136
+ observer.disconnect();
137
+ };
138
+ }, [measure]);
139
+ const trackItem = useCallback((key, element) => {
140
+ if (element) {
141
+ itemElements.current.set(key, element);
142
+ }
143
+ else {
144
+ itemElements.current.delete(key);
145
+ }
146
+ }, []);
147
+ const trackTrigger = useCallback((element) => {
148
+ triggerElement.current = element;
149
+ }, []);
150
+ return {
151
+ containerRef,
152
+ trackItem,
153
+ trackTrigger,
154
+ visibleCount,
155
+ };
156
+ };
157
+ //# sourceMappingURL=useToolbarOverflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToolbarOverflow.js","sourceRoot":"","sources":["../../src/Toolbar/useToolbarOverflow.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -136,6 +136,9 @@ export type { ToastRecord, ToastRegionProps, } from "./Toast/ToastRegion.tsx";
136
136
  export { ToastRegion } from "./Toast/ToastRegion.tsx";
137
137
  export type { ToastStatus } from "./Toast/toastLifecycle.ts";
138
138
  export { toastTransitions } from "./Toast/toastLifecycle.ts";
139
+ export { chooseVisibleCount } from "./Toolbar/chooseVisibleCount.ts";
140
+ export type { ToolbarAction, ToolbarControl, ToolbarItem, ToolbarProps, } from "./Toolbar/Toolbar.tsx";
141
+ export { Toolbar } from "./Toolbar/Toolbar.tsx";
139
142
  export type { TooltipProps } from "./Tooltip/Tooltip.tsx";
140
143
  export { Tooltip } from "./Tooltip/Tooltip.tsx";
141
144
  export { toClassName } from "./toClassName.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,YAAY,EACV,qBAAqB,EACrB,aAAa,EACb,cAAc,GACf,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,0BAA0B,EAC1B,iCAAiC,EACjC,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,iCAAiC,CAAA;AACxC,YAAY,EACV,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,sCAAsC,CAAA;AAC7C,YAAY,EACV,UAAU,EACV,SAAS,GACV,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,YAAY,EACV,WAAW,EACX,SAAS,EACT,WAAW,GACZ,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,YAAY,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAA;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAA;AACnF,YAAY,EACV,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,2CAA2C,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAA;AAC7E,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,WAAW,EACX,UAAU,GACX,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,YAAY,EACV,eAAe,EACf,cAAc,GACf,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,YAAY,EACV,WAAW,EACX,YAAY,GACb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,YAAY,EACV,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAA;AACnF,YAAY,EACV,OAAO,EACP,cAAc,GACf,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,YAAY,EACV,cAAc,EACd,cAAc,GACf,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,YAAY,EACV,QAAQ,EACR,SAAS,GACV,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,YAAY,EACV,gBAAgB,EAChB,eAAe,GAChB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC3D,YAAY,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,gCAAgC,CAAA;AACvC,YAAY,EACV,eAAe,EACf,SAAS,GACV,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,YAAY,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,GACT,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EACL,kBAAkB,EAClB,aAAa,GACd,MAAM,qCAAqC,CAAA;AAC5C,YAAY,EACV,mBAAmB,EACnB,eAAe,GAChB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,YAAY,EACV,qBAAqB,EACrB,aAAa,GACd,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAA;AAC1E,YAAY,EACV,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,WAAW,GACZ,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,YAAY,EACV,YAAY,EACZ,UAAU,GACX,MAAM,yBAAyB,CAAA;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,YAAY,EACV,aAAa,EACb,aAAa,GACd,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,YAAY,EACV,wBAAwB,EACxB,aAAa,GACd,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAA;AACnF,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,UAAU,GACX,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EACL,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,OAAO,EACP,cAAc,EACd,eAAe,EACf,SAAS,GACV,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,YAAY,EACV,kBAAkB,EAClB,aAAa,GACd,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,YAAY,EACV,WAAW,EACX,gBAAgB,GACjB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,YAAY,EACV,aAAa,EACb,cAAc,EACd,WAAW,EACX,YAAY,GACb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAA"}
package/dist/index.js CHANGED
@@ -84,6 +84,8 @@ export { TextLink } from "./TextLink/TextLink.js";
84
84
  export { Toast } from "./Toast/Toast.js";
85
85
  export { ToastRegion } from "./Toast/ToastRegion.js";
86
86
  export { toastTransitions } from "./Toast/toastLifecycle.js";
87
+ export { chooseVisibleCount } from "./Toolbar/chooseVisibleCount.js";
88
+ export { Toolbar } from "./Toolbar/Toolbar.js";
87
89
  export { Tooltip } from "./Tooltip/Tooltip.js";
88
90
  export { toClassName } from "./toClassName.js";
89
91
  export { VisuallyHidden } from "./VisuallyHidden/VisuallyHidden.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"expectAgentDrivable.d.ts","sourceRoot":"","sources":["../../src/testing/expectAgentDrivable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,cAAc,EAAE,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,KACjC,WAAW,EAAE,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AA6FD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,YAAY,EACpB,QAAQ,WAAW,KAClB,WAkHF,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,GACjC,SAAS,OAAO,KACf,IAMF,CAAA"}
1
+ {"version":3,"file":"expectAgentDrivable.d.ts","sourceRoot":"","sources":["../../src/testing/expectAgentDrivable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,cAAc,EAAE,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,KACjC,WAAW,EAAE,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAwHD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,YAAY,EACpB,QAAQ,WAAW,KAClB,WAqHF,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,GACjC,SAAS,OAAO,KACf,IAMF,CAAA"}
@@ -62,14 +62,32 @@ const COMPOSITE_MEMBER_ROLES = new Set([
62
62
  "tab",
63
63
  "treeitem",
64
64
  ]);
65
+ /**
66
+ * A toolbar's members are ordinary controls.
67
+ *
68
+ * Every other composite here names its members by role — a `tab`, an
69
+ * `option`, a `menuitem`. A `role="toolbar"` names none of them: the
70
+ * APG's toolbar holds plain buttons, toggle buttons, a radio group,
71
+ * a menu button, and it is the *container* that declares the
72
+ * pattern. So `toolbar` sat in `COMPOSITE_ROLES` from M4 and was
73
+ * unreachable, because nothing inside one ever carried a member
74
+ * role — a roving toolbar was rejected outright with "has a negative
75
+ * tabindex", which is the assertion this helper makes for a
76
+ * *standalone* button and precisely the wrong one here.
77
+ */
78
+ const TOOLBAR_MEMBER_SELECTOR = "a[href], button, input, select, textarea, [tabindex]";
79
+ const getGroupMembers = (group) => group.getAttribute("role") === "toolbar"
80
+ ? Array.from(group.querySelectorAll(TOOLBAR_MEMBER_SELECTOR))
81
+ : Array.from(group.querySelectorAll("[role]")).filter((member) => COMPOSITE_MEMBER_ROLES.has(member.getAttribute("role") ?? ""));
65
82
  const getCompositeGroup = (element) => {
66
- if (!COMPOSITE_MEMBER_ROLES.has(element.getAttribute("role") ?? "")) {
67
- return null;
68
- }
83
+ const isMemberByRole = COMPOSITE_MEMBER_ROLES.has(element.getAttribute("role") ?? "");
69
84
  let current = element.parentElement;
70
85
  while (current) {
71
- if (COMPOSITE_ROLES.has(current.getAttribute("role") ?? "")) {
72
- return current;
86
+ const groupRole = current.getAttribute("role") ?? "";
87
+ if (COMPOSITE_ROLES.has(groupRole)) {
88
+ return groupRole === "toolbar" || isMemberByRole
89
+ ? current
90
+ : null;
73
91
  }
74
92
  current = current.parentElement;
75
93
  }
@@ -136,9 +154,16 @@ export const expectAgentDrivable = (canvas, target) => {
136
154
  // *group* reachable, exactly once". Zero tab stops strands the
137
155
  // whole widget; several put every member back in the tab
138
156
  // order, which is the pattern not being implemented at all.
139
- const tabStops = Array.from(group.querySelectorAll("[role]")).filter((member) => COMPOSITE_MEMBER_ROLES.has(member.getAttribute("role") ?? "") &&
140
- !member.hasAttribute("disabled") &&
157
+ const tabStops = getGroupMembers(group).filter((member) => !member.hasAttribute("disabled") &&
141
158
  member.getAttribute("aria-disabled") !== "true" &&
159
+ // floating-ui plants `aria-hidden` focus guards
160
+ // (`<span tabindex="0">`) either side of an overlay's
161
+ // reference element, and a toolbar holding an overflow
162
+ // trigger therefore contains two. They are not members of
163
+ // anything — a screen reader and an agent both skip them —
164
+ // and counting them reported a correct roving group as
165
+ // having three tab stops.
166
+ !getIsHiddenFromAgents(member) &&
142
167
  member.tabIndex >= 0);
143
168
  if (tabStops.length !== 1) {
144
169
  throw new Error(`Not agent-drivable: ${describeTarget(target)} is inside a \`${group.getAttribute("role")}\` with ${tabStops.length} tab stops. A roving-tabindex group needs exactly one — Tab enters and leaves it once, and the arrow keys move within it.`);
@@ -1 +1 @@
1
- {"version":3,"file":"expectAgentDrivable.js","sourceRoot":"","sources":["../../src/testing/expectAgentDrivable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expectAgentDrivable.js","sourceRoot":"","sources":["../../src/testing/expectAgentDrivable.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@charcuterie/ui",
3
- "version": "2.10.2",
3
+ "version": "2.12.0",
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",
@@ -48,7 +48,7 @@
48
48
  "typecheck": "tsc --noEmit"
49
49
  },
50
50
  "dependencies": {
51
- "@charcuterie/logic": "1.2.0",
51
+ "@charcuterie/logic": "1.3.0",
52
52
  "@charcuterie/tokens": "1.5.0",
53
53
  "@floating-ui/react": "^0.27.20",
54
54
  "@tanstack/react-virtual": "^3.13.12"