@plasmicpkgs/react-aria 0.0.111 → 0.0.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/react-aria.esm.js +14 -4
  3. package/dist/react-aria.esm.js.map +1 -1
  4. package/dist/react-aria.js +13 -3
  5. package/dist/react-aria.js.map +1 -1
  6. package/dist/registerDialogTrigger.d.ts +6 -0
  7. package/package.json +2 -4
  8. package/skinny/registerDialogTrigger.cjs.js +16 -5
  9. package/skinny/registerDialogTrigger.cjs.js.map +1 -1
  10. package/skinny/registerDialogTrigger.d.ts +6 -0
  11. package/skinny/registerDialogTrigger.esm.js +16 -6
  12. package/skinny/registerDialogTrigger.esm.js.map +1 -1
  13. package/skinny/registerDialogTrigger.stories.cjs.js +253 -16
  14. package/skinny/registerDialogTrigger.stories.cjs.js.map +1 -1
  15. package/skinny/registerDialogTrigger.stories.esm.js +249 -17
  16. package/skinny/registerDialogTrigger.stories.esm.js.map +1 -1
  17. package/skinny/registerSwitch.stories.cjs.js +162 -0
  18. package/skinny/registerSwitch.stories.cjs.js.map +1 -0
  19. package/skinny/registerSwitch.stories.esm.js +148 -0
  20. package/skinny/registerSwitch.stories.esm.js.map +1 -0
  21. package/skinny/registerTextField-common-stories.cjs.js +199 -0
  22. package/skinny/registerTextField-common-stories.cjs.js.map +1 -0
  23. package/skinny/registerTextField-common-stories.esm.js +185 -0
  24. package/skinny/registerTextField-common-stories.esm.js.map +1 -0
  25. package/skinny/registerTextField-input.stories.cjs.js +54 -0
  26. package/skinny/registerTextField-input.stories.cjs.js.map +1 -0
  27. package/skinny/registerTextField-input.stories.esm.js +37 -0
  28. package/skinny/registerTextField-input.stories.esm.js.map +1 -0
  29. package/skinny/registerTextField-textarea.stories.cjs.js +55 -0
  30. package/skinny/registerTextField-textarea.stories.cjs.js.map +1 -0
  31. package/skinny/registerTextField-textarea.stories.esm.js +39 -0
  32. package/skinny/registerTextField-textarea.stories.esm.js.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"registerDialogTrigger.stories.cjs.js","sources":["../src/registerDialogTrigger.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 { BaseDialog } from \"./registerDialog\";\nimport { BaseDialogTrigger } from \"./registerDialogTrigger\";\nimport { BaseModal } from \"./registerModal\";\nimport { BasePopover } from \"./registerPopover\";\n\nconst meta: Meta<typeof BaseDialogTrigger> = {\n title: \"Components/BaseDialogTrigger\",\n component: BaseDialogTrigger,\n args: {\n defaultOpen: false,\n onOpenChange: fn(),\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof BaseDialogTrigger>;\n\nconst DefaultContent = () => (\n <div data-testid=\"dialog-content\">\n <h2>Dialog Title</h2>\n <p>Dialog content goes here</p>\n </div>\n);\n\nexport const WithModal: Story = {\n args: {\n trigger: <BaseButton>Open modal</BaseButton>,\n dialog: (\n <BaseModal isDismissable={true} isKeyboardDismissDisabled={false}>\n <BaseDialog>\n <DefaultContent />\n </BaseDialog>\n </BaseModal>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const button = canvas.getByText(\"Open modal\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(button);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // Modal should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n // With keyboard navigation, press Escape to dismiss\n await userEvent.click(button);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.keyboard(\"{Escape}\");\n // dialog should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(4);\n },\n};\n\nexport const WithPopover: Story = {\n args: {\n trigger: <BaseButton>Open popover</BaseButton>,\n dialog: (\n <BasePopover isKeyboardDismissDisabled={false}>\n <BaseDialog>\n <DefaultContent />\n </BaseDialog>\n </BasePopover>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const button = canvas.getByText(\"Open popover\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(button);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // popover should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n // With keyboard navigation, press Escape to dismiss\n await userEvent.click(button);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.keyboard(\"{Escape}\");\n // dialog should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(4);\n },\n};\n\nexport const WithPopoverNonModal: Story = {\n args: {\n trigger: <BaseButton>Open popover</BaseButton>,\n dialog: (\n <BasePopover isNonModal={true} isKeyboardDismissDisabled={false}>\n <BaseDialog>\n <DefaultContent />\n </BaseDialog>\n </BasePopover>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const button = canvas.getByText(\"Open popover\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(button);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // popover should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.keyboard(\"{Escape}\");\n // dialog should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n },\n};\n\nexport const SelectedInCanvas: Story = {\n args: {\n trigger: <BaseButton>Open popover</BaseButton>,\n dialog: (\n <BasePopover isNonModal={true} isKeyboardDismissDisabled={false}>\n <BaseDialog>\n <DefaultContent />\n </BaseDialog>\n </BasePopover>\n ),\n },\n render: ({ __plasmic_selection_prop__, ...args }) => {\n const [selected, setSelected] = useState(false);\n const [selectedSlotName, setSelectedSlotName] = useState(\"\");\n useEffect(() => {\n setTimeout(() => {\n setSelected(true);\n setTimeout(() => {\n // Simulate trigger slot selection in Plasmic canvas\n setSelectedSlotName(\"trigger\");\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 <BaseDialogTrigger\n // Simulate node selection in Plasmic canvas\n __plasmic_selection_prop__={{\n isSelected: selected,\n selectedSlotName,\n }}\n {...args}\n />\n </PlasmicCanvasContext.Provider>\n );\n },\n play: async () => {\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await waitFor(\n () => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n },\n { timeout: 1100 }\n );\n\n await waitFor(\n () => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n },\n { timeout: 1100 }\n ); // the slot selected is trigger, so the popover should close\n },\n};\n"],"names":["BaseDialogTrigger","fn","React","BaseButton","BaseModal","BaseDialog","within","waitFor","expect","userEvent","BasePopover","useState","useEffect","PlasmicCanvasContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,MAAM,IAAuC,GAAA;AAAA,EAC3C,KAAO,EAAA,8BAAA;AAAA,EACP,SAAW,EAAAA,uCAAA;AAAA,EACX,IAAM,EAAA;AAAA,IACJ,WAAa,EAAA,KAAA;AAAA,IACb,cAAcC,OAAG,EAAA;AAAA,GACnB;AACF,EAAA;AAKA,MAAM,cAAiB,GAAA,sBACpBC,sBAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,aAAY,EAAA,gBAAA,EAAA,kBACdA,sBAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAA,EAAG,cAAY,CAAA,kBACfA,sBAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA,EAAE,0BAAwB,CAC7B,CAAA,CAAA;AAGK,MAAM,SAAmB,GAAA;AAAA,EAC9B,IAAM,EAAA;AAAA,IACJ,OAAA,kBAAUA,sBAAA,CAAA,aAAA,CAAAC,yBAAA,EAAA,IAAA,EAAW,YAAU,CAAA;AAAA,IAC/B,MACE,kBAAAD,sBAAA,CAAA,aAAA,CAACE,uBAAU,EAAA,EAAA,aAAA,EAAe,IAAM,EAAA,yBAAA,EAA2B,KACzD,EAAA,kBAAAF,sBAAA,CAAA,aAAA,CAACG,yBACC,EAAA,IAAA,kBAAAH,sBAAA,CAAA,aAAA,CAAC,cAAe,EAAA,IAAA,CAClB,CACF,CAAA;AAAA,GAEJ;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,aAAA,EAAe,MAAW,KAAA;AACvC,IAAM,MAAA,MAAA,GAASI,YAAO,aAAa,CAAA,CAAA;AACnC,IAAM,MAAA,GAAA,GAAMA,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAChC,IAAM,MAAA,MAAA,GAAS,MAAO,CAAA,SAAA,CAAU,YAAY,CAAA,CAAA;AAE5C,IAAA,MAAMC,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,IAAI,aAAc,CAAA,gBAAgB,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AAAA,KACnE,CAAA,CAAA;AAED,IAAM,MAAAC,cAAA,CAAU,MAAM,MAAM,CAAA,CAAA;AAE5B,IAAA,MAAMF,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,GAAI,CAAA,aAAA,CAAc,gBAAgB,CAAC,EAAE,iBAAkB,EAAA,CAAA;AAAA,KAC/D,CAAA,CAAA;AAED,IAAM,MAAAC,cAAA,CAAU,KAAM,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAGnC,IAAA,MAAMF,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,IAAI,aAAc,CAAA,gBAAgB,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AAAA,KACnE,CAAA,CAAA;AAGD,IAAM,MAAAC,cAAA,CAAU,MAAM,MAAM,CAAA,CAAA;AAE5B,IAAA,MAAMF,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,GAAI,CAAA,aAAA,CAAc,gBAAgB,CAAC,EAAE,iBAAkB,EAAA,CAAA;AAAA,KAC/D,CAAA,CAAA;AAED,IAAM,MAAAC,cAAA,CAAU,SAAS,UAAU,CAAA,CAAA;AAEnC,IAAA,MAAMF,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,IAAI,aAAc,CAAA,gBAAgB,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AAAA,KACnE,CAAA,CAAA;AAED,IAAAA,WAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,qBAAA,CAAsB,CAAC,CAAA,CAAA;AAAA,GACnD;AACF,EAAA;AAEO,MAAM,WAAqB,GAAA;AAAA,EAChC,IAAM,EAAA;AAAA,IACJ,OAAA,kBAAUN,sBAAA,CAAA,aAAA,CAAAC,yBAAA,EAAA,IAAA,EAAW,cAAY,CAAA;AAAA,IACjC,MAAA,kBACGD,sBAAA,CAAA,aAAA,CAAAQ,2BAAA,EAAA,EAAY,yBAA2B,EAAA,KAAA,EAAA,uDACrCL,yBACC,EAAA,IAAA,kBAAAH,sBAAA,CAAA,aAAA,CAAC,cAAe,EAAA,IAAA,CAClB,CACF,CAAA;AAAA,GAEJ;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,aAAA,EAAe,MAAW,KAAA;AACvC,IAAM,MAAA,MAAA,GAASI,YAAO,aAAa,CAAA,CAAA;AACnC,IAAM,MAAA,GAAA,GAAMA,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAChC,IAAM,MAAA,MAAA,GAAS,MAAO,CAAA,SAAA,CAAU,cAAc,CAAA,CAAA;AAE9C,IAAA,MAAMC,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,IAAI,aAAc,CAAA,gBAAgB,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AAAA,KACnE,CAAA,CAAA;AAED,IAAM,MAAAC,cAAA,CAAU,MAAM,MAAM,CAAA,CAAA;AAE5B,IAAA,MAAMF,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,GAAI,CAAA,aAAA,CAAc,gBAAgB,CAAC,EAAE,iBAAkB,EAAA,CAAA;AAAA,KAC/D,CAAA,CAAA;AAED,IAAM,MAAAC,cAAA,CAAU,KAAM,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAGnC,IAAA,MAAMF,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,IAAI,aAAc,CAAA,gBAAgB,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AAAA,KACnE,CAAA,CAAA;AAGD,IAAM,MAAAC,cAAA,CAAU,MAAM,MAAM,CAAA,CAAA;AAE5B,IAAA,MAAMF,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,GAAI,CAAA,aAAA,CAAc,gBAAgB,CAAC,EAAE,iBAAkB,EAAA,CAAA;AAAA,KAC/D,CAAA,CAAA;AAED,IAAM,MAAAC,cAAA,CAAU,SAAS,UAAU,CAAA,CAAA;AAEnC,IAAA,MAAMF,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,IAAI,aAAc,CAAA,gBAAgB,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AAAA,KACnE,CAAA,CAAA;AAED,IAAAA,WAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,qBAAA,CAAsB,CAAC,CAAA,CAAA;AAAA,GACnD;AACF,EAAA;AAEO,MAAM,mBAA6B,GAAA;AAAA,EACxC,IAAM,EAAA;AAAA,IACJ,OAAA,kBAAUN,sBAAA,CAAA,aAAA,CAAAC,yBAAA,EAAA,IAAA,EAAW,cAAY,CAAA;AAAA,IACjC,MACE,kBAAAD,sBAAA,CAAA,aAAA,CAACQ,2BAAY,EAAA,EAAA,UAAA,EAAY,IAAM,EAAA,yBAAA,EAA2B,KACxD,EAAA,kBAAAR,sBAAA,CAAA,aAAA,CAACG,yBACC,EAAA,IAAA,kBAAAH,sBAAA,CAAA,aAAA,CAAC,cAAe,EAAA,IAAA,CAClB,CACF,CAAA;AAAA,GAEJ;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,aAAA,EAAe,MAAW,KAAA;AACvC,IAAM,MAAA,MAAA,GAASI,YAAO,aAAa,CAAA,CAAA;AACnC,IAAM,MAAA,GAAA,GAAMA,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAChC,IAAM,MAAA,MAAA,GAAS,MAAO,CAAA,SAAA,CAAU,cAAc,CAAA,CAAA;AAE9C,IAAA,MAAMC,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,IAAI,aAAc,CAAA,gBAAgB,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AAAA,KACnE,CAAA,CAAA;AAED,IAAM,MAAAC,cAAA,CAAU,MAAM,MAAM,CAAA,CAAA;AAE5B,IAAA,MAAMF,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,GAAI,CAAA,aAAA,CAAc,gBAAgB,CAAC,EAAE,iBAAkB,EAAA,CAAA;AAAA,KAC/D,CAAA,CAAA;AAED,IAAM,MAAAC,cAAA,CAAU,KAAM,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAGnC,IAAA,MAAMF,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,GAAI,CAAA,aAAA,CAAc,gBAAgB,CAAC,EAAE,iBAAkB,EAAA,CAAA;AAAA,KAC/D,CAAA,CAAA;AAED,IAAM,MAAAC,cAAA,CAAU,SAAS,UAAU,CAAA,CAAA;AAEnC,IAAA,MAAMF,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,IAAI,aAAc,CAAA,gBAAgB,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AAAA,KACnE,CAAA,CAAA;AAED,IAAAA,WAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,qBAAA,CAAsB,CAAC,CAAA,CAAA;AAAA,GACnD;AACF,EAAA;AAEO,MAAM,gBAA0B,GAAA;AAAA,EACrC,IAAM,EAAA;AAAA,IACJ,OAAA,kBAAUN,sBAAA,CAAA,aAAA,CAAAC,yBAAA,EAAA,IAAA,EAAW,cAAY,CAAA;AAAA,IACjC,MACE,kBAAAD,sBAAA,CAAA,aAAA,CAACQ,2BAAY,EAAA,EAAA,UAAA,EAAY,IAAM,EAAA,yBAAA,EAA2B,KACxD,EAAA,kBAAAR,sBAAA,CAAA,aAAA,CAACG,yBACC,EAAA,IAAA,kBAAAH,sBAAA,CAAA,aAAA,CAAC,cAAe,EAAA,IAAA,CAClB,CACF,CAAA;AAAA,GAEJ;AAAA,EACA,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,GAAIS,eAAS,KAAK,CAAA,CAAA;AAC9C,IAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,eAAS,EAAE,CAAA,CAAA;AAC3D,IAAAC,eAAA,CAAU,MAAM;AACd,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAChB,QAAA,UAAA,CAAW,MAAM;AAEf,UAAA,mBAAA,CAAoB,SAAS,CAAA,CAAA;AAAA,WAC5B,GAAI,CAAA,CAAA;AAAA,SACN,GAAI,CAAA,CAAA;AAAA,KACT,EAAG,EAAE,CAAA,CAAA;AAEL,IAAA;AAAA;AAAA,sBAEEV,sBAAA,CAAA,aAAA;AAAA,QAACW,yBAAqB,CAAA,QAAA;AAAA,QAArB;AAAA,UACC,KAAO,EAAA;AAAA,YACL,aAAe,EAAA,MAAA;AAAA,YACf,gBAAgB,EAAC;AAAA,WACnB;AAAA,SAAA;AAAA,wBAEAX,sBAAA,CAAA,aAAA;AAAA,UAACF,uCAAA;AAAA,UAAA,cAAA,CAAA;AAAA,YAEC,0BAA4B,EAAA;AAAA,cAC1B,UAAY,EAAA,QAAA;AAAA,cACZ,gBAAA;AAAA,aACF;AAAA,WACI,EAAA,IAAA,CAAA;AAAA,SACN;AAAA,OACF;AAAA,MAAA;AAAA,GAEJ;AAAA,EACA,MAAM,YAAY;AAEhB,IAAM,MAAA,GAAA,GAAMM,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAEhC,IAAA,MAAMC,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,IAAI,aAAc,CAAA,gBAAgB,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AAAA,KACnE,CAAA,CAAA;AAED,IAAM,MAAAD,YAAA;AAAA,MACJ,MAAM;AACJ,QAAAC,WAAA,CAAO,GAAI,CAAA,aAAA,CAAc,gBAAgB,CAAC,EAAE,iBAAkB,EAAA,CAAA;AAAA,OAChE;AAAA,MACA,EAAE,SAAS,IAAK,EAAA;AAAA,KAClB,CAAA;AAEA,IAAM,MAAAD,YAAA;AAAA,MACJ,MAAM;AACJ,QAAAC,WAAA,CAAO,IAAI,aAAc,CAAA,gBAAgB,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AAAA,OACpE;AAAA,MACA,EAAE,SAAS,IAAK,EAAA;AAAA,KAClB,CAAA;AAAA,GACF;AACF;;;;;;;;"}
