@kgdiff/viewer 0.5.0 → 0.6.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 (232) hide show
  1. package/README.md +43 -16
  2. package/custom-elements.json +2347 -0
  3. package/dist/bind.d.ts +41 -0
  4. package/dist/bind.d.ts.map +1 -0
  5. package/dist/bind.js +47 -0
  6. package/dist/bind.js.map +1 -0
  7. package/dist/controller.d.ts +22 -74
  8. package/dist/controller.d.ts.map +1 -1
  9. package/dist/controller.js +35 -376
  10. package/dist/controller.js.map +1 -1
  11. package/dist/dom.d.ts +10 -0
  12. package/dist/dom.d.ts.map +1 -1
  13. package/dist/dom.js +29 -0
  14. package/dist/dom.js.map +1 -1
  15. package/dist/element.d.ts +52 -46
  16. package/dist/element.d.ts.map +1 -1
  17. package/dist/element.js +362 -403
  18. package/dist/element.js.map +1 -1
  19. package/dist/elements/actions.d.ts +27 -0
  20. package/dist/elements/actions.d.ts.map +1 -0
  21. package/dist/elements/actions.js +81 -0
  22. package/dist/elements/actions.js.map +1 -0
  23. package/dist/elements/bound.d.ts +63 -0
  24. package/dist/elements/bound.d.ts.map +1 -0
  25. package/dist/elements/bound.js +213 -0
  26. package/dist/elements/bound.js.map +1 -0
  27. package/dist/elements/change-detail.d.ts +25 -0
  28. package/dist/elements/change-detail.d.ts.map +1 -0
  29. package/dist/elements/change-detail.js +19 -0
  30. package/dist/elements/change-detail.js.map +1 -0
  31. package/dist/elements/change-list.d.ts +27 -0
  32. package/dist/elements/change-list.d.ts.map +1 -0
  33. package/dist/elements/change-list.js +29 -0
  34. package/dist/elements/change-list.js.map +1 -0
  35. package/dist/elements/filters.d.ts +25 -0
  36. package/dist/elements/filters.d.ts.map +1 -0
  37. package/dist/elements/filters.js +19 -0
  38. package/dist/elements/filters.js.map +1 -0
  39. package/dist/elements/legend.d.ts +40 -0
  40. package/dist/elements/legend.d.ts.map +1 -0
  41. package/dist/elements/legend.js +87 -0
  42. package/dist/elements/legend.js.map +1 -0
  43. package/dist/elements/minimap.d.ts +38 -0
  44. package/dist/elements/minimap.d.ts.map +1 -0
  45. package/dist/elements/minimap.js +59 -0
  46. package/dist/elements/minimap.js.map +1 -0
  47. package/dist/elements/root.d.ts +40 -0
  48. package/dist/elements/root.d.ts.map +1 -0
  49. package/dist/elements/root.js +67 -0
  50. package/dist/elements/root.js.map +1 -0
  51. package/dist/elements/search.d.ts +29 -0
  52. package/dist/elements/search.d.ts.map +1 -0
  53. package/dist/elements/search.js +23 -0
  54. package/dist/elements/search.js.map +1 -0
  55. package/dist/elements/stage-context.d.ts +31 -0
  56. package/dist/elements/stage-context.d.ts.map +1 -0
  57. package/dist/elements/stage-context.js +4 -0
  58. package/dist/elements/stage-context.js.map +1 -0
  59. package/dist/elements/stage.d.ts +65 -0
  60. package/dist/elements/stage.d.ts.map +1 -0
  61. package/dist/elements/stage.js +259 -0
  62. package/dist/elements/stage.js.map +1 -0
  63. package/dist/elements/title.d.ts +25 -0
  64. package/dist/elements/title.d.ts.map +1 -0
  65. package/dist/elements/title.js +19 -0
  66. package/dist/elements/title.js.map +1 -0
  67. package/dist/elements/transport.d.ts +29 -0
  68. package/dist/elements/transport.d.ts.map +1 -0
  69. package/dist/elements/transport.js +24 -0
  70. package/dist/elements/transport.js.map +1 -0
  71. package/dist/elements/view-bound.d.ts +39 -0
  72. package/dist/elements/view-bound.d.ts.map +1 -0
  73. package/dist/elements/view-bound.js +88 -0
  74. package/dist/elements/view-bound.js.map +1 -0
  75. package/dist/elements/view-dock.d.ts +28 -0
  76. package/dist/elements/view-dock.d.ts.map +1 -0
  77. package/dist/elements/view-dock.js +28 -0
  78. package/dist/elements/view-dock.js.map +1 -0
  79. package/dist/elements/zoom.d.ts +28 -0
  80. package/dist/elements/zoom.d.ts.map +1 -0
  81. package/dist/elements/zoom.js +22 -0
  82. package/dist/elements/zoom.js.map +1 -0
  83. package/dist/i18n.d.ts +10 -0
  84. package/dist/i18n.d.ts.map +1 -1
  85. package/dist/i18n.js +20 -0
  86. package/dist/i18n.js.map +1 -1
  87. package/dist/icons.d.ts +1 -0
  88. package/dist/icons.d.ts.map +1 -1
  89. package/dist/icons.js +1 -0
  90. package/dist/icons.js.map +1 -1
  91. package/dist/index.d.ts +328 -34
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +13 -0
  94. package/dist/index.js.map +1 -1
  95. package/dist/keyboard.d.ts +39 -2
  96. package/dist/keyboard.d.ts.map +1 -1
  97. package/dist/keyboard.js +145 -62
  98. package/dist/keyboard.js.map +1 -1
  99. package/dist/layout-store.d.ts +26 -0
  100. package/dist/layout-store.d.ts.map +1 -0
  101. package/dist/layout-store.js +46 -0
  102. package/dist/layout-store.js.map +1 -0
  103. package/dist/panel-levels.d.ts +18 -0
  104. package/dist/panel-levels.d.ts.map +1 -0
  105. package/dist/panel-levels.js +41 -0
  106. package/dist/panel-levels.js.map +1 -0
  107. package/dist/panels.d.ts +28 -0
  108. package/dist/panels.d.ts.map +1 -0
  109. package/dist/panels.js +73 -0
  110. package/dist/panels.js.map +1 -0
  111. package/dist/prefs.d.ts +5 -2
  112. package/dist/prefs.d.ts.map +1 -1
  113. package/dist/prefs.js +12 -3
  114. package/dist/prefs.js.map +1 -1
  115. package/dist/react.d.ts +460 -0
  116. package/dist/react.d.ts.map +1 -0
  117. package/dist/react.js +2 -0
  118. package/dist/react.js.map +1 -0
  119. package/dist/root-element.d.ts +122 -0
  120. package/dist/root-element.d.ts.map +1 -0
  121. package/dist/root-element.js +541 -0
  122. package/dist/root-element.js.map +1 -0
  123. package/dist/root.d.ts +30 -30
  124. package/dist/root.d.ts.map +1 -1
  125. package/dist/root.js +65 -42
  126. package/dist/root.js.map +1 -1
  127. package/dist/session.d.ts +19 -3
  128. package/dist/session.d.ts.map +1 -1
  129. package/dist/session.js +15 -17
  130. package/dist/session.js.map +1 -1
  131. package/dist/standalone/kgdiff-viewer.js +4 -4
  132. package/dist/styles.d.ts +4 -0
  133. package/dist/styles.d.ts.map +1 -1
  134. package/dist/styles.js +224 -84
  135. package/dist/styles.js.map +1 -1
  136. package/dist/theme.d.ts +7 -0
  137. package/dist/theme.d.ts.map +1 -1
  138. package/dist/theme.js +10 -7
  139. package/dist/theme.js.map +1 -1
  140. package/dist/topics.d.ts +8 -0
  141. package/dist/topics.d.ts.map +1 -0
  142. package/dist/topics.js +18 -0
  143. package/dist/topics.js.map +1 -0
  144. package/dist/ui/change-list.d.ts.map +1 -1
  145. package/dist/ui/change-list.js +2 -2
  146. package/dist/ui/change-list.js.map +1 -1
  147. package/dist/ui/context.d.ts +20 -7
  148. package/dist/ui/context.d.ts.map +1 -1
  149. package/dist/ui/context.js.map +1 -1
  150. package/dist/ui/header.d.ts +41 -3
  151. package/dist/ui/header.d.ts.map +1 -1
  152. package/dist/ui/header.js +99 -34
  153. package/dist/ui/header.js.map +1 -1
  154. package/dist/ui/legend.d.ts +15 -0
  155. package/dist/ui/legend.d.ts.map +1 -0
  156. package/dist/ui/legend.js +68 -0
  157. package/dist/ui/legend.js.map +1 -0
  158. package/dist/ui/popovers.d.ts +3 -1
  159. package/dist/ui/popovers.d.ts.map +1 -1
  160. package/dist/ui/popovers.js +62 -23
  161. package/dist/ui/popovers.js.map +1 -1
  162. package/dist/ui/search.d.ts.map +1 -1
  163. package/dist/ui/search.js +3 -2
  164. package/dist/ui/search.js.map +1 -1
  165. package/dist/ui/sidebar.d.ts +26 -3
  166. package/dist/ui/sidebar.d.ts.map +1 -1
  167. package/dist/ui/sidebar.js +344 -12
  168. package/dist/ui/sidebar.js.map +1 -1
  169. package/dist/ui/stage.d.ts +56 -1
  170. package/dist/ui/stage.d.ts.map +1 -1
  171. package/dist/ui/stage.js +244 -256
  172. package/dist/ui/stage.js.map +1 -1
  173. package/dist/ui/transport.d.ts +12 -0
  174. package/dist/ui/transport.d.ts.map +1 -0
  175. package/dist/ui/transport.js +198 -0
  176. package/dist/ui/transport.js.map +1 -0
  177. package/dist/ui/zoom.d.ts +15 -0
  178. package/dist/ui/zoom.d.ts.map +1 -0
  179. package/dist/ui/zoom.js +30 -0
  180. package/dist/ui/zoom.js.map +1 -0
  181. package/dist/view.d.ts +94 -0
  182. package/dist/view.d.ts.map +1 -0
  183. package/dist/view.js +441 -0
  184. package/dist/view.js.map +1 -0
  185. package/package.json +95 -12
  186. package/src/bind.ts +80 -0
  187. package/src/controller.ts +51 -442
  188. package/src/dom.ts +30 -0
  189. package/src/element.ts +364 -406
  190. package/src/elements/actions.ts +94 -0
  191. package/src/elements/bound.ts +247 -0
  192. package/src/elements/change-detail.ts +34 -0
  193. package/src/elements/change-list.ts +51 -0
  194. package/src/elements/filters.ts +34 -0
  195. package/src/elements/legend.ts +103 -0
  196. package/src/elements/minimap.ts +75 -0
  197. package/src/elements/root.ts +86 -0
  198. package/src/elements/search.ts +38 -0
  199. package/src/elements/stage-context.ts +34 -0
  200. package/src/elements/stage.ts +285 -0
  201. package/src/elements/title.ts +34 -0
  202. package/src/elements/transport.ts +39 -0
  203. package/src/elements/view-bound.ts +118 -0
  204. package/src/elements/view-dock.ts +43 -0
  205. package/src/elements/zoom.ts +38 -0
  206. package/src/i18n.ts +20 -0
  207. package/src/icons.ts +1 -0
  208. package/src/index.ts +347 -34
  209. package/src/keyboard.ts +188 -61
  210. package/src/layout-store.ts +71 -0
  211. package/src/panel-levels.ts +53 -0
  212. package/src/panels.ts +81 -0
  213. package/src/prefs.ts +12 -4
  214. package/src/react.ts +459 -0
  215. package/src/root-element.ts +624 -0
  216. package/src/root.ts +92 -65
  217. package/src/session.ts +22 -33
  218. package/src/styles.ts +245 -84
  219. package/src/theme.ts +10 -7
  220. package/src/topics.ts +37 -0
  221. package/src/ui/change-list.ts +6 -2
  222. package/src/ui/context.ts +20 -7
  223. package/src/ui/header.ts +127 -56
  224. package/src/ui/legend.ts +112 -0
  225. package/src/ui/popovers.ts +68 -25
  226. package/src/ui/search.ts +10 -5
  227. package/src/ui/sidebar.ts +386 -23
  228. package/src/ui/stage.ts +267 -331
  229. package/src/ui/transport.ts +240 -0
  230. package/src/ui/zoom.ts +45 -0
  231. package/src/view.ts +516 -0
  232. package/vscode.html-custom-data.json +726 -0
