Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 53 additions & 53 deletions infrastructure/eid-wallet/src/lib/ui/Drawer/Drawer.svelte
Original file line number Diff line number Diff line change
@@ -1,65 +1,65 @@
<script lang="ts">
import { cn } from "$lib/utils";
import { CupertinoPane } from "cupertino-pane";
import type { Snippet } from "svelte";
import { swipe } from "svelte-gestures";
import type { HTMLAttributes } from "svelte/elements";
import { cn } from "$lib/utils";
import { CupertinoPane } from "cupertino-pane";
import type { Snippet } from "svelte";
import { swipe } from "svelte-gestures";
import type { HTMLAttributes } from "svelte/elements";

interface IDrawerProps extends HTMLAttributes<HTMLDivElement> {
isPaneOpen?: boolean;
children?: Snippet;
handleSwipe?: (isOpen: boolean | undefined) => void;
dismissible?: boolean;
}
interface IDrawerProps extends HTMLAttributes<HTMLDivElement> {
isPaneOpen?: boolean;
children?: Snippet;
handleSwipe?: (isOpen: boolean | undefined) => void;
dismissible?: boolean;
}

let drawerElem: HTMLDivElement;
let pane: CupertinoPane;
let drawerElem: HTMLDivElement;
let pane: CupertinoPane;

let {
isPaneOpen = $bindable(),
children = undefined,
handleSwipe,
dismissible = true,
...restProps
}: IDrawerProps = $props();
let {
isPaneOpen = $bindable(),
children = undefined,
handleSwipe,
dismissible = true,
...restProps
}: IDrawerProps = $props();

// Disabled click outside behavior to prevent white screen issues
// const handleClickOutside = () => {
// pane?.destroy({ animate: true });
// isPaneOpen = false;
// };
// Disabled click outside behavior to prevent white screen issues
// const handleClickOutside = () => {
// pane?.destroy({ animate: true });
// isPaneOpen = false;
// };

// Initialize pane only once when element is available
$effect(() => {
if (!drawerElem) return;
pane = new CupertinoPane(drawerElem, {
fitHeight: true,
backdrop: true,
backdropOpacity: dismissible ? 0.5 : 0.8,
backdropBlur: true,
bottomClose: dismissible,
buttonDestroy: false,
showDraggable: dismissible,
upperThanTop: true,
breaks: {
bottom: { enabled: true, height: 250 },
},
initialBreak: "bottom",
});
// Initialize pane only once when element is available
$effect(() => {
if (!drawerElem) return;
pane = new CupertinoPane(drawerElem, {
fitHeight: true,
backdrop: true,
backdropOpacity: dismissible ? 0.5 : 0.8,
backdropBlur: true,
bottomClose: dismissible,
buttonDestroy: false,
showDraggable: dismissible,
upperThanTop: true,
breaks: {
bottom: { enabled: true, height: 250 },
},
initialBreak: "bottom",
});

return () => pane?.destroy();
});
return () => pane?.destroy();
});

// Handle open/close state separately
$effect(() => {
if (!pane) return;
// Handle open/close state separately
$effect(() => {
if (!pane) return;

if (isPaneOpen) {
pane.present({ animate: true });
} else {
pane.destroy({ animate: true });
}
});
if (isPaneOpen) {
pane.present({ animate: true });
} else {
pane.destroy({ animate: true });
}
});
</script>

<div
Expand Down
Loading
Loading