Dialog.svelte 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. <script lang="ts">
  2. import { untrack } from "svelte";
  3. import type { Snippet } from "svelte";
  4. import { getStateValue } from "@json-render/svelte";
  5. import type { BaseComponentProps } from "@json-render/svelte";
  6. import type { ShadcnProps } from "./catalog.js";
  7. import {
  8. Dialog,
  9. DialogContent,
  10. DialogDescription,
  11. DialogHeader,
  12. DialogTitle,
  13. } from "./ui/dialog/index.js";
  14. interface Props extends BaseComponentProps<ShadcnProps<"Dialog">> {
  15. children?: Snippet;
  16. }
  17. let { props, children }: Props = $props();
  18. const openState = getStateValue(untrack(() => props.openPath));
  19. const open = $derived(Boolean(openState.current));
  20. function handleOpenChange(next: boolean) {
  21. openState.current = next;
  22. }
  23. </script>
  24. <Dialog {open} onOpenChange={handleOpenChange}>
  25. <DialogContent>
  26. <DialogHeader>
  27. <DialogTitle>{props.title}</DialogTitle>
  28. {#if props.description}
  29. <DialogDescription>{props.description}</DialogDescription>
  30. {/if}
  31. </DialogHeader>
  32. {@render children?.()}
  33. </DialogContent>
  34. </Dialog>