@plasmicpkgs/react-aria 0.0.116 → 0.0.118

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 (44) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/react-aria.esm.js +118 -86
  3. package/dist/react-aria.esm.js.map +1 -1
  4. package/dist/react-aria.js +117 -85
  5. package/dist/react-aria.js.map +1 -1
  6. package/package.json +2 -2
  7. package/skinny/registerCheckboxGroup.cjs.js +11 -8
  8. package/skinny/registerCheckboxGroup.cjs.js.map +1 -1
  9. package/skinny/registerCheckboxGroup.esm.js +11 -8
  10. package/skinny/registerCheckboxGroup.esm.js.map +1 -1
  11. package/skinny/registerComboBox.cjs.js.map +1 -1
  12. package/skinny/registerComboBox.esm.js.map +1 -1
  13. package/skinny/registerDialogTrigger.cjs.js +17 -2
  14. package/skinny/registerDialogTrigger.cjs.js.map +1 -1
  15. package/skinny/registerDialogTrigger.esm.js +17 -2
  16. package/skinny/registerDialogTrigger.esm.js.map +1 -1
  17. package/skinny/registerOverlayArrow.cjs.js +1 -1
  18. package/skinny/registerOverlayArrow.cjs.js.map +1 -1
  19. package/skinny/registerOverlayArrow.esm.js +2 -2
  20. package/skinny/registerOverlayArrow.esm.js.map +1 -1
  21. package/skinny/registerPopover.cjs.js.map +1 -1
  22. package/skinny/registerPopover.esm.js.map +1 -1
  23. package/skinny/registerRadioGroup.cjs.js +11 -8
  24. package/skinny/registerRadioGroup.cjs.js.map +1 -1
  25. package/skinny/registerRadioGroup.esm.js +11 -8
  26. package/skinny/registerRadioGroup.esm.js.map +1 -1
  27. package/skinny/registerSelect.cjs.js.map +1 -1
  28. package/skinny/registerSelect.esm.js.map +1 -1
  29. package/skinny/registerSlider.cjs.js +17 -14
  30. package/skinny/registerSlider.cjs.js.map +1 -1
  31. package/skinny/registerSlider.esm.js +17 -14
  32. package/skinny/registerSlider.esm.js.map +1 -1
  33. package/skinny/registerTextField.cjs.js +21 -16
  34. package/skinny/registerTextField.cjs.js.map +1 -1
  35. package/skinny/registerTextField.esm.js +21 -16
  36. package/skinny/registerTextField.esm.js.map +1 -1
  37. package/skinny/registerTooltip.cjs.js +39 -36
  38. package/skinny/registerTooltip.cjs.js.map +1 -1
  39. package/skinny/registerTooltip.esm.js +39 -36
  40. package/skinny/registerTooltip.esm.js.map +1 -1
  41. package/skinny/registerTooltip.stories.cjs.js +153 -23
  42. package/skinny/registerTooltip.stories.cjs.js.map +1 -1
  43. package/skinny/registerTooltip.stories.esm.js +153 -24
  44. package/skinny/registerTooltip.stories.esm.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"registerTooltip.esm.js","sources":["../src/registerTooltip.tsx"],"sourcesContent":["import React, { useCallback, useId, useRef, useState } from \"react\";\nimport { mergeProps, useFocusWithin, useHover } from \"react-aria\";\nimport {\n Provider,\n Tooltip,\n TooltipProps,\n TooltipTriggerStateContext,\n} from \"react-aria-components\";\nimport { TooltipTriggerProps, useTooltipTriggerState } from \"react-stately\";\nimport { COMMON_STYLES, getCommonOverlayProps } from \"./common\";\nimport {\n CodeComponentMetaOverrides,\n Registerable,\n registerComponentHelper,\n useIsOpen,\n WithPlasmicCanvasComponentInfo,\n} from \"./utils\";\nimport { pickAriaComponentVariants, WithVariants } from \"./variant-utils\";\n\n// NOTE: Placement should be managed as variants, not just props.\n// When `shouldFlip` is true, the placement prop may not represent the final position\n// (e.g., if placement is set to \"bottom\" but lacks space, the tooltip may flip to \"top\").\n// However, data-selectors will consistently indicate the actual placement of the tooltip.\nconst TOOLTIP_VARIANTS = [\n \"placementTop\" as const,\n \"placementBottom\" as const,\n \"placementLeft\" as const,\n \"placementRight\" as const,\n];\n\nconst { variants, withObservedValues } =\n pickAriaComponentVariants(TOOLTIP_VARIANTS);\n\nexport interface BaseTooltipProps\n extends Omit<TooltipTriggerProps, \"trigger\">,\n TooltipProps,\n WithPlasmicCanvasComponentInfo,\n WithVariants<typeof TOOLTIP_VARIANTS> {\n children: React.ReactElement<HTMLElement>;\n tooltipContent?: React.ReactElement;\n resetClassName?: string;\n trigger?: \"focus\" | \"focus and hover\" | undefined;\n className?: string;\n}\n\n// In Studio, the tooltip is always controlled because isOpen is attached to the code component's state.\n// In Codegen, the user decides whether the tooltip is controlled or not. So we need to handle both cases.\nexport function BaseTooltip(props: BaseTooltipProps) {\n if (props.isOpen !== undefined) {\n return <ControlledBaseTooltip {...props} />;\n } else {\n return <UncontrolledBaseTooltip {...props} />;\n }\n}\n\nfunction UncontrolledBaseTooltip({ onOpenChange, ...props }: BaseTooltipProps) {\n const [open, setOpen] = useState(props.defaultOpen ?? false);\n const onOpenChangeMerged = useCallback(\n (newOpen: boolean) => {\n setOpen(newOpen);\n onOpenChange?.(newOpen);\n },\n [onOpenChange]\n );\n return (\n <ControlledBaseTooltip\n {...props}\n isOpen={open}\n onOpenChange={onOpenChangeMerged}\n />\n );\n}\n\nfunction ControlledBaseTooltip(props: BaseTooltipProps) {\n const {\n children,\n isDisabled = false,\n delay,\n closeDelay,\n trigger,\n isOpen,\n tooltipContent,\n resetClassName,\n placement,\n offset,\n crossOffset,\n shouldFlip,\n className,\n onOpenChange = () => {},\n plasmicUpdateVariant,\n __plasmic_selection_prop__,\n } = props;\n\n const isOpen2 = useIsOpen({\n triggerSlotName: \"children\",\n isOpen,\n __plasmic_selection_prop__,\n });\n\n // The following is a custom implementation of the <TooltipTrigger /> component.\n // The default <TooltipTrigger /> from react-aria-components automatically manages state changes when a useFocusable element (e.g., an Aria Button) is clicked.\n // However, in our custom trigger, <TriggerWrapper>, we use useFocusWithin to explicitly handle state changes, allowing any element—not just an Aria Button—to act as a trigger.\n // However, this results in duplicate state updates when using an Aria Button, as state changes are triggered both by useFocusWithin and useFocusable.\n // Consequently, onOpenChange is called twice.\n //\n // This implementation is adapted from:\n // https://github.com/adobe/react-spectrum/blob/988096cf3f1dbd59f274d8c552e9fe7d5dcf4f41/packages/react-aria-components/src/Tooltip.tsx#L89\n // The <FocusableProvider> has been removed, as it handles automatic state updates for the Aria Button.\n const ref = useRef<any>(null);\n const tooltipId = useId();\n\n const state = useTooltipTriggerState({\n ...props,\n trigger: trigger === \"focus\" ? trigger : undefined,\n });\n\n return (\n <Provider values={[[TooltipTriggerStateContext, state]]}>\n <TriggerWrapper\n ref={ref}\n className={className}\n tooltipId={isOpen2 ? tooltipId : undefined}\n isDisabled={isDisabled}\n onOpenChange={onOpenChange}\n triggerOnFocusOnly={trigger === \"focus\"}\n >\n {children}\n </TriggerWrapper>\n <Tooltip\n triggerRef={ref}\n // @ts-expect-error <Tooltip> is wrongly typed to not have id prop\n id={tooltipId}\n isOpen={isOpen2}\n offset={offset}\n delay={delay}\n closeDelay={closeDelay}\n crossOffset={crossOffset}\n shouldFlip={shouldFlip}\n className={resetClassName}\n onOpenChange={onOpenChange}\n placement={placement}\n >\n {({ placement: _placement }) =>\n withObservedValues(\n <>{tooltipContent}</>,\n {\n placementTop: _placement === \"top\",\n placementBottom: _placement === \"bottom\",\n placementLeft: _placement === \"left\",\n placementRight: _placement === \"right\",\n },\n plasmicUpdateVariant\n )\n }\n </Tooltip>\n </Provider>\n );\n}\n\ninterface TriggerWrapperProps {\n children: React.ReactElement;\n onOpenChange: (isOpen: boolean) => void;\n isDisabled: boolean;\n triggerOnFocusOnly: boolean;\n tooltipId?: string;\n className?: string;\n}\n\n// React Aria's TooltipTrigger requires a focusable element with ref.\n// To make sure that this requirement is fulfilled, wrap everything in a focusable div.\n// https://react-spectrum.adobe.com/react-aria/Tooltip.html#example\n// (In the example, Aria Button works as a trigger because it uses useFocusable behind the scenes)\n//\n// Discussion (React-aria-components TooltipTrigger with custom button):\n// https://github.com/adobe/react-spectrum/discussions/5119#discussioncomment-7084661\nconst TriggerWrapper = React.forwardRef<HTMLDivElement, TriggerWrapperProps>(\n function TriggerWrapper_(\n {\n children,\n onOpenChange,\n isDisabled,\n triggerOnFocusOnly,\n tooltipId,\n className,\n },\n ref: React.Ref<HTMLDivElement>\n ) {\n const { hoverProps } = useHover({\n isDisabled,\n onHoverStart: () => !triggerOnFocusOnly && onOpenChange(true),\n onHoverEnd: () => !triggerOnFocusOnly && onOpenChange(false),\n });\n\n // useFocusWithin captures focus events for all nested focusable elements\n const { focusWithinProps } = useFocusWithin({\n isDisabled,\n onFocusWithin: () => {\n onOpenChange(true);\n },\n onBlurWithin: () => {\n onOpenChange(false);\n },\n });\n\n const mergedProps = mergeProps(hoverProps, focusWithinProps, {\n \"aria-describedby\": tooltipId,\n // We expose className to allow user control over the wrapper div's styling.\n className,\n ref,\n style: COMMON_STYLES,\n });\n\n return <div {...mergedProps}>{children}</div>;\n }\n);\n\nexport function registerTooltip(\n loader?: Registerable,\n overrides?: CodeComponentMetaOverrides<typeof BaseTooltip>\n) {\n registerComponentHelper(\n loader,\n BaseTooltip,\n {\n name: \"plasmic-react-aria-tooltip\",\n displayName: \"Aria Tooltip\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerTooltip\",\n importName: \"BaseTooltip\",\n isAttachment: true,\n variants,\n props: {\n children: {\n type: \"slot\",\n mergeWithParent: true,\n displayName: \"Trigger\",\n defaultValue: {\n type: \"text\",\n value: \"Hover me!\",\n styles: {\n width: \"hug\",\n },\n },\n },\n tooltipContent: {\n type: \"slot\",\n mergeWithParent: true,\n displayName: \"Tooltip Content\",\n // NOTE: This is not applied in attachment\n defaultValue: {\n type: \"text\",\n value: \"Hello from Tooltip!\",\n styles: {\n background: \"black\",\n color: \"white\",\n padding: \"7px\",\n borderRadius: \"7px\",\n },\n },\n },\n resetClassName: {\n type: \"themeResetClass\",\n },\n isDisabled: {\n type: \"boolean\",\n },\n delay: {\n type: \"number\",\n // Default value is explicitly set to 0 to prevent users from mistakenly thinking the tooltip isn’t opening due to a delay.\n defaultValue: 0,\n defaultValueHint: 0,\n description:\n \"The delay (in milliseconds) for the tooltip to show up.\",\n },\n closeDelay: {\n type: \"number\",\n // Default value is explicitly set to 0 to prevent users from mistakenly thinking the tooltip isn’t closing due to a delay.\n defaultValue: 0,\n defaultValueHint: 0,\n description: \"The delay (in milliseconds) for the tooltip to close.\",\n },\n trigger: {\n type: \"choice\",\n options: [\"focus\", \"focus and hover\"],\n defaultValueHint: \"focus and hover\",\n },\n ...getCommonOverlayProps<BaseTooltipProps>(\"popover\", {\n placement: { defaultValueHint: \"top\" },\n offset: { defaultValueHint: 0 },\n containerPadding: { defaultValueHint: 12 },\n crossOffset: { defaultValueHint: 0 },\n }),\n isOpen: {\n type: \"boolean\",\n editOnly: true,\n uncontrolledProp: \"defaultOpen\",\n description: \"Whether the overlay is open by default\",\n defaultValueHint: false,\n hidden: () => true,\n },\n onOpenChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"isOpen\", type: \"boolean\" }],\n },\n },\n states: {\n isOpen: {\n type: \"writable\",\n valueProp: \"isOpen\",\n onChangeProp: \"onOpenChange\",\n variableType: \"boolean\",\n },\n },\n trapsFocus: true,\n },\n overrides\n );\n}\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"registerTooltip.esm.js","sources":["../src/registerTooltip.tsx"],"sourcesContent":["import React, { useCallback, useId, useRef, useState } from \"react\";\nimport { mergeProps, useFocusWithin, useHover } from \"react-aria\";\nimport {\n Provider,\n Tooltip,\n TooltipProps,\n TooltipTriggerStateContext,\n} from \"react-aria-components\";\nimport { TooltipTriggerProps, useTooltipTriggerState } from \"react-stately\";\nimport { COMMON_STYLES, getCommonOverlayProps } from \"./common\";\nimport {\n CodeComponentMetaOverrides,\n Registerable,\n registerComponentHelper,\n useIsOpen,\n WithPlasmicCanvasComponentInfo,\n} from \"./utils\";\nimport { pickAriaComponentVariants, WithVariants } from \"./variant-utils\";\n\n// NOTE: Placement should be managed as variants, not just props.\n// When `shouldFlip` is true, the placement prop may not represent the final position\n// (e.g., if placement is set to \"bottom\" but lacks space, the tooltip may flip to \"top\").\n// However, data-selectors will consistently indicate the actual placement of the tooltip.\nconst TOOLTIP_VARIANTS = [\n \"placementTop\" as const,\n \"placementBottom\" as const,\n \"placementLeft\" as const,\n \"placementRight\" as const,\n];\n\nconst { variants, withObservedValues } =\n pickAriaComponentVariants(TOOLTIP_VARIANTS);\n\nexport interface BaseTooltipProps\n extends Omit<TooltipTriggerProps, \"trigger\">,\n TooltipProps,\n WithPlasmicCanvasComponentInfo,\n WithVariants<typeof TOOLTIP_VARIANTS> {\n children: React.ReactElement<HTMLElement>;\n tooltipContent?: React.ReactElement;\n resetClassName?: string;\n trigger?: \"focus\" | \"focus and hover\" | undefined;\n className?: string;\n}\n\n// In Studio, the tooltip is always controlled because isOpen is attached to the code component's state.\n// In Codegen, the user decides whether the tooltip is controlled or not. So we need to handle both cases.\nexport function BaseTooltip(props: BaseTooltipProps) {\n if (props.isOpen !== undefined) {\n return <ControlledBaseTooltip {...props} />;\n } else {\n return <UncontrolledBaseTooltip {...props} />;\n }\n}\n\nfunction UncontrolledBaseTooltip({ onOpenChange, ...props }: BaseTooltipProps) {\n const [open, setOpen] = useState(props.defaultOpen ?? false);\n const onOpenChangeMerged = useCallback(\n (newOpen: boolean) => {\n setOpen(newOpen);\n onOpenChange?.(newOpen);\n },\n [onOpenChange]\n );\n return (\n <ControlledBaseTooltip\n {...props}\n isOpen={open}\n onOpenChange={onOpenChangeMerged}\n />\n );\n}\n\nfunction ControlledBaseTooltip(props: BaseTooltipProps) {\n const {\n children,\n isDisabled = false,\n delay,\n closeDelay,\n trigger,\n isOpen,\n tooltipContent,\n resetClassName,\n placement,\n offset,\n crossOffset,\n shouldFlip,\n className,\n onOpenChange = () => {},\n plasmicUpdateVariant,\n __plasmic_selection_prop__,\n } = props;\n\n const isCanvasAwareOpen = useIsOpen({\n triggerSlotName: \"children\",\n isOpen,\n __plasmic_selection_prop__,\n });\n\n // The following is a custom implementation of the <TooltipTrigger /> component.\n // The default <TooltipTrigger /> from react-aria-components automatically manages state changes when a useFocusable element (e.g., an Aria Button) is clicked.\n // However, in our custom trigger, <TriggerWrapper>, we use useFocusWithin to explicitly handle state changes, allowing any element—not just an Aria Button—to act as a trigger.\n // However, this results in duplicate state updates when using an Aria Button, as state changes are triggered both by useFocusWithin and useFocusable.\n // Consequently, onOpenChange is called twice.\n //\n // This implementation is adapted from:\n // https://github.com/adobe/react-spectrum/blob/988096cf3f1dbd59f274d8c552e9fe7d5dcf4f41/packages/react-aria-components/src/Tooltip.tsx#L89\n // The <FocusableProvider> has been removed, as it handles automatic state updates for the Aria Button.\n const ref = useRef<any>(null);\n const tooltipId = useId();\n\n const state = useTooltipTriggerState({\n ...props,\n isOpen: isCanvasAwareOpen,\n trigger: trigger === \"focus\" ? trigger : undefined,\n });\n\n return (\n // TooltipTriggerStateContext used by BaseOverlayArrow\n <Provider values={[[TooltipTriggerStateContext, state]]}>\n <TriggerWrapper\n ref={ref}\n className={className}\n tooltipId={state.isOpen ? tooltipId : undefined}\n isDisabled={isDisabled}\n onOpenChange={onOpenChange}\n triggerOnFocusOnly={trigger === \"focus\"}\n >\n {children}\n </TriggerWrapper>\n <Tooltip\n triggerRef={ref}\n // @ts-expect-error <Tooltip> is wrongly typed to not have id prop\n id={tooltipId}\n offset={offset}\n delay={delay}\n closeDelay={closeDelay}\n crossOffset={crossOffset}\n shouldFlip={shouldFlip}\n className={resetClassName}\n onOpenChange={onOpenChange}\n placement={placement}\n >\n {({ placement: _placement }) =>\n withObservedValues(\n <>{tooltipContent}</>,\n {\n placementTop: _placement === \"top\",\n placementBottom: _placement === \"bottom\",\n placementLeft: _placement === \"left\",\n placementRight: _placement === \"right\",\n },\n plasmicUpdateVariant\n )\n }\n </Tooltip>\n </Provider>\n );\n}\n\ninterface TriggerWrapperProps {\n children: React.ReactElement;\n onOpenChange: (isOpen: boolean) => void;\n isDisabled: boolean;\n triggerOnFocusOnly: boolean;\n tooltipId?: string;\n className?: string;\n}\n\n// React Aria's TooltipTrigger requires a focusable element with ref.\n// To make sure that this requirement is fulfilled, wrap everything in a focusable div.\n// https://react-spectrum.adobe.com/react-aria/Tooltip.html#example\n// (In the example, Aria Button works as a trigger because it uses useFocusable behind the scenes)\n//\n// Discussion (React-aria-components TooltipTrigger with custom button):\n// https://github.com/adobe/react-spectrum/discussions/5119#discussioncomment-7084661\nconst TriggerWrapper = React.forwardRef<HTMLDivElement, TriggerWrapperProps>(\n function TriggerWrapper_(\n {\n children,\n onOpenChange,\n isDisabled,\n triggerOnFocusOnly,\n tooltipId,\n className,\n },\n ref: React.Ref<HTMLDivElement>\n ) {\n const { hoverProps } = useHover({\n isDisabled,\n onHoverStart: () => !triggerOnFocusOnly && onOpenChange(true),\n onHoverEnd: () => !triggerOnFocusOnly && onOpenChange(false),\n });\n\n // useFocusWithin captures focus events for all nested focusable elements\n const { focusWithinProps } = useFocusWithin({\n isDisabled,\n onFocusWithin: () => {\n onOpenChange(true);\n },\n onBlurWithin: () => {\n onOpenChange(false);\n },\n });\n\n const mergedProps = mergeProps(hoverProps, focusWithinProps, {\n \"aria-describedby\": tooltipId,\n // We expose className to allow user control over the wrapper div's styling.\n className,\n ref,\n style: COMMON_STYLES,\n });\n\n return <div {...mergedProps}>{children}</div>;\n }\n);\n\nexport function registerTooltip(\n loader?: Registerable,\n overrides?: CodeComponentMetaOverrides<typeof BaseTooltip>\n) {\n registerComponentHelper(\n loader,\n BaseTooltip,\n {\n name: \"plasmic-react-aria-tooltip\",\n displayName: \"Aria Tooltip\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerTooltip\",\n importName: \"BaseTooltip\",\n isAttachment: true,\n variants,\n props: {\n children: {\n type: \"slot\",\n mergeWithParent: true,\n displayName: \"Trigger\",\n defaultValue: {\n type: \"text\",\n value: \"Hover me!\",\n styles: {\n width: \"hug\",\n },\n },\n },\n tooltipContent: {\n type: \"slot\",\n mergeWithParent: true,\n displayName: \"Tooltip Content\",\n // NOTE: This is not applied in attachment\n defaultValue: {\n type: \"text\",\n value: \"Hello from Tooltip!\",\n styles: {\n background: \"black\",\n color: \"white\",\n padding: \"7px\",\n borderRadius: \"7px\",\n },\n },\n },\n resetClassName: {\n type: \"themeResetClass\",\n },\n isDisabled: {\n type: \"boolean\",\n },\n delay: {\n type: \"number\",\n // Default value is explicitly set to 0 to prevent users from mistakenly thinking the tooltip isn’t opening due to a delay.\n defaultValue: 0,\n defaultValueHint: 0,\n description:\n \"The delay (in milliseconds) for the tooltip to show up.\",\n },\n closeDelay: {\n type: \"number\",\n // Default value is explicitly set to 0 to prevent users from mistakenly thinking the tooltip isn’t closing due to a delay.\n defaultValue: 0,\n defaultValueHint: 0,\n description: \"The delay (in milliseconds) for the tooltip to close.\",\n },\n trigger: {\n type: \"choice\",\n options: [\"focus\", \"focus and hover\"],\n defaultValueHint: \"focus and hover\",\n },\n ...getCommonOverlayProps<BaseTooltipProps>(\"popover\", {\n placement: { defaultValueHint: \"top\" },\n offset: { defaultValueHint: 0 },\n containerPadding: { defaultValueHint: 12 },\n crossOffset: { defaultValueHint: 0 },\n }),\n isOpen: {\n type: \"boolean\",\n editOnly: true,\n uncontrolledProp: \"defaultOpen\",\n description: \"Whether the overlay is open by default\",\n defaultValueHint: false,\n hidden: () => true,\n },\n onOpenChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"isOpen\", type: \"boolean\" }],\n },\n },\n states: {\n isOpen: {\n type: \"writable\",\n valueProp: \"isOpen\",\n onChangeProp: \"onOpenChange\",\n variableType: \"boolean\",\n },\n },\n trapsFocus: true,\n },\n overrides\n );\n}\n"],"names":["_a"],"mappings":"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"}
