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);