@zag-js/tooltip 1.38.1 → 1.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/tooltip.connect.js +28 -15
- package/dist/tooltip.connect.mjs +28 -15
- package/dist/tooltip.dom.d.mts +4 -2
- package/dist/tooltip.dom.d.ts +4 -2
- package/dist/tooltip.dom.js +15 -1
- package/dist/tooltip.dom.mjs +13 -1
- package/dist/tooltip.machine.js +79 -24
- package/dist/tooltip.machine.mjs +79 -24
- package/dist/tooltip.props.js +6 -3
- package/dist/tooltip.props.mjs +6 -3
- package/dist/tooltip.types.d.mts +42 -4
- package/dist/tooltip.types.d.ts +42 -4
- package/package.json +8 -8
package/dist/index.d.mts
CHANGED
|
@@ -2,7 +2,7 @@ export { anatomy } from './tooltip.anatomy.mjs';
|
|
|
2
2
|
export { connect } from './tooltip.connect.mjs';
|
|
3
3
|
export { machine } from './tooltip.machine.mjs';
|
|
4
4
|
export { props, splitProps } from './tooltip.props.mjs';
|
|
5
|
-
export { TooltipApi as Api, ElementIds, TooltipMachine as Machine, OpenChangeDetails, TooltipProps as Props, TooltipService as Service } from './tooltip.types.mjs';
|
|
5
|
+
export { TooltipApi as Api, ElementIds, TooltipMachine as Machine, OpenChangeDetails, TooltipProps as Props, TooltipService as Service, TriggerProps, TriggerValueChangeDetails } from './tooltip.types.mjs';
|
|
6
6
|
export { Placement, PositioningOptions } from '@zag-js/popper';
|
|
7
7
|
import '@zag-js/anatomy';
|
|
8
8
|
import '@zag-js/core';
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { anatomy } from './tooltip.anatomy.js';
|
|
|
2
2
|
export { connect } from './tooltip.connect.js';
|
|
3
3
|
export { machine } from './tooltip.machine.js';
|
|
4
4
|
export { props, splitProps } from './tooltip.props.js';
|
|
5
|
-
export { TooltipApi as Api, ElementIds, TooltipMachine as Machine, OpenChangeDetails, TooltipProps as Props, TooltipService as Service } from './tooltip.types.js';
|
|
5
|
+
export { TooltipApi as Api, ElementIds, TooltipMachine as Machine, OpenChangeDetails, TooltipProps as Props, TooltipService as Service, TriggerProps, TriggerValueChangeDetails } from './tooltip.types.js';
|
|
6
6
|
export { Placement, PositioningOptions } from '@zag-js/popper';
|
|
7
7
|
import '@zag-js/anatomy';
|
|
8
8
|
import '@zag-js/core';
|
package/dist/tooltip.connect.js
CHANGED
|
@@ -44,7 +44,7 @@ function connect(service, normalize) {
|
|
|
44
44
|
const id = prop("id");
|
|
45
45
|
const hasAriaLabel = !!prop("aria-label");
|
|
46
46
|
const open = state.matches("open", "closing");
|
|
47
|
-
const
|
|
47
|
+
const triggerValue = context.get("triggerValue");
|
|
48
48
|
const contentId = dom.getContentId(scope);
|
|
49
49
|
const disabled = prop("disabled");
|
|
50
50
|
const popperStyles = (0, import_popper.getPlacementStyles)({
|
|
@@ -58,13 +58,23 @@ function connect(service, normalize) {
|
|
|
58
58
|
if (open2 === nextOpen) return;
|
|
59
59
|
send({ type: nextOpen ? "open" : "close" });
|
|
60
60
|
},
|
|
61
|
+
triggerValue,
|
|
62
|
+
setTriggerValue(value) {
|
|
63
|
+
send({ type: "triggerValue.set", value: value ?? void 0 });
|
|
64
|
+
},
|
|
61
65
|
reposition(options = {}) {
|
|
62
66
|
send({ type: "positioning.set", options });
|
|
63
67
|
},
|
|
64
|
-
getTriggerProps() {
|
|
68
|
+
getTriggerProps(props = {}) {
|
|
69
|
+
const { value } = props;
|
|
70
|
+
const current = value == null ? false : triggerValue === value;
|
|
71
|
+
const triggerId = dom.getTriggerId(scope, value);
|
|
65
72
|
return normalize.button({
|
|
66
73
|
...import_tooltip.parts.trigger.attrs,
|
|
67
74
|
id: triggerId,
|
|
75
|
+
"data-ownedby": scope.id,
|
|
76
|
+
"data-value": value,
|
|
77
|
+
"data-current": (0, import_dom_query.dataAttr)(current),
|
|
68
78
|
dir: prop("dir"),
|
|
69
79
|
"data-expanded": (0, import_dom_query.dataAttr)(open),
|
|
70
80
|
"data-state": open ? "open" : "closed",
|
|
@@ -73,22 +83,24 @@ function connect(service, normalize) {
|
|
|
73
83
|
if (event.defaultPrevented) return;
|
|
74
84
|
if (disabled) return;
|
|
75
85
|
if (!prop("closeOnClick")) return;
|
|
76
|
-
|
|
86
|
+
const shouldSwitch = open && value != null && !current;
|
|
87
|
+
send({ type: shouldSwitch ? "triggerValue.set" : "close", src: "trigger.click", value, triggerId });
|
|
77
88
|
},
|
|
78
89
|
onFocus(event) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
send({ type: "open", src: "trigger.focus" });
|
|
85
|
-
});
|
|
90
|
+
if (event.defaultPrevented) return;
|
|
91
|
+
if (disabled) return;
|
|
92
|
+
if (!(0, import_focus_visible.isFocusVisible)()) return;
|
|
93
|
+
const shouldSwitch = open && value != null && !current;
|
|
94
|
+
send({ type: shouldSwitch ? "triggerValue.set" : "open", src: "trigger.focus", value, triggerId });
|
|
86
95
|
},
|
|
87
96
|
onBlur(event) {
|
|
88
97
|
if (event.defaultPrevented) return;
|
|
89
98
|
if (disabled) return;
|
|
90
|
-
if (id
|
|
91
|
-
|
|
99
|
+
if (id !== import_tooltip2.store.get("id")) return;
|
|
100
|
+
const activeEl = event.relatedTarget ?? scope.getDoc().activeElement;
|
|
101
|
+
const focusedAnotherTrigger = activeEl?.closest(`[data-ownedby="${scope.id}"]`) != null;
|
|
102
|
+
if (!focusedAnotherTrigger) {
|
|
103
|
+
send({ type: "close", src: "trigger.blur", value, triggerId });
|
|
92
104
|
}
|
|
93
105
|
},
|
|
94
106
|
onPointerDown(event) {
|
|
@@ -97,20 +109,21 @@ function connect(service, normalize) {
|
|
|
97
109
|
if (!(0, import_dom_query.isLeftClick)(event)) return;
|
|
98
110
|
if (!prop("closeOnPointerDown")) return;
|
|
99
111
|
if (id === import_tooltip2.store.get("id")) {
|
|
100
|
-
send({ type: "close", src: "trigger.pointerdown" });
|
|
112
|
+
send({ type: "close", src: "trigger.pointerdown", value, triggerId });
|
|
101
113
|
}
|
|
102
114
|
},
|
|
103
115
|
onPointerMove(event) {
|
|
104
116
|
if (event.defaultPrevented) return;
|
|
105
117
|
if (disabled) return;
|
|
106
118
|
if (event.pointerType === "touch") return;
|
|
107
|
-
|
|
119
|
+
const shouldSwitch = open && value != null && !current;
|
|
120
|
+
send({ type: shouldSwitch ? "triggerValue.set" : "pointer.move", value, triggerId });
|
|
108
121
|
},
|
|
109
122
|
onPointerOver(event) {
|
|
110
123
|
if (event.defaultPrevented) return;
|
|
111
124
|
if (disabled) return;
|
|
112
125
|
if (event.pointerType === "touch") return;
|
|
113
|
-
send({ type: "pointer.move" });
|
|
126
|
+
send({ type: "pointer.move", value, triggerId });
|
|
114
127
|
},
|
|
115
128
|
onPointerLeave() {
|
|
116
129
|
if (disabled) return;
|
package/dist/tooltip.connect.mjs
CHANGED
|
@@ -10,7 +10,7 @@ function connect(service, normalize) {
|
|
|
10
10
|
const id = prop("id");
|
|
11
11
|
const hasAriaLabel = !!prop("aria-label");
|
|
12
12
|
const open = state.matches("open", "closing");
|
|
13
|
-
const
|
|
13
|
+
const triggerValue = context.get("triggerValue");
|
|
14
14
|
const contentId = dom.getContentId(scope);
|
|
15
15
|
const disabled = prop("disabled");
|
|
16
16
|
const popperStyles = getPlacementStyles({
|
|
@@ -24,13 +24,23 @@ function connect(service, normalize) {
|
|
|
24
24
|
if (open2 === nextOpen) return;
|
|
25
25
|
send({ type: nextOpen ? "open" : "close" });
|
|
26
26
|
},
|
|
27
|
+
triggerValue,
|
|
28
|
+
setTriggerValue(value) {
|
|
29
|
+
send({ type: "triggerValue.set", value: value ?? void 0 });
|
|
30
|
+
},
|
|
27
31
|
reposition(options = {}) {
|
|
28
32
|
send({ type: "positioning.set", options });
|
|
29
33
|
},
|
|
30
|
-
getTriggerProps() {
|
|
34
|
+
getTriggerProps(props = {}) {
|
|
35
|
+
const { value } = props;
|
|
36
|
+
const current = value == null ? false : triggerValue === value;
|
|
37
|
+
const triggerId = dom.getTriggerId(scope, value);
|
|
31
38
|
return normalize.button({
|
|
32
39
|
...parts.trigger.attrs,
|
|
33
40
|
id: triggerId,
|
|
41
|
+
"data-ownedby": scope.id,
|
|
42
|
+
"data-value": value,
|
|
43
|
+
"data-current": dataAttr(current),
|
|
34
44
|
dir: prop("dir"),
|
|
35
45
|
"data-expanded": dataAttr(open),
|
|
36
46
|
"data-state": open ? "open" : "closed",
|
|
@@ -39,22 +49,24 @@ function connect(service, normalize) {
|
|
|
39
49
|
if (event.defaultPrevented) return;
|
|
40
50
|
if (disabled) return;
|
|
41
51
|
if (!prop("closeOnClick")) return;
|
|
42
|
-
|
|
52
|
+
const shouldSwitch = open && value != null && !current;
|
|
53
|
+
send({ type: shouldSwitch ? "triggerValue.set" : "close", src: "trigger.click", value, triggerId });
|
|
43
54
|
},
|
|
44
55
|
onFocus(event) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
send({ type: "open", src: "trigger.focus" });
|
|
51
|
-
});
|
|
56
|
+
if (event.defaultPrevented) return;
|
|
57
|
+
if (disabled) return;
|
|
58
|
+
if (!isFocusVisible()) return;
|
|
59
|
+
const shouldSwitch = open && value != null && !current;
|
|
60
|
+
send({ type: shouldSwitch ? "triggerValue.set" : "open", src: "trigger.focus", value, triggerId });
|
|
52
61
|
},
|
|
53
62
|
onBlur(event) {
|
|
54
63
|
if (event.defaultPrevented) return;
|
|
55
64
|
if (disabled) return;
|
|
56
|
-
if (id
|
|
57
|
-
|
|
65
|
+
if (id !== store.get("id")) return;
|
|
66
|
+
const activeEl = event.relatedTarget ?? scope.getDoc().activeElement;
|
|
67
|
+
const focusedAnotherTrigger = activeEl?.closest(`[data-ownedby="${scope.id}"]`) != null;
|
|
68
|
+
if (!focusedAnotherTrigger) {
|
|
69
|
+
send({ type: "close", src: "trigger.blur", value, triggerId });
|
|
58
70
|
}
|
|
59
71
|
},
|
|
60
72
|
onPointerDown(event) {
|
|
@@ -63,20 +75,21 @@ function connect(service, normalize) {
|
|
|
63
75
|
if (!isLeftClick(event)) return;
|
|
64
76
|
if (!prop("closeOnPointerDown")) return;
|
|
65
77
|
if (id === store.get("id")) {
|
|
66
|
-
send({ type: "close", src: "trigger.pointerdown" });
|
|
78
|
+
send({ type: "close", src: "trigger.pointerdown", value, triggerId });
|
|
67
79
|
}
|
|
68
80
|
},
|
|
69
81
|
onPointerMove(event) {
|
|
70
82
|
if (event.defaultPrevented) return;
|
|
71
83
|
if (disabled) return;
|
|
72
84
|
if (event.pointerType === "touch") return;
|
|
73
|
-
|
|
85
|
+
const shouldSwitch = open && value != null && !current;
|
|
86
|
+
send({ type: shouldSwitch ? "triggerValue.set" : "pointer.move", value, triggerId });
|
|
74
87
|
},
|
|
75
88
|
onPointerOver(event) {
|
|
76
89
|
if (event.defaultPrevented) return;
|
|
77
90
|
if (disabled) return;
|
|
78
91
|
if (event.pointerType === "touch") return;
|
|
79
|
-
send({ type: "pointer.move" });
|
|
92
|
+
send({ type: "pointer.move", value, triggerId });
|
|
80
93
|
},
|
|
81
94
|
onPointerLeave() {
|
|
82
95
|
if (disabled) return;
|
package/dist/tooltip.dom.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Scope } from '@zag-js/core';
|
|
2
2
|
|
|
3
|
-
declare const getTriggerId: (scope: Scope) => any;
|
|
3
|
+
declare const getTriggerId: (scope: Scope, value?: string) => any;
|
|
4
4
|
declare const getContentId: (scope: Scope) => any;
|
|
5
5
|
declare const getArrowId: (scope: Scope) => any;
|
|
6
6
|
declare const getPositionerId: (scope: Scope) => any;
|
|
@@ -8,5 +8,7 @@ declare const getTriggerEl: (scope: Scope) => HTMLElement | null;
|
|
|
8
8
|
declare const getContentEl: (scope: Scope) => HTMLElement | null;
|
|
9
9
|
declare const getPositionerEl: (scope: Scope) => HTMLElement | null;
|
|
10
10
|
declare const getArrowEl: (scope: Scope) => HTMLElement | null;
|
|
11
|
+
declare const getTriggerEls: (scope: Scope) => HTMLElement[];
|
|
12
|
+
declare const getActiveTriggerEl: (scope: Scope, value: string | null) => HTMLElement | null;
|
|
11
13
|
|
|
12
|
-
export { getArrowEl, getArrowId, getContentEl, getContentId, getPositionerEl, getPositionerId, getTriggerEl, getTriggerId };
|
|
14
|
+
export { getActiveTriggerEl, getArrowEl, getArrowId, getContentEl, getContentId, getPositionerEl, getPositionerId, getTriggerEl, getTriggerEls, getTriggerId };
|
package/dist/tooltip.dom.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Scope } from '@zag-js/core';
|
|
2
2
|
|
|
3
|
-
declare const getTriggerId: (scope: Scope) => any;
|
|
3
|
+
declare const getTriggerId: (scope: Scope, value?: string) => any;
|
|
4
4
|
declare const getContentId: (scope: Scope) => any;
|
|
5
5
|
declare const getArrowId: (scope: Scope) => any;
|
|
6
6
|
declare const getPositionerId: (scope: Scope) => any;
|
|
@@ -8,5 +8,7 @@ declare const getTriggerEl: (scope: Scope) => HTMLElement | null;
|
|
|
8
8
|
declare const getContentEl: (scope: Scope) => HTMLElement | null;
|
|
9
9
|
declare const getPositionerEl: (scope: Scope) => HTMLElement | null;
|
|
10
10
|
declare const getArrowEl: (scope: Scope) => HTMLElement | null;
|
|
11
|
+
declare const getTriggerEls: (scope: Scope) => HTMLElement[];
|
|
12
|
+
declare const getActiveTriggerEl: (scope: Scope, value: string | null) => HTMLElement | null;
|
|
11
13
|
|
|
12
|
-
export { getArrowEl, getArrowId, getContentEl, getContentId, getPositionerEl, getPositionerId, getTriggerEl, getTriggerId };
|
|
14
|
+
export { getActiveTriggerEl, getArrowEl, getArrowId, getContentEl, getContentId, getPositionerEl, getPositionerId, getTriggerEl, getTriggerEls, getTriggerId };
|
package/dist/tooltip.dom.js
CHANGED
|
@@ -20,6 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/tooltip.dom.ts
|
|
21
21
|
var tooltip_dom_exports = {};
|
|
22
22
|
__export(tooltip_dom_exports, {
|
|
23
|
+
getActiveTriggerEl: () => getActiveTriggerEl,
|
|
23
24
|
getArrowEl: () => getArrowEl,
|
|
24
25
|
getArrowId: () => getArrowId,
|
|
25
26
|
getContentEl: () => getContentEl,
|
|
@@ -27,10 +28,17 @@ __export(tooltip_dom_exports, {
|
|
|
27
28
|
getPositionerEl: () => getPositionerEl,
|
|
28
29
|
getPositionerId: () => getPositionerId,
|
|
29
30
|
getTriggerEl: () => getTriggerEl,
|
|
31
|
+
getTriggerEls: () => getTriggerEls,
|
|
30
32
|
getTriggerId: () => getTriggerId
|
|
31
33
|
});
|
|
32
34
|
module.exports = __toCommonJS(tooltip_dom_exports);
|
|
33
|
-
var
|
|
35
|
+
var import_dom_query = require("@zag-js/dom-query");
|
|
36
|
+
var import_utils = require("@zag-js/utils");
|
|
37
|
+
var getTriggerId = (scope, value) => {
|
|
38
|
+
const customId = scope.ids?.trigger;
|
|
39
|
+
if (customId != null) return (0, import_utils.isFunction)(customId) ? customId(value) : customId;
|
|
40
|
+
return value ? `tooltip:${scope.id}:trigger:${value}` : `tooltip:${scope.id}:trigger`;
|
|
41
|
+
};
|
|
34
42
|
var getContentId = (scope) => scope.ids?.content ?? `tooltip:${scope.id}:content`;
|
|
35
43
|
var getArrowId = (scope) => scope.ids?.arrow ?? `tooltip:${scope.id}:arrow`;
|
|
36
44
|
var getPositionerId = (scope) => scope.ids?.positioner ?? `tooltip:${scope.id}:popper`;
|
|
@@ -38,8 +46,13 @@ var getTriggerEl = (scope) => scope.getById(getTriggerId(scope));
|
|
|
38
46
|
var getContentEl = (scope) => scope.getById(getContentId(scope));
|
|
39
47
|
var getPositionerEl = (scope) => scope.getById(getPositionerId(scope));
|
|
40
48
|
var getArrowEl = (scope) => scope.getById(getArrowId(scope));
|
|
49
|
+
var getTriggerEls = (scope) => (0, import_dom_query.queryAll)(scope.getDoc(), `[data-scope="tooltip"][data-part="trigger"][data-ownedby="${scope.id}"]`);
|
|
50
|
+
var getActiveTriggerEl = (scope, value) => {
|
|
51
|
+
return value == null ? getTriggerEls(scope)[0] : scope.getById(getTriggerId(scope, value));
|
|
52
|
+
};
|
|
41
53
|
// Annotate the CommonJS export names for ESM import in node:
|
|
42
54
|
0 && (module.exports = {
|
|
55
|
+
getActiveTriggerEl,
|
|
43
56
|
getArrowEl,
|
|
44
57
|
getArrowId,
|
|
45
58
|
getContentEl,
|
|
@@ -47,5 +60,6 @@ var getArrowEl = (scope) => scope.getById(getArrowId(scope));
|
|
|
47
60
|
getPositionerEl,
|
|
48
61
|
getPositionerId,
|
|
49
62
|
getTriggerEl,
|
|
63
|
+
getTriggerEls,
|
|
50
64
|
getTriggerId
|
|
51
65
|
});
|
package/dist/tooltip.dom.mjs
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
// src/tooltip.dom.ts
|
|
2
|
-
|
|
2
|
+
import { queryAll } from "@zag-js/dom-query";
|
|
3
|
+
import { isFunction } from "@zag-js/utils";
|
|
4
|
+
var getTriggerId = (scope, value) => {
|
|
5
|
+
const customId = scope.ids?.trigger;
|
|
6
|
+
if (customId != null) return isFunction(customId) ? customId(value) : customId;
|
|
7
|
+
return value ? `tooltip:${scope.id}:trigger:${value}` : `tooltip:${scope.id}:trigger`;
|
|
8
|
+
};
|
|
3
9
|
var getContentId = (scope) => scope.ids?.content ?? `tooltip:${scope.id}:content`;
|
|
4
10
|
var getArrowId = (scope) => scope.ids?.arrow ?? `tooltip:${scope.id}:arrow`;
|
|
5
11
|
var getPositionerId = (scope) => scope.ids?.positioner ?? `tooltip:${scope.id}:popper`;
|
|
@@ -7,7 +13,12 @@ var getTriggerEl = (scope) => scope.getById(getTriggerId(scope));
|
|
|
7
13
|
var getContentEl = (scope) => scope.getById(getContentId(scope));
|
|
8
14
|
var getPositionerEl = (scope) => scope.getById(getPositionerId(scope));
|
|
9
15
|
var getArrowEl = (scope) => scope.getById(getArrowId(scope));
|
|
16
|
+
var getTriggerEls = (scope) => queryAll(scope.getDoc(), `[data-scope="tooltip"][data-part="trigger"][data-ownedby="${scope.id}"]`);
|
|
17
|
+
var getActiveTriggerEl = (scope, value) => {
|
|
18
|
+
return value == null ? getTriggerEls(scope)[0] : scope.getById(getTriggerId(scope, value));
|
|
19
|
+
};
|
|
10
20
|
export {
|
|
21
|
+
getActiveTriggerEl,
|
|
11
22
|
getArrowEl,
|
|
12
23
|
getArrowId,
|
|
13
24
|
getContentEl,
|
|
@@ -15,5 +26,6 @@ export {
|
|
|
15
26
|
getPositionerEl,
|
|
16
27
|
getPositionerId,
|
|
17
28
|
getTriggerEl,
|
|
29
|
+
getTriggerEls,
|
|
18
30
|
getTriggerId
|
|
19
31
|
};
|
package/dist/tooltip.machine.js
CHANGED
|
@@ -37,9 +37,9 @@ var import_core = require("@zag-js/core");
|
|
|
37
37
|
var import_dom_query = require("@zag-js/dom-query");
|
|
38
38
|
var import_focus_visible = require("@zag-js/focus-visible");
|
|
39
39
|
var import_popper = require("@zag-js/popper");
|
|
40
|
+
var import_utils = require("@zag-js/utils");
|
|
40
41
|
var dom = __toESM(require("./tooltip.dom.js"));
|
|
41
42
|
var import_tooltip = require("./tooltip.store.js");
|
|
42
|
-
var import_utils = require("@zag-js/utils");
|
|
43
43
|
var { and, not } = (0, import_core.createGuards)();
|
|
44
44
|
var machine = (0, import_core.createMachine)({
|
|
45
45
|
initialState: ({ prop }) => {
|
|
@@ -67,9 +67,19 @@ var machine = (0, import_core.createMachine)({
|
|
|
67
67
|
};
|
|
68
68
|
},
|
|
69
69
|
effects: ["trackFocusVisible", "trackStore"],
|
|
70
|
-
context: ({ bindable }) => ({
|
|
70
|
+
context: ({ bindable, prop, scope }) => ({
|
|
71
71
|
currentPlacement: bindable(() => ({ defaultValue: void 0 })),
|
|
72
|
-
hasPointerMoveOpened: bindable(() => ({ defaultValue:
|
|
72
|
+
hasPointerMoveOpened: bindable(() => ({ defaultValue: null })),
|
|
73
|
+
triggerValue: bindable(() => ({
|
|
74
|
+
defaultValue: prop("defaultTriggerValue") ?? null,
|
|
75
|
+
value: prop("triggerValue"),
|
|
76
|
+
onChange(value) {
|
|
77
|
+
const onTriggerValueChange = prop("onTriggerValueChange");
|
|
78
|
+
if (!onTriggerValueChange) return;
|
|
79
|
+
const triggerElement = dom.getActiveTriggerEl(scope, value);
|
|
80
|
+
onTriggerValueChange({ value, triggerElement });
|
|
81
|
+
}
|
|
82
|
+
}))
|
|
73
83
|
}),
|
|
74
84
|
watch({ track, action, prop }) {
|
|
75
85
|
track([() => prop("disabled")], () => {
|
|
@@ -78,6 +88,14 @@ var machine = (0, import_core.createMachine)({
|
|
|
78
88
|
track([() => prop("open")], () => {
|
|
79
89
|
action(["toggleVisibility"]);
|
|
80
90
|
});
|
|
91
|
+
track([() => prop("triggerValue")], () => {
|
|
92
|
+
action(["repositionImmediate"]);
|
|
93
|
+
});
|
|
94
|
+
},
|
|
95
|
+
on: {
|
|
96
|
+
"triggerValue.set": {
|
|
97
|
+
actions: ["setTriggerValue", "repositionImmediate"]
|
|
98
|
+
}
|
|
81
99
|
},
|
|
82
100
|
states: {
|
|
83
101
|
closed: {
|
|
@@ -89,11 +107,11 @@ var machine = (0, import_core.createMachine)({
|
|
|
89
107
|
open: [
|
|
90
108
|
{
|
|
91
109
|
guard: "isOpenControlled",
|
|
92
|
-
actions: ["invokeOnOpen"]
|
|
110
|
+
actions: ["setTriggerValue", "invokeOnOpen"]
|
|
93
111
|
},
|
|
94
112
|
{
|
|
95
113
|
target: "open",
|
|
96
|
-
actions: ["invokeOnOpen"]
|
|
114
|
+
actions: ["setTriggerValue", "invokeOnOpen"]
|
|
97
115
|
}
|
|
98
116
|
],
|
|
99
117
|
"pointer.leave": {
|
|
@@ -102,12 +120,13 @@ var machine = (0, import_core.createMachine)({
|
|
|
102
120
|
"pointer.move": [
|
|
103
121
|
{
|
|
104
122
|
guard: and("noVisibleTooltip", not("hasPointerMoveOpened")),
|
|
105
|
-
target: "opening"
|
|
123
|
+
target: "opening",
|
|
124
|
+
actions: ["setTriggerValue"]
|
|
106
125
|
},
|
|
107
126
|
{
|
|
108
127
|
guard: not("hasPointerMoveOpened"),
|
|
109
128
|
target: "open",
|
|
110
|
-
actions: ["setPointerMoveOpened", "invokeOnOpen"]
|
|
129
|
+
actions: ["setPointerMoveOpened", "invokeOnOpen", "setTriggerValue"]
|
|
111
130
|
}
|
|
112
131
|
]
|
|
113
132
|
}
|
|
@@ -134,11 +153,11 @@ var machine = (0, import_core.createMachine)({
|
|
|
134
153
|
open: [
|
|
135
154
|
{
|
|
136
155
|
guard: "isOpenControlled",
|
|
137
|
-
actions: ["invokeOnOpen"]
|
|
156
|
+
actions: ["setTriggerValue", "invokeOnOpen"]
|
|
138
157
|
},
|
|
139
158
|
{
|
|
140
159
|
target: "open",
|
|
141
|
-
actions: ["invokeOnOpen"]
|
|
160
|
+
actions: ["setTriggerValue", "invokeOnOpen"]
|
|
142
161
|
}
|
|
143
162
|
],
|
|
144
163
|
"pointer.leave": [
|
|
@@ -204,6 +223,12 @@ var machine = (0, import_core.createMachine)({
|
|
|
204
223
|
},
|
|
205
224
|
"positioning.set": {
|
|
206
225
|
actions: ["reposition"]
|
|
226
|
+
},
|
|
227
|
+
"triggerValue.set": {
|
|
228
|
+
// Transition to closing (which cleans up trackPositioning) then immediately back to open
|
|
229
|
+
// This re-creates the positioning effect with the new trigger
|
|
230
|
+
target: "closing",
|
|
231
|
+
actions: ["setTriggerValue", "immediateReopen"]
|
|
207
232
|
}
|
|
208
233
|
}
|
|
209
234
|
},
|
|
@@ -240,13 +265,20 @@ var machine = (0, import_core.createMachine)({
|
|
|
240
265
|
{
|
|
241
266
|
guard: "isOpenControlled",
|
|
242
267
|
// We trigger toggleVisibility manually since the `ctx.open` has not changed yet (at this point)
|
|
243
|
-
actions: ["setPointerMoveOpened", "invokeOnOpen", "toggleVisibility"]
|
|
268
|
+
actions: ["setPointerMoveOpened", "setTriggerValue", "invokeOnOpen", "toggleVisibility"]
|
|
244
269
|
},
|
|
245
270
|
{
|
|
246
271
|
target: "open",
|
|
247
|
-
actions: ["setPointerMoveOpened", "invokeOnOpen"]
|
|
272
|
+
actions: ["setPointerMoveOpened", "setTriggerValue", "invokeOnOpen"]
|
|
248
273
|
}
|
|
249
274
|
],
|
|
275
|
+
"triggerValue.set": {
|
|
276
|
+
target: "open",
|
|
277
|
+
actions: ["setTriggerValue", "repositionImmediate"]
|
|
278
|
+
},
|
|
279
|
+
reopen: {
|
|
280
|
+
target: "open"
|
|
281
|
+
},
|
|
250
282
|
"content.pointer.move": {
|
|
251
283
|
guard: "isInteractive",
|
|
252
284
|
target: "open"
|
|
@@ -262,7 +294,7 @@ var machine = (0, import_core.createMachine)({
|
|
|
262
294
|
noVisibleTooltip: () => import_tooltip.store.get("id") === null,
|
|
263
295
|
isVisible: ({ prop }) => prop("id") === import_tooltip.store.get("id"),
|
|
264
296
|
isInteractive: ({ prop }) => !!prop("interactive"),
|
|
265
|
-
hasPointerMoveOpened: ({ context }) => context.get("hasPointerMoveOpened"),
|
|
297
|
+
hasPointerMoveOpened: ({ context }) => !!context.get("hasPointerMoveOpened"),
|
|
266
298
|
isOpenControlled: ({ prop }) => prop("open") !== void 0
|
|
267
299
|
},
|
|
268
300
|
actions: {
|
|
@@ -289,16 +321,27 @@ var machine = (0, import_core.createMachine)({
|
|
|
289
321
|
reposition: ({ context, event, prop, scope }) => {
|
|
290
322
|
if (event.type !== "positioning.set") return;
|
|
291
323
|
const getPositionerEl2 = () => dom.getPositionerEl(scope);
|
|
292
|
-
|
|
324
|
+
const getTriggerEl = () => dom.getActiveTriggerEl(scope, context.get("triggerValue"));
|
|
325
|
+
(0, import_popper.getPlacement)(getTriggerEl, getPositionerEl2, {
|
|
293
326
|
...prop("positioning"),
|
|
294
327
|
...event.options,
|
|
295
|
-
defer: true,
|
|
296
328
|
listeners: false,
|
|
297
329
|
onComplete(data) {
|
|
298
330
|
context.set("currentPlacement", data.placement);
|
|
299
331
|
}
|
|
300
332
|
});
|
|
301
333
|
},
|
|
334
|
+
repositionImmediate: ({ context, event, prop, scope }) => {
|
|
335
|
+
const triggerValue = event.value ?? context.get("triggerValue");
|
|
336
|
+
const getPositionerEl2 = () => dom.getPositionerEl(scope);
|
|
337
|
+
const getTriggerEl = () => dom.getActiveTriggerEl(scope, triggerValue);
|
|
338
|
+
return (0, import_popper.getPlacement)(getTriggerEl, getPositionerEl2, {
|
|
339
|
+
...prop("positioning"),
|
|
340
|
+
onComplete(data) {
|
|
341
|
+
context.set("currentPlacement", data.placement);
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
},
|
|
302
345
|
toggleVisibility: ({ prop, event, send }) => {
|
|
303
346
|
queueMicrotask(() => {
|
|
304
347
|
send({
|
|
@@ -307,11 +350,21 @@ var machine = (0, import_core.createMachine)({
|
|
|
307
350
|
});
|
|
308
351
|
});
|
|
309
352
|
},
|
|
310
|
-
setPointerMoveOpened: ({ context }) => {
|
|
311
|
-
|
|
353
|
+
setPointerMoveOpened: ({ context, event }) => {
|
|
354
|
+
const triggerId = event.triggerId ?? event.previousEvent?.triggerId;
|
|
355
|
+
context.set("hasPointerMoveOpened", triggerId ?? null);
|
|
312
356
|
},
|
|
313
357
|
clearPointerMoveOpened: ({ context }) => {
|
|
314
|
-
context.set("hasPointerMoveOpened",
|
|
358
|
+
context.set("hasPointerMoveOpened", null);
|
|
359
|
+
},
|
|
360
|
+
setTriggerValue: ({ context, event }) => {
|
|
361
|
+
if (event.value === void 0) return;
|
|
362
|
+
context.set("triggerValue", event.value);
|
|
363
|
+
},
|
|
364
|
+
immediateReopen: ({ send }) => {
|
|
365
|
+
queueMicrotask(() => {
|
|
366
|
+
send({ type: "reopen" });
|
|
367
|
+
});
|
|
315
368
|
}
|
|
316
369
|
},
|
|
317
370
|
effects: {
|
|
@@ -323,7 +376,8 @@ var machine = (0, import_core.createMachine)({
|
|
|
323
376
|
context.set("currentPlacement", prop("positioning").placement);
|
|
324
377
|
}
|
|
325
378
|
const getPositionerEl2 = () => dom.getPositionerEl(scope);
|
|
326
|
-
|
|
379
|
+
const getTriggerEl = () => dom.getActiveTriggerEl(scope, context.get("triggerValue"));
|
|
380
|
+
return (0, import_popper.getPlacement)(getTriggerEl, getPositionerEl2, {
|
|
327
381
|
...prop("positioning"),
|
|
328
382
|
defer: true,
|
|
329
383
|
onComplete(data) {
|
|
@@ -336,9 +390,10 @@ var machine = (0, import_core.createMachine)({
|
|
|
336
390
|
const onChange = () => send({ type: "close", src: "pointerlock:change" });
|
|
337
391
|
return (0, import_dom_query.addDomEvent)(doc, "pointerlockchange", onChange, false);
|
|
338
392
|
},
|
|
339
|
-
trackScroll: ({ send, prop, scope }) => {
|
|
393
|
+
trackScroll: ({ send, prop, scope, context }) => {
|
|
340
394
|
if (!prop("closeOnScroll")) return;
|
|
341
|
-
const
|
|
395
|
+
const triggerValue = context.get("triggerValue");
|
|
396
|
+
const triggerEl = dom.getActiveTriggerEl(scope, triggerValue);
|
|
342
397
|
if (!triggerEl) return;
|
|
343
398
|
const overflowParents = (0, import_dom_query.getOverflowAncestors)(triggerEl);
|
|
344
399
|
const cleanups = overflowParents.map((overflowParent) => {
|
|
@@ -375,15 +430,15 @@ var machine = (0, import_core.createMachine)({
|
|
|
375
430
|
};
|
|
376
431
|
return (0, import_dom_query.addDomEvent)(document, "keydown", onKeyDown, true);
|
|
377
432
|
},
|
|
378
|
-
waitForOpenDelay: ({ send, prop }) => {
|
|
433
|
+
waitForOpenDelay: ({ send, prop, event }) => {
|
|
379
434
|
const id = setTimeout(() => {
|
|
380
|
-
send({ type: "after.openDelay" });
|
|
435
|
+
send({ type: "after.openDelay", previousEvent: event });
|
|
381
436
|
}, prop("openDelay"));
|
|
382
437
|
return () => clearTimeout(id);
|
|
383
438
|
},
|
|
384
|
-
waitForCloseDelay: ({ send, prop }) => {
|
|
439
|
+
waitForCloseDelay: ({ send, prop, event }) => {
|
|
385
440
|
const id = setTimeout(() => {
|
|
386
|
-
send({ type: "after.closeDelay" });
|
|
441
|
+
send({ type: "after.closeDelay", previousEvent: event });
|
|
387
442
|
}, prop("closeDelay"));
|
|
388
443
|
return () => clearTimeout(id);
|
|
389
444
|
}
|
package/dist/tooltip.machine.mjs
CHANGED
|
@@ -3,9 +3,9 @@ import { createGuards, createMachine } from "@zag-js/core";
|
|
|
3
3
|
import { addDomEvent, getOverflowAncestors, isComposingEvent } from "@zag-js/dom-query";
|
|
4
4
|
import { trackFocusVisible } from "@zag-js/focus-visible";
|
|
5
5
|
import { getPlacement } from "@zag-js/popper";
|
|
6
|
+
import { ensureProps } from "@zag-js/utils";
|
|
6
7
|
import * as dom from "./tooltip.dom.mjs";
|
|
7
8
|
import { store } from "./tooltip.store.mjs";
|
|
8
|
-
import { ensureProps } from "@zag-js/utils";
|
|
9
9
|
var { and, not } = createGuards();
|
|
10
10
|
var machine = createMachine({
|
|
11
11
|
initialState: ({ prop }) => {
|
|
@@ -33,9 +33,19 @@ var machine = createMachine({
|
|
|
33
33
|
};
|
|
34
34
|
},
|
|
35
35
|
effects: ["trackFocusVisible", "trackStore"],
|
|
36
|
-
context: ({ bindable }) => ({
|
|
36
|
+
context: ({ bindable, prop, scope }) => ({
|
|
37
37
|
currentPlacement: bindable(() => ({ defaultValue: void 0 })),
|
|
38
|
-
hasPointerMoveOpened: bindable(() => ({ defaultValue:
|
|
38
|
+
hasPointerMoveOpened: bindable(() => ({ defaultValue: null })),
|
|
39
|
+
triggerValue: bindable(() => ({
|
|
40
|
+
defaultValue: prop("defaultTriggerValue") ?? null,
|
|
41
|
+
value: prop("triggerValue"),
|
|
42
|
+
onChange(value) {
|
|
43
|
+
const onTriggerValueChange = prop("onTriggerValueChange");
|
|
44
|
+
if (!onTriggerValueChange) return;
|
|
45
|
+
const triggerElement = dom.getActiveTriggerEl(scope, value);
|
|
46
|
+
onTriggerValueChange({ value, triggerElement });
|
|
47
|
+
}
|
|
48
|
+
}))
|
|
39
49
|
}),
|
|
40
50
|
watch({ track, action, prop }) {
|
|
41
51
|
track([() => prop("disabled")], () => {
|
|
@@ -44,6 +54,14 @@ var machine = createMachine({
|
|
|
44
54
|
track([() => prop("open")], () => {
|
|
45
55
|
action(["toggleVisibility"]);
|
|
46
56
|
});
|
|
57
|
+
track([() => prop("triggerValue")], () => {
|
|
58
|
+
action(["repositionImmediate"]);
|
|
59
|
+
});
|
|
60
|
+
},
|
|
61
|
+
on: {
|
|
62
|
+
"triggerValue.set": {
|
|
63
|
+
actions: ["setTriggerValue", "repositionImmediate"]
|
|
64
|
+
}
|
|
47
65
|
},
|
|
48
66
|
states: {
|
|
49
67
|
closed: {
|
|
@@ -55,11 +73,11 @@ var machine = createMachine({
|
|
|
55
73
|
open: [
|
|
56
74
|
{
|
|
57
75
|
guard: "isOpenControlled",
|
|
58
|
-
actions: ["invokeOnOpen"]
|
|
76
|
+
actions: ["setTriggerValue", "invokeOnOpen"]
|
|
59
77
|
},
|
|
60
78
|
{
|
|
61
79
|
target: "open",
|
|
62
|
-
actions: ["invokeOnOpen"]
|
|
80
|
+
actions: ["setTriggerValue", "invokeOnOpen"]
|
|
63
81
|
}
|
|
64
82
|
],
|
|
65
83
|
"pointer.leave": {
|
|
@@ -68,12 +86,13 @@ var machine = createMachine({
|
|
|
68
86
|
"pointer.move": [
|
|
69
87
|
{
|
|
70
88
|
guard: and("noVisibleTooltip", not("hasPointerMoveOpened")),
|
|
71
|
-
target: "opening"
|
|
89
|
+
target: "opening",
|
|
90
|
+
actions: ["setTriggerValue"]
|
|
72
91
|
},
|
|
73
92
|
{
|
|
74
93
|
guard: not("hasPointerMoveOpened"),
|
|
75
94
|
target: "open",
|
|
76
|
-
actions: ["setPointerMoveOpened", "invokeOnOpen"]
|
|
95
|
+
actions: ["setPointerMoveOpened", "invokeOnOpen", "setTriggerValue"]
|
|
77
96
|
}
|
|
78
97
|
]
|
|
79
98
|
}
|
|
@@ -100,11 +119,11 @@ var machine = createMachine({
|
|
|
100
119
|
open: [
|
|
101
120
|
{
|
|
102
121
|
guard: "isOpenControlled",
|
|
103
|
-
actions: ["invokeOnOpen"]
|
|
122
|
+
actions: ["setTriggerValue", "invokeOnOpen"]
|
|
104
123
|
},
|
|
105
124
|
{
|
|
106
125
|
target: "open",
|
|
107
|
-
actions: ["invokeOnOpen"]
|
|
126
|
+
actions: ["setTriggerValue", "invokeOnOpen"]
|
|
108
127
|
}
|
|
109
128
|
],
|
|
110
129
|
"pointer.leave": [
|
|
@@ -170,6 +189,12 @@ var machine = createMachine({
|
|
|
170
189
|
},
|
|
171
190
|
"positioning.set": {
|
|
172
191
|
actions: ["reposition"]
|
|
192
|
+
},
|
|
193
|
+
"triggerValue.set": {
|
|
194
|
+
// Transition to closing (which cleans up trackPositioning) then immediately back to open
|
|
195
|
+
// This re-creates the positioning effect with the new trigger
|
|
196
|
+
target: "closing",
|
|
197
|
+
actions: ["setTriggerValue", "immediateReopen"]
|
|
173
198
|
}
|
|
174
199
|
}
|
|
175
200
|
},
|
|
@@ -206,13 +231,20 @@ var machine = createMachine({
|
|
|
206
231
|
{
|
|
207
232
|
guard: "isOpenControlled",
|
|
208
233
|
// We trigger toggleVisibility manually since the `ctx.open` has not changed yet (at this point)
|
|
209
|
-
actions: ["setPointerMoveOpened", "invokeOnOpen", "toggleVisibility"]
|
|
234
|
+
actions: ["setPointerMoveOpened", "setTriggerValue", "invokeOnOpen", "toggleVisibility"]
|
|
210
235
|
},
|
|
211
236
|
{
|
|
212
237
|
target: "open",
|
|
213
|
-
actions: ["setPointerMoveOpened", "invokeOnOpen"]
|
|
238
|
+
actions: ["setPointerMoveOpened", "setTriggerValue", "invokeOnOpen"]
|
|
214
239
|
}
|
|
215
240
|
],
|
|
241
|
+
"triggerValue.set": {
|
|
242
|
+
target: "open",
|
|
243
|
+
actions: ["setTriggerValue", "repositionImmediate"]
|
|
244
|
+
},
|
|
245
|
+
reopen: {
|
|
246
|
+
target: "open"
|
|
247
|
+
},
|
|
216
248
|
"content.pointer.move": {
|
|
217
249
|
guard: "isInteractive",
|
|
218
250
|
target: "open"
|
|
@@ -228,7 +260,7 @@ var machine = createMachine({
|
|
|
228
260
|
noVisibleTooltip: () => store.get("id") === null,
|
|
229
261
|
isVisible: ({ prop }) => prop("id") === store.get("id"),
|
|
230
262
|
isInteractive: ({ prop }) => !!prop("interactive"),
|
|
231
|
-
hasPointerMoveOpened: ({ context }) => context.get("hasPointerMoveOpened"),
|
|
263
|
+
hasPointerMoveOpened: ({ context }) => !!context.get("hasPointerMoveOpened"),
|
|
232
264
|
isOpenControlled: ({ prop }) => prop("open") !== void 0
|
|
233
265
|
},
|
|
234
266
|
actions: {
|
|
@@ -255,16 +287,27 @@ var machine = createMachine({
|
|
|
255
287
|
reposition: ({ context, event, prop, scope }) => {
|
|
256
288
|
if (event.type !== "positioning.set") return;
|
|
257
289
|
const getPositionerEl2 = () => dom.getPositionerEl(scope);
|
|
258
|
-
|
|
290
|
+
const getTriggerEl = () => dom.getActiveTriggerEl(scope, context.get("triggerValue"));
|
|
291
|
+
getPlacement(getTriggerEl, getPositionerEl2, {
|
|
259
292
|
...prop("positioning"),
|
|
260
293
|
...event.options,
|
|
261
|
-
defer: true,
|
|
262
294
|
listeners: false,
|
|
263
295
|
onComplete(data) {
|
|
264
296
|
context.set("currentPlacement", data.placement);
|
|
265
297
|
}
|
|
266
298
|
});
|
|
267
299
|
},
|
|
300
|
+
repositionImmediate: ({ context, event, prop, scope }) => {
|
|
301
|
+
const triggerValue = event.value ?? context.get("triggerValue");
|
|
302
|
+
const getPositionerEl2 = () => dom.getPositionerEl(scope);
|
|
303
|
+
const getTriggerEl = () => dom.getActiveTriggerEl(scope, triggerValue);
|
|
304
|
+
return getPlacement(getTriggerEl, getPositionerEl2, {
|
|
305
|
+
...prop("positioning"),
|
|
306
|
+
onComplete(data) {
|
|
307
|
+
context.set("currentPlacement", data.placement);
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
},
|
|
268
311
|
toggleVisibility: ({ prop, event, send }) => {
|
|
269
312
|
queueMicrotask(() => {
|
|
270
313
|
send({
|
|
@@ -273,11 +316,21 @@ var machine = createMachine({
|
|
|
273
316
|
});
|
|
274
317
|
});
|
|
275
318
|
},
|
|
276
|
-
setPointerMoveOpened: ({ context }) => {
|
|
277
|
-
|
|
319
|
+
setPointerMoveOpened: ({ context, event }) => {
|
|
320
|
+
const triggerId = event.triggerId ?? event.previousEvent?.triggerId;
|
|
321
|
+
context.set("hasPointerMoveOpened", triggerId ?? null);
|
|
278
322
|
},
|
|
279
323
|
clearPointerMoveOpened: ({ context }) => {
|
|
280
|
-
context.set("hasPointerMoveOpened",
|
|
324
|
+
context.set("hasPointerMoveOpened", null);
|
|
325
|
+
},
|
|
326
|
+
setTriggerValue: ({ context, event }) => {
|
|
327
|
+
if (event.value === void 0) return;
|
|
328
|
+
context.set("triggerValue", event.value);
|
|
329
|
+
},
|
|
330
|
+
immediateReopen: ({ send }) => {
|
|
331
|
+
queueMicrotask(() => {
|
|
332
|
+
send({ type: "reopen" });
|
|
333
|
+
});
|
|
281
334
|
}
|
|
282
335
|
},
|
|
283
336
|
effects: {
|
|
@@ -289,7 +342,8 @@ var machine = createMachine({
|
|
|
289
342
|
context.set("currentPlacement", prop("positioning").placement);
|
|
290
343
|
}
|
|
291
344
|
const getPositionerEl2 = () => dom.getPositionerEl(scope);
|
|
292
|
-
|
|
345
|
+
const getTriggerEl = () => dom.getActiveTriggerEl(scope, context.get("triggerValue"));
|
|
346
|
+
return getPlacement(getTriggerEl, getPositionerEl2, {
|
|
293
347
|
...prop("positioning"),
|
|
294
348
|
defer: true,
|
|
295
349
|
onComplete(data) {
|
|
@@ -302,9 +356,10 @@ var machine = createMachine({
|
|
|
302
356
|
const onChange = () => send({ type: "close", src: "pointerlock:change" });
|
|
303
357
|
return addDomEvent(doc, "pointerlockchange", onChange, false);
|
|
304
358
|
},
|
|
305
|
-
trackScroll: ({ send, prop, scope }) => {
|
|
359
|
+
trackScroll: ({ send, prop, scope, context }) => {
|
|
306
360
|
if (!prop("closeOnScroll")) return;
|
|
307
|
-
const
|
|
361
|
+
const triggerValue = context.get("triggerValue");
|
|
362
|
+
const triggerEl = dom.getActiveTriggerEl(scope, triggerValue);
|
|
308
363
|
if (!triggerEl) return;
|
|
309
364
|
const overflowParents = getOverflowAncestors(triggerEl);
|
|
310
365
|
const cleanups = overflowParents.map((overflowParent) => {
|
|
@@ -341,15 +396,15 @@ var machine = createMachine({
|
|
|
341
396
|
};
|
|
342
397
|
return addDomEvent(document, "keydown", onKeyDown, true);
|
|
343
398
|
},
|
|
344
|
-
waitForOpenDelay: ({ send, prop }) => {
|
|
399
|
+
waitForOpenDelay: ({ send, prop, event }) => {
|
|
345
400
|
const id = setTimeout(() => {
|
|
346
|
-
send({ type: "after.openDelay" });
|
|
401
|
+
send({ type: "after.openDelay", previousEvent: event });
|
|
347
402
|
}, prop("openDelay"));
|
|
348
403
|
return () => clearTimeout(id);
|
|
349
404
|
},
|
|
350
|
-
waitForCloseDelay: ({ send, prop }) => {
|
|
405
|
+
waitForCloseDelay: ({ send, prop, event }) => {
|
|
351
406
|
const id = setTimeout(() => {
|
|
352
|
-
send({ type: "after.closeDelay" });
|
|
407
|
+
send({ type: "after.closeDelay", previousEvent: event });
|
|
353
408
|
}, prop("closeDelay"));
|
|
354
409
|
return () => clearTimeout(id);
|
|
355
410
|
}
|
package/dist/tooltip.props.js
CHANGED
|
@@ -29,10 +29,12 @@ var import_utils = require("@zag-js/utils");
|
|
|
29
29
|
var props = (0, import_types.createProps)()([
|
|
30
30
|
"aria-label",
|
|
31
31
|
"closeDelay",
|
|
32
|
+
"closeOnClick",
|
|
32
33
|
"closeOnEscape",
|
|
33
34
|
"closeOnPointerDown",
|
|
34
35
|
"closeOnScroll",
|
|
35
|
-
"
|
|
36
|
+
"defaultOpen",
|
|
37
|
+
"defaultTriggerValue",
|
|
36
38
|
"dir",
|
|
37
39
|
"disabled",
|
|
38
40
|
"getRootNode",
|
|
@@ -40,10 +42,11 @@ var props = (0, import_types.createProps)()([
|
|
|
40
42
|
"ids",
|
|
41
43
|
"interactive",
|
|
42
44
|
"onOpenChange",
|
|
43
|
-
"
|
|
45
|
+
"onTriggerValueChange",
|
|
44
46
|
"open",
|
|
45
47
|
"openDelay",
|
|
46
|
-
"positioning"
|
|
48
|
+
"positioning",
|
|
49
|
+
"triggerValue"
|
|
47
50
|
]);
|
|
48
51
|
var splitProps = (0, import_utils.createSplitProps)(props);
|
|
49
52
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/tooltip.props.mjs
CHANGED
|
@@ -4,10 +4,12 @@ import { createSplitProps } from "@zag-js/utils";
|
|
|
4
4
|
var props = createProps()([
|
|
5
5
|
"aria-label",
|
|
6
6
|
"closeDelay",
|
|
7
|
+
"closeOnClick",
|
|
7
8
|
"closeOnEscape",
|
|
8
9
|
"closeOnPointerDown",
|
|
9
10
|
"closeOnScroll",
|
|
10
|
-
"
|
|
11
|
+
"defaultOpen",
|
|
12
|
+
"defaultTriggerValue",
|
|
11
13
|
"dir",
|
|
12
14
|
"disabled",
|
|
13
15
|
"getRootNode",
|
|
@@ -15,10 +17,11 @@ var props = createProps()([
|
|
|
15
17
|
"ids",
|
|
16
18
|
"interactive",
|
|
17
19
|
"onOpenChange",
|
|
18
|
-
"
|
|
20
|
+
"onTriggerValueChange",
|
|
19
21
|
"open",
|
|
20
22
|
"openDelay",
|
|
21
|
-
"positioning"
|
|
23
|
+
"positioning",
|
|
24
|
+
"triggerValue"
|
|
22
25
|
]);
|
|
23
26
|
var splitProps = createSplitProps(props);
|
|
24
27
|
export {
|
package/dist/tooltip.types.d.mts
CHANGED
|
@@ -6,8 +6,18 @@ import { PropTypes, RequiredBy, DirectionProperty, CommonProperties } from '@zag
|
|
|
6
6
|
interface OpenChangeDetails {
|
|
7
7
|
open: boolean;
|
|
8
8
|
}
|
|
9
|
+
interface TriggerValueChangeDetails {
|
|
10
|
+
/**
|
|
11
|
+
* The value of the trigger
|
|
12
|
+
*/
|
|
13
|
+
value: string | null;
|
|
14
|
+
/**
|
|
15
|
+
* The trigger element
|
|
16
|
+
*/
|
|
17
|
+
triggerElement: HTMLElement | null;
|
|
18
|
+
}
|
|
9
19
|
type ElementIds = Partial<{
|
|
10
|
-
trigger: string;
|
|
20
|
+
trigger: string | ((value?: string) => string);
|
|
11
21
|
content: string;
|
|
12
22
|
arrow: string;
|
|
13
23
|
positioner: string;
|
|
@@ -80,6 +90,19 @@ interface TooltipProps extends DirectionProperty, CommonProperties {
|
|
|
80
90
|
* Use when you don't need to control the open state of the tooltip.
|
|
81
91
|
*/
|
|
82
92
|
defaultOpen?: boolean | undefined;
|
|
93
|
+
/**
|
|
94
|
+
* The controlled trigger value
|
|
95
|
+
*/
|
|
96
|
+
triggerValue?: string | null | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* The initial trigger value when rendered.
|
|
99
|
+
* Use when you don't need to control the trigger value.
|
|
100
|
+
*/
|
|
101
|
+
defaultTriggerValue?: string | null | undefined;
|
|
102
|
+
/**
|
|
103
|
+
* Function called when the trigger value changes.
|
|
104
|
+
*/
|
|
105
|
+
onTriggerValueChange?: ((details: TriggerValueChangeDetails) => void) | undefined;
|
|
83
106
|
}
|
|
84
107
|
type PropsWithDefault = "openDelay" | "closeDelay" | "closeOnPointerDown" | "closeOnEscape" | "closeOnScroll" | "closeOnClick" | "interactive" | "id" | "positioning";
|
|
85
108
|
interface TooltipSchema {
|
|
@@ -87,7 +110,8 @@ interface TooltipSchema {
|
|
|
87
110
|
props: RequiredBy<TooltipProps, PropsWithDefault>;
|
|
88
111
|
context: {
|
|
89
112
|
currentPlacement: Placement | undefined;
|
|
90
|
-
hasPointerMoveOpened:
|
|
113
|
+
hasPointerMoveOpened: string | null;
|
|
114
|
+
triggerValue: string | null;
|
|
91
115
|
};
|
|
92
116
|
event: EventObject;
|
|
93
117
|
action: string;
|
|
@@ -96,6 +120,12 @@ interface TooltipSchema {
|
|
|
96
120
|
}
|
|
97
121
|
type TooltipService = Service<TooltipSchema>;
|
|
98
122
|
type TooltipMachine = Machine<TooltipSchema>;
|
|
123
|
+
interface TriggerProps {
|
|
124
|
+
/**
|
|
125
|
+
* The value that identifies this specific trigger
|
|
126
|
+
*/
|
|
127
|
+
value?: string;
|
|
128
|
+
}
|
|
99
129
|
interface TooltipApi<T extends PropTypes = PropTypes> {
|
|
100
130
|
/**
|
|
101
131
|
* Whether the tooltip is open.
|
|
@@ -105,15 +135,23 @@ interface TooltipApi<T extends PropTypes = PropTypes> {
|
|
|
105
135
|
* Function to open the tooltip.
|
|
106
136
|
*/
|
|
107
137
|
setOpen: (open: boolean) => void;
|
|
138
|
+
/**
|
|
139
|
+
* The trigger value
|
|
140
|
+
*/
|
|
141
|
+
triggerValue: string | null;
|
|
142
|
+
/**
|
|
143
|
+
* Function to set the trigger value
|
|
144
|
+
*/
|
|
145
|
+
setTriggerValue: (value: string | null) => void;
|
|
108
146
|
/**
|
|
109
147
|
* Function to reposition the popover
|
|
110
148
|
*/
|
|
111
149
|
reposition: (options?: Partial<PositioningOptions>) => void;
|
|
112
|
-
getTriggerProps: () => T["button"];
|
|
150
|
+
getTriggerProps: (props?: TriggerProps) => T["button"];
|
|
113
151
|
getArrowProps: () => T["element"];
|
|
114
152
|
getArrowTipProps: () => T["element"];
|
|
115
153
|
getPositionerProps: () => T["element"];
|
|
116
154
|
getContentProps: () => T["element"];
|
|
117
155
|
}
|
|
118
156
|
|
|
119
|
-
export type { ElementIds, OpenChangeDetails, TooltipApi, TooltipMachine, TooltipProps, TooltipSchema, TooltipService };
|
|
157
|
+
export type { ElementIds, OpenChangeDetails, TooltipApi, TooltipMachine, TooltipProps, TooltipSchema, TooltipService, TriggerProps, TriggerValueChangeDetails };
|
package/dist/tooltip.types.d.ts
CHANGED
|
@@ -6,8 +6,18 @@ import { PropTypes, RequiredBy, DirectionProperty, CommonProperties } from '@zag
|
|
|
6
6
|
interface OpenChangeDetails {
|
|
7
7
|
open: boolean;
|
|
8
8
|
}
|
|
9
|
+
interface TriggerValueChangeDetails {
|
|
10
|
+
/**
|
|
11
|
+
* The value of the trigger
|
|
12
|
+
*/
|
|
13
|
+
value: string | null;
|
|
14
|
+
/**
|
|
15
|
+
* The trigger element
|
|
16
|
+
*/
|
|
17
|
+
triggerElement: HTMLElement | null;
|
|
18
|
+
}
|
|
9
19
|
type ElementIds = Partial<{
|
|
10
|
-
trigger: string;
|
|
20
|
+
trigger: string | ((value?: string) => string);
|
|
11
21
|
content: string;
|
|
12
22
|
arrow: string;
|
|
13
23
|
positioner: string;
|
|
@@ -80,6 +90,19 @@ interface TooltipProps extends DirectionProperty, CommonProperties {
|
|
|
80
90
|
* Use when you don't need to control the open state of the tooltip.
|
|
81
91
|
*/
|
|
82
92
|
defaultOpen?: boolean | undefined;
|
|
93
|
+
/**
|
|
94
|
+
* The controlled trigger value
|
|
95
|
+
*/
|
|
96
|
+
triggerValue?: string | null | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* The initial trigger value when rendered.
|
|
99
|
+
* Use when you don't need to control the trigger value.
|
|
100
|
+
*/
|
|
101
|
+
defaultTriggerValue?: string | null | undefined;
|
|
102
|
+
/**
|
|
103
|
+
* Function called when the trigger value changes.
|
|
104
|
+
*/
|
|
105
|
+
onTriggerValueChange?: ((details: TriggerValueChangeDetails) => void) | undefined;
|
|
83
106
|
}
|
|
84
107
|
type PropsWithDefault = "openDelay" | "closeDelay" | "closeOnPointerDown" | "closeOnEscape" | "closeOnScroll" | "closeOnClick" | "interactive" | "id" | "positioning";
|
|
85
108
|
interface TooltipSchema {
|
|
@@ -87,7 +110,8 @@ interface TooltipSchema {
|
|
|
87
110
|
props: RequiredBy<TooltipProps, PropsWithDefault>;
|
|
88
111
|
context: {
|
|
89
112
|
currentPlacement: Placement | undefined;
|
|
90
|
-
hasPointerMoveOpened:
|
|
113
|
+
hasPointerMoveOpened: string | null;
|
|
114
|
+
triggerValue: string | null;
|
|
91
115
|
};
|
|
92
116
|
event: EventObject;
|
|
93
117
|
action: string;
|
|
@@ -96,6 +120,12 @@ interface TooltipSchema {
|
|
|
96
120
|
}
|
|
97
121
|
type TooltipService = Service<TooltipSchema>;
|
|
98
122
|
type TooltipMachine = Machine<TooltipSchema>;
|
|
123
|
+
interface TriggerProps {
|
|
124
|
+
/**
|
|
125
|
+
* The value that identifies this specific trigger
|
|
126
|
+
*/
|
|
127
|
+
value?: string;
|
|
128
|
+
}
|
|
99
129
|
interface TooltipApi<T extends PropTypes = PropTypes> {
|
|
100
130
|
/**
|
|
101
131
|
* Whether the tooltip is open.
|
|
@@ -105,15 +135,23 @@ interface TooltipApi<T extends PropTypes = PropTypes> {
|
|
|
105
135
|
* Function to open the tooltip.
|
|
106
136
|
*/
|
|
107
137
|
setOpen: (open: boolean) => void;
|
|
138
|
+
/**
|
|
139
|
+
* The trigger value
|
|
140
|
+
*/
|
|
141
|
+
triggerValue: string | null;
|
|
142
|
+
/**
|
|
143
|
+
* Function to set the trigger value
|
|
144
|
+
*/
|
|
145
|
+
setTriggerValue: (value: string | null) => void;
|
|
108
146
|
/**
|
|
109
147
|
* Function to reposition the popover
|
|
110
148
|
*/
|
|
111
149
|
reposition: (options?: Partial<PositioningOptions>) => void;
|
|
112
|
-
getTriggerProps: () => T["button"];
|
|
150
|
+
getTriggerProps: (props?: TriggerProps) => T["button"];
|
|
113
151
|
getArrowProps: () => T["element"];
|
|
114
152
|
getArrowTipProps: () => T["element"];
|
|
115
153
|
getPositionerProps: () => T["element"];
|
|
116
154
|
getContentProps: () => T["element"];
|
|
117
155
|
}
|
|
118
156
|
|
|
119
|
-
export type { ElementIds, OpenChangeDetails, TooltipApi, TooltipMachine, TooltipProps, TooltipSchema, TooltipService };
|
|
157
|
+
export type { ElementIds, OpenChangeDetails, TooltipApi, TooltipMachine, TooltipProps, TooltipSchema, TooltipService, TriggerProps, TriggerValueChangeDetails };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zag-js/tooltip",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.39.0",
|
|
4
4
|
"description": "Core logic for the tooltip widget implemented as a state machine",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"js",
|
|
@@ -26,13 +26,13 @@
|
|
|
26
26
|
"url": "https://github.com/chakra-ui/zag/issues"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@zag-js/anatomy": "1.
|
|
30
|
-
"@zag-js/core": "1.
|
|
31
|
-
"@zag-js/popper": "1.
|
|
32
|
-
"@zag-js/focus-visible": "1.
|
|
33
|
-
"@zag-js/dom-query": "1.
|
|
34
|
-
"@zag-js/utils": "1.
|
|
35
|
-
"@zag-js/types": "1.
|
|
29
|
+
"@zag-js/anatomy": "1.39.0",
|
|
30
|
+
"@zag-js/core": "1.39.0",
|
|
31
|
+
"@zag-js/popper": "1.39.0",
|
|
32
|
+
"@zag-js/focus-visible": "1.39.0",
|
|
33
|
+
"@zag-js/dom-query": "1.39.0",
|
|
34
|
+
"@zag-js/utils": "1.39.0",
|
|
35
|
+
"@zag-js/types": "1.39.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"clean-package": "2.2.0"
|