dialogs are really awkward to represent in Vue/Svelte, the ideal way to represent them would be like this
<logindialog>
</logindialog>
where the actual dialog component that handles templating and w/n is moved outside, this is so that LoginDialog here only retains state while it's open