@plasmicpkgs/react-aria 0.0.109 → 0.0.111
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/.tsbuildinfo +1 -1
- package/dist/react-aria.esm.js +173 -105
- package/dist/react-aria.esm.js.map +1 -1
- package/dist/react-aria.js +170 -102
- package/dist/react-aria.js.map +1 -1
- package/dist/registerTooltip.d.ts +3 -1
- package/package.json +2 -2
- package/skinny/registerDialogTrigger.cjs.js +2 -2
- package/skinny/registerDialogTrigger.cjs.js.map +1 -1
- package/skinny/registerDialogTrigger.esm.js +2 -2
- package/skinny/registerDialogTrigger.esm.js.map +1 -1
- package/skinny/registerDialogTrigger.stories.cjs.js +2 -19
- package/skinny/registerDialogTrigger.stories.cjs.js.map +1 -1
- package/skinny/registerDialogTrigger.stories.esm.js +2 -19
- package/skinny/registerDialogTrigger.stories.esm.js.map +1 -1
- package/skinny/registerModal.cjs.js +1 -1
- package/skinny/registerModal.cjs.js.map +1 -1
- package/skinny/registerModal.esm.js +1 -1
- package/skinny/registerModal.esm.js.map +1 -1
- package/skinny/registerSelect.cjs.js +2 -0
- package/skinny/registerSelect.cjs.js.map +1 -1
- package/skinny/registerSelect.esm.js +2 -0
- package/skinny/registerSelect.esm.js.map +1 -1
- package/skinny/registerSelect.stories.cjs.js +39 -0
- package/skinny/registerSelect.stories.cjs.js.map +1 -1
- package/skinny/registerSelect.stories.esm.js +38 -1
- package/skinny/registerSelect.stories.esm.js.map +1 -1
- package/skinny/registerSlider.stories.cjs.js +16 -35
- package/skinny/registerSlider.stories.cjs.js.map +1 -1
- package/skinny/registerSlider.stories.esm.js +17 -37
- package/skinny/registerSlider.stories.esm.js.map +1 -1
- package/skinny/registerSliderTrack.cjs.js +6 -4
- package/skinny/registerSliderTrack.cjs.js.map +1 -1
- package/skinny/registerSliderTrack.esm.js +7 -5
- package/skinny/registerSliderTrack.esm.js.map +1 -1
- package/skinny/registerTooltip.cjs.js +111 -47
- package/skinny/registerTooltip.cjs.js.map +1 -1
- package/skinny/registerTooltip.d.ts +3 -1
- package/skinny/registerTooltip.esm.js +115 -51
- package/skinny/registerTooltip.esm.js.map +1 -1
- package/skinny/registerTooltip.stories.cjs.js +282 -24
- package/skinny/registerTooltip.stories.cjs.js.map +1 -1
- package/skinny/registerTooltip.stories.esm.js +278 -26
- package/skinny/registerTooltip.stories.esm.js.map +1 -1
|
@@ -13,6 +13,7 @@ require('./common-b3b54c72.cjs.js');
|
|
|
13
13
|
require('./utils-7d000fa4.cjs.js');
|
|
14
14
|
require('@plasmicapp/host/registerComponent');
|
|
15
15
|
require('./variant-utils-0ad70db8.cjs.js');
|
|
16
|
+
require('react-stately');
|
|
16
17
|
|
|
17
18
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
19
|
|
|
@@ -54,29 +55,41 @@ const meta = {
|
|
|
54
55
|
component: registerTooltip.BaseTooltip,
|
|
55
56
|
args: {
|
|
56
57
|
onOpenChange: test.fn(),
|
|
57
|
-
children: /* @__PURE__ */ React__default.default.createElement(
|
|
58
|
+
children: /* @__PURE__ */ React__default.default.createElement("span", null, "Show tooltip"),
|
|
58
59
|
// anything can be used as a trigger
|
|
59
60
|
tooltipContent: /* @__PURE__ */ React__default.default.createElement("div", { "data-testid": "tooltip-content" }, "This is a tooltip"),
|
|
60
61
|
trigger: void 0,
|
|
61
62
|
// means that it triggers on both focus and hover
|
|
62
63
|
delay: 0,
|
|
63
64
|
closeDelay: 0
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
onOpenChange: (newValue) => {
|
|
75
|
-
setOpen(newValue);
|
|
76
|
-
onOpenChange == null ? void 0 : onOpenChange(newValue);
|
|
77
|
-
}
|
|
78
|
-
}, args)
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const Basic = {
|
|
68
|
+
play: async ({ canvasElement, args }) => {
|
|
69
|
+
const canvas = test.within(canvasElement);
|
|
70
|
+
const trigger = canvas.getByText("Show tooltip");
|
|
71
|
+
await test.waitFor(
|
|
72
|
+
() => test.expect(
|
|
73
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
74
|
+
).not.toBeInTheDocument()
|
|
79
75
|
);
|
|
76
|
+
await test.userEvent.hover(trigger);
|
|
77
|
+
await test.waitFor(() => {
|
|
78
|
+
var _a, _b;
|
|
79
|
+
const tooltip = test.within(document.body).getByTestId("tooltip-content");
|
|
80
|
+
const tooltipId = (_a = tooltip.parentElement) == null ? void 0 : _a.getAttribute("id");
|
|
81
|
+
test.expect(tooltipId).toBeDefined();
|
|
82
|
+
test.expect((_b = trigger.parentElement) == null ? void 0 : _b.getAttribute("aria-describedby")).toEqual(
|
|
83
|
+
tooltipId
|
|
84
|
+
);
|
|
85
|
+
});
|
|
86
|
+
test.expect(args.onOpenChange).toHaveBeenCalledWith(true);
|
|
87
|
+
await test.userEvent.unhover(trigger);
|
|
88
|
+
await test.waitFor(() => test.expect(args.onOpenChange).toHaveBeenCalledWith(false));
|
|
89
|
+
test.expect(args.onOpenChange).toHaveBeenCalledTimes(2);
|
|
90
|
+
await test.userEvent.tab();
|
|
91
|
+
await test.expect(trigger).not.toHaveFocus();
|
|
92
|
+
test.expect(args.onOpenChange).toHaveBeenCalledTimes(2);
|
|
80
93
|
}
|
|
81
94
|
};
|
|
82
95
|
const AlwaysOpen = {
|
|
@@ -93,13 +106,52 @@ const AlwaysOpen = {
|
|
|
93
106
|
}
|
|
94
107
|
};
|
|
95
108
|
const FocusTrigger = {
|
|
96
|
-
|
|
109
|
+
args: {
|
|
110
|
+
// TabIndex=0 makes it focusable
|
|
111
|
+
children: /* @__PURE__ */ React__default.default.createElement("span", { tabIndex: 0 }, "Show tooltip")
|
|
112
|
+
// anything can be used as a trigger
|
|
113
|
+
},
|
|
114
|
+
play: async ({ canvasElement, args }) => {
|
|
115
|
+
const canvas = test.within(canvasElement);
|
|
116
|
+
const trigger = canvas.getByText("Show tooltip");
|
|
117
|
+
await test.waitFor(
|
|
118
|
+
() => test.expect(
|
|
119
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
120
|
+
).not.toBeInTheDocument()
|
|
121
|
+
);
|
|
122
|
+
await test.userEvent.tab();
|
|
123
|
+
await test.expect(trigger).toHaveFocus();
|
|
124
|
+
await test.waitFor(
|
|
125
|
+
() => test.expect(
|
|
126
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
127
|
+
).toBeInTheDocument()
|
|
128
|
+
);
|
|
129
|
+
test.expect(args.onOpenChange).toHaveBeenCalledWith(true);
|
|
130
|
+
await test.userEvent.tab();
|
|
131
|
+
await test.expect(trigger).not.toHaveFocus();
|
|
132
|
+
await test.waitFor(() => test.expect(args.onOpenChange).toHaveBeenCalledWith(false));
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
const CustomButton = (_a) => {
|
|
136
|
+
var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
|
|
137
|
+
return /* @__PURE__ */ React__default.default.createElement("div", __spreadProps(__spreadValues({}, props), { "data-testid": "trigger-wrapper" }), /* @__PURE__ */ React__default.default.createElement("span", { tabIndex: 0 }, children), /* @__PURE__ */ React__default.default.createElement("span", { tabIndex: 0 }, children));
|
|
138
|
+
};
|
|
139
|
+
const WithoutForwardRefTrigger = {
|
|
140
|
+
args: {
|
|
141
|
+
children: /* @__PURE__ */ React__default.default.createElement(CustomButton, null, "Show tooltip")
|
|
142
|
+
},
|
|
143
|
+
play: async ({ args, canvasElement }) => {
|
|
144
|
+
const canvas = test.within(canvasElement);
|
|
145
|
+
const triggerWrapper = canvas.getByTestId("trigger-wrapper");
|
|
146
|
+
const innerFocusableButtons = canvas.getAllByText("Show tooltip");
|
|
97
147
|
await test.waitFor(
|
|
98
148
|
() => test.expect(
|
|
99
149
|
test.within(document.body).queryByTestId("tooltip-content")
|
|
100
150
|
).not.toBeInTheDocument()
|
|
101
151
|
);
|
|
152
|
+
await test.expect(innerFocusableButtons[0]).not.toHaveFocus();
|
|
102
153
|
await test.userEvent.tab();
|
|
154
|
+
test.expect(innerFocusableButtons[0]).toHaveFocus();
|
|
103
155
|
await test.waitFor(
|
|
104
156
|
() => test.expect(
|
|
105
157
|
test.within(document.body).queryByTestId("tooltip-content")
|
|
@@ -107,16 +159,46 @@ const FocusTrigger = {
|
|
|
107
159
|
);
|
|
108
160
|
test.expect(args.onOpenChange).toHaveBeenCalledWith(true);
|
|
109
161
|
await test.userEvent.tab();
|
|
162
|
+
test.expect(innerFocusableButtons[0]).not.toHaveFocus();
|
|
163
|
+
test.expect(innerFocusableButtons[1]).toHaveFocus();
|
|
164
|
+
await test.waitFor(
|
|
165
|
+
() => test.expect(
|
|
166
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
167
|
+
).toBeInTheDocument()
|
|
168
|
+
);
|
|
169
|
+
await test.userEvent.tab();
|
|
170
|
+
test.expect(innerFocusableButtons[1]).not.toHaveFocus();
|
|
171
|
+
test.expect(args.onOpenChange).toHaveBeenCalledWith(false);
|
|
172
|
+
await test.waitFor(
|
|
173
|
+
() => test.expect(
|
|
174
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
175
|
+
).not.toBeInTheDocument()
|
|
176
|
+
);
|
|
177
|
+
await test.userEvent.hover(triggerWrapper);
|
|
178
|
+
await test.waitFor(
|
|
179
|
+
() => test.expect(
|
|
180
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
181
|
+
).toBeInTheDocument()
|
|
182
|
+
);
|
|
183
|
+
test.expect(args.onOpenChange).toHaveBeenCalledWith(true);
|
|
184
|
+
await test.userEvent.unhover(triggerWrapper);
|
|
185
|
+
await test.waitFor(
|
|
186
|
+
() => test.expect(
|
|
187
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
188
|
+
).not.toBeInTheDocument()
|
|
189
|
+
);
|
|
110
190
|
await test.waitFor(() => test.expect(args.onOpenChange).toHaveBeenCalledWith(false));
|
|
111
191
|
}
|
|
112
192
|
};
|
|
113
193
|
const FocusTriggerOnly = {
|
|
114
194
|
args: {
|
|
115
|
-
trigger: "focus"
|
|
195
|
+
trigger: "focus",
|
|
196
|
+
children: /* @__PURE__ */ React__default.default.createElement("span", { tabIndex: 0 }, "Show tooltip")
|
|
197
|
+
// anything can be used as a trigger
|
|
116
198
|
},
|
|
117
199
|
play: async ({ args, canvasElement }) => {
|
|
118
200
|
const canvas = test.within(canvasElement);
|
|
119
|
-
const trigger = canvas.getByText("
|
|
201
|
+
const trigger = canvas.getByText("Show tooltip");
|
|
120
202
|
await test.waitFor(
|
|
121
203
|
() => test.expect(
|
|
122
204
|
test.within(document.body).queryByTestId("tooltip-content")
|
|
@@ -131,6 +213,7 @@ const FocusTriggerOnly = {
|
|
|
131
213
|
test.expect(args.onOpenChange).not.toHaveBeenCalled();
|
|
132
214
|
await test.userEvent.unhover(trigger);
|
|
133
215
|
await test.userEvent.tab();
|
|
216
|
+
await test.expect(trigger).toHaveFocus();
|
|
134
217
|
await test.waitFor(
|
|
135
218
|
() => test.expect(
|
|
136
219
|
test.within(document.body).queryByTestId("tooltip-content")
|
|
@@ -141,13 +224,41 @@ const FocusTriggerOnly = {
|
|
|
141
224
|
await test.waitFor(() => test.expect(args.onOpenChange).toHaveBeenCalledWith(false));
|
|
142
225
|
}
|
|
143
226
|
};
|
|
227
|
+
const TriggerWithEventHandlers = {
|
|
228
|
+
parameters: {
|
|
229
|
+
customOnFocus: test.fn()
|
|
230
|
+
},
|
|
231
|
+
render: (args, { parameters }) => /* @__PURE__ */ React__default.default.createElement(registerTooltip.BaseTooltip, __spreadValues({}, args), /* @__PURE__ */ React__default.default.createElement("button", { className: "custom-class", onFocus: parameters.customOnFocus }, "Show tooltip")),
|
|
232
|
+
play: async ({ args, canvasElement, parameters }) => {
|
|
233
|
+
const canvas = test.within(canvasElement);
|
|
234
|
+
const trigger = canvas.getByText("Show tooltip");
|
|
235
|
+
await test.expect(trigger).toHaveClass("custom-class");
|
|
236
|
+
await test.waitFor(
|
|
237
|
+
() => test.expect(
|
|
238
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
239
|
+
).not.toBeInTheDocument()
|
|
240
|
+
);
|
|
241
|
+
test.expect(parameters.customOnFocus).not.toHaveBeenCalled();
|
|
242
|
+
await test.userEvent.tab();
|
|
243
|
+
await test.expect(trigger).toHaveFocus();
|
|
244
|
+
await test.waitFor(
|
|
245
|
+
() => test.expect(
|
|
246
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
247
|
+
).toBeInTheDocument()
|
|
248
|
+
);
|
|
249
|
+
test.expect(parameters.customOnFocus).toHaveBeenCalled();
|
|
250
|
+
test.expect(args.onOpenChange).toHaveBeenCalledWith(true);
|
|
251
|
+
await test.userEvent.tab();
|
|
252
|
+
await test.waitFor(() => test.expect(args.onOpenChange).toHaveBeenCalledWith(false));
|
|
253
|
+
}
|
|
254
|
+
};
|
|
144
255
|
const Disabled = {
|
|
145
256
|
args: {
|
|
146
257
|
isDisabled: true
|
|
147
258
|
},
|
|
148
259
|
play: async ({ args, canvasElement }) => {
|
|
149
260
|
const canvas = test.within(canvasElement);
|
|
150
|
-
const trigger = canvas.getByText("
|
|
261
|
+
const trigger = canvas.getByText("Show tooltip");
|
|
151
262
|
await test.waitFor(
|
|
152
263
|
() => test.expect(
|
|
153
264
|
test.within(document.body).queryByTestId("tooltip-content")
|
|
@@ -163,9 +274,96 @@ const Disabled = {
|
|
|
163
274
|
await test.userEvent.hover(trigger);
|
|
164
275
|
}
|
|
165
276
|
};
|
|
166
|
-
const
|
|
277
|
+
const Controlled = {
|
|
167
278
|
render: (_c) => {
|
|
168
|
-
var _d = _c, args = __objRest(_d, ["
|
|
279
|
+
var _d = _c, { isOpen: _isOpen, onOpenChange } = _d, args = __objRest(_d, ["isOpen", "onOpenChange"]);
|
|
280
|
+
const [open, setOpen] = React.useState(false);
|
|
281
|
+
return /* @__PURE__ */ React__default.default.createElement(
|
|
282
|
+
registerTooltip.BaseTooltip,
|
|
283
|
+
__spreadProps(__spreadValues({}, args), {
|
|
284
|
+
isOpen: open,
|
|
285
|
+
onOpenChange: (newVal) => {
|
|
286
|
+
setOpen(newVal);
|
|
287
|
+
onOpenChange == null ? void 0 : onOpenChange(newVal);
|
|
288
|
+
}
|
|
289
|
+
})
|
|
290
|
+
);
|
|
291
|
+
},
|
|
292
|
+
play: async ({ canvasElement }) => {
|
|
293
|
+
const canvas = test.within(canvasElement);
|
|
294
|
+
const trigger = canvas.getByText("Show tooltip");
|
|
295
|
+
await test.waitFor(
|
|
296
|
+
() => test.expect(
|
|
297
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
298
|
+
).not.toBeInTheDocument()
|
|
299
|
+
);
|
|
300
|
+
await test.userEvent.hover(trigger);
|
|
301
|
+
await test.waitFor(
|
|
302
|
+
() => test.expect(
|
|
303
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
304
|
+
).toBeInTheDocument()
|
|
305
|
+
);
|
|
306
|
+
await test.userEvent.unhover(trigger);
|
|
307
|
+
await test.waitFor(
|
|
308
|
+
() => test.expect(
|
|
309
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
310
|
+
).not.toBeInTheDocument()
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
const AriaButtonTrigger = {
|
|
315
|
+
args: {
|
|
316
|
+
children: /* @__PURE__ */ React__default.default.createElement(registerButton.BaseButton, null, "Show tooltip")
|
|
317
|
+
// anything can be used as a trigger
|
|
318
|
+
},
|
|
319
|
+
play: async ({ args, canvasElement }) => {
|
|
320
|
+
const canvas = test.within(canvasElement);
|
|
321
|
+
const trigger = canvas.getByText("Show tooltip");
|
|
322
|
+
await test.waitFor(
|
|
323
|
+
() => test.expect(
|
|
324
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
325
|
+
).not.toBeInTheDocument()
|
|
326
|
+
);
|
|
327
|
+
await test.userEvent.hover(trigger);
|
|
328
|
+
await test.waitFor(
|
|
329
|
+
() => test.expect(
|
|
330
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
331
|
+
).toBeInTheDocument()
|
|
332
|
+
);
|
|
333
|
+
test.expect(args.onOpenChange).toHaveBeenCalledWith(true);
|
|
334
|
+
test.expect(args.onOpenChange).toHaveBeenCalledTimes(1);
|
|
335
|
+
await test.userEvent.unhover(trigger);
|
|
336
|
+
await test.waitFor(
|
|
337
|
+
() => test.expect(
|
|
338
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
339
|
+
).not.toBeInTheDocument()
|
|
340
|
+
);
|
|
341
|
+
test.expect(args.onOpenChange).toHaveBeenCalledWith(false);
|
|
342
|
+
test.expect(args.onOpenChange).toHaveBeenCalledTimes(2);
|
|
343
|
+
await test.expect(trigger).not.toHaveFocus();
|
|
344
|
+
await test.userEvent.tab();
|
|
345
|
+
test.expect(trigger).toHaveFocus();
|
|
346
|
+
await test.waitFor(
|
|
347
|
+
() => test.expect(
|
|
348
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
349
|
+
).toBeInTheDocument()
|
|
350
|
+
);
|
|
351
|
+
test.expect(args.onOpenChange).toHaveBeenCalledWith(true);
|
|
352
|
+
test.expect(args.onOpenChange).toHaveBeenCalledTimes(3);
|
|
353
|
+
await test.userEvent.tab();
|
|
354
|
+
await test.expect(canvas.getByText("Show tooltip")).not.toHaveFocus();
|
|
355
|
+
await test.waitFor(
|
|
356
|
+
() => test.expect(
|
|
357
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
358
|
+
).not.toBeInTheDocument()
|
|
359
|
+
);
|
|
360
|
+
await test.waitFor(() => test.expect(args.onOpenChange).toHaveBeenCalledWith(false));
|
|
361
|
+
test.expect(args.onOpenChange).toHaveBeenCalledTimes(4);
|
|
362
|
+
}
|
|
363
|
+
};
|
|
364
|
+
const SelectedInCanvas = {
|
|
365
|
+
render: (_e) => {
|
|
366
|
+
var _f = _e, args = __objRest(_f, ["__plasmic_selection_prop__"]);
|
|
169
367
|
const [selected, setSelected] = React.useState(false);
|
|
170
368
|
const [selectedSlotName, setSelectedSlotName] = React.useState("");
|
|
171
369
|
React.useEffect(() => {
|
|
@@ -188,12 +386,12 @@ const SelectedInCanvas = {
|
|
|
188
386
|
},
|
|
189
387
|
/* @__PURE__ */ React__default.default.createElement(
|
|
190
388
|
registerTooltip.BaseTooltip,
|
|
191
|
-
|
|
389
|
+
__spreadProps(__spreadValues({}, args), {
|
|
192
390
|
__plasmic_selection_prop__: {
|
|
193
391
|
isSelected: selected,
|
|
194
392
|
selectedSlotName
|
|
195
393
|
}
|
|
196
|
-
})
|
|
394
|
+
})
|
|
197
395
|
)
|
|
198
396
|
)
|
|
199
397
|
);
|
|
@@ -218,11 +416,71 @@ const SelectedInCanvas = {
|
|
|
218
416
|
);
|
|
219
417
|
}
|
|
220
418
|
};
|
|
419
|
+
const TooltipPosition = {
|
|
420
|
+
render: (args) => {
|
|
421
|
+
const [className, setClassName] = React.useState("trigger");
|
|
422
|
+
return /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, null, /* @__PURE__ */ React__default.default.createElement(
|
|
423
|
+
"style",
|
|
424
|
+
{
|
|
425
|
+
dangerouslySetInnerHTML: {
|
|
426
|
+
__html: `
|
|
427
|
+
.trigger {
|
|
428
|
+
display: inline-block;
|
|
429
|
+
}
|
|
430
|
+
.trigger-right {
|
|
431
|
+
position: absolute;
|
|
432
|
+
right: 0;
|
|
433
|
+
}
|
|
434
|
+
`
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
), /* @__PURE__ */ React__default.default.createElement("button", { onClick: () => setClassName("trigger trigger-right") }, "Move right"), /* @__PURE__ */ React__default.default.createElement(registerTooltip.BaseTooltip, __spreadProps(__spreadValues({}, args), { className })));
|
|
438
|
+
},
|
|
439
|
+
play: async ({ canvasElement }) => {
|
|
440
|
+
const canvas = test.within(canvasElement);
|
|
441
|
+
const trigger = canvas.getByText("Show tooltip");
|
|
442
|
+
const moveRightBtn = canvas.getByText("Move right");
|
|
443
|
+
await test.waitFor(
|
|
444
|
+
() => test.expect(
|
|
445
|
+
test.within(document.body).queryByTestId("tooltip-content")
|
|
446
|
+
).not.toBeInTheDocument()
|
|
447
|
+
);
|
|
448
|
+
await test.userEvent.hover(trigger);
|
|
449
|
+
let initialTooltipLeftPosition;
|
|
450
|
+
await test.waitFor(() => {
|
|
451
|
+
const tooltip = test.within(document.body).getByTestId("tooltip-content");
|
|
452
|
+
initialTooltipLeftPosition = tooltip.getBoundingClientRect().left;
|
|
453
|
+
});
|
|
454
|
+
await test.userEvent.unhover(trigger);
|
|
455
|
+
await test.userEvent.hover(trigger);
|
|
456
|
+
await test.waitFor(async () => {
|
|
457
|
+
const tooltip = test.within(document.body).getByTestId("tooltip-content");
|
|
458
|
+
test.expect(initialTooltipLeftPosition).toEqual(
|
|
459
|
+
tooltip.getBoundingClientRect().left
|
|
460
|
+
);
|
|
461
|
+
});
|
|
462
|
+
await test.userEvent.unhover(trigger);
|
|
463
|
+
await test.userEvent.click(moveRightBtn);
|
|
464
|
+
await test.userEvent.hover(trigger);
|
|
465
|
+
await test.waitFor(() => {
|
|
466
|
+
const tooltip = test.within(document.body).getByTestId("tooltip-content");
|
|
467
|
+
test.expect(initialTooltipLeftPosition).not.toEqual(
|
|
468
|
+
tooltip.getBoundingClientRect().left
|
|
469
|
+
);
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
};
|
|
221
473
|
|
|
222
474
|
exports.AlwaysOpen = AlwaysOpen;
|
|
475
|
+
exports.AriaButtonTrigger = AriaButtonTrigger;
|
|
476
|
+
exports.Basic = Basic;
|
|
477
|
+
exports.Controlled = Controlled;
|
|
223
478
|
exports.Disabled = Disabled;
|
|
224
479
|
exports.FocusTrigger = FocusTrigger;
|
|
225
480
|
exports.FocusTriggerOnly = FocusTriggerOnly;
|
|
226
481
|
exports.SelectedInCanvas = SelectedInCanvas;
|
|
482
|
+
exports.TooltipPosition = TooltipPosition;
|
|
483
|
+
exports.TriggerWithEventHandlers = TriggerWithEventHandlers;
|
|
484
|
+
exports.WithoutForwardRefTrigger = WithoutForwardRefTrigger;
|
|
227
485
|
exports.default = meta;
|
|
228
486
|
//# sourceMappingURL=registerTooltip.stories.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerTooltip.stories.cjs.js","sources":["../src/registerTooltip.stories.tsx"],"sourcesContent":["import { PlasmicCanvasContext } from \"@plasmicapp/host\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\nimport { expect, fn, userEvent, waitFor, within } from \"@storybook/test\";\nimport React, { useEffect, useState } from \"react\";\nimport { BaseButton } from \"./registerButton\";\nimport { BaseTooltip } from \"./registerTooltip\";\n\nconst meta: Meta<typeof BaseTooltip> = {\n title: \"Components/BaseTooltip\",\n component: BaseTooltip,\n args: {\n onOpenChange: fn(),\n children: <BaseButton>Hover me!</BaseButton>, // anything can be used as a trigger\n tooltipContent: <div data-testid=\"tooltip-content\">This is a tooltip</div>,\n trigger: undefined, // means that it triggers on both focus and hover\n delay: 0,\n closeDelay: 0,\n },\n // TODO: Currently, the BaseTooltip component cannot be uncontrolled, because a false is assumed for isOpen prop, if it is undefined\n // Remove this render function in the PR that fixes the issue\n render: ({ isOpen, onOpenChange, ...args }) => {\n const [open, setOpen] = useState(isOpen);\n return (\n <BaseTooltip\n isOpen={open}\n onOpenChange={(newValue) => {\n setOpen(newValue);\n onOpenChange?.(newValue);\n }}\n {...args}\n />\n );\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof BaseTooltip>;\n\n// TODO: Note, this test is failing only in headless mode (so the CI will fail),\n// because the hover simulation does not trigger the onOpenChange event.\n// I'm unsure why this is happening, as the story/test passes in interactive mode.\n// Uncomment this test in the PR that fixes the issue\n// Basic tooltip with hover trigger\n// export const Basic: Story = {\n// play: async ({ canvasElement, args }) => {\n// const canvas = within(canvasElement);\n// const trigger = canvas.getByText(\"Hover me!\");\n\n// await waitFor(() =>\n// expect(\n// within(document.body).queryByTestId(\"tooltip-content\")\n// ).not.toBeInTheDocument()\n// );\n\n// await userEvent.hover(trigger);\n\n// // Check that tooltip appears\n// await waitFor(() =>\n// expect(\n// within(document.body).queryByTestId(\"tooltip-content\")\n// ).toBeInTheDocument()\n// );\n\n// expect(args.onOpenChange).toHaveBeenCalledWith(true);\n\n// await userEvent.unhover(trigger);\n\n// await waitFor(() => expect(args.onOpenChange).toHaveBeenCalledWith(false));\n// },\n// };\n\n// Test only that the tooltip renders initially\nexport const AlwaysOpen: Story = {\n args: {\n isOpen: true, // Force tooltip to be open\n },\n play: async () => {\n // Just verify the tooltip content is in the document\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n },\n};\n\n// Tooltip with focus trigger\nexport const FocusTrigger: Story = {\n play: async ({ args }) => {\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n // Focus trigger\n await userEvent.tab();\n\n // Check that tooltip appears\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n\n expect(args.onOpenChange).toHaveBeenCalledWith(true);\n\n // Move focus away\n await userEvent.tab();\n await waitFor(() => expect(args.onOpenChange).toHaveBeenCalledWith(false));\n },\n};\n\n// Tooltip with focus trigger only\nexport const FocusTriggerOnly: Story = {\n args: {\n trigger: \"focus\",\n },\n play: async ({ args, canvasElement }) => {\n const canvas = within(canvasElement);\n const trigger = canvas.getByText(\"Hover me!\");\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n // Hover over trigger\n await userEvent.hover(trigger);\n\n // Check that tooltip does NOT appear on hover\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n expect(args.onOpenChange).not.toHaveBeenCalled();\n\n // Move mouse away\n await userEvent.unhover(trigger);\n\n // Focus trigger\n await userEvent.tab();\n\n // Check that tooltip DOES appear on focus\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n\n expect(args.onOpenChange).toHaveBeenCalledWith(true);\n\n // Move focus away\n await userEvent.tab();\n await waitFor(() => expect(args.onOpenChange).toHaveBeenCalledWith(false));\n },\n};\n\n// Disabled tooltip\nexport const Disabled: Story = {\n args: {\n isDisabled: true,\n },\n play: async ({ args, canvasElement }) => {\n const canvas = within(canvasElement);\n const trigger = canvas.getByText(\"Hover me!\");\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n // Focus trigger\n await userEvent.tab();\n\n // Check that the disabled tooltip does NOT appear\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n expect(args.onOpenChange).not.toHaveBeenCalled();\n\n await userEvent.hover(trigger);\n },\n};\n\nexport const SelectedInCanvas: Story = {\n render: ({ __plasmic_selection_prop__, ...args }) => {\n const [selected, setSelected] = useState(false);\n const [selectedSlotName, setSelectedSlotName] = useState(\"\");\n\n useEffect(() => {\n setTimeout(() => {\n setSelected(true);\n setTimeout(() => {\n // Simulate trigger slot selection in Plasmic canvas\n setSelectedSlotName(\"children\");\n }, 1000);\n }, 1000);\n }, []);\n\n return (\n // Simulate Plasmic canvas envirnment\n <PlasmicCanvasContext.Provider\n value={{\n componentName: \"test\",\n globalVariants: {},\n }}\n >\n <BaseTooltip\n {...args}\n // Simulate node selection in Plasmic canvas\n __plasmic_selection_prop__={{\n isSelected: selected,\n selectedSlotName,\n }}\n {...args}\n />\n </PlasmicCanvasContext.Provider>\n );\n },\n play: async () => {\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await waitFor(\n () =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument(),\n { timeout: 1100 }\n );\n\n await waitFor(\n () =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument(),\n { timeout: 1100 }\n );\n },\n};\n"],"names":["BaseTooltip","fn","React","BaseButton","useState","waitFor","expect","within","userEvent","useEffect","PlasmicCanvasContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,IAAiC,GAAA;AAAA,EACrC,KAAO,EAAA,wBAAA;AAAA,EACP,SAAW,EAAAA,2BAAA;AAAA,EACX,IAAM,EAAA;AAAA,IACJ,cAAcC,OAAG,EAAA;AAAA,IACjB,QAAA,kBAAWC,sBAAA,CAAA,aAAA,CAAAC,yBAAA,EAAA,IAAA,EAAW,WAAS,CAAA;AAAA;AAAA,IAC/B,cAAgB,kBAAAD,sBAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,aAAA,EAAY,qBAAkB,mBAAiB,CAAA;AAAA,IACpE,OAAS,EAAA,KAAA,CAAA;AAAA;AAAA,IACT,KAAO,EAAA,CAAA;AAAA,IACP,UAAY,EAAA,CAAA;AAAA,GACd;AAAA;AAAA;AAAA,EAGA,MAAA,EAAQ,CAAC,EAAsC,KAAA;AAAtC,IAAA,IAAA,EAAA,GAAA,EAAA,EAAE,UAAQ,YApBrB,EAAA,GAoBW,IAA2B,IAA3B,GAAA,SAAA,CAAA,EAAA,EAA2B,CAAzB,QAAQ,EAAA,cAAA,CAAA,CAAA,CAAA;AACjB,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIE,eAAS,MAAM,CAAA,CAAA;AACvC,IACE,uBAAAF,sBAAA,CAAA,aAAA;AAAA,MAACF,2BAAA;AAAA,MAAA,cAAA,CAAA;AAAA,QACC,MAAQ,EAAA,IAAA;AAAA,QACR,YAAA,EAAc,CAAC,QAAa,KAAA;AAC1B,UAAA,OAAA,CAAQ,QAAQ,CAAA,CAAA;AAChB,UAAe,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAA,QAAA,CAAA,CAAA;AAAA,SACjB;AAAA,OACI,EAAA,IAAA,CAAA;AAAA,KACN,CAAA;AAAA,GAEJ;AACF,EAAA;AAuCO,MAAM,UAAoB,GAAA;AAAA,EAC/B,IAAM,EAAA;AAAA,IACJ,MAAQ,EAAA,IAAA;AAAA;AAAA,GACV;AAAA,EACA,MAAM,YAAY;AAEhB,IAAM,MAAAK,YAAA;AAAA,MAAQ,MACZC,WAAA;AAAA,QACEC,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,KACtB,CAAA;AAAA,GACF;AACF,EAAA;AAGO,MAAM,YAAsB,GAAA;AAAA,EACjC,IAAM,EAAA,OAAO,EAAE,IAAA,EAAW,KAAA;AACxB,IAAM,MAAAF,YAAA;AAAA,MAAQ,MACZC,WAAA;AAAA,QACEC,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAGA,IAAA,MAAMC,eAAU,GAAI,EAAA,CAAA;AAGpB,IAAM,MAAAH,YAAA;AAAA,MAAQ,MACZC,WAAA;AAAA,QACEC,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,KACtB,CAAA;AAEA,IAAAD,WAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,oBAAA,CAAqB,IAAI,CAAA,CAAA;AAGnD,IAAA,MAAME,eAAU,GAAI,EAAA,CAAA;AACpB,IAAM,MAAAH,YAAA,CAAQ,MAAMC,WAAO,CAAA,IAAA,CAAK,YAAY,CAAE,CAAA,oBAAA,CAAqB,KAAK,CAAC,CAAA,CAAA;AAAA,GAC3E;AACF,EAAA;AAGO,MAAM,gBAA0B,GAAA;AAAA,EACrC,IAAM,EAAA;AAAA,IACJ,OAAS,EAAA,OAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,IAAA,EAAM,eAAoB,KAAA;AACvC,IAAM,MAAA,MAAA,GAASC,YAAO,aAAa,CAAA,CAAA;AACnC,IAAM,MAAA,OAAA,GAAU,MAAO,CAAA,SAAA,CAAU,WAAW,CAAA,CAAA;AAE5C,IAAM,MAAAF,YAAA;AAAA,MAAQ,MACZC,WAAA;AAAA,QACEC,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAGA,IAAM,MAAAC,cAAA,CAAU,MAAM,OAAO,CAAA,CAAA;AAG7B,IAAM,MAAAH,YAAA;AAAA,MAAQ,MACZC,WAAA;AAAA,QACEC,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAEA,IAAAD,WAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,GAAA,CAAI,gBAAiB,EAAA,CAAA;AAG/C,IAAM,MAAAE,cAAA,CAAU,QAAQ,OAAO,CAAA,CAAA;AAG/B,IAAA,MAAMA,eAAU,GAAI,EAAA,CAAA;AAGpB,IAAM,MAAAH,YAAA;AAAA,MAAQ,MACZC,WAAA;AAAA,QACEC,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,KACtB,CAAA;AAEA,IAAAD,WAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,oBAAA,CAAqB,IAAI,CAAA,CAAA;AAGnD,IAAA,MAAME,eAAU,GAAI,EAAA,CAAA;AACpB,IAAM,MAAAH,YAAA,CAAQ,MAAMC,WAAO,CAAA,IAAA,CAAK,YAAY,CAAE,CAAA,oBAAA,CAAqB,KAAK,CAAC,CAAA,CAAA;AAAA,GAC3E;AACF,EAAA;AAGO,MAAM,QAAkB,GAAA;AAAA,EAC7B,IAAM,EAAA;AAAA,IACJ,UAAY,EAAA,IAAA;AAAA,GACd;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,IAAA,EAAM,eAAoB,KAAA;AACvC,IAAM,MAAA,MAAA,GAASC,YAAO,aAAa,CAAA,CAAA;AACnC,IAAM,MAAA,OAAA,GAAU,MAAO,CAAA,SAAA,CAAU,WAAW,CAAA,CAAA;AAE5C,IAAM,MAAAF,YAAA;AAAA,MAAQ,MACZC,WAAA;AAAA,QACEC,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAGA,IAAA,MAAMC,eAAU,GAAI,EAAA,CAAA;AAGpB,IAAM,MAAAH,YAAA;AAAA,MAAQ,MACZC,WAAA;AAAA,QACEC,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAEA,IAAAD,WAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,GAAA,CAAI,gBAAiB,EAAA,CAAA;AAE/C,IAAM,MAAAE,cAAA,CAAU,MAAM,OAAO,CAAA,CAAA;AAAA,GAC/B;AACF,EAAA;AAEO,MAAM,gBAA0B,GAAA;AAAA,EACrC,MAAA,EAAQ,CAAC,EAA4C,KAAA;AAA5C,IAAA,IAAA,EAAA,GAAA,EAAA,CAAA,CAAiC,IAAA,GAAA,SAAA,CAAjC,IAAiC,CAA/B,4BAAA,CAAA,EAAA;AACT,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIJ,eAAS,KAAK,CAAA,CAAA;AAC9C,IAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,eAAS,EAAE,CAAA,CAAA;AAE3D,IAAAK,eAAA,CAAU,MAAM;AACd,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAChB,QAAA,UAAA,CAAW,MAAM;AAEf,UAAA,mBAAA,CAAoB,UAAU,CAAA,CAAA;AAAA,WAC7B,GAAI,CAAA,CAAA;AAAA,SACN,GAAI,CAAA,CAAA;AAAA,KACT,EAAG,EAAE,CAAA,CAAA;AAEL,IAAA;AAAA;AAAA,sBAEEP,sBAAA,CAAA,aAAA;AAAA,QAACQ,yBAAqB,CAAA,QAAA;AAAA,QAArB;AAAA,UACC,KAAO,EAAA;AAAA,YACL,aAAe,EAAA,MAAA;AAAA,YACf,gBAAgB,EAAC;AAAA,WACnB;AAAA,SAAA;AAAA,wBAEAR,sBAAA,CAAA,aAAA;AAAA,UAACF,2BAAA;AAAA,UAAA,cAAA,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACK,IADL,CAAA,EAAA;AAAA,YAGC,0BAA4B,EAAA;AAAA,cAC1B,UAAY,EAAA,QAAA;AAAA,cACZ,gBAAA;AAAA,aACF;AAAA,WACI,CAAA,EAAA,IAAA,CAAA;AAAA,SACN;AAAA,OACF;AAAA,MAAA;AAAA,GAEJ;AAAA,EACA,MAAM,YAAY;AAChB,IAAM,MAAAK,YAAA;AAAA,MAAQ,MACZC,WAAA;AAAA,QACEC,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAEA,IAAM,MAAAF,YAAA;AAAA,MACJ,MACEC,WAAA;AAAA,QACEC,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,MACtB,EAAE,SAAS,IAAK,EAAA;AAAA,KAClB,CAAA;AAEA,IAAM,MAAAF,YAAA;AAAA,MACJ,MACEC,WAAA;AAAA,QACEC,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,MAC1B,EAAE,SAAS,IAAK,EAAA;AAAA,KAClB,CAAA;AAAA,GACF;AACF;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"registerTooltip.stories.cjs.js","sources":["../src/registerTooltip.stories.tsx"],"sourcesContent":["import { PlasmicCanvasContext } from \"@plasmicapp/host\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\nimport { expect, fn, userEvent, waitFor, within } from \"@storybook/test\";\nimport React, { useEffect, useState } from \"react\";\nimport { BaseButton } from \"./registerButton\";\nimport { BaseTooltip } from \"./registerTooltip\";\n\nconst meta: Meta<typeof BaseTooltip> = {\n title: \"Components/BaseTooltip\",\n component: BaseTooltip,\n args: {\n onOpenChange: fn(),\n children: <span>Show tooltip</span>, // anything can be used as a trigger\n tooltipContent: <div data-testid=\"tooltip-content\">This is a tooltip</div>,\n trigger: undefined, // means that it triggers on both focus and hover\n delay: 0,\n closeDelay: 0,\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof BaseTooltip>;\n\n// Basic tooltip with hover trigger\nexport const Basic: Story = {\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const trigger = canvas.getByText(\"Show tooltip\");\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await userEvent.hover(trigger);\n\n // Check that tooltip appears\n await waitFor(() => {\n const tooltip = within(document.body).getByTestId(\"tooltip-content\");\n const tooltipId = tooltip.parentElement?.getAttribute(\"id\");\n expect(tooltipId).toBeDefined();\n expect(trigger.parentElement?.getAttribute(\"aria-describedby\")).toEqual(\n tooltipId\n );\n });\n\n expect(args.onOpenChange).toHaveBeenCalledWith(true);\n\n await userEvent.unhover(trigger);\n\n await waitFor(() => expect(args.onOpenChange).toHaveBeenCalledWith(false));\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n\n await userEvent.tab();\n\n // Non-focusable elements should still not be focusable when used as a tooltip trigger\n await expect(trigger).not.toHaveFocus();\n expect(args.onOpenChange).toHaveBeenCalledTimes(2); // no change\n },\n};\n\n// Test only that the tooltip renders initially\nexport const AlwaysOpen: Story = {\n args: {\n isOpen: true, // Force tooltip to be open\n },\n play: async () => {\n // Just verify the tooltip content is in the document\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n },\n};\n\n// Tooltip with focus trigger\nexport const FocusTrigger: Story = {\n args: {\n // TabIndex=0 makes it focusable\n children: <span tabIndex={0}>Show tooltip</span>, // anything can be used as a trigger\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const trigger = canvas.getByText(\"Show tooltip\");\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n // Focus trigger\n await userEvent.tab();\n\n await expect(trigger).toHaveFocus();\n\n // Check that tooltip appears\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n\n expect(args.onOpenChange).toHaveBeenCalledWith(true);\n\n // Move focus away\n await userEvent.tab();\n await expect(trigger).not.toHaveFocus();\n\n await waitFor(() => expect(args.onOpenChange).toHaveBeenCalledWith(false));\n },\n};\n\nconst CustomButton = ({ children, ...props }: any) => {\n return (\n <div {...props} data-testid=\"trigger-wrapper\">\n <span tabIndex={0}>{children}</span>\n <span tabIndex={0}>{children}</span>\n </div>\n );\n};\nexport const WithoutForwardRefTrigger: Story = {\n args: {\n children: <CustomButton>Show tooltip</CustomButton>,\n },\n play: async ({ args, canvasElement }) => {\n const canvas = within(canvasElement);\n const triggerWrapper = canvas.getByTestId(\"trigger-wrapper\");\n const innerFocusableButtons = canvas.getAllByText(\"Show tooltip\");\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await expect(innerFocusableButtons[0]).not.toHaveFocus();\n\n // Focus trigger\n await userEvent.tab();\n expect(innerFocusableButtons[0]).toHaveFocus(); // ensure that the focus is on the first focusable item in the trigger wrapper\n\n // Check that tooltip appears\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n\n expect(args.onOpenChange).toHaveBeenCalledWith(true);\n\n // Move focus away\n await userEvent.tab();\n expect(innerFocusableButtons[0]).not.toHaveFocus();\n expect(innerFocusableButtons[1]).toHaveFocus();\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n\n await userEvent.tab();\n expect(innerFocusableButtons[1]).not.toHaveFocus();\n expect(args.onOpenChange).toHaveBeenCalledWith(false); //ensure that tooltip is no longer open\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n // should also work with hover\n await userEvent.hover(triggerWrapper);\n\n // Check that tooltip appears\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n\n expect(args.onOpenChange).toHaveBeenCalledWith(true);\n\n await userEvent.unhover(triggerWrapper);\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await waitFor(() => expect(args.onOpenChange).toHaveBeenCalledWith(false));\n },\n};\n\n// Tooltip with focus trigger only\nexport const FocusTriggerOnly: Story = {\n args: {\n trigger: \"focus\",\n children: <span tabIndex={0}>Show tooltip</span>, // anything can be used as a trigger\n },\n play: async ({ args, canvasElement }) => {\n const canvas = within(canvasElement);\n const trigger = canvas.getByText(\"Show tooltip\");\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n // Hover over trigger\n await userEvent.hover(trigger);\n\n // Check that tooltip does NOT appear on hover\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n expect(args.onOpenChange).not.toHaveBeenCalled();\n\n // Move mouse away\n await userEvent.unhover(trigger);\n\n // Focus trigger\n await userEvent.tab();\n await expect(trigger).toHaveFocus();\n\n // Check that tooltip DOES appear on focus\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n\n expect(args.onOpenChange).toHaveBeenCalledWith(true);\n\n // Move focus away\n await userEvent.tab();\n await waitFor(() => expect(args.onOpenChange).toHaveBeenCalledWith(false));\n },\n};\n\n// Ensures that any custom event handlers on the trigger are called, and any custom props passed to it are passed through.\nexport const TriggerWithEventHandlers: Story = {\n parameters: {\n customOnFocus: fn(),\n },\n render: (args, { parameters }) => (\n <BaseTooltip {...args}>\n <button className=\"custom-class\" onFocus={parameters.customOnFocus}>\n Show tooltip\n </button>\n </BaseTooltip>\n ),\n play: async ({ args, canvasElement, parameters }) => {\n const canvas = within(canvasElement);\n const trigger = canvas.getByText(\"Show tooltip\");\n\n await expect(trigger).toHaveClass(\"custom-class\");\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n expect(parameters.customOnFocus).not.toHaveBeenCalled();\n // Focus trigger\n await userEvent.tab();\n await expect(trigger).toHaveFocus();\n\n // Check that tooltip DOES appear on focus\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n expect(parameters.customOnFocus).toHaveBeenCalled();\n\n expect(args.onOpenChange).toHaveBeenCalledWith(true);\n\n // Move focus away\n await userEvent.tab();\n await waitFor(() => expect(args.onOpenChange).toHaveBeenCalledWith(false));\n },\n};\n\n// Disabled tooltip\nexport const Disabled: Story = {\n args: {\n isDisabled: true,\n },\n play: async ({ args, canvasElement }) => {\n const canvas = within(canvasElement);\n const trigger = canvas.getByText(\"Show tooltip\");\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n // Focus trigger\n await userEvent.tab();\n\n // Check that the disabled tooltip does NOT appear\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n expect(args.onOpenChange).not.toHaveBeenCalled();\n\n await userEvent.hover(trigger);\n },\n};\n\nexport const Controlled: Story = {\n render: ({ isOpen: _isOpen, onOpenChange, ...args }) => {\n const [open, setOpen] = useState(false);\n\n return (\n <BaseTooltip\n {...args}\n isOpen={open}\n onOpenChange={(newVal) => {\n setOpen(newVal);\n onOpenChange?.(newVal);\n }}\n />\n );\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const trigger = canvas.getByText(\"Show tooltip\");\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await userEvent.hover(trigger);\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n\n await userEvent.unhover(trigger);\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n },\n};\n\nexport const AriaButtonTrigger: Story = {\n args: {\n children: <BaseButton>Show tooltip</BaseButton>, // anything can be used as a trigger\n },\n play: async ({ args, canvasElement }) => {\n const canvas = within(canvasElement);\n const trigger = canvas.getByText(\"Show tooltip\");\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await userEvent.hover(trigger);\n\n // Check that tooltip appears\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n expect(args.onOpenChange).toHaveBeenCalledWith(true);\n expect(args.onOpenChange).toHaveBeenCalledTimes(1);\n\n await userEvent.unhover(trigger);\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n expect(args.onOpenChange).toHaveBeenCalledWith(false);\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n\n await expect(trigger).not.toHaveFocus();\n\n // Focus trigger\n await userEvent.tab();\n expect(trigger).toHaveFocus();\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n expect(args.onOpenChange).toHaveBeenCalledWith(true);\n expect(args.onOpenChange).toHaveBeenCalledTimes(3);\n\n // Move focus away\n await userEvent.tab();\n await expect(canvas.getByText(\"Show tooltip\")).not.toHaveFocus();\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await waitFor(() => expect(args.onOpenChange).toHaveBeenCalledWith(false));\n expect(args.onOpenChange).toHaveBeenCalledTimes(4);\n },\n};\n\nexport const SelectedInCanvas: Story = {\n render: ({ __plasmic_selection_prop__, ...args }) => {\n const [selected, setSelected] = useState(false);\n const [selectedSlotName, setSelectedSlotName] = useState(\"\");\n\n useEffect(() => {\n setTimeout(() => {\n setSelected(true);\n setTimeout(() => {\n // Simulate trigger slot selection in Plasmic canvas\n setSelectedSlotName(\"children\");\n }, 1000);\n }, 1000);\n }, []);\n\n return (\n // Simulate Plasmic canvas envirnment\n <PlasmicCanvasContext.Provider\n value={{\n componentName: \"test\",\n globalVariants: {},\n }}\n >\n <BaseTooltip\n {...args}\n // Simulate node selection in Plasmic canvas\n __plasmic_selection_prop__={{\n isSelected: selected,\n selectedSlotName,\n }}\n />\n </PlasmicCanvasContext.Provider>\n );\n },\n play: async () => {\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await waitFor(\n () =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument(),\n { timeout: 1100 }\n );\n\n await waitFor(\n () =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument(),\n { timeout: 1100 }\n );\n },\n};\n\n// Ensures that the tooltip is positioned relative to its trigger\nexport const TooltipPosition: Story = {\n render: (args) => {\n const [className, setClassName] = useState<string | undefined>(\"trigger\");\n\n return (\n <>\n <style\n dangerouslySetInnerHTML={{\n __html: `\n .trigger {\n display: inline-block;\n }\n .trigger-right {\n position: absolute;\n right: 0;\n }\n `,\n }}\n />\n <button onClick={() => setClassName(\"trigger trigger-right\")}>\n Move right\n </button>\n <BaseTooltip {...args} className={className} />\n </>\n );\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const trigger = canvas.getByText(\"Show tooltip\");\n const moveRightBtn = canvas.getByText(\"Move right\");\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await userEvent.hover(trigger);\n\n let initialTooltipLeftPosition: number;\n\n // Check that tooltip appears\n await waitFor(() => {\n const tooltip = within(document.body).getByTestId(\"tooltip-content\");\n initialTooltipLeftPosition = tooltip.getBoundingClientRect().left;\n });\n\n await userEvent.unhover(trigger);\n\n await userEvent.hover(trigger);\n\n await waitFor(async () => {\n const tooltip = within(document.body).getByTestId(\"tooltip-content\");\n expect(initialTooltipLeftPosition).toEqual(\n tooltip.getBoundingClientRect().left\n ); // opens at exactly the same position again\n });\n\n await userEvent.unhover(trigger);\n\n await userEvent.click(moveRightBtn);\n await userEvent.hover(trigger);\n\n await waitFor(() => {\n const tooltip = within(document.body).getByTestId(\"tooltip-content\");\n expect(initialTooltipLeftPosition).not.toEqual(\n tooltip.getBoundingClientRect().left\n ); // opens at a different position because the position of the trigger changed\n });\n },\n};\n"],"names":["BaseTooltip","fn","React","within","waitFor","expect","userEvent","useState","BaseButton","useEffect","PlasmicCanvasContext"],"mappings":"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"}
|