From 035d805c5a4b54b84bed4ae78d30e24ba511ef86 Mon Sep 17 00:00:00 2001 From: alexzhang1030 <1642114555@qq.com> Date: Mon, 11 Dec 2023 13:51:43 +0800 Subject: [PATCH 1/2] feat: add states of split screen --- packages/client/src/App.vue | 19 ++++++++++++++++++- packages/client/src/assets/styles/main.css | 18 +++++++----------- .../src/components/common/DockingPanel.vue | 12 ++++++++++++ packages/client/src/composables/state.ts | 14 ++++++++++++++ 4 files changed, 51 insertions(+), 12 deletions(-) diff --git a/packages/client/src/App.vue b/packages/client/src/App.vue index 1305a549..a0153f53 100644 --- a/packages/client/src/App.vue +++ b/packages/client/src/App.vue @@ -2,6 +2,7 @@ import type { Ref } from 'vue' import { useDevToolsBridge, useDevToolsState } from '@vue-devtools-next/core' import { isInChromePanel } from '@vue-devtools-next/shared' +import { Pane, Splitpanes } from 'splitpanes' // @TODO: fix browser extension cross-origin localStorage issue useColorMode() @@ -36,6 +37,13 @@ useEventListener('keydown', (e) => { if (e.code === 'KeyD' && e.altKey && e.shiftKey) bridge.value.emit('toggle-panel') }) + +const splitScreenEnabled = computed(() => clientState.value.splitScreen.enabled) +const isSplitScreenAvailable = splitScreenAvailable +const splitScreenSize = computed({ + get: () => clientState.value.splitScreen.size, + set: v => clientState.value.splitScreen.size = v, +}) diff --git a/packages/client/src/assets/styles/main.css b/packages/client/src/assets/styles/main.css index a22c0c05..427bc954 100644 --- a/packages/client/src/assets/styles/main.css +++ b/packages/client/src/assets/styles/main.css @@ -25,39 +25,35 @@ body::-webkit-scrollbar { .splitpanes__splitter { position: relative; } - .splitpanes__splitter:before { position: absolute; left: 0; top: 0; - transition: .2s ease; + transition: 0.2s ease; content: ''; transition: opacity 0.4s; z-index: 1; } - .splitpanes__splitter:hover:before { background: #8881; opacity: 1; } - -.splitpanes--vertical>.splitpanes__splitter { +.splitpanes--vertical > .splitpanes__splitter { min-width: 0 !important; width: 0 !important; + @apply border-r border-base; } - -.splitpanes--horizontal>.splitpanes__splitter { +.splitpanes--horizontal > .splitpanes__splitter { min-height: 0 !important; height: 0 !important; + --uno: border-t border-base; } - -.splitpanes--vertical>.splitpanes__splitter:before { +.splitpanes--vertical > .splitpanes__splitter:before { left: -5px; right: -4px; height: 100%; } - -.splitpanes--horizontal>.splitpanes__splitter:before { +.splitpanes--horizontal > .splitpanes__splitter:before { top: -5px; bottom: -4px; width: 100%; diff --git a/packages/client/src/components/common/DockingPanel.vue b/packages/client/src/components/common/DockingPanel.vue index 3e140bcc..e7c44493 100644 --- a/packages/client/src/components/common/DockingPanel.vue +++ b/packages/client/src/components/common/DockingPanel.vue @@ -13,6 +13,12 @@ const expandSidebar = computed({ set: v => (devtoolsClientState.value.expandSidebar = v), }) +const splitScreenEnabled = computed({ + get: () => devtoolsClientState.value.splitScreen.enabled, + set: v => (devtoolsClientState.value.splitScreen.enabled = v), +}) +const isSplitScreenAvailable = splitScreenAvailable + function refreshPage() { location.reload() } @@ -36,6 +42,12 @@ function refreshPage() {
Settings
+
+ +
+ {{ splitScreenEnabled ? 'Close Split Screen' : 'Split Screen' }} + +
Refresh Page diff --git a/packages/client/src/composables/state.ts b/packages/client/src/composables/state.ts index 2bea1121..2fb05994 100644 --- a/packages/client/src/composables/state.ts +++ b/packages/client/src/composables/state.ts @@ -8,6 +8,11 @@ export const devtoolsClientState: RemovableRef<{ graphSettings: GraphSettings tabSettings: TabSettings expandSidebar: boolean + splitScreen: { + enabled: boolean + view: string + size: [number, number] + } }> = useLocalStorage('__VUE_DEVTOOLS_CLIENT_STATE__', { isFirstVisit: true, route: '/', @@ -21,9 +26,18 @@ export const devtoolsClientState: RemovableRef<{ hiddenTabs: [], pinnedTabs: [], }, + splitScreen: { + enabled: false, + view: 'overview', + size: [50, 50], + }, expandSidebar: false, }, { mergeDefaults: true }) export function clearDevtoolsClientState() { devtoolsClientState.value = undefined } + +const windowSize = useWindowSize() + +export const splitScreenAvailable = computed(() => windowSize.width.value > 1080) From 73e85a6153a74046fed01ab24760e2e2561f6f4f Mon Sep 17 00:00:00 2001 From: alexzhang1030 <1642114555@qq.com> Date: Mon, 11 Dec 2023 15:22:10 +0800 Subject: [PATCH 2/2] feat: implement split screen --- packages/client/src/App.vue | 2 +- .../client/src/components/common/SideNav.vue | 4 +- .../src/components/common/SideNavItem.vue | 2 + .../src/components/common/SplitScreen.vue | 98 +++++++++++++++++++ .../client/src/components/common/TabsGrid.vue | 26 +++++ .../src/components/graph/GraphDrawer.vue | 2 +- packages/client/src/composables/state-tab.ts | 17 +++- packages/client/src/composables/state.ts | 9 ++ packages/client/src/constants/tab.ts | 6 +- packages/client/src/pages/assets.vue | 4 +- 10 files changed, 160 insertions(+), 10 deletions(-) create mode 100644 packages/client/src/components/common/SplitScreen.vue create mode 100644 packages/client/src/components/common/TabsGrid.vue diff --git a/packages/client/src/App.vue b/packages/client/src/App.vue index a0153f53..3c1446a6 100644 --- a/packages/client/src/App.vue +++ b/packages/client/src/App.vue @@ -64,7 +64,7 @@ const splitScreenSize = computed({ -
hello world
+
diff --git a/packages/client/src/components/common/SideNav.vue b/packages/client/src/components/common/SideNav.vue index 5d4f0749..7c45bef9 100644 --- a/packages/client/src/components/common/SideNav.vue +++ b/packages/client/src/components/common/SideNav.vue @@ -9,7 +9,7 @@ const buttonMoreTabs = ref() const sidebarExpanded = computed(() => devtoolsClientState.value.expandSidebar) const sidebarScrollable = ref(false) -const { categorizedTabs: displayedTabs } = useAllTabs() +const { enabledTabs } = useAllTabs()