package/dist/view.js ADDED
@@ -0,0 +1,441 @@
1
+ import { labelFootprint, } from '@kgdiff/renderer';
2
+ import { createViewState, frameBounds, } from '@kgdiff/scene';
3
+ import { chromeInsets, FRAME_PADDING, freeView, NO_INSETS, zoomFit, } from './framing.js';
4
+ import { renderBackend } from './renderer-port.js';
5
+ import { padRect } from './session.js';
6
+ /** Camera follow is suppressed this long after the user moved the camera (ms). */
7
+ export const USER_CAMERA_GRACE = 2000;
8
+ /** The camera follows when less than this share of the target bounds is in view. */
9
+ export const FOLLOW_COVERAGE = 0.7;
10
+ /** Flights to a change never zoom in further, so its neighbourhood stays readable. */
11
+ export const FLY_MAX_ZOOM = 1.8;
12
+ /** Fitting everything never zooms in further (the renderer's default). */
13
+ export const FIT_MAX_ZOOM = 2.5;
14
+ /** Minimap marks are re-rasterized at most this often while replaying (ms). */
15
+ const MINIMAP_INTERVAL = 200;
16
+ /** Everything counts as in view (the minimap hides) from this share of the content bounds on. */
17
+ export const OVERVIEW_COVERAGE = 0.98;
18
+ /** Share of `bounds` inside `view`, in [0, 1]. */
19
+ export function coverage(bounds, view) {
20
+ const w = Math.min(bounds.x + bounds.width, view.x + view.width) - Math.max(bounds.x, view.x);
21
+ const h = Math.min(bounds.y + bounds.height, view.y + view.height) - Math.max(bounds.y, view.y);
22
+ const area = bounds.width * bounds.height;
23
+ if (!(area > 0)) {
24
+ const inside = bounds.x >= view.x &&
25
+ bounds.x <= view.x + view.width &&
26
+ bounds.y >= view.y &&
27
+ bounds.y <= view.y + view.height;
28
+ return inside ? 1 : 0;
29
+ }
30
+ return w > 0 && h > 0 ? (w * h) / area : 0;
31
+ }
32
+ export class StageView {
33
+ /**
34
+ * Keep the view fitted (embeds without controls): fit again when the canvas is resized unless
35
+ * the user moved the camera since, and at the start of every loop.
36
+ */
37
+ autoFit = false;
38
+ /** Canvas clicks select (and double clicks fly); off for embeds without controls. */
39
+ selectOnClick = true;
40
+ /** The whole content is in view (the minimaps have nothing to add). */
41
+ overview = true;
42
+ #session;
43
+ #version = null;
44
+ #labelsInside = false;
45
+ #renderer = null;
46
+ /** Minimap hosts, with their minimap while the renderer is attached. */
47
+ #minimaps = new Map();
48
+ #unbind = [];
49
+ #frames = { main: null, before: null, after: null };
50
+ #minimapDirty = true;
51
+ #lastMinimap = Number.NEGATIVE_INFINITY;
52
+ #lastUserCamera = Number.NEGATIVE_INFINITY;
53
+ #boundsCache = null;
54
+ #chrome = null;
55
+ /** Camera kept across detach / attach (element moved in the DOM). */
56
+ #savedCamera = null;
57
+ /** A new diff is installed but has not been fitted to a laid-out canvas yet. */
58
+ #needsFit = false;
59
+ /** The user panned or zoomed since the last fit. */
60
+ #userMoved = false;
61
+ #fitPadding = FRAME_PADDING;
62
+ constructor(session) {
63
+ this.#session = session;
64
+ // A view joining a session that already shows a diff fits it once laid out.
65
+ this.#needsFit = session.status === 'ready';
66
+ }
67
+ // ─── Renderer ─────────────────────────────────────────────────────────────
68
+ attach(stage, minimapHost) {
69
+ if (this.#renderer)
70
+ return;
71
+ const s = this.#session;
72
+ const backend = renderBackend();
73
+ const renderer = backend.createRenderer(stage, {
74
+ theme: s.theme,
75
+ labelsInside: this.#labelsInside,
76
+ });
77
+ this.#renderer = renderer;
78
+ // Re-attached (element moved): keep the view; this also stops the renderer's auto-fit.
79
+ if (this.#savedCamera)
80
+ renderer.camera.set(this.#savedCamera);
81
+ if (minimapHost && !this.#minimaps.has(minimapHost))
82
+ this.#minimaps.set(minimapHost, null);
83
+ for (const host of this.#minimaps.keys()) {
84
+ this.#minimaps.set(host, backend.createMinimap(host, renderer));
85
+ }
86
+ this.#unbind.push(renderer.on('hover', (pick) => this.#onHover(pick)), renderer.on('click', ({ pick }) => this.#onCanvasClick(pick)), renderer.on('dblclick', ({ pick }) => this.#onCanvasDblClick(pick)), renderer.on('camera', ({ source }) => {
87
+ if (source === 'user')
88
+ this.noteUserCamera();
89
+ this.#updateOverview();
90
+ }));
91
+ this.#minimapDirty = true;
92
+ s.invalidate();
93
+ }
94
+ detach() {
95
+ // A pending initial fit still runs after re-attach (`layoutChanged`), overriding this.
96
+ if (this.#renderer && this.#session.status === 'ready') {
97
+ this.#savedCamera = this.#renderer.camera.get();
98
+ }
99
+ for (const fn of this.#unbind.splice(0))
100
+ fn();
101
+ for (const [host, minimap] of this.#minimaps) {
102
+ minimap?.destroy();
103
+ this.#minimaps.set(host, null);
104
+ }
105
+ this.#renderer?.destroy();
106
+ this.#renderer = null;
107
+ }
108
+ /**
109
+ * Draw a minimap of this view into `host` (in addition to the one `attach` was given); returns
110
+ * the function that removes it.
111
+ */
112
+ addMinimap(host) {
113
+ if (!this.#minimaps.has(host)) {
114
+ const renderer = this.#renderer;
115
+ this.#minimaps.set(host, renderer ? renderBackend().createMinimap(host, renderer) : null);
116
+ this.#minimapDirty = true;
117
+ this.#session.invalidate();
118
+ }
119
+ return () => {
120
+ this.#minimaps.get(host)?.destroy();
121
+ this.#minimaps.delete(host);
122
+ };
123
+ }
124
+ get camera() {
125
+ return this.#renderer?.camera ?? null;
126
+ }
127
+ /** The version this view draws whatever the mode (`<kgdiff-stage version>`), or null. */
128
+ get version() {
129
+ return this.#version;
130
+ }
131
+ set version(version) {
132
+ if (version === this.#version)
133
+ return;
134
+ this.#version = version;
135
+ this.#minimapDirty = true;
136
+ this.#session.invalidate();
137
+ }
138
+ /**
139
+ * Where floating chrome covers the canvas (measured by the element at fit / flight time).
140
+ * Every fit and flight frames its target in the free part of the canvas (`framing.ts`).
141
+ */
142
+ setChrome(provider) {
143
+ this.#chrome = provider;
144
+ }
145
+ /**
146
+ * Keep labels whole inside the canvas (embeds without camera controls): a label pushed from
147
+ * its spot by a neighbour moves inside or is left out, never cut at the edge.
148
+ */
149
+ setLabelsInside(inside) {
150
+ this.#labelsInside = inside;
151
+ this.#renderer?.setLabelsInside(inside);
152
+ }
153
+ /**
154
+ * The canvas was laid out or resized: run the initial fit a new diff is waiting for, or (with
155
+ * `autoFit`) fit again unless the user moved the camera since the last fit.
156
+ */
157
+ layoutChanged() {
158
+ this.#updateOverview();
159
+ if (this.#session.status !== 'ready')
160
+ return;
161
+ if (!this.#needsFit) {
162
+ if (this.autoFit && !this.#userMoved)
163
+ void this.fit({ animate: false });
164
+ return;
165
+ }
166
+ // A selection made before the first layout (deep link, `kgdiff-ready` handler) wins.
167
+ const target = this.#session.selectionBounds();
168
+ if (target) {
169
+ if (!this.#frameInsets(target, FLY_MAX_ZOOM))
170
+ return;
171
+ this.#needsFit = false;
172
+ this.#flyTo(target, { animate: false });
173
+ return;
174
+ }
175
+ const fit = this.#fitTarget();
176
+ const camera = this.#renderer?.camera;
177
+ if (!fit || !camera)
178
+ return;
179
+ void this.#fitTo(camera, fit, { animate: false });
180
+ }
181
+ /** The user panned / zoomed: suspend replay camera follow for `USER_CAMERA_GRACE`. */
182
+ noteUserCamera() {
183
+ this.#lastUserCamera = this.#session.now();
184
+ this.#userMoved = true;
185
+ }
186
+ // ─── SessionView ──────────────────────────────────────────────────────────
187
+ /** Resolve the current view and hand it to the renderer (and the minimaps). */
188
+ draw(now = this.#session.now()) {
189
+ const s = this.#session;
190
+ const resolver = s.resolver;
191
+ const renderer = this.#renderer;
192
+ if (!resolver || !renderer || s.status !== 'ready')
193
+ return;
194
+ const f = this.#frames;
195
+ let mapFrame;
196
+ const version = this.#version;
197
+ if (version) {
198
+ f.main = resolver.resolve(s.viewState(version), f.main ?? undefined);
199
+ renderer.setFrame(f.main);
200
+ mapFrame = f.main;
201
+ }
202
+ else if (s.mode === 'swipe') {
203
+ f.before = resolver.resolve(s.viewState('before'), f.before ?? undefined);
204
+ f.after = resolver.resolve(s.viewState('after'), f.after ?? undefined);
205
+ renderer.setFrame({ split: s.split, before: f.before, after: f.after });
206
+ mapFrame = f.after;
207
+ }
208
+ else {
209
+ const layer = s.mode === 'replay' ? 'replay' : 'union';
210
+ f.main = resolver.resolve(s.viewState(layer), f.main ?? undefined);
211
+ renderer.setFrame(f.main);
212
+ mapFrame = f.main;
213
+ }
214
+ const replaying = !version && s.mode === 'replay' && (s.clock?.playing ?? false);
215
+ if (this.#minimaps.size > 0 &&
216
+ (this.#minimapDirty || (replaying && now - this.#lastMinimap >= MINIMAP_INTERVAL))) {
217
+ for (const minimap of this.#minimaps.values())
218
+ minimap?.update(mapFrame);
219
+ this.#minimapDirty = false;
220
+ this.#lastMinimap = now;
221
+ }
222
+ }
223
+ sceneChanged() {
224
+ const f = this.#frames;
225
+ f.main = f.before = f.after = null;
226
+ this.#renderer?.setTheme(this.#session.scene?.theme ?? this.#session.theme);
227
+ this.#minimapDirty = true;
228
+ }
229
+ installed() {
230
+ // Fitted after the UI has shown its chrome (the session's notification is delivered
231
+ // first) and once the canvas has a size (see `layoutChanged`).
232
+ this.#needsFit = true;
233
+ this.#savedCamera = null;
234
+ queueMicrotask(() => this.layoutChanged());
235
+ }
236
+ drawnChanged() {
237
+ this.#updateOverview();
238
+ this.#minimapDirty = true;
239
+ }
240
+ show(bounds) {
241
+ this.#flyTo(bounds);
242
+ }
243
+ /** Follow `bounds` (replay): fly unless the user steered recently or it is mostly visible. */
244
+ follow(bounds) {
245
+ if (this.#session.now() - this.#lastUserCamera < USER_CAMERA_GRACE)
246
+ return;
247
+ const free = this.#freeWorld(bounds);
248
+ if (!free || coverage(bounds, free) >= FOLLOW_COVERAGE)
249
+ return;
250
+ this.#flyTo(bounds);
251
+ }
252
+ looped() {
253
+ if (this.autoFit)
254
+ void this.fit();
255
+ }
256
+ viewport() {
257
+ return this.#renderer?.camera.viewport() ?? null;
258
+ }
259
+ // ─── Camera ───────────────────────────────────────────────────────────────
260
+ /** Insets keeping `bounds` clear of the chrome over the canvas, or null before layout. */
261
+ #frameInsets(bounds, maxZoom) {
262
+ const layout = this.#chrome?.();
263
+ if (!layout || !(layout.width > 0) || !(layout.height > 0))
264
+ return null;
265
+ return chromeInsets(bounds, layout, FRAME_PADDING, maxZoom);
266
+ }
267
+ #flyTo(bounds, options = {}) {
268
+ const camera = this.#renderer?.camera;
269
+ if (!camera)
270
+ return;
271
+ const padding = this.#frameInsets(bounds, FLY_MAX_ZOOM);
272
+ void camera.flyTo(bounds, {
273
+ ...options,
274
+ maxZoom: FLY_MAX_ZOOM,
275
+ ...(padding ? { padding } : {}),
276
+ });
277
+ }
278
+ /** The world region visible outside the chrome, as framed for `bounds`. */
279
+ #freeWorld(bounds) {
280
+ const camera = this.#renderer?.camera;
281
+ if (!camera)
282
+ return null;
283
+ const insets = this.#frameInsets(bounds, FLY_MAX_ZOOM) ?? NO_INSETS;
284
+ return freeView(camera.viewport(), camera.get().k, insets);
285
+ }
286
+ /**
287
+ * Fit everything visible (the focus in changes-only mode), labels included, into the free part
288
+ * of the canvas. Before the canvas is laid out it falls back to the renderer's own fit.
289
+ */
290
+ fit(options = {}) {
291
+ const camera = this.#renderer?.camera;
292
+ if (!camera)
293
+ return Promise.resolve();
294
+ const { padding, ...transition } = options;
295
+ if (padding !== undefined) {
296
+ this.#fitPadding = Number.isFinite(padding) && padding >= 0 ? padding : FRAME_PADDING;
297
+ }
298
+ const fit = this.#fitTarget();
299
+ if (!fit)
300
+ return camera.fit(undefined, transition);
301
+ return this.#fitTo(camera, fit, transition);
302
+ }
303
+ #fitTo(camera, fit, transition) {
304
+ this.#needsFit = false;
305
+ this.#userMoved = false;
306
+ return camera.fit(fit.bounds, { ...transition, padding: fit.insets, maxZoom: FIT_MAX_ZOOM });
307
+ }
308
+ /**
309
+ * Bounds and insets that show everything visible (the changes-only focus) with every label
310
+ * in its spot below its node, clear of the chrome, or null before layout. Measured in the
311
+ * union layer, which holds every state a replay or swipe passes through (and both versions,
312
+ * so stages pinned to one version frame alike). Insets depend on what is framed, which
313
+ * depends on the zoom they allow: they are settled once more.
314
+ */
315
+ #fitTarget() {
316
+ const s = this.#session;
317
+ const layout = this.#chrome?.();
318
+ const resolver = s.resolver;
319
+ if (!layout || !resolver || !(layout.width > 0) || !(layout.height > 0))
320
+ return null;
321
+ const frame = resolver.resolve(createViewState({
322
+ layer: 'union',
323
+ focus: s.focus,
324
+ families: s.families,
325
+ reducedMotion: s.reducedMotion,
326
+ }));
327
+ const footprint = labelFootprint(frame, s.theme);
328
+ const extent = (k) => footprint.at(k);
329
+ const discs = extent(Number.POSITIVE_INFINITY);
330
+ if (!discs)
331
+ return null;
332
+ const { width, height } = layout;
333
+ const padding = this.#fitPadding;
334
+ let insets = chromeInsets(discs, layout, padding, FIT_MAX_ZOOM);
335
+ let fit = zoomFit(extent, width, height, insets, FIT_MAX_ZOOM);
336
+ if (!fit)
337
+ return null;
338
+ const settled = chromeInsets(fit.content, layout, padding, FIT_MAX_ZOOM);
339
+ if (!sameInsets(settled, insets)) {
340
+ insets = settled;
341
+ fit = zoomFit(extent, width, height, insets, FIT_MAX_ZOOM) ?? fit;
342
+ }
343
+ return { bounds: fit.bounds, insets };
344
+ }
345
+ /** Bounds of what is drawn: the scene, or the visible part of the `changes` scope's focus. */
346
+ #contentBounds() {
347
+ const scene = this.#session.scene;
348
+ if (!scene)
349
+ return null;
350
+ const focus = this.#session.focus;
351
+ const cached = this.#boundsCache;
352
+ if (cached && cached.scene === scene && cached.focus === focus)
353
+ return cached.rect;
354
+ const rect = focus ? focusBounds(scene, focus) : frameBounds(scene);
355
+ this.#boundsCache = { scene, focus, rect };
356
+ return rect;
357
+ }
358
+ /** Whether everything drawn is in view; the minimaps hide while it is. */
359
+ #updateOverview() {
360
+ const bounds = this.#contentBounds();
361
+ const view = this.#renderer?.camera.viewport();
362
+ const next = !bounds || !view || coverage(bounds, view) >= OVERVIEW_COVERAGE;
363
+ if (next === this.overview)
364
+ return;
365
+ this.overview = next;
366
+ this.#session.notify('overview');
367
+ }
368
+ zoom(direction) {
369
+ this.noteUserCamera();
370
+ this.#renderer?.camera.zoomBy(direction > 0 ? 1.4 : 1 / 1.4);
371
+ }
372
+ // ─── Canvas events ────────────────────────────────────────────────────────
373
+ #onHover(pick) {
374
+ this.#session.setHover(pick?.type === 'node' ? pick.index : -1, pick?.type === 'edge' ? pick.index : -1, pick?.type === 'collapsed' ? pick.index : -1);
375
+ }
376
+ #onCanvasClick(pick) {
377
+ if (!this.selectOnClick)
378
+ return;
379
+ const s = this.#session;
380
+ if (!pick) {
381
+ s.clearSelection();
382
+ return;
383
+ }
384
+ switch (pick.type) {
385
+ case 'node':
386
+ s.selectNode(pick.index, { fly: false });
387
+ break;
388
+ case 'edge': {
389
+ const e = s.scene?.edges[pick.index];
390
+ if (e && e.hunk >= 0)
391
+ s.selectHunk(e.hunk, { fly: false });
392
+ s.pinnedEdge = pick.index;
393
+ s.invalidate();
394
+ break;
395
+ }
396
+ case 'collapsed':
397
+ s.expandGroup(pick.index);
398
+ break;
399
+ default:
400
+ break;
401
+ }
402
+ }
403
+ #onCanvasDblClick(pick) {
404
+ if (!this.selectOnClick || pick?.type !== 'node')
405
+ return;
406
+ const s = this.#session;
407
+ const n = s.scene?.nodes[pick.index];
408
+ if (!n)
409
+ return;
410
+ if (n.hunk >= 0)
411
+ s.flyToHunk(n.hunk);
412
+ else
413
+ s.flyToNode(pick.index);
414
+ }
415
+ }
416
+ function sameInsets(a, b) {
417
+ return a.top === b.top && a.right === b.right && a.bottom === b.bottom && a.left === b.left;
418
+ }
419
+ /** Bounds of the visible part of `focus`, with room for labels and the collapsed pills. */
420
+ function focusBounds(scene, focus) {
421
+ let x0 = Number.POSITIVE_INFINITY;
422
+ let y0 = Number.POSITIVE_INFINITY;
423
+ let x1 = Number.NEGATIVE_INFINITY;
424
+ let y1 = Number.NEGATIVE_INFINITY;
425
+ const add = (x, y, rx, top, bottom) => {
426
+ x0 = Math.min(x0, x - rx);
427
+ x1 = Math.max(x1, x + rx);
428
+ y0 = Math.min(y0, y - top);
429
+ y1 = Math.max(y1, y + bottom);
430
+ };
431
+ // Labels sit centered below their node: leave room for a typical one.
432
+ for (const n of scene.nodes)
433
+ if (focus.nodes[n.index] === 1)
434
+ add(n.x, n.y, n.r + 48, n.r, n.r + 24);
435
+ for (const g of focus.collapsed)
436
+ add(g.x, g.y, 48, 12, 12);
437
+ if (!(x0 <= x1))
438
+ return frameBounds(scene);
439
+ return padRect({ x: x0, y: y0, width: x1 - x0, height: y1 - y0 }, 160, 1.12);
440
+ }
441
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@kgdiff/viewer",
3
- "version": "0.5.0",
4
- "description": "Drop-in <kgdiff-viewer> web component: overlay, swipe, replay and changes-only views with review workflow.",
3
+ "version": "0.6.0",
4
+ "description": "Drop-in <kgdiff-viewer> web component and the elements it is made of: overlay, swipe, replay and changes-only views with review workflow.",
5
5
  "keywords": [
6
6
  "kgdiff",
7
7
  "web-component",
8
8
  "viewer",
9
- "diff-viewer"
9
+ "diff-viewer",
10
+ "custom-elements"
10
11
  ],
