@musnows/scriverse 0.5.8 → 0.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -81,7 +81,19 @@ export function occurrenceRoleLabel(value) {
81
81
  }
82
82
 
83
83
  export function searchResultTypeLabel(value) {
84
- return enumLabel({ chapter: "章节", setting: "设定", character: "角色", race: "种族", organization: "组织" }, value, "其他资料");
84
+ return enumLabel({
85
+ chapter: "章节",
86
+ setting: "设定",
87
+ character: "角色",
88
+ race: "种族",
89
+ organization: "组织",
90
+ "timeline-track": "独立时间轴",
91
+ "timeline-event": "时间线事件",
92
+ relationship: "人物关系",
93
+ "chapter-outline": "章节大纲",
94
+ foreshadow: "伏笔",
95
+ review: "审核项"
96
+ }, value, "其他资料");
85
97
  }
86
98
 
87
99
  export function characterStateFieldLabel(value) {
@@ -1,12 +1,13 @@
1
1
  export type GlobalSearchTarget =
2
- | { kind: "chapter"; type: "chapter"; id: string; module: "editor" }
2
+ | { kind: "chapter"; type: "chapter"; id: string; module: "editor"; startLine?: number; endLine?: number }
3
3
  | {
4
4
  kind: "entity";
5
- type: "setting" | "character" | "race" | "organization";
5
+ type: "setting" | "character" | "race" | "organization" | "timeline-track" | "timeline-event" | "relationship" | "chapter-outline" | "foreshadow" | "review";
6
6
  id: string;
7
- module: "settings" | "characters" | "races" | "organizations";
8
- entity: "setting" | "character" | "race" | "organization";
7
+ module: "settings" | "characters" | "races" | "organizations" | "timeline" | "relationships" | "outlines" | "reviews";
8
+ entity: "setting" | "character" | "race" | "organization" | "timeline-track" | "timeline-event" | "relationship" | "chapter-outline" | "foreshadow" | "review";
9
9
  apiPath: string;
10
10
  };
11
11
 
12
- export function resolveGlobalSearchTarget(result?: { type?: unknown; id?: unknown }): GlobalSearchTarget | null;
12
+ export function splitGlobalSearchHighlight(value: unknown, query: unknown): Array<{ text: string; match: boolean }>;
13
+ export function resolveGlobalSearchTarget(result?: { type?: unknown; id?: unknown; startLine?: unknown; endLine?: unknown }): GlobalSearchTarget | null;
@@ -2,22 +2,63 @@ const entityTargets = Object.freeze({
2
2
  setting: Object.freeze({ module: "settings", entity: "setting", resource: "settings" }),
3
3
  character: Object.freeze({ module: "characters", entity: "character", resource: "characters" }),
4
4
  race: Object.freeze({ module: "races", entity: "race", resource: "races" }),
5
- organization: Object.freeze({ module: "organizations", entity: "organization", resource: "organizations" })
5
+ organization: Object.freeze({ module: "organizations", entity: "organization", resource: "organizations" }),
6
+ "timeline-track": Object.freeze({ module: "timeline", entity: "timeline-track", resource: "timeline-tracks" }),
7
+ "timeline-event": Object.freeze({ module: "timeline", entity: "timeline-event", resource: "timeline" }),
8
+ relationship: Object.freeze({ module: "relationships", entity: "relationship", resource: "relationships" }),
9
+ "chapter-outline": Object.freeze({ module: "outlines", entity: "chapter-outline", resource: "chapters", suffix: "outline" }),
10
+ foreshadow: Object.freeze({ module: "outlines", entity: "foreshadow", resource: "foreshadows" }),
11
+ review: Object.freeze({ module: "reviews", entity: "review", resource: "reviews" })
6
12
  });
7
13
 
14
+ function positiveLine(value) {
15
+ const line = Number(value);
16
+ return Number.isInteger(line) && line > 0 ? line : null;
17
+ }
18
+
19
+ export function splitGlobalSearchHighlight(value, query) {
20
+ const text = String(value ?? "");
21
+ const needle = String(query ?? "").trim();
22
+ if (!text || !needle) return text ? [{ text, match: false }] : [];
23
+ const lowerText = text.toLocaleLowerCase("zh-CN");
24
+ const lowerNeedle = needle.toLocaleLowerCase("zh-CN");
25
+ const segments = [];
26
+ let cursor = 0;
27
+ while (cursor < text.length) {
28
+ const index = lowerText.indexOf(lowerNeedle, cursor);
29
+ if (index < 0) break;
30
+ if (index > cursor) segments.push({ text: text.slice(cursor, index), match: false });
31
+ segments.push({ text: text.slice(index, index + needle.length), match: true });
32
+ cursor = index + needle.length;
33
+ }
34
+ if (cursor < text.length) segments.push({ text: text.slice(cursor), match: false });
35
+ return segments.length ? segments : [{ text, match: false }];
36
+ }
37
+
8
38
  export function resolveGlobalSearchTarget(result = {}) {
9
39
  const type = String(result.type ?? "").trim();
10
40
  const id = String(result.id ?? "").trim();
11
41
  if (!id) return null;
12
- if (type === "chapter") return { kind: "chapter", type, id, module: "editor" };
42
+ if (type === "chapter") {
43
+ const startLine = positiveLine(result.startLine);
44
+ const endLine = positiveLine(result.endLine);
45
+ return {
46
+ kind: "chapter",
47
+ type,
48
+ id,
49
+ module: "editor",
50
+ ...(startLine ? { startLine, endLine: endLine && endLine >= startLine ? endLine : startLine } : {})
51
+ };
52
+ }
13
53
  const target = entityTargets[type];
14
54
  if (!target) return null;
55
+ const encodedId = encodeURIComponent(id);
15
56
  return {
16
57
  kind: "entity",
17
58
  type,
18
59
  id,
19
60
  module: target.module,
20
61
  entity: target.entity,
21
- apiPath: `/api/${target.resource}/${encodeURIComponent(id)}`
62
+ apiPath: `/api/${target.resource}/${encodedId}${target.suffix ? `/${target.suffix}` : ""}`
22
63
  };
23
64
  }
@@ -10,7 +10,7 @@
10
10
  <link rel="icon" href="/icon.svg?v=20260712" type="image/svg+xml">
11
11
  <link rel="manifest" href="/site.webmanifest">
12
12
  <link rel="stylesheet" href="/vendor/vditor/dist/index.css?v=3.11.2">
13
- <link rel="stylesheet" href="/styles.css?v=20260728-shelf-cover-scale-v1">
13
+ <link rel="stylesheet" href="/styles.css?v=20260729-analysis-rerun-vditor-ui-v1">
14
14
  </head>
15
15
  <body class="auth-pending">
16
16
  <section id="auth-view" class="auth-view hidden" aria-labelledby="auth-title">
@@ -557,7 +557,21 @@
557
557
  </div>
558
558
  <div class="access-dialog-body">
559
559
  <form id="search-form" class="search-form">
560
- <label>关键词<input id="search-query" name="query" type="search" maxlength="100" placeholder="搜索正文、设定、角色、种族或组织" required></label>
560
+ <label>关键词<input id="search-query" name="query" type="search" maxlength="500" placeholder="搜索正文、设定、人物、时间线、关系、大纲或伏笔" required></label>
561
+ <label>资料类型<select id="search-type" name="type">
562
+ <option value="">全部资料</option>
563
+ <option value="chapter">章节</option>
564
+ <option value="setting">设定</option>
565
+ <option value="character">角色</option>
566
+ <option value="race">种族</option>
567
+ <option value="organization">组织</option>
568
+ <option value="timeline-track">独立时间轴</option>
569
+ <option value="timeline-event">时间线事件</option>
570
+ <option value="relationship">人物关系</option>
571
+ <option value="chapter-outline">章节大纲</option>
572
+ <option value="foreshadow">伏笔</option>
573
+ <option value="review">审核项</option>
574
+ </select></label>
561
575
  <button class="primary-button" type="submit">搜索</button>
562
576
  </form>
563
577
  <div id="search-results" class="search-results" aria-live="polite">
@@ -696,12 +710,11 @@
696
710
  <label>Toast 提示位置<select id="toast-position" name="toastPosition" aria-label="Toast 提示位置"><option value="bottom-right">右下角(默认)</option><option value="top-right">右上角</option></select></label>
697
711
  <small>该设置对所有用户生效,保存后的提示会立即显示在新位置。</small>
698
712
  <fieldset class="pagination-settings-fieldset">
699
- <legend>各模块单页数量</legend>
700
- <small>每个模块独立设置,允许 10–100 条;默认均为 30 条。</small>
713
+ <legend>可分页模块单页数量</legend>
714
+ <small>以下模块独立设置,允许 10–100 条;默认均为 30 条。种族层级始终完整展示。</small>
701
715
  <div class="pagination-settings-grid">
702
716
  <label>设定库<input id="page-size-settings" name="pageSizeSettings" type="number" min="10" max="100" step="1" required aria-label="设定库单页数量"></label>
703
717
  <label>角色列表<input id="page-size-characters" name="pageSizeCharacters" type="number" min="10" max="100" step="1" required aria-label="角色列表单页数量"></label>
704
- <label>种族列表<input id="page-size-races" name="pageSizeRaces" type="number" min="10" max="100" step="1" required aria-label="种族列表单页数量"></label>
705
718
  <label>组织列表<input id="page-size-organizations" name="pageSizeOrganizations" type="number" min="10" max="100" step="1" required aria-label="组织列表单页数量"></label>
706
719
  <label>时间线事件<input id="page-size-timeline" name="pageSizeTimeline" type="number" min="10" max="100" step="1" required aria-label="时间线事件单页数量"></label>
707
720
  <label>大纲与伏笔<input id="page-size-outlines" name="pageSizeOutlines" type="number" min="10" max="100" step="1" required aria-label="大纲与伏笔单页数量"></label>
@@ -739,7 +752,7 @@
739
752
  <button id="api-key-reset-button" class="primary-button" type="button">生成 API Key</button>
740
753
  <div id="api-key-result" class="api-key-result hidden">
741
754
  <label>请立即保存<input id="api-key-value" readonly spellcheck="false"></label>
742
- <button id="api-key-copy-button" type="button">复制</button>
755
+ <button id="api-key-copy-button" class="ghost-button" type="button"><svg class="message-action-icon" viewBox="0 0 24 24" aria-hidden="true"><rect x="8" y="8" width="12" height="12" rx="2"/><path d="M16 8V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h2"/></svg>复制</button>
743
756
  </div>
744
757
  </div>
745
758
  </section>
@@ -863,6 +876,6 @@
863
876
  <div id="auth-loading" class="auth-loading" role="status" aria-label="正在载入工作台"></div>
864
877
  <script id="vditorIconScript" src="/vendor/vditor/dist/js/icons/ant.js?v=3.11.2"></script>
865
878
  <script src="/vendor/vditor/dist/index.min.js?v=3.11.2"></script>
866
- <script type="module" src="/app.js?v=20260728-chapter-purge-v1"></script>
879
+ <script type="module" src="/app.js?v=20260729-analysis-rerun-vditor-ui-v1"></script>
867
880
  </body>
868
881
  </html>
@@ -83,38 +83,3 @@ export function buildRaceForest(races) {
83
83
  };
84
84
  return sort(roots);
85
85
  }
