feat: complete legacy parity and modernize operator UI

This commit is contained in:
2026-07-22 12:34:46 +09:00
parent fc4007d676
commit 939c252d23
149 changed files with 26515 additions and 1736 deletions

View File

@@ -31,6 +31,7 @@ test("UC4 renders original headings and action order in the Web vertical workspa
assert.match(render,
/\["six-row-current", "6종목 현재가"\][\s\S]*\["twelve-row-current", "12종목 현재가"\][\s\S]*\["five-row-current", "현재가"\][\s\S]*\["five-row-expected", "예상체결가"\]/u);
assert.match(styles, /\.theme-workspace\s*\{[^}]*grid-template-rows:/u);
assert.match(styles, /\.theme-search-truncation\s*\{/u);
assert.doesNotMatch(styles, /\.theme-body\s*\{/u);
assert.doesNotMatch(app, /theme-nxt-session/u);
});
@@ -53,13 +54,17 @@ test("UC4 defers a single click for double-click activation and preserves the re
const updater = section("function updateThemeWorkspace(workspace, theme)", "function renderTheme(state)");
assert.match(themeClick,
/clearDelayedClick\(themeResultClickTimer\);[\s\S]*const resultId = themeResult\.dataset\.themeResultId;[\s\S]*themeResultClickTimer = window\.setTimeout\(function \(\) \{[\s\S]*themeResultClickTimer = null;[\s\S]*send\("select-theme", \{ resultId: resultId \}\);[\s\S]*\}, 250\);/u);
/clearDelayedClick\(themeResultClickTimer\);[\s\S]*const resultId = themeResult\.dataset\.themeResultId;[\s\S]*beginThemeResultPendingSelection\(themeResult\)[\s\S]*themeResultClickTimer = deferLegacySingleClick\(function \(\) \{[\s\S]*themeResultClickTimer = null;[\s\S]*send\("select-theme", \{ resultId: resultId \}\)[\s\S]*pending\.sent = true[\s\S]*clearThemeResultPendingSelection\(true\)[\s\S]*\}\);/u);
assert.match(doubleClick,
/clearDelayedClick\(themeResultClickTimer\);[\s\S]*themeResultClickTimer = null;[\s\S]*send\("activate-theme-result", \{/u);
/clearDelayedClick\(themeResultClickTimer\);[\s\S]*themeResultClickTimer = null;[\s\S]*send\("activate-theme-result", \{[\s\S]*pending\.sent = true/u);
assert.match(render,
/existingWorkspace && structureKey === themeRenderStructureKey[\s\S]*updateThemeWorkspace\(existingWorkspace, theme\);[\s\S]*return;/u);
assert.doesNotMatch(updater, /categoryTree\.replaceChildren|results\.replaceChildren/u);
assert.match(updater, /document\.activeElement !== input/u);
assert.match(updater, /syncSearchDraft\(input, theme\.query\)/u);
assert.match(updater,
/\.theme-search-truncation[\s\S]*theme\.searchIsTruncated !== true[\s\S]*최대 5,000건/u);
assert.match(render,
/searchTruncation\.className = "theme-search-truncation"[\s\S]*resultsTitle\.appendChild\(searchTruncation\)/u);
});
test("UC4 delegates the NXT expected-price warning to native instead of disabling the button", () => {