From c7f808ce2d52925425b49f92edf49d9557f8901d Mon Sep 17 00:00:00 2001 From: release-bot Date: Sun, 8 Feb 2026 22:56:41 +0100 Subject: [PATCH] wip --- Cargo.lock | 8 + .../lib/graph-interface/graph-state.svelte.ts | 24 ++- .../lib/graph-interface/graph/mouse.events.ts | 15 +- .../graph-interface/node/NodeParameter.svelte | 5 +- nodes/max/plantarium/shape/.gitignore | 6 + nodes/max/plantarium/shape/Cargo.toml | 12 ++ nodes/max/plantarium/shape/src/input.json | 26 +++ nodes/max/plantarium/shape/src/lib.rs | 13 ++ packages/types/src/inputs.ts | 9 +- packages/types/src/lib.rs | 10 ++ packages/ui/src/lib/Input.svelte | 4 +- packages/ui/src/lib/inputs/InputSelect.svelte | 2 +- packages/ui/src/lib/inputs/InputShape.svelte | 170 +++++++++--------- packages/ui/src/routes/+page.svelte | 2 +- 14 files changed, 193 insertions(+), 113 deletions(-) create mode 100644 nodes/max/plantarium/shape/.gitignore create mode 100644 nodes/max/plantarium/shape/Cargo.toml create mode 100644 nodes/max/plantarium/shape/src/input.json create mode 100644 nodes/max/plantarium/shape/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index e11370a..99a35d0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -245,6 +245,14 @@ dependencies = [ "zmij", ] +[[package]] +name = "shape" +version = "0.1.0" +dependencies = [ + "nodarium_macros", + "nodarium_utils", +] + [[package]] name = "stem" version = "0.1.0" diff --git a/app/src/lib/graph-interface/graph-state.svelte.ts b/app/src/lib/graph-interface/graph-state.svelte.ts index 4b8a001..a989174 100644 --- a/app/src/lib/graph-interface/graph-state.svelte.ts +++ b/app/src/lib/graph-interface/graph-state.svelte.ts @@ -186,15 +186,21 @@ export class GraphState { if (!node?.inputs) { return 5; } - const height = 5 - + 10 - * Object.keys(node.inputs).filter( - (p) => - p !== 'seed' - && node?.inputs - && !(node?.inputs?.[p] !== undefined && 'setting' in node.inputs[p]) - && node.inputs[p].hidden !== true - ).length; + let height = 5; + + for (const key of Object.keys(node.inputs)) { + if (key === 'seed') continue; + if (!node.inputs) continue; + if (node?.inputs?.[key] === undefined) continue; + if ('setting' in node.inputs[key]) continue; + if (node.inputs[key].hidden) continue; + if (node.inputs[key].type === 'shape') { + height += 20; + continue; + } + height += 10; + } + this.nodeHeightCache[nodeTypeId] = height; return height; } diff --git a/app/src/lib/graph-interface/graph/mouse.events.ts b/app/src/lib/graph-interface/graph/mouse.events.ts index ad553a3..e7c32c0 100644 --- a/app/src/lib/graph-interface/graph/mouse.events.ts +++ b/app/src/lib/graph-interface/graph/mouse.events.ts @@ -166,15 +166,14 @@ export class MouseEventManager { if (this.state.mouseDown) return; this.state.edgeEndPosition = null; + const target = event.target as HTMLElement; - if (event.target instanceof HTMLElement) { - if ( - event.target.nodeName !== 'CANVAS' - && !event.target.classList.contains('node') - && !event.target.classList.contains('content') - ) { - return; - } + if ( + target.nodeName !== 'CANVAS' + && !target.classList.contains('node') + && !target.classList.contains('content') + ) { + return; } const mx = event.clientX - this.state.rect.x; diff --git a/app/src/lib/graph-interface/node/NodeParameter.svelte b/app/src/lib/graph-interface/node/NodeParameter.svelte index dc48390..cf37541 100644 --- a/app/src/lib/graph-interface/node/NodeParameter.svelte +++ b/app/src/lib/graph-interface/node/NodeParameter.svelte @@ -18,6 +18,7 @@ const inputType = $derived(node?.state?.type?.inputs?.[id]); const socketId = $derived(`${node.id}-${id}`); + const height = $derived(input.type === 'shape' ? 200 : 100); const graphState = getGraphState(); const graphId = graph?.id; @@ -64,6 +65,7 @@ class="wrapper" data-node-type={node.type} data-node-input={id} + style:height="{height}px" class:possible-socket={graphState?.possibleSocketIds.has(socketId)} > {#key id && graphId} @@ -95,8 +97,6 @@ "] +edition = "2018" + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +nodarium_macros = { version = "0.1.0", path = "../../../../packages/macros" } +nodarium_utils = { version = "0.1.0", path = "../../../../packages/utils" } diff --git a/nodes/max/plantarium/shape/src/input.json b/nodes/max/plantarium/shape/src/input.json new file mode 100644 index 0000000..40fae13 --- /dev/null +++ b/nodes/max/plantarium/shape/src/input.json @@ -0,0 +1,26 @@ +{ + "id": "max/plantarium/shape", + "outputs": [ + "shape" + ], + "inputs": { + "shape": { + "type": "shape", + "value": [ + 47.8, + 100, + 47.8, + 82.8, + 30.9, + 69.1, + 23.2, + 40.7, + 27.1, + 14.5, + 42.5, + 0 + ], + "label": "" + } + } +} diff --git a/nodes/max/plantarium/shape/src/lib.rs b/nodes/max/plantarium/shape/src/lib.rs new file mode 100644 index 0000000..118fd29 --- /dev/null +++ b/nodes/max/plantarium/shape/src/lib.rs @@ -0,0 +1,13 @@ +use nodarium_macros::nodarium_definition_file; +use nodarium_macros::nodarium_execute; +use nodarium_utils::{concat_args, log, split_args}; + +nodarium_definition_file!("src/input.json"); + +#[nodarium_execute] +pub fn execute(input: &[i32]) -> Vec { + let args = split_args(input); + log!("vec3 input: {:?}", input); + log!("vec3 args: {:?}", args); + concat_args(args) +} diff --git a/packages/types/src/inputs.ts b/packages/types/src/inputs.ts index 2dda150..9c841a8 100644 --- a/packages/types/src/inputs.ts +++ b/packages/types/src/inputs.ts @@ -26,7 +26,6 @@ const DefaultOptionsSchema = z.object({ export const NodeInputFloatSchema = z.object({ ...DefaultOptionsSchema.shape, type: z.literal('float'), - element: z.literal('slider').optional(), value: z.number().optional(), min: z.number().optional(), max: z.number().optional(), @@ -36,12 +35,17 @@ export const NodeInputFloatSchema = z.object({ export const NodeInputIntegerSchema = z.object({ ...DefaultOptionsSchema.shape, type: z.literal('integer'), - element: z.literal('slider').optional(), value: z.number().optional(), min: z.number().optional(), max: z.number().optional() }); +export const NodeInputShapeSchema = z.object({ + ...DefaultOptionsSchema.shape, + type: z.literal('shape'), + value: z.array(z.number()).optional() +}); + export const NodeInputBooleanSchema = z.object({ ...DefaultOptionsSchema.shape, type: z.literal('boolean'), @@ -84,6 +88,7 @@ export const NodeInputSchema = z.union([ NodeInputBooleanSchema, NodeInputFloatSchema, NodeInputIntegerSchema, + NodeInputShapeSchema, NodeInputSelectSchema, NodeInputSeedSchema, NodeInputVec3Schema, diff --git a/packages/types/src/lib.rs b/packages/types/src/lib.rs index 5c5262f..c8fed22 100644 --- a/packages/types/src/lib.rs +++ b/packages/types/src/lib.rs @@ -103,6 +103,15 @@ pub struct NodeInputVec3 { pub value: Option>, } +#[derive(Serialize, Deserialize)] +pub struct NodeInputShape { + #[serde(flatten)] + pub default_options: DefaultOptions, + + #[serde(skip_serializing_if = "Option::is_none")] + pub value: Option>, +} + #[derive(Serialize, Deserialize)] pub struct NodeInputGeometry { #[serde(flatten)] @@ -125,6 +134,7 @@ pub enum NodeInput { select(NodeInputSelect), seed(NodeInputSeed), vec3(NodeInputVec3), + shape(NodeInputShape), geometry(NodeInputGeometry), path(NodeInputPath), } diff --git a/packages/ui/src/lib/Input.svelte b/packages/ui/src/lib/Input.svelte index 581b585..b16490f 100644 --- a/packages/ui/src/lib/Input.svelte +++ b/packages/ui/src/lib/Input.svelte @@ -1,7 +1,7 @@

{JSON.stringify(points)}

{/snippet} - +