@kgdiff/viewer 0.4.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 (257) 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/context.d.ts +42 -0
  8. package/dist/context.d.ts.map +1 -0
  9. package/dist/context.js +87 -0
  10. package/dist/context.js.map +1 -0
  11. package/dist/controller.d.ts +26 -237
  12. package/dist/controller.d.ts.map +1 -1
  13. package/dist/controller.js +33 -1484
  14. package/dist/controller.js.map +1 -1
  15. package/dist/dom.d.ts +10 -0
  16. package/dist/dom.d.ts.map +1 -1
  17. package/dist/dom.js +29 -0
  18. package/dist/dom.js.map +1 -1
  19. package/dist/element.d.ts +51 -42
  20. package/dist/element.d.ts.map +1 -1
  21. package/dist/element.js +381 -602
  22. package/dist/element.js.map +1 -1
  23. package/dist/elements/actions.d.ts +27 -0
  24. package/dist/elements/actions.d.ts.map +1 -0
  25. package/dist/elements/actions.js +81 -0
  26. package/dist/elements/actions.js.map +1 -0
  27. package/dist/elements/bound.d.ts +63 -0
  28. package/dist/elements/bound.d.ts.map +1 -0
  29. package/dist/elements/bound.js +213 -0
  30. package/dist/elements/bound.js.map +1 -0
  31. package/dist/elements/change-detail.d.ts +25 -0
  32. package/dist/elements/change-detail.d.ts.map +1 -0
  33. package/dist/elements/change-detail.js +19 -0
  34. package/dist/elements/change-detail.js.map +1 -0
  35. package/dist/elements/change-list.d.ts +27 -0
  36. package/dist/elements/change-list.d.ts.map +1 -0
  37. package/dist/elements/change-list.js +29 -0
  38. package/dist/elements/change-list.js.map +1 -0
  39. package/dist/elements/filters.d.ts +25 -0
  40. package/dist/elements/filters.d.ts.map +1 -0
  41. package/dist/elements/filters.js +19 -0
  42. package/dist/elements/filters.js.map +1 -0
  43. package/dist/elements/legend.d.ts +40 -0
  44. package/dist/elements/legend.d.ts.map +1 -0
  45. package/dist/elements/legend.js +87 -0
  46. package/dist/elements/legend.js.map +1 -0
  47. package/dist/elements/minimap.d.ts +38 -0
  48. package/dist/elements/minimap.d.ts.map +1 -0
  49. package/dist/elements/minimap.js +59 -0
  50. package/dist/elements/minimap.js.map +1 -0
  51. package/dist/elements/root.d.ts +40 -0
  52. package/dist/elements/root.d.ts.map +1 -0
  53. package/dist/elements/root.js +67 -0
  54. package/dist/elements/root.js.map +1 -0
  55. package/dist/elements/search.d.ts +29 -0
  56. package/dist/elements/search.d.ts.map +1 -0
  57. package/dist/elements/search.js +23 -0
  58. package/dist/elements/search.js.map +1 -0
  59. package/dist/elements/stage-context.d.ts +31 -0
  60. package/dist/elements/stage-context.d.ts.map +1 -0
  61. package/dist/elements/stage-context.js +4 -0
  62. package/dist/elements/stage-context.js.map +1 -0
  63. package/dist/elements/stage.d.ts +65 -0
  64. package/dist/elements/stage.d.ts.map +1 -0
  65. package/dist/elements/stage.js +259 -0
  66. package/dist/elements/stage.js.map +1 -0
  67. package/dist/elements/title.d.ts +25 -0
  68. package/dist/elements/title.d.ts.map +1 -0
  69. package/dist/elements/title.js +19 -0
  70. package/dist/elements/title.js.map +1 -0
  71. package/dist/elements/transport.d.ts +29 -0
  72. package/dist/elements/transport.d.ts.map +1 -0
  73. package/dist/elements/transport.js +24 -0
  74. package/dist/elements/transport.js.map +1 -0
  75. package/dist/elements/view-bound.d.ts +39 -0
  76. package/dist/elements/view-bound.d.ts.map +1 -0
  77. package/dist/elements/view-bound.js +88 -0
  78. package/dist/elements/view-bound.js.map +1 -0
  79. package/dist/elements/view-dock.d.ts +28 -0
  80. package/dist/elements/view-dock.d.ts.map +1 -0
  81. package/dist/elements/view-dock.js +28 -0
  82. package/dist/elements/view-dock.js.map +1 -0
  83. package/dist/elements/zoom.d.ts +28 -0
  84. package/dist/elements/zoom.d.ts.map +1 -0
  85. package/dist/elements/zoom.js +22 -0
  86. package/dist/elements/zoom.js.map +1 -0
  87. package/dist/i18n.d.ts +10 -0
  88. package/dist/i18n.d.ts.map +1 -1
  89. package/dist/i18n.js +20 -0
  90. package/dist/i18n.js.map +1 -1
  91. package/dist/icons.d.ts +1 -0
  92. package/dist/icons.d.ts.map +1 -1
  93. package/dist/icons.js +1 -0
  94. package/dist/icons.js.map +1 -1
  95. package/dist/index.d.ts +331 -36
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +13 -0
  98. package/dist/index.js.map +1 -1
  99. package/dist/keyboard.d.ts +39 -2
  100. package/dist/keyboard.d.ts.map +1 -1
  101. package/dist/keyboard.js +145 -62
  102. package/dist/keyboard.js.map +1 -1
  103. package/dist/layout-store.d.ts +26 -0
  104. package/dist/layout-store.d.ts.map +1 -0
  105. package/dist/layout-store.js +46 -0
  106. package/dist/layout-store.js.map +1 -0
  107. package/dist/panel-levels.d.ts +18 -0
  108. package/dist/panel-levels.d.ts.map +1 -0
  109. package/dist/panel-levels.js +41 -0
  110. package/dist/panel-levels.js.map +1 -0
  111. package/dist/panels.d.ts +28 -0
  112. package/dist/panels.d.ts.map +1 -0
  113. package/dist/panels.js +73 -0
  114. package/dist/panels.js.map +1 -0
  115. package/dist/pipeline.d.ts.map +1 -1
  116. package/dist/pipeline.js +3 -2
  117. package/dist/pipeline.js.map +1 -1
  118. package/dist/prefs.d.ts +5 -2
  119. package/dist/prefs.d.ts.map +1 -1
  120. package/dist/prefs.js +12 -3
  121. package/dist/prefs.js.map +1 -1
  122. package/dist/react.d.ts +460 -0
  123. package/dist/react.d.ts.map +1 -0
  124. package/dist/react.js +2 -0
  125. package/dist/react.js.map +1 -0
  126. package/dist/root-element.d.ts +122 -0
  127. package/dist/root-element.d.ts.map +1 -0
  128. package/dist/root-element.js +541 -0
  129. package/dist/root-element.js.map +1 -0
  130. package/dist/root.d.ts +54 -0
  131. package/dist/root.d.ts.map +1 -0
  132. package/dist/root.js +288 -0
  133. package/dist/root.js.map +1 -0
  134. package/dist/schedule.d.ts +22 -0
  135. package/dist/schedule.d.ts.map +1 -0
  136. package/dist/schedule.js +41 -0
  137. package/dist/schedule.js.map +1 -0
  138. package/dist/session.d.ts +269 -0
  139. package/dist/session.d.ts.map +1 -0
  140. package/dist/session.js +1237 -0
  141. package/dist/session.js.map +1 -0
  142. package/dist/standalone/kgdiff-viewer-compute.js +1 -1
  143. package/dist/standalone/kgdiff-viewer.js +4 -4
  144. package/dist/styles.d.ts +17 -6
  145. package/dist/styles.d.ts.map +1 -1
  146. package/dist/styles.js +367 -258
  147. package/dist/styles.js.map +1 -1
  148. package/dist/theme.d.ts +32 -0
  149. package/dist/theme.d.ts.map +1 -0
  150. package/dist/theme.js +152 -0
  151. package/dist/theme.js.map +1 -0
  152. package/dist/topics.d.ts +8 -0
  153. package/dist/topics.d.ts.map +1 -0
  154. package/dist/topics.js +18 -0
  155. package/dist/topics.js.map +1 -0
  156. package/dist/ui/change-list.d.ts +18 -0
  157. package/dist/ui/change-list.d.ts.map +1 -0
  158. package/dist/ui/change-list.js +331 -0
  159. package/dist/ui/change-list.js.map +1 -0
  160. package/dist/ui/context.d.ts +34 -7
  161. package/dist/ui/context.d.ts.map +1 -1
  162. package/dist/ui/context.js.map +1 -1
  163. package/dist/ui/filters.d.ts +9 -0
  164. package/dist/ui/filters.d.ts.map +1 -0
  165. package/dist/ui/filters.js +68 -0
  166. package/dist/ui/filters.js.map +1 -0
  167. package/dist/ui/header.d.ts +41 -3
  168. package/dist/ui/header.d.ts.map +1 -1
  169. package/dist/ui/header.js +101 -36
  170. package/dist/ui/header.js.map +1 -1
  171. package/dist/ui/legend.d.ts +15 -0
  172. package/dist/ui/legend.d.ts.map +1 -0
  173. package/dist/ui/legend.js +68 -0
  174. package/dist/ui/legend.js.map +1 -0
  175. package/dist/ui/popovers.d.ts +3 -1
  176. package/dist/ui/popovers.d.ts.map +1 -1
  177. package/dist/ui/popovers.js +62 -23
  178. package/dist/ui/popovers.js.map +1 -1
  179. package/dist/ui/search.d.ts +13 -0
  180. package/dist/ui/search.d.ts.map +1 -0
  181. package/dist/ui/search.js +192 -0
  182. package/dist/ui/search.js.map +1 -0
  183. package/dist/ui/sidebar.d.ts +32 -17
  184. package/dist/ui/sidebar.d.ts.map +1 -1
  185. package/dist/ui/sidebar.js +327 -519
  186. package/dist/ui/sidebar.js.map +1 -1
  187. package/dist/ui/stage.d.ts +56 -1
  188. package/dist/ui/stage.d.ts.map +1 -1
  189. package/dist/ui/stage.js +244 -256
  190. package/dist/ui/stage.js.map +1 -1
  191. package/dist/ui/swatch.js +1 -1
  192. package/dist/ui/swatch.js.map +1 -1
  193. package/dist/ui/transport.d.ts +12 -0
  194. package/dist/ui/transport.d.ts.map +1 -0
  195. package/dist/ui/transport.js +198 -0
  196. package/dist/ui/transport.js.map +1 -0
  197. package/dist/ui/zoom.d.ts +15 -0
  198. package/dist/ui/zoom.d.ts.map +1 -0
  199. package/dist/ui/zoom.js +30 -0
  200. package/dist/ui/zoom.js.map +1 -0
  201. package/dist/view.d.ts +94 -0
  202. package/dist/view.d.ts.map +1 -0
  203. package/dist/view.js +441 -0
  204. package/dist/view.js.map +1 -0
  205. package/package.json +95 -12
  206. package/src/bind.ts +80 -0
  207. package/src/context.ts +106 -0
  208. package/src/controller.ts +52 -1630
  209. package/src/dom.ts +30 -0
  210. package/src/element.ts +386 -619
  211. package/src/elements/actions.ts +94 -0
  212. package/src/elements/bound.ts +247 -0
  213. package/src/elements/change-detail.ts +34 -0
  214. package/src/elements/change-list.ts +51 -0
  215. package/src/elements/filters.ts +34 -0
  216. package/src/elements/legend.ts +103 -0
  217. package/src/elements/minimap.ts +75 -0
  218. package/src/elements/root.ts +86 -0
  219. package/src/elements/search.ts +38 -0
  220. package/src/elements/stage-context.ts +34 -0
  221. package/src/elements/stage.ts +285 -0
  222. package/src/elements/title.ts +34 -0
  223. package/src/elements/transport.ts +39 -0
  224. package/src/elements/view-bound.ts +118 -0
  225. package/src/elements/view-dock.ts +43 -0
  226. package/src/elements/zoom.ts +38 -0
  227. package/src/i18n.ts +20 -0
  228. package/src/icons.ts +1 -0
  229. package/src/index.ts +350 -35
  230. package/src/keyboard.ts +188 -61
  231. package/src/layout-store.ts +71 -0
  232. package/src/panel-levels.ts +53 -0
  233. package/src/panels.ts +81 -0
  234. package/src/pipeline.ts +4 -1
  235. package/src/prefs.ts +12 -4
  236. package/src/react.ts +459 -0
  237. package/src/root-element.ts +624 -0
  238. package/src/root.ts +335 -0
  239. package/src/schedule.ts +43 -0
  240. package/src/session.ts +1375 -0
  241. package/src/styles.ts +396 -263
  242. package/src/theme.ts +170 -0
  243. package/src/topics.ts +37 -0
  244. package/src/ui/change-list.ts +405 -0
  245. package/src/ui/context.ts +36 -7
  246. package/src/ui/filters.ts +79 -0
  247. package/src/ui/header.ts +129 -58
  248. package/src/ui/legend.ts +112 -0
  249. package/src/ui/popovers.ts +68 -25
  250. package/src/ui/search.ts +225 -0
  251. package/src/ui/sidebar.ts +362 -639
  252. package/src/ui/stage.ts +267 -331
  253. package/src/ui/swatch.ts +1 -1
  254. package/src/ui/transport.ts +240 -0
  255. package/src/ui/zoom.ts +45 -0
  256. package/src/view.ts +516 -0
  257. 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.4.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.4.0",
50
- "@kgdiff/formats": "0.4.0",
51
- "@kgdiff/layout": "0.4.0",
52
- "@kgdiff/scene": "0.4.0",
53
- "@kgdiff/renderer": "0.4.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
  }