86
-
87
- export function paginateRaceForest(races, page, limit) {
88
- const safeLimit = Math.max(1, Math.floor(Number(limit) || 1));
89
- const forest = buildRaceForest(races);
90
- const pages = [];
91
- let currentItems = [];
92
- let currentItemCount = 0;
93
- const subtreeSize = (node) => 1 + node.children.reduce((total, child) => total + subtreeSize(child), 0);
94
-
95
- for (const root of forest) {
96
- const rootItemCount = subtreeSize(root);
97
- if (currentItems.length && currentItemCount + rootItemCount > safeLimit) {
98
- pages.push({ items: currentItems, itemCount: currentItemCount });
99
- currentItems = [];
100
- currentItemCount = 0;
101
- }
102
- currentItems.push(root);
103
- currentItemCount += rootItemCount;
104
- }
105
- if (currentItems.length || !pages.length) pages.push({ items: currentItems, itemCount: currentItemCount });
106
-
107
- const pageCount = pages.length;
108
- const safePage = Math.min(Math.max(1, Number(page) || 1), pageCount);
109
- const selectedPage = pages[safePage - 1];
110
- return {
111
- items: selectedPage.items,
112
- itemCount: selectedPage.itemCount,
113
- page: safePage,
114
- limit: safeLimit,
115
- total: races.length,
116
- pageCount,
117
- hasMore: safePage < pageCount,
118
- nextPage: safePage < pageCount ? safePage + 1 : null
119
- };
120
- }
@@ -509,7 +509,7 @@ input[type="checkbox"][hidden] { display: none; }
509
509
 