@@ -366,14 +366,6 @@ const SelectedInCanvas = {
366
366
  var _f = _e, args = __objRest(_f, ["__plasmic_selection_prop__"]);
367
367
  const [selected, setSelected] = React.useState(false);
368
368
  const [selectedSlotName, setSelectedSlotName] = React.useState("");
369
- React.useEffect(() => {
370
- setTimeout(() => {
371
- setSelected(true);
372
- setTimeout(() => {
373
- setSelectedSlotName("children");
374
- }, 1e3);
375
- }, 1e3);
376
- }, []);
377
369
  return (
378
370
  // Simulate Plasmic canvas envirnment
379
371
  /* @__PURE__ */ React__default.default.createElement(
@@ -384,30 +376,63 @@ const SelectedInCanvas = {
384
376
  globalVariants: {}
385
377
  }
386
378
  },
379
+ /* @__PURE__ */ React__default.default.createElement(
380
+ "style",
381
+ {
382
+ dangerouslySetInnerHTML: {
383
+ __html: `
384
+ .trigger {
385
+ display: inline-block;
386
+ }
387
+ `
388
+ }
389
+ }
390
+ ),
387
391
  /* @__PURE__ */ React__default.default.createElement(
388
392
  registerTooltip.BaseTooltip,
389
393
  __spreadProps(__spreadValues({}, args), {
390
394
  __plasmic_selection_prop__: {
391
395
  isSelected: selected,
392
396
  selectedSlotName
393
- }
397
+ },
398
+ className: "trigger"
394
399
  })
395
- )
400
+ ),
401
+ /* @__PURE__ */ React__default.default.createElement("button", { onClick: () => setSelected((prev) => !prev) }, "Toggle selection"),
402
+ /* @__PURE__ */ React__default.default.createElement("button", { onClick: () => setSelectedSlotName("children") }, "Select trigger"),
403
+ /* @__PURE__ */ React__default.default.createElement("button", { onClick: () => setSelectedSlotName("some other slot") }, "Select other slot")
396
404
  )