1
+ {"version":3,"file":"registerDialogTrigger.stories.cjs.js","sources":["../src/registerDialogTrigger.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 { BaseDialog } from \"./registerDialog\";\nimport { BaseDialogTrigger } from \"./registerDialogTrigger\";\nimport { BaseModal, BaseModalProps } from \"./registerModal\";\nimport { BasePopover, BasePopoverProps } from \"./registerPopover\";\n\nconst meta: Meta<typeof BaseDialogTrigger> = {\n title: \"Components/BaseDialogTrigger\",\n component: BaseDialogTrigger,\n args: {\n defaultOpen: false,\n onOpenChange: fn(),\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof BaseDialogTrigger>;\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst DefaultContent = () => (\n <div data-testid=\"dialog-content\">\n <h2>Dialog Title</h2>\n <p>Dialog content goes here</p>\n </div>\n);\n\nconst DefaultPopoverContent = (props: BasePopoverProps) => (\n <BasePopover {...props}>\n <BaseDialog>\n <DefaultContent />\n </BaseDialog>\n </BasePopover>\n);\n\nconst DefaultModalContent = (props: BaseModalProps) => (\n <BaseModal {...props}>\n <BaseDialog>\n <DefaultContent />\n </BaseDialog>\n </BaseModal>\n);\n\nexport const WithModal: Story = {\n args: {\n trigger: <span tabIndex={0}>Open modal</span>, // anything can be used as a trigger\n dialog: (\n <DefaultModalContent\n isDismissable={true}\n isKeyboardDismissDisabled={false}\n />\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const trigger = canvas.getByText(\"Open modal\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(trigger);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // Modal should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n // With keyboard navigation\n await userEvent.tab();\n expect(trigger).toHaveFocus();\n\n // Still not open because a click/press is required\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.keyboard(\"[Space]\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n // press Escape to dismiss\n await userEvent.keyboard(\"{Escape}\");\n // dialog should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(4);\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 TriggerWithCustomEventHandler: Story = {\n args: {\n dialog: (\n <DefaultModalContent\n isDismissable={true}\n isKeyboardDismissDisabled={false}\n />\n ),\n },\n parameters: {\n customOnClick: fn(),\n },\n render: (args, { parameters }) => {\n return (\n <BaseDialogTrigger\n {...args}\n trigger={\n <span className=\"custom-class\" onClick={parameters.customOnClick}>\n Open modal\n </span>\n }\n />\n );\n },\n play: async ({ canvasElement, args, parameters }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const trigger = canvas.getByText(\"Open modal\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(trigger).toHaveClass(\"custom-class\");\n\n expect(parameters.customOnClick).toHaveBeenCalledTimes(0);\n await userEvent.click(trigger);\n expect(parameters.customOnClick).toHaveBeenCalledTimes(1);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // Modal should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n },\n};\n\n// tests that a trigger that's nested in a div (e.g. a <span>) can trigger open the dialog on click\n// Also tests that either of nested triggers can be made non-triggerable via e.stopPropagation\nexport const WithNestedTrigger: Story = {\n args: {\n dialog: (\n <DefaultModalContent\n isDismissable={true}\n isKeyboardDismissDisabled={false}\n />\n ),\n trigger: (\n <div>\n <span tabIndex={0}>Open modal</span>\n <span tabIndex={0} onClick={(e) => e.stopPropagation()}>\n Open modal\n </span>\n <span tabIndex={0}>Open modal</span>\n </div>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const triggers = canvas.getAllByText(\"Open modal\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(triggers[0]);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n // Click again to dismiss\n await userEvent.click(triggers[0]);\n\n // Modal should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n\n await userEvent.click(triggers[1]);\n\n // trigger # 2 stops propagation via e.stopPropagation. So, clicking on trigger # 2 should not open the dialog\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(2); // not changed\n\n await userEvent.click(triggers[2]);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n expect(args.onOpenChange).toHaveBeenCalledTimes(3);\n\n await userEvent.keyboard(\"{Escape}\");\n expect(args.onOpenChange).toHaveBeenCalledTimes(4);\n await userEvent.click(triggers[2]);\n expect(args.onOpenChange).toHaveBeenCalledTimes(5);\n },\n};\n\nexport const WithPopover: Story = {\n args: {\n trigger: <span tabIndex={0}>Open popover</span>, // anything can be used as a trigger\n dialog: <DefaultPopoverContent isKeyboardDismissDisabled={false} />,\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const trigger = canvas.getByText(\"Open popover\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(trigger);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // popover should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n // With keyboard navigation, press Space to open and Escape to dismiss\n await userEvent.tab();\n await expect(trigger).toHaveFocus();\n await userEvent.keyboard(\"[Space]\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.keyboard(\"{Escape}\");\n // dialog should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(4);\n },\n};\n\nexport const WithPopoverNonModal: Story = {\n args: {\n trigger: <span>Open popover</span>, // anything can be used as a trigger\n dialog: (\n <DefaultPopoverContent\n isNonModal={true}\n isKeyboardDismissDisabled={false}\n />\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const trigger = canvas.getByText(\"Open popover\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(trigger);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // popover should NOT close, because the outside can be interacted with without affecting the popover's open state\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.keyboard(\"{Escape}\");\n // dialog should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n },\n};\n\nexport const ControlledDialog: Story = {\n args: {\n trigger: undefined,\n dialog: <DefaultPopoverContent />,\n },\n render: ({ isOpen, dialog }) => {\n const [open, setOpen] = useState(isOpen);\n return (\n <>\n <span onClick={() => setOpen((prev) => !prev)}>Toggle</span>\n <BaseDialogTrigger\n isOpen={open}\n onOpenChange={setOpen}\n dialog={dialog}\n />\n </>\n );\n },\n play: async ({ canvasElement }) => {\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n const canvas = within(canvasElement);\n const trigger = canvas.getByText(\"Toggle\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await trigger.click();\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await trigger.click();\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n },\n};\n\nexport const AriaButtonTrigger: Story = {\n args: {\n dialog: <DefaultModalContent isDismissable={true} />,\n trigger: <BaseButton>Open modal</BaseButton>,\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const trigger = canvas.getByText(\"Open modal\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(trigger);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // Modal should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n },\n};\n\nexport const SelectedInCanvas: Story = {\n args: {\n trigger: undefined,\n dialog: <DefaultPopoverContent isKeyboardDismissDisabled={false} />,\n },\n render: ({ __plasmic_selection_prop__, ...args }) => {\n const [selected, setSelected] = useState(false);\n const [selectedSlotName, setSelectedSlotName] = useState(\"\");\n useEffect(() => {\n setTimeout(() => {\n setSelected(true);\n setTimeout(() => {\n // Simulate trigger slot selection in Plasmic canvas\n setSelectedSlotName(\"trigger\");\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 <BaseDialogTrigger\n // Simulate node selection in Plasmic canvas\n __plasmic_selection_prop__={{\n isSelected: selected,\n selectedSlotName,\n }}\n {...args}\n />\n </PlasmicCanvasContext.Provider>\n );\n },\n play: async () => {\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await waitFor(\n () => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n },\n { timeout: 1100 }\n );\n\n await waitFor(\n () => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n },\n { timeout: 1100 }\n ); // the slot selected is trigger, so the popover should close\n },\n};\n\nexport const PopoverPosition: Story = {\n args: {\n trigger: <span>Open popover</span>, // anything can be used as a trigger\n dialog: <DefaultPopoverContent />,\n },\n render: (args) => {\n const [className, setClassName] = useState<string | undefined>(\"popover\");\n useEffect(() => {\n setTimeout(() => {\n setClassName((prev) => `${prev} popover-right`);\n }, 1000);\n }, []);\n\n return (\n <>\n <style\n dangerouslySetInnerHTML={{\n __html: `\n .popover {\n display: inline-block;\n }\n .popover-right {\n position: absolute;\n right: 0;\n }\n `,\n }}\n />\n <BaseDialogTrigger {...args} className={className} />\n </>\n );\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const trigger = canvas.getByText(\"Open popover\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(trigger);\n\n let initialPopoverLeftPosition: number;\n\n // Check that tooltip appears\n await waitFor(() => {\n const popover = doc.getByTestId(\"dialog-content\");\n initialPopoverLeftPosition = popover.getBoundingClientRect().left;\n });\n\n await userEvent.click(trigger); // toggle close\n\n await sleep(500);\n await userEvent.click(trigger);\n\n await waitFor(async () => {\n const popover = doc.getByTestId(\"dialog-content\");\n expect(initialPopoverLeftPosition).toEqual(\n popover.getBoundingClientRect().left\n ); // opens again at exactly the same position\n });\n\n await userEvent.click(trigger); // toggle close\n\n await sleep(500);\n await userEvent.click(trigger);\n\n await waitFor(() => {\n const popover = doc.getByTestId(\"dialog-content\");\n expect(initialPopoverLeftPosition).not.toEqual(\n popover.getBoundingClientRect().left\n ); // opens at a different position because the position of the trigger changed\n });\n },\n};\n"],"names":["BaseDialogTrigger","fn","React","BasePopover","BaseDialog","BaseModal","within","waitFor","expect","userEvent","useState","BaseButton","useEffect","PlasmicCanvasContext"],"mappings":"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"}
@@ -16,6 +16,8 @@ import './contexts-5cb81c2f.esm.js';
16
16
  import '@react-aria/utils';