510
510
  .left-panel, .ai-panel { position: relative; min-height: 0; background: var(--panel); }
511
511
  .left-panel { display: flex; flex-direction: column; border-right: 1px solid var(--line); padding: 0; overflow: hidden; }
512
- .left-panel-body { flex: 1 1 auto; min-height: 0; padding: 18px 14px 16px; overflow-y: auto; }
512
+ .left-panel-body { flex: 1 1 auto; min-height: 0; padding: 18px 28px 16px 14px; overflow-y: auto; scrollbar-gutter: stable; }
513
513
  .ai-panel { border-left: 1px solid var(--line); display: flex; flex-direction: column; padding: 14px 16px 18px; min-width: 0; }
514
514
  .panel-collapse-button { z-index: 8; flex: 0 0 auto; width: 24px; height: 24px; padding: 0; border: 1px solid var(--line); border-radius: 4px; background: var(--panel); color: var(--muted); font-size: 18px; line-height: 1; }
515
515
  .ai-heading #ai-panel-toggle { flex-basis: 30px; width: 30px; height: 30px; }
@@ -818,9 +818,9 @@ body.work-viewer-mode [data-item-list-remove],
818
818
  body.work-viewer-mode [data-structured-list-add],
819
819
  body.work-viewer-mode [data-structured-list-remove],
