@kgdiff/viewer 0.0.0-stage → 0.1.0

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.
Files changed (155) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +52 -2
  3. package/dist/compute-loader.d.ts +13 -0
  4. package/dist/compute-loader.d.ts.map +1 -0
  5. package/dist/compute-loader.js +46 -0
  6. package/dist/compute-loader.js.map +1 -0
  7. package/dist/compute.d.ts +8 -0
  8. package/dist/compute.d.ts.map +1 -0
  9. package/dist/compute.js +8 -0
  10. package/dist/compute.js.map +1 -0
  11. package/dist/controller.d.ts +199 -0
  12. package/dist/controller.d.ts.map +1 -0
  13. package/dist/controller.js +1254 -0
  14. package/dist/controller.js.map +1 -0
  15. package/dist/dom.d.ts +32 -0
  16. package/dist/dom.d.ts.map +1 -0
  17. package/dist/dom.js +105 -0
  18. package/dist/dom.js.map +1 -0
  19. package/dist/element.d.ts +43 -0
  20. package/dist/element.d.ts.map +1 -0
  21. package/dist/element.js +656 -0
  22. package/dist/element.js.map +1 -0
  23. package/dist/framing.d.ts +45 -0
  24. package/dist/framing.d.ts.map +1 -0
  25. package/dist/framing.js +107 -0
  26. package/dist/framing.js.map +1 -0
  27. package/dist/hash-sync.d.ts +18 -0
  28. package/dist/hash-sync.d.ts.map +1 -0
  29. package/dist/hash-sync.js +45 -0
  30. package/dist/hash-sync.js.map +1 -0
  31. package/dist/i18n.d.ts +223 -0
  32. package/dist/i18n.d.ts.map +1 -0
  33. package/dist/i18n.js +436 -0
  34. package/dist/i18n.js.map +1 -0
  35. package/dist/icons.d.ts +37 -0
  36. package/dist/icons.d.ts.map +1 -0
  37. package/dist/icons.js +36 -0
  38. package/dist/icons.js.map +1 -0
  39. package/dist/index.d.ts +151 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +41 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/keyboard.d.ts +64 -0
  44. package/dist/keyboard.d.ts.map +1 -0
  45. package/dist/keyboard.js +95 -0
  46. package/dist/keyboard.js.map +1 -0
  47. package/dist/list-model.d.ts +35 -0
  48. package/dist/list-model.d.ts.map +1 -0
  49. package/dist/list-model.js +70 -0
  50. package/dist/list-model.js.map +1 -0
  51. package/dist/payload.d.ts +10 -0
  52. package/dist/payload.d.ts.map +1 -0
  53. package/dist/payload.js +138 -0
  54. package/dist/payload.js.map +1 -0
  55. package/dist/pipeline.d.ts +31 -0
  56. package/dist/pipeline.d.ts.map +1 -0
  57. package/dist/pipeline.js +122 -0
  58. package/dist/pipeline.js.map +1 -0
  59. package/dist/prefs.d.ts +18 -0
  60. package/dist/prefs.d.ts.map +1 -0
  61. package/dist/prefs.js +38 -0
  62. package/dist/prefs.js.map +1 -0
  63. package/dist/registry.d.ts +3 -0
  64. package/dist/registry.d.ts.map +1 -0
  65. package/dist/registry.js +3 -0
  66. package/dist/registry.js.map +1 -0
  67. package/dist/renderer-port.d.ts +14 -0
  68. package/dist/renderer-port.d.ts.map +1 -0
  69. package/dist/renderer-port.js +16 -0
  70. package/dist/renderer-port.js.map +1 -0
  71. package/dist/replay.d.ts +55 -0
  72. package/dist/replay.d.ts.map +1 -0
  73. package/dist/replay.js +147 -0
  74. package/dist/replay.js.map +1 -0
  75. package/dist/review-store.d.ts +30 -0
  76. package/dist/review-store.d.ts.map +1 -0
  77. package/dist/review-store.js +120 -0
  78. package/dist/review-store.js.map +1 -0
  79. package/dist/search.d.ts +25 -0
  80. package/dist/search.d.ts.map +1 -0
  81. package/dist/search.js +90 -0
  82. package/dist/search.js.map +1 -0
  83. package/dist/standalone/kgdiff-viewer-compute.js +1 -0
  84. package/dist/standalone/kgdiff-viewer.js +5 -0
  85. package/dist/standalone-compute.d.ts +2 -0
  86. package/dist/standalone-compute.d.ts.map +1 -0
  87. package/dist/standalone-compute.js +8 -0
  88. package/dist/standalone-compute.js.map +1 -0
  89. package/dist/standalone.d.ts +2 -0
  90. package/dist/standalone.d.ts.map +1 -0
  91. package/dist/standalone.js +18 -0
  92. package/dist/standalone.js.map +1 -0
  93. package/dist/styles.d.ts +11 -0
  94. package/dist/styles.d.ts.map +1 -0
  95. package/dist/styles.js +627 -0
  96. package/dist/styles.js.map +1 -0
  97. package/dist/text-diff.d.ts +32 -0
  98. package/dist/text-diff.d.ts.map +1 -0
  99. package/dist/text-diff.js +211 -0
  100. package/dist/text-diff.js.map +1 -0
  101. package/dist/ui/context.d.ts +32 -0
  102. package/dist/ui/context.d.ts.map +1 -0
  103. package/dist/ui/context.js +49 -0
  104. package/dist/ui/context.js.map +1 -0
  105. package/dist/ui/detail.d.ts +9 -0
  106. package/dist/ui/detail.d.ts.map +1 -0
  107. package/dist/ui/detail.js +566 -0
  108. package/dist/ui/detail.js.map +1 -0
  109. package/dist/ui/header.d.ts +14 -0
  110. package/dist/ui/header.d.ts.map +1 -0
  111. package/dist/ui/header.js +195 -0
  112. package/dist/ui/header.js.map +1 -0
  113. package/dist/ui/popovers.d.ts +20 -0
  114. package/dist/ui/popovers.d.ts.map +1 -0
  115. package/dist/ui/popovers.js +180 -0
  116. package/dist/ui/popovers.js.map +1 -0
  117. package/dist/ui/sidebar.d.ts +25 -0
  118. package/dist/ui/sidebar.d.ts.map +1 -0
  119. package/dist/ui/sidebar.js +609 -0
  120. package/dist/ui/sidebar.js.map +1 -0
  121. package/dist/ui/stage.d.ts +18 -0
  122. package/dist/ui/stage.d.ts.map +1 -0
  123. package/dist/ui/stage.js +664 -0
  124. package/dist/ui/stage.js.map +1 -0
  125. package/package.json +58 -3
  126. package/src/compute-loader.ts +58 -0
  127. package/src/compute.ts +7 -0
  128. package/src/controller.ts +1393 -0
  129. package/src/dom.ts +131 -0
  130. package/src/element.ts +697 -0
  131. package/src/framing.ts +150 -0
  132. package/src/hash-sync.ts +54 -0
  133. package/src/i18n.ts +469 -0
  134. package/src/icons.ts +48 -0
  135. package/src/index.ts +171 -0
  136. package/src/keyboard.ts +128 -0
  137. package/src/list-model.ts +86 -0
  138. package/src/payload.ts +165 -0
  139. package/src/pipeline.ts +179 -0
  140. package/src/prefs.ts +55 -0
  141. package/src/registry.ts +2 -0
  142. package/src/renderer-port.ts +31 -0
  143. package/src/replay.ts +163 -0
  144. package/src/review-store.ts +125 -0
  145. package/src/search.ts +113 -0
  146. package/src/standalone-compute.ts +8 -0
  147. package/src/standalone.ts +18 -0
  148. package/src/styles.ts +638 -0
  149. package/src/text-diff.ts +208 -0
  150. package/src/ui/context.ts +70 -0
  151. package/src/ui/detail.ts +921 -0
  152. package/src/ui/header.ts +278 -0
  153. package/src/ui/popovers.ts +251 -0
  154. package/src/ui/sidebar.ts +752 -0
  155. package/src/ui/stage.ts +853 -0
