@plasmicpkgs/react-aria 0.0.110 → 0.0.112

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/react-aria.esm.js +161 -97
  3. package/dist/react-aria.esm.js.map +1 -1
  4. package/dist/react-aria.js +158 -94
  5. package/dist/react-aria.js.map +1 -1
  6. package/dist/registerTooltip.d.ts +3 -1
  7. package/package.json +2 -2
  8. package/skinny/registerSwitch.stories.cjs.js +162 -0
  9. package/skinny/registerSwitch.stories.cjs.js.map +1 -0
  10. package/skinny/registerSwitch.stories.esm.js +148 -0
  11. package/skinny/registerSwitch.stories.esm.js.map +1 -0
  12. package/skinny/registerTextField-common-stories.cjs.js +199 -0
  13. package/skinny/registerTextField-common-stories.cjs.js.map +1 -0
  14. package/skinny/registerTextField-common-stories.esm.js +185 -0
  15. package/skinny/registerTextField-common-stories.esm.js.map +1 -0
  16. package/skinny/registerTextField-input.stories.cjs.js +54 -0
  17. package/skinny/registerTextField-input.stories.cjs.js.map +1 -0
  18. package/skinny/registerTextField-input.stories.esm.js +37 -0
  19. package/skinny/registerTextField-input.stories.esm.js.map +1 -0
  20. package/skinny/registerTextField-textarea.stories.cjs.js +55 -0
  21. package/skinny/registerTextField-textarea.stories.cjs.js.map +1 -0
  22. package/skinny/registerTextField-textarea.stories.esm.js +39 -0
  23. package/skinny/registerTextField-textarea.stories.esm.js.map +1 -0
  24. package/skinny/registerTooltip.cjs.js +110 -46
  25. package/skinny/registerTooltip.cjs.js.map +1 -1
  26. package/skinny/registerTooltip.d.ts +3 -1
  27. package/skinny/registerTooltip.esm.js +114 -50
  28. package/skinny/registerTooltip.esm.js.map +1 -1
  29. package/skinny/registerTooltip.stories.cjs.js +283 -9
  30. package/skinny/registerTooltip.stories.cjs.js.map +1 -1
  31. package/skinny/registerTooltip.stories.esm.js +279 -11
  32. 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,7 +55,7 @@ const meta = {
54
55
  component: registerTooltip.BaseTooltip,
55
56
  args: {
56
57
  onOpenChange: test.fn(),
57
- children: /* @__PURE__ */ React__default.default.createElement(registerButton.BaseButton, null, "Hover me!"),
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,
@@ -63,6 +64,34 @@ const meta = {
63
64
  closeDelay: 0
64
65
  }
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()
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);
93
+ }
94
+ };
66
95
  const AlwaysOpen = {
67
96
  args: {
68
97
  isOpen: true
@@ -77,13 +106,21 @@ const AlwaysOpen = {
77
106
  }
78
107
  };
79
108
  const FocusTrigger = {
80
- play: async ({ args }) => {
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");
81
117
  await test.waitFor(
82
118
  () => test.expect(
83
119
  test.within(document.body).queryByTestId("tooltip-content")
84
120
  ).not.toBeInTheDocument()
85
121
  );
86
122
  await test.userEvent.tab();
123
+ await test.expect(trigger).toHaveFocus();
87
124
  await test.waitFor(
88
125
  () => test.expect(
89
126
  test.within(document.body).queryByTestId("tooltip-content")
@@ -91,16 +128,77 @@ const FocusTrigger = {
91
128
  );
92
129
  test.expect(args.onOpenChange).toHaveBeenCalledWith(true);
93
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");
147
+ await test.waitFor(
148
+ () => test.expect(
149
+ test.within(document.body).queryByTestId("tooltip-content")
150
+ ).not.toBeInTheDocument()
151
+ );
152
+ await test.expect(innerFocusableButtons[0]).not.toHaveFocus();
153
+ await test.userEvent.tab();
154
+ test.expect(innerFocusableButtons[0]).toHaveFocus();
155
+ await test.waitFor(
156
+ () => test.expect(
157
+ test.within(document.body).queryByTestId("tooltip-content")
158
+ ).toBeInTheDocument()
159
+ );
160
+ test.expect(args.onOpenChange).toHaveBeenCalledWith(true);
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
+ );
94
190
  await test.waitFor(() => test.expect(args.onOpenChange).toHaveBeenCalledWith(false));
95
191
  }
96
192
  };
97
193
  const FocusTriggerOnly = {
98
194
  args: {
99
- 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
100
198
  },
101
199
  play: async ({ args, canvasElement }) => {
102
200
  const canvas = test.within(canvasElement);
103
- const trigger = canvas.getByText("Hover me!");
201
+ const trigger = canvas.getByText("Show tooltip");
104
202
  await test.waitFor(
105
203
  () => test.expect(
106
204
  test.within(document.body).queryByTestId("tooltip-content")
@@ -115,11 +213,40 @@ const FocusTriggerOnly = {
115
213
  test.expect(args.onOpenChange).not.toHaveBeenCalled();
116
214
  await test.userEvent.unhover(trigger);
117
215
  await test.userEvent.tab();
216
+ await test.expect(trigger).toHaveFocus();
217
+ await test.waitFor(
218
+ () => test.expect(
219
+ test.within(document.body).queryByTestId("tooltip-content")
220
+ ).toBeInTheDocument()
221
+ );
222
+ test.expect(args.onOpenChange).toHaveBeenCalledWith(true);
223
+ await test.userEvent.tab();
224
+ await test.waitFor(() => test.expect(args.onOpenChange).toHaveBeenCalledWith(false));
225
+ }
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();
118
244
  await test.waitFor(
119
245
  () => test.expect(
120
246
  test.within(document.body).queryByTestId("tooltip-content")
121
247
  ).toBeInTheDocument()
122
248
  );
249
+ test.expect(parameters.customOnFocus).toHaveBeenCalled();
123
250
  test.expect(args.onOpenChange).toHaveBeenCalledWith(true);
124
251
  await test.userEvent.tab();
125
252
  await test.waitFor(() => test.expect(args.onOpenChange).toHaveBeenCalledWith(false));
@@ -131,7 +258,7 @@ const Disabled = {
131
258
  },
132
259
  play: async ({ args, canvasElement }) => {
133
260
  const canvas = test.within(canvasElement);
134
- const trigger = canvas.getByText("Hover me!");
261
+ const trigger = canvas.getByText("Show tooltip");
135
262
  await test.waitFor(
136
263
  () => test.expect(
137
264
  test.within(document.body).queryByTestId("tooltip-content")
@@ -147,9 +274,96 @@ const Disabled = {
147
274
  await test.userEvent.hover(trigger);
148
275
  }
149
276
  };
277
+ const Controlled = {
278
+ render: (_c) => {
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
+ };
150
364
  const SelectedInCanvas = {
151
- render: (_a) => {
152
- var _b = _a, args = __objRest(_b, ["__plasmic_selection_prop__"]);
365
+ render: (_e) => {
366
+ var _f = _e, args = __objRest(_f, ["__plasmic_selection_prop__"]);
153
367
  const [selected, setSelected] = React.useState(false);
154
368
  const [selectedSlotName, setSelectedSlotName] = React.useState("");
155
369
  React.useEffect(() => {
@@ -172,12 +386,12 @@ const SelectedInCanvas = {
172
386
  },
173
387
  /* @__PURE__ */ React__default.default.createElement(
174
388
  registerTooltip.BaseTooltip,
175
- __spreadValues(__spreadProps(__spreadValues({}, args), {
389
+ __spreadProps(__spreadValues({}, args), {
176
390
  __plasmic_selection_prop__: {
177
391
  isSelected: selected,
178
392
  selectedSlotName
179
393
  }
180
- }), args)
394
+ })
181
395
  )
182
396
  )
183
397
  );
@@ -202,11 +416,71 @@ const SelectedInCanvas = {
202
416
  );
203
417
  }
204
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
+ };
205
473
 
206
474
  exports.AlwaysOpen = AlwaysOpen;
475
+ exports.AriaButtonTrigger = AriaButtonTrigger;
476
+ exports.Basic = Basic;
477
+ exports.Controlled = Controlled;
207
478
  exports.Disabled = Disabled;
208
479
  exports.FocusTrigger = FocusTrigger;
209
480
  exports.FocusTriggerOnly = FocusTriggerOnly;
210
481
  exports.SelectedInCanvas = SelectedInCanvas;
482
+ exports.TooltipPosition = TooltipPosition;
483
+ exports.TriggerWithEventHandlers = TriggerWithEventHandlers;
484
+ exports.WithoutForwardRefTrigger = WithoutForwardRefTrigger;
211
485
  exports.default = meta;
212
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};\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","waitFor","expect","within","userEvent","useState","useEffect","PlasmicCanvasContext"],"mappings":"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"}
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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"}