@apostel/bedrock 0.2.0 → 0.2.1

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 (65) hide show
  1. package/dist/accordion/controlled-root.d.ts +5 -2
  2. package/dist/accordion/controlled-root.d.ts.map +1 -1
  3. package/dist/accordion/controlled-root.js +5 -2
  4. package/dist/accordion/controlled-root.js.map +1 -1
  5. package/dist/capabilities.d.ts +11 -1
  6. package/dist/capabilities.d.ts.map +1 -1
  7. package/dist/capabilities.js +13 -1
  8. package/dist/capabilities.js.map +1 -1
  9. package/dist/collapsible/controlled-root.d.ts +10 -7
  10. package/dist/collapsible/controlled-root.d.ts.map +1 -1
  11. package/dist/collapsible/controlled-root.js +10 -7
  12. package/dist/collapsible/controlled-root.js.map +1 -1
  13. package/dist/collapsible/shared.d.ts +3 -2
  14. package/dist/collapsible/shared.d.ts.map +1 -1
  15. package/dist/collapsible/shared.js +3 -2
  16. package/dist/collapsible/shared.js.map +1 -1
  17. package/dist/create-controlled-root.d.ts +12 -4
  18. package/dist/create-controlled-root.d.ts.map +1 -1
  19. package/dist/create-controlled-root.js +15 -5
  20. package/dist/create-controlled-root.js.map +1 -1
  21. package/dist/hover-card/controlled-root.d.ts.map +1 -1
  22. package/dist/hover-card/controlled-root.js +2 -0
  23. package/dist/hover-card/controlled-root.js.map +1 -1
  24. package/dist/hover-card/root.d.ts.map +1 -1
  25. package/dist/hover-card/root.js +2 -0
  26. package/dist/hover-card/root.js.map +1 -1
  27. package/dist/interest.d.ts +4 -2
  28. package/dist/interest.d.ts.map +1 -1
  29. package/dist/interest.js +58 -19
  30. package/dist/interest.js.map +1 -1
  31. package/dist/popover/controlled-root.d.ts +1 -1
  32. package/dist/popover/controlled-root.d.ts.map +1 -1
  33. package/dist/popover/controlled-root.js +3 -2
  34. package/dist/popover/controlled-root.js.map +1 -1
  35. package/dist/popover/root.d.ts +1 -1
  36. package/dist/popover/root.d.ts.map +1 -1
  37. package/dist/popover/root.js +3 -2
  38. package/dist/popover/root.js.map +1 -1
  39. package/dist/popover/shared.d.ts +12 -0
  40. package/dist/popover/shared.d.ts.map +1 -1
  41. package/dist/popover/shared.js +16 -0
  42. package/dist/popover/shared.js.map +1 -1
  43. package/dist/tooltip/controlled-root.d.ts.map +1 -1
  44. package/dist/tooltip/controlled-root.js +2 -0
  45. package/dist/tooltip/controlled-root.js.map +1 -1
  46. package/dist/tooltip/parts.d.ts +1 -1
  47. package/dist/tooltip/parts.d.ts.map +1 -1
  48. package/dist/tooltip/parts.js +24 -1
  49. package/dist/tooltip/parts.js.map +1 -1
  50. package/dist/tooltip/root.d.ts.map +1 -1
  51. package/dist/tooltip/root.js +2 -0
  52. package/dist/tooltip/root.js.map +1 -1
  53. package/dist/tooltip/shared.d.ts +2 -1
  54. package/dist/tooltip/shared.d.ts.map +1 -1
  55. package/dist/tooltip/shared.js.map +1 -1
  56. package/dist/tooltip/use-controlled-interest-root.d.ts +2 -0
  57. package/dist/tooltip/use-controlled-interest-root.d.ts.map +1 -1
  58. package/dist/tooltip/use-controlled-interest-root.js +4 -2
  59. package/dist/tooltip/use-controlled-interest-root.js.map +1 -1
  60. package/dist/tooltip/use-interest-root.d.ts +2 -0
  61. package/dist/tooltip/use-interest-root.d.ts.map +1 -1
  62. package/dist/tooltip/use-interest-root.js +5 -2
  63. package/dist/tooltip/use-interest-root.js.map +1 -1
  64. package/package.json +1 -1
  65. package/skills/migrate-to-bedrock/SKILL.md +11 -3
@@ -12,8 +12,11 @@ export interface ControlledAccordionRootProps extends Omit<ComponentPropsWithRef
12
12
  * Items publish their value as a data attribute; nothing about that costs the
13
13
  * plain root anything.
14
14
  *
15
- * `<details>` has no cancelable toggle, so this cannot refuse before the fact:
16
- * the disclosure moves, you are told, and it moves back if you decline.
15
+ * `<details>` has no cancelable toggle, so this cannot refuse: the disclosure
16
+ * moves, you are told, and it stays moved. The walk below runs when `value`
17
+ * changes, and declining means leaving `value` alone — so a declined item is
18
+ * left disagreeing with the prop. Same gap as Collapsible, same reasoning, in
19
+ * `create-controlled-root.ts` and docs/known-gaps.md.
17
20
  */
18
21
  export declare function AccordionRoot({ asChild, children, type, value, orientation, onValueChange, ref, ...props }: ControlledAccordionRootProps): import("react").JSX.Element;
19
22
  //# sourceMappingURL=controlled-root.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"controlled-root.d.ts","sourceRoot":"","sources":["../../src/accordion/controlled-root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,qBAAqB,EAE3B,MAAM,OAAO,CAAA;AAGd,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG5C,MAAM,WAAW,4BACf,SAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,EAAE,YAAY;IACxE,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC5B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACxB,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACvC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;CACxD;AAMD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,QAAQ,EACR,IAAe,EACf,KAAK,EACL,WAAwB,EACxB,aAAa,EACb,GAAG,EACH,GAAG,KAAK,EACT,EAAE,4BAA4B,+BAuD9B"}