397
405
  );
398
406
  },
399
- play: async () => {
407
+ play: async ({ canvasElement }) => {
408
+ const canvas = test.within(canvasElement);
409
+ const toggleSelectionBtn = canvas.getByText("Toggle selection");
410
+ const triggerSelectionBtn = canvas.getByText("Select trigger");
411
+ const otherSlotSelectionBtn = canvas.getByText("Select other slot");
400
412
  await test.waitFor(
401
413
  () => test.expect(
402
414
  test.within(document.body).queryByTestId("tooltip-content")
403
415
  ).not.toBeInTheDocument()
404
416
  );
417
+ await test.userEvent.click(toggleSelectionBtn);
405
418
  await test.waitFor(
406
419
  () => test.expect(
407
420
  test.within(document.body).queryByTestId("tooltip-content")
408
- ).toBeInTheDocument(),
409
- { timeout: 1100 }
421
+ ).toBeInTheDocument()
410
422
  );
423
+ await test.userEvent.click(triggerSelectionBtn);
424
+ await test.waitFor(
425
+ () => test.expect(
426
+ test.within(document.body).queryByTestId("tooltip-content")
427
+ ).not.toBeInTheDocument()
428
+ );
429
+ await test.userEvent.click(otherSlotSelectionBtn);
430
+ await test.waitFor(
431
+ () => test.expect(
432
+ test.within(document.body).queryByTestId("tooltip-content")
433
+ ).toBeInTheDocument()
434
+ );
435
+ await test.userEvent.click(toggleSelectionBtn);
411
436
  await test.waitFor(
412
437
  () => test.expect(
413
438
  test.within(document.body).queryByTestId("tooltip-content")
@@ -416,9 +441,10 @@ const SelectedInCanvas = {
416
441
  );
417
442
  }
418
443
  };
419
- const TooltipPosition = {
444
+ const TooltipPositionInCanvas = {
420
445
  render: (args) => {
421
446
  const [className, setClassName] = React.useState("trigger");
447
+ const [selected, setSelected] = React.useState(false);
422
448
  return /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, null, /* @__PURE__ */ React__default.default.createElement(
423
449
  "style",
424
450
  {
@@ -434,32 +460,115 @@ const TooltipPosition = {
434
460
  `
435
461
  }
436
462
  }
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 })));
463
+ ), /* @__PURE__ */ React__default.default.createElement(
464
+ host.PlasmicCanvasContext.Provider,
465
+ {
466
+ value: {
467
+ componentName: "test",
468
+ globalVariants: {}
469
+ }
470
+ },
471
+ /* @__PURE__ */ React__default.default.createElement("button", { onClick: () => setClassName("trigger trigger-right") }, "Move right"),
472
+ /* @__PURE__ */ React__default.default.createElement("button", { onClick: () => setClassName("trigger") }, "Move back"),
473
+ /* @__PURE__ */ React__default.default.createElement("button", { onClick: () => setSelected((prev) => !prev) }, "Toggle selection"),
474
+ /* @__PURE__ */ React__default.default.createElement(
475
+ registerTooltip.BaseTooltip,
476
+ __spreadProps(__spreadValues({}, args), {
477
+ className,
478
+ __plasmic_selection_prop__: {
479
+ isSelected: selected
480
+ }
481
+ })
482
+ )
483
+ ));
438
484
  },
439
485
  play: async ({ canvasElement }) => {
440
486
  const canvas = test.within(canvasElement);
441
- const trigger = canvas.getByText("Show tooltip");
442
487
  const moveRightBtn = canvas.getByText("Move right");
488
+ const moveBackBtn = canvas.getByText("Move back");
489
+ const toggleSelectionBtn = canvas.getByText("Toggle selection");
443
490
  await test.waitFor(
444
491
  () => test.expect(
445
492
  test.within(document.body).queryByTestId("tooltip-content")
446
493
  ).not.toBeInTheDocument()
447
494
  );
448
- await test.userEvent.hover(trigger);
449
- let initialTooltipLeftPosition;
495
+ await test.userEvent.click(toggleSelectionBtn);
496
+ const initialTooltipLeftPosition = await test.waitFor(() => {
497
+ const tooltip = test.within(document.body).getByTestId("tooltip-content");
498
+ return tooltip.getBoundingClientRect().left;
499
+ });
500
+ await test.userEvent.click(toggleSelectionBtn);
501
+ await test.waitFor(
502
+ () => test.expect(
503
+ test.within(document.body).queryByTestId("tooltip-content")
504
+ ).not.toBeInTheDocument()
505
+ );
506
+ await test.userEvent.click(moveRightBtn);
507
+ await test.userEvent.click(toggleSelectionBtn);
450
508
  await test.waitFor(() => {
451
509
  const tooltip = test.within(document.body).getByTestId("tooltip-content");
452
- initialTooltipLeftPosition = tooltip.getBoundingClientRect().left;
510
+ test.expect(initialTooltipLeftPosition).not.toEqual(
511
+ tooltip.getBoundingClientRect().left
512
+ );
453
513
  });
454
- await test.userEvent.unhover(trigger);
455
- await test.userEvent.hover(trigger);
456
- await test.waitFor(async () => {
514
+ await test.userEvent.click(toggleSelectionBtn);
515
+ await test.waitFor(
516
+ () => test.expect(
517
+ test.within(document.body).queryByTestId("tooltip-content")
518
+ ).not.toBeInTheDocument()
519
+ );
520
+ await test.userEvent.click(moveBackBtn);
521
+ await test.userEvent.click(toggleSelectionBtn);
522
+ await test.waitFor(() => {
457
523
  const tooltip = test.within(document.body).getByTestId("tooltip-content");
458
524
  test.expect(initialTooltipLeftPosition).toEqual(
459
525
  tooltip.getBoundingClientRect().left
460
526
  );
461
527
  });
528
+ await test.userEvent.click(toggleSelectionBtn);
529
+ await test.waitFor(
530
+ () => test.expect(
531
+ test.within(document.body).queryByTestId("tooltip-content")
532
+ ).not.toBeInTheDocument()
533
+ );
534
+ }
535
+ };
536
+ const TooltipPositionInPreview = {
537
+ render: (args) => {
538
+ const [className, setClassName] = React.useState("trigger");
539
+ return /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, null, /* @__PURE__ */ React__default.default.createElement(
540
+ "style",
541
+ {
542
+ dangerouslySetInnerHTML: {
543
+ __html: `
544
+ .trigger {
545
+ display: inline-block;
546
+ }
547
+ .trigger-right {
548
+ position: absolute;
549
+ right: 0;
550
+ }
551
+ `
552
+ }
553
+ }
554
+ ), /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, null, /* @__PURE__ */ React__default.default.createElement("button", { onClick: () => setClassName("trigger trigger-right") }, "Move right"), /* @__PURE__ */ React__default.default.createElement("button", { onClick: () => setClassName("trigger") }, "Move back"), /* @__PURE__ */ React__default.default.createElement(registerTooltip.BaseTooltip, __spreadProps(__spreadValues({}, args), { className }))));
555
+ },
556
+ play: async ({ canvasElement }) => {
557
+ const canvas = test.within(canvasElement);
558
+ const trigger = canvas.getByText("Show tooltip");
559
+ const moveRightBtn = canvas.getByText("Move right");
560
+ const moveBackBtn = canvas.getByText("Move back");
561
+ await test.userEvent.hover(trigger);
562
+ const initialTooltipLeftPosition = await test.waitFor(() => {
563
+ const tooltip = test.within(document.body).getByTestId("tooltip-content");
564
+ return tooltip.getBoundingClientRect().left;
565
+ });
462
566
  await test.userEvent.unhover(trigger);
567
+ await test.waitFor(
568
+ () => test.expect(
569
+ test.within(document.body).queryByTestId("tooltip-content")
570
+ ).not.toBeInTheDocument()
571
+ );
463
572
  await test.userEvent.click(moveRightBtn);
464
573
  await test.userEvent.hover(trigger);
465
574
  await test.waitFor(() => {
@@ -468,6 +577,26 @@ const TooltipPosition = {
468
577
  tooltip.getBoundingClientRect().left
469
578
  );
470
579
  });
580
+ await test.userEvent.unhover(trigger);
581
+ await test.waitFor(
582
+ () => test.expect(
583
+ test.within(document.body).queryByTestId("tooltip-content")
584
+ ).not.toBeInTheDocument()
585
+ );
586
+ await test.userEvent.click(moveBackBtn);
587
+ await test.userEvent.hover(trigger);
588
+ await test.waitFor(() => {
589
+ const tooltip = test.within(document.body).getByTestId("tooltip-content");
590
+ test.expect(initialTooltipLeftPosition).toEqual(
591
+ tooltip.getBoundingClientRect().left
592
+ );
593
+ });
594
+ await test.userEvent.unhover(trigger);
595
+ await test.waitFor(
596
+ () => test.expect(
597
+ test.within(document.body).queryByTestId("tooltip-content")
598
+ ).not.toBeInTheDocument()
599
+ );
471
600
  }
472
601
  };
473
602
 
@@ -479,7 +608,8 @@ exports.Disabled = Disabled;
479
608
  exports.FocusTrigger = FocusTrigger;
480
609
  exports.FocusTriggerOnly = FocusTriggerOnly;
481
610
  exports.SelectedInCanvas = SelectedInCanvas;
482
- exports.TooltipPosition = TooltipPosition;
611
+ exports.TooltipPositionInCanvas = TooltipPositionInCanvas;
612
+ exports.TooltipPositionInPreview = TooltipPositionInPreview;
483
613
  exports.TriggerWithEventHandlers = TriggerWithEventHandlers;
484
614
  exports.WithoutForwardRefTrigger = WithoutForwardRefTrigger;
485
615
  exports.default = meta;
@@ -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: <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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"}
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, { 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 return (\n // Simulate Plasmic canvas envirnment\n <PlasmicCanvasContext.Provider\n value={{\n componentName: \"test\",\n globalVariants: {},\n }}\n >\n <style\n dangerouslySetInnerHTML={{\n __html: `\n .trigger {\n display: inline-block;\n }\n `,\n }}\n />\n <BaseTooltip\n {...args}\n // Simulate node selection in Plasmic canvas\n __plasmic_selection_prop__={{\n isSelected: selected,\n selectedSlotName,\n }}\n className=\"trigger\"\n />\n <button onClick={() => setSelected((prev) => !prev)}>\n Toggle selection\n </button>\n <button onClick={() => setSelectedSlotName(\"children\")}>\n Select trigger\n </button>\n <button onClick={() => setSelectedSlotName(\"some other slot\")}>\n Select other slot\n </button>\n </PlasmicCanvasContext.Provider>\n );\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const toggleSelectionBtn = canvas.getByText(\"Toggle selection\");\n const triggerSelectionBtn = canvas.getByText(\"Select trigger\");\n const otherSlotSelectionBtn = canvas.getByText(\"Select other slot\");\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await userEvent.click(toggleSelectionBtn); // select to open\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n\n await userEvent.click(triggerSelectionBtn); // selecting trigger should close tooltip\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await userEvent.click(otherSlotSelectionBtn); // selecting other slot should open tooltip\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).toBeInTheDocument()\n );\n\n await userEvent.click(toggleSelectionBtn); // un-select to close\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 TooltipPositionInCanvas: Story = {\n render: (args) => {\n const [className, setClassName] = useState<string | undefined>(\"trigger\");\n const [selected, setSelected] = useState(false);\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 {/* Simulate Plasmic canvas envirnment */}\n <PlasmicCanvasContext.Provider\n value={{\n componentName: \"test\",\n globalVariants: {},\n }}\n >\n <button onClick={() => setClassName(\"trigger trigger-right\")}>\n Move right\n </button>\n <button onClick={() => setClassName(\"trigger\")}>Move back</button>\n <button onClick={() => setSelected((prev) => !prev)}>\n Toggle selection\n </button>\n <BaseTooltip\n {...args}\n className={className}\n __plasmic_selection_prop__={{\n isSelected: selected,\n }}\n />\n </PlasmicCanvasContext.Provider>\n </>\n );\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const moveRightBtn = canvas.getByText(\"Move right\");\n const moveBackBtn = canvas.getByText(\"Move back\");\n const toggleSelectionBtn = canvas.getByText(\"Toggle selection\");\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await userEvent.click(toggleSelectionBtn); // select to open\n\n const initialTooltipLeftPosition = await waitFor(() => {\n const tooltip = within(document.body).getByTestId(\"tooltip-content\");\n return tooltip.getBoundingClientRect().left;\n });\n\n await userEvent.click(toggleSelectionBtn); // un-select to close\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await userEvent.click(moveRightBtn);\n await userEvent.click(toggleSelectionBtn); // select to open\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 await userEvent.click(toggleSelectionBtn); // un-select to close\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await userEvent.click(moveBackBtn); // move trigger back to initial position\n await userEvent.click(toggleSelectionBtn); // select to open\n\n await waitFor(() => {\n const tooltip = within(document.body).getByTestId(\"tooltip-content\");\n expect(initialTooltipLeftPosition).toEqual(\n tooltip.getBoundingClientRect().left\n ); // opens at the initial position\n });\n\n await userEvent.click(toggleSelectionBtn); // un-select to close\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n },\n};\n\n// Ensures that the tooltip is positioned relative to its trigger\nexport const TooltipPositionInPreview: 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 {/* Simulate Plasmic canvas envirnment */}\n <>\n <button onClick={() => setClassName(\"trigger trigger-right\")}>\n Move right\n </button>\n <button onClick={() => setClassName(\"trigger\")}>Move back</button>\n <BaseTooltip {...args} className={className} />\n </>\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 const moveBackBtn = canvas.getByText(\"Move back\");\n\n await userEvent.hover(trigger); // toggle open\n\n const initialTooltipLeftPosition = await waitFor(() => {\n const tooltip = within(document.body).getByTestId(\"tooltip-content\");\n return tooltip.getBoundingClientRect().left;\n });\n\n await userEvent.unhover(trigger); // toggle close\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await userEvent.click(moveRightBtn);\n await userEvent.hover(trigger); // toggle open\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 await userEvent.unhover(trigger); // toggle close\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n\n await userEvent.click(moveBackBtn); // move trigger back to initial position\n await userEvent.hover(trigger); // toggle open\n\n await waitFor(() => {\n const tooltip = within(document.body).getByTestId(\"tooltip-content\");\n expect(initialTooltipLeftPosition).toEqual(\n tooltip.getBoundingClientRect().left\n ); // opens at the initial position\n });\n\n await userEvent.unhover(trigger); // toggle close\n\n await waitFor(() =>\n expect(\n within(document.body).queryByTestId(\"tooltip-content\")\n ).not.toBeInTheDocument()\n );\n },\n};\n"],"names":["BaseTooltip","fn","React","within","waitFor","expect","userEvent","useState","BaseButton","PlasmicCanvasContext"],"mappings":"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"}