diff --git a/LMEMappeCatastaliApp.csproj b/LMEMappeCatastaliApp.csproj
index abafcf5..437bb95 100644
--- a/LMEMappeCatastaliApp.csproj
+++ b/LMEMappeCatastaliApp.csproj
@@ -28,8 +28,8 @@
com.companyname.lmemappecatastaliapp
- 0.2.26
- 30
+ 0.2.27
+ 31
None
diff --git a/wwwroot/css/app.css b/wwwroot/css/app.css
index 58ef3ed..dbf3d37 100644
--- a/wwwroot/css/app.css
+++ b/wwwroot/css/app.css
@@ -266,16 +266,25 @@ input[type="checkbox"] {
.layer-manager-group,
.layer-manager-block,
.layer-manager-object {
- border: 1px solid #dce3e6;
+ border: 1px solid var(--layer-group-border, #dce3e6);
border-radius: 6px;
- background: #fff;
+ background: var(--layer-group-surface, #fff);
+}
+
+.layer-manager-group > summary,
+.layer-manager-block > summary {
+ background: var(--layer-group-parent, #f6f8f9);
+}
+
+.layer-manager-object > summary {
+ background: var(--layer-group-surface, #fff);
}
.layer-manager-group > summary,
.layer-manager-block > summary,
.layer-manager-object > summary {
display: grid;
- grid-template-columns: 28px minmax(0, 1fr) 24px;
+ grid-template-columns: 28px minmax(0, 1fr) 50px;
grid-template-areas:
"handle title count"
". visibility moves"
@@ -359,7 +368,7 @@ input[type="checkbox"] {
.layer-move-buttons {
grid-area: moves;
display: inline-grid;
- grid-template-columns: 24px;
+ grid-template-columns: 24px 24px;
gap: 2px;
}
@@ -384,8 +393,24 @@ input[type="checkbox"] {
grid-area: title;
min-width: 0;
overflow-wrap: anywhere;
+ color: var(--layer-group-accent, var(--ink));
font-size: 12px;
- font-weight: 700;
+}
+
+.layer-manager-group > summary > .layer-manager-title {
+ font-size: 13px;
+ font-weight: 800;
+}
+
+.layer-manager-block > summary > .layer-manager-title {
+ font-size: 12px;
+ font-weight: 800;
+}
+
+.layer-manager-object > summary > .layer-manager-title {
+ font-size: 11px;
+ font-style: italic;
+ font-weight: 400;
}
.layer-manager-count {
@@ -396,7 +421,46 @@ input[type="checkbox"] {
}
.layer-manager-children {
- padding: 0 4px 5px 6px;
+ margin-left: 4px;
+ padding: 4px 3px 5px 6px;
+ border-left: 2px solid var(--layer-group-border, #dce3e6);
+}
+
+.layer-manager-block > .layer-manager-children {
+ margin-left: 5px;
+ padding-left: 5px;
+}
+
+.layer-manager-object {
+ margin-left: 3px;
+ border-radius: 4px;
+}
+
+.layer-manager-object > summary {
+ grid-template-columns: 24px minmax(0, 1fr) 46px;
+ gap: 4px;
+ padding: 3px 4px;
+}
+
+.layer-manager-object > summary > .layer-drag-handle {
+ width: 24px;
+ height: 24px;
+ font-size: 15px;
+}
+
+.layer-manager-object > summary > .layer-move-buttons {
+ grid-template-columns: 22px 22px;
+}
+
+.layer-manager-object > summary > .layer-move-buttons button {
+ width: 22px;
+ height: 24px;
+}
+
+.layer-manager-object > summary .layer-rename-button,
+.layer-manager-object > summary .layer-remove-button {
+ min-height: 24px;
+ font-size: 9px;
}
.layer-manager-details {
diff --git a/wwwroot/js/lme-map.js b/wwwroot/js/lme-map.js
index 9c0e7f3..a3c600d 100644
--- a/wwwroot/js/lme-map.js
+++ b/wwwroot/js/lme-map.js
@@ -1268,6 +1268,26 @@ function layerManagerRowActions(renameButton, removeButton) {
return `${renameButton}${removeButton}`;
}
+const layerManagerPalettes = [
+ { surface: "#f0fdf4", parent: "#dcfce7", border: "#86efac", accent: "#166534" },
+ { surface: "#eff6ff", parent: "#dbeafe", border: "#93c5fd", accent: "#1d4ed8" },
+ { surface: "#fffbeb", parent: "#fef3c7", border: "#fcd34d", accent: "#92400e" },
+ { surface: "#fff1f2", parent: "#ffe4e6", border: "#fda4af", accent: "#be123c" },
+ { surface: "#f5f3ff", parent: "#ede9fe", border: "#c4b5fd", accent: "#6d28d9" },
+ { surface: "#ecfeff", parent: "#cffafe", border: "#67e8f9", accent: "#0e7490" },
+ { surface: "#f7fee7", parent: "#ecfccb", border: "#bef264", accent: "#3f6212" }
+];
+
+function applyLayerManagerPalette(row, key) {
+ const hash = [...String(key)].reduce((value, character) =>
+ ((value * 31) + character.charCodeAt(0)) >>> 0, 0);
+ const palette = layerManagerPalettes[hash % layerManagerPalettes.length];
+ row.style.setProperty("--layer-group-surface", palette.surface);
+ row.style.setProperty("--layer-group-parent", palette.parent);
+ row.style.setProperty("--layer-group-border", palette.border);
+ row.style.setProperty("--layer-group-accent", palette.accent);
+}
+
function removeManagedRecords(records, subject) {
if (!records.length) {
return;
@@ -1388,7 +1408,9 @@ function renderLayerManagerCategory(category, records) {
const group = document.createElement("details");
group.className = "layer-manager-group";
group.dataset.dragType = "category";
+ group.dataset.layerDepth = "0";
group.dataset.categoryKey = category.key;
+ applyLayerManagerPalette(group, `category:${category.key}`);
bindLayerManagerExpansion(group, `category:${category.key}`);
const categoryName = managedCategoryName(category, records);
const renameButton = managedCategoryCanRename(category)
@@ -1438,8 +1460,10 @@ function renderLayerManagerBlock(category, source, records) {
const block = document.createElement("details");
block.className = "layer-manager-block";
block.dataset.dragType = "block";
+ block.dataset.layerDepth = "1";
block.dataset.categoryKey = category.key;
block.dataset.blockKey = source;
+ applyLayerManagerPalette(block, `block:${category.key}:${source}`);
bindLayerManagerExpansion(block, `block:${category.key}:${source}`);
const visibleCount = records.filter(record => !lmeState.managerHiddenObjectIds.has(record.id)).length;
const visible = visibleCount === records.length;
@@ -1479,6 +1503,7 @@ function renderLayerManagerObject(record, index) {
object.classList.add("layer-manager-object-selected");
}
object.dataset.dragType = "object";
+ object.dataset.layerDepth = "2";
object.dataset.objectId = record.id;
bindLayerManagerExpansion(object, `object:${record.id}`);
const visible = !lmeState.managerHiddenObjectIds.has(record.id);