ui: collapse advanced story time fields and story time span section

This commit is contained in:
Youzini-afk
2026-04-12 23:38:09 +08:00
parent 0be64eb446
commit e91dd0ed97
2 changed files with 62 additions and 16 deletions

View File

@@ -4819,6 +4819,42 @@
line-height: 1.4; line-height: 1.4;
} }
.bme-node-detail-collapse {
margin: 6px 0 8px;
}
.bme-node-detail-collapse > summary {
font-size: 10px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--bme-on-surface-dim);
cursor: pointer;
user-select: none;
list-style: none;
display: flex;
align-items: center;
gap: 4px;
}
.bme-node-detail-collapse > summary::-webkit-details-marker {
display: none;
}
.bme-node-detail-collapse > summary::before {
content: "▶";
font-size: 8px;
transition: transform 0.15s;
}
.bme-node-detail-collapse[open] > summary::before {
transform: rotate(90deg);
}
.bme-node-detail-collapse > .bme-node-detail-field:first-of-type {
margin-top: 6px;
}
/* --- Scrollbar --- */ /* --- Scrollbar --- */
.bme-tab-content::-webkit-scrollbar, .bme-tab-content::-webkit-scrollbar,
.bme-config-sidebar::-webkit-scrollbar, .bme-config-sidebar::-webkit-scrollbar,

View File

@@ -4082,87 +4082,97 @@ function _buildNodeDetailEditorFragment(raw, { idPrefix = "bme-detail" } = {}) {
storyTime.tense, storyTime.tense,
STORY_TIME_TENSE_OPTIONS, STORY_TIME_TENSE_OPTIONS,
); );
const storyTimeAdvanced = document.createElement("details");
storyTimeAdvanced.className = "bme-node-detail-collapse";
const storyTimeAdvancedSummary = document.createElement("summary");
storyTimeAdvancedSummary.textContent = "高级";
storyTimeAdvanced.appendChild(storyTimeAdvancedSummary);
_appendNodeDetailSelectInput( _appendNodeDetailSelectInput(
fragment, storyTimeAdvanced,
"相对关系", "相对关系",
inputId("story-time-relation"), inputId("story-time-relation"),
storyTime.relation, storyTime.relation,
STORY_TIME_RELATION_OPTIONS, STORY_TIME_RELATION_OPTIONS,
); );
_appendNodeDetailTextInput( _appendNodeDetailTextInput(
fragment, storyTimeAdvanced,
"锚点标签", "锚点标签",
inputId("story-time-anchor-label"), inputId("story-time-anchor-label"),
storyTime.anchorLabel, storyTime.anchorLabel,
); );
_appendNodeDetailSelectInput( _appendNodeDetailSelectInput(
fragment, storyTimeAdvanced,
"置信度", "置信度",
inputId("story-time-confidence"), inputId("story-time-confidence"),
storyTime.confidence, storyTime.confidence,
STORY_TIME_CONFIDENCE_OPTIONS, STORY_TIME_CONFIDENCE_OPTIONS,
); );
_appendNodeDetailSelectInput( _appendNodeDetailSelectInput(
fragment, storyTimeAdvanced,
"来源", "来源",
inputId("story-time-source"), inputId("story-time-source"),
storyTime.source, storyTime.source,
STORY_TIME_SOURCE_OPTIONS, STORY_TIME_SOURCE_OPTIONS,
); );
_appendNodeDetailTextInput( _appendNodeDetailTextInput(
fragment, storyTimeAdvanced,
"段 ID", "段 ID",
inputId("story-time-segment-id"), inputId("story-time-segment-id"),
storyTime.segmentId, storyTime.segmentId,
); );
fragment.appendChild(storyTimeAdvanced);
const storyTimeSpanSection = document.createElement("div"); const storyTimeSpanCollapse = document.createElement("details");
storyTimeSpanSection.className = "bme-node-detail-section"; storyTimeSpanCollapse.className = "bme-node-detail-collapse";
storyTimeSpanSection.textContent = "剧情时间范围"; const storyTimeSpanSummaryEl = document.createElement("summary");
fragment.appendChild(storyTimeSpanSection); storyTimeSpanSummaryEl.className = "bme-node-detail-section";
storyTimeSpanSummaryEl.textContent = "剧情时间范围";
storyTimeSpanCollapse.appendChild(storyTimeSpanSummaryEl);
_appendNodeDetailReadOnly( _appendNodeDetailReadOnly(
fragment, storyTimeSpanCollapse,
"当前范围", "当前范围",
_describeStoryTimeSpanDisplay(storyTimeSpan) || "—", _describeStoryTimeSpanDisplay(storyTimeSpan) || "—",
); );
_appendNodeDetailTextInput( _appendNodeDetailTextInput(
fragment, storyTimeSpanCollapse,
"起点标签", "起点标签",
inputId("story-time-span-start-label"), inputId("story-time-span-start-label"),
storyTimeSpan.startLabel, storyTimeSpan.startLabel,
); );
_appendNodeDetailTextInput( _appendNodeDetailTextInput(
fragment, storyTimeSpanCollapse,
"终点标签", "终点标签",
inputId("story-time-span-end-label"), inputId("story-time-span-end-label"),
storyTimeSpan.endLabel, storyTimeSpan.endLabel,
); );
_appendNodeDetailSelectInput( _appendNodeDetailSelectInput(
fragment, storyTimeSpanCollapse,
"混合时间", "混合时间",
inputId("story-time-span-mixed"), inputId("story-time-span-mixed"),
storyTimeSpan.mixed ? "true" : "false", storyTimeSpan.mixed ? "true" : "false",
STORY_TIME_MIXED_OPTIONS, STORY_TIME_MIXED_OPTIONS,
); );
_appendNodeDetailSelectInput( _appendNodeDetailSelectInput(
fragment, storyTimeSpanCollapse,
"来源", "来源",
inputId("story-time-span-source"), inputId("story-time-span-source"),
storyTimeSpan.source, storyTimeSpan.source,
STORY_TIME_SOURCE_OPTIONS, STORY_TIME_SOURCE_OPTIONS,
); );
_appendNodeDetailTextInput( _appendNodeDetailTextInput(
fragment, storyTimeSpanCollapse,
"起点段 ID", "起点段 ID",
inputId("story-time-span-start-segment-id"), inputId("story-time-span-start-segment-id"),
storyTimeSpan.startSegmentId, storyTimeSpan.startSegmentId,
); );
_appendNodeDetailTextInput( _appendNodeDetailTextInput(
fragment, storyTimeSpanCollapse,
"终点段 ID", "终点段 ID",
inputId("story-time-span-end-segment-id"), inputId("story-time-span-end-segment-id"),
storyTimeSpan.endSegmentId, storyTimeSpan.endSegmentId,
); );
fragment.appendChild(storyTimeSpanCollapse);
_appendNodeDetailNumberInput( _appendNodeDetailNumberInput(
fragment, fragment,