2025-07-07 14:26:52 +00:00
|
|
|
<script lang="ts">
|
|
|
|
|
import { onDestroy, onMount } from 'svelte';
|
|
|
|
|
import { Pane, PaneResizer } from 'paneforge';
|
|
|
|
|
|
|
|
|
|
import Drawer from '../common/Drawer.svelte';
|
|
|
|
|
import EllipsisVertical from '../icons/EllipsisVertical.svelte';
|
|
|
|
|
|
|
|
|
|
export let show = false;
|
|
|
|
|
export let pane = null;
|
|
|
|
|
|
|
|
|
|
export let containerId = 'note-editor';
|
|
|
|
|
|
|
|
|
|
let mediaQuery;
|
|
|
|
|
let largeScreen = false;
|
|
|
|
|
|
|
|
|
|
let minSize = 0;
|
|
|
|
|
|
|
|
|
|
const handleMediaQuery = async (e) => {
|
|
|
|
|
if (e.matches) {
|
|
|
|
|
largeScreen = true;
|
|
|
|
|
} else {
|
|
|
|
|
largeScreen = false;
|
|
|
|
|
pane = null;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
onMount(() => {
|
|
|
|
|
// listen to resize 1024px
|
|
|
|
|
mediaQuery = window.matchMedia('(min-width: 1024px)');
|
|
|
|
|
|
|
|
|
|
mediaQuery.addEventListener('change', handleMediaQuery);
|
|
|
|
|
handleMediaQuery(mediaQuery);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
onDestroy(() => {
|
|
|
|
|
mediaQuery.removeEventListener('change', handleMediaQuery);
|
|
|
|
|
});
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
{#if !largeScreen}
|
|
|
|
|
{#if show}
|
|
|
|
|
<Drawer
|
|
|
|
|
{show}
|
|
|
|
|
onClose={() => {
|
|
|
|
|
show = false;
|
|
|
|
|
}}
|
|
|
|
|
>
|
2025-07-07 15:32:41 +00:00
|
|
|
<div class=" px-3.5 py-2.5 h-screen flex flex-col">
|
2025-07-07 14:26:52 +00:00
|
|
|
<slot />
|
|
|
|
|
</div>
|
|
|
|
|
</Drawer>
|
|
|
|
|
{/if}
|
|
|
|
|
{:else if show}
|
|
|
|
|
<PaneResizer
|
|
|
|
|
class="relative flex w-2 items-center justify-center bg-background group bg-white dark:shadow-lg dark:bg-gray-850 border border-gray-100 dark:border-gray-850"
|
|
|
|
|
>
|
|
|
|
|
<div class="z-10 flex h-7 w-5 items-center justify-center rounded-xs">
|
|
|
|
|
<EllipsisVertical className="size-4 invisible group-hover:visible" />
|
|
|
|
|
</div>
|
|
|
|
|
</PaneResizer>
|
|
|
|
|
|
|
|
|
|
<Pane
|
|
|
|
|
bind:pane
|
2025-07-07 15:26:12 +00:00
|
|
|
defaultSize={35}
|
|
|
|
|
minSize={35}
|
2025-07-07 14:26:52 +00:00
|
|
|
onCollapse={() => {
|
|
|
|
|
show = false;
|
|
|
|
|
}}
|
|
|
|
|
collapsible={true}
|
|
|
|
|
class=" z-10 "
|
|
|
|
|
>
|
|
|
|
|
{#if show}
|
|
|
|
|
<div class="flex max-h-full min-h-full">
|
|
|
|
|
<div
|
2025-07-07 15:26:12 +00:00
|
|
|
class="w-full pl-1.5 pr-2.5 pt-2 bg-white dark:shadow-lg dark:bg-gray-850 border border-gray-100 dark:border-gray-850 z-40 pointer-events-auto overflow-y-auto scrollbar-hidden flex flex-col"
|
2025-07-07 14:26:52 +00:00
|
|
|
>
|
|
|
|
|
<slot />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
{/if}
|
|
|
|
|
</Pane>
|
|
|
|
|
{/if}
|