diff --git a/packages/frontend-2/components/viewer/controls/Left.vue b/packages/frontend-2/components/viewer/controls/Left.vue index 9e77dd420..4440740d3 100644 --- a/packages/frontend-2/components/viewer/controls/Left.vue +++ b/packages/frontend-2/components/viewer/controls/Left.vue @@ -166,9 +166,15 @@
+ + @@ -212,49 +218,7 @@ const emit = defineEmits<{ forceClosePanels: [] }>() -const width = ref(264) -const scrollableControlsContainer = ref(null as Nullable) -const height = ref(scrollableControlsContainer.value?.clientHeight) -const isResizing = ref(false) -const resizeHandle = ref(null) const { width: windowWidth } = useWindowSize() -let startWidth = 0 -let startX = 0 - -const startResizing = (event: MouseEvent) => { - if (isMobile.value) return - event.preventDefault() - isResizing.value = true - startX = event.clientX - startWidth = width.value -} - -const throttledHandleMouseMove = useThrottleFn((event: MouseEvent) => { - if (isResizing.value) { - const diffX = event.clientX - startX - const newWidth = Math.max( - 240, - Math.min(startWidth + diffX, Math.min(440, windowWidth.value * 0.5 - 60)) - ) - width.value = newWidth - } -}, 150) - -if (import.meta.client) { - useResizeObserver(scrollableControlsContainer, (entries) => { - const { height: newHeight } = entries[0].contentRect - height.value = newHeight - }) - useEventListener(resizeHandle, 'mousedown', startResizing) - - useEventListener(document, 'mousemove', throttledHandleMouseMove) - - useEventListener(document, 'mouseup', () => { - if (isResizing.value) { - isResizing.value = false - } - }) -} const { isIntercomEnabled } = useIntercomEnabled() const { resourceItems, modelsAndVersionIds } = useInjectedViewerLoadedResources() @@ -263,6 +227,7 @@ const { isEnabled: isEmbedEnabled } = useEmbed() const breakpoints = useBreakpoints(TailwindBreakpoints) const isMobile = breakpoints.smaller('sm') const isTablet = breakpoints.smaller('lg') +const isLargerThanLg = breakpoints.greater('lg') const { getTooltipProps } = useSmartTooltipDelay() const isSavedViewsEnabled = useAreSavedViewsEnabled() const isWorkspacesEnabled = useIsWorkspacesEnabled() @@ -278,6 +243,74 @@ const { const { onPanelButtonClick } = useViewerPanelsUtilities() +const width = ref(264) +const panelExtensionWidth = ref(isMobile.value ? 200 : isLargerThanLg.value ? 300 : 256) +const scrollableControlsContainer = ref(null as Nullable) +const height = ref(scrollableControlsContainer.value?.clientHeight) +const isResizing = ref(false) +const isPanelExtensionResizing = ref(false) +const resizeHandle = ref(null) +const panelExtensionResizeHandle = ref(null) + +let startWidth = 0 +let startX = 0 +let startPanelExtensionWidth = 0 +let startPanelExtensionX = 0 + +const startResizing = (event: MouseEvent) => { + if (isMobile.value) return + event.preventDefault() + isResizing.value = true + startX = event.clientX + startWidth = width.value +} + +const startPanelExtensionResizing = (event: MouseEvent) => { + if (isMobile.value) return + event.preventDefault() + isPanelExtensionResizing.value = true + startPanelExtensionX = event.clientX + startPanelExtensionWidth = panelExtensionWidth.value +} + +const throttledHandleMouseMove = useThrottleFn((event: MouseEvent) => { + if (isResizing.value) { + const diffX = event.clientX - startX + const newWidth = Math.max( + 240, + Math.min(startWidth + diffX, Math.min(440, windowWidth.value * 0.5 - 60)) + ) + width.value = newWidth + } else if (isPanelExtensionResizing.value) { + const diffX = event.clientX - startPanelExtensionX + const newWidth = Math.max( + 200, + Math.min(startPanelExtensionWidth + diffX, Math.min(400, windowWidth.value * 0.4)) + ) + panelExtensionWidth.value = newWidth + } +}, 150) + +if (import.meta.client) { + useResizeObserver(scrollableControlsContainer, (entries) => { + const { height: newHeight } = entries[0].contentRect + height.value = newHeight + }) + useEventListener(resizeHandle, 'mousedown', startResizing) + useEventListener(panelExtensionResizeHandle, 'mousedown', startPanelExtensionResizing) + + useEventListener(document, 'mousemove', throttledHandleMouseMove) + + useEventListener(document, 'mouseup', () => { + if (isResizing.value) { + isResizing.value = false + } + if (isPanelExtensionResizing.value) { + isPanelExtensionResizing.value = false + } + }) +} + const hasActivePanel = computed(() => activePanel.value !== 'none') const allAutomationRuns = computed(() => { diff --git a/packages/frontend-2/components/viewer/filters/property-selection/Panel.vue b/packages/frontend-2/components/viewer/filters/property-selection/Panel.vue index cba5f61d0..c0dc23446 100644 --- a/packages/frontend-2/components/viewer/filters/property-selection/Panel.vue +++ b/packages/frontend-2/components/viewer/filters/property-selection/Panel.vue @@ -1,5 +1,5 @@