fix(dashboard): regressed tests + Memory scroll + apostrophe copy
- WorkflowNodeEditor.css.test: update selector lookups to the :not(--embedded)-scoped mobile rules (the embedded editor no longer takes over the mobile viewport). - Memory view: add flex-shrink:0 to the description + tab bar so they don't collapse and overlap the scrolling content (regressed when the header moved to ViewHeader). - Settings General: fix literal ''' showing in the GitHub-tracking helper copy (pre-existing FN-6771 localization bug) in the i18n source + component default. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -10,11 +10,16 @@ The title row now comes from the shared .view-header (which supplies the --space
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/*
|
||||
FNXC:Navigation 2026-06-22-02:30:
|
||||
After the header migrated to the shared .view-header (which is flex-shrink:0), the sibling description and tab bar must also be flex-shrink:0. Without it they collapse under the flex column at constrained heights, letting .memory-view-content overlap the header/tabs. The scroll owner is the active tab pane (.memory-*-tab, flex:1 + min-height:0 + overflow-y:auto); the editor container keeps min-height:0 through the chain so CodeMirror bounds itself and never overruns the action bar.
|
||||
*/
|
||||
.memory-view-description {
|
||||
color: var(--text-muted);
|
||||
font-size: 13px;
|
||||
margin: 0;
|
||||
padding: 0 var(--space-lg);
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.memory-view-tabs {
|
||||
@@ -24,6 +29,7 @@ The title row now comes from the shared .view-header (which supplies the --space
|
||||
border-bottom: 1px solid var(--border);
|
||||
margin: var(--space-md) 0 var(--space-lg);
|
||||
padding: 0 var(--space-lg);
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.memory-view-tab {
|
||||
|
||||
@@ -173,7 +173,14 @@ describe("WorkflowNodeEditor mobile CSS contract", () => {
|
||||
|
||||
expect(baseCss).toMatch(/\.wf-editor-modal\s*\{[^}]*min-width\s*:\s*640px\s*;/);
|
||||
|
||||
const editorModalRule = findRule(mobileBlocks, /\.wf-editor-modal,\s*\.wf-create-modal\s*\{[^}]*\}/);
|
||||
// FN-6: the mobile viewport-takeover rule is scoped to the dialog presentation
|
||||
// via :not(.wf-editor-modal--embedded) so the embedded main-view variant keeps its
|
||||
// 100%-of-pane sizing. Match the scoped selector; .wf-create-modal has no embedded
|
||||
// variant and stays unscoped.
|
||||
const editorModalRule = findRule(
|
||||
mobileBlocks,
|
||||
/\.wf-editor-modal:not\(\.wf-editor-modal--embedded\),\s*\.wf-create-modal\s*\{[^}]*\}/,
|
||||
);
|
||||
expect(editorModalRule).toMatch(/width\s*:\s*100vw\s*;/);
|
||||
expect(editorModalRule).toMatch(/height\s*:\s*100dvh\s*;/);
|
||||
expect(editorModalRule).toMatch(/border-radius\s*:\s*0\s*;/);
|
||||
@@ -344,7 +351,13 @@ describe("WorkflowNodeEditor mobile CSS contract", () => {
|
||||
const editorCss = readComponentCss("WorkflowNodeEditor.css");
|
||||
const mobileBlocks = extractMediaBlocks(editorCss, "(max-width: 768px)");
|
||||
|
||||
const overlayRule = findRule(mobileBlocks, /\.modal-overlay:has\(\.wf-editor-modal\),\s*\.modal-overlay:has\(\.wf-create-modal\)\s*\{[^}]*\}/);
|
||||
// FN-6: overlay stretch is likewise scoped to the dialog editor via
|
||||
// :not(.wf-editor-modal--embedded) so the embedded variant's overlay-less main view
|
||||
// isn't forced full-bleed. .wf-create-modal stays unscoped.
|
||||
const overlayRule = findRule(
|
||||
mobileBlocks,
|
||||
/\.modal-overlay:has\(\.wf-editor-modal:not\(\.wf-editor-modal--embedded\)\),\s*\.modal-overlay:has\(\.wf-create-modal\)\s*\{[^}]*\}/,
|
||||
);
|
||||
expect(overlayRule).toMatch(/padding-top\s*:\s*0\s*;/);
|
||||
expect(overlayRule).toMatch(/align-items\s*:\s*stretch\s*;/);
|
||||
|
||||
|
||||
@@ -190,7 +190,15 @@ export function GeneralSection({ scopeBanner, form, setForm, projectId, addToast
|
||||
<option value="new-tasks">{t("settings.general.onForNewTasks", "On for new tasks")}</option>
|
||||
</select>
|
||||
<small>{t("settings.general.controlsWhetherNewlyCreatedTasksHaveGitHubIssue", " Controls whether newly created tasks have GitHub issue tracking enabled by default. Individual tasks can still override this from the task detail modal. ")}</small>
|
||||
<small>{t("settings.general.trackingIssuesUseThisTaskAposSTitle", " Tracking issues use this task's title. If a task has no title yet, Fusion can summarize its description using the title summarization model in Project Models. ")}{!form.autoSummarizeTitles && !form.useAiMergeCommitSummary && !form.githubTrackingEnabledByDefault
|
||||
{/*
|
||||
FNXC:SettingsGeneral 2026-06-22-03:20:
|
||||
Tracking-issue helper copy. The FN-6771 JSX→t() extraction left a raw HTML
|
||||
entity ("'") in this default string. As a t() argument the string is a
|
||||
plain JS value (not JSX-decoded), so the entity rendered verbatim as the
|
||||
literal "'" instead of an apostrophe. Use a real apostrophe so the copy
|
||||
reads correctly in both modal and embedded presentations.
|
||||
*/}
|
||||
<small>{t("settings.general.trackingIssuesUseThisTaskAposSTitle", " Tracking issues use this task's title. If a task has no title yet, Fusion can summarize its description using the title summarization model in Project Models. ")}{!form.autoSummarizeTitles && !form.useAiMergeCommitSummary && !form.githubTrackingEnabledByDefault
|
||||
? t("settings.general.enableSummarizationInProjectModelsToConfigureThatModel", " Enable summarization in Project Models to configure that model.")
|
||||
: ""}
|
||||
</small>
|
||||
|
||||
@@ -5741,7 +5741,7 @@
|
||||
"showTheFloatingChatButtonInTheDashboard": "Show the floating chat button in the dashboard. Chat is still accessible from the Chat tab in the mobile navigation.",
|
||||
"taskPrefix": "Task Prefix",
|
||||
"todoThreshold": "Todo threshold",
|
||||
"trackingIssuesUseThisTaskAposSTitle": " Tracking issues use this task's title. If a task has no title yet, Fusion can summarize its description using the title summarization model in Project Models. ",
|
||||
"trackingIssuesUseThisTaskAposSTitle": " Tracking issues use this task's title. If a task has no title yet, Fusion can summarize its description using the title summarization model in Project Models. ",
|
||||
"updateAvailablePrefix": "v{{version}} available",
|
||||
"updateCheckFailed": "Failed to check for updates",
|
||||
"updateFailed": "Update failed",
|
||||
|
||||
Reference in New Issue
Block a user