@kgdiff/scene 0.0.0-stage → 0.2.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.
- package/LICENSE +21 -0
- package/README.md +50 -2
- package/dist/build.d.ts +23 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +407 -0
- package/dist/build.js.map +1 -0
- package/dist/choreography.d.ts +98 -0
- package/dist/choreography.d.ts.map +1 -0
- package/dist/choreography.js +271 -0
- package/dist/choreography.js.map +1 -0
- package/dist/color.d.ts +42 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +169 -0
- package/dist/color.js.map +1 -0
- package/dist/constants.d.ts +89 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +89 -0
- package/dist/constants.js.map +1 -0
- package/dist/easing.d.ts +28 -0
- package/dist/easing.d.ts.map +1 -0
- package/dist/easing.js +103 -0
- package/dist/easing.js.map +1 -0
- package/dist/focus.d.ts +45 -0
- package/dist/focus.d.ts.map +1 -0
- package/dist/focus.js +317 -0
- package/dist/focus.js.map +1 -0
- package/dist/frame.d.ts +13 -0
- package/dist/frame.d.ts.map +1 -0
- package/dist/frame.js +32 -0
- package/dist/frame.js.map +1 -0
- package/dist/geometry.d.ts +61 -0
- package/dist/geometry.d.ts.map +1 -0
- package/dist/geometry.js +122 -0
- package/dist/geometry.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/resolver.d.ts +9 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +1621 -0
- package/dist/resolver.js.map +1 -0
- package/dist/roles.d.ts +46 -0
- package/dist/roles.d.ts.map +1 -0
- package/dist/roles.js +197 -0
- package/dist/roles.js.map +1 -0
- package/dist/styles.d.ts +116 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +391 -0
- package/dist/styles.js.map +1 -0
- package/dist/theme.d.ts +14 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +154 -0
- package/dist/theme.js.map +1 -0
- package/dist/timeline.d.ts +69 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +362 -0
- package/dist/timeline.js.map +1 -0
- package/dist/types.d.ts +493 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/view.d.ts +11 -0
- package/dist/view.d.ts.map +1 -0
- package/dist/view.js +22 -0
- package/dist/view.js.map +1 -0
- package/package.json +46 -3
- package/src/build.ts +450 -0
- package/src/choreography.ts +342 -0
- package/src/color.ts +194 -0
- package/src/constants.ts +97 -0
- package/src/easing.ts +104 -0
- package/src/focus.ts +335 -0
- package/src/frame.ts +37 -0
- package/src/geometry.ts +162 -0
- package/src/index.ts +15 -0
- package/src/resolver.ts +1710 -0
- package/src/roles.ts +203 -0
- package/src/styles.ts +513 -0
- package/src/theme.ts +185 -0
- package/src/timeline.ts +391 -0
- package/src/types.ts +544 -0
- package/src/view.ts +27 -0
package/dist/frame.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { BoundsBuilder } from './geometry.js';
|
|
2
|
+
/** Relative breathing room added on each side (labels already sit inside hunk bounds). */
|
|
3
|
+
const PAD_RATIO = 0.06;
|
|
4
|
+
/** Minimum padding on each side, world units. */
|
|
5
|
+
const MIN_PAD = 16;
|
|
6
|
+
/** Smallest framed extent, world units: a one-node hunk still shows its neighbourhood. */
|
|
7
|
+
const MIN_EXTENT = 160;
|
|
8
|
+
/**
|
|
9
|
+
* Camera target for a hunk / chapter / whole scene: the union of the hunks' bounds (or the
|
|
10
|
+
* scene bounds when `hunks` is omitted, empty or has no valid index), padded by
|
|
11
|
+
* `max(16, 6% of the larger side)` per side and grown to at least 160 × 160 world units,
|
|
12
|
+
* centered. UI chrome is reserved by the renderer's `safeArea`.
|
|
13
|
+
*/
|
|
14
|
+
export function frameBounds(scene, hunks) {
|
|
15
|
+
let rect = scene.bounds;
|
|
16
|
+
if (hunks !== undefined && hunks.length > 0) {
|
|
17
|
+
const b = new BoundsBuilder();
|
|
18
|
+
for (const h of hunks) {
|
|
19
|
+
const hunk = scene.hunks[h];
|
|
20
|
+
if (hunk !== undefined)
|
|
21
|
+
b.addRect(hunk.bounds);
|
|
22
|
+
}
|
|
23
|
+
rect = b.rect(scene.bounds);
|
|
24
|
+
}
|
|
25
|
+
const pad = Math.max(MIN_PAD, PAD_RATIO * Math.max(rect.width, rect.height));
|
|
26
|
+
const width = Math.max(MIN_EXTENT, rect.width + 2 * pad);
|
|
27
|
+
const height = Math.max(MIN_EXTENT, rect.height + 2 * pad);
|
|
28
|
+
const cx = rect.x + rect.width / 2;
|
|
29
|
+
const cy = rect.y + rect.height / 2;
|
|
30
|
+
return { x: cx - width / 2, y: cy - height / 2, width, height };
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,0FAA0F;AAC1F,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,iDAAiD;AACjD,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,0FAA0F;AAC1F,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAY,EAAE,KAAyB;IACjE,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;IACxB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,IAAI,aAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,IAAI,KAAK,SAAS;gBAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Geometry shared by scene building, framing and the resolver: label boxes (widths from
|
|
3
|
+
* `@kgdiff/layout`'s `estimateLabelWidth`, so scene bounds match the layout's label boxes),
|
|
4
|
+
* rectangles, parallel-edge curvature and curve conventions.
|
|
5
|
+
*
|
|
6
|
+
* Curve convention (all renderers): an edge or glyph with curvature `c` from P1 to P2 is the
|
|
7
|
+
* quadratic Bézier whose control point is `mid(P1, P2) + c · |P2 − P1| · n`, where
|
|
8
|
+
* `n = (−dy, dx) / |P2 − P1|` (world space, y down). `c = 0` is a straight segment.
|
|
9
|
+
*/
|
|
10
|
+
import type { Rect } from '@kgdiff/core';
|
|
11
|
+
export declare const EMPTY_RECT: Rect;
|
|
12
|
+
/** Mutable bounds accumulator (min / max), cheap to extend. */
|
|
13
|
+
export declare class BoundsBuilder {
|
|
14
|
+
minX: number;
|
|
15
|
+
minY: number;
|
|
16
|
+
maxX: number;
|
|
17
|
+
maxY: number;
|
|
18
|
+
get empty(): boolean;
|
|
19
|
+
add(x0: number, y0: number, x1: number, y1: number): this;
|
|
20
|
+
addRect(r: Rect): this;
|
|
21
|
+
rect(fallback?: Rect): Rect;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* World-space box of a node and its label(s) at zoom 1: the circle, plus the label centered
|
|
25
|
+
* below it (`r + 5`), plus the struck old name 14 px lower when present.
|
|
26
|
+
*/
|
|
27
|
+
export declare function addNodeBox(b: BoundsBuilder, x: number, y: number, r: number, label: string, secondary: string | undefined): void;
|
|
28
|
+
export declare function rectCenter(r: Rect): {
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
};
|
|
32
|
+
/** One drawn line between two nodes, for parallel-curvature assignment. */
|
|
33
|
+
export interface EdgeForm {
|
|
34
|
+
readonly a: number;
|
|
35
|
+
readonly b: number;
|
|
36
|
+
/** Ghost forms (an edge's before form) take slots only after every real line of the pair. */
|
|
37
|
+
readonly ghost?: boolean;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Curvature for every form so that lines sharing an (unordered) node pair fan out. Real lines
|
|
41
|
+
* are slotted first as if alone (a lone line stays straight), so their geometry never depends
|
|
42
|
+
* on ghosts; ghosts continue the fan. Signs are expressed in each form's own direction so
|
|
43
|
+
* A→B and B→A never overlap. Order within a group is the input order (deterministic). O(F).
|
|
44
|
+
*/
|
|
45
|
+
export declare function parallelCurvatures(forms: readonly EdgeForm[]): Float64Array;
|
|
46
|
+
/** Endpoints of a scene edge (after form s → t, before form sb → tb). */
|
|
47
|
+
export interface FormEdge {
|
|
48
|
+
readonly s: number;
|
|
49
|
+
readonly t: number;
|
|
50
|
+
readonly sb: number;
|
|
51
|
+
readonly tb: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Curvatures of every edge's drawn form (after endpoints) and of its before form when that
|
|
55
|
+
* differs (retargeted / carried ghosts; 0 otherwise).
|
|
56
|
+
*/
|
|
57
|
+
export declare function edgeCurvatures(edges: readonly FormEdge[]): {
|
|
58
|
+
readonly primary: Float64Array;
|
|
59
|
+
readonly ghost: Float64Array;
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAIzC,eAAO,MAAM,UAAU,EAAE,IAAyD,CAAC;AAEnF,+DAA+D;AAC/D,qBAAa,aAAa;IACxB,IAAI,SAA4B;IAChC,IAAI,SAA4B;IAChC,IAAI,SAA4B;IAChC,IAAI,SAA4B;IAEhC,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAMxD;IAED,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAErB;IAED,IAAI,CAAC,QAAQ,GAAE,IAAiB,GAAG,IAAI,CAQtC;CACF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,CAAC,EAAE,aAAa,EAChB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,IAAI,CAYN;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAE5D;AAED,2EAA2E;AAC3E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAWD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,YAAY,CAwB3E;AAED,yEAAyE;AACzE,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG;IAC1D,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC9B,CAmBA"}
|
package/dist/geometry.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { estimateLabelWidth } from '@kgdiff/layout';
|
|
2
|
+
import { LABEL, PARALLEL_CURVATURE } from './constants.js';
|
|
3
|
+
export const EMPTY_RECT = Object.freeze({ x: 0, y: 0, width: 0, height: 0 });
|
|
4
|
+
/** Mutable bounds accumulator (min / max), cheap to extend. */
|
|
5
|
+
export class BoundsBuilder {
|
|
6
|
+
minX = Number.POSITIVE_INFINITY;
|
|
7
|
+
minY = Number.POSITIVE_INFINITY;
|
|
8
|
+
maxX = Number.NEGATIVE_INFINITY;
|
|
9
|
+
maxY = Number.NEGATIVE_INFINITY;
|
|
10
|
+
get empty() {
|
|
11
|
+
return this.minX > this.maxX;
|
|
12
|
+
}
|
|
13
|
+
add(x0, y0, x1, y1) {
|
|
14
|
+
if (x0 < this.minX)
|
|
15
|
+
this.minX = x0;
|
|
16
|
+
if (y0 < this.minY)
|
|
17
|
+
this.minY = y0;
|
|
18
|
+
if (x1 > this.maxX)
|
|
19
|
+
this.maxX = x1;
|
|
20
|
+
if (y1 > this.maxY)
|
|
21
|
+
this.maxY = y1;
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
addRect(r) {
|
|
25
|
+
return this.add(r.x, r.y, r.x + r.width, r.y + r.height);
|
|
26
|
+
}
|
|
27
|
+
rect(fallback = EMPTY_RECT) {
|
|
28
|
+
if (this.empty)
|
|
29
|
+
return fallback;
|
|
30
|
+
return {
|
|
31
|
+
x: this.minX,
|
|
32
|
+
y: this.minY,
|
|
33
|
+
width: this.maxX - this.minX,
|
|
34
|
+
height: this.maxY - this.minY,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* World-space box of a node and its label(s) at zoom 1: the circle, plus the label centered
|
|
40
|
+
* below it (`r + 5`), plus the struck old name 14 px lower when present.
|
|
41
|
+
*/
|
|
42
|
+
export function addNodeBox(b, x, y, r, label, secondary) {
|
|
43
|
+
const half = Math.max(r, estimateLabelWidth(label, LABEL.size) / 2, secondary === undefined ? 0 : estimateLabelWidth(secondary, LABEL.oldSize) / 2);
|
|
44
|
+
const below = r +
|
|
45
|
+
LABEL.offset +
|
|
46
|
+
LABEL.size * LABEL.lineHeight +
|
|
47
|
+
(secondary === undefined ? 0 : LABEL.secondaryGap);
|
|
48
|
+
b.add(x - half, y - r, x + half, y + below);
|
|
49
|
+
}
|
|
50
|
+
export function rectCenter(r) {
|
|
51
|
+
return { x: r.x + r.width / 2, y: r.y + r.height / 2 };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Slot `k` of a fan of lines: with an odd number of real lines the first is straight and the
|
|
55
|
+
* rest alternate ±0.18·1, ±0.18·2, …; with an even number all are curved ±0.18·1, ±0.18·2, ….
|
|
56
|
+
*/
|
|
57
|
+
function slot(k, odd) {
|
|
58
|
+
if (odd)
|
|
59
|
+
return k === 0 ? 0 : Math.ceil(k / 2) * PARALLEL_CURVATURE * (k % 2 === 1 ? 1 : -1);
|
|
60
|
+
return (Math.floor(k / 2) + 1) * PARALLEL_CURVATURE * (k % 2 === 0 ? 1 : -1);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Curvature for every form so that lines sharing an (unordered) node pair fan out. Real lines
|
|
64
|
+
* are slotted first as if alone (a lone line stays straight), so their geometry never depends
|
|
65
|
+
* on ghosts; ghosts continue the fan. Signs are expressed in each form's own direction so
|
|
66
|
+
* A→B and B→A never overlap. Order within a group is the input order (deterministic). O(F).
|
|
67
|
+
*/
|
|
68
|
+
export function parallelCurvatures(forms) {
|
|
69
|
+
const out = new Float64Array(forms.length);
|
|
70
|
+
const groups = new Map();
|
|
71
|
+
for (let i = 0; i < forms.length; i++) {
|
|
72
|
+
const f = forms[i];
|
|
73
|
+
const key = f.a <= f.b ? `${f.a},${f.b}` : `${f.b},${f.a}`;
|
|
74
|
+
const g = groups.get(key);
|
|
75
|
+
if (g === undefined)
|
|
76
|
+
groups.set(key, [i]);
|
|
77
|
+
else
|
|
78
|
+
g.push(i);
|
|
79
|
+
}
|
|
80
|
+
for (const members of groups.values()) {
|
|
81
|
+
if (members.length < 2)
|
|
82
|
+
continue;
|
|
83
|
+
const real = members.filter((i) => forms[i]?.ghost !== true);
|
|
84
|
+
const ghosts = members.filter((i) => forms[i]?.ghost === true);
|
|
85
|
+
const odd = (real.length > 0 ? real.length : ghosts.length) % 2 === 1;
|
|
86
|
+
const ordered = [...real, ...ghosts];
|
|
87
|
+
for (let k = 0; k < ordered.length; k++) {
|
|
88
|
+
const idx = ordered[k];
|
|
89
|
+
const f = forms[idx];
|
|
90
|
+
const c = slot(k, odd);
|
|
91
|
+
out[idx] = f.a <= f.b ? c : -c;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return out;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Curvatures of every edge's drawn form (after endpoints) and of its before form when that
|
|
98
|
+
* differs (retargeted / carried ghosts; 0 otherwise).
|
|
99
|
+
*/
|
|
100
|
+
export function edgeCurvatures(edges) {
|
|
101
|
+
const forms = [];
|
|
102
|
+
for (const e of edges)
|
|
103
|
+
forms.push({ a: e.s, b: e.t });
|
|
104
|
+
const ghostSlot = new Int32Array(edges.length).fill(-1);
|
|
105
|
+
for (let i = 0; i < edges.length; i++) {
|
|
106
|
+
const e = edges[i];
|
|
107
|
+
if (e.sb !== e.s || e.tb !== e.t) {
|
|
108
|
+
ghostSlot[i] = forms.length;
|
|
109
|
+
forms.push({ a: e.sb, b: e.tb, ghost: true });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const all = parallelCurvatures(forms);
|
|
113
|
+
const primary = all.slice(0, edges.length);
|
|
114
|
+
const ghost = new Float64Array(edges.length);
|
|
115
|
+
for (let i = 0; i < edges.length; i++) {
|
|
116
|
+
const k = ghostSlot[i];
|
|
117
|
+
if (k >= 0)
|
|
118
|
+
ghost[i] = all[k];
|
|
119
|
+
}
|
|
120
|
+
return { primary, ghost };
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=geometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.js","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @kgdiff/scene: diff semantics → visual primitives.
|
|
3
|
+
*
|
|
4
|
+
* The visual language these functions implement is specified in docs/visual-language.md
|
|
5
|
+
* (tokens, encodings, motion); ordering, timeline and focus in docs/algorithms.md §10–11.
|
|
6
|
+
*/
|
|
7
|
+
export { buildScene } from './build.js';
|
|
8
|
+
export { contrastRatio } from './color.js';
|
|
9
|
+
export { computeFocus } from './focus.js';
|
|
10
|
+
export { frameBounds } from './frame.js';
|
|
11
|
+
export { createVisualResolver } from './resolver.js';
|
|
12
|
+
export { hunkFamily } from './roles.js';
|
|
13
|
+
export { getTheme } from './theme.js';
|
|
14
|
+
export * from './types.js';
|
|
15
|
+
export { createViewState } from './view.js';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @kgdiff/scene: diff semantics → visual primitives.
|
|
3
|
+
*
|
|
4
|
+
* The visual language these functions implement is specified in docs/visual-language.md
|
|
5
|
+
* (tokens, encodings, motion); ordering, timeline and focus in docs/algorithms.md §10–11.
|
|
6
|
+
*/
|
|
7
|
+
export { buildScene } from './build.js';
|
|
8
|
+
export { contrastRatio } from './color.js';
|
|
9
|
+
export { computeFocus } from './focus.js';
|
|
10
|
+
export { frameBounds } from './frame.js';
|
|
11
|
+
export { createVisualResolver } from './resolver.js';
|
|
12
|
+
export { hunkFamily } from './roles.js';
|
|
13
|
+
export { getTheme } from './theme.js';
|
|
14
|
+
export * from './types.js';
|
|
15
|
+
export { createViewState } from './view.js';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Scene, VisualResolver } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* A resolver that turns a `ViewState` into drawable primitives for `scene`
|
|
4
|
+
* (docs/visual-language.md). Construction is O(N + E); `resolve` is O(N + E) per frame and,
|
|
5
|
+
* when `out` is passed back in, allocates no objects or arrays (see the module notes for the
|
|
6
|
+
* transient number boxing V8 may still do while replay animations run).
|
|
7
|
+
*/
|
|
8
|
+
export declare function createVisualResolver(scene: Scene): VisualResolver;
|
|
9
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAuEA,OAAO,KAAK,EAYV,KAAK,EAEL,cAAc,EACf,MAAM,YAAY,CAAC;AA+kDpB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,cAAc,CAEjE"}
|