@zag-js/tooltip 1.41.1 → 2.0.0-next.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.
@@ -51,7 +51,8 @@ function connect(service, normalize) {
51
51
  const disabled = prop("disabled");
52
52
  const popperStyles = (0, import_popper.getPlacementStyles)({
53
53
  ...prop("positioning"),
54
- placement: currentPlacement
54
+ placement: currentPlacement,
55
+ positioned: context.get("positioned")
55
56
  });
56
57
  return {
57
58
  open,
@@ -72,9 +73,8 @@ function connect(service, normalize) {
72
73
  const current = value == null ? false : triggerValue === value;
73
74
  const triggerId = dom.getTriggerId(scope, value);
74
75
  return normalize.button({
75
- ...import_tooltip.parts.trigger.attrs,
76
+ ...import_tooltip.parts.trigger.attrs(scope.id),
76
77
  id: triggerId,
77
- "data-ownedby": scope.id,
78
78
  "data-value": value,
79
79
  "data-current": (0, import_dom_query.dataAttr)(current),
80
80
  dir: prop("dir"),
@@ -100,7 +100,7 @@ function connect(service, normalize) {
100
100
  if (disabled) return;
101
101
  if (id !== import_tooltip2.store.get("id")) return;
102
102
  const activeEl = event.relatedTarget ?? scope.getDoc().activeElement;
103
- const focusedAnotherTrigger = activeEl?.closest(`[data-ownedby="${scope.id}"]`) != null;
103
+ const focusedAnotherTrigger = activeEl?.closest(`[${import_tooltip.parts.trigger.attr}="${scope.id}"]`) != null;
104
104
  if (!focusedAnotherTrigger) {
105
105
  send({ type: "close", src: "trigger.blur", value, triggerId });
106
106
  }
@@ -139,23 +139,21 @@ function connect(service, normalize) {
139
139
  },
140
140
  getArrowProps() {
141
141
  return normalize.element({
142
- id: dom.getArrowId(scope),
143
- ...import_tooltip.parts.arrow.attrs,
142
+ ...import_tooltip.parts.arrow.attrs(scope.id),
144
143
  dir: prop("dir"),
145
144
  style: popperStyles.arrow
146
145
  });
147
146
  },
148
147
  getArrowTipProps() {
149
148
  return normalize.element({
150
- ...import_tooltip.parts.arrowTip.attrs,
149
+ ...import_tooltip.parts.arrowTip.attrs(scope.id),
151
150
  dir: prop("dir"),
152
151
  style: popperStyles.arrowTip
153
152
  });
154
153
  },
155
154
  getPositionerProps() {
156
155
  return normalize.element({
157
- id: dom.getPositionerId(scope),
158
- ...import_tooltip.parts.positioner.attrs,
156
+ ...import_tooltip.parts.positioner.attrs(scope.id),
159
157
  dir: prop("dir"),
160
158
  style: popperStyles.floating
161
159
  });
@@ -165,7 +163,7 @@ function connect(service, normalize) {
165
163
  const isPrevTooltip = import_tooltip2.store.get("prevId") === id;
166
164
  const instant = import_tooltip2.store.get("instant") && (open && isCurrentTooltip || isPrevTooltip);
167
165
  return normalize.element({
168
- ...import_tooltip.parts.content.attrs,
166
+ ...import_tooltip.parts.content.attrs(scope.id),
169
167
  dir: prop("dir"),
170
168
  hidden: !open,
171
169
  "data-state": open ? "open" : "closed",
@@ -17,7 +17,8 @@ function connect(service, normalize) {
17
17
  const disabled = prop("disabled");
18
18
  const popperStyles = getPlacementStyles({
19
19
  ...prop("positioning"),
20
- placement: currentPlacement
20
+ placement: currentPlacement,
21
+ positioned: context.get("positioned")
21
22
  });
22
23
  return {
23
24
  open,
@@ -38,9 +39,8 @@ function connect(service, normalize) {
38
39
  const current = value == null ? false : triggerValue === value;
39
40
  const triggerId = dom.getTriggerId(scope, value);
40
41
  return normalize.button({
41
- ...parts.trigger.attrs,
42
+ ...parts.trigger.attrs(scope.id),
42
43
  id: triggerId,
43
- "data-ownedby": scope.id,
44
44
  "data-value": value,
45
45
  "data-current": dataAttr(current),
46
46
  dir: prop("dir"),
@@ -66,7 +66,7 @@ function connect(service, normalize) {
66
66
  if (disabled) return;
67
67
  if (id !== store.get("id")) return;
68
68
  const activeEl = event.relatedTarget ?? scope.getDoc().activeElement;
69
- const focusedAnotherTrigger = activeEl?.closest(`[data-ownedby="${scope.id}"]`) != null;
69
+ const focusedAnotherTrigger = activeEl?.closest(`[${parts.trigger.attr}="${scope.id}"]`) != null;
70
70
  if (!focusedAnotherTrigger) {
71
71
  send({ type: "close", src: "trigger.blur", value, triggerId });
72
72
  }
@@ -105,23 +105,21 @@ function connect(service, normalize) {
105
105
  },
106
106
  getArrowProps() {
107
107
  return normalize.element({
108
- id: dom.getArrowId(scope),
109
- ...parts.arrow.attrs,
108
+ ...parts.arrow.attrs(scope.id),
110
109
  dir: prop("dir"),
111
110
  style: popperStyles.arrow
112
111
  });
113
112
  },
114
113
  getArrowTipProps() {
115
114
  return normalize.element({
116
- ...parts.arrowTip.attrs,
115
+ ...parts.arrowTip.attrs(scope.id),
117
116
  dir: prop("dir"),
118
117
  style: popperStyles.arrowTip
119
118
  });
120
119
  },
121
120
  getPositionerProps() {
122
121
  return normalize.element({
123
- id: dom.getPositionerId(scope),
124
- ...parts.positioner.attrs,
122
+ ...parts.positioner.attrs(scope.id),
125
123
  dir: prop("dir"),
126
124
  style: popperStyles.floating
127
125
  });
@@ -131,7 +129,7 @@ function connect(service, normalize) {
131
129
  const isPrevTooltip = store.get("prevId") === id;
132
130
  const instant = store.get("instant") && (open && isCurrentTooltip || isPrevTooltip);
133
131
  return normalize.element({
134
- ...parts.content.attrs,
132
+ ...parts.content.attrs(scope.id),
135
133
  dir: prop("dir"),
136
134
  hidden: !open,
137
135
  "data-state": open ? "open" : "closed",
@@ -32,26 +32,24 @@ __export(tooltip_dom_exports, {
32
32
  getTriggerId: () => getTriggerId
33
33
  });
34
34
  module.exports = __toCommonJS(tooltip_dom_exports);
35
- var import_dom_query = require("@zag-js/dom-query");
36
35
  var import_utils = require("@zag-js/utils");
36
+ var import_tooltip = require("./tooltip.anatomy.js");
37
37
  var getTriggerId = (scope, value) => {
38
38
  const customId = scope.ids?.trigger;
39
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`;
40
+ return value ? `${scope.id}:trigger:${value}` : `${scope.id}:trigger`;
41
41
  };
42
- var getContentId = (scope) => scope.ids?.content ?? `tooltip:${scope.id}:content`;
43
- var getArrowId = (scope) => scope.ids?.arrow ?? `tooltip:${scope.id}:arrow`;
44
- var getPositionerId = (scope) => scope.ids?.positioner ?? `tooltip:${scope.id}:popper`;
45
- var getTriggerEl = (scope) => scope.getById(getTriggerId(scope));
46
- var getContentEl = (scope) => scope.getById(getContentId(scope));
47
- var getPositionerEl = (scope) => scope.getById(getPositionerId(scope));
48
- var getArrowEl = (scope) => scope.getById(getArrowId(scope));
49
- var getTriggerEls = (scope) => (0, import_dom_query.queryAll)(scope.getRootNode(), `[data-scope="tooltip"][data-part="trigger"][data-ownedby="${scope.id}"]`);
42
+ var getContentId = (scope) => scope.ids?.content ?? `${scope.id}:content`;
43
+ var getArrowId = (scope) => scope.ids?.arrow ?? `${scope.id}:arrow`;
44
+ var getPositionerId = (scope) => scope.ids?.positioner ?? `${scope.id}:popper`;
45
+ var getTriggerEl = (scope) => scope.query(scope.selector(import_tooltip.parts.trigger));
46
+ var getContentEl = (scope) => scope.query(scope.selector(import_tooltip.parts.content));
47
+ var getPositionerEl = (scope) => scope.query(scope.selector(import_tooltip.parts.positioner));
48
+ var getArrowEl = (scope) => scope.query(scope.selector(import_tooltip.parts.arrow));
49
+ var getTriggerEls = (scope) => scope.queryAll(scope.selector(import_tooltip.parts.trigger));
50
50
  var getActiveTriggerEl = (scope, value) => {
51
- if (value == null) {
52
- return getTriggerEl(scope) ?? getTriggerEls(scope)[0];
53
- }
54
- return scope.getById(getTriggerId(scope, value));
51
+ if (value == null) return getTriggerEls(scope)[0];
52
+ return scope.query(`${scope.selector(import_tooltip.parts.trigger)}[data-value="${value}"]`);
55
53
  };
56
54
  // Annotate the CommonJS export names for ESM import in node:
57
55
  0 && (module.exports = {
@@ -1,24 +1,22 @@
1
1
  // src/tooltip.dom.ts
2
- import { queryAll } from "@zag-js/dom-query";
3
2
  import { isFunction } from "@zag-js/utils";
3
+ import { parts } from "./tooltip.anatomy.mjs";
4
4
  var getTriggerId = (scope, value) => {
5
5
  const customId = scope.ids?.trigger;
6
6
  if (customId != null) return isFunction(customId) ? customId(value) : customId;
7
- return value ? `tooltip:${scope.id}:trigger:${value}` : `tooltip:${scope.id}:trigger`;
7
+ return value ? `${scope.id}:trigger:${value}` : `${scope.id}:trigger`;
8
8
  };
9
- var getContentId = (scope) => scope.ids?.content ?? `tooltip:${scope.id}:content`;
10
- var getArrowId = (scope) => scope.ids?.arrow ?? `tooltip:${scope.id}:arrow`;
11
- var getPositionerId = (scope) => scope.ids?.positioner ?? `tooltip:${scope.id}:popper`;
12
- var getTriggerEl = (scope) => scope.getById(getTriggerId(scope));
13
- var getContentEl = (scope) => scope.getById(getContentId(scope));
14
- var getPositionerEl = (scope) => scope.getById(getPositionerId(scope));
15
- var getArrowEl = (scope) => scope.getById(getArrowId(scope));
16
- var getTriggerEls = (scope) => queryAll(scope.getRootNode(), `[data-scope="tooltip"][data-part="trigger"][data-ownedby="${scope.id}"]`);
9
+ var getContentId = (scope) => scope.ids?.content ?? `${scope.id}:content`;
10
+ var getArrowId = (scope) => scope.ids?.arrow ?? `${scope.id}:arrow`;
11
+ var getPositionerId = (scope) => scope.ids?.positioner ?? `${scope.id}:popper`;
12
+ var getTriggerEl = (scope) => scope.query(scope.selector(parts.trigger));
13
+ var getContentEl = (scope) => scope.query(scope.selector(parts.content));
14
+ var getPositionerEl = (scope) => scope.query(scope.selector(parts.positioner));
15
+ var getArrowEl = (scope) => scope.query(scope.selector(parts.arrow));
16
+ var getTriggerEls = (scope) => scope.queryAll(scope.selector(parts.trigger));
17
17
  var getActiveTriggerEl = (scope, value) => {
18
- if (value == null) {
19
- return getTriggerEl(scope) ?? getTriggerEls(scope)[0];
20
- }
21
- return scope.getById(getTriggerId(scope, value));
18
+ if (value == null) return getTriggerEls(scope)[0];
19
+ return scope.query(`${scope.selector(parts.trigger)}[data-value="${value}"]`);
22
20
  };
23
21
  export {
24
22
  getActiveTriggerEl,
@@ -79,7 +79,8 @@ var machine = (0, import_core.createMachine)({
79
79
  const triggerElement = dom.getActiveTriggerEl(scope, value);
80
80
  onTriggerValueChange({ value, triggerElement });
81
81
  }
82
- }))
82
+ })),
83
+ positioned: bindable(() => ({ defaultValue: false }))
83
84
  }),
84
85
  watch({ track, action, prop }) {
85
86
  track([() => prop("disabled")], () => {
@@ -382,6 +383,7 @@ var machine = (0, import_core.createMachine)({
382
383
  defer: true,
383
384
  onComplete(data) {
384
385
  context.set("currentPlacement", data.placement);
386
+ context.set("positioned", true);
385
387
  }
386
388
  });
387
389
  },
@@ -45,7 +45,8 @@ var machine = createMachine({
45
45
  const triggerElement = dom.getActiveTriggerEl(scope, value);
46
46
  onTriggerValueChange({ value, triggerElement });
47
47
  }
48
- }))
48
+ })),
49
+ positioned: bindable(() => ({ defaultValue: false }))
49
50
  }),
50
51
  watch({ track, action, prop }) {
51
52
  track([() => prop("disabled")], () => {
@@ -348,6 +349,7 @@ var machine = createMachine({
348
349
  defer: true,
349
350
  onComplete(data) {
350
351
  context.set("currentPlacement", data.placement);
352
+ context.set("positioned", true);
351
353
  }
352
354
  });
353
355
  },
@@ -112,6 +112,7 @@ interface TooltipSchema {
112
112
  currentPlacement: Placement | undefined;
113
113
  hasPointerMoveOpened: string | null;
114
114
  triggerValue: string | null;
115
+ positioned: boolean;
115
116
  };
116
117
  event: EventObject;
117
118
  action: string;
@@ -112,6 +112,7 @@ interface TooltipSchema {
112
112
  currentPlacement: Placement | undefined;
113
113
  hasPointerMoveOpened: string | null;
114
114
  triggerValue: string | null;
115
+ positioned: boolean;
115
116
  };
116
117
  event: EventObject;
117
118
  action: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zag-js/tooltip",
3
- "version": "1.41.1",
3
+ "version": "2.0.0-next.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.41.1",
30
- "@zag-js/core": "1.41.1",
31
- "@zag-js/popper": "1.41.1",
32
- "@zag-js/focus-visible": "1.41.1",
33
- "@zag-js/dom-query": "1.41.1",
34
- "@zag-js/utils": "1.41.1",
35
- "@zag-js/types": "1.41.1"
29
+ "@zag-js/anatomy": "2.0.0-next.0",
30
+ "@zag-js/core": "2.0.0-next.0",
31
+ "@zag-js/popper": "2.0.0-next.0",
32
+ "@zag-js/focus-visible": "2.0.0-next.0",
33
+ "@zag-js/dom-query": "2.0.0-next.0",
34
+ "@zag-js/utils": "2.0.0-next.0",
35
+ "@zag-js/types": "2.0.0-next.0"
36
36
  },
37
37
  "devDependencies": {
38
38
  "clean-package": "2.2.0"