@@ -0,0 +1,566 @@
1
+ import { attr, h, icon, iconButton, replaceKeepingFocus } from '../dom.js';
2
+ import { formatPercent } from '../i18n.js';
3
+ import { diffChars, diffWords } from '../text-diff.js';
4
+ import { formatValue, listItems, sceneHunkGlyph } from './context.js';
5
+ const MAX_NODES = 12;
6
+ const MAX_RELATIONS = 12;
7
+ const CLAMP_CHARS = 180;
8
+ function section(title, count, ...children) {
9
+ return h('section', { class: 'section' }, h('h3', null, title, count !== null ? h('span', { class: 'n', text: String(count) }) : null), ...children);
10
+ }
11
+ function kv(rows) {
12
+ const dl = h('dl', { class: 'kv' });
13
+ for (const [k, v] of rows)
14
+ dl.append(h('dt', { text: k }), h('dd', null, ...[v].flat()));
15
+ return dl;
16
+ }
17
+ /** Render one side of a diff: equal text plus that side's changes marked. */
18
+ function marked(segs, side) {
19
+ const out = [];
20
+ for (const s of segs) {
21
+ if (s.op === 'equal')
22
+ out.push(s.text);
23
+ else if (s.op === 'delete' && side === 'before')
24
+ out.push(h('del', { class: 'hl', text: s.text }));
25
+ else if (s.op === 'insert' && side === 'after')
26
+ out.push(h('ins', { class: 'hl', text: s.text }));
27
+ }
28
+ return out;
29
+ }
30
+ function chip(text, kind) {
31
+ const sign = kind === 'add' ? '+' : kind === 'del' ? '−' : '';
32
+ return h('span', { class: `vchip${kind === 'same' ? '' : ` ${kind}`}` }, sign ? h('span', { class: 'sign', 'aria-hidden': 'true', text: sign }) : null, text);
33
+ }
34
+ function chips(added, removed, same = []) {
35
+ return h('div', { class: 'chips' }, removed.map((x) => chip(x, 'del')), added.map((x) => chip(x, 'add')), same.map((x) => chip(x, 'same')));
36
+ }
37
+ function familyOfEdge(e) {
38
+ if (e.status === 'added')
39
+ return 'added';
40
+ if (e.status === 'removed') {
41
+ return e.facets.some((f) => f.kind === 'collapsed') ? 'identity' : 'removed';
42
+ }
43
+ for (const f of e.facets) {
44
+ if (f.kind === 'retarget')
45
+ return f.cause === 'merge' || f.cause === 'split' ? 'identity' : 'structure';
46
+ if (f.kind === 'predicate')
47
+ return 'structure';
48
+ }
49
+ return e.status === 'modified' ? 'content' : 'neutral';
50
+ }
51
+ export class Detail {
52
+ el;
53
+ #body;
54
+ #showUnchangedAttrs = false;
55
+ #showAllRelations = false;
56
+ #showAllNodes = false;
57
+ #expandedValues = new Set();
58
+ #lastKey = '';
59
+ #ctx;
60
+ constructor(ctx) {
61
+ this.#ctx = ctx;
62
+ this.#body = h('div', { class: 'detail-scroll scroll', tabindex: '-1' });
63
+ this.el = h('section', { class: 'detail', 'data-empty': 'true' }, this.#body);
64
+ }
65
+ update(topics) {
66
+ if (topics.has('selection') ||
67
+ topics.has('data') ||
68
+ topics.has('locale') ||
69
+ topics.has('review') ||
70
+ topics.has('status') ||
71
+ topics.has('filters')) {
72
+ this.#render();
73
+ }
74
+ }
75
+ #render() {
76
+ const c = this.#ctx.controller;
77
+ const tr = this.#ctx.tr();
78
+ attr(this.el, 'aria-label', tr.t('detail.label'));
79
+ const scene = c.scene;
80
+ const diff = c.diff;
81
+ this.el.hidden =
82
+ c.status !== 'ready' || !scene || !diff || (scene.hunks.length === 0 && c.selectedNode < 0);
83
+ if (this.el.hidden || !scene || !diff)
84
+ return;
85
+ const key = `${c.selectedHunk}|${c.selectedNode}`;
86
+ if (key !== this.#lastKey) {
87
+ this.#lastKey = key;
88
+ this.#showUnchangedAttrs = false;
89
+ this.#showAllRelations = false;
90
+ this.#showAllNodes = false;
91
+ this.#expandedValues.clear();
92
+ this.#body.scrollTop = 0;
93
+ }
94
+ if (c.selectedHunk < 0 && c.selectedNode < 0) {
95
+ attr(this.el, 'data-empty', 'true');
96
+ replaceKeepingFocus(this.#ctx.root, this.#body, this.#body, h('div', { class: 'detail-empty' }, icon('changes'), h('div', null, h('div', { text: tr.t('detail.empty') }), h('div', { class: 'sub', text: tr.t('detail.emptyHint') }))));
97
+ return;
98
+ }
99
+ attr(this.el, 'data-empty', 'false');
100
+ const hunk = c.selectedHunk >= 0 ? scene.hunks[c.selectedHunk] : undefined;
101
+ if (hunk)
102
+ this.#renderHunk(hunk, scene, diff, tr);
103
+ else
104
+ this.#renderNode(scene, diff, tr);
105
+ }
106
+ #nav(tr, hunk) {
107
+ const c = this.#ctx.controller;
108
+ const items = [];
109
+ if (hunk) {
110
+ const reviewed = c.isReviewed(hunk.id);
111
+ items.push(h('button', {
112
+ type: 'button',
113
+ class: 'rv-btn',
114
+ 'data-focus-key': 'review',
115
+ 'aria-pressed': String(reviewed),
116
+ title: `${tr.t(reviewed ? 'review.unmark' : 'review.mark')} (X)`,
117
+ onclick: () => c.toggleReviewed(hunk.id),
118
+ }, h('span', { class: 'ring' }, icon('check')), tr.t('review.toggle')));
119
+ }
120
+ const rank = hunk ? c.list.rank.get(hunk.index) : undefined;
121
+ const prev = iconButton('chevron-up', `${tr.t('detail.prev')} (K)`, () => c.prev(), {
122
+ class: 'icon-btn sm',
123
+ 'data-focus-key': 'prev',
124
+ });
125
+ const next = iconButton('chevron-down', `${tr.t('detail.next')} (J)`, () => c.next(), {
126
+ class: 'icon-btn sm',
127
+ 'data-focus-key': 'next',
128
+ });
129
+ prev.disabled = rank === 0 || c.list.order.length === 0;
130
+ next.disabled =
131
+ (rank !== undefined && rank >= c.list.order.length - 1) || c.list.order.length === 0;
132
+ items.push(prev, next);
133
+ return h('div', { class: 'd-nav' }, ...items);
134
+ }
135
+ #renderHunk(hunk, scene, diff, tr) {
136
+ const c = this.#ctx.controller;
137
+ const core = diff.index.hunk(hunk.id);
138
+ const focusIndex = c.selectedNode >= 0 && hunk.nodes.includes(c.selectedNode) ? c.selectedNode : hunk.anchor;
139
+ const focusId = focusIndex >= 0 ? scene.nodes[focusIndex]?.id : core?.anchor;
140
+ const focus = focusId !== undefined ? diff.index.node(focusId) : undefined;
141
+ const parts = [
142
+ h('div', { class: 'd-top' }, h('span', { class: 'fam-pill', 'data-family': hunk.family }, h('span', { class: 'g', 'aria-hidden': 'true', text: sceneHunkGlyph(hunk) }), tr.t(`kind.${hunk.kind}`)), this.#nav(tr, hunk)),
143
+ h('h2', { class: 'd-title', text: hunk.title }),
144
+ hunk.subtitle ? h('div', { class: 'd-sub', text: hunk.subtitle }) : null,
145
+ ];
146
+ const nodeIds = core?.nodes ?? [];
147
+ if (nodeIds.length > 1)
148
+ parts.push(this.#nodeList(nodeIds, focusId, scene, diff, tr));
149
+ if (focus)
150
+ parts.push(...this.#nodeSections(focus, diff, tr, nodeIds.length > 1));
151
+ const edges = (core?.edges ?? [])
152
+ .map((id) => diff.index.edge(id))
153
+ .filter((e) => e !== undefined);
154
+ if (edges.length > 0)
155
+ parts.push(this.#relations(edges, focusId, scene, diff, tr, true));
156
+ replaceKeepingFocus(this.#ctx.root, this.#body, this.#body, ...parts);
157
+ }
158
+ #renderNode(scene, diff, tr) {
159
+ const c = this.#ctx.controller;
160
+ const sn = scene.nodes[c.selectedNode];
161
+ const node = sn ? diff.index.node(sn.id) : undefined;
162
+ if (!sn || !node) {
163
+ replaceKeepingFocus(this.#ctx.root, this.#body, this.#body);
164
+ return;
165
+ }
166
+ const edges = diff.index.edgesOf(node.id);
167
+ replaceKeepingFocus(this.#ctx.root, this.#body, this.#body, h('div', { class: 'd-top' }, h('span', { class: 'fam-pill', 'data-family': sn.family }, h('span', { class: 'g', 'aria-hidden': 'true', text: '·' }), tr.t(node.status === 'unchanged' ? 'detail.unchangedNode' : `status.${node.status}`)), this.#nav(tr, undefined)), h('h2', { class: 'd-title', text: node.label }), ...this.#nodeSections(node, diff, tr, false), edges.length > 0 ? this.#relations(edges, node.id, scene, diff, tr, false) : null);
168
+ }
169
+ // ─── Sections ────────────────────────────────────────────────────────────
170
+ #nodeList(ids, focusId, scene, diff, tr) {
171
+ const c = this.#ctx.controller;
172
+ const shown = this.#showAllNodes ? ids : ids.slice(0, MAX_NODES);
173
+ const list = h('div', { class: 'nodes' });
174
+ for (const id of shown) {
175
+ const n = diff.index.node(id);
176
+ const i = scene.nodeIndex.get(id);
177
+ const fam = i !== undefined ? (scene.nodes[i]?.family ?? 'neutral') : 'neutral';
178
+ list.appendChild(h('button', {
179
+ type: 'button',
180
+ class: 'node-link',
181
+ 'data-focus-key': `node:${id}`,
182
+ 'data-family': fam,
183
+ 'aria-current': String(id === focusId),
184
+ onclick: () => {
185
+ if (i !== undefined)
186
+ c.selectNode(i, { fly: true });
187
+ },
188
+ }, h('span', { class: 'sdot', 'aria-hidden': 'true' }), h('span', { class: 'lbl', text: n?.label ?? id, title: n?.label ?? id }), h('span', { class: 'meta', text: n ? tr.t(`status.${n.status}`) : '' })));
189
+ }
190
+ return section(tr.t('detail.nodes'), ids.length, list, ids.length > MAX_NODES
191
+ ? this.#moreToggle(tr, this.#showAllNodes, () => {
192
+ this.#showAllNodes = !this.#showAllNodes;
193
+ this.#render();
194
+ })
195
+ : null);
196
+ }
197
+ #moreToggle(tr, expanded, onClick) {
198
+ return h('button', {
199
+ type: 'button',
200
+ class: 'disclosure',
201
+ 'data-focus-key': 'nodes-more',
202
+ 'aria-expanded': String(expanded),
203
+ onclick: onClick,
204
+ }, tr.t(expanded ? 'detail.showLess' : 'detail.showMore'), icon('chevron-down'));
205
+ }
206
+ #nodeSections(node, diff, tr, showName) {
207
+ const out = [];
208
+ const facets = node.facets;
209
+ const find = (kind) => facets.find((f) => f.kind === kind);
210
+ const label = (id) => diff.index.node(id)?.label ?? id;
211
+ // Identity
212
+ const rekey = find('rekey');
213
+ const types = find('types');
214
+ const deprecate = find('deprecate');
215
+ const current = node.after ?? node.before;
216
+ const idRows = [];
217
+ if (showName)
218
+ idRows.push([tr.t('detail.name'), h('span', { text: node.label })]);
219
+ idRows.push([
220
+ tr.t('detail.id'),
221
+ rekey
222
+ ? [
223
+ h('span', { class: 'id-text' }, h('del', { class: 'hl', text: rekey.from }), ' → ', h('ins', { class: 'hl', text: rekey.to })),
224
+ rekey.score < 1
225
+ ? h('span', {
226
+ class: 'note-line',
227
+ text: ` · ${tr.t('detail.matchScore', { p: formatPercent(rekey.score) })}`,
228
+ })
229
+ : null,
230
+ ]
231
+ : h('span', { class: 'id-text', text: node.afterId ?? node.beforeId ?? node.id }),
232
+ ]);
233
+ if (types)
234
+ idRows.push([tr.t('detail.types'), chips(types.added, types.removed)]);
235
+ else if (node.types.length > 0)
236
+ idRows.push([tr.t('detail.types'), chips([], [], node.types)]);
237
+ const statusBits = [tr.t(`status.${node.status}`)];
238
+ if (current?.deprecated && !deprecate)
239
+ statusBits.push(` · ${tr.t('detail.deprecated')}`);
240
+ if (deprecate) {
241
+ statusBits.push(' · ', h('strong', {
242
+ text: tr.t(deprecate.deprecated ? 'detail.deprecated' : 'detail.undeprecated'),
243
+ }));
244
+ }
245
+ if (current?.implicit)
246
+ statusBits.push(` · ${tr.t('detail.implicit')}`);
247
+ idRows.push([tr.t('detail.status'), statusBits]);
248
+ out.push(section(tr.t('detail.identity'), null, kv(idRows)));
249
+ // Name
250
+ const rename = find('rename');
251
+ if (rename) {
252
+ const segs = diffChars(rename.from, rename.to);
253
+ out.push(section(tr.t('detail.name'), null, h('div', { class: 'namediff' }, h('div', { class: 'line old', 'aria-label': `${tr.t('detail.before')}: ${rename.from}` }, h('span', { class: 'sign', 'aria-hidden': 'true', text: '−' }), h('span', null, ...marked(segs, 'before'))), h('div', { class: 'line new', 'aria-label': `${tr.t('detail.after')}: ${rename.to}` }, h('span', { class: 'sign', 'aria-hidden': 'true', text: '+' }), h('span', null, ...marked(segs, 'after'))))));
254
+ }
255
+ // Attributes
256
+ const attrs = find('attrs');
257
+ const changes = attrs?.changes ?? [];
258
+ const all = current?.attrs ?? {};
259
+ const changedKeys = new Set(changes.map((x) => x.key));
260
+ const unchanged = Object.keys(all)
261
+ .filter((k) => !changedKeys.has(k))
262
+ .sort();
263
+ if (changes.length > 0 || unchanged.length > 0) {
264
+ out.push(this.#attributes(node.id, changes, unchanged, all, tr));
265
+ }
266
+ // Synonyms
267
+ const aliases = find('aliases');
268
+ if (aliases)
269
+ out.push(section(tr.t('detail.aliases'), null, chips(aliases.added, aliases.removed)));
270
+ else if (current && current.aliases.length > 0 && node.status === 'unchanged') {
271
+ out.push(section(tr.t('detail.aliases'), null, chips([], [], current.aliases)));
272
+ }
273
+ // Hierarchy
274
+ const move = find('move');
275
+ if (move) {
276
+ const dl = h('dl', { class: 'hier' });
277
+ dl.append(h('dt', { text: tr.t('detail.before') }), h('dd', null, move.from.length
278
+ ? move.from.map((id) => chip(label(id), 'del'))
279
+ : chip(tr.t('detail.none'), 'same')), h('dt', { text: tr.t('detail.after') }), h('dd', null, move.to.length
280
+ ? move.to.map((id) => chip(label(id), 'add'))
281
+ : chip(tr.t('detail.none'), 'same')));
282
+ out.push(section(tr.t('detail.hierarchy'), null, dl));
283
+ }
284
+ // Replacement links
285
+ const replacement = find('replacement');
286
+ if (replacement) {
287
+ const rows = [];
288
+ const { replacedBy, replaces } = replacement;
289
+ if (replacedBy.added.length || replacedBy.removed.length) {
290
+ rows.push([tr.t('detail.replacedBy'), chips(replacedBy.added, replacedBy.removed)]);
291
+ }
292
+ if (replaces.added.length || replaces.removed.length) {
293
+ rows.push([tr.t('detail.replaces'), chips(replaces.added, replaces.removed)]);
294
+ }
295
+ if (rows.length)
296
+ out.push(section(tr.t('detail.deprecated'), null, kv(rows)));
297
+ }
298
+ // Composition
299
+ const comp = this.#composition(node, diff, tr, label);
300
+ if (comp)
301
+ out.push(comp);
302
+ // Evidence
303
+ const evidence = this.#evidence(node, diff, tr, label);
304
+ if (evidence)
305
+ out.push(evidence);
306
+ return out;
307
+ }
308
+ #attributes(nodeId, changes, unchanged, all, tr) {
309
+ const table = h('table', { class: 'attrs' }, h('colgroup', null, h('col', { class: 'k' }), h('col'), h('col')));
310
+ if (changes.length > 0) {
311
+ table.appendChild(h('thead', null, h('tr', null, h('th', { scope: 'col', text: tr.t('detail.key') }), h('th', { scope: 'col', text: tr.t('detail.before') }), h('th', { scope: 'col', text: tr.t('detail.after') }))));
312
+ }
313
+ const body = h('tbody');
314
+ for (const ch of changes)
315
+ body.appendChild(this.#changeRow(nodeId, ch, tr));
316
+ if (this.#showUnchangedAttrs || changes.length === 0) {
317
+ for (const k of unchanged) {
318
+ body.appendChild(h('tr', { class: 'unchanged' }, h('td', { class: 'k', text: k }), h('td', { colspan: '2' }, this.#value(`${nodeId}|u|${k}`, formatValue(all[k]), tr))));
319
+ }
320
+ }
321
+ table.appendChild(body);
322
+ const toggle = changes.length > 0 && unchanged.length > 0
323
+ ? h('button', {
324
+ type: 'button',
325
+ class: 'disclosure',
326
+ 'data-focus-key': 'attrs-more',
327
+ 'aria-expanded': String(this.#showUnchangedAttrs),
328
+ onclick: () => {
329
+ this.#showUnchangedAttrs = !this.#showUnchangedAttrs;
330
+ this.#render();
331
+ },
332
+ }, tr.plural('detail.unchangedAttrs', unchanged.length), icon('chevron-down'))
333
+ : null;
334
+ return section(tr.t('detail.attributes'), null, table, toggle);
335
+ }
336
+ #changeRow(nodeId, ch, tr) {
337
+ const empty = () => h('span', { class: 'empty', text: tr.t('detail.emptyValue') });
338
+ const beforeList = listItems(ch.before);
339
+ const afterList = listItems(ch.after);
340
+ let before;
341
+ let after;
342
+ if (beforeList && afterList) {
343
+ const a = new Set(afterList);
344
+ const b = new Set(beforeList);
345
+ before = h('div', { class: 'chips' }, beforeList.map((x) => chip(x, a.has(x) ? 'same' : 'del')));
346
+ after = h('div', { class: 'chips' }, afterList.map((x) => chip(x, b.has(x) ? 'same' : 'add')));
347
+ }
348
+ else if (typeof ch.before === 'string' && typeof ch.after === 'string') {
349
+ const segs = diffWords(ch.before, ch.after);
350
+ before = this.#value(`${nodeId}|b|${ch.key}`, ch.before, tr, marked(segs, 'before'));
351
+ after = this.#value(`${nodeId}|a|${ch.key}`, ch.after, tr, marked(segs, 'after'));
352
+ }
353
+ else {
354
+ before =
355
+ ch.before === undefined
356
+ ? empty()
357
+ : this.#value(`${nodeId}|b|${ch.key}`, formatValue(ch.before), tr, [
358
+ h('del', { class: 'hl', text: formatValue(ch.before) }),
359
+ ]);
360
+ after =
361
+ ch.after === undefined
362
+ ? empty()
363
+ : this.#value(`${nodeId}|a|${ch.key}`, formatValue(ch.after), tr, [
364
+ h('ins', { class: 'hl', text: formatValue(ch.after) }),
365
+ ]);
366
+ }
367
+ return h('tr', { class: 'changed' }, h('td', { class: 'k', text: ch.key }), h('td', { class: 'b' }, ...[before].flat()), h('td', { class: 'a' }, ...[after].flat()));
368
+ }
369
+ /** A value cell, clamped to 4 lines with “Show more” when long. */
370
+ #value(key, text, tr, content) {
371
+ const long = text.length > CLAMP_CHARS;
372
+ const open = this.#expandedValues.has(key);
373
+ const v = h('div', { class: `val${long && !open ? ' clamped' : ''}` }, ...(content ?? [text]));
374
+ if (!long)
375
+ return v;
376
+ return h('div', null, v, h('button', {
377
+ type: 'button',
378
+ class: 'link-btn more',
379
+ 'data-focus-key': `value:${key}`,
380
+ text: tr.t(open ? 'detail.showLess' : 'detail.showMore'),
381
+ onclick: () => {
382
+ if (open)
383
+ this.#expandedValues.delete(key);
384
+ else
385
+ this.#expandedValues.add(key);
386
+ this.#render();
387
+ },
388
+ }));
389
+ }
390
+ #composition(node, diff, tr, label) {
391
+ const rows = [];
392
+ const via = (v, confidence) => v === 'hint'
393
+ ? tr.t('detail.viaHint')
394
+ : `${tr.t('detail.viaHeuristic')} · ${tr.t('detail.confidence', { p: formatPercent(confidence) })}`;
395
+ for (const f of node.facets) {
396
+ switch (f.kind) {
397
+ case 'mergedInto':
398
+ rows.push(h('div', { class: 'comp-row' }, chip(node.label, 'del'), h('span', { class: 'arrow', 'aria-hidden': 'true', text: '→' }), chip(label(f.target), 'same'), h('span', { class: 'note', text: via(f.via, f.confidence) })));
399
+ break;
400
+ case 'mergeTarget': {
401
+ const notes = f.sources.map((s) => {
402
+ const src = diff.index.node(s);
403
+ const m = src?.facets.find((x) => x.kind === 'mergedInto');
404
+ return m && m.kind === 'mergedInto' ? via(m.via, m.confidence) : '';
405
+ });
406
+ rows.push(h('div', { class: 'comp-row' }, h('span', { class: 'note', text: tr.t('detail.mergedFrom') })));
407
+ f.sources.forEach((s, i) => {
408
+ rows.push(h('div', { class: 'comp-row' }, chip(label(s), 'del'), h('span', { class: 'arrow', 'aria-hidden': 'true', text: '→' }), chip(node.label, 'same'), notes[i] ? h('span', { class: 'note', text: notes[i] }) : null));
409
+ });
410
+ break;
411
+ }
412
+ case 'splitFrom':
413
+ rows.push(h('div', { class: 'comp-row' }, chip(label(f.source), 'same'), h('span', { class: 'arrow', 'aria-hidden': 'true', text: '→' }), chip(node.label, 'add'), h('span', { class: 'note', text: via(f.via, f.confidence) })));
414
+ break;
415
+ case 'splitInto':
416
+ rows.push(h('div', { class: 'comp-row' }, h('span', { class: 'note', text: tr.t('detail.splitInto') })), h('div', { class: 'comp-row' }, chip(node.label, 'same'), h('span', { class: 'arrow', 'aria-hidden': 'true', text: '→' }), f.targets.map((t) => chip(label(t), 'add'))));
417
+ break;
418
+ default:
419
+ break;
420
+ }
421
+ }
422
+ return rows.length
423
+ ? section(tr.t('detail.composition'), null, h('div', { class: 'comp' }, rows))
424
+ : null;
425
+ }
426
+ #evidence(node, diff, tr, label) {
427
+ const parts = [];
428
+ const rekey = node.facets.find((f) => f.kind === 'rekey');
429
+ if (rekey && node.afterId !== undefined) {
430
+ const m = diff.matches.find((x) => x.after === node.afterId);
431
+ if (m?.method === 'hint')
432
+ parts.push(h('div', { class: 'note-line', text: tr.t('detail.matchHint') }));
433
+ else if (m) {
434
+ parts.push(h('div', {
435
+ class: 'note-line',
436
+ text: tr.t('detail.matchScore', { p: formatPercent(m.score) }),
437
+ }));
438
+ if (m.evidence)
439
+ parts.push(this.#bars(m.evidence, tr));
440
+ }
441
+ }
442
+ const suggestions = diff.suggestions.filter((s) => (node.beforeId !== undefined && node.status === 'removed' && s.before === node.beforeId) ||
443
+ (node.afterId !== undefined && node.status === 'added' && s.after === node.afterId));
444
+ for (const s of suggestions) {
445
+ const other = node.status === 'removed'
446
+ ? diff.index.nodeByAfter(s.after)
447
+ : diff.index.nodeByBefore(s.before);
448
+ parts.push(h('div', { class: 'comp-row', style: 'margin-top: 8px' }, h('span', { class: 'note', text: tr.t('detail.suggestion') }), chip(other ? label(other.id) : node.status === 'removed' ? s.after : s.before, 'same'), h('span', {
449
+ class: 'note',
450
+ text: `${tr.t('detail.matchScore', { p: formatPercent(s.score) })} · ${tr.t(s.reason === 'ambiguous' ? 'detail.suggestion.ambiguous' : 'detail.suggestion.below')}`,
451
+ })), this.#bars(s.evidence, tr));
452
+ }
453
+ return parts.length ? section(tr.t('detail.evidence'), null, ...parts) : null;
454
+ }
455
+ #bars(e, tr) {
456
+ const rows = [
457
+ [tr.t('detail.evidence.label'), e.label],
458
+ [tr.t('detail.evidence.neighbors'), e.neighbors],
459
+ [tr.t('detail.evidence.types'), e.types],
460
+ [tr.t('detail.evidence.attrs'), e.attrs],
461
+ ];
462
+ return h('div', { class: 'bars', style: 'margin-top: 8px' }, rows.map(([k, v]) => h('div', { class: 'bar-row' }, h('span', { class: 'lbl', text: k }), h('span', {
463
+ class: 'track',
464
+ role: 'meter',
465
+ 'aria-label': k,
466
+ 'aria-valuemin': '0',
467
+ 'aria-valuemax': '100',
468
+ 'aria-valuenow': String(Math.round(v * 100)),
469
+ }, h('span', {
470
+ class: 'fill',
471
+ style: `display:block; width: ${Math.round(Math.max(0, Math.min(1, v)) * 100)}%`,
472
+ })), h('span', { class: 'v', text: formatPercent(v) }))));
473
+ }
474
+ // ─── Relations ───────────────────────────────────────────────────────────
475
+ #relations(edges, focusId, scene, diff, tr, changed) {
476
+ const sorted = changed
477
+ ? edges
478
+ : [...edges].sort((a, b) => Number(a.source !== focusId) - Number(b.source !== focusId));
479
+ const shown = this.#showAllRelations ? sorted : sorted.slice(0, MAX_RELATIONS);
480
+ const list = h('div', { class: 'rels' });
481
+ for (const e of shown)
482
+ list.appendChild(this.#relation(e, focusId, scene, diff, tr));
483
+ const rest = sorted.length - shown.length;
484
+ return section(tr.t('detail.relations'), edges.length, list, rest > 0 || this.#showAllRelations
485
+ ? h('button', {
486
+ type: 'button',
487
+ class: 'disclosure',
488
+ 'data-focus-key': 'rels-more',
489
+ 'aria-expanded': String(this.#showAllRelations),
490
+ onclick: () => {
491
+ this.#showAllRelations = !this.#showAllRelations;
492
+ this.#render();
493
+ },
494
+ }, this.#showAllRelations
495
+ ? tr.t('detail.showLess')
496
+ : tr.plural('detail.moreRelations', rest), icon('chevron-down'))
497
+ : null);
498
+ }
499
+ #relation(e, focusId, scene, diff, tr) {
500
+ const c = this.#ctx.controller;
501
+ const label = (id) => diff.index.node(id)?.label ?? id;
502
+ const node = (id) => h('span', { class: 'node', text: label(id) });
503
+ const was = (id) => h('span', { class: 'was', text: ` (${tr.t('detail.was', { x: tr.quote(label(id)) })})` });
504
+ const retarget = e.facets.find((f) => f.kind === 'retarget');
505
+ const predicate = e.facets.find((f) => f.kind === 'predicate');
506
+ const relabel = e.facets.find((f) => f.kind === 'label');
507
+ const pred = h('span', { class: 'pred', text: ` —${e.label}→ ` });
508
+ const outgoing = focusId !== undefined && e.source === focusId && e.target !== focusId;
509
+ const incoming = focusId !== undefined && e.target === focusId && e.source !== focusId;
510
+ const s = [];
511
+ if (outgoing) {
512
+ s.push(h('span', { class: 'pred', text: `→ ${e.label} → ` }), node(e.target));
513
+ if (retarget?.end === 'target')
514
+ s.push(was(retarget.from));
515
+ }
516
+ else if (incoming) {
517
+ s.push(h('span', { class: 'pred', text: `← ${e.label} ← ` }), node(e.source));
518
+ if (retarget?.end === 'source')
519
+ s.push(was(retarget.from));
520
+ }
521
+ else {
522
+ s.push(node(e.source));
523
+ if (retarget?.end === 'source')
524
+ s.push(was(retarget.from));
525
+ s.push(pred, node(e.target));
526
+ if (retarget?.end === 'target')
527
+ s.push(was(retarget.from));
528
+ }
529
+ const prevLabel = predicate
530
+ ? (e.before?.label ?? predicate.from)
531
+ : relabel
532
+ ? relabel.from
533
+ : undefined;
534
+ if (prevLabel !== undefined) {
535
+ s.push(h('span', { class: 'was', text: ` (${tr.t('detail.was', { x: tr.quote(prevLabel) })})` }));
536
+ }
537
+ if (e.facets.some((f) => f.kind === 'attrs')) {
538
+ s.push(h('span', { class: 'was', text: ` · ${tr.t('detail.edgeAttrs')}` }));
539
+ }
540
+ if (e.facets.some((f) => f.kind === 'collapsed')) {
541
+ s.push(h('span', { class: 'was', text: ` · ${tr.t('detail.collapsed')}` }));
542
+ }
543
+ const sign = e.status === 'added'
544
+ ? '+'
545
+ : e.status === 'removed'
546
+ ? '−'
547
+ : e.status === 'modified'
548
+ ? '~'
549
+ : '·';
550
+ const j = scene.edgeIndex.get(e.id);
551
+ const family = familyOfEdge(e);
552
+ return h('button', {
553
+ type: 'button',
554
+ class: `rel ${e.status}`,
555
+ 'data-focus-key': `rel:${e.id}`,
556
+ 'data-family': family,
557
+ title: tr.t('detail.showOnCanvas'),
558
+ disabled: j === undefined,
559
+ onclick: () => {
560
+ if (j !== undefined)
561
+ c.pinEdge(j);
562
+ },
563
+ }, h('span', { class: 'sign', 'aria-hidden': 'true', text: sign }), h('span', { class: 's' }, ...s));
564
+ }
565
+ }
566
+ //# sourceMappingURL=detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detail.js","sourceRoot":"","sources":["../../src/ui/detail.ts"],"names":[],"mappings":"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"}