@xenolithengine/graph-render-pixi 0.7.0-beta.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 +49 -0
- package/dist/bezier.d.ts +30 -0
- package/dist/bezier.d.ts.map +1 -0
- package/dist/bezier.js +70 -0
- package/dist/bezier.js.map +1 -0
- package/dist/comment-renderer.d.ts +35 -0
- package/dist/comment-renderer.d.ts.map +1 -0
- package/dist/comment-renderer.js +194 -0
- package/dist/comment-renderer.js.map +1 -0
- package/dist/edge-paths.d.ts +24 -0
- package/dist/edge-paths.d.ts.map +1 -0
- package/dist/edge-paths.js +123 -0
- package/dist/edge-paths.js.map +1 -0
- package/dist/edge-renderer.d.ts +29 -0
- package/dist/edge-renderer.d.ts.map +1 -0
- package/dist/edge-renderer.js +99 -0
- package/dist/edge-renderer.js.map +1 -0
- package/dist/geom.d.ts +46 -0
- package/dist/geom.d.ts.map +1 -0
- package/dist/geom.js +54 -0
- package/dist/geom.js.map +1 -0
- package/dist/grid.d.ts +12 -0
- package/dist/grid.d.ts.map +1 -0
- package/dist/grid.js +35 -0
- package/dist/grid.js.map +1 -0
- package/dist/icons.d.ts +14 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +32 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction.d.ts +69 -0
- package/dist/interaction.d.ts.map +1 -0
- package/dist/interaction.js +229 -0
- package/dist/interaction.js.map +1 -0
- package/dist/layout.d.ts +126 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +360 -0
- package/dist/layout.js.map +1 -0
- package/dist/macro-frame.d.ts +29 -0
- package/dist/macro-frame.d.ts.map +1 -0
- package/dist/macro-frame.js +116 -0
- package/dist/macro-frame.js.map +1 -0
- package/dist/node-renderer.d.ts +102 -0
- package/dist/node-renderer.d.ts.map +1 -0
- package/dist/node-renderer.js +776 -0
- package/dist/node-renderer.js.map +1 -0
- package/dist/reroute-renderer.d.ts +25 -0
- package/dist/reroute-renderer.d.ts.map +1 -0
- package/dist/reroute-renderer.js +163 -0
- package/dist/reroute-renderer.js.map +1 -0
- package/dist/style.d.ts +56 -0
- package/dist/style.d.ts.map +1 -0
- package/dist/style.js +102 -0
- package/dist/style.js.map +1 -0
- package/dist/text-measure.d.ts +6 -0
- package/dist/text-measure.d.ts.map +1 -0
- package/dist/text-measure.js +21 -0
- package/dist/text-measure.js.map +1 -0
- package/dist/theme.d.ts +86 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +2 -0
- package/dist/theme.js.map +1 -0
- package/dist/viewport-math.d.ts +68 -0
- package/dist/viewport-math.d.ts.map +1 -0
- package/dist/viewport-math.js +106 -0
- package/dist/viewport-math.js.map +1 -0
- package/dist/viewport.d.ts +28 -0
- package/dist/viewport.d.ts.map +1 -0
- package/dist/viewport.js +47 -0
- package/dist/viewport.js.map +1 -0
- package/dist/virtualize.d.ts +55 -0
- package/dist/virtualize.d.ts.map +1 -0
- package/dist/virtualize.js +96 -0
- package/dist/virtualize.js.map +1 -0
- package/dist/widget-renderer.d.ts +150 -0
- package/dist/widget-renderer.d.ts.map +1 -0
- package/dist/widget-renderer.js +399 -0
- package/dist/widget-renderer.js.map +1 -0
- package/dist/xen-theme.d.ts +8 -0
- package/dist/xen-theme.d.ts.map +1 -0
- package/dist/xen-theme.js +23 -0
- package/dist/xen-theme.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Container, Graphics, type Renderer } from 'pixi.js';
|
|
2
|
+
import type { StateStyle } from '@xenolithengine/graph-theme-xen';
|
|
3
|
+
import type { Node, Pin, TypeRegistry } from '@xenolithengine/graph-core';
|
|
4
|
+
import type { XenTokens } from '@xenolithengine/graph-theme-xen';
|
|
5
|
+
import { type WidgetHit, type CustomWidgetController } from './widget-renderer.js';
|
|
6
|
+
import { type GraphCategoryPalette } from './style.js';
|
|
7
|
+
export type NodeVisualState = 'default' | 'hover' | 'selected' | 'active';
|
|
8
|
+
/** Metadata attached to every pin Graphics so the editor's stage-level pointer handlers can
|
|
9
|
+
* identify which pin was hit without reaching into renderer internals. */
|
|
10
|
+
export interface PinHandle {
|
|
11
|
+
nodeId: string;
|
|
12
|
+
pinId: string;
|
|
13
|
+
direction: 'in' | 'out';
|
|
14
|
+
kind: 'exec' | 'data';
|
|
15
|
+
type: string;
|
|
16
|
+
}
|
|
17
|
+
/** Read the PinHandle from a PIXI event target (or any DisplayObject). Returns null when the
|
|
18
|
+
* target is not a pin Graphics. Editor code uses this on stage `pointerdown` / `pointerover`. */
|
|
19
|
+
export declare function readPinHandle(target: unknown): PinHandle | null;
|
|
20
|
+
export declare function markPinInteractive(g: Graphics, pin: Pin, nodeId: string, cx: number, cy: number, visualRadius: number): void;
|
|
21
|
+
export interface RenderNodeOptions {
|
|
22
|
+
category?: string;
|
|
23
|
+
title?: string;
|
|
24
|
+
state?: NodeVisualState;
|
|
25
|
+
collapsed?: boolean;
|
|
26
|
+
/** Skip title ellipsis — used during inline rename so the live (possibly overflowing) title shows
|
|
27
|
+
* in full while the user types, matching the comment-rename behaviour. */
|
|
28
|
+
fullTitle?: boolean;
|
|
29
|
+
/** Per-node header colour override (from `render.color` in the graph data). Beats category/theme. */
|
|
30
|
+
color?: string;
|
|
31
|
+
/** Graph-level category palette (from `categories` in the graph data). Overrides theme tokens. */
|
|
32
|
+
categoryPalette?: GraphCategoryPalette;
|
|
33
|
+
/** Active PIXI Renderer — when provided, selection/hover/active glow strokes are baked into
|
|
34
|
+
* shared textures keyed by (size × radius × style). Without it, each glow falls back to a
|
|
35
|
+
* live BlurFilter (acceptable for unit tests, expensive at scale). */
|
|
36
|
+
renderer?: Renderer | null;
|
|
37
|
+
/** Called whenever the view mutates outside the editor's knowledge — currently the internal
|
|
38
|
+
* collapse/expand animation, which drives itself on Ticker.shared. The editor uses this to
|
|
39
|
+
* mark its render-on-demand loop dirty so animation frames actually paint. */
|
|
40
|
+
requestRender?: () => void;
|
|
41
|
+
/** Host-registered custom widget controllers, keyed by the `renderer` name on a `custom` widget. */
|
|
42
|
+
customWidgets?: ReadonlyMap<string, CustomWidgetController>;
|
|
43
|
+
/** Custom pin-type descriptors — a pin whose type the theme doesn't know falls back to the
|
|
44
|
+
* registered descriptor's colour instead of the generic `any` grey. */
|
|
45
|
+
types?: TypeRegistry;
|
|
46
|
+
/** A small glyph drawn in the header to mark a node without relying on colour. `svg` is the inner
|
|
47
|
+
* markup of a 24×24 icon (the editor resolves a {@link NodeGlyph} name via its icon registry);
|
|
48
|
+
* `side` picks which side of the title it sits on. Positioning/centring is automatic. */
|
|
49
|
+
glyph?: {
|
|
50
|
+
svg: string;
|
|
51
|
+
side: 'left' | 'right';
|
|
52
|
+
};
|
|
53
|
+
/** PinIds (string) on this node that currently have at least one edge attached. Drives the
|
|
54
|
+
* exec-pin paint (filled gold when connected, outlined white when not). The renderer treats
|
|
55
|
+
* an absent set as "nothing connected" — safe default for headless tests. */
|
|
56
|
+
connectedPinIds?: ReadonlySet<string>;
|
|
57
|
+
/** Live runtime value flowing into this node's bound pin (used by `'always'` display widgets
|
|
58
|
+
* so they show the wire's current value, not the stored default). Editor binds this from the
|
|
59
|
+
* host's runtime plugin; tests usually omit it. */
|
|
60
|
+
pinLiveValue?: (pinKey: string) => unknown;
|
|
61
|
+
}
|
|
62
|
+
export interface NodeView {
|
|
63
|
+
readonly container: Container;
|
|
64
|
+
setVisualState(state: NodeVisualState): void;
|
|
65
|
+
setCollapsed(collapsed: boolean, animated?: boolean): void;
|
|
66
|
+
isCollapsed(): boolean;
|
|
67
|
+
/** The collapsed header pill's rect (+ corner radius) in node-local coords. Lets the editor
|
|
68
|
+
* occlude DOM widgets behind a collapsed node by its actual rounded pill, not its full size. */
|
|
69
|
+
readonly collapsedRect?: {
|
|
70
|
+
x: number;
|
|
71
|
+
y: number;
|
|
72
|
+
w: number;
|
|
73
|
+
h: number;
|
|
74
|
+
r: number;
|
|
75
|
+
};
|
|
76
|
+
/** Centre of a pin in the node's local coordinates given the current visual state.
|
|
77
|
+
* Edge renderers use this to track pin positions as nodes collapse/expand. */
|
|
78
|
+
pinLocalPosition(pinId: string): {
|
|
79
|
+
x: number;
|
|
80
|
+
y: number;
|
|
81
|
+
} | null;
|
|
82
|
+
/** Widget under a node-local point (expanded form only), or null. Absent on views without
|
|
83
|
+
* widgets (reroutes, themes that don't draw them). */
|
|
84
|
+
widgetHit?(localX: number, localY: number): WidgetHit | null;
|
|
85
|
+
/** Cheaply refresh one widget's visual to a new value (live slider/number drag). */
|
|
86
|
+
updateWidget?(id: string, value: unknown): void;
|
|
87
|
+
}
|
|
88
|
+
/** Append a pin glyph path to `g`: a right-pointing arrow (exec/control flow), a diamond (e.g. struct
|
|
89
|
+
* types), or a circle (data). Shared by both renderers + the expanded/collapsed pin paths. */
|
|
90
|
+
export declare function buildPinShape(g: Graphics, shape: 'circle' | 'diamond' | 'arrow', x: number, y: number, r: number): Graphics;
|
|
91
|
+
/** A header glyph scaled to a `size`×`size` box. `svgInner` is the inner markup of a 24×24 viewBox
|
|
92
|
+
* (resolve a name via {@link IconRegistry}); the art is centred within the box, so place its
|
|
93
|
+
* top-left at `(x, centerY - size/2)` to centre it on a line. Shared by Xen + Liquid Glass. */
|
|
94
|
+
export declare function makeHeaderIcon(svgInner: string, color: string, size: number): Graphics;
|
|
95
|
+
export declare function makeGlowLayer(style: StateStyle, w: number, h: number, radius: number, renderer: Renderer | null): Container;
|
|
96
|
+
/** Drop the module-level cache — call when switching themes or on editor disposal to free the
|
|
97
|
+
* GPU memory the baked glow textures hold. */
|
|
98
|
+
export declare function clearGlowTextureCache(): void;
|
|
99
|
+
/** Drop the shared gradient cache (theme switch / disposal) — releases the gradient textures. */
|
|
100
|
+
export declare function clearGradientCache(): void;
|
|
101
|
+
export declare function renderNode(node: Node, tokens: XenTokens, opts?: RenderNodeOptions): NodeView;
|
|
102
|
+
//# sourceMappingURL=node-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-renderer.d.ts","sourceRoot":"","sources":["../src/node-renderer.ts"],"names":[],"mappings":"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"}
|