820
820
  body.work-viewer-mode .character-editor-actions { display: none !important; }
821
- .search-form { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; gap: 10px; margin: 0; }
821
+ .search-form { display: grid; grid-template-columns: minmax(0, 1fr) minmax(150px, .36fr) auto; align-items: end; gap: 10px; margin: 0; }
822
822
  .search-form label { display: grid; gap: 6px; color: var(--muted); font-size: 11px; }
823
- .search-form input {
823
+ .search-form input, .search-form select {
824
824
  width: 100%;
825
825
  min-height: 38px;
826
826
  padding: 9px 10px;
@@ -832,6 +832,7 @@ body.work-viewer-mode .character-editor-actions { display: none !important; }
832
832
  }
833
833
  .search-form .primary-button { min-height: 38px; white-space: nowrap; }
834
834
  .search-results { display: grid; gap: 8px; max-height: min(52vh, 480px); overflow: auto; }
835
+ .search-results-summary { margin: 0; padding: 2px 2px 5px; color: var(--muted); font-size: 10px; }
835
836
  .search-results-empty, .search-results-status {
836
837
  margin: 0;
837
838
  padding: 28px 12px;
@@ -882,6 +883,17 @@ body.work-viewer-mode .character-editor-actions { display: none !important; }
882
883
  -webkit-line-clamp: 2;
883
884
  -webkit-box-orient: vertical;
884
885
  }
886
+ .search-result mark { border-radius: 2px; padding: 0 1px; background: color-mix(in srgb, var(--accent) 20%, transparent); color: var(--ink); }
887
+ .search-result-details { display: flex; min-width: 0; flex-wrap: wrap; align-items: center; gap: 5px; color: var(--muted); }
888
+ .search-result-details small { overflow: hidden; margin-right: auto; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
889
+ .search-result-chip { padding: 2px 6px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface); font-size: 9px; line-height: 1.3; }
890
+ .search-result-chip-exact { border-color: color-mix(in srgb, var(--accent) 35%, var(--line)); color: var(--accent-dark); }
891
+ .search-result-chip-phonetic { border-color: color-mix(in srgb, var(--green) 35%, var(--line)); color: var(--green); }
892
+ .search-result-preview { display: grid; gap: 0; margin: 0; }
893
+ .search-result-preview > div { display: grid; grid-template-columns: minmax(90px, .28fr) minmax(0, 1fr); gap: 14px; padding: 11px 2px; border-bottom: 1px solid var(--line); }
894
+ .search-result-preview > div:last-child { border-bottom: 0; }
895
+ .search-result-preview dt { color: var(--muted); font-size: 10px; }
896
+ .search-result-preview dd { margin: 0; color: var(--ink); font-size: 12px; line-height: 1.6; white-space: pre-wrap; }
885
897
  .work-access-field { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-soft); }
886
898
  .work-access-field > div { display: grid; gap: 6px; min-width: 0; }
887
899
  .work-access-field strong { color: var(--ink); font-size: 12px; }
@@ -982,7 +994,7 @@ body.work-viewer-mode .character-editor-actions { display: none !important; }
982
994
  .api-key-result.hidden { display: none; }
983
995
  .api-key-result label { display: grid; gap: 6px; color: var(--muted); font-size: 11px; }
984
996
  .api-key-result input { width: 100%; min-height: 38px; padding: 9px 10px; background: var(--surface); font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 11px; }
985
- .api-key-result button { min-height: 38px; }
997
+ .api-key-result button { display: inline-flex; align-items: center; gap: 6px; min-height: 38px; }
986
998
  .book-access-badge { display: inline-flex; width: fit-content; margin-top: 7px; padding: 2px 7px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); color: var(--accent-dark); font-size: 9px; }
987
999
  .book-shelf { display: grid; grid-template-columns: repeat(auto-fill, minmax(205px, 1fr)); gap: clamp(22px, 3vw, 38px); width: 100%; min-width: 0; max-width: 1400px; margin: 0 auto; }
988
1000
  .book-card { position: relative; min-width: 0; border: 0; background: transparent; text-align: left; }
@@ -1334,6 +1346,8 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
1334
1346
  .task-auto-run-copy { display: grid; grid-column: 1; gap: 4px; }
1335
1347
  .task-auto-run-copy strong { font-size: 13px; }
1336
1348
  .task-auto-run-copy small { color: var(--muted); font-size: 10px; line-height: 1.5; }
