From 1285a7c8381f4c92a1dff4d6e4248ac850edcd94 Mon Sep 17 00:00:00 2001 From: Luke Schreiber <131496683+Luke-Schreiber@users.noreply.github.com> Date: Thu, 18 Sep 2025 08:11:55 -0600 Subject: [PATCH 01/18] Add dynamic sizings, change default sizings & image ticks --- .../components/exemplarView/ExemplarView.vue | 9 +++-- .../ExemplarViewSettingsToolbar.vue | 39 ++++++++++++++++++- .../componentStores/ExemplarViewStore.ts | 8 ++-- 3 files changed, 48 insertions(+), 8 deletions(-) diff --git a/apps/client/src/components/exemplarView/ExemplarView.vue b/apps/client/src/components/exemplarView/ExemplarView.vue index 3f8154f8..e52760a5 100644 --- a/apps/client/src/components/exemplarView/ExemplarView.vue +++ b/apps/client/src/components/exemplarView/ExemplarView.vue @@ -1510,7 +1510,8 @@ function createSidewaysHistogramLayer(): any[] | null { histWidth = scaleForConstantVisualSize(viewConfiguration.value.histogramWidth); const fontSize = viewConfiguration.value.histogramFontSize * 0.7; const widthBuffer = 5; - const maxWidth = histWidth / (fontSize - widthBuffer); + const maxWidth = histWidth / (fontSize - widthBuffer) * + (viewConfiguration.value.histogramConditionLabelWrapFactor || 1); layers.push( new TextLayer({ @@ -2165,7 +2166,7 @@ function createCellImageLayer( const [x1, y1, , ]= imageSnippetDestination; const tickX = x1 + snippetDestWidth / 2; const tickY = y1 - const tickLength = viewConfiguration.value.horizonChartHeight + viewConfiguration.value.snippetHorizonChartGap*2; + const tickLength = viewConfiguration.value.horizonChartHeight + viewConfiguration.value.snippetHorizonChartGap*2 + viewConfiguration.value.timeBarHeightOuter / 2; const tickData = { path: [ [tickX, tickY], @@ -2605,7 +2606,7 @@ function createExemplarImageKeyFramesLayer( // Add tick marks ------------------------------------------------ const [x1, y1] = destination; - const tickLength = viewConfig.horizonChartHeight + viewConfig.snippetHorizonChartGap * 2; + const tickLength = viewConfig.horizonChartHeight + viewConfig.snippetHorizonChartGap * 2 + viewConfiguration.value.timeBarHeightOuter / 2; const beforeAfterMarginY = 4; // Helper function to create a tick mark @@ -2708,7 +2709,7 @@ function createExemplarImageKeyFramesLayer( // Add tick mark for this snippet. const [x1, y1, , ] = destination; const tickX = x1 + snippetDestWidth / 2; - const tickLength = viewConfig.horizonChartHeight + viewConfig.snippetHorizonChartGap * 2; + const tickLength = viewConfig.horizonChartHeight + viewConfig.snippetHorizonChartGap * 2 + viewConfiguration.value.timeBarHeightOuter / 2; tickData.push({ path: [ [tickX, y1], diff --git a/apps/client/src/components/exemplarView/ExemplarViewSettingsToolbar.vue b/apps/client/src/components/exemplarView/ExemplarViewSettingsToolbar.vue index 43815c42..4e60d3c4 100644 --- a/apps/client/src/components/exemplarView/ExemplarViewSettingsToolbar.vue +++ b/apps/client/src/components/exemplarView/ExemplarViewSettingsToolbar.vue @@ -100,12 +100,49 @@ function applySelections() { plotDialogOpen.value = false; } +const initialSizeRatio = ref( + exemplarViewStore.viewConfiguration.horizonChartHeight / + exemplarViewStore.viewConfiguration.snippetDisplayHeight +); +// Add time bar ratio +const initialTimeBarRatio = ref( + exemplarViewStore.viewConfiguration.timeBarHeightOuter / + exemplarViewStore.viewConfiguration.snippetDisplayHeight +); + +const combinedSize = computed({ + get: () => exemplarViewStore.viewConfiguration.snippetDisplayHeight, + set: (val: number) => { + // Clamp + const size = Math.min(320, Math.max(8, Math.round(val))); + exemplarViewStore.viewConfiguration.snippetDisplayHeight = size; + exemplarViewStore.viewConfiguration.snippetDisplayWidth = size; // keep square + exemplarViewStore.viewConfiguration.horizonChartHeight = Math.max( + 4, + Math.round(size * initialSizeRatio.value) + ); + // Update time bar height (clamp 2-50 like slider) + exemplarViewStore.viewConfiguration.timeBarHeightOuter = Math.min( + 50, + Math.max(2, Math.round(size * initialTimeBarRatio.value)) + ); + } +});