PlotDirector Phase 18C - Edit Action Consolidation and Metrics Bar Fix

This commit is contained in:
Nick Beckley 2026-06-30 20:42:11 +01:00
parent 4fca39a0ff
commit fd27074a37
7 changed files with 82 additions and 31 deletions

View File

@ -24,7 +24,7 @@
</div>
<div class="scene-overview-v2-controls">
<span class="status-pill">@status</span>
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="scene-details" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneDetailsEditor", "Scenes", new { sceneId = Model.SceneID })">Manage scene details</button>
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="scene-details" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneDetailsEditor", "Scenes", new { sceneId = Model.SceneID })">Edit scene details</button>
</div>
</div>

View File

@ -93,10 +93,18 @@
</div>
<div class="scene-inspector-v2-actions">
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="characters" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneCharactersEditor", "Scenes", new { sceneId = Model.SceneID })">Manage characters</button>
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="attributes" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneCharacterAttributesEditor", "Scenes", new { sceneId = Model.SceneID })">Manage attributes</button>
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="suggestions" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneSuggestionsEditor", "Scenes", new { sceneId = Model.SceneID })">Manage suggestions</button>
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="knowledge" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneKnowledgeEditor", "Scenes", new { sceneId = Model.SceneID })">Manage knowledge</button>
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="relationships" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneRelationshipsEditor", "Scenes", new { sceneId = Model.SceneID })">Manage relationships</button>
<div class="btn-group scene-inspector-v2-action-menu">
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="characters" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneCharactersEditor", "Scenes", new { sceneId = Model.SceneID })">Edit People</button>
<button type="button" class="btn btn-sm btn-outline-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Show people editor actions</span>
</button>
<div class="dropdown-menu dropdown-menu-end">
<button type="button" class="dropdown-item" data-scene-editor="characters" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneCharactersEditor", "Scenes", new { sceneId = Model.SceneID })">Characters</button>
<button type="button" class="dropdown-item" data-scene-editor="attributes" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneCharacterAttributesEditor", "Scenes", new { sceneId = Model.SceneID })">Attributes</button>
<button type="button" class="dropdown-item" data-scene-editor="suggestions" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneSuggestionsEditor", "Scenes", new { sceneId = Model.SceneID })">Suggestions</button>
<button type="button" class="dropdown-item" data-scene-editor="knowledge" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneKnowledgeEditor", "Scenes", new { sceneId = Model.SceneID })">Knowledge</button>
<button type="button" class="dropdown-item" data-scene-editor="relationships" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneRelationshipsEditor", "Scenes", new { sceneId = Model.SceneID })">Relationships</button>
</div>
</div>
</div>
</article>

View File

@ -67,11 +67,8 @@
var effectiveMax = metric.MaxValue > metric.MinValue ? metric.MaxValue : 10;
var clampedValue = Math.Min(effectiveMax, Math.Max(effectiveMin, metric.Value));
var percent = effectiveMax == 0 ? 0 : (int)Math.Round(((double)clampedValue / effectiveMax) * 100);
<div class="scene-inspector-v2-metric-bar" style="--metric-percent: @percent%;">
<div class="scene-inspector-v2-metric-bar-heading">
<span>@metric.MetricName</span>
<strong>@metric.Value</strong>
</div>
<div class="scene-inspector-v2-metric-row" style="--metric-percent: @percent%;">
<span>@metric.MetricName</span>
<div class="scene-inspector-v2-metric-track"
role="progressbar"
aria-label="@metric.MetricName"
@ -80,6 +77,7 @@
aria-valuenow="@clampedValue">
<i></i>
</div>
<strong>@metric.Value</strong>
</div>
}
</div>
@ -87,9 +85,17 @@
</div>
<div class="scene-inspector-v2-actions">
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="purpose" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("ScenePurposeEditor", "Scenes", new { sceneId = Model.SceneID })">Manage purpose</button>
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="metrics" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneMetricsEditor", "Scenes", new { sceneId = Model.SceneID })">Manage metrics</button>
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="threads" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneThreadsEditor", "Scenes", new { sceneId = Model.SceneID })">Manage threads</button>
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="dependencies" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneDependenciesEditor", "Scenes", new { sceneId = Model.SceneID })">Manage dependencies</button>
<div class="btn-group scene-inspector-v2-action-menu">
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="purpose" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("ScenePurposeEditor", "Scenes", new { sceneId = Model.SceneID })">Edit Story</button>
<button type="button" class="btn btn-sm btn-outline-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Show story editor actions</span>
</button>
<div class="dropdown-menu dropdown-menu-end">
<button type="button" class="dropdown-item" data-scene-editor="purpose" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("ScenePurposeEditor", "Scenes", new { sceneId = Model.SceneID })">Purpose</button>
<button type="button" class="dropdown-item" data-scene-editor="metrics" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneMetricsEditor", "Scenes", new { sceneId = Model.SceneID })">Metrics</button>
<button type="button" class="dropdown-item" data-scene-editor="threads" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneThreadsEditor", "Scenes", new { sceneId = Model.SceneID })">Threads</button>
<button type="button" class="dropdown-item" data-scene-editor="dependencies" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneDependenciesEditor", "Scenes", new { sceneId = Model.SceneID })">Dependencies</button>
</div>
</div>
</div>
</article>