11
12
  "homepage": "https://github.com/iiwish/kgdiff/tree/main/packages/viewer#readme",
12
13
  "bugs": {
@@ -20,23 +21,96 @@
20
21
  "license": "MIT",
21
22
  "author": "iiwish",
22
23
  "type": "module",
23
- "sideEffects": true,
24
+ "sideEffects": [
25
+ "./dist/index.js",
26
+ "./dist/elements/*.js",
27
+ "./dist/standalone.js",
28
+ "./dist/standalone-compute.js",
29
+ "./dist/standalone/*.js",
30
+ "./src/index.ts",
31
+ "./src/elements/*.ts",
32
+ "./src/standalone.ts",
33
+ "./src/standalone-compute.ts"
34
+ ],
24
35
  "exports": {
25
36
  ".": {
26
37
  "types": "./dist/index.d.ts",
27
38
  "default": "./dist/index.js"
28
39
  },
40
+ "./elements/root": {
41
+ "types": "./dist/elements/root.d.ts",
42
+ "default": "./dist/elements/root.js"
43
+ },
44
+ "./elements/stage": {
45
+ "types": "./dist/elements/stage.d.ts",
46
+ "default": "./dist/elements/stage.js"
47
+ },
48
+ "./elements/change-list": {
49
+ "types": "./dist/elements/change-list.d.ts",
50
+ "default": "./dist/elements/change-list.js"
51
+ },
52
+ "./elements/change-detail": {
53
+ "types": "./dist/elements/change-detail.d.ts",
54
+ "default": "./dist/elements/change-detail.js"
55
+ },
56
+ "./elements/search": {
57
+ "types": "./dist/elements/search.d.ts",
58
+ "default": "./dist/elements/search.js"
59
+ },
60
+ "./elements/filters": {
61
+ "types": "./dist/elements/filters.d.ts",
62
+ "default": "./dist/elements/filters.js"
63
+ },
64
+ "./elements/view-dock": {
65
+ "types": "./dist/elements/view-dock.d.ts",
66
+ "default": "./dist/elements/view-dock.js"
67
+ },
68
+ "./elements/transport": {
69
+ "types": "./dist/elements/transport.d.ts",
70
+ "default": "./dist/elements/transport.js"
71
+ },
72
+ "./elements/legend": {
73
+ "types": "./dist/elements/legend.d.ts",
74
+ "default": "./dist/elements/legend.js"
75
+ },
76
+ "./elements/zoom": {
77
+ "types": "./dist/elements/zoom.d.ts",
78
+ "default": "./dist/elements/zoom.js"
79
+ },
80
+ "./elements/minimap": {
81
+ "types": "./dist/elements/minimap.d.ts",
82
+ "default": "./dist/elements/minimap.js"
83
+ },
84
+ "./elements/title": {
85
+ "types": "./dist/elements/title.d.ts",
86
+ "default": "./dist/elements/title.js"
87
+ },
88
+ "./elements/actions": {
89
+ "types": "./dist/elements/actions.d.ts",
90
+ "default": "./dist/elements/actions.js"
91
+ },
92
+ "./panels": {
93
+ "types": "./dist/panels.d.ts",
94
+ "default": "./dist/panels.js"
95
+ },
29
96
  "./compute": {
30
97
  "types": "./dist/compute.d.ts",
31
98
  "default": "./dist/compute.js"
32
99
  },
33
100
  "./standalone": "./dist/standalone/kgdiff-viewer.js",
34
- "./standalone/compute": "./dist/standalone/kgdiff-viewer-compute.js"
101
+ "./standalone/compute": "./dist/standalone/kgdiff-viewer-compute.js",
102
+ "./react": {
103
+ "types": "./dist/react.d.ts",
104
+ "default": "./dist/react.js"
105
+ }
35
106
  },
107
+ "customElements": "custom-elements.json",
36
108
  "files": [
37
109
  "dist",
38
110
  "src",
39
- "!src/**/*.test.ts"
111
+ "!src/**/*.test.ts",
112
+ "custom-elements.json",
113
+ "vscode.html-custom-data.json"
40
114
  ],
41
115
  "engines": {
42
116
  "node": ">=22"
@@ -46,16 +120,25 @@
46
120
  "registry": "https://registry.npmjs.org/"
47
121
  },
48
122
  "dependencies": {
49
- "@kgdiff/core": "0.5.0",
50
- "@kgdiff/formats": "0.5.0",
51
- "@kgdiff/layout": "0.5.0",
52
- "@kgdiff/scene": "0.5.0",
53
- "@kgdiff/renderer": "0.5.0"
123
+ "@kgdiff/core": "0.6.0",
124
+ "@kgdiff/formats": "0.6.0",
125
+ "@kgdiff/layout": "0.6.0",
126
+ "@kgdiff/scene": "0.6.0",
127
+ "@kgdiff/renderer": "0.6.0"
128
+ },
129
+ "peerDependencies": {
130
+ "@types/react": ">=19"
131
+ },
132
+ "peerDependenciesMeta": {
133
+ "@types/react": {
134
+ "optional": true
135
+ }
54
136
  },
55
137
  "scripts": {
56
138
  "build": "tsc -p tsconfig.build.json && vite build -c vite.config.ts && vite build -c vite.config.ts --mode compute",
57
139
  "dev": "vite -c dev/vite.config.ts",
58
140
  "typecheck": "tsc -p tsconfig.json",
59
- "test": "vitest run"
141
+ "test": "vitest run",
142
+ "manifest": "tsx scripts/manifest.ts"
60
143
  }
61
144
  }