geonodes-web-render 0.3.14 → 0.3.16
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/dist/embed.css +1 -1
- package/dist/embed.js +1297 -962
- package/dist/types/gn/components/ColorRampViz.d.ts +7 -0
- package/dist/types/gn/components/GeometryNodesFlow.d.ts +13 -3
- package/dist/types/gn/components/NodeFrame.d.ts +2 -0
- package/dist/types/gn/importer/blenderTree.d.ts +23 -1
- package/dist/types/gn/ir/types.d.ts +17 -0
- package/dist/types/gn/xyflow/mapGraphIRToFlow.d.ts +5 -1
- package/package.json +1 -2
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ColorRampData } from '../ir/types';
|
|
2
|
+
/** Evaluate the ramp at t∈[0,1], returning scene-linear RGBA. */
|
|
3
|
+
export declare function evalColorRamp(data: ColorRampData, t: number): [number, number, number, number];
|
|
4
|
+
export declare function ColorRampViz({ data, width }: {
|
|
5
|
+
data: ColorRampData;
|
|
6
|
+
width: number;
|
|
7
|
+
}): import("react").JSX.Element;
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How the canvas captures the mouse wheel:
|
|
3
|
+
* - `'always'` — standalone app: wheel always zooms (and pans with middle drag,
|
|
4
|
+
* box-selects with left drag).
|
|
5
|
+
* - `'hybrid'` — embedded: the wheel scrolls the host page until the user clicks
|
|
6
|
+
* the canvas to "engage"; then it zooms like the standalone app until the
|
|
7
|
+
* pointer leaves. Ctrl+wheel / trackpad-pinch zoom even while resting.
|
|
8
|
+
* - `'none'` — wheel always scrolls the page; pan via left/middle drag only.
|
|
9
|
+
*/
|
|
10
|
+
export type InteractionMode = 'always' | 'hybrid' | 'none';
|
|
1
11
|
export declare function GeometryNodesFlow(props: {
|
|
2
12
|
jsonText: string;
|
|
3
13
|
/** When false, hide the panel header ("Geometry Nodes Graph" and node count). Default true. */
|
|
@@ -7,7 +17,7 @@ export declare function GeometryNodesFlow(props: {
|
|
|
7
17
|
/** Called when the user copies a magic string via the right-click menu. When
|
|
8
18
|
* provided, the canvas skips its own toast so the host can show one instead. */
|
|
9
19
|
onCopiedMagicString?: () => void;
|
|
10
|
-
/**
|
|
11
|
-
* so the wheel scrolls the host page
|
|
12
|
-
|
|
20
|
+
/** How the wheel is captured. Default `'always'` (standalone). Use `'hybrid'`
|
|
21
|
+
* in an embed so the wheel scrolls the host page until the canvas is clicked. */
|
|
22
|
+
interaction?: InteractionMode;
|
|
13
23
|
}): import("react").JSX.Element;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FloatCurveData, GraphIR, SocketDefaultValue, SocketDisplayShape } from '../ir/types';
|
|
1
|
+
import { ColorRampData, FloatCurveData, GraphIR, SocketDefaultValue, SocketDisplayShape } from '../ir/types';
|
|
2
2
|
type BlenderSocket = {
|
|
3
3
|
id: number;
|
|
4
4
|
data: {
|
|
@@ -19,6 +19,7 @@ type BlenderNode = {
|
|
|
19
19
|
width?: number;
|
|
20
20
|
location?: [number, number];
|
|
21
21
|
location_absolute?: [number, number];
|
|
22
|
+
parent?: number | null;
|
|
22
23
|
inputs?: {
|
|
23
24
|
data: {
|
|
24
25
|
items: BlenderSocket[];
|
|
@@ -66,6 +67,24 @@ type BlenderNode = {
|
|
|
66
67
|
};
|
|
67
68
|
};
|
|
68
69
|
};
|
|
70
|
+
color_ramp?: {
|
|
71
|
+
data: {
|
|
72
|
+
interpolation?: string;
|
|
73
|
+
hue_interpolation?: string;
|
|
74
|
+
color_mode?: string;
|
|
75
|
+
elements: {
|
|
76
|
+
data: {
|
|
77
|
+
items: Array<{
|
|
78
|
+
data: {
|
|
79
|
+
color: [number, number, number, number];
|
|
80
|
+
alpha?: number;
|
|
81
|
+
position: number;
|
|
82
|
+
};
|
|
83
|
+
}>;
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
};
|
|
69
88
|
};
|
|
70
89
|
};
|
|
71
90
|
type BlenderLink = {
|
|
@@ -119,10 +138,13 @@ export type NormalizedNode = {
|
|
|
119
138
|
inputs: NormalizedSocket[];
|
|
120
139
|
outputs: NormalizedSocket[];
|
|
121
140
|
floatCurve?: FloatCurveData;
|
|
141
|
+
colorRamp?: ColorRampData;
|
|
122
142
|
properties?: Record<string, string>;
|
|
123
143
|
/** For group nodes: id/name of the referenced node tree (if present in the export). */
|
|
124
144
|
groupTreeId?: string;
|
|
125
145
|
groupTreeName?: string;
|
|
146
|
+
/** Id of the NodeFrame this node is parented to (Blender "parent"), if any. */
|
|
147
|
+
parentFrameId?: string;
|
|
126
148
|
};
|
|
127
149
|
export type NormalizedLink = {
|
|
128
150
|
id: string;
|
|
@@ -11,6 +11,20 @@ export type FloatCurveData = {
|
|
|
11
11
|
extend: string;
|
|
12
12
|
points: FloatCurvePoint[];
|
|
13
13
|
};
|
|
14
|
+
export type ColorRampStop = {
|
|
15
|
+
position: number;
|
|
16
|
+
/** Scene-linear RGBA, as stored by Blender. */
|
|
17
|
+
color: [number, number, number, number];
|
|
18
|
+
};
|
|
19
|
+
export type ColorRampData = {
|
|
20
|
+
/** LINEAR | EASE | CONSTANT | B_SPLINE | CARDINAL */
|
|
21
|
+
interpolation: string;
|
|
22
|
+
/** RGB | HSV | HSL */
|
|
23
|
+
colorMode: string;
|
|
24
|
+
/** NEAR | FAR | CW | CCW */
|
|
25
|
+
hueInterpolation: string;
|
|
26
|
+
stops: ColorRampStop[];
|
|
27
|
+
};
|
|
14
28
|
export type SocketDisplayShape = 'CIRCLE' | 'DIAMOND' | 'LINE' | 'LIST' | 'VOLUME_GRID';
|
|
15
29
|
export type SocketDefaultValue = {
|
|
16
30
|
kind: 'scalar';
|
|
@@ -45,11 +59,14 @@ export type NodeIR = {
|
|
|
45
59
|
inputs: SocketIR[];
|
|
46
60
|
outputs: SocketIR[];
|
|
47
61
|
floatCurve?: FloatCurveData;
|
|
62
|
+
colorRamp?: ColorRampData;
|
|
48
63
|
/** Node-type-specific enum properties (e.g. operation, data_type for Compare) */
|
|
49
64
|
properties?: Record<string, string>;
|
|
50
65
|
/** For group nodes: id/name of the referenced node tree within the export */
|
|
51
66
|
groupTreeId?: string;
|
|
52
67
|
groupTreeName?: string;
|
|
68
|
+
/** Id of the NodeFrame this node is parented to (Blender "parent"), if any. */
|
|
69
|
+
parentFrameId?: string;
|
|
53
70
|
};
|
|
54
71
|
export type EdgeIR = {
|
|
55
72
|
id: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Edge, Node } from '@xyflow/react';
|
|
2
|
-
import { FloatCurveData, GraphIR, SocketIR } from '../ir/types';
|
|
2
|
+
import { ColorRampData, FloatCurveData, GraphIR, SocketIR } from '../ir/types';
|
|
3
3
|
export type GNFlowNodeData = {
|
|
4
4
|
label: string;
|
|
5
5
|
type: string;
|
|
@@ -9,6 +9,7 @@ export type GNFlowNodeData = {
|
|
|
9
9
|
outputs: SocketIR[];
|
|
10
10
|
connectedInputIds: string[];
|
|
11
11
|
floatCurve?: FloatCurveData;
|
|
12
|
+
colorRamp?: ColorRampData;
|
|
12
13
|
properties?: Record<string, string>;
|
|
13
14
|
groupTreeId?: string;
|
|
14
15
|
groupTreeName?: string;
|
|
@@ -21,6 +22,9 @@ export type GNRerouteNodeData = {
|
|
|
21
22
|
export type SimulationZoneNodeData = {
|
|
22
23
|
label: string;
|
|
23
24
|
};
|
|
25
|
+
export type NodeFrameData = {
|
|
26
|
+
label: string;
|
|
27
|
+
};
|
|
24
28
|
export declare function mapGraphIRToFlow(graph: GraphIR): {
|
|
25
29
|
nodes: Node[];
|
|
26
30
|
edges: Edge[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "geonodes-web-render",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.16",
|
|
4
4
|
"description": "Browser-based viewer for Blender Geometry Nodes exported via Tree Clipper. Renders node trees as a read-only, Blender-styled graph.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
"build:lib": "vite build --config vite.lib.config.ts",
|
|
33
33
|
"lint": "eslint .",
|
|
34
34
|
"preview": "vite preview",
|
|
35
|
-
"convert:nodebpy": "rolldown scripts/convertExamples.ts --format esm --file node_modules/.tmp/convertExamples.mjs --external node:fs --external node:path && node node_modules/.tmp/convertExamples.mjs",
|
|
36
35
|
"prepublishOnly": "npm run build:lib"
|
|
37
36
|
},
|
|
38
37
|
"dependencies": {
|