@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.
- package/dist/accordion/controlled-root.d.ts +5 -2
- package/dist/accordion/controlled-root.d.ts.map +1 -1
- package/dist/accordion/controlled-root.js +5 -2
- package/dist/accordion/controlled-root.js.map +1 -1
- package/dist/capabilities.d.ts +11 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +13 -1
- package/dist/capabilities.js.map +1 -1
- package/dist/collapsible/controlled-root.d.ts +10 -7
- package/dist/collapsible/controlled-root.d.ts.map +1 -1
- package/dist/collapsible/controlled-root.js +10 -7
- package/dist/collapsible/controlled-root.js.map +1 -1
- package/dist/collapsible/shared.d.ts +3 -2
- package/dist/collapsible/shared.d.ts.map +1 -1
- package/dist/collapsible/shared.js +3 -2
- package/dist/collapsible/shared.js.map +1 -1
- package/dist/create-controlled-root.d.ts +12 -4
- package/dist/create-controlled-root.d.ts.map +1 -1
- package/dist/create-controlled-root.js +15 -5
- package/dist/create-controlled-root.js.map +1 -1
- package/dist/hover-card/controlled-root.d.ts.map +1 -1
- package/dist/hover-card/controlled-root.js +2 -0
- package/dist/hover-card/controlled-root.js.map +1 -1
- package/dist/hover-card/root.d.ts.map +1 -1
- package/dist/hover-card/root.js +2 -0
- package/dist/hover-card/root.js.map +1 -1
- package/dist/interest.d.ts +4 -2
- package/dist/interest.d.ts.map +1 -1
- package/dist/interest.js +58 -19
- package/dist/interest.js.map +1 -1
- package/dist/popover/controlled-root.d.ts +1 -1
- package/dist/popover/controlled-root.d.ts.map +1 -1
- package/dist/popover/controlled-root.js +3 -2
- package/dist/popover/controlled-root.js.map +1 -1
- package/dist/popover/root.d.ts +1 -1
- package/dist/popover/root.d.ts.map +1 -1
- package/dist/popover/root.js +3 -2
- package/dist/popover/root.js.map +1 -1
- package/dist/popover/shared.d.ts +12 -0
- package/dist/popover/shared.d.ts.map +1 -1
- package/dist/popover/shared.js +16 -0
- package/dist/popover/shared.js.map +1 -1
- package/dist/tooltip/controlled-root.d.ts.map +1 -1
- package/dist/tooltip/controlled-root.js +2 -0
- package/dist/tooltip/controlled-root.js.map +1 -1
- package/dist/tooltip/parts.d.ts +1 -1
- package/dist/tooltip/parts.d.ts.map +1 -1
- package/dist/tooltip/parts.js +24 -1
- package/dist/tooltip/parts.js.map +1 -1
- package/dist/tooltip/root.d.ts.map +1 -1
- package/dist/tooltip/root.js +2 -0
- package/dist/tooltip/root.js.map +1 -1
- package/dist/tooltip/shared.d.ts +2 -1
- package/dist/tooltip/shared.d.ts.map +1 -1
- package/dist/tooltip/shared.js.map +1 -1
- package/dist/tooltip/use-controlled-interest-root.d.ts +2 -0
- package/dist/tooltip/use-controlled-interest-root.d.ts.map +1 -1
- package/dist/tooltip/use-controlled-interest-root.js +4 -2
- package/dist/tooltip/use-controlled-interest-root.js.map +1 -1
- package/dist/tooltip/use-interest-root.d.ts +2 -0
- package/dist/tooltip/use-interest-root.d.ts.map +1 -1
- package/dist/tooltip/use-interest-root.js +5 -2
- package/dist/tooltip/use-interest-root.js.map +1 -1
- package/package.json +1 -1
- 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
|
|
16
|
-
*
|
|
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
|
|
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
|
|
16
|
-
*
|
|
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":";AAAA,OAAO,EACL,WAAW,EACX,SAAS,EACT,KAAK,EACL,OAAO,EACP,MAAM,GAGP,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAU3C,SAAS,OAAO,CAAC,KAAwB;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAC/C,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"controlled-root.js","sourceRoot":"","sources":["../../src/accordion/controlled-root.tsx"],"names":[],"mappings":"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"}
|
package/dist/capabilities.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
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
|
|
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"}
|
package/dist/capabilities.js
CHANGED
|
@@ -20,7 +20,15 @@ export function supportsInterestInvokers() {
|
|
|
20
20
|
export function supportsAnchorPositioning() {
|
|
21
21
|
return hasDom && CSS.supports('anchor-name', '--a');
|
|
22
22
|
}
|
|
23
|
-
/**
|
|
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
|
package/dist/capabilities.js.map
CHANGED
|
@@ -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
|
|
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
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
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
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
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
|
|
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
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
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
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
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
|
|
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
|
|
8
|
-
*
|
|
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
|
|
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
|
|
13
|
-
*
|
|
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
|
|
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
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
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
|
|
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
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
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
|
-
//
|
|
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
|
|
1
|
+
{"version":3,"file":"create-controlled-root.js","sourceRoot":"","sources":["../src/create-controlled-root.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,+
|
|
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,+
|
|
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"}
|
package/dist/hover-card/root.js
CHANGED
|
@@ -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"}
|
package/dist/interest.d.ts
CHANGED
|
@@ -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
|
package/dist/interest.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
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
|
|
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
|
-
},
|
|
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
|
-
//
|
|
191
|
-
//
|
|
192
|
-
//
|
|
193
|
-
//
|
|
194
|
-
//
|
|
195
|
-
|
|
196
|
-
|
|
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);
|
package/dist/interest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interest.js","sourceRoot":"","sources":["../src/interest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;
|
|
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,
|
|
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;
|
|
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"}
|
package/dist/popover/root.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/popover/root.js
CHANGED
|
@@ -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), []);
|
package/dist/popover/root.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/popover/shared.d.ts
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/popover/shared.js
CHANGED
|
@@ -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;
|
|
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,+
|
|
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"}
|
package/dist/tooltip/parts.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
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,
|
|
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"}
|
package/dist/tooltip/parts.js
CHANGED
|
@@ -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,
|
|
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":";
|
|
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,+
|
|
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"}
|
package/dist/tooltip/root.js
CHANGED
|
@@ -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',
|
package/dist/tooltip/root.js.map
CHANGED
|
@@ -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"}
|
package/dist/tooltip/shared.d.ts
CHANGED
|
@@ -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
|
-
|
|
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;
|
|
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;
|
|
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,
|
|
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,
|
|
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;
|
|
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":"
|
|
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
|
|
36
|
+
kind,
|
|
34
37
|
role: options.role,
|
|
35
38
|
registerContent,
|
|
36
39
|
registerTrigger,
|
|
37
|
-
}), [id, open, anchor, native,
|
|
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;
|
|
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
|
@@ -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
|
|
136
|
-
always be closed; Radix's
|
|
137
|
-
|
|
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
|