@plasmicpkgs/react-aria 0.0.116 → 0.0.117
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/react-aria.esm.js +3 -3
- package/dist/react-aria.esm.js.map +1 -1
- package/dist/react-aria.js +3 -3
- package/dist/react-aria.js.map +1 -1
- package/package.json +2 -2
- package/skinny/registerTooltip.cjs.js +3 -3
- package/skinny/registerTooltip.cjs.js.map +1 -1
- package/skinny/registerTooltip.esm.js +3 -3
- package/skinny/registerTooltip.esm.js.map +1 -1
- package/skinny/registerTooltip.stories.cjs.js +153 -23
- package/skinny/registerTooltip.stories.cjs.js.map +1 -1
- package/skinny/registerTooltip.stories.esm.js +153 -24
- package/skinny/registerTooltip.stories.esm.js.map +1 -1
|
@@ -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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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PlasmicCanvasContext } from '@plasmicapp/host';
|
|
2
2
|
import { fn, within, expect, waitFor, userEvent } from '@storybook/test';
|
|
3
|
-
import React, { useState
|
|
3
|
+
import React, { useState } from 'react';
|
|
4
4
|
import { BaseButton } from './registerButton.esm.js';
|
|
5
5
|
import { BaseTooltip } from './registerTooltip.esm.js';
|
|
6
6
|
import 'react-aria';
|
|
@@ -358,14 +358,6 @@ const SelectedInCanvas = {
|
|
|
358
358
|
var _f = _e, args = __objRest(_f, ["__plasmic_selection_prop__"]);
|
|
359
359
|
const [selected, setSelected] = useState(false);
|
|
360
360
|
const [selectedSlotName, setSelectedSlotName] = useState("");
|
|
361
|
-
useEffect(() => {
|
|
362
|
-
setTimeout(() => {
|
|
363
|
-
setSelected(true);
|
|
364
|
-
setTimeout(() => {
|
|
365
|
-
setSelectedSlotName("children");
|
|
366
|
-
}, 1e3);
|
|
367
|
-
}, 1e3);
|
|
368
|
-
}, []);
|
|
369
361
|
return (
|
|
370
362
|
// Simulate Plasmic canvas envirnment
|
|
371
363
|
/* @__PURE__ */ React.createElement(
|
|
@@ -376,30 +368,63 @@ const SelectedInCanvas = {
|
|
|
376
368
|
globalVariants: {}
|
|
377
369
|
}
|
|
378
370
|
},
|
|
371
|
+
/* @__PURE__ */ React.createElement(
|
|
372
|
+
"style",
|
|
373
|
+
{
|
|
374
|
+
dangerouslySetInnerHTML: {
|
|
375
|
+
__html: `
|
|
376
|
+
.trigger {
|
|
377
|
+
display: inline-block;
|
|
378
|
+
}
|
|
379
|
+
`
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
),
|
|
379
383
|
/* @__PURE__ */ React.createElement(
|
|
380
384
|
BaseTooltip,
|
|
381
385
|
__spreadProps(__spreadValues({}, args), {
|
|
382
386
|
__plasmic_selection_prop__: {
|
|
383
387
|
isSelected: selected,
|
|
384
388
|
selectedSlotName
|
|
385
|
-
}
|
|
389
|
+
},
|
|
390
|
+
className: "trigger"
|
|
386
391
|
})
|
|
387
|
-
)
|
|
392
|
+
),
|
|
393
|
+
/* @__PURE__ */ React.createElement("button", { onClick: () => setSelected((prev) => !prev) }, "Toggle selection"),
|
|
394
|
+
/* @__PURE__ */ React.createElement("button", { onClick: () => setSelectedSlotName("children") }, "Select trigger"),
|
|
395
|
+
/* @__PURE__ */ React.createElement("button", { onClick: () => setSelectedSlotName("some other slot") }, "Select other slot")
|
|
388
396
|
)
|
|
389
397
|
);
|
|
390
398
|
},
|
|
391
|
-
play: async () => {
|
|
399
|
+
play: async ({ canvasElement }) => {
|
|
400
|
+
const canvas = within(canvasElement);
|
|
401
|
+
const toggleSelectionBtn = canvas.getByText("Toggle selection");
|
|
402
|
+
const triggerSelectionBtn = canvas.getByText("Select trigger");
|
|
403
|
+
const otherSlotSelectionBtn = canvas.getByText("Select other slot");
|
|
392
404
|
await waitFor(
|
|
393
405
|
() => expect(
|
|
394
406
|
within(document.body).queryByTestId("tooltip-content")
|
|
395
407
|
).not.toBeInTheDocument()
|
|
396
408
|
);
|
|
409
|
+
await userEvent.click(toggleSelectionBtn);
|
|
397
410
|
await waitFor(
|
|
398
411
|
() => expect(
|
|
399
412
|
within(document.body).queryByTestId("tooltip-content")
|
|
400
|
-
).toBeInTheDocument()
|
|
401
|
-
{ timeout: 1100 }
|
|
413
|
+
).toBeInTheDocument()
|
|
402
414
|
);
|
|
415
|
+
await userEvent.click(triggerSelectionBtn);
|
|
416
|
+
await waitFor(
|
|
417
|
+
() => expect(
|
|
418
|
+
within(document.body).queryByTestId("tooltip-content")
|
|
419
|
+
).not.toBeInTheDocument()
|
|
420
|
+
);
|
|
421
|
+
await userEvent.click(otherSlotSelectionBtn);
|
|
422
|
+
await waitFor(
|
|
423
|
+
() => expect(
|
|
424
|
+
within(document.body).queryByTestId("tooltip-content")
|
|
425
|
+
).toBeInTheDocument()
|
|
426
|
+
);
|
|
427
|
+
await userEvent.click(toggleSelectionBtn);
|
|
403
428
|
await waitFor(
|
|
404
429
|
() => expect(
|
|
405
430
|
within(document.body).queryByTestId("tooltip-content")
|
|
@@ -408,9 +433,10 @@ const SelectedInCanvas = {
|
|
|
408
433
|
);
|
|
409
434
|
}
|
|
410
435
|
};
|
|
411
|
-
const
|
|
436
|
+
const TooltipPositionInCanvas = {
|
|
412
437
|
render: (args) => {
|
|
413
438
|
const [className, setClassName] = useState("trigger");
|
|
439
|
+
const [selected, setSelected] = useState(false);
|
|
414
440
|
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
415
441
|
"style",
|
|
416
442
|
{
|
|
@@ -426,32 +452,115 @@ const TooltipPosition = {
|
|
|
426
452
|
`
|
|
427
453
|
}
|
|
428
454
|
}
|
|
429
|
-
), /* @__PURE__ */ React.createElement(
|
|
455
|
+
), /* @__PURE__ */ React.createElement(
|
|
456
|
+
PlasmicCanvasContext.Provider,
|
|
457
|
+
{
|
|
458
|
+
value: {
|
|
459
|
+
componentName: "test",
|
|
460
|
+
globalVariants: {}
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
/* @__PURE__ */ React.createElement("button", { onClick: () => setClassName("trigger trigger-right") }, "Move right"),
|
|
464
|
+
/* @__PURE__ */ React.createElement("button", { onClick: () => setClassName("trigger") }, "Move back"),
|
|
465
|
+
/* @__PURE__ */ React.createElement("button", { onClick: () => setSelected((prev) => !prev) }, "Toggle selection"),
|
|
466
|
+
/* @__PURE__ */ React.createElement(
|
|
467
|
+
BaseTooltip,
|
|
468
|
+
__spreadProps(__spreadValues({}, args), {
|
|
469
|
+
className,
|
|
470
|
+
__plasmic_selection_prop__: {
|
|
471
|
+
isSelected: selected
|
|
472
|
+
}
|
|
473
|
+
})
|
|
474
|
+
)
|
|
475
|
+
));
|
|
430
476
|
},
|
|
431
477
|
play: async ({ canvasElement }) => {
|
|
432
478
|
const canvas = within(canvasElement);
|
|
433
|
-
const trigger = canvas.getByText("Show tooltip");
|
|
434
479
|
const moveRightBtn = canvas.getByText("Move right");
|
|
480
|
+
const moveBackBtn = canvas.getByText("Move back");
|
|
481
|
+
const toggleSelectionBtn = canvas.getByText("Toggle selection");
|
|
435
482
|
await waitFor(
|
|
436
483
|
() => expect(
|
|
437
484
|
within(document.body).queryByTestId("tooltip-content")
|
|
438
485
|
).not.toBeInTheDocument()
|
|
439
486
|
);
|
|
440
|
-
await userEvent.
|
|
441
|
-
|
|
487
|
+
await userEvent.click(toggleSelectionBtn);
|
|
488
|
+
const initialTooltipLeftPosition = await waitFor(() => {
|
|
489
|
+
const tooltip = within(document.body).getByTestId("tooltip-content");
|
|
490
|
+
return tooltip.getBoundingClientRect().left;
|
|
491
|
+
});
|
|
492
|
+
await userEvent.click(toggleSelectionBtn);
|
|
493
|
+
await waitFor(
|
|
494
|
+
() => expect(
|
|
495
|
+
within(document.body).queryByTestId("tooltip-content")
|
|
496
|
+
).not.toBeInTheDocument()
|
|
497
|
+
);
|
|
498
|
+
await userEvent.click(moveRightBtn);
|
|
499
|
+
await userEvent.click(toggleSelectionBtn);
|
|
442
500
|
await waitFor(() => {
|
|
443
501
|
const tooltip = within(document.body).getByTestId("tooltip-content");
|
|
444
|
-
initialTooltipLeftPosition
|
|
502
|
+
expect(initialTooltipLeftPosition).not.toEqual(
|
|
503
|
+
tooltip.getBoundingClientRect().left
|
|
504
|
+
);
|
|
445
505
|
});
|
|
446
|
-
await userEvent.
|
|
447
|
-
await
|
|
448
|
-
|
|
506
|
+
await userEvent.click(toggleSelectionBtn);
|
|
507
|
+
await waitFor(
|
|
508
|
+
() => expect(
|
|
509
|
+
within(document.body).queryByTestId("tooltip-content")
|
|
510
|
+
).not.toBeInTheDocument()
|
|
511
|
+
);
|
|
512
|
+
await userEvent.click(moveBackBtn);
|
|
513
|
+
await userEvent.click(toggleSelectionBtn);
|
|
514
|
+
await waitFor(() => {
|
|
449
515
|
const tooltip = within(document.body).getByTestId("tooltip-content");
|
|
450
516
|
expect(initialTooltipLeftPosition).toEqual(
|
|
451
517
|
tooltip.getBoundingClientRect().left
|
|
452
518
|
);
|
|
453
519
|
});
|
|
520
|
+
await userEvent.click(toggleSelectionBtn);
|
|
521
|
+
await waitFor(
|
|
522
|
+
() => expect(
|
|
523
|
+
within(document.body).queryByTestId("tooltip-content")
|
|
524
|
+
).not.toBeInTheDocument()
|
|
525
|
+
);
|
|
526
|
+
}
|
|
527
|
+
};
|
|
528
|
+
const TooltipPositionInPreview = {
|
|
529
|
+
render: (args) => {
|
|
530
|
+
const [className, setClassName] = useState("trigger");
|
|
531
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
532
|
+
"style",
|
|
533
|
+
{
|
|
534
|
+
dangerouslySetInnerHTML: {
|
|
535
|
+
__html: `
|
|
536
|
+
.trigger {
|
|
537
|
+
display: inline-block;
|
|
538
|
+
}
|
|
539
|
+
.trigger-right {
|
|
540
|
+
position: absolute;
|
|
541
|
+
right: 0;
|
|
542
|
+
}
|
|
543
|
+
`
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
), /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("button", { onClick: () => setClassName("trigger trigger-right") }, "Move right"), /* @__PURE__ */ React.createElement("button", { onClick: () => setClassName("trigger") }, "Move back"), /* @__PURE__ */ React.createElement(BaseTooltip, __spreadProps(__spreadValues({}, args), { className }))));
|
|
547
|
+
},
|
|
548
|
+
play: async ({ canvasElement }) => {
|
|
549
|
+
const canvas = within(canvasElement);
|
|
550
|
+
const trigger = canvas.getByText("Show tooltip");
|
|
551
|
+
const moveRightBtn = canvas.getByText("Move right");
|
|
552
|
+
const moveBackBtn = canvas.getByText("Move back");
|
|
553
|
+
await userEvent.hover(trigger);
|
|
554
|
+
const initialTooltipLeftPosition = await waitFor(() => {
|
|
555
|
+
const tooltip = within(document.body).getByTestId("tooltip-content");
|
|
556
|
+
return tooltip.getBoundingClientRect().left;
|
|
557
|
+
});
|
|
454
558
|
await userEvent.unhover(trigger);
|
|
559
|
+
await waitFor(
|
|
560
|
+
() => expect(
|
|
561
|
+
within(document.body).queryByTestId("tooltip-content")
|
|
562
|
+
).not.toBeInTheDocument()
|
|
563
|
+
);
|
|
455
564
|
await userEvent.click(moveRightBtn);
|
|
456
565
|
await userEvent.hover(trigger);
|
|
457
566
|
await waitFor(() => {
|
|
@@ -460,8 +569,28 @@ const TooltipPosition = {
|
|
|
460
569
|
tooltip.getBoundingClientRect().left
|
|
461
570
|
);
|
|
462
571
|
});
|
|
572
|
+
await userEvent.unhover(trigger);
|
|
573
|
+
await waitFor(
|
|
574
|
+
() => expect(
|
|
575
|
+
within(document.body).queryByTestId("tooltip-content")
|
|
576
|
+
).not.toBeInTheDocument()
|
|
577
|
+
);
|
|
578
|
+
await userEvent.click(moveBackBtn);
|
|
579
|
+
await userEvent.hover(trigger);
|
|
580
|
+
await waitFor(() => {
|
|
581
|
+
const tooltip = within(document.body).getByTestId("tooltip-content");
|
|
582
|
+
expect(initialTooltipLeftPosition).toEqual(
|
|
583
|
+
tooltip.getBoundingClientRect().left
|
|
584
|
+
);
|
|
585
|
+
});
|
|
586
|
+
await userEvent.unhover(trigger);
|
|
587
|
+
await waitFor(
|
|
588
|
+
() => expect(
|
|
589
|
+
within(document.body).queryByTestId("tooltip-content")
|
|
590
|
+
).not.toBeInTheDocument()
|
|
591
|
+
);
|
|
463
592
|
}
|
|
464
593
|
};
|
|
465
594
|
|
|
466
|
-
export { AlwaysOpen, AriaButtonTrigger, Basic, Controlled, Disabled, FocusTrigger, FocusTriggerOnly, SelectedInCanvas,
|
|
595
|
+
export { AlwaysOpen, AriaButtonTrigger, Basic, Controlled, Disabled, FocusTrigger, FocusTriggerOnly, SelectedInCanvas, TooltipPositionInCanvas, TooltipPositionInPreview, TriggerWithEventHandlers, WithoutForwardRefTrigger, meta as default };
|
|
467
596
|
//# sourceMappingURL=registerTooltip.stories.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerTooltip.stories.esm.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":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,IAAiC,GAAA;AAAA,EACrC,KAAO,EAAA,wBAAA;AAAA,EACP,SAAW,EAAA,WAAA;AAAA,EACX,IAAM,EAAA;AAAA,IACJ,cAAc,EAAG,EAAA;AAAA,IACjB,QAAA,kBAAW,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAK,cAAY,CAAA;AAAA;AAAA,IAC5B,cAAgB,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,aAAA,EAAY,qBAAkB,mBAAiB,CAAA;AAAA,IACpE,OAAS,EAAA,KAAA,CAAA;AAAA;AAAA,IACT,KAAO,EAAA,CAAA;AAAA,IACP,UAAY,EAAA,CAAA;AAAA,GACd;AACF,EAAA;AAMO,MAAM,KAAe,GAAA;AAAA,EAC1B,IAAM,EAAA,OAAO,EAAE,aAAA,EAAe,MAAW,KAAA;AACvC,IAAM,MAAA,MAAA,GAAS,OAAO,aAAa,CAAA,CAAA;AACnC,IAAM,MAAA,OAAA,GAAU,MAAO,CAAA,SAAA,CAAU,cAAc,CAAA,CAAA;AAE/C,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAEA,IAAM,MAAA,SAAA,CAAU,MAAM,OAAO,CAAA,CAAA;AAG7B,IAAA,MAAM,QAAQ,MAAM;AAtCxB,MAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAuCM,MAAA,MAAM,UAAU,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,YAAY,iBAAiB,CAAA,CAAA;AACnE,MAAA,MAAM,SAAY,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,aAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,YAAa,CAAA,IAAA,CAAA,CAAA;AACtD,MAAO,MAAA,CAAA,SAAS,EAAE,WAAY,EAAA,CAAA;AAC9B,MAAA,MAAA,CAAA,CAAO,EAAQ,GAAA,OAAA,CAAA,aAAA,KAAR,IAAuB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAA,CAAa,mBAAmB,CAAE,CAAA,OAAA;AAAA,QAC9D,SAAA;AAAA,OACF,CAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,oBAAA,CAAqB,IAAI,CAAA,CAAA;AAEnD,IAAM,MAAA,SAAA,CAAU,QAAQ,OAAO,CAAA,CAAA;AAE/B,IAAM,MAAA,OAAA,CAAQ,MAAM,MAAO,CAAA,IAAA,CAAK,YAAY,CAAE,CAAA,oBAAA,CAAqB,KAAK,CAAC,CAAA,CAAA;AACzE,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,qBAAA,CAAsB,CAAC,CAAA,CAAA;AAEjD,IAAA,MAAM,UAAU,GAAI,EAAA,CAAA;AAGpB,IAAA,MAAM,MAAO,CAAA,OAAO,CAAE,CAAA,GAAA,CAAI,WAAY,EAAA,CAAA;AACtC,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,qBAAA,CAAsB,CAAC,CAAA,CAAA;AAAA,GACnD;AACF,EAAA;AAGO,MAAM,UAAoB,GAAA;AAAA,EAC/B,IAAM,EAAA;AAAA,IACJ,MAAQ,EAAA,IAAA;AAAA;AAAA,GACV;AAAA,EACA,MAAM,YAAY;AAEhB,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,KACtB,CAAA;AAAA,GACF;AACF,EAAA;AAGO,MAAM,YAAsB,GAAA;AAAA,EACjC,IAAM,EAAA;AAAA;AAAA,IAEJ,QAAU,kBAAA,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,QAAA,EAAU,KAAG,cAAY,CAAA;AAAA;AAAA,GAC3C;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,aAAA,EAAe,MAAW,KAAA;AACvC,IAAM,MAAA,MAAA,GAAS,OAAO,aAAa,CAAA,CAAA;AACnC,IAAM,MAAA,OAAA,GAAU,MAAO,CAAA,SAAA,CAAU,cAAc,CAAA,CAAA;AAC/C,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAGA,IAAA,MAAM,UAAU,GAAI,EAAA,CAAA;AAEpB,IAAM,MAAA,MAAA,CAAO,OAAO,CAAA,CAAE,WAAY,EAAA,CAAA;AAGlC,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,KACtB,CAAA;AAEA,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,oBAAA,CAAqB,IAAI,CAAA,CAAA;AAGnD,IAAA,MAAM,UAAU,GAAI,EAAA,CAAA;AACpB,IAAA,MAAM,MAAO,CAAA,OAAO,CAAE,CAAA,GAAA,CAAI,WAAY,EAAA,CAAA;AAEtC,IAAM,MAAA,OAAA,CAAQ,MAAM,MAAO,CAAA,IAAA,CAAK,YAAY,CAAE,CAAA,oBAAA,CAAqB,KAAK,CAAC,CAAA,CAAA;AAAA,GAC3E;AACF,EAAA;AAEA,MAAM,YAAA,GAAe,CAAC,EAAgC,KAAA;AAAhC,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAlHxB,QAAA,EAAA,GAkHsB,EAAe,EAAA,KAAA,GAAA,SAAA,CAAf,IAAe,CAAb,UAAA,CAAA,CAAA,CAAA;AACtB,EAAA,2CACG,KAAQ,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAA,EAAR,EAAe,aAAA,EAAY,sCACzB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAK,QAAU,EAAA,CAAA,EAAA,EAAI,QAAS,CAC7B,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAK,QAAU,EAAA,CAAA,EAAA,EAAI,QAAS,CAC/B,CAAA,CAAA;AAEJ,CAAA,CAAA;AACO,MAAM,wBAAkC,GAAA;AAAA,EAC7C,IAAM,EAAA;AAAA,IACJ,QAAA,kBAAW,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,EAAa,cAAY,CAAA;AAAA,GACtC;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,IAAA,EAAM,eAAoB,KAAA;AACvC,IAAM,MAAA,MAAA,GAAS,OAAO,aAAa,CAAA,CAAA;AACnC,IAAM,MAAA,cAAA,GAAiB,MAAO,CAAA,WAAA,CAAY,iBAAiB,CAAA,CAAA;AAC3D,IAAM,MAAA,qBAAA,GAAwB,MAAO,CAAA,YAAA,CAAa,cAAc,CAAA,CAAA;AAEhE,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAEA,IAAA,MAAM,OAAO,qBAAsB,CAAA,CAAC,CAAC,CAAA,CAAE,IAAI,WAAY,EAAA,CAAA;AAGvD,IAAA,MAAM,UAAU,GAAI,EAAA,CAAA;AACpB,IAAA,MAAA,CAAO,qBAAsB,CAAA,CAAC,CAAC,CAAA,CAAE,WAAY,EAAA,CAAA;AAG7C,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,KACtB,CAAA;AAEA,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,oBAAA,CAAqB,IAAI,CAAA,CAAA;AAGnD,IAAA,MAAM,UAAU,GAAI,EAAA,CAAA;AACpB,IAAA,MAAA,CAAO,qBAAsB,CAAA,CAAC,CAAC,CAAA,CAAE,IAAI,WAAY,EAAA,CAAA;AACjD,IAAA,MAAA,CAAO,qBAAsB,CAAA,CAAC,CAAC,CAAA,CAAE,WAAY,EAAA,CAAA;AAC7C,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,KACtB,CAAA;AAEA,IAAA,MAAM,UAAU,GAAI,EAAA,CAAA;AACpB,IAAA,MAAA,CAAO,qBAAsB,CAAA,CAAC,CAAC,CAAA,CAAE,IAAI,WAAY,EAAA,CAAA;AACjD,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,oBAAA,CAAqB,KAAK,CAAA,CAAA;AACpD,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAGA,IAAM,MAAA,SAAA,CAAU,MAAM,cAAc,CAAA,CAAA;AAGpC,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,KACtB,CAAA;AAEA,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,oBAAA,CAAqB,IAAI,CAAA,CAAA;AAEnD,IAAM,MAAA,SAAA,CAAU,QAAQ,cAAc,CAAA,CAAA;AAEtC,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAEA,IAAM,MAAA,OAAA,CAAQ,MAAM,MAAO,CAAA,IAAA,CAAK,YAAY,CAAE,CAAA,oBAAA,CAAqB,KAAK,CAAC,CAAA,CAAA;AAAA,GAC3E;AACF,EAAA;AAGO,MAAM,gBAA0B,GAAA;AAAA,EACrC,IAAM,EAAA;AAAA,IACJ,OAAS,EAAA,OAAA;AAAA,IACT,QAAU,kBAAA,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,QAAA,EAAU,KAAG,cAAY,CAAA;AAAA;AAAA,GAC3C;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,IAAA,EAAM,eAAoB,KAAA;AACvC,IAAM,MAAA,MAAA,GAAS,OAAO,aAAa,CAAA,CAAA;AACnC,IAAM,MAAA,OAAA,GAAU,MAAO,CAAA,SAAA,CAAU,cAAc,CAAA,CAAA;AAE/C,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAGA,IAAM,MAAA,SAAA,CAAU,MAAM,OAAO,CAAA,CAAA;AAG7B,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAEA,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,GAAA,CAAI,gBAAiB,EAAA,CAAA;AAG/C,IAAM,MAAA,SAAA,CAAU,QAAQ,OAAO,CAAA,CAAA;AAG/B,IAAA,MAAM,UAAU,GAAI,EAAA,CAAA;AACpB,IAAM,MAAA,MAAA,CAAO,OAAO,CAAA,CAAE,WAAY,EAAA,CAAA;AAGlC,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,KACtB,CAAA;AAEA,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,oBAAA,CAAqB,IAAI,CAAA,CAAA;AAGnD,IAAA,MAAM,UAAU,GAAI,EAAA,CAAA;AACpB,IAAM,MAAA,OAAA,CAAQ,MAAM,MAAO,CAAA,IAAA,CAAK,YAAY,CAAE,CAAA,oBAAA,CAAqB,KAAK,CAAC,CAAA,CAAA;AAAA,GAC3E;AACF,EAAA;AAGO,MAAM,wBAAkC,GAAA;AAAA,EAC7C,UAAY,EAAA;AAAA,IACV,eAAe,EAAG,EAAA;AAAA,GACpB;AAAA,EACA,QAAQ,CAAC,IAAA,EAAM,EAAE,UAAA,uBACd,KAAA,CAAA,aAAA,CAAA,WAAA,EAAA,cAAA,CAAA,EAAA,EAAgB,IACf,CAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,YAAO,SAAU,EAAA,cAAA,EAAe,SAAS,UAAW,CAAA,aAAA,EAAA,EAAe,cAEpE,CACF,CAAA;AAAA,EAEF,MAAM,OAAO,EAAE,IAAM,EAAA,aAAA,EAAe,YAAiB,KAAA;AACnD,IAAM,MAAA,MAAA,GAAS,OAAO,aAAa,CAAA,CAAA;AACnC,IAAM,MAAA,OAAA,GAAU,MAAO,CAAA,SAAA,CAAU,cAAc,CAAA,CAAA;AAE/C,IAAA,MAAM,MAAO,CAAA,OAAO,CAAE,CAAA,WAAA,CAAY,cAAc,CAAA,CAAA;AAEhD,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAEA,IAAA,MAAA,CAAO,UAAW,CAAA,aAAa,CAAE,CAAA,GAAA,CAAI,gBAAiB,EAAA,CAAA;AAEtD,IAAA,MAAM,UAAU,GAAI,EAAA,CAAA;AACpB,IAAM,MAAA,MAAA,CAAO,OAAO,CAAA,CAAE,WAAY,EAAA,CAAA;AAGlC,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,KACtB,CAAA;AACA,IAAO,MAAA,CAAA,UAAA,CAAW,aAAa,CAAA,CAAE,gBAAiB,EAAA,CAAA;AAElD,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,oBAAA,CAAqB,IAAI,CAAA,CAAA;AAGnD,IAAA,MAAM,UAAU,GAAI,EAAA,CAAA;AACpB,IAAM,MAAA,OAAA,CAAQ,MAAM,MAAO,CAAA,IAAA,CAAK,YAAY,CAAE,CAAA,oBAAA,CAAqB,KAAK,CAAC,CAAA,CAAA;AAAA,GAC3E;AACF,EAAA;AAGO,MAAM,QAAkB,GAAA;AAAA,EAC7B,IAAM,EAAA;AAAA,IACJ,UAAY,EAAA,IAAA;AAAA,GACd;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,IAAA,EAAM,eAAoB,KAAA;AACvC,IAAM,MAAA,MAAA,GAAS,OAAO,aAAa,CAAA,CAAA;AACnC,IAAM,MAAA,OAAA,GAAU,MAAO,CAAA,SAAA,CAAU,cAAc,CAAA,CAAA;AAE/C,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAGA,IAAA,MAAM,UAAU,GAAI,EAAA,CAAA;AAGpB,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAEA,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,GAAA,CAAI,gBAAiB,EAAA,CAAA;AAE/C,IAAM,MAAA,SAAA,CAAU,MAAM,OAAO,CAAA,CAAA;AAAA,GAC/B;AACF,EAAA;AAEO,MAAM,UAAoB,GAAA;AAAA,EAC/B,MAAA,EAAQ,CAAC,EAA+C,KAAA;AAA/C,IAAE,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,MAAA,EAAQ,SAAS,YAlU9B,EAAA,GAkUW,IAAoC,IAApC,GAAA,SAAA,CAAA,EAAA,EAAoC,CAAlC,QAAiB,EAAA,cAAA,CAAA,CAAA,CAAA;AAC1B,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAEtC,IACE,uBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,WAAA;AAAA,MAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACK,IADL,CAAA,EAAA;AAAA,QAEC,MAAQ,EAAA,IAAA;AAAA,QACR,YAAA,EAAc,CAAC,MAAW,KAAA;AACxB,UAAA,OAAA,CAAQ,MAAM,CAAA,CAAA;AACd,UAAe,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAA,MAAA,CAAA,CAAA;AAAA,SACjB;AAAA,OAAA,CAAA;AAAA,KACF,CAAA;AAAA,GAEJ;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,aAAA,EAAoB,KAAA;AACjC,IAAM,MAAA,MAAA,GAAS,OAAO,aAAa,CAAA,CAAA;AACnC,IAAM,MAAA,OAAA,GAAU,MAAO,CAAA,SAAA,CAAU,cAAc,CAAA,CAAA;AAE/C,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAEA,IAAM,MAAA,SAAA,CAAU,MAAM,OAAO,CAAA,CAAA;AAE7B,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,KACtB,CAAA;AAEA,IAAM,MAAA,SAAA,CAAU,QAAQ,OAAO,CAAA,CAAA;AAE/B,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAAA,GACF;AACF,EAAA;AAEO,MAAM,iBAA2B,GAAA;AAAA,EACtC,IAAM,EAAA;AAAA,IACJ,QAAA,kBAAW,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,IAAA,EAAW,cAAY,CAAA;AAAA;AAAA,GACpC;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,IAAA,EAAM,eAAoB,KAAA;AACvC,IAAM,MAAA,MAAA,GAAS,OAAO,aAAa,CAAA,CAAA;AACnC,IAAM,MAAA,OAAA,GAAU,MAAO,CAAA,SAAA,CAAU,cAAc,CAAA,CAAA;AAC/C,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAEA,IAAM,MAAA,SAAA,CAAU,MAAM,OAAO,CAAA,CAAA;AAG7B,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,KACtB,CAAA;AACA,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,oBAAA,CAAqB,IAAI,CAAA,CAAA;AACnD,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,qBAAA,CAAsB,CAAC,CAAA,CAAA;AAEjD,IAAM,MAAA,SAAA,CAAU,QAAQ,OAAO,CAAA,CAAA;AAE/B,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AACA,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,oBAAA,CAAqB,KAAK,CAAA,CAAA;AACpD,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,qBAAA,CAAsB,CAAC,CAAA,CAAA;AAEjD,IAAA,MAAM,MAAO,CAAA,OAAO,CAAE,CAAA,GAAA,CAAI,WAAY,EAAA,CAAA;AAGtC,IAAA,MAAM,UAAU,GAAI,EAAA,CAAA;AACpB,IAAO,MAAA,CAAA,OAAO,EAAE,WAAY,EAAA,CAAA;AAC5B,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,KACtB,CAAA;AACA,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,oBAAA,CAAqB,IAAI,CAAA,CAAA;AACnD,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,qBAAA,CAAsB,CAAC,CAAA,CAAA;AAGjD,IAAA,MAAM,UAAU,GAAI,EAAA,CAAA;AACpB,IAAA,MAAM,OAAO,MAAO,CAAA,SAAA,CAAU,cAAc,CAAC,CAAA,CAAE,IAAI,WAAY,EAAA,CAAA;AAE/D,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAEA,IAAM,MAAA,OAAA,CAAQ,MAAM,MAAO,CAAA,IAAA,CAAK,YAAY,CAAE,CAAA,oBAAA,CAAqB,KAAK,CAAC,CAAA,CAAA;AACzE,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,qBAAA,CAAsB,CAAC,CAAA,CAAA;AAAA,GACnD;AACF,EAAA;AAEO,MAAM,gBAA0B,GAAA;AAAA,EACrC,MAAA,EAAQ,CAAC,EAA4C,KAAA;AAA5C,IAAA,IAAA,EAAA,GAAA,EAAA,CAAA,CAAiC,IAAA,GAAA,SAAA,CAAjC,IAAiC,CAA/B,4BAAA,CAAA,EAAA;AACT,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAC9C,IAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAAS,EAAE,CAAA,CAAA;AAE3D,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAChB,QAAA,UAAA,CAAW,MAAM;AAEf,UAAA,mBAAA,CAAoB,UAAU,CAAA,CAAA;AAAA,WAC7B,GAAI,CAAA,CAAA;AAAA,SACN,GAAI,CAAA,CAAA;AAAA,KACT,EAAG,EAAE,CAAA,CAAA;AAEL,IAAA;AAAA;AAAA,sBAEE,KAAA,CAAA,aAAA;AAAA,QAAC,oBAAqB,CAAA,QAAA;AAAA,QAArB;AAAA,UACC,KAAO,EAAA;AAAA,YACL,aAAe,EAAA,MAAA;AAAA,YACf,gBAAgB,EAAC;AAAA,WACnB;AAAA,SAAA;AAAA,wBAEA,KAAA,CAAA,aAAA;AAAA,UAAC,WAAA;AAAA,UAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACK,IADL,CAAA,EAAA;AAAA,YAGC,0BAA4B,EAAA;AAAA,cAC1B,UAAY,EAAA,QAAA;AAAA,cACZ,gBAAA;AAAA,aACF;AAAA,WAAA,CAAA;AAAA,SACF;AAAA,OACF;AAAA,MAAA;AAAA,GAEJ;AAAA,EACA,MAAM,YAAY;AAChB,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAEA,IAAM,MAAA,OAAA;AAAA,MACJ,MACE,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,QACrD,iBAAkB,EAAA;AAAA,MACtB,EAAE,SAAS,IAAK,EAAA;AAAA,KAClB,CAAA;AAEA,IAAM,MAAA,OAAA;AAAA,MACJ,MACE,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,MAC1B,EAAE,SAAS,IAAK,EAAA;AAAA,KAClB,CAAA;AAAA,GACF;AACF,EAAA;AAGO,MAAM,eAAyB,GAAA;AAAA,EACpC,MAAA,EAAQ,CAAC,IAAS,KAAA;AAChB,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAA6B,SAAS,CAAA,CAAA;AAExE,IAAA,uBAEI,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,uBAAyB,EAAA;AAAA,UACvB,MAAQ,EAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,SASV;AAAA,OAAA;AAAA,KAEF,kBAAA,KAAA,CAAA,aAAA,CAAC,QAAO,EAAA,EAAA,OAAA,EAAS,MAAM,YAAa,CAAA,uBAAuB,CAAG,EAAA,EAAA,YAE9D,mBACC,KAAA,CAAA,aAAA,CAAA,WAAA,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAAgB,IAAhB,CAAA,EAAA,EAAsB,YAAsB,CAC/C,CAAA,CAAA;AAAA,GAEJ;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,aAAA,EAAoB,KAAA;AACjC,IAAM,MAAA,MAAA,GAAS,OAAO,aAAa,CAAA,CAAA;AACnC,IAAM,MAAA,OAAA,GAAU,MAAO,CAAA,SAAA,CAAU,cAAc,CAAA,CAAA;AAC/C,IAAM,MAAA,YAAA,GAAe,MAAO,CAAA,SAAA,CAAU,YAAY,CAAA,CAAA;AAElD,IAAM,MAAA,OAAA;AAAA,MAAQ,MACZ,MAAA;AAAA,QACE,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,cAAc,iBAAiB,CAAA;AAAA,OACvD,CAAE,IAAI,iBAAkB,EAAA;AAAA,KAC1B,CAAA;AAEA,IAAM,MAAA,SAAA,CAAU,MAAM,OAAO,CAAA,CAAA;AAE7B,IAAI,IAAA,0BAAA,CAAA;AAGJ,IAAA,MAAM,QAAQ,MAAM;AAClB,MAAA,MAAM,UAAU,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,YAAY,iBAAiB,CAAA,CAAA;AACnE,MAA6B,0BAAA,GAAA,OAAA,CAAQ,uBAAwB,CAAA,IAAA,CAAA;AAAA,KAC9D,CAAA,CAAA;AAED,IAAM,MAAA,SAAA,CAAU,QAAQ,OAAO,CAAA,CAAA;AAE/B,IAAM,MAAA,SAAA,CAAU,MAAM,OAAO,CAAA,CAAA;AAE7B,IAAA,MAAM,QAAQ,YAAY;AACxB,MAAA,MAAM,UAAU,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,YAAY,iBAAiB,CAAA,CAAA;AACnE,MAAA,MAAA,CAAO,0BAA0B,CAAE,CAAA,OAAA;AAAA,QACjC,OAAA,CAAQ,uBAAwB,CAAA,IAAA;AAAA,OAClC,CAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAM,MAAA,SAAA,CAAU,QAAQ,OAAO,CAAA,CAAA;AAE/B,IAAM,MAAA,SAAA,CAAU,MAAM,YAAY,CAAA,CAAA;AAClC,IAAM,MAAA,SAAA,CAAU,MAAM,OAAO,CAAA,CAAA;AAE7B,IAAA,MAAM,QAAQ,MAAM;AAClB,MAAA,MAAM,UAAU,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,YAAY,iBAAiB,CAAA,CAAA;AACnE,MAAO,MAAA,CAAA,0BAA0B,EAAE,GAAI,CAAA,OAAA;AAAA,QACrC,OAAA,CAAQ,uBAAwB,CAAA,IAAA;AAAA,OAClC,CAAA;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"registerTooltip.stories.esm.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":[],"mappings":"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"}
|