feat(map): add reference layers and stabilize workspace controls
This commit is contained in:
@@ -64,11 +64,17 @@
|
||||
"package": "@nodedc/ui-react",
|
||||
"exports": ["RangeControl"],
|
||||
"domContract": ["nodedc-range"],
|
||||
"summary": "Filled pill range control with embedded label and value from redesigned Engine settings.",
|
||||
"summary": "Filled pill range control with embedded label, drag interaction and a persistent native inline exact-value editor.",
|
||||
"behavior": ["native range drag", "value click exact editing", "Enter/blur commit", "Escape cancel", "min/max clamp", "step normalization"],
|
||||
"rules": [
|
||||
"The accent fill follows the active application theme.",
|
||||
"The native range remains the accessible input while its chrome is visually replaced."
|
||||
]
|
||||
"The native range remains the accessible drag input while its chrome is visually replaced.",
|
||||
"The fill travels beneath the visible value; the persistent transparent native editor above the value receives exact-edit clicks without remounting.",
|
||||
"Exact editing stays inside the existing value area and never expands the control.",
|
||||
"The browser places the caret at the clicked character and keeps native drag selection; entering exact editing never forces select-all or adds a second focus ring.",
|
||||
"The editor has no separate background box and keeps focus across parent window rerenders and pointer leave.",
|
||||
"Editor keyboard events do not bubble into enclosing Window shortcuts."
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "color-field",
|
||||
@@ -381,6 +387,7 @@
|
||||
"Legacy Engine inspectors are not reference implementations.",
|
||||
"Domain-specific field definitions remain in Engine; reusable layout and controls live here.",
|
||||
"Desktop Engine geometry is fixed at 390 px panel, 330 px content, 154/14/162 px control rows and 50 px section headers with a 12 px radius.",
|
||||
"Inspector supports controlled openSections/onOpenSectionsChange state so a consumer can persist the exact accordion layout without remount defaults.",
|
||||
"Inspector selection fields use InspectorSelectField only: a stacked visible label and the 276/8/46 px split control; integrated pills are prohibited.",
|
||||
"Accent-filled section headers belong to Environment Settings; neutral headers remain available for other approved inspector contexts."
|
||||
]
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"profiles": [
|
||||
{
|
||||
"id": "map.moving-object.operational.default",
|
||||
"version": "1.3.0",
|
||||
"version": "1.4.0",
|
||||
"title": "Флот",
|
||||
"semanticTypes": ["map.moving_object"],
|
||||
"label": {
|
||||
@@ -13,7 +13,7 @@
|
||||
"sizePx": 18,
|
||||
"color": "#f5f5f5",
|
||||
"outlineColor": "#0c0d12",
|
||||
"outlineWidthPx": 1,
|
||||
"outlineWidthPx": 0,
|
||||
"backgroundColor": "#0c0d12",
|
||||
"backgroundOpacity": 0.86,
|
||||
"paddingX": 8,
|
||||
@@ -30,7 +30,7 @@
|
||||
"stemWidthPx": 5,
|
||||
"outlineColor": "#0c0d12",
|
||||
"outlineOpacity": 0.6,
|
||||
"outlineWidthPx": 1,
|
||||
"outlineWidthPx": 0,
|
||||
"hideCameraHeightMeters": 100000
|
||||
},
|
||||
"facets": [
|
||||
@@ -115,7 +115,7 @@
|
||||
"sizePx": 14,
|
||||
"color": "#f5f5f5",
|
||||
"outlineColor": "#0c0d12",
|
||||
"outlineWidthPx": 1,
|
||||
"outlineWidthPx": 0,
|
||||
"backgroundColor": "#0c0d12",
|
||||
"backgroundOpacity": 0.82,
|
||||
"paddingX": 8,
|
||||
@@ -193,6 +193,162 @@
|
||||
{ "field": "geometry_kind", "order": ["polygon", "circle", "corridor"] },
|
||||
{ "field": "source_kind", "order": ["live_api", "versioned_snapshot"] }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "map.reference.transport.metro.v1",
|
||||
"version": "1.2.0",
|
||||
"title": "Метро",
|
||||
"semanticTypes": ["map.station"],
|
||||
"label": {
|
||||
"mode": "attributes",
|
||||
"fields": ["name", "official_name", "local_name"],
|
||||
"fontWeight": 600,
|
||||
"sizePx": 20,
|
||||
"color": "#cccccc",
|
||||
"outlineColor": "#0c0d12",
|
||||
"outlineWidthPx": 0,
|
||||
"backgroundColor": "#000000",
|
||||
"backgroundOpacity": 1,
|
||||
"paddingX": 6,
|
||||
"paddingY": 3,
|
||||
"maxLength": 80,
|
||||
"offsetX": 15,
|
||||
"offsetY": 0,
|
||||
"hideCameraHeightMeters": 10000
|
||||
},
|
||||
"target": {
|
||||
"variant": "elevated-spike",
|
||||
"stemHeightMeters": 500,
|
||||
"headSizePx": 20,
|
||||
"stemWidthPx": 2,
|
||||
"outlineColor": "#ff00c8",
|
||||
"outlineOpacity": 1,
|
||||
"outlineWidthPx": 2,
|
||||
"hideCameraHeightMeters": 10000
|
||||
},
|
||||
"facets": [{
|
||||
"id": "category",
|
||||
"field": "category",
|
||||
"label": "Категория",
|
||||
"filterable": false,
|
||||
"counter": false,
|
||||
"values": [{ "value": "metro", "label": "Метро", "order": 0 }]
|
||||
}],
|
||||
"styles": [{ "id": "reference", "color": "#ffffff", "opacity": 1 }],
|
||||
"classes": [{
|
||||
"id": "metro",
|
||||
"label": "Метро",
|
||||
"priority": 100,
|
||||
"match": [{ "field": "category", "equals": "metro" }],
|
||||
"styleId": "reference",
|
||||
"renderable": true
|
||||
}],
|
||||
"defaultClassId": "metro",
|
||||
"sort": [{ "field": "category", "order": ["metro"] }]
|
||||
},
|
||||
{
|
||||
"id": "map.reference.transport.terminal.v1",
|
||||
"version": "1.2.0",
|
||||
"title": "Вокзалы",
|
||||
"semanticTypes": ["map.terminal"],
|
||||
"label": {
|
||||
"mode": "attributes",
|
||||
"fields": ["name", "official_name", "local_name"],
|
||||
"fontWeight": 600,
|
||||
"sizePx": 20,
|
||||
"color": "#cccccc",
|
||||
"outlineColor": "#0c0d12",
|
||||
"outlineWidthPx": 0,
|
||||
"backgroundColor": "#000000",
|
||||
"backgroundOpacity": 1,
|
||||
"paddingX": 6,
|
||||
"paddingY": 3,
|
||||
"maxLength": 80,
|
||||
"offsetX": 15,
|
||||
"offsetY": 0,
|
||||
"hideCameraHeightMeters": 35000
|
||||
},
|
||||
"target": {
|
||||
"variant": "elevated-spike",
|
||||
"stemHeightMeters": 500,
|
||||
"headSizePx": 20,
|
||||
"stemWidthPx": 2,
|
||||
"outlineColor": "#ff00c8",
|
||||
"outlineOpacity": 1,
|
||||
"outlineWidthPx": 2,
|
||||
"hideCameraHeightMeters": 35000
|
||||
},
|
||||
"facets": [{
|
||||
"id": "category",
|
||||
"field": "category",
|
||||
"label": "Категория",
|
||||
"filterable": false,
|
||||
"counter": false,
|
||||
"values": [{ "value": "railway_terminal", "label": "Вокзалы", "order": 0 }]
|
||||
}],
|
||||
"styles": [{ "id": "reference", "color": "#ffffff", "opacity": 1 }],
|
||||
"classes": [{
|
||||
"id": "railway_terminal",
|
||||
"label": "Вокзалы",
|
||||
"priority": 100,
|
||||
"match": [{ "field": "category", "equals": "railway_terminal" }],
|
||||
"styleId": "reference",
|
||||
"renderable": true
|
||||
}],
|
||||
"defaultClassId": "railway_terminal",
|
||||
"sort": [{ "field": "category", "order": ["railway_terminal"] }]
|
||||
},
|
||||
{
|
||||
"id": "map.reference.transport.railway-station.v1",
|
||||
"version": "1.2.0",
|
||||
"title": "Станции РЖД",
|
||||
"semanticTypes": ["map.station"],
|
||||
"label": {
|
||||
"mode": "attributes",
|
||||
"fields": ["name", "official_name", "local_name"],
|
||||
"fontWeight": 600,
|
||||
"sizePx": 20,
|
||||
"color": "#cccccc",
|
||||
"outlineColor": "#0c0d12",
|
||||
"outlineWidthPx": 0,
|
||||
"backgroundColor": "#000000",
|
||||
"backgroundOpacity": 1,
|
||||
"paddingX": 6,
|
||||
"paddingY": 3,
|
||||
"maxLength": 80,
|
||||
"offsetX": 15,
|
||||
"offsetY": 0,
|
||||
"hideCameraHeightMeters": 15000
|
||||
},
|
||||
"target": {
|
||||
"variant": "elevated-spike",
|
||||
"stemHeightMeters": 500,
|
||||
"headSizePx": 20,
|
||||
"stemWidthPx": 2,
|
||||
"outlineColor": "#ff00c8",
|
||||
"outlineOpacity": 1,
|
||||
"outlineWidthPx": 2,
|
||||
"hideCameraHeightMeters": 15000
|
||||
},
|
||||
"facets": [{
|
||||
"id": "category",
|
||||
"field": "category",
|
||||
"label": "Категория",
|
||||
"filterable": false,
|
||||
"counter": false,
|
||||
"values": [{ "value": "railway_station", "label": "Станции РЖД", "order": 0 }]
|
||||
}],
|
||||
"styles": [{ "id": "reference", "color": "#ffffff", "opacity": 1 }],
|
||||
"classes": [{
|
||||
"id": "railway_station",
|
||||
"label": "Станции РЖД",
|
||||
"priority": 100,
|
||||
"match": [{ "field": "category", "equals": "railway_station" }],
|
||||
"styleId": "reference",
|
||||
"renderable": true
|
||||
}],
|
||||
"defaultClassId": "railway_station",
|
||||
"sort": [{ "field": "category", "order": ["railway_station"] }]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
{ "id": "traces", "kind": "trace-stream", "label": "Traces", "description": "Time-ordered entity traces.", "required": false, "multiple": true },
|
||||
{ "id": "routes", "kind": "route-stream", "label": "Routes", "description": "Planned or computed routes.", "required": false, "multiple": true },
|
||||
{ "id": "zones", "kind": "zone-stream", "label": "Zones", "description": "Polygons, geofences and operational areas.", "required": false, "multiple": true },
|
||||
{ "id": "reference-points", "kind": "entity-stream", "label": "Reference points", "description": "Platform-owned provider-neutral reference entities such as stations and terminals.", "required": false, "multiple": true },
|
||||
{ "id": "subject-details", "kind": "subject-aspect-stream", "label": "Subject details", "description": "Provider-neutral current aspects joined to a stable selected subject.", "required": false, "multiple": true },
|
||||
{ "id": "selection", "kind": "selection", "label": "Selection", "description": "Selected map entity and contextual state.", "required": false, "multiple": false },
|
||||
{ "id": "commands", "kind": "command", "label": "Commands", "description": "Capability-backed actions for selected entities.", "required": false, "multiple": true },
|
||||
|
||||
@@ -72,6 +72,12 @@
|
||||
"map": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"inspectorOpenSections": {
|
||||
"type": "array",
|
||||
"maxItems": 1,
|
||||
"uniqueItems": true,
|
||||
"items": { "type": "string", "minLength": 1, "maxLength": 256 }
|
||||
},
|
||||
"dataProductBindings": {
|
||||
"type": "array",
|
||||
"maxItems": 64,
|
||||
|
||||
Reference in New Issue
Block a user