1349
+ .task-auto-run-actions { display: flex; grid-column: 2; grid-row: 1; align-items: start; justify-content: flex-end; min-height: 32px; }
1350
+ .task-auto-run-actions:empty { display: none; }
1337
1351
  .task-auto-run-controls {
1338
1352
  display: flex;
1339
1353
  grid-column: 1;
@@ -1357,7 +1371,11 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
1357
1371
  align-self: center;
1358
1372
  margin: 0;
1359
1373
  }
1374
+ .task-auto-run-help { grid-column: 1; margin: -4px 0 0; color: var(--muted); font-size: 9px; line-height: 1.45; }
1360
1375
  .task-auto-run-meta { grid-column: 1; margin: 0; color: var(--muted); font-size: 10px; }
1376
+ .task-auto-run-alert { display: grid; grid-column: 1; gap: 3px; margin: 0; padding: 9px 10px; border: 1px solid color-mix(in srgb, var(--accent) 30%, var(--line)); border-radius: 4px; background: color-mix(in srgb, var(--accent) 8%, var(--surface)); font-size: 10px; line-height: 1.45; }
1377
+ .task-auto-run-alert strong { color: var(--ink); }
1378
+ .task-auto-run-alert span, .task-auto-run-alert small { color: var(--muted); }
1361
1379
  .task-auto-run-progress {
1362
1380
  display: grid;
1363
1381
  grid-column: 2;
@@ -1373,6 +1391,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
1373
1391
  .task-auto-run-progress-ring-value { stroke: var(--accent); stroke-linecap: round; transition: stroke-dasharray .25s ease; }
1374
1392
  .task-auto-run-progress-ring.is-running svg { animation: task-auto-run-active 1.8s ease-in-out infinite; }
1375
1393
  .task-auto-run-progress-ring.is-running .task-auto-run-progress-ring-value { stroke: var(--task-running); }
1394
+ .task-auto-run-progress-ring.is-paused .task-auto-run-progress-ring-value { stroke: var(--accent); }
1376
1395
  .task-auto-run-progress-ring-label { position: absolute; inset: 22px; display: grid; align-content: center; justify-items: center; gap: 3px; text-align: center; }
1377
1396
  .task-auto-run-progress-ring-label strong { color: var(--ink); font-family: var(--font-latin), monospace; font-size: 22px; font-weight: 600; line-height: 1; }
1378
1397
  .task-auto-run-progress-ring-label span { color: var(--muted); font-size: 9px; line-height: 1.35; }
@@ -1386,6 +1405,8 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
1386
1405
  .task-auto-run-progress-bar.is-running { animation: task-auto-run-active 1.8s ease-in-out infinite; }
1387
1406
  .task-auto-run-progress-bar.is-running::-webkit-progress-value { background: var(--task-running); }
1388
1407
  .task-auto-run-progress-bar.is-running::-moz-progress-bar { background: var(--task-running); }
1408
+ .task-auto-run-progress-bar.is-paused::-webkit-progress-value { background: var(--accent); }
1409
+ .task-auto-run-progress-bar.is-paused::-moz-progress-bar { background: var(--accent); }
1389
1410
  .task-status-cell { width: 116px; white-space: nowrap; }
1390
1411
  .task-status-badge {
1391
1412
  --task-status-color: var(--muted);
@@ -1539,6 +1560,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
1539
1560
  .task-result-json-content textarea { width: 100%; min-height: 360px; max-height: 52vh; resize: vertical; overflow: auto; margin: 0; padding: 10px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface-soft); color: var(--ink); font-family: var(--font-latin), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 10px; line-height: 1.55; tab-size: 2; white-space: pre; }
1540
1561
  .task-detail-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin-top: 12px; }
1541
1562
  .task-detail-actions small { color: var(--muted); }
1563
+ .task-rerun-model-intro { grid-column: 1 / -1; color: var(--muted); }
1542
1564
  .relationship-identity-repair-entry { display: flex; align-items: center; justify-content: space-between; gap: 14px; margin-top: 10px; padding: 12px; border: 1px solid color-mix(in srgb, var(--accent) 40%, var(--line)); border-radius: 6px; background: color-mix(in srgb, var(--accent) 7%, var(--surface)); }
1543
1565
  .relationship-identity-repair-entry > div { display: grid; gap: 4px; }
1544
1566
  .relationship-identity-repair-entry strong { color: var(--ink); }
@@ -1901,7 +1923,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
1901
1923
  .galaxy-node.is-dragging { cursor: grabbing; z-index: 6; }
