diff --git a/apps/desktop/src/components/grid/DataGrid.vue b/apps/desktop/src/components/grid/DataGrid.vue
index 8f2e6bb9f8..0ba13b7217 100644
--- a/apps/desktop/src/components/grid/DataGrid.vue
+++ b/apps/desktop/src/components/grid/DataGrid.vue
@@ -37,8 +37,6 @@ import {
Link2,
ListTree,
Maximize2,
- PanelBottom,
- PanelRight,
RefreshCw,
RefreshCcw,
TableProperties,
@@ -64,7 +62,7 @@ import LightTooltip from "@/components/ui/LightTooltip.vue";
import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { Switch } from "@/components/ui/switch";
-import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
+import { Tabs, TabsContent } from "@/components/ui/tabs";
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
import ErrorBanner from "@/components/ui/ErrorBanner.vue";
import DangerConfirmDialog from "@/components/editor/DangerConfirmDialog.vue";
@@ -80,6 +78,8 @@ import DataGridFilterWorkbench from "@/components/grid/DataGridFilterWorkbench.v
import DataGridTextFilterWorkbench from "@/components/grid/DataGridTextFilterWorkbench.vue";
import DataGridTableInfoPanels from "@/components/grid/DataGridTableInfoPanels.vue";
import DataGridColumnFilterPopover from "@/components/grid/DataGridColumnFilterPopover.vue";
+import DataGridCellDetailHeader from "@/components/grid/DataGridCellDetailHeader.vue";
+import DataGridCellDetailHexViewer from "@/components/grid/DataGridCellDetailHexViewer.vue";
import TemporalCellEditor from "@/components/grid/TemporalCellEditor.vue";
import EnumCellEditor from "@/components/grid/EnumCellEditor.vue";
import DataGridReadonlyTextSelection from "@/components/grid/DataGridReadonlyTextSelection.vue";
@@ -13668,49 +13668,17 @@ function openGridSnapshot() {
-
-
-
-
- {{ t("grid.cellDetails") }}
-
- {{ t("grid.hexViewer") }}
-
-
- {{ t("grid.valueEditor") }}
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
{{ t("grid.hexViewer") }}
-
- {{
- t("grid.hexViewerByteCount", {
- count: activeBinaryHexByteCount,
- })
- }}
-
-
-
-
-
{{ t("grid.hexViewerOffset") }}
-
{{ t("grid.hexViewerHex") }}
-
{{ t("grid.hexViewerAscii") }}
-
-
-
- {{ row.offset }}
-
-
{{ row.hex }}
-
{{ row.ascii }}
-
-
- {{ t("grid.hexViewerEmpty") }}
-
-
-
+
diff --git a/apps/desktop/src/components/grid/DataGridCellDetailHeader.vue b/apps/desktop/src/components/grid/DataGridCellDetailHeader.vue
new file mode 100644
index 0000000000..cbd87f52fb
--- /dev/null
+++ b/apps/desktop/src/components/grid/DataGridCellDetailHeader.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+ {{ t("grid.cellDetails") }}
+
+ {{ t("grid.hexViewer") }}
+
+
+ {{ t("grid.valueEditor") }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/desktop/src/components/grid/DataGridCellDetailHexViewer.vue b/apps/desktop/src/components/grid/DataGridCellDetailHexViewer.vue
new file mode 100644
index 0000000000..464ab1d5e4
--- /dev/null
+++ b/apps/desktop/src/components/grid/DataGridCellDetailHexViewer.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
+
{{ t("grid.hexViewer") }}
+
+ {{ t("grid.hexViewerByteCount", { count: props.byteCount }) }}
+
+
+
+
+
{{ t("grid.hexViewerOffset") }}
+
{{ t("grid.hexViewerHex") }}
+
{{ t("grid.hexViewerAscii") }}
+
+
+
{{ row.offset }}
+
{{ row.hex }}
+
{{ row.ascii }}
+
+
+ {{ t("grid.hexViewerEmpty") }}
+
+
+
+
diff --git a/apps/desktop/src/components/grid/__tests__/DataGridSurfaces.spec.ts b/apps/desktop/src/components/grid/__tests__/DataGridSurfaces.spec.ts
index 9cb5092c16..bba66310f4 100644
--- a/apps/desktop/src/components/grid/__tests__/DataGridSurfaces.spec.ts
+++ b/apps/desktop/src/components/grid/__tests__/DataGridSurfaces.spec.ts
@@ -102,6 +102,7 @@ import DataGridSearchBar from "@/components/grid/DataGridSearchBar.vue";
const dataGridSource = readFileSync("apps/desktop/src/components/grid/DataGrid.vue", "utf8");
const cellDetailPanelSource = readFileSync("apps/desktop/src/components/grid/DataGridCellDetailPanel.vue", "utf8");
+const cellDetailHeaderSource = readFileSync("apps/desktop/src/components/grid/DataGridCellDetailHeader.vue", "utf8");
const globalsCss = readFileSync("apps/desktop/src/styles/globals.css", "utf8");
function detail(patch: Partial
= {}): DataGridCellDetail {
@@ -1367,9 +1368,7 @@ describe("DataGridTextFilterWorkbench", () => {
describe("cell detail surfaces", () => {
it("keeps detail tabs and editor actions usable when the panel narrows", () => {
- const tabsStart = dataGridSource.indexOf('\s*/);
const triggerClasses = Array.from(tabsHeader.matchAll(/]*class="([^"]+)"/g), ([, classes]) => classes.split(/\s+/));