17
17
 
18
18
  var __defProp = Object.defineProperty;
19
+ var __defProps = Object.defineProperties;
20
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
19
21
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
20
22
  var __hasOwnProp = Object.prototype.hasOwnProperty;
21
23
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
@@ -31,6 +33,7 @@ var __spreadValues = (a, b) => {
31
33
  }
32
34
  return a;
33
35
  };
36
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
34
37
  var __objRest = (source, exclude) => {
35
38
  var target = {};
36
39
  for (var prop in source)
@@ -51,20 +54,30 @@ const meta = {
51
54
  onOpenChange: fn()
52
55
  }
53
56
  };
57
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
54
58
  const DefaultContent = () => /* @__PURE__ */ React.createElement("div", { "data-testid": "dialog-content" }, /* @__PURE__ */ React.createElement("h2", null, "Dialog Title"), /* @__PURE__ */ React.createElement("p", null, "Dialog content goes here"));
59
+ const DefaultPopoverContent = (props) => /* @__PURE__ */ React.createElement(BasePopover, __spreadValues({}, props), /* @__PURE__ */ React.createElement(BaseDialog, null, /* @__PURE__ */ React.createElement(DefaultContent, null)));
60
+ const DefaultModalContent = (props) => /* @__PURE__ */ React.createElement(BaseModal, __spreadValues({}, props), /* @__PURE__ */ React.createElement(BaseDialog, null, /* @__PURE__ */ React.createElement(DefaultContent, null)));
55
61
  const WithModal = {
56
62
  args: {
57
- trigger: /* @__PURE__ */ React.createElement(BaseButton, null, "Open modal"),
58
- dialog: /* @__PURE__ */ React.createElement(BaseModal, { isDismissable: true, isKeyboardDismissDisabled: false }, /* @__PURE__ */ React.createElement(BaseDialog, null, /* @__PURE__ */ React.createElement(DefaultContent, null)))
63
+ trigger: /* @__PURE__ */ React.createElement("span", { tabIndex: 0 }, "Open modal"),
64
+ // anything can be used as a trigger
65
+ dialog: /* @__PURE__ */ React.createElement(
66
+ DefaultModalContent,
67
+ {
68
+ isDismissable: true,
69
+ isKeyboardDismissDisabled: false
70
+ }
71
+ )
59
72
  },
60
73
  play: async ({ canvasElement, args }) => {
61
74
  const canvas = within(canvasElement);
62
75
  const doc = within(document.body);
63
- const button = canvas.getByText("Open modal");
76
+ const trigger = canvas.getByText("Open modal");
64
77
  await waitFor(() => {
65
78
  expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
66
79
  });
67
- await userEvent.click(button);
80
+ await userEvent.click(trigger);
68
81
  await waitFor(() => {
69
82
  expect(doc.queryByTestId("dialog-content")).toBeInTheDocument();
70
83
  });
@@ -72,7 +85,12 @@ const WithModal = {
72
85
  await waitFor(() => {
73
86
  expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
74
87
  });
75
- await userEvent.click(button);
88
+ await userEvent.tab();
89
+ expect(trigger).toHaveFocus();
90
+ await waitFor(() => {
91
+ expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
92
+ });
93
+ await userEvent.keyboard("[Space]");
76
94
  await waitFor(() => {
77
95
  expect(doc.queryByTestId("dialog-content")).toBeInTheDocument();
78
96
  });
@@ -83,19 +101,105 @@ const WithModal = {
83
101
  expect(args.onOpenChange).toHaveBeenCalledTimes(4);
84
102
  }
85
103
  };
104
+ const TriggerWithCustomEventHandler = {
105
+ args: {
106
+ dialog: /* @__PURE__ */ React.createElement(
107
+ DefaultModalContent,
108
+ {
109
+ isDismissable: true,
110
+ isKeyboardDismissDisabled: false
111
+ }
112
+ )
113
+ },
114
+ parameters: {
115
+ customOnClick: fn()
116
+ },
117
+ render: (args, { parameters }) => {
118
+ return /* @__PURE__ */ React.createElement(
119
+ BaseDialogTrigger,
120
+ __spreadProps(__spreadValues({}, args), {
121
+ trigger: /* @__PURE__ */ React.createElement("span", { className: "custom-class", onClick: parameters.customOnClick }, "Open modal")
122
+ })
123
+ );
124
+ },
125
+ play: async ({ canvasElement, args, parameters }) => {
126
+ const canvas = within(canvasElement);
127
+ const doc = within(document.body);
128
+ const trigger = canvas.getByText("Open modal");
129
+ await waitFor(() => {
130
+ expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
131
+ });
132
+ expect(trigger).toHaveClass("custom-class");
133
+ expect(parameters.customOnClick).toHaveBeenCalledTimes(0);
134
+ await userEvent.click(trigger);
135
+ expect(parameters.customOnClick).toHaveBeenCalledTimes(1);
136
+ await waitFor(() => {
137
+ expect(doc.queryByTestId("dialog-content")).toBeInTheDocument();
138
+ });
139
+ await userEvent.click(document.body);
140
+ await waitFor(() => {
141
+ expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
142
+ });
143
+ expect(args.onOpenChange).toHaveBeenCalledTimes(2);
144
+ }
145
+ };
146
+ const WithNestedTrigger = {
147
+ args: {
148
+ dialog: /* @__PURE__ */ React.createElement(
149
+ DefaultModalContent,
150
+ {
151
+ isDismissable: true,
152
+ isKeyboardDismissDisabled: false
153
+ }
154
+ ),
155
+ trigger: /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("span", { tabIndex: 0 }, "Open modal"), /* @__PURE__ */ React.createElement("span", { tabIndex: 0, onClick: (e) => e.stopPropagation() }, "Open modal"), /* @__PURE__ */ React.createElement("span", { tabIndex: 0 }, "Open modal"))
156
+ },
157
+ play: async ({ canvasElement, args }) => {
158
+ const canvas = within(canvasElement);
159
+ const doc = within(document.body);
160
+ const triggers = canvas.getAllByText("Open modal");
161
+ await waitFor(() => {
162
+ expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
163
+ });
164
+ await userEvent.click(triggers[0]);
165
+ await waitFor(() => {
166
+ expect(doc.queryByTestId("dialog-content")).toBeInTheDocument();
167
+ });
168
+ await userEvent.click(triggers[0]);
169
+ await waitFor(() => {
170
+ expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
171
+ });
172
+ expect(args.onOpenChange).toHaveBeenCalledTimes(2);
173
+ await userEvent.click(triggers[1]);
174
+ await waitFor(() => {
175
+ expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
176
+ });
177
+ expect(args.onOpenChange).toHaveBeenCalledTimes(2);
178
+ await userEvent.click(triggers[2]);
179
+ await waitFor(() => {
180
+ expect(doc.queryByTestId("dialog-content")).toBeInTheDocument();
181
+ });
182
+ expect(args.onOpenChange).toHaveBeenCalledTimes(3);
183
+ await userEvent.keyboard("{Escape}");
184
+ expect(args.onOpenChange).toHaveBeenCalledTimes(4);
185
+ await userEvent.click(triggers[2]);
186
+ expect(args.onOpenChange).toHaveBeenCalledTimes(5);
187
+ }
188
+ };
86
189
  const WithPopover = {
87
190
  args: {
88
- trigger: /* @__PURE__ */ React.createElement(BaseButton, null, "Open popover"),
89
- dialog: /* @__PURE__ */ React.createElement(BasePopover, { isKeyboardDismissDisabled: false }, /* @__PURE__ */ React.createElement(BaseDialog, null, /* @__PURE__ */ React.createElement(DefaultContent, null)))
191
+ trigger: /* @__PURE__ */ React.createElement("span", { tabIndex: 0 }, "Open popover"),
192
+ // anything can be used as a trigger
193
+ dialog: /* @__PURE__ */ React.createElement(DefaultPopoverContent, { isKeyboardDismissDisabled: false })
90
194
  },
91
195
  play: async ({ canvasElement, args }) => {
92
196
  const canvas = within(canvasElement);
93
197
  const doc = within(document.body);
94
- const button = canvas.getByText("Open popover");
198
+ const trigger = canvas.getByText("Open popover");
95
199
  await waitFor(() => {
96
200
  expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
97
201
  });
98
- await userEvent.click(button);
202
+ await userEvent.click(trigger);
99
203
  await waitFor(() => {
100
204
  expect(doc.queryByTestId("dialog-content")).toBeInTheDocument();
101
205
  });
@@ -103,7 +207,9 @@ const WithPopover = {
103
207
  await waitFor(() => {
104
208
  expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
105
209
  });
106
- await userEvent.click(button);
210
+ await userEvent.tab();
211
+ await expect(trigger).toHaveFocus();
212
+ await userEvent.keyboard("[Space]");
107
213
  await waitFor(() => {
108
214
  expect(doc.queryByTestId("dialog-content")).toBeInTheDocument();
109
215
  });
@@ -116,17 +222,24 @@ const WithPopover = {
116
222
  };
117
223
  const WithPopoverNonModal = {
118
224
  args: {
119
- trigger: /* @__PURE__ */ React.createElement(BaseButton, null, "Open popover"),
120
- dialog: /* @__PURE__ */ React.createElement(BasePopover, { isNonModal: true, isKeyboardDismissDisabled: false }, /* @__PURE__ */ React.createElement(BaseDialog, null, /* @__PURE__ */ React.createElement(DefaultContent, null)))
225
+ trigger: /* @__PURE__ */ React.createElement("span", null, "Open popover"),
226
+ // anything can be used as a trigger
227
+ dialog: /* @__PURE__ */ React.createElement(
228
+ DefaultPopoverContent,
229
+ {
230
+ isNonModal: true,
231
+ isKeyboardDismissDisabled: false
232
+ }
233
+ )
121
234
  },
122
235
  play: async ({ canvasElement, args }) => {
123
236
  const canvas = within(canvasElement);
124
237
  const doc = within(document.body);
125
- const button = canvas.getByText("Open popover");
238
+ const trigger = canvas.getByText("Open popover");
126
239
  await waitFor(() => {
127
240
  expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
128
241
  });
129
- await userEvent.click(button);
242
+ await userEvent.click(trigger);
130
243
  await waitFor(() => {
131
244
  expect(doc.queryByTestId("dialog-content")).toBeInTheDocument();
132
245
  });
@@ -141,10 +254,66 @@ const WithPopoverNonModal = {
141
254
  expect(args.onOpenChange).toHaveBeenCalledTimes(2);
142
255
  }
143
256
  };
257
+ const ControlledDialog = {
258
+ args: {
259
+ trigger: void 0,
260
+ dialog: /* @__PURE__ */ React.createElement(DefaultPopoverContent, null)
261
+ },
262
+ render: ({ isOpen, dialog }) => {
263
+ const [open, setOpen] = useState(isOpen);
264
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", { onClick: () => setOpen((prev) => !prev) }, "Toggle"), /* @__PURE__ */ React.createElement(
265
+ BaseDialogTrigger,
266
+ {
267
+ isOpen: open,
268
+ onOpenChange: setOpen,
269
+ dialog
270
+ }
271
+ ));
272
+ },
273
+ play: async ({ canvasElement }) => {
274
+ const doc = within(document.body);
275
+ const canvas = within(canvasElement);
276
+ const trigger = canvas.getByText("Toggle");
277
+ await waitFor(() => {
278
+ expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
279
+ });
280
+ await trigger.click();
281
+ await waitFor(() => {
282
+ expect(doc.queryByTestId("dialog-content")).toBeInTheDocument();
283
+ });
284
+ await trigger.click();
285
+ await waitFor(() => {
286
+ expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
287
+ });
288
+ }
289
+ };
290
+ const AriaButtonTrigger = {
291
+ args: {
292
+ dialog: /* @__PURE__ */ React.createElement(DefaultModalContent, { isDismissable: true }),
293
+ trigger: /* @__PURE__ */ React.createElement(BaseButton, null, "Open modal")
294
+ },
295
+ play: async ({ canvasElement, args }) => {
296
+ const canvas = within(canvasElement);
297
+ const doc = within(document.body);
298
+ const trigger = canvas.getByText("Open modal");
299
+ await waitFor(() => {
300
+ expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
301
+ });
302
+ await userEvent.click(trigger);
303
+ await waitFor(() => {
304
+ expect(doc.queryByTestId("dialog-content")).toBeInTheDocument();
305
+ });
306
+ await userEvent.click(document.body);
307
+ await waitFor(() => {
308
+ expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
309
+ });
310
+ expect(args.onOpenChange).toHaveBeenCalledTimes(2);
311
+ }
312
+ };
144
313
  const SelectedInCanvas = {
145
314
  args: {
146
- trigger: /* @__PURE__ */ React.createElement(BaseButton, null, "Open popover"),
147
- dialog: /* @__PURE__ */ React.createElement(BasePopover, { isNonModal: true, isKeyboardDismissDisabled: false }, /* @__PURE__ */ React.createElement(BaseDialog, null, /* @__PURE__ */ React.createElement(DefaultContent, null)))
315
+ trigger: void 0,
316
+ dialog: /* @__PURE__ */ React.createElement(DefaultPopoverContent, { isKeyboardDismissDisabled: false })
148
317
  },
149
318
  render: (_a) => {
150
319
  var _b = _a, args = __objRest(_b, ["__plasmic_selection_prop__"]);
@@ -199,6 +368,69 @@ const SelectedInCanvas = {
199
368
  );
200
369
  }
201
370
  };
371
+ const PopoverPosition = {
372
+ args: {
373
+ trigger: /* @__PURE__ */ React.createElement("span", null, "Open popover"),
374
+ // anything can be used as a trigger
375
+ dialog: /* @__PURE__ */ React.createElement(DefaultPopoverContent, null)
376
+ },
377
+ render: (args) => {
378
+ const [className, setClassName] = useState("popover");
379
+ useEffect(() => {
380
+ setTimeout(() => {
381
+ setClassName((prev) => `${prev} popover-right`);
382
+ }, 1e3);
383
+ }, []);
384
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
385
+ "style",
386
+ {
387
+ dangerouslySetInnerHTML: {
388
+ __html: `
389
+ .popover {
390
+ display: inline-block;
391
+ }
392
+ .popover-right {
393
+ position: absolute;
394
+ right: 0;
395
+ }
396
+ `
397
+ }
398
+ }
399
+ ), /* @__PURE__ */ React.createElement(BaseDialogTrigger, __spreadProps(__spreadValues({}, args), { className })));
400
+ },
401
+ play: async ({ canvasElement }) => {
402
+ const canvas = within(canvasElement);
403
+ const doc = within(document.body);
404
+ const trigger = canvas.getByText("Open popover");
405
+ await waitFor(() => {
406
+ expect(doc.queryByTestId("dialog-content")).not.toBeInTheDocument();
407
+ });
408
+ await userEvent.click(trigger);
409
+ let initialPopoverLeftPosition;
410
+ await waitFor(() => {
411
+ const popover = doc.getByTestId("dialog-content");
412
+ initialPopoverLeftPosition = popover.getBoundingClientRect().left;
413
+ });
414
+ await userEvent.click(trigger);
415
+ await sleep(500);
416
+ await userEvent.click(trigger);
417
+ await waitFor(async () => {
418
+ const popover = doc.getByTestId("dialog-content");
419
+ expect(initialPopoverLeftPosition).toEqual(
420
+ popover.getBoundingClientRect().left
421
+ );
422
+ });
423
+ await userEvent.click(trigger);
424
+ await sleep(500);
425
+ await userEvent.click(trigger);
426
+ await waitFor(() => {
427
+ const popover = doc.getByTestId("dialog-content");
428
+ expect(initialPopoverLeftPosition).not.toEqual(
429
+ popover.getBoundingClientRect().left
430
+ );
431
+ });
432
+ }
433
+ };
202
434
 
203
- export { SelectedInCanvas, WithModal, WithPopover, WithPopoverNonModal, meta as default };
435
+ export { AriaButtonTrigger, ControlledDialog, PopoverPosition, SelectedInCanvas, TriggerWithCustomEventHandler, WithModal, WithNestedTrigger, WithPopover, WithPopoverNonModal, meta as default };
204
436
  //# sourceMappingURL=registerDialogTrigger.stories.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registerDialogTrigger.stories.esm.js","sources":["../src/registerDialogTrigger.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 { BaseDialog } from \"./registerDialog\";\nimport { BaseDialogTrigger } from \"./registerDialogTrigger\";\nimport { BaseModal } from \"./registerModal\";\nimport { BasePopover } from \"./registerPopover\";\n\nconst meta: Meta<typeof BaseDialogTrigger> = {\n title: \"Components/BaseDialogTrigger\",\n component: BaseDialogTrigger,\n args: {\n defaultOpen: false,\n onOpenChange: fn(),\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof BaseDialogTrigger>;\n\nconst DefaultContent = () => (\n <div data-testid=\"dialog-content\">\n <h2>Dialog Title</h2>\n <p>Dialog content goes here</p>\n </div>\n);\n\nexport const WithModal: Story = {\n args: {\n trigger: <BaseButton>Open modal</BaseButton>,\n dialog: (\n <BaseModal isDismissable={true} isKeyboardDismissDisabled={false}>\n <BaseDialog>\n <DefaultContent />\n </BaseDialog>\n </BaseModal>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const button = canvas.getByText(\"Open modal\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(button);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // Modal should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n // With keyboard navigation, press Escape to dismiss\n await userEvent.click(button);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.keyboard(\"{Escape}\");\n // dialog should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(4);\n },\n};\n\nexport const WithPopover: Story = {\n args: {\n trigger: <BaseButton>Open popover</BaseButton>,\n dialog: (\n <BasePopover isKeyboardDismissDisabled={false}>\n <BaseDialog>\n <DefaultContent />\n </BaseDialog>\n </BasePopover>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const button = canvas.getByText(\"Open popover\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(button);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // popover should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n // With keyboard navigation, press Escape to dismiss\n await userEvent.click(button);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.keyboard(\"{Escape}\");\n // dialog should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(4);\n },\n};\n\nexport const WithPopoverNonModal: Story = {\n args: {\n trigger: <BaseButton>Open popover</BaseButton>,\n dialog: (\n <BasePopover isNonModal={true} isKeyboardDismissDisabled={false}>\n <BaseDialog>\n <DefaultContent />\n </BaseDialog>\n </BasePopover>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const button = canvas.getByText(\"Open popover\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(button);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // popover should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.keyboard(\"{Escape}\");\n // dialog should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n },\n};\n\nexport const SelectedInCanvas: Story = {\n args: {\n trigger: <BaseButton>Open popover</BaseButton>,\n dialog: (\n <BasePopover isNonModal={true} isKeyboardDismissDisabled={false}>\n <BaseDialog>\n <DefaultContent />\n </BaseDialog>\n </BasePopover>\n ),\n },\n render: ({ __plasmic_selection_prop__, ...args }) => {\n const [selected, setSelected] = useState(false);\n const [selectedSlotName, setSelectedSlotName] = useState(\"\");\n useEffect(() => {\n setTimeout(() => {\n setSelected(true);\n setTimeout(() => {\n // Simulate trigger slot selection in Plasmic canvas\n setSelectedSlotName(\"trigger\");\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 <BaseDialogTrigger\n // Simulate node selection in Plasmic canvas\n __plasmic_selection_prop__={{\n isSelected: selected,\n selectedSlotName,\n }}\n {...args}\n />\n </PlasmicCanvasContext.Provider>\n );\n },\n play: async () => {\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await waitFor(\n () => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n },\n { timeout: 1100 }\n );\n\n await waitFor(\n () => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n },\n { timeout: 1100 }\n ); // the slot selected is trigger, so the popover should close\n },\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registerDialogTrigger.stories.esm.js","sources":["../src/registerDialogTrigger.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 { BaseDialog } from \"./registerDialog\";\nimport { BaseDialogTrigger } from \"./registerDialogTrigger\";\nimport { BaseModal, BaseModalProps } from \"./registerModal\";\nimport { BasePopover, BasePopoverProps } from \"./registerPopover\";\n\nconst meta: Meta<typeof BaseDialogTrigger> = {\n title: \"Components/BaseDialogTrigger\",\n component: BaseDialogTrigger,\n args: {\n defaultOpen: false,\n onOpenChange: fn(),\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof BaseDialogTrigger>;\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst DefaultContent = () => (\n <div data-testid=\"dialog-content\">\n <h2>Dialog Title</h2>\n <p>Dialog content goes here</p>\n </div>\n);\n\nconst DefaultPopoverContent = (props: BasePopoverProps) => (\n <BasePopover {...props}>\n <BaseDialog>\n <DefaultContent />\n </BaseDialog>\n </BasePopover>\n);\n\nconst DefaultModalContent = (props: BaseModalProps) => (\n <BaseModal {...props}>\n <BaseDialog>\n <DefaultContent />\n </BaseDialog>\n </BaseModal>\n);\n\nexport const WithModal: Story = {\n args: {\n trigger: <span tabIndex={0}>Open modal</span>, // anything can be used as a trigger\n dialog: (\n <DefaultModalContent\n isDismissable={true}\n isKeyboardDismissDisabled={false}\n />\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const trigger = canvas.getByText(\"Open modal\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(trigger);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // Modal should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n // With keyboard navigation\n await userEvent.tab();\n expect(trigger).toHaveFocus();\n\n // Still not open because a click/press is required\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.keyboard(\"[Space]\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n // press Escape to dismiss\n await userEvent.keyboard(\"{Escape}\");\n // dialog should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(4);\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 TriggerWithCustomEventHandler: Story = {\n args: {\n dialog: (\n <DefaultModalContent\n isDismissable={true}\n isKeyboardDismissDisabled={false}\n />\n ),\n },\n parameters: {\n customOnClick: fn(),\n },\n render: (args, { parameters }) => {\n return (\n <BaseDialogTrigger\n {...args}\n trigger={\n <span className=\"custom-class\" onClick={parameters.customOnClick}>\n Open modal\n </span>\n }\n />\n );\n },\n play: async ({ canvasElement, args, parameters }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const trigger = canvas.getByText(\"Open modal\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(trigger).toHaveClass(\"custom-class\");\n\n expect(parameters.customOnClick).toHaveBeenCalledTimes(0);\n await userEvent.click(trigger);\n expect(parameters.customOnClick).toHaveBeenCalledTimes(1);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // Modal should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n },\n};\n\n// tests that a trigger that's nested in a div (e.g. a <span>) can trigger open the dialog on click\n// Also tests that either of nested triggers can be made non-triggerable via e.stopPropagation\nexport const WithNestedTrigger: Story = {\n args: {\n dialog: (\n <DefaultModalContent\n isDismissable={true}\n isKeyboardDismissDisabled={false}\n />\n ),\n trigger: (\n <div>\n <span tabIndex={0}>Open modal</span>\n <span tabIndex={0} onClick={(e) => e.stopPropagation()}>\n Open modal\n </span>\n <span tabIndex={0}>Open modal</span>\n </div>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const triggers = canvas.getAllByText(\"Open modal\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(triggers[0]);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n // Click again to dismiss\n await userEvent.click(triggers[0]);\n\n // Modal should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n\n await userEvent.click(triggers[1]);\n\n // trigger # 2 stops propagation via e.stopPropagation. So, clicking on trigger # 2 should not open the dialog\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(2); // not changed\n\n await userEvent.click(triggers[2]);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n expect(args.onOpenChange).toHaveBeenCalledTimes(3);\n\n await userEvent.keyboard(\"{Escape}\");\n expect(args.onOpenChange).toHaveBeenCalledTimes(4);\n await userEvent.click(triggers[2]);\n expect(args.onOpenChange).toHaveBeenCalledTimes(5);\n },\n};\n\nexport const WithPopover: Story = {\n args: {\n trigger: <span tabIndex={0}>Open popover</span>, // anything can be used as a trigger\n dialog: <DefaultPopoverContent isKeyboardDismissDisabled={false} />,\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const trigger = canvas.getByText(\"Open popover\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(trigger);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // popover should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n // With keyboard navigation, press Space to open and Escape to dismiss\n await userEvent.tab();\n await expect(trigger).toHaveFocus();\n await userEvent.keyboard(\"[Space]\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.keyboard(\"{Escape}\");\n // dialog should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(4);\n },\n};\n\nexport const WithPopoverNonModal: Story = {\n args: {\n trigger: <span>Open popover</span>, // anything can be used as a trigger\n dialog: (\n <DefaultPopoverContent\n isNonModal={true}\n isKeyboardDismissDisabled={false}\n />\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const trigger = canvas.getByText(\"Open popover\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(trigger);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // popover should NOT close, because the outside can be interacted with without affecting the popover's open state\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.keyboard(\"{Escape}\");\n // dialog should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n },\n};\n\nexport const ControlledDialog: Story = {\n args: {\n trigger: undefined,\n dialog: <DefaultPopoverContent />,\n },\n render: ({ isOpen, dialog }) => {\n const [open, setOpen] = useState(isOpen);\n return (\n <>\n <span onClick={() => setOpen((prev) => !prev)}>Toggle</span>\n <BaseDialogTrigger\n isOpen={open}\n onOpenChange={setOpen}\n dialog={dialog}\n />\n </>\n );\n },\n play: async ({ canvasElement }) => {\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n const canvas = within(canvasElement);\n const trigger = canvas.getByText(\"Toggle\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await trigger.click();\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await trigger.click();\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n },\n};\n\nexport const AriaButtonTrigger: Story = {\n args: {\n dialog: <DefaultModalContent isDismissable={true} />,\n trigger: <BaseButton>Open modal</BaseButton>,\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const trigger = canvas.getByText(\"Open modal\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(trigger);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n });\n\n await userEvent.click(document.body);\n\n // Modal should close\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n },\n};\n\nexport const SelectedInCanvas: Story = {\n args: {\n trigger: undefined,\n dialog: <DefaultPopoverContent isKeyboardDismissDisabled={false} />,\n },\n render: ({ __plasmic_selection_prop__, ...args }) => {\n const [selected, setSelected] = useState(false);\n const [selectedSlotName, setSelectedSlotName] = useState(\"\");\n useEffect(() => {\n setTimeout(() => {\n setSelected(true);\n setTimeout(() => {\n // Simulate trigger slot selection in Plasmic canvas\n setSelectedSlotName(\"trigger\");\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 <BaseDialogTrigger\n // Simulate node selection in Plasmic canvas\n __plasmic_selection_prop__={{\n isSelected: selected,\n selectedSlotName,\n }}\n {...args}\n />\n </PlasmicCanvasContext.Provider>\n );\n },\n play: async () => {\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await waitFor(\n () => {\n expect(doc.queryByTestId(\"dialog-content\")).toBeInTheDocument();\n },\n { timeout: 1100 }\n );\n\n await waitFor(\n () => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n },\n { timeout: 1100 }\n ); // the slot selected is trigger, so the popover should close\n },\n};\n\nexport const PopoverPosition: Story = {\n args: {\n trigger: <span>Open popover</span>, // anything can be used as a trigger\n dialog: <DefaultPopoverContent />,\n },\n render: (args) => {\n const [className, setClassName] = useState<string | undefined>(\"popover\");\n useEffect(() => {\n setTimeout(() => {\n setClassName((prev) => `${prev} popover-right`);\n }, 1000);\n }, []);\n\n return (\n <>\n <style\n dangerouslySetInnerHTML={{\n __html: `\n .popover {\n display: inline-block;\n }\n .popover-right {\n position: absolute;\n right: 0;\n }\n `,\n }}\n />\n <BaseDialogTrigger {...args} className={className} />\n </>\n );\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const doc = within(document.body);\n const trigger = canvas.getByText(\"Open popover\");\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"dialog-content\")).not.toBeInTheDocument();\n });\n\n await userEvent.click(trigger);\n\n let initialPopoverLeftPosition: number;\n\n // Check that tooltip appears\n await waitFor(() => {\n const popover = doc.getByTestId(\"dialog-content\");\n initialPopoverLeftPosition = popover.getBoundingClientRect().left;\n });\n\n await userEvent.click(trigger); // toggle close\n\n await sleep(500);\n await userEvent.click(trigger);\n\n await waitFor(async () => {\n const popover = doc.getByTestId(\"dialog-content\");\n expect(initialPopoverLeftPosition).toEqual(\n popover.getBoundingClientRect().left\n ); // opens again at exactly the same position\n });\n\n await userEvent.click(trigger); // toggle close\n\n await sleep(500);\n await userEvent.click(trigger);\n\n await waitFor(() => {\n const popover = doc.getByTestId(\"dialog-content\");\n expect(initialPopoverLeftPosition).not.toEqual(\n popover.getBoundingClientRect().left\n ); // opens at a different position because the position of the trigger changed\n });\n },\n};\n"],"names":[],"mappings":"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"}