svelte-headlessui icon indicating copy to clipboard operation
svelte-headlessui copied to clipboard

Implement DialogPanel?

Open ivarlovlie opened this issue 2 years ago • 18 comments

Headless ui has Dialog.Panel, I am unable to find it in svelte-headlessui. Is this because it is not implemented here, or am i missing something about the need for Dialog.Panel in this port?

Thanks!

ivarlovlie avatar Aug 22 '22 08:08 ivarlovlie

+1 for this

karmaral avatar Sep 09 '22 00:09 karmaral

I would be willing to invest time in a PR if there was documentation with pointers on how to port components. I haven't found it.

ivarlovlie avatar Sep 15 '22 02:09 ivarlovlie

My first pass on this seems to do the job, probably not production ready, but would love to make it so in a pr.

ivarlovlie avatar Oct 02 '22 07:10 ivarlovlie

@extremelygooddeveloper Unless there is a misunderstanding but the dialog panel is on the example page here https://svelte-headlessui.goss.io/docs/dialog

petr24 avatar Oct 14 '22 16:10 petr24

@petr24 Hmm, i only see these image

ivarlovlie avatar Oct 15 '22 06:10 ivarlovlie

Have no idea what page you're visiting, I go to the link on chrome and this is what you should see...

Screen Shot 2022-10-18 at 10 59 02 AM

petr24 avatar Oct 18 '22 17:10 petr24

Yes, there is no DialogPanel on that page.

ivarlovlie avatar Oct 20 '22 07:10 ivarlovlie

Well there is no "DialogPanel" in tailwind css or headless UI, it's called just "Dialog". I think this can be closed out.

petr24 avatar Oct 20 '22 15:10 petr24

Well there is no "DialogPanel" in tailwind css or headless UI, it's called just "Dialog". I think this can be closed out.

I mis-understood your question, and my answers were wrong. I see you were asking about "Dialog.Panel" with svelte variant being "DialogPanel", however I'm not sure it's necessary. I looked at the DOM for both headless UI example, and svelte headless UI, and it's the same. Parent Div with three children, h3, two divs. So it seems like this package has the function of Dialog.Panel without explicitly copying the headless UI api.

Svelte Headless UI Screen Shot 2022-10-20 at 8 08 55 AM

Headless UI Screen Shot 2022-10-20 at 8 14 59 AM

petr24 avatar Oct 20 '22 15:10 petr24

For reference, if it can be useful these layouts use DialogPanel: https://tailwindui.com/components/application-ui/application-shells/sidebar see Vue Code.

I have tried to replace in my code DialogPanel with Dialog. However the visual is not good for the moment.

coin-au-carre avatar Nov 14 '22 18:11 coin-au-carre

@coin-au-carre Yes, that was my experience as well, iirc my first pass on implementing DialogPanel worked for me. Feel free to try it out: Repo: https://github.com/extremelygooddeveloper/svelte-headlessui npm: https://www.npmjs.com/package/@developermuch/dev-svelte-headlessui

ivarlovlie avatar Nov 15 '22 06:11 ivarlovlie

Thanks @extremelygooddeveloper I will try it :). Maybe you should propose a PR ?

coin-au-carre avatar Nov 15 '22 07:11 coin-au-carre

Bumping that @iv-ar should turn this into a PR!

AutomateAaron avatar Mar 07 '23 21:03 AutomateAaron

I mis-understood your question, and my answers were wrong. I see you were asking about "Dialog.Panel" with svelte variant being "DialogPanel", however I'm not sure it's necessary. I looked at the DOM for both headless UI example, and svelte headless UI, and it's the same. Parent Div with three children, h3, two divs. So it seems like this package has the function of Dialog.Panel without explicitly copying the headless UI api.

I think the main functionality is to trigger a close of the dialog when a click-event is made outside of it. I would echo the requests for @iv-ar to turn this into a PR. Thank you all in advance!

HemalR avatar Jul 01 '23 02:07 HemalR

I'm not really sure what DialogPanel does. I've just replaced them with divs and never noticed anything wrong.

zach-hopkins avatar Jul 04 '23 02:07 zach-hopkins

I'm not really sure what DialogPanel does. I've just replaced them with divs and never noticed anything wrong.

Are you able to close the dialog by clicking outside of it?

HemalR avatar Jul 04 '23 02:07 HemalR

I'm not really sure what DialogPanel does. I've just replaced them with divs and never noticed anything wrong.

Are you able to close the dialog by clicking outside of it?

Ah yes I believe that may be it. I cannot do that by default, however I do not mind creating that functionality manually.

zach-hopkins avatar Jul 04 '23 03:07 zach-hopkins

From the documentation, clicking outside modal/dialog works as expected. Is this not working for everyone?

The close event is fired when an open dialog is dismissed, 
which happens when the user clicks outside of the contents of your dialog or presses the Escape key. 
You can use this callback to set open back to false and close your dialog.

<script>
  import {
    Dialog,
    DialogOverlay,
    DialogTitle,
    DialogDescription,
  } from "@rgossiaux/svelte-headlessui";
  let isOpen = true;
</script>

<!-- Pass `isOpen` to the `open` prop and use the `on:close` handler to set it back to false when the user clicks outside of the dialog or presses the escape key. -->
<Dialog open={isOpen} on:close={() => (isOpen = false)}>
  <DialogOverlay />

  <DialogTitle>Deactivate account</DialogTitle>
  <DialogDescription>
    This will permanently deactivate your account
  </DialogDescription>

  <p>
    Are you sure you want to deactivate your account? All of your data will be
    permanently removed. This action cannot be undone.
  </p>

  <!-- You can render additional buttons to dismiss your dialog by setting `isOpen` to `false`. -->
  <button on:click={() => (isOpen = false)}>Deactivate</button>
  <button on:click={() => (isOpen = false)}>Cancel</button>
</Dialog>

petr24 avatar Jul 17 '23 19:07 petr24