View File

@ -68,8 +68,16 @@
</div>
<div class="scene-inspector-v2-actions">
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="locations" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneLocationsEditor", "Scenes", new { sceneId = Model.SceneID })">Manage locations</button>
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="assets" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneAssetsEditor", "Scenes", new { sceneId = Model.SceneID })">Manage assets</button>
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="custody" data-scene-id="@Model.SceneID">Manage custody</button>
<div class="btn-group scene-inspector-v2-action-menu">
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="locations" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneLocationsEditor", "Scenes", new { sceneId = Model.SceneID })">Edit World</button>
<button type="button" class="btn btn-sm btn-outline-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Show world editor actions</span>
</button>
<div class="dropdown-menu dropdown-menu-end">
<button type="button" class="dropdown-item" data-scene-editor="locations" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneLocationsEditor", "Scenes", new { sceneId = Model.SceneID })">Locations</button>
<button type="button" class="dropdown-item" data-scene-editor="assets" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneAssetsEditor", "Scenes", new { sceneId = Model.SceneID })">Assets</button>
<button type="button" class="dropdown-item" data-scene-editor="custody" data-scene-id="@Model.SceneID">Custody</button>
</div>
</div>
</div>
</article>

View File

@ -111,9 +111,17 @@
</div>
<div class="scene-inspector-v2-actions">
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="notes" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneNotesEditor", "Scenes", new { sceneId = Model.SceneID })">Manage notes</button>
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="checklist" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneChecklistEditor", "Scenes", new { sceneId = Model.SceneID })">Manage checklist</button>
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="workflow" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneWorkflowEditor", "Scenes", new { sceneId = Model.SceneID })">Manage workflow</button>
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="attachments" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneAttachmentsEditor", "Scenes", new { sceneId = Model.SceneID })">Manage attachments</button>
<div class="btn-group scene-inspector-v2-action-menu">
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="notes" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneNotesEditor", "Scenes", new { sceneId = Model.SceneID })">Edit Writer</button>
<button type="button" class="btn btn-sm btn-outline-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Show writer editor actions</span>
</button>
<div class="dropdown-menu dropdown-menu-end">
<button type="button" class="dropdown-item" data-scene-editor="notes" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneNotesEditor", "Scenes", new { sceneId = Model.SceneID })">Notes</button>
<button type="button" class="dropdown-item" data-scene-editor="checklist" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneChecklistEditor", "Scenes", new { sceneId = Model.SceneID })">Checklist</button>
<button type="button" class="dropdown-item" data-scene-editor="workflow" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneWorkflowEditor", "Scenes", new { sceneId = Model.SceneID })">Workflow</button>
<button type="button" class="dropdown-item" data-scene-editor="attachments" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneAttachmentsEditor", "Scenes", new { sceneId = Model.SceneID })">Attachments</button>
</div>
</div>
</div>
</article>

View File

@ -4677,6 +4677,14 @@ body.dragging-location [data-drag-type="location"] {
padding: 0.22rem 0.5rem;
}
.scene-inspector-v2-action-menu .dropdown-menu {
min-width: 11rem;
}
.scene-inspector-v2-action-menu .dropdown-item {
font-size: 0.86rem;
}
.scene-inspector-v2-chip-row span {
border: 1px solid rgba(47, 111, 99, 0.18);
border-radius: 999px;
@ -4690,10 +4698,17 @@ body.dragging-location [data-drag-type="location"] {
.scene-inspector-v2-metrics,
.scene-inspector-v2-counts {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(72px, 1fr));
gap: 8px;
}
.scene-inspector-v2-metrics {
grid-template-columns: 1fr;
}
.scene-inspector-v2-counts {
grid-template-columns: repeat(auto-fit, minmax(72px, 1fr));
}
.scene-inspector-v2-metrics > div,
.scene-inspector-v2-counts > div {
min-width: 0;
@ -4918,16 +4933,18 @@ body.dragging-location [data-drag-type="location"] {
font-weight: 800;
}
.scene-inspector-v2-metric-bar {
.scene-inspector-v2-metric-row {
display: grid;
grid-template-columns: minmax(130px, 180px) minmax(0, 1fr) auto;
align-items: center;
gap: 6px;
}
.scene-inspector-v2-metric-bar-heading {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 8px;
.scene-inspector-v2-metric-row > span {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.scene-inspector-v2-metric-track {
@ -5590,13 +5607,17 @@ body.scene-inspector-editor-resizing {
}
.scene-inspector-v2-timeline .scene-inspector-v2-metrics {
grid-template-columns: repeat(3, minmax(0, 1fr));
grid-template-columns: 1fr;
}
.scene-inspector-v2-timeline .scene-inspector-v2-metric-track {
height: 7px;
}
.scene-inspector-v2-timeline .scene-inspector-v2-metric-row {
grid-template-columns: minmax(118px, 150px) minmax(0, 1fr) auto;
}
@media (max-width: 1100px) {
.scene-inspector-v2-edit.editor-overlay-open {
grid-template-columns: minmax(0, 1fr) 10px minmax(360px, min(var(--scene-editor-width), 52%));

File diff suppressed because one or more lines are too long