1
+ {"version":3,"file":"controlled-root.d.ts","sourceRoot":"","sources":["../../src/accordion/controlled-root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,qBAAqB,EAE3B,MAAM,OAAO,CAAA;AAGd,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG5C,MAAM,WAAW,4BACf,SAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,EAAE,YAAY;IACxE,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC5B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACxB,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACvC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;CACxD;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,QAAQ,EACR,IAAe,EACf,KAAK,EACL,WAAwB,EACxB,aAAa,EACb,GAAG,EACH,GAAG,KAAK,EACT,EAAE,4BAA4B,+BAuD9B"}
@@ -12,8 +12,11 @@ function toArray(value) {
12
12
  * Items publish their value as a data attribute; nothing about that costs the
13
13
  * plain root anything.
14
14
  *
15
- * `<details>` has no cancelable toggle, so this cannot refuse before the fact:
16
- * the disclosure moves, you are told, and it moves back if you decline.
15
+ * `<details>` has no cancelable toggle, so this cannot refuse: the disclosure
16
+ * moves, you are told, and it stays moved. The walk below runs when `value`
17
+ * changes, and declining means leaving `value` alone — so a declined item is
18
+ * left disagreeing with the prop. Same gap as Collapsible, same reasoning, in
19
+ * `create-controlled-root.ts` and docs/known-gaps.md.
17
20
  */
18
21
  export function AccordionRoot({ asChild, children, type = 'single', value, orientation = 'vertical', onValueChange, ref, ...props }) {
19
22
  const name = useId();
@@ -1 +1 @@
1
- {"version":3,"file":"controlled-root.js","sourceRoot":"","sources":["../../src/accordion/controlled-root.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controlled-root.js","sourceRoot":"","sources":["../../src/accordion/controlled-root.tsx"],"names":[],"mappings":"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"}
@@ -13,7 +13,15 @@
13
13
  export declare function supportsInterestInvokers(): boolean;
14
14
  /** Anchor positioning. Without it, overlays land where the UA puts them. */
15
15
  export declare function supportsAnchorPositioning(): boolean;
16
- /** `popover=hint`, which layers above an open menu instead of closing it. */
16
+ /**
17
+ * `popover=hint`, which layers above an open menu instead of closing it.
18
+ *
19
+ * Asking is not optional politeness. `popover` is an enumerated attribute whose
20
+ * invalid-value default is **manual**, so an engine that has never heard of
21
+ * `hint` does not ignore it and fall back to `auto` — it reads the element as a
22
+ * popover nothing dismisses. Emitting it unasked costs light dismiss and
23
+ * Escape on every engine but Chrome.
24
+ */
17
25
  export declare function supportsHintPopovers(): boolean;
18
26
  /**
19
27
  * The same test, as a hook, for anything that changes what is rendered.
@@ -23,4 +31,6 @@ export declare function supportsHintPopovers(): boolean;
23
31
  * the hydrating render and the real one immediately after.
24
32
  */
25
33
  export declare function useSupportsInterestInvokers(): boolean;
34
+ /** Likewise: the answer decides which attribute value is written. */
35
+ export declare function useSupportsHintPopovers(): boolean;
26
36
  //# sourceMappingURL=capabilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED,4EAA4E;AAC5E,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,IAAI,OAAO,CAM9C;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,IAAI,OAAO,CAErD"}
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED,4EAA4E;AAC5E,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAM9C;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,IAAI,OAAO,CAErD;AAED,qEAAqE;AACrE,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD"}
@@ -20,7 +20,15 @@ export function supportsInterestInvokers() {
20
20
  export function supportsAnchorPositioning() {
21
21
  return hasDom && CSS.supports('anchor-name', '--a');
22
22
  }
23
- /** `popover=hint`, which layers above an open menu instead of closing it. */
23
+ /**
24
+ * `popover=hint`, which layers above an open menu instead of closing it.
25
+ *
26
+ * Asking is not optional politeness. `popover` is an enumerated attribute whose
27
+ * invalid-value default is **manual**, so an engine that has never heard of
28
+ * `hint` does not ignore it and fall back to `auto` — it reads the element as a
29
+ * popover nothing dismisses. Emitting it unasked costs light dismiss and
30
+ * Escape on every engine but Chrome.
31
+ */
24
32
  export function supportsHintPopovers() {
25
33
  if (!hasDom)
26
34
  return false;
@@ -38,4 +46,8 @@ export function supportsHintPopovers() {
38
46
  export function useSupportsInterestInvokers() {
39
47
  return useSyncExternalStore(noopSubscribe, supportsInterestInvokers, () => false);
40
48
  }
49
+ /** Likewise: the answer decides which attribute value is written. */
50
+ export function useSupportsHintPopovers() {
51
+ return useSyncExternalStore(noopSubscribe, supportsHintPopovers, () => false);
52
+ }
41
53
  //# sourceMappingURL=capabilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAE5C,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK,WAAW,CAAA;AAC5C,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,MAAM,IAAI,oBAAoB,IAAI,iBAAiB,CAAC,SAAS,CAAA;AACtE,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,yBAAyB;IACvC,OAAO,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;AACrD,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAEzB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAC7C,OAAO,CAAC,OAAO,GAAG,MAAM,CAAA;IACxB,OAAO,OAAO,CAAC,OAAO,KAAK,MAAM,CAAA;AACnC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO,oBAAoB,CAAC,aAAa,EAAE,wBAAwB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;AACnF,CAAC"}
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAE5C,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK,WAAW,CAAA;AAC5C,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,MAAM,IAAI,oBAAoB,IAAI,iBAAiB,CAAC,SAAS,CAAA;AACtE,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,yBAAyB;IACvC,OAAO,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;AACrD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAEzB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAC7C,OAAO,CAAC,OAAO,GAAG,MAAM,CAAA;IACxB,OAAO,OAAO,CAAC,OAAO,KAAK,MAAM,CAAA;AACnC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO,oBAAoB,CAAC,aAAa,EAAE,wBAAwB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;AACnF,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,uBAAuB;IACrC,OAAO,oBAAoB,CAAC,aAAa,EAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;AAC/E,CAAC"}
@@ -4,14 +4,17 @@ import type { AsChildProps } from '../types.js';
4
4
  export interface ControlledCollapsibleRootProps extends Omit<ComponentPropsWithRef<'details'>, 'open'>, ControlledRootProps, AsChildProps {
5
5
  }
6
6
  /**
7
- * `<details>` exposes no cancelable hook — no `beforetoggle`, no `cancel` — so
8
- * unlike Dialog this root cannot refuse before the fact. It lets the disclosure
9
- * move, reports it, and puts it back if you decline: one frame of visible
10
- * movement, in the refusal case only.
7
+ * `<details>` exposes no cancelable hook — no `beforetoggle`, no `cancel`, only
8
+ * a `toggle` once the disclosure has already moved so unlike Dialog this root
9
+ * cannot refuse. Control here runs one way: change `open` and the DOM follows.
10
+ * Declining a toggle is heard and nothing more, and the disclosure is left
11
+ * where the user put it. It is a documented gap, not a bug in this file; the
12
+ * reasoning is in `create-controlled-root.ts` and docs/known-gaps.md.
11
13
  *
12
- * That is the documented fallback rather than a shortcoming of this primitive,
13
- * and it is why the veto is worth having on Dialog and Popover, where the
14
- * platform does give a cancelable event.
14
+ * A consumer who genuinely needs a veto has one, and it isn't this root:
15
+ * `preventDefault()` on the Trigger's click stops the toggle before it happens,
16
+ * for pointer and keyboard alike, because a `<summary>` toggles its parent as
17
+ * that click's default action.
15
18
  */
16
19
  export declare function CollapsibleRoot({ asChild, children, open, onOpenChange, ref, ...props }: ControlledCollapsibleRootProps): import("react").JSX.Element;
17
20
  //# sourceMappingURL=controlled-root.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"controlled-root.d.ts","sourceRoot":"","sources":["../../src/collapsible/controlled-root.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAe,MAAM,OAAO,CAAA;AAE/D,OAAO,EAAqB,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAEvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG5C,MAAM,WAAW,8BACf,SAAQ,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,YAAY;CAAG;AAE9F;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,GAAG,EACH,GAAG,KAAK,EACT,EAAE,8BAA8B,+BAehC"}
1
+ {"version":3,"file":"controlled-root.d.ts","sourceRoot":"","sources":["../../src/collapsible/controlled-root.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAe,MAAM,OAAO,CAAA;AAE/D,OAAO,EAAqB,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAEvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG5C,MAAM,WAAW,8BACf,SAAQ,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,YAAY;CAAG;AAE9F;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,GAAG,EACH,GAAG,KAAK,EACT,EAAE,8BAA8B,+BAehC"}
@@ -4,14 +4,17 @@ import { useControlledRoot } from '../create-controlled-root.js';
4
4
  import { Slot } from '../slot.js';
5
5
  import { CollapsibleContext, collapsibleAdapter } from './shared.js';
6
6
  /**
7
- * `<details>` exposes no cancelable hook — no `beforetoggle`, no `cancel` — so
8
- * unlike Dialog this root cannot refuse before the fact. It lets the disclosure
9
- * move, reports it, and puts it back if you decline: one frame of visible
10
- * movement, in the refusal case only.
7
+ * `<details>` exposes no cancelable hook — no `beforetoggle`, no `cancel`, only
8
+ * a `toggle` once the disclosure has already moved so unlike Dialog this root
9
+ * cannot refuse. Control here runs one way: change `open` and the DOM follows.
10
+ * Declining a toggle is heard and nothing more, and the disclosure is left
11
+ * where the user put it. It is a documented gap, not a bug in this file; the
12
+ * reasoning is in `create-controlled-root.ts` and docs/known-gaps.md.
11
13
  *
12
- * That is the documented fallback rather than a shortcoming of this primitive,
13
- * and it is why the veto is worth having on Dialog and Popover, where the
14
- * platform does give a cancelable event.
14
+ * A consumer who genuinely needs a veto has one, and it isn't this root:
15
+ * `preventDefault()` on the Trigger's click stops the toggle before it happens,
16
+ * for pointer and keyboard alike, because a `<summary>` toggles its parent as
17
+ * that click's default action.
15
18
  */
16
19
  export function CollapsibleRoot({ asChild, children, open, onOpenChange, ref, ...props }) {
17
20
  const context = useControlledRoot({ open, onOpenChange }, collapsibleAdapter);
@@ -1 +1 @@
1
- {"version":3,"file":"controlled-root.js","sourceRoot":"","sources":["../../src/collapsible/controlled-root.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAA4B,MAAM,2BAA2B,CAAA;AACvF,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAKjE;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,GAAG,EACH,GAAG,KAAK,EACuB;IAC/B,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,kBAAkB,CAAC,CAAA;IAC7E,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAEpD,OAAO,CACL,KAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YACzC,KAAC,IAAI,OACC,KAAK,EACT,GAAG,EAAE,eAAe,CAAc,GAAG,EAAE,OAAO,CAAC,eAAe,CAAC,8BACtC,EAAE,YAE1B,QAAQ,GACJ,GACqB,CAC/B,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"controlled-root.js","sourceRoot":"","sources":["../../src/collapsible/controlled-root.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAA4B,MAAM,2BAA2B,CAAA;AACvF,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAKjE;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,GAAG,EACH,GAAG,KAAK,EACuB;IAC/B,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,kBAAkB,CAAC,CAAA;IAC7E,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAEpD,OAAO,CACL,KAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YACzC,KAAC,IAAI,OACC,KAAK,EACT,GAAG,EAAE,eAAe,CAAc,GAAG,EAAE,OAAO,CAAC,eAAe,CAAC,8BACtC,EAAE,YAE1B,QAAQ,GACJ,GACqB,CAC/B,CAAA;AACH,CAAC"}
@@ -4,8 +4,9 @@ export declare function useCollapsibleContext(part: string): RootContextValue;
4
4
  /**
5
5
  * `<details>` has no invoker and needs none: `<summary>` is the trigger, wired
6
6
  * to its parent by the parser. There is also no cancelable hook — no
7
- * `beforetoggle`, no `cancel` — so a controlled Collapsible refuses by moving
8
- * the DOM back, which is one frame of visible movement in the refusal case.
7
+ * `beforetoggle`, no `cancel` — so a controlled Collapsible cannot refuse a
8
+ * toggle at all. These two calls only ever run from reconciliation, after the
9
+ * `open` prop itself changed; nothing here ever undoes something the user did.
9
10
  */
10
11
  export declare const collapsibleAdapter: OpenStateAdapter;
11
12
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/collapsible/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAElE,eAAO,MAAM,kBAAkB,kDAA+C,CAAA;AAE9E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAIpE;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,gBAQhC,CAAA"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/collapsible/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAElE,eAAO,MAAM,kBAAkB,kDAA+C,CAAA;AAE9E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAIpE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,gBAQhC,CAAA"}
@@ -9,8 +9,9 @@ export function useCollapsibleContext(part) {
9
9
  /**
10
10
  * `<details>` has no invoker and needs none: `<summary>` is the trigger, wired
11
11
  * to its parent by the parser. There is also no cancelable hook — no
12
- * `beforetoggle`, no `cancel` — so a controlled Collapsible refuses by moving
13
- * the DOM back, which is one frame of visible movement in the refusal case.
12
+ * `beforetoggle`, no `cancel` — so a controlled Collapsible cannot refuse a
13
+ * toggle at all. These two calls only ever run from reconciliation, after the
14
+ * `open` prop itself changed; nothing here ever undoes something the user did.
14
15
  */
15
16
  export const collapsibleAdapter = {
16
17
  isOpen: (node) => node.open,
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/collapsible/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAGjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAA;AAE9E,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,OAAO,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAA;IAC9C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,wCAAwC,CAAC,CAAA;IACxF,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAqB;IAClD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAE,IAA2B,CAAC,IAAI;IACnD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QACb,CAAC;QAAC,IAA2B,CAAC,IAAI,GAAG,IAAI,CAAA;IAC3C,CAAC;IACD,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;QACd,CAAC;QAAC,IAA2B,CAAC,IAAI,GAAG,KAAK,CAAA;IAC5C,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/collapsible/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAGjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAA;AAE9E,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,OAAO,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAA;IAC9C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,wCAAwC,CAAC,CAAA;IACxF,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAqB;IAClD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAE,IAA2B,CAAC,IAAI;IACnD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QACb,CAAC;QAAC,IAA2B,CAAC,IAAI,GAAG,IAAI,CAAA;IAC3C,CAAC;IACD,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;QACd,CAAC;QAAC,IAA2B,CAAC,IAAI,GAAG,KAAK,CAAA;IAC5C,CAAC;CACF,CAAA"}
@@ -20,10 +20,18 @@ export interface ControlledRootProps {
20
20
  * 3. An effect on `open` reconciles the DOM whenever the prop changes without
21
21
  * user interaction.
22
22
  *
23
- * Where step 1 isn't available, step 3 is the whole mechanism: the DOM moves,
24
- * we report, and if the consumer refuses we put it back. That's one frame of
25
- * visible movement, in the refusal case only. Worth knowing; not worth a
26
- * synchronous re-render to avoid.
23
+ * Where step 1 isn't available there is no veto, only a report. `<details>` is
24
+ * the case: no `beforetoggle`, no `cancel`, just a `toggle` once the disclosure
25
+ * has already moved. Step 3 does not stand in for it, because step 3 is keyed
26
+ * on the prop and a refusal is exactly the case where the prop does not change.
27
+ * So a declined toggle on a `<details>`-backed primitive stays where the user
28
+ * put it, with `open` disagreeing until something else moves it.
29
+ *
30
+ * That is the documented gap rather than a bug to fix here — see
31
+ * docs/known-gaps.md. Reverting afterwards would be a visible flicker, and the
32
+ * accept path could not be told from the refusal path reliably: `toggle` is
33
+ * dispatched asynchronously, so a consumer who accepts has not necessarily
34
+ * re-rendered by the time we would have to decide.
27
35
  */
28
36
  export declare function useControlledRoot({ open, onOpenChange }: ControlledRootProps, adapter: OpenStateAdapter): RootContextValue;
29
37
  //# sourceMappingURL=create-controlled-root.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-controlled-root.d.ts","sourceRoot":"","sources":["../src/create-controlled-root.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAEjE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAA;IAGb,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;CACrD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,mBAAmB,EAC3C,OAAO,EAAE,gBAAgB,GACxB,gBAAgB,CAuElB"}
1
+ {"version":3,"file":"create-controlled-root.d.ts","sourceRoot":"","sources":["../src/create-controlled-root.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAEjE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAA;IAGb,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;CACrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,mBAAmB,EAC3C,OAAO,EAAE,gBAAgB,GACxB,gBAAgB,CAyElB"}
@@ -17,10 +17,18 @@ import { useOpenState } from './open-state.js';
17
17
  * 3. An effect on `open` reconciles the DOM whenever the prop changes without
18
18
  * user interaction.
19
19
  *
20
- * Where step 1 isn't available, step 3 is the whole mechanism: the DOM moves,
21
- * we report, and if the consumer refuses we put it back. That's one frame of
22
- * visible movement, in the refusal case only. Worth knowing; not worth a
23
- * synchronous re-render to avoid.
20
+ * Where step 1 isn't available there is no veto, only a report. `<details>` is
21
+ * the case: no `beforetoggle`, no `cancel`, just a `toggle` once the disclosure
22
+ * has already moved. Step 3 does not stand in for it, because step 3 is keyed
23
+ * on the prop and a refusal is exactly the case where the prop does not change.
24
+ * So a declined toggle on a `<details>`-backed primitive stays where the user
25
+ * put it, with `open` disagreeing until something else moves it.
26
+ *
27
+ * That is the documented gap rather than a bug to fix here — see
28
+ * docs/known-gaps.md. Reverting afterwards would be a visible flicker, and the
29
+ * accept path could not be told from the refusal path reliably: `toggle` is
30
+ * dispatched asynchronously, so a consumer who accepts has not necessarily
31
+ * re-rendered by the time we would have to decide.
24
32
  */
25
33
  export function useControlledRoot({ open, onOpenChange }, adapter) {
26
34
  const id = useId();
@@ -45,7 +53,9 @@ export function useControlledRoot({ open, onOpenChange }, adapter) {
45
53
  event.preventDefault();
46
54
  changeRef.current?.(next);
47
55
  };
48
- // Only reached when beforetoggle couldn't be canceled.
56
+ // Reached when `beforetoggle` couldn't be canceled, or — `<details>` —
57
+ // never fired at all. The move has happened; reporting it is all that is
58
+ // left, and the consumer's answer cannot change it.
49
59
  const onToggle = (event) => {
50
60
  const next = event.newState === 'open';
51
61
  if (next !== openRef.current)
@@ -1 +1 @@
1
- {"version":3,"file":"create-controlled-root.js","sourceRoot":"","sources":["../src/create-controlled-root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAU3C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAAE,IAAI,EAAE,YAAY,EAAuB,EAC3C,OAAyB;IAEzB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IAClB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAA;IAE1D,2EAA2E;IAC3E,8EAA8E;IAC9E,mEAAmE;IACnE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAA;IAEjD,yEAAyE;IACzE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;IACtC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;IACtB,SAAS,CAAC,OAAO,GAAG,YAAY,CAAA;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,MAAM,cAAc,GAAG,CAAC,KAAY,EAAE,EAAE;YACtC,MAAM,IAAI,GAAI,KAAqB,CAAC,QAAQ,KAAK,MAAM,CAAA;YACvD,IAAI,IAAI,KAAK,OAAO,CAAC,OAAO;gBAAE,OAAM;YAEpC,IAAI,KAAK,CAAC,UAAU;gBAAE,KAAK,CAAC,cAAc,EAAE,CAAA;YAC5C,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;QAC3B,CAAC,CAAA;QAED,uDAAuD;QACvD,MAAM,QAAQ,GAAG,CAAC,KAAY,EAAE,EAAE;YAChC,MAAM,IAAI,GAAI,KAAqB,CAAC,QAAQ,KAAK,MAAM,CAAA;YACvD,IAAI,IAAI,KAAK,OAAO,CAAC,OAAO;gBAAE,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;QACzD,CAAC,CAAA;QAED,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,EAAE;YACnC,IAAI,OAAO,CAAC,OAAO;gBAAE,KAAK,CAAC,cAAc,EAAE,CAAA;YAC3C,SAAS,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC,CAAA;QAED,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;QACrD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACzC,IAAI,OAAO,CAAC,cAAc;YAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;QAEtF,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;YACxD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAC5C,IAAI,OAAO,CAAC,cAAc;gBAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;QAC3F,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IAEnB,qEAAqE;IACrE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI;YAAE,OAAM;QAEzC,4EAA4E;QAC5E,6EAA6E;QAC7E,4EAA4E;QAC5E,2EAA2E;QAC3E,gEAAgE;QAChE,IAAI,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;;YACvB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IAEzB,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,IAAwB,EAAE,EAAE;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAA;QACb,OAAO,CAAC,IAAI,CAAC,CAAA;IACf,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAA;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAA;AAC/C,CAAC"}
1
+ {"version":3,"file":"create-controlled-root.js","sourceRoot":"","sources":["../src/create-controlled-root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAU3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAAE,IAAI,EAAE,YAAY,EAAuB,EAC3C,OAAyB;IAEzB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IAClB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAA;IAE1D,2EAA2E;IAC3E,8EAA8E;IAC9E,mEAAmE;IACnE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAA;IAEjD,yEAAyE;IACzE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;IACtC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;IACtB,SAAS,CAAC,OAAO,GAAG,YAAY,CAAA;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,MAAM,cAAc,GAAG,CAAC,KAAY,EAAE,EAAE;YACtC,MAAM,IAAI,GAAI,KAAqB,CAAC,QAAQ,KAAK,MAAM,CAAA;YACvD,IAAI,IAAI,KAAK,OAAO,CAAC,OAAO;gBAAE,OAAM;YAEpC,IAAI,KAAK,CAAC,UAAU;gBAAE,KAAK,CAAC,cAAc,EAAE,CAAA;YAC5C,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;QAC3B,CAAC,CAAA;QAED,uEAAuE;QACvE,yEAAyE;QACzE,oDAAoD;QACpD,MAAM,QAAQ,GAAG,CAAC,KAAY,EAAE,EAAE;YAChC,MAAM,IAAI,GAAI,KAAqB,CAAC,QAAQ,KAAK,MAAM,CAAA;YACvD,IAAI,IAAI,KAAK,OAAO,CAAC,OAAO;gBAAE,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;QACzD,CAAC,CAAA;QAED,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,EAAE;YACnC,IAAI,OAAO,CAAC,OAAO;gBAAE,KAAK,CAAC,cAAc,EAAE,CAAA;YAC3C,SAAS,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC,CAAA;QAED,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;QACrD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACzC,IAAI,OAAO,CAAC,cAAc;YAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;QAEtF,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;YACxD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAC5C,IAAI,OAAO,CAAC,cAAc;gBAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;QAC3F,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IAEnB,qEAAqE;IACrE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI;YAAE,OAAM;QAEzC,4EAA4E;QAC5E,6EAA6E;QAC7E,4EAA4E;QAC5E,2EAA2E;QAC3E,gEAAgE;QAChE,IAAI,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;;YACvB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IAEzB,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,IAAwB,EAAE,EAAE;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAA;QACb,OAAO,CAAC,IAAI,CAAC,CAAA;IACf,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAA;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAA;AAC/C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"controlled-root.d.ts","sourceRoot":"","sources":["../../src/hover-card/controlled-root.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAIpE,MAAM,WAAW,4BAA6B,SAAQ,mBAAmB;IACvE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAe,EACf,UAAgB,EAChB,GAAG,KAAK,EACT,EAAE,4BAA4B,+BAW9B"}
1
+ {"version":3,"file":"controlled-root.d.ts","sourceRoot":"","sources":["../../src/hover-card/controlled-root.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAIpE,MAAM,WAAW,4BAA6B,SAAQ,mBAAmB;IACvE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAe,EACf,UAAgB,EAChB,GAAG,KAAK,EACT,EAAE,4BAA4B,+BAa9B"}
@@ -7,6 +7,8 @@ export function HoverCardRoot({ children, openDelay = 700, closeDelay = 300, ...
7
7
  showDelay: openDelay,
8
8
  hideDelay: closeDelay,
9
9
  hoverableContent: true,
10
+ // Somewhere to go, so the lift leaves it up to be read and reached into.
11
+ pressHolds: true,
10
12
  kind: 'auto',
11
13
  role: undefined,
12
14
  });
@@ -1 +1 @@
1
- {"version":3,"file":"controlled-root.js","sourceRoot":"","sources":["../../src/hover-card/controlled-root.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAA;AAQnF,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,GAAG,GAAG,EACf,UAAU,GAAG,GAAG,EAChB,GAAG,KAAK,EACqB;IAC7B,MAAM,OAAO,GAAG,yBAAyB,CAAC;QACxC,GAAG,KAAK;QACR,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,UAAU;QACrB,gBAAgB,EAAE,IAAI;QACtB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;KAChB,CAAC,CAAA;IAEF,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAA2B,CAAA;AACtF,CAAC"}
1
+ {"version":3,"file":"controlled-root.js","sourceRoot":"","sources":["../../src/hover-card/controlled-root.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAA;AAQnF,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,GAAG,GAAG,EACf,UAAU,GAAG,GAAG,EAChB,GAAG,KAAK,EACqB;IAC7B,MAAM,OAAO,GAAG,yBAAyB,CAAC;QACxC,GAAG,KAAK;QACR,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,UAAU;QACrB,gBAAgB,EAAE,IAAI;QACtB,yEAAyE;QACzE,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;KAChB,CAAC,CAAA;IAEF,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAA2B,CAAA;AACtF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/hover-card/root.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CACnC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAe,EACf,UAAgB,EAChB,YAAY,GACb,EAAE,kBAAkB,+BAWpB"}
1
+ {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/hover-card/root.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CACnC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAe,EACf,UAAgB,EAChB,YAAY,GACb,EAAE,kBAAkB,+BAapB"}
@@ -10,6 +10,8 @@ export function HoverCardRoot({ children, openDelay = 700, closeDelay = 300, onO
10
10
  showDelay: openDelay,
11
11
  hideDelay: closeDelay,
12
12
  hoverableContent: true,
13
+ // Somewhere to go, so the lift leaves it up to be read and reached into.
14
+ pressHolds: true,
13
15
  kind: 'auto',
14
16
  role: undefined,
15
17
  onOpenChange,
@@ -1 +1 @@
1
- {"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/hover-card/root.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAS9D;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,GAAG,GAAG,EACf,UAAU,GAAG,GAAG,EAChB,YAAY,GACO;IACnB,MAAM,OAAO,GAAG,eAAe,CAAC;QAC9B,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,UAAU;QACrB,gBAAgB,EAAE,IAAI;QACtB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;QACf,YAAY;KACb,CAAC,CAAA;IAEF,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAA2B,CAAA;AACtF,CAAC"}
1
+ {"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/hover-card/root.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAS9D;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,GAAG,GAAG,EACf,UAAU,GAAG,GAAG,EAChB,YAAY,GACO;IACnB,MAAM,OAAO,GAAG,eAAe,CAAC;QAC9B,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,UAAU;QACrB,gBAAgB,EAAE,IAAI;QACtB,yEAAyE;QACzE,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;QACf,YAAY;KACb,CAAC,CAAA;IAEF,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAA2B,CAAA;AACtF,CAAC"}
@@ -3,6 +3,8 @@ export interface InterestOptions {
3
3
  hideDelay: number;
4
4
  /** Whether moving the pointer onto the content keeps it open. */
5
5
  hoverableContent: boolean;
6
+ /** Whether a press that opened it survives the finger coming back up. */
7
+ pressHolds: boolean;
6
8
  }
7
9
  /**
8
10
  * Hover, focus and press intent, in JavaScript, for as long as `interestfor` is
@@ -30,8 +32,8 @@ export interface InterestOptions {
30
32
  * the teardown and the rebuild — which is exactly when the pointer is moving
31
33
  * from the trigger onto the content.
32
34
  */
33
- export declare function useInterest({ showDelay, hideDelay, hoverableContent }: InterestOptions): {
34
- registerTrigger: (node: HTMLElement | null) => void;
35
+ export declare function useInterest({ showDelay, hideDelay, hoverableContent, pressHolds, }: InterestOptions): {
36
+ registerTrigger: (node: HTMLElement | null, activates?: boolean) => void;
35
37
  registerInterestContent: (node: HTMLElement | null) => void;
36
38
  };
37
39
  //# sourceMappingURL=interest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interest.d.ts","sourceRoot":"","sources":["../src/interest.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,iEAAiE;IACjE,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AA6CD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,EAAE,eAAe;4BAoO5E,WAAW,GAAG,IAAI;oCAWlB,WAAW,GAAG,IAAI;EAwB5B"}
1
+ {"version":3,"file":"interest.d.ts","sourceRoot":"","sources":["../src/interest.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,iEAAiE;IACjE,gBAAgB,EAAE,OAAO,CAAA;IACzB,yEAAyE;IACzE,UAAU,EAAE,OAAO,CAAA;CACpB;AAoED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,UAAU,GACX,EAAE,eAAe;4BA0PP,WAAW,GAAG,IAAI;oCAalB,WAAW,GAAG,IAAI;EAwB5B"}
package/dist/interest.js CHANGED
@@ -1,13 +1,19 @@
1
1
  import { useCallback, useEffect, useRef } from 'react';
2
2
  import { supportsInterestInvokers } from './capabilities.js';
3
3
  /**
4
- * A press long enough to be a deliberate gesture rather than a tap. iOS and
5
- * Android both use half a second for their own long-press, so it is the number
6
- * a thumb already knowsand it is deliberately not `showDelay`, because a
7
- * press is a different gesture from a pointer coming to rest, and a consumer
8
- * tuning one has said nothing about the other.
4
+ * How long a finger rests before the panel opens, in milliseconds.
5
+ *
6
+ * Two numbers, because the wait is not for the gesture — it is for the tap the
7
+ * gesture might have been. An info icon does nothing when you tap it, so there
8
+ * is nothing to protect and the only thing left to wait for is long enough to
9
+ * tell a hold from the start of a scroll. A button or a link does something,
10
+ * and opening before a tap has had time to be a tap would eat it.
11
+ *
12
+ * Neither is `showDelay`. A press is a different gesture from a pointer coming
13
+ * to rest, and a consumer tuning one has said nothing about the other.
9
14
  */
10
- const PRESS_DURATION = 500;
15
+ const PRESS_WITHOUT_A_TAP = 150;
16
+ const PRESS_PAST_A_TAP = 250;
11
17
  /** How far a finger may drift and still be pressing rather than scrolling. */
12
18
  const PRESS_SLOP = 10;
13
19
  /** Long enough to catch the click a lift produces, short enough to catch only that one. */
@@ -31,6 +37,20 @@ function focusIsVisible(node) {
31
37
  return true;
32
38
  }
33
39
  }
40
+ /**
41
+ * Whether tapping this trigger would do anything.
42
+ *
43
+ * Only half the answer is in the DOM — a React handler is not an attribute — so
44
+ * the trigger part passes what it knows and this covers the rest: a link, and a
45
+ * button that submits the form it is in.
46
+ */
47
+ function activatesOnTap(node) {
48
+ if (node.tagName === 'A')
49
+ return node.hasAttribute('href');
50
+ return (node.tagName === 'BUTTON' &&
51
+ node.type !== 'button' &&
52
+ node.closest('form') !== null);
53
+ }
34
54
  /**
35
55
  * A touch pointer reports enter on touchdown and leave on lift, so the hover
36
56
  * path would make every tap a half-open tooltip. Touch has its own gesture; the
@@ -65,7 +85,7 @@ function hovering(event) {
65
85
  * the teardown and the rebuild — which is exactly when the pointer is moving
66
86
  * from the trigger onto the content.
67
87
  */
68
- export function useInterest({ showDelay, hideDelay, hoverableContent }) {
88
+ export function useInterest({ showDelay, hideDelay, hoverableContent, pressHolds, }) {
69
89
  const triggerRef = useRef(null);
70
90
  const contentRef = useRef(null);
71
91
  const timer = useRef(0);
@@ -77,8 +97,11 @@ export function useInterest({ showDelay, hideDelay, hoverableContent }) {
77
97
  // a trigger whose panel was already showing.
78
98
  const press = useRef(null);
79
99
  // Read at call time, so changing a delay never means rebinding anything.
80
- const options = useRef({ showDelay, hideDelay, hoverableContent });
81
- options.current = { showDelay, hideDelay, hoverableContent };
100
+ const options = useRef({ showDelay, hideDelay, hoverableContent, pressHolds });
101
+ options.current = { showDelay, hideDelay, hoverableContent, pressHolds };
102
+ // What the trigger part knows and the DOM does not: whether a tap has a
103
+ // handler to reach. Set on every registration, read when a press begins.
104
+ const triggerActivates = useRef(false);
82
105
  const clear = useCallback(() => window.clearTimeout(timer.current), []);
83
106
  const isOpen = useCallback(() => contentRef.current?.matches(':popover-open') === true, []);
84
107
  const reveal = useCallback(() => {
@@ -86,6 +109,11 @@ export function useInterest({ showDelay, hideDelay, hoverableContent }) {
86
109
  if (content && !isOpen())
87
110
  content.showPopover();
88
111
  }, [isOpen]);
112
+ /** Now, not after `hideDelay`: a gesture that ended has nothing to wait for. */
113
+ const conceal = useCallback(() => {
114
+ if (isOpen())
115
+ contentRef.current?.hidePopover();
116
+ }, [isOpen]);
89
117
  const show = useCallback(() => {
90
118
  clear();
91
119
  timer.current = window.setTimeout(reveal, options.current.showDelay);
@@ -156,12 +184,13 @@ export function useInterest({ showDelay, hideDelay, hoverableContent }) {
156
184
  return;
157
185
  node.style.setProperty('user-select', 'none');
158
186
  node.style.setProperty('-webkit-user-select', 'none');
187
+ const protecting = triggerActivates.current || activatesOnTap(node);
159
188
  pressTimer.current = window.setTimeout(() => {
160
189
  if (!press.current)
161
190
  return;
162
191
  press.current.held = true;
163
192
  reveal();
164
- }, PRESS_DURATION);
193
+ }, protecting ? PRESS_PAST_A_TAP : PRESS_WITHOUT_A_TAP);
165
194
  }, [isOpen, reveal]);
166
195
  const endPress = useCallback((node) => {
167
196
  window.clearTimeout(pressTimer.current);
@@ -187,13 +216,22 @@ export function useInterest({ showDelay, hideDelay, hoverableContent }) {
187
216
  if (!state)
188
217
  return;
189
218
  endPress(node);
190
- // The lift is a pointerup outside every open popover, and the popover the
191
- // press opened did not exist when the finger went down so as far as
192
- // light dismiss is concerned it was never part of this gesture, and it
193
- // closes. Re-assert it in the same task the dismissal ran in: nothing is
194
- // painted between the two, so the card the press opened simply stays.
195
- if (state.held)
196
- reveal();
219
+ // A tooltip is a label held up while you press, so it goes when you let
220
+ // go and closing it here rather than leaving it to light dismiss is
221
+ // what makes that true on an engine whose light dismiss never runs.
222
+ //
223
+ // A card is somewhere to go, so it stays. That takes work: the lift is a
224
+ // pointerup outside every open popover, and the popover the press opened
225
+ // did not exist when the finger went down, so as far as light dismiss is
226
+ // concerned it was never part of this gesture and it closes. Re-assert in
227
+ // the same task the dismissal ran in — nothing is painted between the
228
+ // two, so the card the press opened simply stays.
229
+ if (state.held) {
230
+ if (options.current.pressHolds)
231
+ reveal();
232
+ else
233
+ conceal();
234
+ }
197
235
  // Whoever opened it, the lift still produces a click, and on an `<a>` that
198
236
  // click is a navigation. A browser answering the hold itself lets it
199
237
  // through, so a long press there previews *and* follows the link; only
@@ -201,7 +239,7 @@ export function useInterest({ showDelay, hideDelay, hoverableContent }) {
201
239
  // the finger went down is not this gesture's, and the tap under it stands.
202
240
  if (state.held || (!state.openAtDown && isOpen()))
203
241
  swallowClick(node);
204
- }, [endPress, isOpen, reveal, swallowClick]);
242
+ }, [conceal, endPress, isOpen, reveal, swallowClick]);
205
243
  const cancelPress = useCallback((event) => endPress(event.currentTarget), [endPress]);
206
244
  // Android offers its own long-press menu on the same gesture, and whichever
207
245
  // of the two the user gets should not be a race. iOS is asked in CSS instead,
@@ -235,7 +273,8 @@ export function useInterest({ showDelay, hideDelay, hoverableContent }) {
235
273
  node[method]('pointerenter', keepOpen);
236
274
  node[method]('pointerleave', leaveContent);
237
275
  }, [keepOpen, leaveContent]);
238
- const registerTrigger = useCallback((node) => {
276
+ const registerTrigger = useCallback((node, activates = false) => {
277
+ triggerActivates.current = activates;
239
278
  const previous = triggerRef.current;
240
279
  if (previous)
241
280
  bindTrigger(previous, false);
@@ -1 +1 @@
1
- {"version":3,"file":"interest.js","sourceRoot":"","sources":["../src/interest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interest.js","sourceRoot":"","sources":["../src/interest.ts"],"names":[],"mappings":"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"}
@@ -10,5 +10,5 @@ export interface ControlledPopoverRootProps extends ControlledRootProps {
10
10
  * both directions, so refusing an open or a close moves nothing at all — no
11
11
  * revert, no frame of visible movement, no `flushSync`.
12
12
  */
13
- export declare function PopoverRoot({ children, kind, ...props }: ControlledPopoverRootProps): import("react").JSX.Element;
13
+ export declare function PopoverRoot({ children, kind: asked, ...props }: ControlledPopoverRootProps): import("react").JSX.Element;
14
14
  //# sourceMappingURL=controlled-root.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"controlled-root.d.ts","sourceRoot":"","sources":["../../src/popover/controlled-root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE/C,OAAO,EAAqB,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACvF,OAAO,EAAkC,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3E,MAAM,WAAW,0BAA2B,SAAQ,mBAAmB;IACrE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAa,EAAE,GAAG,KAAK,EAAE,EAAE,0BAA0B,+BAO5F"}
1
+ {"version":3,"file":"controlled-root.d.ts","sourceRoot":"","sources":["../../src/popover/controlled-root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE/C,OAAO,EAAqB,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACvF,OAAO,EAAkD,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3F,MAAM,WAAW,0BAA2B,SAAQ,mBAAmB;IACrE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,IAAI,EAAE,KAAc,EACpB,GAAG,KAAK,EACT,EAAE,0BAA0B,+BAQ5B"}
@@ -2,15 +2,16 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useMemo } from 'react';
3
3
  import { anchorName } from '../anchor.js';
4
4
  import { useControlledRoot } from '../create-controlled-root.js';
5
- import { PopoverContext, popoverAdapter } from './shared.js';
5
+ import { usePopoverKind, PopoverContext, popoverAdapter } from './shared.js';
6
6
  /**
7
7
  * The best case for the veto model. A popover's `beforetoggle` is cancelable in
8
8
  * both directions, so refusing an open or a close moves nothing at all — no
9
9
  * revert, no frame of visible movement, no `flushSync`.
10
10
  */
11
- export function PopoverRoot({ children, kind = 'auto', ...props }) {
11
+ export function PopoverRoot({ children, kind: asked = 'auto', ...props }) {
12
12
  const context = useControlledRoot(props, popoverAdapter);
13
13
  const anchor = useMemo(() => anchorName(context.id), [context.id]);
14
+ const kind = usePopoverKind(asked);
14
15
  const value = useMemo(() => ({ ...context, anchor, kind }), [context, anchor, kind]);
15
16
  return _jsx(PopoverContext.Provider, { value: value, children: children });
16
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"controlled-root.js","sourceRoot":"","sources":["../../src/popover/controlled-root.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAA4B,MAAM,2BAA2B,CAAA;AACvF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAoB,MAAM,UAAU,CAAA;AAO3E;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,KAAK,EAA8B;IAC3F,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IAElE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;IAEpF,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA2B,CAAA;AACpF,CAAC"}
1
+ {"version":3,"file":"controlled-root.js","sourceRoot":"","sources":["../../src/popover/controlled-root.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAA4B,MAAM,2BAA2B,CAAA;AACvF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAoB,MAAM,UAAU,CAAA;AAO3F;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,IAAI,EAAE,KAAK,GAAG,MAAM,EACpB,GAAG,KAAK,EACmB;IAC3B,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IAClE,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IAElC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;IAEpF,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA2B,CAAA;AACpF,CAAC"}
@@ -20,5 +20,5 @@ export interface PopoverRootProps {
20
20
  * connected, and an imperative `showPopover()` on mount is the sort of thing
21
21
  * this library exists to avoid. Use `open` from `/controlled` if you need it.
22
22
  */
23
- export declare function PopoverRoot({ children, kind, onOpenChange }: PopoverRootProps): import("react").JSX.Element;
23
+ export declare function PopoverRoot({ children, kind: asked, onOpenChange }: PopoverRootProps): import("react").JSX.Element;
24
24
  //# sourceMappingURL=root.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/popover/root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAG3E,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,YAAY,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CACnC;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAa,EAAE,YAAY,EAAE,EAAE,gBAAgB,+BAgBtF"}
1
+ {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/popover/root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAG3E,OAAO,EAAkC,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,YAAY,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CACnC;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAc,EAAE,YAAY,EAAE,EAAE,gBAAgB,+BAiB7F"}
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useCallback, useId, useMemo, useRef } from 'react';
3
3
  import { anchorName } from '../anchor.js';
4
4
  import { useOpenState } from '../open-state.js';
5
- import { PopoverContext } from './shared.js';
5
+ import { usePopoverKind, PopoverContext } from './shared.js';
6
6
  /**
7
7
  * Renders nothing. The trigger is bound to the content by `commandfor`, so
8
8
  * opening is the parser's job and there is no state here in the common case.
@@ -11,9 +11,10 @@ import { PopoverContext } from './shared.js';
11
11
  * connected, and an imperative `showPopover()` on mount is the sort of thing
12
12
  * this library exists to avoid. Use `open` from `/controlled` if you need it.
13
13
  */
14
- export function PopoverRoot({ children, kind = 'auto', onOpenChange }) {
14
+ export function PopoverRoot({ children, kind: asked = 'auto', onOpenChange }) {
15
15
  const id = useId();
16
16
  const anchor = useMemo(() => anchorName(id), [id]);
17
+ const kind = usePopoverKind(asked);
17
18
  const changeRef = useRef(onOpenChange);
18
19
  changeRef.current = onOpenChange;
19
20
  const report = useCallback((next) => changeRef.current?.(next), []);
@@ -1 +1 @@
1
- {"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/popover/root.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAkB,MAAM,OAAO,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAoB,MAAM,UAAU,CAAA;AAe3D;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,EAAE,YAAY,EAAoB;IACrF,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IAClB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAElD,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;IACtC,SAAS,CAAC,OAAO,GAAG,YAAY,CAAA;IAEhC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IAC5E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;IAE9C,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAC5D,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAClC,CAAA;IAED,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAA2B,CAAA;AACtF,CAAC"}
1
+ {"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/popover/root.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAkB,MAAM,OAAO,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAoB,MAAM,UAAU,CAAA;AAe3E;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,GAAG,MAAM,EAAE,YAAY,EAAoB;IAC5F,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IAClB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAClD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IAElC,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;IACtC,SAAS,CAAC,OAAO,GAAG,YAAY,CAAA;IAEhC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IAC5E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;IAE9C,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAC5D,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAClC,CAAA;IAED,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAA2B,CAAA;AACtF,CAAC"}
@@ -1,5 +1,17 @@
1
1
  import type { OpenStateAdapter, RootContextValue } from '../types.js';
2
2
  export type PopoverKind = 'auto' | 'manual' | 'hint';
3
+ /**
4
+ * The kind the browser will actually honour.
5
+ *
6
+ * `popover` is an enumerated attribute whose invalid-value default is
7
+ * **manual**, so `hint` on an engine that has never heard of it does not
8
+ * degrade to `auto` — it produces a popover that neither light dismiss nor
9
+ * Escape reaches, which on a phone is a tooltip you cannot get rid of. Asking
10
+ * first is what makes the documented fallback the real one.
11
+ *
12
+ * Resolved in the roots, so no part ever branches on it.
13
+ */
14
+ export declare function usePopoverKind<Kind extends PopoverKind>(kind: Kind): Kind | 'auto';
3
15
  export interface PopoverContextValue extends RootContextValue {
4
16
  /** The `anchor-name` this instance owns, shared by trigger and content. */
5
17
  anchor: string;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/popover/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAElE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEpD,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,WAAW,CAAA;CAClB;AAED,eAAO,MAAM,cAAc,qDAAkD,CAAA;AAE7E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAInE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,gBAI5B,CAAA;AAED,wBAAgB,iBAAiB;;;EAGhC"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/popover/shared.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAElE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEpD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,IAAI,SAAS,WAAW,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,CAGlF;AAED,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,WAAW,CAAA;CAClB;AAED,eAAO,MAAM,cAAc,qDAAkD,CAAA;AAE7E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAInE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,gBAI5B,CAAA;AAED,wBAAgB,iBAAiB;;;EAGhC"}
@@ -1,4 +1,20 @@
1
1
  import { createContext, useContext } from 'react';
2
+ import { useSupportsHintPopovers } from '../capabilities.js';
3
+ /**
4
+ * The kind the browser will actually honour.
5
+ *
6
+ * `popover` is an enumerated attribute whose invalid-value default is
7
+ * **manual**, so `hint` on an engine that has never heard of it does not
8
+ * degrade to `auto` — it produces a popover that neither light dismiss nor
9
+ * Escape reaches, which on a phone is a tooltip you cannot get rid of. Asking
10
+ * first is what makes the documented fallback the real one.
11
+ *
12
+ * Resolved in the roots, so no part ever branches on it.
13
+ */
14
+ export function usePopoverKind(kind) {
15
+ const hint = useSupportsHintPopovers();
16
+ return kind === 'hint' && !hint ? 'auto' : kind;
17
+ }
2
18
  export const PopoverContext = createContext(null);
3
19
  export function usePopoverContext(part) {
4
20
  const context = useContext(PopoverContext);
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/popover/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAWjD,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAA6B,IAAI,CAAC,CAAA;AAE7E,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAC1C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,oCAAoC,CAAC,CAAA;IACpF,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;IAC/C,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;IAClC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;CACpC,CAAA;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,EAAE,EAAE,EAAE,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,CAAA;IACrD,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAW,CAAA;AAC/D,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/popover/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAKzD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAA2B,IAAU;IACjE,MAAM,IAAI,GAAG,uBAAuB,EAAE,CAAA;IACtC,OAAO,IAAI,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;AACjD,CAAC;AAQD,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAA6B,IAAI,CAAC,CAAA;AAE7E,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAC1C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,oCAAoC,CAAC,CAAA;IACpF,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;IAC/C,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;IAClC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;CACpC,CAAA;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,EAAE,EAAE,EAAE,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,CAAA;IACrD,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAW,CAAA;AAC/D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"controlled-root.d.ts","sourceRoot":"","sources":["../../src/tooltip/controlled-root.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAIpE,MAAM,WAAW,0BAA2B,SAAQ,mBAAmB;IACrE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,aAAmB,EACnB,UAAgB,EAChB,GAAG,KAAK,EACT,EAAE,0BAA0B,+BAW5B"}
1
+ {"version":3,"file":"controlled-root.d.ts","sourceRoot":"","sources":["../../src/tooltip/controlled-root.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAIpE,MAAM,WAAW,0BAA2B,SAAQ,mBAAmB;IACrE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,aAAmB,EACnB,UAAgB,EAChB,GAAG,KAAK,EACT,EAAE,0BAA0B,+BAa5B"}
@@ -7,6 +7,8 @@ export function TooltipRoot({ children, delayDuration = 700, closeDelay = 150, .
7
7
  showDelay: delayDuration,
8
8
  hideDelay: closeDelay,
9
9
  hoverableContent: false,
10
+ // A tooltip is a peek: it ends when the finger does.
11
+ pressHolds: false,
10
12
  kind: 'hint',
11
13
  role: 'tooltip',
12
14
  });
@@ -1 +1 @@
1
- {"version":3,"file":"controlled-root.js","sourceRoot":"","sources":["../../src/tooltip/controlled-root.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAQ1E,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,aAAa,GAAG,GAAG,EACnB,UAAU,GAAG,GAAG,EAChB,GAAG,KAAK,EACmB;IAC3B,MAAM,OAAO,GAAG,yBAAyB,CAAC;QACxC,GAAG,KAAK;QACR,SAAS,EAAE,aAAa;QACxB,SAAS,EAAE,UAAU;QACrB,gBAAgB,EAAE,KAAK;QACvB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;KAChB,CAAC,CAAA;IAEF,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAA2B,CAAA;AACtF,CAAC"}
1
+ {"version":3,"file":"controlled-root.js","sourceRoot":"","sources":["../../src/tooltip/controlled-root.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAQ1E,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,aAAa,GAAG,GAAG,EACnB,UAAU,GAAG,GAAG,EAChB,GAAG,KAAK,EACmB;IAC3B,MAAM,OAAO,GAAG,yBAAyB,CAAC;QACxC,GAAG,KAAK;QACR,SAAS,EAAE,aAAa;QACxB,SAAS,EAAE,UAAU;QACrB,gBAAgB,EAAE,KAAK;QACvB,qDAAqD;QACrD,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;KAChB,CAAC,CAAA;IAEF,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAA2B,CAAA;AACtF,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ComponentPropsWithRef } from 'react';
1
+ import { type ComponentPropsWithRef } from 'react';
2
2
  import { type Align, type Side } from '../anchor.js';
3
3
  import type { AsChildProps } from '../types.js';
4
4
  export interface TooltipTriggerProps extends ComponentPropsWithRef<'button'>, AsChildProps {
@@ -1 +1 @@
1
- {"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/tooltip/parts.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAe,MAAM,OAAO,CAAA;AAC/D,OAAO,EAAmB,KAAK,KAAK,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAIlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAI5C,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB,CAAC,QAAQ,CAAC,EAAE,YAAY;CAAG;AAE7F;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,mBAAmB,+BAuBpF;AAED,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY;IACrF,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,IAAY,EACZ,KAAgB,EAChB,UAAc,EACd,eAAsB,EACtB,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,mBAAmB,+BAoBrB"}
1
+ {"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/tooltip/parts.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,qBAAqB,EAAoB,MAAM,OAAO,CAAA;AACjG,OAAO,EAAmB,KAAK,KAAK,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAIlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAI5C,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB,CAAC,QAAQ,CAAC,EAAE,YAAY;CAAG;AAsB7F;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,mBAAmB,+BA6BpF;AAED,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY;IACrF,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,IAAY,EACZ,KAAgB,EAChB,UAAc,EACd,eAAsB,EACtB,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,mBAAmB,+BAoBrB"}
@@ -1,10 +1,31 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { isValidElement, useCallback } from 'react';
2
3
  import { placementStyles } from '../anchor.js';
3
4
  import { useClientRender } from '../client-render.js';
4
5
  import { useComposedRefs } from '../compose-refs.js';
5
6
  import { Slot } from '../slot.js';
6
7
  import { validateTrigger } from '../validate-trigger.js';
7
8
  import { useTooltipContext } from './shared.js';
9
+ /**
10
+ * Whether tapping this trigger would do anything a press has to be careful of.
11
+ *
12
+ * A handler is not an attribute, so the DOM cannot answer this and the ref
13
+ * callback in `interest.ts` cannot either — it only sees links and submit
14
+ * buttons. Here the props are still props: the trigger's own, and under
15
+ * `asChild` the child's, which `Slot` will chain into the same element.
16
+ *
17
+ * Wrong in one direction only, and deliberately: a component that binds its own
18
+ * handler out of sight reads as inert, and gets the shorter press. The cost is
19
+ * a preview where a tap was meant, on a hold already past a tap's length.
20
+ */
21
+ function activatesOnTap(asChild, props) {
22
+ if (props.onClick)
23
+ return true;
24
+ if (!asChild)
25
+ return false;
26
+ const child = props.children;
27
+ return isValidElement(child) && Boolean(child.props.onClick);
28
+ }
8
29
  /**
9
30
  * Buttons *and* anchors, unlike every other trigger in this library: an
10
31
  * `interestfor` invoker accepts both, and that is exactly what makes a link
@@ -24,11 +45,13 @@ import { useTooltipContext } from './shared.js';
24
45
  export function TooltipTrigger({ asChild, ref, style, ...props }) {
25
46
  const { id, anchor, native, registerTrigger } = useTooltipContext('Tooltip.Trigger');
26
47
  const Part = asChild ? Slot : 'button';
48
+ const activates = activatesOnTap(asChild, props);
49
+ const register = useCallback((node) => registerTrigger(node, activates), [registerTrigger, activates]);
27
50
  return (_jsx(Part, { ...props, ...(native ? { interestfor: id } : {}), "aria-describedby": id, style: {
28
51
  anchorName: anchor,
29
52
  ...(native ? null : { WebkitTouchCallout: 'none' }),
30
53
  ...style,
31
- }, ref: useComposedRefs(ref, registerTrigger, (node) => validateTrigger(node, 'interest', 'Tooltip.Trigger')), "data-bedrock-tooltip-trigger": "" }));
54
+ }, ref: useComposedRefs(ref, register, (node) => validateTrigger(node, 'interest', 'Tooltip.Trigger')), "data-bedrock-tooltip-trigger": "" }));
32
55
  }
33
56
  export function TooltipContent({ asChild, children, side = 'top', align = 'center', sideOffset = 6, avoidCollisions = true, style, ref, ...props }) {
34
57
  const { id, open, anchor, kind, role, registerContent } = useTooltipContext('Tooltip.Content');
@@ -1 +1 @@
1
- {"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/tooltip/parts.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAyB,MAAM,WAAW,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAI5C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,EAAuB;IACnF,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAA;IACpF,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAA;IAEnD,OAAO,CACL,KAAC,IAAI,OACC,KAAK,KACL,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,sBAErB,EAAE,EACpB,KAAK,EACH;YACE,UAAU,EAAE,MAAM;YAClB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC;YACnD,GAAG,KAAK;SACO,EAEnB,GAAG,EAAE,eAAe,CAAc,GAAG,EAAE,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAC/D,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,iBAAiB,CAAC,CACrD,kCAC4B,EAAE,GAC/B,CACH,CAAA;AACH,CAAC;AASD,MAAM,UAAU,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,IAAI,GAAG,KAAK,EACZ,KAAK,GAAG,QAAQ,EAChB,UAAU,GAAG,CAAC,EACd,eAAe,GAAG,IAAI,EACtB,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACY;IACpB,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAA;IAC9F,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAA;IAClC,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IAEhD,OAAO,CACL,KAAC,IAAI,OACC,KAAK,EACT,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,eAClF,IAAI,gBACH,KAAK,EACjB,GAAG,EAAE,eAAe,CAAc,GAAG,EAAE,eAAe,CAAC,0BAClC,EAAE,YAEtB,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAC/B,CACR,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/tooltip/parts.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/tooltip/root.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CACnC;AAED,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,aAAmB,EACnB,UAAgB,EAChB,YAAY,GACb,EAAE,gBAAgB,+BAalB"}
1
+ {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/tooltip/root.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CACnC;AAED,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,aAAmB,EACnB,UAAgB,EAChB,YAAY,GACb,EAAE,gBAAgB,+BAelB"}
@@ -7,6 +7,8 @@ export function TooltipRoot({ children, delayDuration = 700, closeDelay = 150, o
7
7
  hideDelay: closeDelay,
8
8
  // A tooltip is a label, not somewhere to move the pointer.
9
9
  hoverableContent: false,
10
+ // A tooltip is a peek: it ends when the finger does.
11
+ pressHolds: false,
10
12
  // `hint` layers above an open menu rather than closing it.
11
13
  kind: 'hint',
12
14
  role: 'tooltip',
@@ -1 +1 @@
1
- {"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/tooltip/root.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAarD,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,aAAa,GAAG,GAAG,EACnB,UAAU,GAAG,GAAG,EAChB,YAAY,GACK;IACjB,MAAM,OAAO,GAAG,eAAe,CAAC;QAC9B,SAAS,EAAE,aAAa;QACxB,SAAS,EAAE,UAAU;QACrB,2DAA2D;QAC3D,gBAAgB,EAAE,KAAK;QACvB,2DAA2D;QAC3D,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;QACf,YAAY;KACb,CAAC,CAAA;IAEF,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAA2B,CAAA;AACtF,CAAC"}
1
+ {"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/tooltip/root.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAarD,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,aAAa,GAAG,GAAG,EACnB,UAAU,GAAG,GAAG,EAChB,YAAY,GACK;IACjB,MAAM,OAAO,GAAG,eAAe,CAAC;QAC9B,SAAS,EAAE,aAAa;QACxB,SAAS,EAAE,UAAU;QACrB,2DAA2D;QAC3D,gBAAgB,EAAE,KAAK;QACvB,qDAAqD;QACrD,UAAU,EAAE,KAAK;QACjB,2DAA2D;QAC3D,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;QACf,YAAY;KACb,CAAC,CAAA;IAEF,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAA2B,CAAA;AACtF,CAAC"}
@@ -3,7 +3,8 @@ export interface TooltipContextValue extends RootContextValue {
3
3
  anchor: string;
4
4
  /** Set when the platform can do intent itself; drives the attribute path. */
5
5
  native: boolean;
6
- registerTrigger(node: HTMLElement | null): void;
6
+ /** `activates` is what only React can see: a handler on the trigger. */
7
+ registerTrigger(node: HTMLElement | null, activates?: boolean): void;
7
8
  /** Tooltips are labels; hover cards are regions with content. */
8
9
  role: 'tooltip' | undefined;
9
10
  kind: 'hint' | 'auto';
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/tooltip/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,MAAM,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,MAAM,EAAE,OAAO,CAAA;IACf,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAAA;IAC/C,iEAAiE;IACjE,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;IAC3B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,cAAc,qDAAkD,CAAA;AAE7E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAKnE"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/tooltip/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,MAAM,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,MAAM,EAAE,OAAO,CAAA;IACf,wEAAwE;IACxE,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACpE,iEAAiE;IACjE,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;IAC3B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,cAAc,qDAAkD,CAAA;AAE7E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAKnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tooltip/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAajD,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAA6B,IAAI,CAAC,CAAA;AAE7E,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAC1C,IAAI,CAAC,OAAO;QACV,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,mDAAmD,CAAC,CAAA;IACvF,OAAO,OAAO,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tooltip/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAcjD,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAA6B,IAAI,CAAC,CAAA;AAE7E,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAC1C,IAAI,CAAC,OAAO;QACV,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,mDAAmD,CAAC,CAAA;IACvF,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -4,6 +4,8 @@ export interface ControlledInterestOptions extends ControlledRootProps {
4
4
  showDelay: number;
5
5
  hideDelay: number;
6
6
  hoverableContent: boolean;
7
+ /** Whether a press that opened it survives the finger coming back up. */
8
+ pressHolds: boolean;
7
9
  kind: 'hint' | 'auto';
8
10
  role: 'tooltip' | undefined;
9
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-controlled-interest-root.d.ts","sourceRoot":"","sources":["../../src/tooltip/use-controlled-interest-root.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAGvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAEnD,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,OAAO,CAAA;IACzB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,yBAAyB,GAAG,mBAAmB,CAwBjG"}
1
+ {"version":3,"file":"use-controlled-interest-root.d.ts","sourceRoot":"","sources":["../../src/tooltip/use-controlled-interest-root.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAGvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAEnD,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,OAAO,CAAA;IACzB,yEAAyE;IACzE,UAAU,EAAE,OAAO,CAAA;IACnB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,yBAAyB,GAAG,mBAAmB,CA0BjG"}
@@ -3,7 +3,7 @@ import { anchorName } from '../anchor.js';
3
3
  import { useSupportsInterestInvokers } from '../capabilities.js';
4
4
  import { useControlledRoot } from '../create-controlled-root.js';
5
5
  import { useInterest } from '../interest.js';
6
- import { popoverAdapter } from '../popover/shared.js';
6
+ import { popoverAdapter, usePopoverKind } from '../popover/shared.js';
7
7
  /**
8
8
  * Controlled Tooltip and HoverCard. Only ever imported from `/controlled`, so
9
9
  * the reconciliation layer stays out of the default bundle — the graph lint
@@ -13,14 +13,16 @@ import { popoverAdapter } from '../popover/shared.js';
13
13
  * still decides whether it happens.
14
14
  */
15
15
  export function useControlledInterestRoot(options) {
16
- const { open, onOpenChange, showDelay, hideDelay, hoverableContent, kind, role } = options;
16
+ const { open, onOpenChange, showDelay, hideDelay, hoverableContent, pressHolds, role } = options;
17
17
  const context = useControlledRoot({ open, onOpenChange }, popoverAdapter);
18
18
  const anchor = useMemo(() => anchorName(context.id), [context.id]);
19
19
  const native = useSupportsInterestInvokers();
20
+ const kind = usePopoverKind(options.kind);
20
21
  const { registerTrigger, registerInterestContent } = useInterest({
21
22
  showDelay,
22
23
  hideDelay,
23
24
  hoverableContent,
25
+ pressHolds,
24
26
  });
25
27
  const registerContent = useCallback((node) => {
26
28
  context.registerContent(node);
@@ -1 +1 @@
1
- {"version":3,"file":"use-controlled-interest-root.js","sourceRoot":"","sources":["../../src/tooltip/use-controlled-interest-root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAA4B,MAAM,2BAA2B,CAAA;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAWlD;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAkC;IAC1E,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAC1F,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,cAAc,CAAC,CAAA;IACzE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IAClE,MAAM,MAAM,GAAG,2BAA2B,EAAE,CAAA;IAE5C,MAAM,EAAE,eAAe,EAAE,uBAAuB,EAAE,GAAG,WAAW,CAAC;QAC/D,SAAS;QACT,SAAS;QACT,gBAAgB;KACjB,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,IAAwB,EAAE,EAAE;QAC3B,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAC7B,uBAAuB,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC,EACD,CAAC,OAAO,EAAE,uBAAuB,CAAC,CACnC,CAAA;IAED,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,EACpF,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,CAAC,CACxE,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"use-controlled-interest-root.js","sourceRoot":"","sources":["../../src/tooltip/use-controlled-interest-root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAA4B,MAAM,2BAA2B,CAAA;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAalE;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAkC;IAC1E,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAChG,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,cAAc,CAAC,CAAA;IACzE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IAClE,MAAM,MAAM,GAAG,2BAA2B,EAAE,CAAA;IAC5C,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEzC,MAAM,EAAE,eAAe,EAAE,uBAAuB,EAAE,GAAG,WAAW,CAAC;QAC/D,SAAS;QACT,SAAS;QACT,gBAAgB;QAChB,UAAU;KACX,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,IAAwB,EAAE,EAAE;QAC3B,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAC7B,uBAAuB,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC,EACD,CAAC,OAAO,EAAE,uBAAuB,CAAC,CACnC,CAAA;IAED,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,EACpF,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,CAAC,CACxE,CAAA;AACH,CAAC"}
@@ -3,6 +3,8 @@ export interface InterestRootOptions {
3
3
  showDelay: number;
4
4
  hideDelay: number;
5
5
  hoverableContent: boolean;
6
+ /** Whether a press that opened it survives the finger coming back up. */
7
+ pressHolds: boolean;
6
8
  kind: 'hint' | 'auto';
7
9
  role: 'tooltip' | undefined;
8
10
  onOpenChange?: ((open: boolean) => void) | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"use-interest-root.d.ts","sourceRoot":"","sources":["../../src/tooltip/use-interest-root.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAEnD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,OAAO,CAAA;IACzB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;IAC3B,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;CACrD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,mBAAmB,CAsCjF"}
1
+ {"version":3,"file":"use-interest-root.d.ts","sourceRoot":"","sources":["../../src/tooltip/use-interest-root.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAEnD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,OAAO,CAAA;IACzB,yEAAyE;IACzE,UAAU,EAAE,OAAO,CAAA;IACnB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;IAC3B,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;CACrD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,mBAAmB,CAwCjF"}
@@ -3,6 +3,7 @@ import { anchorName } from '../anchor.js';
3
3
  import { useSupportsInterestInvokers } from '../capabilities.js';
4
4
  import { useInterest } from '../interest.js';
5
5
  import { useOpenState } from '../open-state.js';
6
+ import { usePopoverKind } from '../popover/shared.js';
6
7
  /**
7
8
  * Everything Tooltip and HoverCard share, which is almost all of it: the two
8
9
  * differ in their delays, in whether the content is hoverable, and in whether
@@ -12,6 +13,7 @@ export function useInterestRoot(options) {
12
13
  const id = useId();
13
14
  const anchor = useMemo(() => anchorName(id), [id]);
14
15
  const native = useSupportsInterestInvokers();
16
+ const kind = usePopoverKind(options.kind);
15
17
  const changeRef = useRef(options.onOpenChange);
16
18
  changeRef.current = options.onOpenChange;
17
19
  const report = useCallback((next) => changeRef.current?.(next), []);
@@ -20,6 +22,7 @@ export function useInterestRoot(options) {
20
22
  showDelay: options.showDelay,
21
23
  hideDelay: options.hideDelay,
22
24
  hoverableContent: options.hoverableContent,
25
+ pressHolds: options.pressHolds,
23
26
  });
24
27
  const registerContent = useCallback((node) => {
25
28
  observe(node);
@@ -30,10 +33,10 @@ export function useInterestRoot(options) {
30
33
  open,
31
34
  anchor,
32
35
  native,
33
- kind: options.kind,
36
+ kind,
34
37
  role: options.role,
35
38
  registerContent,
36
39
  registerTrigger,
37
- }), [id, open, anchor, native, options.kind, options.role, registerContent, registerTrigger]);
40
+ }), [id, open, anchor, native, kind, options.role, registerContent, registerTrigger]);
38
41
  }
39
42
  //# sourceMappingURL=use-interest-root.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-interest-root.js","sourceRoot":"","sources":["../../src/tooltip/use-interest-root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAY5C;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAA4B;IAC1D,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IAClB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAClD,MAAM,MAAM,GAAG,2BAA2B,EAAE,CAAA;IAE5C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IAC9C,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,YAAY,CAAA;IAExC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IAC5E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;IAE9C,MAAM,EAAE,eAAe,EAAE,uBAAuB,EAAE,GAAG,WAAW,CAAC;QAC/D,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,IAAwB,EAAE,EAAE;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAA;QACb,uBAAuB,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC,EACD,CAAC,OAAO,EAAE,uBAAuB,CAAC,CACnC,CAAA;IAED,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,EAAE;QACF,IAAI;QACJ,MAAM;QACN,MAAM;QACN,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,eAAe;QACf,eAAe;KAChB,CAAC,EACF,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,eAAe,CAAC,CACzF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"use-interest-root.js","sourceRoot":"","sources":["../../src/tooltip/use-interest-root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAclD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAA4B;IAC1D,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IAClB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAClD,MAAM,MAAM,GAAG,2BAA2B,EAAE,CAAA;IAC5C,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEzC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IAC9C,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,YAAY,CAAA;IAExC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IAC5E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;IAE9C,MAAM,EAAE,eAAe,EAAE,uBAAuB,EAAE,GAAG,WAAW,CAAC;QAC/D,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,IAAwB,EAAE,EAAE;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAA;QACb,uBAAuB,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC,EACD,CAAC,OAAO,EAAE,uBAAuB,CAAC,CACnC,CAAA;IAED,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,EAAE;QACF,IAAI;QACJ,MAAM;QACN,MAAM;QACN,IAAI;QACJ,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,eAAe;QACf,eAAe;KAChB,CAAC,EACF,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,eAAe,CAAC,CACjF,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apostel/bedrock",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Headless React primitives built on native platform features",
5
5
  "keywords": [
6
6
  "accessibility",
@@ -118,6 +118,12 @@ those, move to the controlled import:
118
118
  Everything else keeps the smaller bundle. A handler that just resets a form or
119
119
  fires analytics is served by the default root.
120
120
 
121
+ The controlled import buys a veto only where the element gives the platform a
122
+ cancelable hook. Collapsible and Accordion are `<details>`, which gives none, so
123
+ a guard there has to be `preventDefault()` on the Trigger's click instead — the
124
+ toggle is that click's default action. Flag it rather than swapping the import
125
+ and assuming it holds.
126
+
121
127
  ### Closed content is unmounted
122
128
 
123
129
  This is usually a *win* — a form inside a dialog resets itself, and any
@@ -132,9 +138,11 @@ dialog.
132
138
 
133
139
  Only what actually differs. Everything not listed is a straight swap.
134
140
 
135
- - **Accordion** — `type="single"` is `<details name>`, so an open item can
136
- always be closed; Radix's `collapsible={false}` has no equivalent. `Header`
137
- renders the `<summary>` and `Trigger` sits inside it.
141
+ - **Accordion, Collapsible** — `<details>`. For Accordion, `type="single"` is
142
+ `<details name>`, so an open item can always be closed; Radix's
143
+ `collapsible={false}` has no equivalent, and `Header` renders the `<summary>`
144
+ with `Trigger` inside it. Neither can refuse a toggle, under either import:
145
+ see above.
138
146
  - **Checkbox, Switch, RadioGroup, Slider, Progress** — real elements, so
139
147
  `Indicator`, `Thumb`, `Track` and `Range` render nothing. Their styles move to
140
148
  `::before`, `::-webkit-slider-thumb`, `::-webkit-progress-value`. Watch for