v0.36.9
This commit is contained in:
1 parent
992a1795af
commit
b9d716d260
3 files changed
+105
-9
No files matched your search
@@ -79,7 +79,8 @@ window.rustProxyInlineLayout = (() => {
|
|||||||
const explicit = draft.heights?.[node.dataset.dashboardWidget] !== undefined;
|
const explicit = draft.heights?.[node.dataset.dashboardWidget] !== undefined;
|
||||||
const heightValue = node.querySelector(".overview-inline-height-value");
|
const heightValue = node.querySelector(".overview-inline-height-value");
|
||||||
if (heightValue) {
|
if (heightValue) {
|
||||||
heightValue.textContent = `↕${rows.span}${explicit ? "" : " A"}`;
|
heightValue.textContent = `↕${rows.span}`;
|
||||||
|
heightValue.classList.toggle("is-auto", !explicit);
|
||||||
heightValue.title = explicit ? t("overviewLayoutHeightFixed") : t("overviewLayoutHeightAuto");
|
heightValue.title = explicit ? t("overviewLayoutHeightFixed") : t("overviewLayoutHeightAuto");
|
||||||
}
|
}
|
||||||
const lower = node.querySelector(".overview-inline-lower");
|
const lower = node.querySelector(".overview-inline-lower");
|
||||||
@@ -161,7 +162,9 @@ window.rustProxyInlineLayout = (() => {
|
|||||||
control("−", `${t("overviewLayoutLower")}: ${title}`, "overview-inline-lower", () => resizeHeight(id, -1)),
|
control("−", `${t("overviewLayoutLower")}: ${title}`, "overview-inline-lower", () => resizeHeight(id, -1)),
|
||||||
heightValue,
|
heightValue,
|
||||||
control("+", `${t("overviewLayoutTaller")}: ${title}`, "overview-inline-taller", () => resizeHeight(id, 1)));
|
control("+", `${t("overviewLayoutTaller")}: ${title}`, "overview-inline-taller", () => resizeHeight(id, 1)));
|
||||||
bar.append(grip, dashboardWidgetTypeBadge(id), sizeControls, heightControls,
|
const name = el("span", title, "overview-inline-name");
|
||||||
|
name.title = title;
|
||||||
|
bar.append(grip, name, dashboardWidgetTypeBadge(id), sizeControls, heightControls,
|
||||||
control("←", `${t("moveUp")}: ${title}`, "overview-inline-up", () => nudge(id, -1)),
|
control("←", `${t("moveUp")}: ${title}`, "overview-inline-up", () => nudge(id, -1)),
|
||||||
control("→", `${t("moveDown")}: ${title}`, "overview-inline-down", () => nudge(id, 1)),
|
control("→", `${t("moveDown")}: ${title}`, "overview-inline-down", () => nudge(id, 1)),
|
||||||
control("×", `${t("overviewLayoutInlineHide")}: ${title}`, "overview-inline-hide", () => hide(id)));
|
control("×", `${t("overviewLayoutInlineHide")}: ${title}`, "overview-inline-hide", () => hide(id)));
|
||||||
@@ -197,6 +200,8 @@ window.rustProxyInlineLayout = (() => {
|
|||||||
if (modalButton) modalButton.disabled = false;
|
if (modalButton) modalButton.disabled = false;
|
||||||
if (!preserveSaved && original) applyDashboardLayout(original.order, [...original.hidden], original.sizes, original.heights);
|
if (!preserveSaved && original) applyDashboardLayout(original.order, [...original.hidden], original.sizes, original.heights);
|
||||||
draft = original = null;
|
draft = original = null;
|
||||||
|
// Recompute from scratch so the saved view is exactly what was arranged.
|
||||||
|
window.rustProxyOverviewRows?.flush?.();
|
||||||
}
|
}
|
||||||
async function begin() {
|
async function begin() {
|
||||||
if (draft || opening || saving || $("overview-presets-dialog")?.open) return;
|
if (draft || opening || saving || $("overview-presets-dialog")?.open) return;
|
||||||
|
|||||||
@@ -35,12 +35,17 @@ window.rustProxyOverviewRows = (() => {
|
|||||||
lastWidth = grid.clientWidth;
|
lastWidth = grid.clientWidth;
|
||||||
const items = cards().filter(node => !node.hidden && node.getClientRects().length);
|
const items = cards().filter(node => !node.hidden && node.getClientRects().length);
|
||||||
if (!items.length) return;
|
if (!items.length) return;
|
||||||
grid.classList.add("is-measuring-rows");
|
// Measure as the saved (locked) dashboard: editing styles move a few
|
||||||
|
// controls inside cards, which must not change the layout being edited.
|
||||||
|
const editing = grid.classList.contains("is-unlocked");
|
||||||
|
if (editing) grid.classList.remove("is-unlocked");
|
||||||
|
grid.classList.add("has-row-units", "is-measuring-rows");
|
||||||
// Bounding boxes include CSS zoom (Settings → Interface scale); grid tracks,
|
// Bounding boxes include CSS zoom (Settings → Interface scale); grid tracks,
|
||||||
// gaps and the row unit are in CSS pixels, so divide measurements by it.
|
// gaps and the row unit are in CSS pixels, so divide measurements by it.
|
||||||
const zoom = zoomOf();
|
const zoom = zoomOf();
|
||||||
const natural = items.map(node => node.getBoundingClientRect().height / zoom);
|
const natural = items.map(node => node.getBoundingClientRect().height / zoom);
|
||||||
grid.classList.remove("is-measuring-rows");
|
grid.classList.remove("is-measuring-rows");
|
||||||
|
if (editing) grid.classList.add("is-unlocked");
|
||||||
const gap = parseFloat(getComputedStyle(grid).rowGap) || 0;
|
const gap = parseFloat(getComputedStyle(grid).rowGap) || 0;
|
||||||
const isStat = node => node.classList.contains("stat");
|
const isStat = node => node.classList.contains("stat");
|
||||||
// The unit is half of the smallest stat card, so every card ends within a
|
// The unit is half of the smallest stat card, so every card ends within a
|
||||||
|
|||||||
@@ -604,7 +604,7 @@ html[data-dashboard-density=ultra] #panel-overview .stat-cache-outcomes .cache-m
|
|||||||
color: var(--text);
|
color: var(--text);
|
||||||
}
|
}
|
||||||
|
|
||||||
#panel-overview .dashboard-overview-grid.is-unlocked .stat-with-action .stat-corner-action {
|
#panel-overview .dashboard-overview-grid.is-unlocked:not(.has-row-units) .stat-with-action .stat-corner-action {
|
||||||
top: 44px;
|
top: 44px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -626,7 +626,7 @@ html[data-dashboard-density=ultra] #panel-overview .stat-cache-outcomes .cache-m
|
|||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
#panel-overview .dashboard-overview-grid.is-unlocked .backend-latency-stat .backend-health-origins {
|
#panel-overview .dashboard-overview-grid.is-unlocked:not(.has-row-units) .backend-latency-stat .backend-health-origins {
|
||||||
top: 44px;
|
top: 44px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1243,9 +1243,95 @@ html[data-chart-style] :is(#workspace, dialog) svg polyline {
|
|||||||
position: relative;
|
position: relative;
|
||||||
outline: 1px dashed var(--accent);
|
outline: 1px dashed var(--accent);
|
||||||
outline-offset: -2px;
|
outline-offset: -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Legacy grouped layout: reserve room for the editing toolbar. With row units the
|
||||||
|
toolbar overlays the card header instead, so the unlocked grid has exactly the
|
||||||
|
geometry of the saved one (what you arrange is what you get). */
|
||||||
|
#panel-overview .dashboard-overview-grid.is-unlocked:not(.has-row-units)>[data-dashboard-widget] {
|
||||||
padding-top: 40px !important;
|
padding-top: 40px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Row-unit editing toolbar: a slim opaque header (handle, card name, hide) that
|
||||||
|
expands to a second line with width / height / move controls on hover or focus. */
|
||||||
|
#panel-overview .dashboard-overview-grid.is-unlocked.has-row-units .overview-inline-toolbar {
|
||||||
|
top: 2px;
|
||||||
|
left: 2px;
|
||||||
|
right: 2px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: center;
|
||||||
|
gap: 3px;
|
||||||
|
padding: 3px;
|
||||||
|
overflow: visible;
|
||||||
|
background: var(--panel2, var(--panel));
|
||||||
|
border-bottom: 1px solid var(--line);
|
||||||
|
border-radius: var(--rp-radius-control, 0);
|
||||||
|
box-shadow: 0 4px 10px var(--shadow-mid, #0006);
|
||||||
|
}
|
||||||
|
|
||||||
|
#panel-overview .dashboard-overview-grid.is-unlocked.has-row-units .overview-inline-toolbar button {
|
||||||
|
min-width: 22px;
|
||||||
|
min-height: 22px;
|
||||||
|
padding: 1px 5px;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#panel-overview .overview-inline-name {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#panel-overview .dashboard-overview-grid.is-unlocked.has-row-units .overview-inline-name {
|
||||||
|
display: block;
|
||||||
|
flex: 1 1 0;
|
||||||
|
min-width: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
color: var(--text);
|
||||||
|
font: 600 11px var(--sans);
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
#panel-overview .dashboard-overview-grid.is-unlocked.has-row-units .overview-inline-toolbar .overview-inline-hide {
|
||||||
|
order: 1;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#panel-overview .dashboard-overview-grid.is-unlocked.has-row-units .overview-inline-toolbar :is(.overview-widget-type, .overview-inline-width, .overview-inline-up, .overview-inline-down) {
|
||||||
|
display: none;
|
||||||
|
order: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#panel-overview .dashboard-overview-grid.is-unlocked.has-row-units>[data-dashboard-widget]:is(:hover, :focus-within) .overview-inline-toolbar :is(.overview-inline-width, .overview-inline-up, .overview-inline-down) {
|
||||||
|
display: inline-flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
#panel-overview .dashboard-overview-grid.is-unlocked.has-row-units>[data-dashboard-widget]:is(:hover, :focus-within) .overview-inline-toolbar::after {
|
||||||
|
content: "";
|
||||||
|
order: 1;
|
||||||
|
flex-basis: 100%;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#panel-overview .dashboard-overview-grid.is-unlocked.has-row-units>[data-dashboard-widget]:is(:hover, :focus-within) .overview-inline-toolbar .overview-inline-height[hidden] {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#panel-overview .dashboard-overview-grid.is-unlocked.has-row-units .overview-inline-width-value {
|
||||||
|
min-width: 28px;
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Automatic height (fits the content) is shown muted; a fixed height in full colour. */
|
||||||
|
#panel-overview .dashboard-overview-grid.is-unlocked.has-row-units .overview-inline-height-value.is-auto {
|
||||||
|
color: var(--muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
#panel-overview .dashboard-overview-grid.is-unlocked.has-row-units .overview-inline-width + .overview-inline-width {
|
||||||
|
margin-left: 4px;
|
||||||
|
padding-left: 6px;
|
||||||
|
border-left: 1px solid var(--line);
|
||||||
|
}
|
||||||
|
|
||||||
#panel-overview .dashboard-overview-grid.is-unlocked>[data-dashboard-widget]:hover,
|
#panel-overview .dashboard-overview-grid.is-unlocked>[data-dashboard-widget]:hover,
|
||||||
#panel-overview .dashboard-overview-grid.is-unlocked>[data-dashboard-widget]:focus-within {
|
#panel-overview .dashboard-overview-grid.is-unlocked>[data-dashboard-widget]:focus-within {
|
||||||
outline-style: solid;
|
outline-style: solid;
|
||||||
@@ -2391,7 +2477,7 @@ html[data-dashboard-density] #panel-overview .stat :is(.stat-chart-legend, .over
|
|||||||
|
|
||||||
/* Compact stat cards: a card made only of title, value and one secondary line shows that line
|
/* Compact stat cards: a card made only of title, value and one secondary line shows that line
|
||||||
beside the value (right-aligned) instead of on a line of its own. */
|
beside the value (right-aligned) instead of on a line of its own. */
|
||||||
#panel-overview .stats-grid>.stat:is(:not(.stat-donut, .stat-meter, .stat-with-action, .stat-chart):not(:has(>:not(span, strong, small))):has(>small)) {
|
#panel-overview .stats-grid>.stat:is(:not(.stat-donut, .stat-meter, .stat-with-action, .stat-chart):not(:has(>:not(span, strong, small, .overview-inline-toolbar))):has(>small)) {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: minmax(0, 1fr) auto;
|
grid-template-columns: minmax(0, 1fr) auto;
|
||||||
column-gap: 10px;
|
column-gap: 10px;
|
||||||
@@ -2399,16 +2485,16 @@ html[data-dashboard-density] #panel-overview .stat :is(.stat-chart-legend, .over
|
|||||||
align-content: start;
|
align-content: start;
|
||||||
}
|
}
|
||||||
|
|
||||||
#panel-overview .stats-grid>.stat:is(:not(.stat-donut, .stat-meter, .stat-with-action, .stat-chart):not(:has(>:not(span, strong, small))):has(>small))>span:first-child {
|
#panel-overview .stats-grid>.stat:is(:not(.stat-donut, .stat-meter, .stat-with-action, .stat-chart):not(:has(>:not(span, strong, small, .overview-inline-toolbar))):has(>small))>span:first-child {
|
||||||
grid-column: 1 / -1;
|
grid-column: 1 / -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#panel-overview .stats-grid>.stat:is(:not(.stat-donut, .stat-meter, .stat-with-action, .stat-chart):not(:has(>:not(span, strong, small))):has(>small))>strong {
|
#panel-overview .stats-grid>.stat:is(:not(.stat-donut, .stat-meter, .stat-with-action, .stat-chart):not(:has(>:not(span, strong, small, .overview-inline-toolbar))):has(>small))>strong {
|
||||||
grid-column: 1;
|
grid-column: 1;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#panel-overview .stats-grid>.stat:is(:not(.stat-donut, .stat-meter, .stat-with-action, .stat-chart):not(:has(>:not(span, strong, small))):has(>small))>small {
|
#panel-overview .stats-grid>.stat:is(:not(.stat-donut, .stat-meter, .stat-with-action, .stat-chart):not(:has(>:not(span, strong, small, .overview-inline-toolbar))):has(>small))>small {
|
||||||
grid-column: 2;
|
grid-column: 2;
|
||||||
max-width: 14em;
|
max-width: 14em;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|||||||
Reference in new issue
Block a user