Drawer.svelte 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. Drawer,
  9. DrawerContent,
  10. DrawerDescription,
  11. DrawerHeader,
  12. DrawerTitle,
  13. } from "./ui/drawer/index.js";
  14. interface Props extends BaseComponentProps<ShadcnProps<"Drawer">> {
  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. <Drawer {open} onOpenChange={handleOpenChange}>
  25. <DrawerContent>
  26. <DrawerHeader>
  27. <DrawerTitle>{props.title}</DrawerTitle>
  28. {#if props.description}
  29. <DrawerDescription>{props.description}</DrawerDescription>
  30. {/if}
  31. </DrawerHeader>
  32. <div class="px-4 pb-4">
  33. {@render children?.()}
  34. </div>
  35. </DrawerContent>
  36. </Drawer>