<script lang="ts"> | |
import { slide } from 'svelte/transition'; | |
import Modal from '../common/Modal.svelte'; | |
import Controls from './Controls/Controls.svelte'; | |
import { onMount } from 'svelte'; | |
export let show = false; | |
export let models = []; | |
export let chatId = null; | |
export let chatFiles = []; | |
export let valves = {}; | |
export let params = {}; | |
let largeScreen = false; | |
onMount(() => { | |
// listen to resize 1024px | |
const mediaQuery = window.matchMedia('(min-width: 1024px)'); | |
const handleMediaQuery = (e) => { | |
if (e.matches) { | |
largeScreen = true; | |
} else { | |
largeScreen = false; | |
} | |
}; | |
mediaQuery.addEventListener('change', handleMediaQuery); | |
handleMediaQuery(mediaQuery); | |
return () => { | |
mediaQuery.removeEventListener('change', handleMediaQuery); | |
}; | |
}); | |
</script> | |
{#if largeScreen} | |
{#if show} | |
<div class=" absolute bottom-0 right-0 z-20 h-full pointer-events-none"> | |
<div class="pr-4 pt-14 pb-8 w-[24rem] h-full" in:slide={{ duration: 200, axis: 'x' }}> | |
<div | |
class="w-full h-full px-5 py-4 bg-white dark:shadow-lg dark:bg-gray-850 border border-gray-50 dark:border-gray-800 rounded-xl z-50 pointer-events-auto overflow-y-auto scrollbar-hidden" | |
> | |
<Controls | |
on:close={() => { | |
show = false; | |
}} | |
{models} | |
bind:chatFiles | |
bind:valves | |
bind:params | |
/> | |
</div> | |
</div> | |
</div> | |
{/if} | |
{:else} | |
<Modal bind:show> | |
<div class=" px-6 py-4 h-full"> | |
<Controls | |
on:close={() => { | |
show = false; | |
}} | |
{models} | |
bind:chatFiles | |
bind:valves | |
bind:params | |
/> | |
</div> | |
</Modal> | |
{/if} | |