11<template >
2- <s-page :theme =" theme.initialValue" id =" soberpage" ref =" soberPage" :class =" theme.value" >
2+ <s-page
3+ :theme =" theme.initialValue"
4+ id =" soberpage"
5+ ref =" soberPage"
6+ :class =" theme.value"
7+ >
38 <s-drawer >
49 <Navbar @toggle-drawer =" toogleDrawer" />
5- <s-drawer
6- id =" content"
7- :class =" { onDrawerResize }"
8- ref =" innerDrawer"
9- >
10- <div
11- slot =" start"
12- id =" editor"
13- :style =" { width: drawerSizeRatio + 'vw' }"
14- >
10+ <s-drawer id =" content" :class =" { onDrawerResize }" ref =" innerDrawer" >
11+ <div slot =" start" id =" editor" :style =" { width: drawerSize + 'px' }" >
1512 <Editor />
16- <div id =" divider" @mousedown =" handleDrawerResize" ></div >
13+ <div id =" divider" @pointerdown =" handleDrawerResize" ></div >
1714 </div >
1815 <Graph />
1916 </s-drawer >
@@ -26,7 +23,7 @@ import Navbar from "./ui/navbar.vue";
2623import Graph from " ./graph/index.vue" ;
2724import Editor from " ./editor/index.vue" ;
2825
29- import { ref , watchEffect } from " vue" ;
26+ import { computed , ref , watch , watchEffect } from " vue" ;
3027import { useTheme } from " @/consts" ;
3128const theme = useTheme ();
3229const soberPage = ref <HTMLElementTagNameMap [" s-page" ]>();
@@ -42,30 +39,43 @@ const innerDrawer = ref<HTMLElementTagNameMap["s-drawer"]>();
4239const toogleDrawer = () => innerDrawer .value ?.toggle ();
4340
4441// Drawer resize
45- const drawerSizeRatio = ref (33 );
42+ import { useWindowSize } from " @vueuse/core" ;
43+ const { width : windowWidth } = useWindowSize ();
44+ const toSize = (percent : number ) => (percent / 100 ) * windowWidth .value ;
45+
46+ const drawerMinSize = computed (() => 450 );
47+ const drawerMaxSize = computed (() => toSize (75 ));
48+
49+ const restrictRange = (x : number ) =>
50+ Math .min (Math .max (drawerMinSize .value , x ), drawerMaxSize .value );
51+
52+ const drawerSize = ref (restrictRange (toSize (33 )));
4653const onDrawerResize = ref (false );
54+
55+ watch (windowWidth , () => (drawerSize .value = restrictRange (drawerSize .value )));
56+
4757function handleDrawerResize() {
4858 onDrawerResize .value = true ;
49- const xfull = window .innerWidth ;
50- const restrictRange = (x : number , min : number , max : number ) =>
51- Math .max (min , Math .min (x , max ));
52- const toRatio = (x : number ) => (x / xfull ) * 100 ;
59+
5360 const mousemove = (event : MouseEvent ) =>
54- (drawerSizeRatio .value = restrictRange (toRatio ( event .clientX ), 25 , 75 ));
55- document . addEventListener ( " mousemove " , mousemove );
56- document .addEventListener ( " mouseup " , () => {
57- document .removeEventListener (" mousemove " , mousemove );
61+ (drawerSize .value = restrictRange (event .clientX ));
62+ const mouseup = () => {
63+ document .body . removeEventListener ( " pointermove " , mousemove );
64+ document .body . removeEventListener (" pointerup " , mouseup );
5865 onDrawerResize .value = false ;
59- });
66+ };
67+ document .body .addEventListener (" pointermove" , mousemove );
68+ document .body .addEventListener (" pointerup" , mouseup );
6069}
6170 </script >
6271
6372<style >
6473html ,
65- body {
74+ body , :root {
6675 margin : 0 ;
6776 padding : 0 ;
6877 overflow : hidden ;
78+ user-select : none ;
6979}
7080s-page {
7181 position : absolute ;
0 commit comments