1902
1924
  .galaxy-close { position: fixed; z-index: 8; top: 22px; right: 25px; width: 42px; height: 42px; border: 1px solid rgba(255,255,255,.22); border-radius: 50%; background: rgba(5,7,13,.62); color: #fff; font-size: 25px; }
1903
1925
  .galaxy-stats { position: fixed; z-index: 7; left: 22px; bottom: 20px; color: rgba(235,245,255,.82); font-size: 11px; }
1904
- .galaxy-controls { position: fixed; z-index: 7; right: 23px; top: 50%; display: grid; width: 128px; gap: 7px; transform: translateY(-50%); padding: 10px; border: 1px solid rgba(255,255,255,.12); border-radius: 8px; background: rgba(5,7,13,.66); backdrop-filter: blur(12px); }
1926
+ .galaxy-controls { position: fixed; z-index: 7; right: 23px; top: 50%; display: grid; width: 104px; gap: 7px; transform: translateY(-50%); padding: 10px; border: 1px solid rgba(255,255,255,.12); border-radius: 8px; background: rgba(5,7,13,.66); backdrop-filter: blur(12px); }
1905
1927
  .galaxy-controls button { border: 1px solid rgba(255,255,255,.14); border-radius: 5px; padding: 7px; background: rgba(255,255,255,.05); color: #dcecff; font-size: 9px; }
1906
1928
  .galaxy-legend { position: fixed; z-index: 7; right: 22px; bottom: 18px; display: grid; grid-template-columns: 1fr 1fr; gap: 7px 12px; margin: 0; padding: 11px; list-style: none; border: 1px solid rgba(255,255,255,.12); border-radius: 7px; background: rgba(5,7,13,.66); color: rgba(235,245,255,.8); font-size: 9px; }.galaxy-legend li { display: flex; align-items: center; gap: 5px; }
1907
1929
  .galaxy-detail { position: fixed; z-index: 7; left: 22px; top: 22px; width: min(300px, 30vw); max-height: 55vh; overflow: auto; padding: 15px; border: 1px solid rgba(255,255,255,.14); border-radius: 8px; background: rgba(5,7,13,.74); backdrop-filter: blur(14px); }.galaxy-detail strong, .galaxy-detail small { display: block; }.galaxy-detail strong { font-size: 18px; }.galaxy-detail small, .galaxy-detail p { color: rgba(220,235,250,.65); font-size: 9px; }.galaxy-detail ul { display: grid; gap: 7px; padding: 0; list-style: none; font-size: 9px; }.galaxy-detail li { display: flex; align-items: center; gap: 6px; }
@@ -2165,6 +2187,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2165
2187
  .chapter-insight-toast-heading { display: flex; min-width: 0; align-items: center; gap: 8px; }
2166
2188
  .chapter-insight-toast-heading strong { font-size: 12px; }
2167
2189
  .chapter-insight-toast-heading span { overflow: hidden; color: var(--accent-dark); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
2190
+ .chapter-insight-toast-heading .chapter-insight-toast-chapter-title { min-width: 0; color: var(--ink); font-size: 11px; }
2168
2191
  .chapter-insight-toast-close { flex: 0 0 auto; min-height: 28px; padding: 5px 9px; font-size: 10px; }
2169
2192
  .chapter-insight-toast-body { display: grid; gap: 10px; min-height: 0; padding: 12px 14px 14px; overflow-y: auto; color: var(--muted); font-size: 11px; line-height: 1.6; overscroll-behavior: contain; }
2170
2193
  .chapter-insight-toast-body p { margin: 0; white-space: pre-wrap; }
@@ -2479,9 +2502,10 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2479
2502
  .vditor-editor-host .vditor-toolbar { display: flex; align-items: center; flex: 0 0 auto; }
2480
2503
  .vditor-editor-host .markdown-word-count { display: inline-flex; align-items: center; align-self: center; min-height: 28px; margin-left: 24px; padding: 0 10px; color: var(--muted); font: 10px/1 var(--font-latin), var(--font-cjk), sans-serif; white-space: nowrap; }
2481
2504
  .vditor-editor-host .vditor-content { position: relative; }
2482
- .vditor-editor-host .vditor-line-numbers { display: none; position: absolute; z-index: 1; inset: 0 auto 0 0; width: 42px; padding: 16px 8px 16px 0; overflow: hidden; border-right: 1px solid var(--line); background: color-mix(in srgb, var(--surface-soft) 88%, transparent); color: var(--muted); font: 12px/1.75 var(--font-latin), monospace; text-align: right; user-select: none; pointer-events: none; }
2483
- .vditor-editor-host.vditor.show-line-numbers .vditor-line-numbers { display: grid; align-content: start; }
2484
- .vditor-editor-host.vditor.show-line-numbers .vditor-ir, .vditor-editor-host.vditor.show-line-numbers .vditor-wysiwyg, .vditor-editor-host.vditor.show-line-numbers .vditor-sv textarea { padding-left: 42px; }
2505
+ .vditor-editor-host .vditor-line-numbers { display: none; position: absolute; z-index: 1; inset: 0 auto 0 0; width: 42px; padding: 0; overflow: hidden; border-right: 1px solid var(--line); background: color-mix(in srgb, var(--surface-soft) 88%, transparent); color: var(--muted); font: 12px/1.75 var(--font-latin), monospace; text-align: right; user-select: none; pointer-events: none; will-change: transform; }
2506
+ .vditor-editor-host.vditor.show-line-numbers .vditor-line-numbers { display: block; }
2507
+ .vditor-editor-host .vditor-line-number { position: absolute; top: 0; right: 8px; left: 0; display: block; box-sizing: border-box; overflow: hidden; padding: 0; text-align: right; white-space: nowrap; }
2508
+ .vditor-editor-host.vditor.show-line-numbers .vditor-ir, .vditor-editor-host.vditor.show-line-numbers .vditor-wysiwyg, .vditor-editor-host.vditor.show-line-numbers .vditor-sv, .vditor-editor-host.vditor.show-line-numbers .vditor-sv textarea { padding-left: 42px; }
2485
2509
  .vditor-editor-host .vditor-line-number-button[aria-pressed="true"] { color: var(--accent-dark); background: color-mix(in srgb, var(--accent) 16%, transparent); }
2486
2510
  .vditor-editor-host .vditor-content { min-height: 0; }
2487
2511
  .vditor-editor-host .vditor-reset { color: var(--ink); font-family: var(--font-cjk), var(--font-latin), sans-serif; }
@@ -2692,7 +2716,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2692
2716
  }
2693
2717
 
2694
2718
  @media (max-width: 1100px) {
2695
- .left-panel-body { padding-inline: 10px; }
2719
+ .left-panel-body { padding-inline: 10px 24px; }
2696
2720
  .ai-panel { padding-inline: 14px; }
2697
2721
  .editor-toolbar { grid-template-areas: "path" "title" "actions"; grid-template-columns: minmax(0, 1fr); gap: 12px; padding-inline: 6%; }
2698
2722
  .editor-actions { justify-content: flex-end; flex-wrap: wrap; }
@@ -2706,7 +2730,9 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
2706
2730
  .top-actions .ghost-button:not(.settings-button) { display: none; }
2707
2731
  .book-shelf { grid-template-columns: repeat(3, minmax(180px, 1fr)); }
2708
2732
  .task-auto-run-panel { grid-template-columns: minmax(0, 1fr); column-gap: 0; }
2709
- .task-auto-run-copy, .task-auto-run-controls, .task-auto-run-meta { grid-column: 1; }
2733
+ .task-auto-run-copy, .task-auto-run-actions, .task-auto-run-controls, .task-auto-run-meta { grid-column: 1; }
2734
+ .task-auto-run-actions { grid-row: auto; }
2735
+ .task-auto-run-help, .task-auto-run-alert { grid-column: 1; }
2710
2736
  .task-auto-run-progress { grid-column: 1; grid-row: auto; justify-self: stretch; width: 100%; }
2711
2737
  .task-auto-run-progress-ring { display: none; }
2712
2738
  .task-auto-run-progress-bar-layout { display: grid; gap: 6px; width: 100%; }
@@ -0,0 +1,14 @@
1
+ export type VditorLineRect = {
2
+ top: number;
3
+ height: number;
4
+ };
5
+
6
+ export type VditorLineNumberRow = VditorLineRect & {
7
+ blank: boolean;
8
+ };
9
+
10
+ export function normalizeVditorLineRects(rects: VditorLineRect[], tolerance?: number): VditorLineRect[];
11
+ export function buildVditorLineNumberRows(
12
+ rects: VditorLineRect[],
13
+ options?: { lineHeight?: number; blankLineCount?: number }
14
+ ): VditorLineNumberRow[];
@@ -0,0 +1,51 @@
1
+ export function normalizeVditorLineRects(rects, tolerance = 1.5) {
2
+ const rows = [];
3
+ const sorted = rects
4
+ .filter((rect) => Number.isFinite(Number(rect.top)) && Number.isFinite(Number(rect.height)) && Number(rect.height) > 0)
5
+ .map((rect) => ({ top: Number(rect.top), height: Number(rect.height) }))
6
+ .sort((left, right) => left.top - right.top);
7
+ for (const rect of sorted) {
8
+ const current = rows[rows.length - 1];
9
+ if (current && Math.abs(current.top - rect.top) <= tolerance) {
10
+ current.height = Math.max(current.height, rect.height);
11
+ continue;
12
+ }
13
+ rows.push(rect);
14
+ }
15
+ return rows;
16
+ }
17
+
18
+ export function buildVditorLineNumberRows(rects, { lineHeight = 0, blankLineCount = 0 } = {}) {
19
+ const normalizedLineHeight = Number(lineHeight) > 0 ? Number(lineHeight) : 0;
20
+ const normalizedBlankLineCount = Math.max(0, Math.floor(Number(blankLineCount) || 0));
21
+ const visualRows = normalizeVditorLineRects(rects);
22
+ if (visualRows.length === 0) {
23
+ return normalizedBlankLineCount > 0
24
+ ? Array.from({ length: normalizedBlankLineCount }, (_, index) => ({ top: index * normalizedLineHeight, height: normalizedLineHeight, blank: true }))
25
+ : normalizedLineHeight > 0 ? [{ top: 0, height: normalizedLineHeight, blank: true }] : [];
26
+ }
27
+ const rows = [];
28
+ let remainingBlankLines = normalizedBlankLineCount;
29
+ for (const visualRow of visualRows) {
30
+ const height = normalizedLineHeight || visualRow.height;
31
+ const top = visualRow.top - (height - visualRow.height) / 2;
32
+ const previous = rows[rows.length - 1];
33
+ if (previous && remainingBlankLines > 0 && normalizedLineHeight > 0) {
34
+ const availableSlots = Math.max(0, Math.round((top - previous.top) / normalizedLineHeight) - 1);
35
+ const blankLines = Math.min(remainingBlankLines, availableSlots);
36
+ for (let index = 1; index <= blankLines; index += 1) {
37
+ rows.push({ top: previous.top + normalizedLineHeight * index, height: normalizedLineHeight, blank: true });
38
+ }
39
+ remainingBlankLines -= blankLines;
40
+ }
41
+ rows.push({ top, height, blank: false });
42
+ }
43
+ const last = rows[rows.length - 1];
44
+ let nextTop = last.top;
45
+ while (remainingBlankLines > 0 && normalizedLineHeight > 0) {
46
+ nextTop += normalizedLineHeight;
47
+ rows.push({ top: nextTop, height: normalizedLineHeight, blank: true });
48
+ remainingBlankLines -= 1;
49
+ }
50
+ return rows;
51
+ }
@@ -1,5 +1,5 @@
1
1
  import { pinyin } from "pinyin-pro";
2
- export const RELATIONSHIP_SEARCH_POLICY_VERSION = 2;
2
+ export const RELATIONSHIP_SEARCH_POLICY_VERSION = 3;
3
3
  export function normalizeRelationshipSearchText(value) {
4
4
  return value.normalize("NFKC").toLocaleLowerCase("zh-CN");
5
5
  }
@@ -28,11 +28,30 @@ export function relationshipPinyinSyllables(value) {
28
28
  export function relationshipPinyinTokens(value) {
29
29
  return relationshipPinyinSyllables(value).map(safePinyinToken);
30
30
  }
31
+ export function relationshipPinyinSearchTokens(value) {
32
+ const normalized = normalizeRelationshipSearchText(value).trim();
33
+ if (/\p{Script=Han}/u.test(normalized))
34
+ return relationshipPinyinTokens(normalized);
35
+ const compact = normalized.replace(/[\p{White_Space}·・\-—']/gu, "");
36
+ return compact ? [safePinyinToken(compact)] : [];
37
+ }
38
+ export function relationshipPinyinJoinedTokens(value, maximumSyllables = 6) {
39
+ const tokens = new Set();
40
+ for (const match of value.matchAll(/[\p{Script=Han}]{2,}/gu)) {
41
+ const syllables = relationshipPinyinSyllables(match[0]);
42
+ for (let start = 0; start < syllables.length; start += 1) {
43
+ for (let length = 2; length <= maximumSyllables && start + length <= syllables.length; length += 1) {
44
+ tokens.add(safePinyinToken(syllables.slice(start, start + length).join("")));
45
+ }
46
+ }
47
+ }
48
+ return [...tokens];
49
+ }
31
50
  export function relationshipCharacterTokenText(value) {
32
51
  return relationshipCharacterTokens(value).join(" ");
33
52
  }
34
53
  export function relationshipPinyinTokenText(value) {
35
- return relationshipPinyinTokens(value).join(" ");
54
+ return [...relationshipPinyinTokens(value), ...relationshipPinyinJoinedTokens(value)].join(" ");
36
55
  }
37
56
  export function ftsPhrase(tokens) {
38
57
  return `"${tokens.join(" ").replaceAll('"', '""')}"`;
@@ -1 +1 @@
1
- {"version":3,"file":"relationship-search.js","sourceRoot":"","sources":["../src/relationship-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relationship-search.js","sourceRoot":"","sources":["../src/relationship-search.ts"],"names":[],"mappings":"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"}