geonodes-web-render 0.3.11 → 0.3.13

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 CHANGED
@@ -1,2 +1,2 @@
1
- .react-flow{--xy-edge-stroke-default:#b1b1b7;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#555;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#ffffff80;--xy-minimap-background-color-default:#fff;--xy-minimap-mask-background-color-default:#f0f0f099;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#e2e2e2;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:transparent;--xy-background-pattern-dots-color-default:#91919a;--xy-background-pattern-lines-color-default:#eee;--xy-background-pattern-cross-color-default:#e2e2e2;background-color:var(--xy-background-color,var(--xy-background-color-default));--xy-node-color-default:inherit;--xy-node-border-default:1px solid #1a192b;--xy-node-background-color-default:#fff;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #00000014;--xy-node-boxshadow-selected-default:0 0 0 .5px #1a192b;--xy-node-border-radius-default:3px;--xy-handle-background-color-default:#1a192b;--xy-handle-border-color-default:#fff;--xy-selection-background-color-default:#0059dc14;--xy-selection-border-default:1px dotted #0059dccc;--xy-controls-button-background-color-default:#fefefe;--xy-controls-button-background-color-hover-default:#f4f4f4;--xy-controls-button-color-default:inherit;--xy-controls-button-color-hover-default:inherit;--xy-controls-button-border-color-default:#eee;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#fff;--xy-edge-label-color-default:inherit;--xy-resize-background-color-default:#3367d9;direction:ltr}.react-flow.dark{--xy-edge-stroke-default:#3e3e3e;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#727272;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#96969640;--xy-minimap-background-color-default:#141414;--xy-minimap-mask-background-color-default:#3c3c3c99;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#2b2b2b;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:#141414;--xy-background-pattern-dots-color-default:#777;--xy-background-pattern-lines-color-default:#777;--xy-background-pattern-cross-color-default:#777;--xy-node-color-default:#f8f8f8;--xy-node-border-default:1px solid #3c3c3c;--xy-node-background-color-default:#1e1e1e;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #ffffff14;--xy-node-boxshadow-selected-default:0 0 0 .5px #999;--xy-handle-background-color-default:#bebebe;--xy-handle-border-color-default:#1e1e1e;--xy-selection-background-color-default:#c8c8dc14;--xy-selection-border-default:1px dotted #c8c8dccc;--xy-controls-button-background-color-default:#2b2b2b;--xy-controls-button-background-color-hover-default:#3e3e3e;--xy-controls-button-color-default:#f8f8f8;--xy-controls-button-color-hover-default:#fff;--xy-controls-button-border-color-default:#5b5b5b;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#141414;--xy-edge-label-color-default:#f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props,var(--xy-background-color,var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width,var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke,var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width,var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{pointer-events:none;position:absolute;overflow:visible}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected,var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:.5s linear infinite dashdraw}svg.react-flow__connectionline{z-index:1001;position:absolute;overflow:visible}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{-webkit-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default;position:absolute}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:0 0;pointer-events:none}.react-flow__nodesselection-rect{pointer-events:all;cursor:grab;position:absolute}.react-flow__handle{pointer-events:none;background-color:var(--xy-handle-background-color,var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color,var(--xy-handle-border-color-default));border-radius:100%;width:6px;min-width:5px;height:6px;min-height:5px;position:absolute}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;bottom:0;left:50%;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{z-index:5;margin:15px;position:absolute}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px)translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px)translateY(-50%)}.react-flow__attribution{background:var(--xy-attribution-background-color,var(--xy-attribution-background-color-default));margin:0;padding:2px 3px;font-size:10px}.react-flow__attribution a{color:#999;text-decoration:none}@keyframes dashdraw{0%{stroke-dashoffset:10px}}.react-flow__edgelabel-renderer{pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__viewport-portal{-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__minimap{background:var(--xy-minimap-background-color-props,var(--xy-minimap-background-color,var(--xy-minimap-background-color-default)))}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var(--xy-minimap-mask-background-color-props,var(--xy-minimap-mask-background-color,var(--xy-minimap-mask-background-color-default)));stroke:var(--xy-minimap-mask-stroke-color-props,var(--xy-minimap-mask-stroke-color,var(--xy-minimap-mask-stroke-color-default)));stroke-width:var(--xy-minimap-mask-stroke-width-props,var(--xy-minimap-mask-stroke-width,var(--xy-minimap-mask-stroke-width-default)))}.react-flow__minimap-node{fill:var(--xy-minimap-node-background-color-props,var(--xy-minimap-node-background-color,var(--xy-minimap-node-background-color-default)));stroke:var(--xy-minimap-node-stroke-color-props,var(--xy-minimap-node-stroke-color,var(--xy-minimap-node-stroke-color-default)));stroke-width:var(--xy-minimap-node-stroke-width-props,var(--xy-minimap-node-stroke-width,var(--xy-minimap-node-stroke-width-default)))}.react-flow__background-pattern.dots{fill:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-dots-color-default)))}.react-flow__background-pattern.lines{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-lines-color-default)))}.react-flow__background-pattern.cross{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-cross-color-default)))}.react-flow__controls{box-shadow:var(--xy-controls-box-shadow,var(--xy-controls-box-shadow-default));flex-direction:column;display:flex}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{background:var(--xy-controls-button-background-color,var(--xy-controls-button-background-color-default));border:none;border-bottom:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)));width:26px;height:26px;color:var(--xy-controls-button-color-props,var(--xy-controls-button-color,var(--xy-controls-button-color-default)));cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;padding:4px;display:flex}.react-flow__controls-button svg{fill:currentColor;width:100%;max-width:12px;max-height:12px}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{border-radius:var(--xy-node-border-radius,var(--xy-node-border-radius-default));width:150px;color:var(--xy-node-color,var(--xy-node-color-default));text-align:center;border:var(--xy-node-border,var(--xy-node-border-default));background-color:var(--xy-node-background-color,var(--xy-node-background-color-default));padding:10px;font-size:12px}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover,var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected,var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color,var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color,var(--xy-selection-background-color-default));border:var(--xy-selection-border,var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var(--xy-controls-button-background-color-hover-props,var(--xy-controls-button-background-color-hover,var(--xy-controls-button-background-color-hover-default)));color:var(--xy-controls-button-color-hover-props,var(--xy-controls-button-color-hover,var(--xy-controls-button-color-hover-default)))}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)))}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{background-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border:1px solid #fff;border-radius:1px;width:5px;height:5px;translate:-50% -50%}.react-flow__resize-control.handle.left{top:50%;left:0}.react-flow__resize-control.handle.right{top:50%;left:100%}.react-flow__resize-control.handle.top{top:0;left:50%}.react-flow__resize-control.handle.bottom{top:100%;left:50%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border-style:solid;border-width:0}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;height:100%;top:0;transform:translate(-50%)}.react-flow__resize-control.line.left{border-left-width:1px;left:0}.react-flow__resize-control.line.right{border-right-width:1px;left:100%}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{width:100%;height:1px;left:0;transform:translateY(-50%)}.react-flow__resize-control.line.top{border-top-width:1px;top:0}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color,var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color,var(--xy-edge-label-color-default))}.app-layout{grid-template-columns:var(--left-w,28%) 6px minmax(0, 1fr) 6px var(--right-w,26%);gap:0;width:100%;height:100vh;min-height:100svh;display:grid}.left-pane,.center-pane,.right-pane{min-width:0;min-height:0}.pane-divider{cursor:col-resize;touch-action:none;position:relative}.pane-divider:after{content:"";background:var(--border);width:1px;margin:0 auto;transition:width .1s,background .1s;position:absolute;inset:0}.pane-divider:hover:after,body.is-resizing .pane-divider:after{background:var(--accent);width:3px}body.is-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}body.is-resizing .left-pane,body.is-resizing .center-pane,body.is-resizing .right-pane{pointer-events:none}.panel-body .cm-content{padding:10px 14px 24px}.right-pane .cm-content,.right-pane .cm-gutters{font-size:15px}.flow-panel__body .react-flow__node.selected:not(:has(.gn-reroute)){outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}.flow-panel__body .react-flow__node.selected .gn-reroute{box-shadow:0 0 0 1px #00000059, 0 0 0 3px var(--bg), 0 0 0 5px var(--accent)}.flow-panel__body .react-flow__selection,.flow-panel__body .react-flow__nodesselection-rect{border:1px solid var(--accent);background:var(--accent-bg)}.flow-panel__body .react-flow__nodesselection-rect{box-sizing:content-box;border-radius:10px;margin:-16px;padding:16px}.panel{flex-direction:column;height:100%;min-height:0;display:flex}.panel-header{border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:10px 12px;display:flex}.panel-title{color:var(--text-h);font-weight:600}.panel-status{opacity:.8;margin-left:auto;font-size:13px}.panel-body{flex:auto;min-height:0;display:flex;overflow:hidden}.panel-footer{border-top:1px solid var(--border);padding:8px 12px;font-size:13px}.tabs{flex-wrap:wrap;gap:6px;display:inline-flex}.tab{appearance:none;border:1px solid var(--border);color:var(--text-h);cursor:pointer;background:0 0;border-radius:8px;padding:6px 10px;font-size:14px}.tab.active{border-color:var(--accent-border);background:var(--accent-bg)}.tab:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.panel-actions{gap:8px;display:inline-flex}.view-toggle{border:1px solid var(--border);border-radius:8px;display:inline-flex;overflow:hidden}.view-toggle__option{appearance:none;color:var(--text);cursor:pointer;background:0 0;border:none;padding:6px 10px;font-size:13px}.view-toggle__option+.view-toggle__option{border-left:1px solid var(--border)}.view-toggle__option.active{background:var(--accent-bg);color:var(--text-h)}.view-toggle__option:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.action-button{appearance:none;border:1px solid var(--border);color:var(--text-h);cursor:pointer;background:0 0;border-radius:8px;padding:6px 10px;font-size:14px}.action-button:disabled{opacity:.5;cursor:not-allowed}.action-button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.cm-editor{width:100%;height:100%}.cm-editor .cm-content{font-family:var(--mono);font-size:12px;line-height:150%}.cm-editor .cm-gutters{font-size:11px}.json-status.ok{color:var(--text)}.json-status.bad{color:#ef4444}.flow-panel .panel-header{justify-content:space-between}.flow-panel__body{background:radial-gradient(1200px 600px at 20% 10%, #aa3bff14, transparent 60%), var(--bg);position:relative}.flow-empty{flex:auto;place-items:center;font-size:14px;display:grid}.gnwr-loading{background:var(--bg);color:var(--text);flex-direction:column;justify-content:center;align-items:center;gap:14px;display:flex;position:absolute;inset:0}.gnwr-loading__logo{border-radius:12px;width:56px;height:56px;animation:1.4s ease-in-out infinite gnwr-logo-pulse;box-shadow:0 2px 10px #00000059}.gnwr-loading__label{letter-spacing:.02em;opacity:.85;font-size:13px}@keyframes gnwr-logo-pulse{0%,to{opacity:.85;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}.flow-error{color:#f87171;text-align:center;flex-direction:column;flex:auto;justify-content:center;align-items:center;gap:8px;padding:24px;font-size:13px;display:flex}.flow-error strong{font-size:14px;font-weight:600}.flow-error span{opacity:.8;word-break:break-word;max-width:480px;font-family:monospace}.flow-panel__body .react-flow{--xy-background-color-default:transparent;--xy-controls-button-background-color-default:var(--bg);--xy-controls-button-color-default:var(--text-h);--xy-controls-button-border-color-default:var(--border);--xy-edge-stroke-width-default:2.5;width:100%;height:100%}.flow-panel__body .react-flow__attribution{display:none}.flow-panel__body .react-flow__pane{cursor:grab}.flow-panel__body .react-flow__pane:active{cursor:grabbing}.flow-panel__body .react-flow__node,.flow-panel__body .react-flow__edge{pointer-events:none}.gn-reroute{box-sizing:border-box;background:var(--gn-reroute-color,#888);pointer-events:none;border:2px solid #00000059;border-radius:50%;width:12px;height:12px;box-shadow:0 0 0 1px #ffffff1f}.gn-reroute .gn-reroute__handle{opacity:0;pointer-events:none;cursor:default;background:0 0!important;border:none!important;width:1px!important;min-width:0!important;height:1px!important;min-height:0!important}.gn-reroute .react-flow__handle-left.gn-reroute__handle{top:50%;left:0;transform:translate(-50%,-50%)}.gn-reroute .react-flow__handle-right.gn-reroute__handle{top:50%;right:0;transform:translate(50%,-50%)}.gn-node{box-sizing:border-box;border:1px solid var(--border);background:color-mix(in srgb, var(--bg) 88%, #111827 12%);color:var(--text-h);box-shadow:var(--shadow);border-radius:8px;overflow:visible}.gn-node__header{box-sizing:border-box;border-bottom:1px solid #0000004d;border-top-left-radius:7px;border-top-right-radius:7px;align-items:center;min-height:28px;padding:6px 10px;display:flex}.gn-node__title{color:#ffffffd9;font-size:12px;font-weight:600;line-height:1.2}.gn-node__props{background:color-mix(in srgb, var(--bg) 80%, #000 20%);border-bottom:1px solid #00000040;padding:4px 10px}.gn-node__prop-row{color:var(--text);white-space:nowrap;text-overflow:ellipsis;background:color-mix(in srgb, var(--bg) 60%, #000 40%);border:1px solid #ffffff14;border-radius:3px;margin:2px 0;padding:1px 6px;font-size:10px;line-height:1.8;overflow:hidden}.gn-node--group{pointer-events:all;cursor:pointer;border-color:var(--accent-border);box-shadow:0 0 0 1px var(--accent-border), 0 0 16px 3px color-mix(in srgb, var(--accent) 25%, transparent), var(--shadow);transition:box-shadow .15s,border-color .15s;position:relative}.gn-node--group:hover{border-color:var(--accent);box-shadow:0 0 0 1.5px var(--accent), 0 0 24px 6px color-mix(in srgb, var(--accent) 40%, transparent), var(--shadow)}.gn-node__stack{z-index:-1;flex-direction:column;align-items:center;gap:1px;display:flex;position:absolute;top:calc(100% - 2px);left:0;right:0}.gn-node__stack-bar{background:color-mix(in srgb, var(--text) 22%, var(--bg));border:1px solid color-mix(in srgb, var(--text) 45%, var(--bg));border-top:none;border-radius:0 0 5px 5px;height:4px;box-shadow:0 1px 2px #00000026}.gn-node__stack-bar:first-child{opacity:1;width:90%}.gn-node__stack-bar:nth-child(2){opacity:.7;width:78%}.gn-node__stack-bar:nth-child(3){opacity:.45;width:66%}.gn-node__body{background:color-mix(in srgb, var(--bg) 90%, #111827 10%);border-bottom-right-radius:7px;border-bottom-left-radius:7px;padding:6px 0}.gn-node__socket-row{align-items:center;min-height:20px;padding:0 10px;display:flex;position:relative}.gn-node__socket-row--right{justify-content:flex-end}.gn-node__socket-row--right .gn-node__socket-label{text-align:right}.gn-node__socket-label{color:var(--text-h);white-space:nowrap;text-overflow:ellipsis;flex:1 1 0;min-width:0;font-size:10px;line-height:1.2;overflow:hidden}.gn-node__value{color:var(--text);white-space:nowrap;text-align:right;flex-shrink:0;margin-left:8px;font-size:10px;line-height:1.2}.gn-node__color-swatch{border:1px solid var(--border);border-radius:3px;height:14px;margin:2px 8px 4px 18px}.gn-node__curve-wrap{border-bottom:1px solid var(--border);background:#1e1e1e;padding:6px 6px 4px}.gn-node__curve-svg{display:block}.gn-node__curve-zero{stroke:#ffffff26;stroke-width:1px;fill:none;stroke-dasharray:3 3}.gn-node__curve-fill{fill:#ffffff14}.gn-node__curve-stroke{fill:none;stroke:#ffffffbf;stroke-width:1.5px;stroke-linejoin:round;stroke-linecap:round}.gn-node__curve-dot{fill:#ccc;stroke:#1e1e1e;stroke-width:1px}.gn-node__vec-block{border:1px solid var(--border);border-radius:4px;margin:1px 8px 4px 18px;overflow:hidden}.gn-node__vec-row{background:color-mix(in srgb, var(--bg) 70%, #111827 30%);border-top:1px solid var(--border);justify-content:space-between;align-items:center;height:16px;padding:0 6px;display:flex}.gn-node__vec-row:first-child{border-top:none}.gn-node__vec-label{color:var(--text);text-transform:uppercase;flex-shrink:0;width:10px;font-size:9px}.gn-node__vec-value{color:var(--text-h);text-align:right;font-size:9px}.gn-node .react-flow__handle.gn-socket{pointer-events:none;cursor:default;background:0 0;border:1px solid #0000;margin-top:0;top:50%}.gn-node .react-flow__handle.gn-socket--circle{border-radius:999px;width:8px;height:8px}.gn-node .react-flow__handle.gn-socket--line{border-radius:1px;width:7px;height:12px}.gn-node .react-flow__handle.gn-socket--diamond{border-radius:1px;width:8px;height:8px}.gn-node .react-flow__handle.gn-socket--list,.gn-node .react-flow__handle.gn-socket--grid{border-radius:2px;width:9px;height:9px}.gn-node .react-flow__handle-left.gn-socket{left:0;transform:translate(-50%,-50%)}.gn-node .react-flow__handle-right.gn-socket{right:0;transform:translate(50%,-50%)}.gn-node .react-flow__handle-left.gn-socket--diamond{transform:translate(-50%,-50%)rotate(45deg)}.gn-node .react-flow__handle-right.gn-socket--diamond{transform:translate(50%,-50%)rotate(45deg)}.flow-panel__body .react-flow__edge-path{stroke-width:2.5px}.flow-panel__body .react-flow__edge.selected .react-flow__edge-path,.flow-panel__body .react-flow__edge-path{stroke-linecap:round;stroke-linejoin:round}@media (width<=980px){.app-layout{grid-template-rows:40svh 1fr 30svh;grid-template-columns:1fr}.pane-divider{display:none}.left-pane{border-bottom:1px solid var(--border)}.right-pane{border-top:1px solid var(--border)}}.geonodes-embed{background:var(--bg,#1a1a1a);flex-direction:column;height:100%;min-height:0;display:flex}.geonodes-embed--dark{--text:#9ca3af;--text-h:#f3f4f6;--bg:#16171d;--border:#2e303a;--code-bg:#1f2028;--accent:#c084fc;--accent-bg:#c084fc26;--accent-border:#c084fc80;color:var(--text);background:var(--bg)}.geonodes-embed__header{border-bottom:1px solid var(--border,#333);flex-shrink:0;align-items:center;padding:6px 10px;display:flex}.geonodes-embed__title{color:var(--text-h,#eee);font-weight:600}.geonodes-embed__body{flex:auto;min-height:0;position:relative;overflow:hidden}.gn-top-left{flex-direction:column;align-items:flex-start;gap:6px;display:flex}.gn-version-badge{background:color-mix(in srgb, var(--bg) 85%, #000 15%);border:1px solid var(--border);color:var(--text);opacity:.6;pointer-events:none;-webkit-user-select:none;user-select:none;white-space:nowrap;border-radius:6px;padding:3px 8px;font-size:11px;display:inline-block}.gnwr-copy-button{z-index:10;appearance:none;background:color-mix(in srgb, var(--bg) 85%, #000 15%);border:1px solid var(--border);color:var(--text);cursor:pointer;opacity:.85;border-radius:6px;align-items:center;gap:7px;padding:5px 12px 5px 8px;font-size:12px;transition:opacity .15s,border-color .15s,color .15s;display:inline-flex;position:absolute;top:10px;right:10px}.gnwr-copy-button__logo{border-radius:4px;flex:none;width:18px;height:18px;box-shadow:0 1px 2px #0000004d}.gnwr-copy-button:hover{opacity:1;border-color:var(--accent-border);color:var(--accent)}.gnwr-copy-button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.gnwr-copy-button--copied{opacity:1;border-color:var(--accent-border);color:var(--accent)}.gnwr-copy-button__check{width:18px;height:18px;color:var(--accent);flex:none;animation:.25s ease-out gnwr-check-pop}@keyframes gnwr-check-pop{0%{opacity:0;transform:scale(.4)}to{opacity:1;transform:scale(1)}}.gnwr-copy-toast{z-index:10;background:color-mix(in srgb, var(--bg) 85%, #000 15%);border:1px solid var(--accent-border);max-width:260px;color:var(--text);border-radius:6px;padding:8px 12px;font-size:12px;line-height:1.4;animation:.15s ease-out gnwr-copy-toast-in;position:absolute;top:48px;right:10px;box-shadow:0 4px 14px #00000059}.gnwr-copy-toast__link{color:var(--accent);text-decoration:underline}.gnwr-copy-toast__link:hover{text-decoration:none}@keyframes gnwr-copy-toast-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.gnwr-leaving{animation:.5s forwards gnwr-fade-out}@keyframes gnwr-fade-out{to{opacity:0}}.gn-context-menu{z-index:1000;background:color-mix(in srgb, var(--bg) 88%, #000 12%);border:1px solid var(--border);border-radius:8px;min-width:200px;padding:4px;animation:.1s ease-out gnwr-copy-toast-in;position:fixed;box-shadow:0 8px 24px #00000073}.gn-context-menu__item{width:100%;color:var(--text);text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:5px;padding:8px 10px;font-size:13px;display:block}.gn-context-menu__item:hover,.gn-context-menu__item:focus-visible{background:var(--accent);color:#fff;outline:none}.gn-context-toast{z-index:20;background:color-mix(in srgb, var(--bg) 85%, #000 15%);border:1px solid var(--accent-border);color:var(--text);border-radius:6px;padding:8px 14px;font-size:12px;animation:.15s ease-out gnwr-copy-toast-in;position:absolute;bottom:12px;left:50%;transform:translate(-50%);box-shadow:0 4px 14px #00000059}.gn-breadcrumbs{background:color-mix(in srgb, var(--bg) 85%, #000 15%);border:1px solid var(--border);pointer-events:all;border-radius:6px;flex-wrap:wrap;align-items:center;gap:2px;padding:4px 8px;font-size:12px;display:flex}.gn-breadcrumbs__item{align-items:center;gap:2px;display:inline-flex}.gn-breadcrumbs__sep{color:var(--text);opacity:.6;padding:0 2px}.gn-breadcrumbs__link{appearance:none;color:var(--text);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 4px;font-size:12px}.gn-breadcrumbs__link:hover{color:var(--accent);background:var(--accent-bg)}.gn-breadcrumbs__current{color:var(--text-h);padding:2px 4px;font-weight:600}
1
+ .react-flow{--xy-edge-stroke-default:#b1b1b7;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#555;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#ffffff80;--xy-minimap-background-color-default:#fff;--xy-minimap-mask-background-color-default:#f0f0f099;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#e2e2e2;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:transparent;--xy-background-pattern-dots-color-default:#91919a;--xy-background-pattern-lines-color-default:#eee;--xy-background-pattern-cross-color-default:#e2e2e2;background-color:var(--xy-background-color,var(--xy-background-color-default));--xy-node-color-default:inherit;--xy-node-border-default:1px solid #1a192b;--xy-node-background-color-default:#fff;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #00000014;--xy-node-boxshadow-selected-default:0 0 0 .5px #1a192b;--xy-node-border-radius-default:3px;--xy-handle-background-color-default:#1a192b;--xy-handle-border-color-default:#fff;--xy-selection-background-color-default:#0059dc14;--xy-selection-border-default:1px dotted #0059dccc;--xy-controls-button-background-color-default:#fefefe;--xy-controls-button-background-color-hover-default:#f4f4f4;--xy-controls-button-color-default:inherit;--xy-controls-button-color-hover-default:inherit;--xy-controls-button-border-color-default:#eee;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#fff;--xy-edge-label-color-default:inherit;--xy-resize-background-color-default:#3367d9;direction:ltr}.react-flow.dark{--xy-edge-stroke-default:#3e3e3e;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#727272;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#96969640;--xy-minimap-background-color-default:#141414;--xy-minimap-mask-background-color-default:#3c3c3c99;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#2b2b2b;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:#141414;--xy-background-pattern-dots-color-default:#777;--xy-background-pattern-lines-color-default:#777;--xy-background-pattern-cross-color-default:#777;--xy-node-color-default:#f8f8f8;--xy-node-border-default:1px solid #3c3c3c;--xy-node-background-color-default:#1e1e1e;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #ffffff14;--xy-node-boxshadow-selected-default:0 0 0 .5px #999;--xy-handle-background-color-default:#bebebe;--xy-handle-border-color-default:#1e1e1e;--xy-selection-background-color-default:#c8c8dc14;--xy-selection-border-default:1px dotted #c8c8dccc;--xy-controls-button-background-color-default:#2b2b2b;--xy-controls-button-background-color-hover-default:#3e3e3e;--xy-controls-button-color-default:#f8f8f8;--xy-controls-button-color-hover-default:#fff;--xy-controls-button-border-color-default:#5b5b5b;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#141414;--xy-edge-label-color-default:#f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props,var(--xy-background-color,var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width,var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke,var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width,var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{pointer-events:none;position:absolute;overflow:visible}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected,var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:.5s linear infinite dashdraw}svg.react-flow__connectionline{z-index:1001;position:absolute;overflow:visible}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{-webkit-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default;position:absolute}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:0 0;pointer-events:none}.react-flow__nodesselection-rect{pointer-events:all;cursor:grab;position:absolute}.react-flow__handle{pointer-events:none;background-color:var(--xy-handle-background-color,var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color,var(--xy-handle-border-color-default));border-radius:100%;width:6px;min-width:5px;height:6px;min-height:5px;position:absolute}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;bottom:0;left:50%;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{z-index:5;margin:15px;position:absolute}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px)translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px)translateY(-50%)}.react-flow__attribution{background:var(--xy-attribution-background-color,var(--xy-attribution-background-color-default));margin:0;padding:2px 3px;font-size:10px}.react-flow__attribution a{color:#999;text-decoration:none}@keyframes dashdraw{0%{stroke-dashoffset:10px}}.react-flow__edgelabel-renderer{pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__viewport-portal{-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__minimap{background:var(--xy-minimap-background-color-props,var(--xy-minimap-background-color,var(--xy-minimap-background-color-default)))}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var(--xy-minimap-mask-background-color-props,var(--xy-minimap-mask-background-color,var(--xy-minimap-mask-background-color-default)));stroke:var(--xy-minimap-mask-stroke-color-props,var(--xy-minimap-mask-stroke-color,var(--xy-minimap-mask-stroke-color-default)));stroke-width:var(--xy-minimap-mask-stroke-width-props,var(--xy-minimap-mask-stroke-width,var(--xy-minimap-mask-stroke-width-default)))}.react-flow__minimap-node{fill:var(--xy-minimap-node-background-color-props,var(--xy-minimap-node-background-color,var(--xy-minimap-node-background-color-default)));stroke:var(--xy-minimap-node-stroke-color-props,var(--xy-minimap-node-stroke-color,var(--xy-minimap-node-stroke-color-default)));stroke-width:var(--xy-minimap-node-stroke-width-props,var(--xy-minimap-node-stroke-width,var(--xy-minimap-node-stroke-width-default)))}.react-flow__background-pattern.dots{fill:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-dots-color-default)))}.react-flow__background-pattern.lines{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-lines-color-default)))}.react-flow__background-pattern.cross{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-cross-color-default)))}.react-flow__controls{box-shadow:var(--xy-controls-box-shadow,var(--xy-controls-box-shadow-default));flex-direction:column;display:flex}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{background:var(--xy-controls-button-background-color,var(--xy-controls-button-background-color-default));border:none;border-bottom:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)));width:26px;height:26px;color:var(--xy-controls-button-color-props,var(--xy-controls-button-color,var(--xy-controls-button-color-default)));cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;padding:4px;display:flex}.react-flow__controls-button svg{fill:currentColor;width:100%;max-width:12px;max-height:12px}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{border-radius:var(--xy-node-border-radius,var(--xy-node-border-radius-default));width:150px;color:var(--xy-node-color,var(--xy-node-color-default));text-align:center;border:var(--xy-node-border,var(--xy-node-border-default));background-color:var(--xy-node-background-color,var(--xy-node-background-color-default));padding:10px;font-size:12px}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover,var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected,var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color,var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color,var(--xy-selection-background-color-default));border:var(--xy-selection-border,var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var(--xy-controls-button-background-color-hover-props,var(--xy-controls-button-background-color-hover,var(--xy-controls-button-background-color-hover-default)));color:var(--xy-controls-button-color-hover-props,var(--xy-controls-button-color-hover,var(--xy-controls-button-color-hover-default)))}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)))}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{background-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border:1px solid #fff;border-radius:1px;width:5px;height:5px;translate:-50% -50%}.react-flow__resize-control.handle.left{top:50%;left:0}.react-flow__resize-control.handle.right{top:50%;left:100%}.react-flow__resize-control.handle.top{top:0;left:50%}.react-flow__resize-control.handle.bottom{top:100%;left:50%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border-style:solid;border-width:0}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;height:100%;top:0;transform:translate(-50%)}.react-flow__resize-control.line.left{border-left-width:1px;left:0}.react-flow__resize-control.line.right{border-right-width:1px;left:100%}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{width:100%;height:1px;left:0;transform:translateY(-50%)}.react-flow__resize-control.line.top{border-top-width:1px;top:0}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color,var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color,var(--xy-edge-label-color-default))}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(https://cdn.jsdelivr.net/fontsource/fonts/inter@latest/latin-400-normal.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(https://cdn.jsdelivr.net/fontsource/fonts/inter@latest/latin-600-normal.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(https://cdn.jsdelivr.net/fontsource/fonts/inter@latest/latin-700-normal.woff2)format("woff2")}:root{--gnwr-font:"Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}.app-layout{grid-template-columns:var(--left-w,28%) 6px minmax(0, 1fr) 6px var(--right-w,26%);gap:0;width:100%;height:100vh;min-height:100svh;display:grid}.left-pane,.center-pane,.right-pane{min-width:0;min-height:0}.pane-divider{cursor:col-resize;touch-action:none;position:relative}.pane-divider:after{content:"";background:var(--border);width:1px;margin:0 auto;transition:width .1s,background .1s;position:absolute;inset:0}.pane-divider:hover:after,body.is-resizing .pane-divider:after{background:var(--accent);width:3px}body.is-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}body.is-resizing .left-pane,body.is-resizing .center-pane,body.is-resizing .right-pane{pointer-events:none}.panel-body .cm-content{padding:10px 14px 24px}.right-pane .cm-content,.right-pane .cm-gutters{font-size:15px}.flow-panel__body .react-flow__node.selected:not(:has(.gn-reroute)){outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}.flow-panel__body .react-flow__node.selected .gn-reroute{box-shadow:0 0 0 1px #00000059, 0 0 0 3px var(--bg), 0 0 0 5px var(--accent)}.flow-panel__body .react-flow__selection,.flow-panel__body .react-flow__nodesselection-rect{border:1px solid var(--accent);background:var(--accent-bg)}.flow-panel__body .react-flow__nodesselection-rect{box-sizing:content-box;border-radius:10px;margin:-16px;padding:16px}.panel{flex-direction:column;height:100%;min-height:0;display:flex}.panel-header{border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:10px 12px;display:flex}.panel-title{color:var(--text-h);font-weight:600}.panel-status{opacity:.8;margin-left:auto;font-size:13px}.panel-body{flex:auto;min-height:0;display:flex;overflow:hidden}.panel-footer{border-top:1px solid var(--border);padding:8px 12px;font-size:13px}.tabs{flex-wrap:wrap;gap:6px;display:inline-flex}.tab{appearance:none;border:1px solid var(--border);color:var(--text-h);cursor:pointer;background:0 0;border-radius:8px;padding:6px 10px;font-size:14px}.tab.active{border-color:var(--accent-border);background:var(--accent-bg)}.tab:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.panel-actions{gap:8px;display:inline-flex}.view-toggle{border:1px solid var(--border);border-radius:8px;display:inline-flex;overflow:hidden}.view-toggle__option{appearance:none;color:var(--text);cursor:pointer;background:0 0;border:none;padding:6px 10px;font-size:13px}.view-toggle__option+.view-toggle__option{border-left:1px solid var(--border)}.view-toggle__option.active{background:var(--accent-bg);color:var(--text-h)}.view-toggle__option:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.action-button{appearance:none;border:1px solid var(--border);color:var(--text-h);cursor:pointer;background:0 0;border-radius:8px;padding:6px 10px;font-size:14px}.action-button:disabled{opacity:.5;cursor:not-allowed}.action-button--dev{color:var(--accent);border-color:var(--accent-border);background:var(--accent-bg);align-items:center;gap:4px;font-weight:600;text-decoration:none;display:inline-flex}.action-button--dev:hover{background:var(--accent);color:#fff;border-color:var(--accent)}.action-button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.cm-editor{width:100%;height:100%}.cm-editor .cm-content{font-family:var(--mono);font-size:12px;line-height:150%}.cm-editor .cm-gutters{font-size:11px}.json-status.ok{color:var(--text)}.json-status.bad{color:#ef4444}.flow-panel .panel-header{justify-content:space-between}.flow-panel__body{background:var(--bg);font-family:var(--gnwr-font);position:relative}.flow-empty{flex:auto;place-items:center;font-size:14px;display:grid}.gnwr-loading{background:var(--bg);color:var(--text);flex-direction:column;justify-content:center;align-items:center;gap:14px;display:flex;position:absolute;inset:0}.gnwr-loading__logo{border-radius:12px;width:56px;height:56px;animation:1.4s ease-in-out infinite gnwr-logo-pulse;box-shadow:0 2px 10px #00000059}.gnwr-loading__label{letter-spacing:.02em;opacity:.85;font-size:13px}@keyframes gnwr-logo-pulse{0%,to{opacity:.85;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}.flow-error{color:#f87171;text-align:center;flex-direction:column;flex:auto;justify-content:center;align-items:center;gap:8px;padding:24px;font-size:13px;display:flex}.flow-error strong{font-size:14px;font-weight:600}.flow-error span{opacity:.8;word-break:break-word;max-width:480px;font-family:monospace}.flow-panel__body .react-flow{--xy-background-color-default:transparent;--xy-controls-button-background-color-default:var(--bg);--xy-controls-button-color-default:var(--text-h);--xy-controls-button-border-color-default:var(--border);--xy-edge-stroke-width-default:2.5;width:100%;height:100%}.flow-panel__body .react-flow__attribution{display:none}.flow-panel__body .react-flow__pane{cursor:grab}.flow-panel__body .react-flow__pane:active{cursor:grabbing}.flow-panel__body .react-flow__node,.flow-panel__body .react-flow__edge{pointer-events:none}.gn-reroute{box-sizing:border-box;background:var(--gn-reroute-color,#888);pointer-events:none;border:2px solid #00000059;border-radius:50%;width:12px;height:12px;box-shadow:0 0 0 1px #ffffff1f}.gn-reroute .gn-reroute__handle{opacity:0;pointer-events:none;cursor:default;background:0 0!important;border:none!important;width:1px!important;min-width:0!important;height:1px!important;min-height:0!important}.gn-reroute .react-flow__handle-left.gn-reroute__handle{top:50%;left:0;transform:translate(-50%,-50%)}.gn-reroute .react-flow__handle-right.gn-reroute__handle{top:50%;right:0;transform:translate(50%,-50%)}.gn-node{box-sizing:border-box;border:1px solid var(--border);background:var(--node-bg,color-mix(in srgb, var(--bg) 88%, #111827 12%));color:var(--text-h);box-shadow:var(--shadow);border-radius:8px;overflow:visible}.gn-node__header{box-sizing:border-box;border-bottom:1px solid #0000004d;border-top-left-radius:7px;border-top-right-radius:7px;align-items:center;min-height:28px;padding:6px 10px;display:flex}.gn-node__title{color:#ffffffd9;font-size:12px;font-weight:600;line-height:1.2}.gn-node__props{background:var(--node-prop-bg,color-mix(in srgb, var(--bg) 80%, #000 20%));border-bottom:1px solid #00000040;padding:4px 10px}.gn-node__prop-row{color:var(--node-field-text,var(--text));white-space:nowrap;text-overflow:ellipsis;background:var(--node-field-bg,color-mix(in srgb, var(--bg) 60%, #000 40%));border:1px solid #ffffff14;border-radius:3px;margin:2px 0;padding:1px 6px;font-size:10px;line-height:1.8;overflow:hidden}.gn-node--group{pointer-events:all;cursor:pointer;border-color:var(--accent-border);box-shadow:0 0 0 1px var(--accent-border), 0 0 16px 3px color-mix(in srgb, var(--accent) 25%, transparent), var(--shadow);transition:box-shadow .15s,border-color .15s;position:relative}.gn-node--group:hover{border-color:var(--accent);box-shadow:0 0 0 1.5px var(--accent), 0 0 24px 6px color-mix(in srgb, var(--accent) 40%, transparent), var(--shadow)}.gn-node__stack{z-index:-1;flex-direction:column;align-items:center;gap:1px;display:flex;position:absolute;top:calc(100% - 2px);left:0;right:0}.gn-node__stack-bar{background:color-mix(in srgb, var(--text) 22%, var(--bg));border:1px solid color-mix(in srgb, var(--text) 45%, var(--bg));border-top:none;border-radius:0 0 5px 5px;height:4px;box-shadow:0 1px 2px #00000026}.gn-node__stack-bar:first-child{opacity:1;width:90%}.gn-node__stack-bar:nth-child(2){opacity:.7;width:78%}.gn-node__stack-bar:nth-child(3){opacity:.45;width:66%}.gn-node__body{background:var(--node-bg,color-mix(in srgb, var(--bg) 90%, #111827 10%));border-bottom-right-radius:7px;border-bottom-left-radius:7px;padding:6px 0}.gn-node__socket-row{align-items:center;min-height:20px;padding:0 10px;display:flex;position:relative}.gn-node__socket-row--right{justify-content:flex-end}.gn-node__socket-row--right .gn-node__socket-label{text-align:right}.gn-node__socket-label{color:var(--text-h);white-space:nowrap;text-overflow:ellipsis;flex:1 1 0;min-width:0;font-size:10px;line-height:1.2;overflow:hidden}.gn-node__value{color:var(--text);white-space:nowrap;text-align:right;flex-shrink:0;margin-left:8px;font-size:10px;line-height:1.2}.gn-node__color-swatch{border:1px solid var(--border);border-radius:3px;height:14px;margin:2px 8px 4px 18px}.gn-node__curve-wrap{border-bottom:1px solid var(--border);background:#1e1e1e;padding:6px 6px 4px}.gn-node__curve-svg{display:block}.gn-node__curve-zero{stroke:#ffffff26;stroke-width:1px;fill:none;stroke-dasharray:3 3}.gn-node__curve-fill{fill:#ffffff14}.gn-node__curve-stroke{fill:none;stroke:#ffffffbf;stroke-width:1.5px;stroke-linejoin:round;stroke-linecap:round}.gn-node__curve-dot{fill:#ccc;stroke:#1e1e1e;stroke-width:1px}.gn-node__vec-block{border:1px solid var(--border);border-radius:4px;margin:1px 8px 4px 18px;overflow:hidden}.gn-node__vec-row{background:color-mix(in srgb, var(--bg) 70%, #111827 30%);border-top:1px solid var(--border);justify-content:space-between;align-items:center;height:16px;padding:0 6px;display:flex}.gn-node__vec-row:first-child{border-top:none}.gn-node__vec-label{color:var(--text);text-transform:uppercase;flex-shrink:0;width:10px;font-size:9px}.gn-node__vec-value{color:var(--text-h);text-align:right;font-size:9px}.gn-node .react-flow__handle.gn-socket{pointer-events:none;cursor:default;background:0 0;border:1px solid #0000;margin-top:0;top:50%}.gn-node .react-flow__handle.gn-socket--circle{border-radius:999px;width:8px;height:8px}.gn-node .react-flow__handle.gn-socket--line{border-radius:1px;width:7px;height:12px}.gn-node .react-flow__handle.gn-socket--diamond{border-radius:1px;width:8px;height:8px}.gn-node .react-flow__handle.gn-socket--list,.gn-node .react-flow__handle.gn-socket--grid{border-radius:2px;width:9px;height:9px}.gn-node .react-flow__handle-left.gn-socket{left:0;transform:translate(-50%,-50%)}.gn-node .react-flow__handle-right.gn-socket{right:0;transform:translate(50%,-50%)}.gn-node .react-flow__handle-left.gn-socket--diamond{transform:translate(-50%,-50%)rotate(45deg)}.gn-node .react-flow__handle-right.gn-socket--diamond{transform:translate(50%,-50%)rotate(45deg)}.flow-panel__body .react-flow__edge-path{stroke-width:2.5px}.flow-panel__body .react-flow__edge.selected .react-flow__edge-path,.flow-panel__body .react-flow__edge-path{stroke-linecap:round;stroke-linejoin:round}@media (width<=980px){.app-layout{grid-template-rows:40svh 1fr 30svh;grid-template-columns:1fr}.pane-divider{display:none}.left-pane{border-bottom:1px solid var(--border)}.right-pane{border-top:1px solid var(--border)}}.geonodes-embed{background:var(--bg,#1a1a1a);flex-direction:column;height:100%;min-height:0;display:flex}.geonodes-embed--dark{--text:#9ca3af;--text-h:#f3f4f6;--bg:#1a1a1a;--border:#2e303a;--code-bg:#1f2028;--accent:#c084fc;--accent-bg:#c084fc26;--accent-border:#c084fc80;--node-bg:#303030;--node-prop-bg:#1d1d1d;--node-field-bg:#4b4b4b;--node-field-text:#e6e6e6;--grid-dot:#3a3a3a;color:var(--text);background:var(--bg);font-family:var(--gnwr-font)}.geonodes-embed__header{border-bottom:1px solid var(--border,#333);flex-shrink:0;align-items:center;padding:6px 10px;display:flex}.geonodes-embed__title{color:var(--text-h,#eee);font-weight:600}.geonodes-embed__body{flex:auto;min-height:0;position:relative;overflow:hidden}.gn-top-left{flex-direction:column;align-items:flex-start;gap:6px;display:flex}.gn-version-badge{background:color-mix(in srgb, var(--bg) 85%, #000 15%);border:1px solid var(--border);color:var(--text);opacity:.6;pointer-events:none;-webkit-user-select:none;user-select:none;white-space:nowrap;border-radius:6px;padding:3px 8px;font-size:11px;display:inline-block}.gnwr-copy-button{z-index:10;appearance:none;background:color-mix(in srgb, var(--bg) 85%, #000 15%);border:1px solid var(--border);color:var(--text);cursor:pointer;opacity:.85;border-radius:6px;align-items:center;gap:7px;padding:5px 12px 5px 8px;font-size:12px;transition:opacity .15s,border-color .15s,color .15s;display:inline-flex;position:absolute;top:10px;right:10px}.gnwr-copy-button__logo{border-radius:4px;flex:none;width:18px;height:18px;box-shadow:0 1px 2px #0000004d}.gnwr-copy-button:hover{opacity:1;border-color:var(--accent-border);color:var(--accent)}.gnwr-copy-button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.gnwr-copy-button--copied{opacity:1;border-color:var(--accent-border);color:var(--accent)}.gnwr-copy-button__check{width:18px;height:18px;color:var(--accent);flex:none;animation:.25s ease-out gnwr-check-pop}@keyframes gnwr-check-pop{0%{opacity:0;transform:scale(.4)}to{opacity:1;transform:scale(1)}}.gnwr-copy-toast{z-index:10;background:color-mix(in srgb, var(--bg) 85%, #000 15%);border:1px solid var(--accent-border);max-width:260px;color:var(--text);border-radius:6px;padding:8px 12px;font-size:12px;line-height:1.4;animation:.15s ease-out gnwr-copy-toast-in;position:absolute;top:48px;right:10px;box-shadow:0 4px 14px #00000059}.gnwr-copy-toast__link{color:var(--accent);text-decoration:underline}.gnwr-copy-toast__link:hover{text-decoration:none}@keyframes gnwr-copy-toast-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.gnwr-leaving{animation:.5s forwards gnwr-fade-out}@keyframes gnwr-fade-out{to{opacity:0}}.gn-context-menu{z-index:1000;background:color-mix(in srgb, var(--bg) 88%, #000 12%);border:1px solid var(--border);border-radius:8px;min-width:200px;padding:4px;animation:.1s ease-out gnwr-copy-toast-in;position:fixed;box-shadow:0 8px 24px #00000073}.gn-context-menu__item{width:100%;color:var(--text);text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:5px;padding:8px 10px;font-size:13px;display:block}.gn-context-menu__item:hover,.gn-context-menu__item:focus-visible{background:var(--accent);color:#fff;outline:none}.gn-context-toast{z-index:20;background:color-mix(in srgb, var(--bg) 85%, #000 15%);border:1px solid var(--accent-border);color:var(--text);border-radius:6px;padding:8px 14px;font-size:12px;animation:.15s ease-out gnwr-copy-toast-in;position:absolute;bottom:12px;left:50%;transform:translate(-50%);box-shadow:0 4px 14px #00000059}.gn-breadcrumbs{background:color-mix(in srgb, var(--bg) 85%, #000 15%);border:1px solid var(--border);pointer-events:all;border-radius:6px;flex-wrap:wrap;align-items:center;gap:2px;padding:4px 8px;font-size:12px;display:flex}.gn-breadcrumbs__item{align-items:center;gap:2px;display:inline-flex}.gn-breadcrumbs__sep{color:var(--text);opacity:.6;padding:0 2px}.gn-breadcrumbs__link{appearance:none;color:var(--text);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 4px;font-size:12px}.gn-breadcrumbs__link:hover{color:var(--accent);background:var(--accent-bg)}.gn-breadcrumbs__current{color:var(--text-h);padding:2px 4px;font-weight:600}
2
2
  /*$vite$:1*/
package/dist/embed.js CHANGED
@@ -7662,6 +7662,7 @@ var Xd = {
7662
7662
  GEOMETRY: "#1d725e",
7663
7663
  INPUT: "#82354c",
7664
7664
  OUTPUT: "#3e232a",
7665
+ COLOR: "#6e6e23",
7665
7666
  ATTRIBUTE: "#1d2546",
7666
7667
  CONVERTER: "#246283",
7667
7668
  GROUP: "#374725",
@@ -7674,11 +7675,32 @@ var Xd = {
7674
7675
  DISTORT: "#3e5a5b",
7675
7676
  SCRIPT: "#203c3c",
7676
7677
  DEFAULT: "#303030"
7678
+ }, Zd = {
7679
+ ShaderNodeVectorMath: "VECTOR",
7680
+ ShaderNodeVectorRotate: "VECTOR",
7681
+ ShaderNodeVectorCurve: "VECTOR",
7682
+ ShaderNodeVectorTransform: "VECTOR",
7683
+ ShaderNodeMapping: "VECTOR",
7684
+ ShaderNodeMixRGB: "COLOR",
7685
+ ShaderNodeRGBCurve: "COLOR",
7686
+ ShaderNodeMath: "CONVERTER",
7687
+ ShaderNodeClamp: "CONVERTER",
7688
+ ShaderNodeValToRGB: "CONVERTER",
7689
+ ShaderNodeFloatCurve: "CONVERTER",
7690
+ ShaderNodeSeparateXYZ: "CONVERTER",
7691
+ ShaderNodeCombineXYZ: "CONVERTER",
7692
+ ShaderNodeSeparateColor: "CONVERTER",
7693
+ ShaderNodeCombineColor: "CONVERTER",
7694
+ ShaderNodeBlackbody: "CONVERTER",
7695
+ ShaderNodeWavelength: "CONVERTER",
7696
+ ShaderNodeRGBToBW: "CONVERTER",
7697
+ ShaderNodeValue: "INPUT",
7698
+ ShaderNodeRGB: "INPUT"
7677
7699
  };
7678
- function Zd(e) {
7679
- return e === "NodeGroupInput" || e === "NodeGroupOutput" ? "INTERFACE" : e.startsWith("NodeGroup") ? "GROUP" : e.startsWith("GeometryNodeSet") || e.startsWith("GeometryNodeTransform") || e.startsWith("GeometryNodeMerge") || e.startsWith("GeometryNodeJoin") || e.startsWith("GeometryNodeDelete") || e.startsWith("GeometryNodeSeparate") || e.startsWith("GeometryNodeDuplicate") || e.startsWith("GeometryNodeExtrude") || e.startsWith("GeometryNodeFlip") || e.startsWith("GeometryNodeSubdivide") || e.startsWith("GeometryNodeTriangulate") || e.startsWith("GeometryNodeMesh") || e.startsWith("GeometryNodeCurve") || e.startsWith("GeometryNodePoints") || e.startsWith("GeometryNodeVolume") || e.startsWith("GeometryNodeInstance") || e.startsWith("GeometryNodeRealize") || e.startsWith("GeometryNodeConvex") || e.startsWith("GeometryNodeFill") || e.startsWith("GeometryNodeSDF") || e.startsWith("GeometryNode") ? "GEOMETRY" : e.startsWith("ShaderNode") ? "SHADER" : e.startsWith("FunctionNode") ? "CONVERTER" : "DEFAULT";
7700
+ function Qd(e) {
7701
+ return e === "NodeGroupInput" || e === "NodeGroupOutput" ? "INTERFACE" : e.startsWith("NodeGroup") ? "GROUP" : e.startsWith("GeometryNodeSet") || e.startsWith("GeometryNodeTransform") || e.startsWith("GeometryNodeMerge") || e.startsWith("GeometryNodeJoin") || e.startsWith("GeometryNodeDelete") || e.startsWith("GeometryNodeSeparate") || e.startsWith("GeometryNodeDuplicate") || e.startsWith("GeometryNodeExtrude") || e.startsWith("GeometryNodeFlip") || e.startsWith("GeometryNodeSubdivide") || e.startsWith("GeometryNodeTriangulate") || e.startsWith("GeometryNodeMesh") || e.startsWith("GeometryNodeCurve") || e.startsWith("GeometryNodePoints") || e.startsWith("GeometryNodeVolume") || e.startsWith("GeometryNodeInstance") || e.startsWith("GeometryNodeRealize") || e.startsWith("GeometryNodeConvex") || e.startsWith("GeometryNodeFill") || e.startsWith("GeometryNodeSDF") || e.startsWith("GeometryNode") ? "GEOMETRY" : e.startsWith("ShaderNode") ? e in Zd ? Zd[e] : e.startsWith("ShaderNodeTex") ? "TEXTURE" : "SHADER" : e.startsWith("FunctionNode") ? e.startsWith("FunctionNodeInput") ? "INPUT" : "CONVERTER" : "DEFAULT";
7680
7702
  }
7681
- var Qd = {
7703
+ var $d = {
7682
7704
  GeometryNodeInputMaterial: "INPUT",
7683
7705
  GeometryNodeInputMaterialIndex: "INPUT",
7684
7706
  GeometryNodeInputRadius: "INPUT",
@@ -7729,12 +7751,16 @@ var Qd = {
7729
7751
  GeometryNodeFieldVariance: "CONVERTER",
7730
7752
  GeometryNodeViewer: "OUTPUT"
7731
7753
  };
7732
- function $d(e) {
7733
- return Xd[Qd[e] ?? Zd(e)] ?? Xd.DEFAULT;
7754
+ function ef(e, t) {
7755
+ if (e === "ShaderNodeMix") return t === "VECTOR" ? "VECTOR" : t === "RGBA" ? "COLOR" : "CONVERTER";
7756
+ if (e === "ShaderNodeMapRange") return t === "FLOAT_VECTOR" ? "VECTOR" : "CONVERTER";
7757
+ }
7758
+ function tf(e, t) {
7759
+ return Xd[ef(e, t) ?? $d[e] ?? Qd(e)] ?? Xd.DEFAULT;
7734
7760
  }
7735
7761
  //#endregion
7736
7762
  //#region src/gn/importer/blenderTree.ts
7737
- var ef = {
7763
+ var nf = {
7738
7764
  NodeSocketGeometry: "GEOMETRY",
7739
7765
  NodeSocketFloat: "FLOAT",
7740
7766
  NodeSocketVector: "VECTOR",
@@ -7751,10 +7777,10 @@ var ef = {
7751
7777
  NodeSocketMatrix: "MATRIX",
7752
7778
  NodeSocketMenu: "MENU"
7753
7779
  };
7754
- function tf(e) {
7755
- return ef[e] ?? "CUSTOM";
7780
+ function rf(e) {
7781
+ return nf[e] ?? "CUSTOM";
7756
7782
  }
7757
- var nf = {
7783
+ var af = {
7758
7784
  HSV: [
7759
7785
  "Hue",
7760
7786
  "Saturation",
@@ -7771,7 +7797,7 @@ var nf = {
7771
7797
  "Blue"
7772
7798
  ]
7773
7799
  };
7774
- function rf(e) {
7800
+ function of(e) {
7775
7801
  let t = e.data.mapping?.data;
7776
7802
  if (!t) return;
7777
7803
  let n = t.curves?.data?.items;
@@ -7789,8 +7815,8 @@ function rf(e) {
7789
7815
  points: r
7790
7816
  };
7791
7817
  }
7792
- function af(e, t) {
7793
- let n = nf[t ?? "RGB"] ?? nf.RGB, r = nf.RGB;
7818
+ function sf(e, t) {
7819
+ let n = af[t ?? "RGB"] ?? af.RGB, r = af.RGB;
7794
7820
  return e.map((e) => {
7795
7821
  let t = r.indexOf(e.name);
7796
7822
  return t === -1 ? e : {
@@ -7799,11 +7825,11 @@ function af(e, t) {
7799
7825
  };
7800
7826
  });
7801
7827
  }
7802
- function of(e) {
7828
+ function cf(e) {
7803
7829
  return e.replace(/\.\d{3}$/, "");
7804
7830
  }
7805
- function sf(e, t) {
7806
- let n = tf(e.data.socket_idname ?? ""), r = Yd(n), i = String(e.data.single_input ?? `${e.id}_in`), a = String(e.data.single_output ?? `${e.id}_out`), o = (e) => ({
7831
+ function lf(e, t) {
7832
+ let n = rf(e.data.socket_idname ?? ""), r = Yd(n), i = String(e.data.single_input ?? `${e.id}_in`), a = String(e.data.single_output ?? `${e.id}_out`), o = (e) => ({
7807
7833
  id: e,
7808
7834
  name: "",
7809
7835
  dataType: n,
@@ -7828,7 +7854,7 @@ function sf(e, t) {
7828
7854
  outputs: [o(a)]
7829
7855
  };
7830
7856
  }
7831
- function cf(e) {
7857
+ function uf(e) {
7832
7858
  return e == null ? null : Array.isArray(e) && e.length >= 2 ? {
7833
7859
  kind: "vec",
7834
7860
  values: e
@@ -7837,20 +7863,20 @@ function cf(e) {
7837
7863
  value: e
7838
7864
  } : null;
7839
7865
  }
7840
- function lf(e, t) {
7866
+ function df(e, t) {
7841
7867
  return {
7842
7868
  id: String(e.id),
7843
7869
  name: e.data.name,
7844
7870
  dataType: e.data.type,
7845
7871
  displayShape: e.data.display_shape,
7846
7872
  color: Yd(e.data.type),
7847
- defaultValue: cf(e.data.default_value),
7873
+ defaultValue: uf(e.data.default_value),
7848
7874
  hideValue: e.data.hide_value ?? !1,
7849
7875
  enabled: e.data.enabled ?? !0,
7850
7876
  index: t
7851
7877
  };
7852
7878
  }
7853
- function uf(e) {
7879
+ function ff(e) {
7854
7880
  if (e.data.bl_idname === "FunctionNodeCompare") {
7855
7881
  let t = {};
7856
7882
  return e.data.data_type && (t.data_type = e.data.data_type), e.data.operation && (t.operation = e.data.operation), Object.keys(t).length > 0 ? t : void 0;
@@ -7860,7 +7886,7 @@ function uf(e) {
7860
7886
  return e.data.operation && (t.operation = e.data.operation), e.data.use_clamp && (t.use_clamp = "true"), Object.keys(t).length > 0 ? t : void 0;
7861
7887
  }
7862
7888
  }
7863
- function df(e, t) {
7889
+ function pf(e, t) {
7864
7890
  if (!e?.data) throw Error(`"node_trees[${t}].data" is missing.`);
7865
7891
  if (!e.data.nodes?.data?.items) throw Error(`"node_trees[${t}].data.nodes.data.items" is missing.`);
7866
7892
  if (!e.data.links?.data?.items) throw Error(`"node_trees[${t}].data.links.data.items" is missing.`);
@@ -7870,10 +7896,10 @@ function df(e, t) {
7870
7896
  nodes: e.data.nodes.data.items.map((e, t) => {
7871
7897
  if (!e?.data) throw Error(`Node at index ${t} is missing ".data".`);
7872
7898
  let n = e.data.location_absolute ?? e.data.location ?? [0, 0];
7873
- if (e.data.bl_idname === "NodeReroute") return sf(e, n);
7899
+ if (e.data.bl_idname === "NodeReroute") return lf(e, n);
7874
7900
  let r = (e.data.outputs?.data?.items ?? []).map((t, n) => {
7875
7901
  if (!t?.data) throw Error(`Node "${e.data.name}" output socket ${n} is missing ".data".`);
7876
- return lf(t, n);
7902
+ return df(t, n);
7877
7903
  });
7878
7904
  e.data.bl_idname === "FunctionNodeInputVector" && Array.isArray(e.data.vector) && (r[0] &&= {
7879
7905
  ...r[0],
@@ -7884,20 +7910,20 @@ function df(e, t) {
7884
7910
  });
7885
7911
  let i = (e.data.inputs?.data?.items ?? []).map((t, n) => {
7886
7912
  if (!t?.data) throw Error(`Node "${e.data.name}" input socket ${n} is missing ".data".`);
7887
- return lf(t, n);
7913
+ return df(t, n);
7888
7914
  });
7889
- (e.data.bl_idname === "ShaderNodeCombineColor" || e.data.bl_idname === "ShaderNodeSeparateColor") && (i = af(i, e.data.mode));
7890
- let a = e.data.bl_idname === "ShaderNodeFloatCurve" ? rf(e) : void 0, o = uf(e);
7915
+ (e.data.bl_idname === "ShaderNodeCombineColor" || e.data.bl_idname === "ShaderNodeSeparateColor") && (i = sf(i, e.data.mode));
7916
+ let a = e.data.bl_idname === "ShaderNodeFloatCurve" ? of(e) : void 0, o = ff(e);
7891
7917
  return {
7892
7918
  id: String(e.id),
7893
7919
  type: e.data.bl_idname,
7894
- label: e.data.label || of(e.data.name),
7920
+ label: e.data.label || cf(e.data.name),
7895
7921
  position: {
7896
7922
  x: n[0],
7897
7923
  y: -n[1]
7898
7924
  },
7899
7925
  width: e.data.width ?? 140,
7900
- headerColor: $d(e.data.bl_idname),
7926
+ headerColor: tf(e.data.bl_idname, e.data.data_type),
7901
7927
  inputs: i,
7902
7928
  outputs: r,
7903
7929
  floatCurve: a,
@@ -7915,12 +7941,12 @@ function df(e, t) {
7915
7941
  })
7916
7942
  };
7917
7943
  }
7918
- function ff(e) {
7944
+ function mf(e) {
7919
7945
  if (!e || typeof e != "object") throw Error("JSON root must be an object.");
7920
7946
  if (!Array.isArray(e.node_trees) || e.node_trees.length === 0) throw Error("Expected \"node_trees\" array with at least one entry.");
7921
7947
  let t = {};
7922
7948
  for (let n = 0; n < e.node_trees.length; n++) {
7923
- let r = df(e.node_trees[n], n);
7949
+ let r = pf(e.node_trees[n], n);
7924
7950
  t[r.id] = r;
7925
7951
  }
7926
7952
  let n = /* @__PURE__ */ new Set();
@@ -7939,21 +7965,21 @@ function ff(e) {
7939
7965
  trees: t
7940
7966
  };
7941
7967
  }
7942
- function pf(e, t) {
7968
+ function hf(e, t) {
7943
7969
  return {
7944
7970
  ...t,
7945
7971
  nodeId: e,
7946
7972
  direction: "input"
7947
7973
  };
7948
7974
  }
7949
- function mf(e, t) {
7975
+ function gf(e, t) {
7950
7976
  return {
7951
7977
  ...t,
7952
7978
  nodeId: e,
7953
7979
  direction: "output"
7954
7980
  };
7955
7981
  }
7956
- function hf(e) {
7982
+ function _f(e) {
7957
7983
  let t = e.nodes.map((e) => ({
7958
7984
  id: e.id,
7959
7985
  type: e.type,
@@ -7961,8 +7987,8 @@ function hf(e) {
7961
7987
  position: e.position,
7962
7988
  width: e.width,
7963
7989
  headerColor: e.headerColor,
7964
- inputs: e.inputs.map((t) => pf(e.id, t)),
7965
- outputs: e.outputs.map((t) => mf(e.id, t)),
7990
+ inputs: e.inputs.map((t) => hf(e.id, t)),
7991
+ outputs: e.outputs.map((t) => gf(e.id, t)),
7966
7992
  floatCurve: e.floatCurve,
7967
7993
  properties: e.properties,
7968
7994
  groupTreeId: e.groupTreeId,
@@ -7986,11 +8012,11 @@ function hf(e) {
7986
8012
  }
7987
8013
  //#endregion
7988
8014
  //#region src/gn/xyflow/mapGraphIRToFlow.ts
7989
- function gf(e) {
8015
+ function vf(e) {
7990
8016
  let t = Math.max(e.inputs.length, e.outputs.length);
7991
8017
  return Math.max(60, 32 + t * 18 + 16);
7992
8018
  }
7993
- function _f(e, t) {
8019
+ function yf(e, t) {
7994
8020
  if (e.type === "NodeReroute") {
7995
8021
  let t = e.outputs[0]?.color ?? e.inputs[0]?.color ?? "#888888";
7996
8022
  return {
@@ -8030,7 +8056,7 @@ function _f(e, t) {
8030
8056
  }
8031
8057
  };
8032
8058
  }
8033
- function vf(e, t, n) {
8059
+ function bf(e, t, n) {
8034
8060
  let r = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map();
8035
8061
  for (let e of n.nodes) r.set(e.id, []), i.set(e.id, []);
8036
8062
  for (let e of n.edges) r.has(e.sourceNodeId) || r.set(e.sourceNodeId, []), i.has(e.targetNodeId) || i.set(e.targetNodeId, []), r.get(e.sourceNodeId).push(e.targetNodeId), i.get(e.targetNodeId).push(e.sourceNodeId);
@@ -8054,16 +8080,16 @@ function vf(e, t, n) {
8054
8080
  for (let e of a) s.has(e) && l.add(e);
8055
8081
  return l;
8056
8082
  }
8057
- function yf(e) {
8058
- let t = new Set(e.edges.map((e) => e.targetSocketId)), n = e.nodes.map((e) => _f(e, t)), r = e.nodes.find((e) => e.type === "GeometryNodeSimulationInput"), i = e.nodes.find((e) => e.type === "GeometryNodeSimulationOutput"), a = n;
8083
+ function xf(e) {
8084
+ let t = new Set(e.edges.map((e) => e.targetSocketId)), n = e.nodes.map((e) => yf(e, t)), r = e.nodes.find((e) => e.type === "GeometryNodeSimulationInput"), i = e.nodes.find((e) => e.type === "GeometryNodeSimulationOutput"), a = n;
8059
8085
  if (r && i) {
8060
- let t = vf(r.id, i.id, e);
8086
+ let t = bf(r.id, i.id, e);
8061
8087
  if (t.size > 0) {
8062
8088
  let i = new Map(e.nodes.map((e) => [e.id, e])), o = Infinity, s = Infinity, c = -Infinity, l = -Infinity;
8063
8089
  for (let e of t) {
8064
8090
  let t = i.get(e);
8065
8091
  if (!t) continue;
8066
- let n = t.width, r = gf(t);
8092
+ let n = t.width, r = vf(t);
8067
8093
  o = Math.min(o, t.position.x), s = Math.min(s, t.position.y), c = Math.max(c, t.position.x + n), l = Math.max(l, t.position.y + r);
8068
8094
  }
8069
8095
  if (Number.isFinite(o) && Number.isFinite(s) && Number.isFinite(c) && Number.isFinite(l)) {
@@ -8111,7 +8137,7 @@ function yf(e) {
8111
8137
  }
8112
8138
  //#endregion
8113
8139
  //#region src/gn/exporter/nodebpyExporter.ts
8114
- function bf(e, t) {
8140
+ function Sf(e, t) {
8115
8141
  let n = e.node_trees;
8116
8142
  if (!Array.isArray(n) || t.size === 0) return e;
8117
8143
  let r = new Map(n.map((e) => [e.id, e])), i = /* @__PURE__ */ new Set(), a = [];
@@ -8171,25 +8197,25 @@ function bf(e, t) {
8171
8197
  }
8172
8198
  //#endregion
8173
8199
  //#region src/utils/encodeTreeClipperPayload.ts
8174
- var xf = "TreeClipper::";
8175
- function Sf(e) {
8200
+ var Cf = "TreeClipper::";
8201
+ function wf(e) {
8176
8202
  let t = "", n = 32768;
8177
8203
  for (let r = 0; r < e.length; r += n) t += String.fromCharCode(...e.subarray(r, r + n));
8178
8204
  return btoa(t);
8179
8205
  }
8180
- async function Cf(e) {
8206
+ async function Tf(e) {
8181
8207
  let t = new Blob([e]).stream().pipeThrough(new CompressionStream("gzip")), n = await new Response(t).arrayBuffer();
8182
8208
  return new Uint8Array(n);
8183
8209
  }
8184
- async function wf(e) {
8185
- return xf + Sf(await Cf(new TextEncoder().encode(e)));
8210
+ async function Ef(e) {
8211
+ return Cf + wf(await Tf(new TextEncoder().encode(e)));
8186
8212
  }
8187
8213
  //#endregion
8188
8214
  //#region src/gn/ir/curvePath.ts
8189
- function Tf(e, t) {
8215
+ function Df(e, t) {
8190
8216
  return Math.sqrt(e * e + t * t);
8191
8217
  }
8192
- function Ef(e) {
8218
+ function Of(e) {
8193
8219
  let t = e.length, n = e.map(({ location: [n, r], handleType: i }, a) => {
8194
8220
  let o = a > 0 ? e[a - 1].location : null, s = a < t - 1 ? e[a + 1].location : null;
8195
8221
  if (i === "VECTOR") return {
@@ -8199,11 +8225,11 @@ function Ef(e) {
8199
8225
  let c = 0, l = 0, u = 0, d = 0;
8200
8226
  if (o && s) {
8201
8227
  let e = n - o[0], t = r - o[1], i = s[0] - n, a = s[1] - r;
8202
- if (u = Tf(e, t), d = Tf(i, a), u > 1e-8 && d > 1e-8) {
8203
- let n = e / u + i / d, r = t / u + a / d, o = Tf(n, r);
8228
+ if (u = Df(e, t), d = Df(i, a), u > 1e-8 && d > 1e-8) {
8229
+ let n = e / u + i / d, r = t / u + a / d, o = Df(n, r);
8204
8230
  o > 1e-8 && (c = n / o, l = r / o);
8205
8231
  } else d > 1e-8 ? (c = (s[0] - n) / d, l = (s[1] - r) / d) : u > 1e-8 && (c = (n - o[0]) / u, l = (r - o[1]) / u);
8206
- } else s ? (d = Tf(s[0] - n, s[1] - r), d > 1e-8 && (c = (s[0] - n) / d, l = (s[1] - r) / d)) : o && (u = Tf(n - o[0], r - o[1]), u > 1e-8 && (c = (n - o[0]) / u, l = (r - o[1]) / u));
8232
+ } else s ? (d = Df(s[0] - n, s[1] - r), d > 1e-8 && (c = (s[0] - n) / d, l = (s[1] - r) / d)) : o && (u = Df(n - o[0], r - o[1]), u > 1e-8 && (c = (n - o[0]) / u, l = (r - o[1]) / u));
8207
8233
  let f = [n - c * u / 3, r - l * u / 3], p = [n + c * d / 3, r + l * d / 3];
8208
8234
  if (i === "AUTO_CLAMPED") {
8209
8235
  if (o) {
@@ -8248,7 +8274,7 @@ function Ef(e) {
8248
8274
  }
8249
8275
  return n;
8250
8276
  }
8251
- function Df(e, t, n, r, i, a, o) {
8277
+ function kf(e, t, n, r, i, a, o) {
8252
8278
  let s = r - t || 1, c = i - n || 1, l = (e) => (e - t) / s * a, u = (e) => (1 - (e - n) / c) * o;
8253
8279
  if (e.length < 2) return {
8254
8280
  strokePath: "",
@@ -8256,7 +8282,7 @@ function Df(e, t, n, r, i, a, o) {
8256
8282
  zeroLinePath: "",
8257
8283
  dotPositions: []
8258
8284
  };
8259
- let d = Ef(e), [f, p] = e[0].location, m = `M ${l(f).toFixed(2)} ${u(p).toFixed(2)}`;
8285
+ let d = Of(e), [f, p] = e[0].location, m = `M ${l(f).toFixed(2)} ${u(p).toFixed(2)}`;
8260
8286
  for (let t = 0; t < e.length - 1; t++) {
8261
8287
  let n = d[t].right, r = d[t + 1].left, [i, a] = e[t + 1].location;
8262
8288
  m += ` C ${l(n[0]).toFixed(2)} ${u(n[1]).toFixed(2)},`, m += ` ${l(r[0]).toFixed(2)} ${u(r[1]).toFixed(2)},`, m += ` ${l(i).toFixed(2)} ${u(a).toFixed(2)}`;
@@ -8271,18 +8297,18 @@ function Df(e, t, n, r, i, a, o) {
8271
8297
  }
8272
8298
  //#endregion
8273
8299
  //#region src/gn/components/groupNavContext.ts
8274
- var Of = t(null);
8275
- function kf() {
8276
- return o(Of);
8300
+ var Af = t(null);
8301
+ function jf() {
8302
+ return o(Af);
8277
8303
  }
8278
8304
  //#endregion
8279
8305
  //#region src/gn/components/GenericGNNode.tsx
8280
- var Af = [
8306
+ var Mf = [
8281
8307
  "X",
8282
8308
  "Y",
8283
8309
  "Z",
8284
8310
  "W"
8285
- ], jf = {
8311
+ ], Nf = {
8286
8312
  FLOAT: "Float",
8287
8313
  INT: "Integer",
8288
8314
  VECTOR: "Vector",
@@ -8290,7 +8316,7 @@ var Af = [
8290
8316
  STRING: "String",
8291
8317
  BOOLEAN: "Boolean",
8292
8318
  ROTATION: "Rotation"
8293
- }, Mf = {
8319
+ }, Pf = {
8294
8320
  EQUAL: "Equal",
8295
8321
  NOT_EQUAL: "Not Equal",
8296
8322
  LESS_THAN: "Less Than",
@@ -8336,10 +8362,10 @@ var Af = [
8336
8362
  RADIANS: "To Radians",
8337
8363
  DEGREES: "To Degrees"
8338
8364
  };
8339
- function Nf(e, t) {
8340
- return e === "data_type" ? jf[t] ?? t : e === "operation" ? Mf[t] ?? t : e === "use_clamp" ? "Clamp" : t;
8365
+ function Ff(e, t) {
8366
+ return e === "data_type" ? Nf[t] ?? t : e === "operation" ? Pf[t] ?? t : e === "use_clamp" ? "Clamp" : t;
8341
8367
  }
8342
- function Pf(e) {
8368
+ function If(e) {
8343
8369
  switch (e) {
8344
8370
  case "LINE": return "gn-socket--line";
8345
8371
  case "DIAMOND": return "gn-socket--diamond";
@@ -8348,55 +8374,55 @@ function Pf(e) {
8348
8374
  default: return "gn-socket--circle";
8349
8375
  }
8350
8376
  }
8351
- function Ff(e) {
8377
+ function Lf(e) {
8352
8378
  return e === "ROTATION" ? "°" : e === "FLOAT" ? " m" : "";
8353
8379
  }
8354
- function If(e) {
8380
+ function Rf(e) {
8355
8381
  return parseFloat(e.toFixed(3)).toString();
8356
8382
  }
8357
- function Lf(e, t) {
8358
- return typeof e == "boolean" ? e ? "True" : "False" : typeof e == "string" ? e : `${If(e)}${Ff(t)}`;
8383
+ function zf(e, t) {
8384
+ return typeof e == "boolean" ? e ? "True" : "False" : typeof e == "string" ? e : `${Rf(e)}${Lf(t)}`;
8359
8385
  }
8360
- function Rf(e) {
8386
+ function Bf(e) {
8361
8387
  return Math.round(Math.min(1, Math.max(0, e)) * 255);
8362
8388
  }
8363
- function zf(e) {
8389
+ function Vf(e) {
8364
8390
  let [t, n, r, i = 1] = e.values;
8365
8391
  return /* @__PURE__ */ g("div", {
8366
8392
  className: "gn-node__color-swatch",
8367
- style: { background: `rgba(${Rf(t)},${Rf(n)},${Rf(r)},${i.toFixed(2)})` }
8393
+ style: { background: `rgba(${Bf(t)},${Bf(n)},${Bf(r)},${i.toFixed(2)})` }
8368
8394
  });
8369
8395
  }
8370
- function Bf(e) {
8371
- if (e.dataType === "RGBA") return /* @__PURE__ */ g(zf, { values: e.values });
8372
- let t = Ff(e.dataType);
8396
+ function Hf(e) {
8397
+ if (e.dataType === "RGBA") return /* @__PURE__ */ g(Vf, { values: e.values });
8398
+ let t = Lf(e.dataType);
8373
8399
  return /* @__PURE__ */ g("div", {
8374
8400
  className: "gn-node__vec-block",
8375
8401
  children: e.values.slice(0, 4).map((e, n) => /* @__PURE__ */ _("div", {
8376
8402
  className: "gn-node__vec-row",
8377
8403
  children: [/* @__PURE__ */ g("span", {
8378
8404
  className: "gn-node__vec-label",
8379
- children: Af[n]
8405
+ children: Mf[n]
8380
8406
  }), /* @__PURE__ */ _("span", {
8381
8407
  className: "gn-node__vec-value",
8382
- children: [If(e), t]
8408
+ children: [Rf(e), t]
8383
8409
  })]
8384
8410
  }, n))
8385
8411
  });
8386
8412
  }
8387
- function Vf({ properties: e }) {
8413
+ function Uf({ properties: e }) {
8388
8414
  let t = Object.entries(e);
8389
8415
  return t.length === 0 ? null : /* @__PURE__ */ g("div", {
8390
8416
  className: "gn-node__props",
8391
8417
  children: t.map(([e, t]) => /* @__PURE__ */ g("div", {
8392
8418
  className: "gn-node__prop-row",
8393
- children: Nf(e, t)
8419
+ children: Ff(e, t)
8394
8420
  }, e))
8395
8421
  });
8396
8422
  }
8397
- var Hf = 120, Uf = 6;
8398
- function Wf({ curve: e, width: t }) {
8399
- let n = Math.max(10, t - Uf * 2), r = Hf, { strokePath: i, fillPath: a, zeroLinePath: o, dotPositions: s } = Df(e.points, e.clipMinX, e.clipMinY, e.clipMaxX, e.clipMaxY, n, r);
8423
+ var Wf = 120, Gf = 6;
8424
+ function Kf({ curve: e, width: t }) {
8425
+ let n = Math.max(10, t - Gf * 2), r = Wf, { strokePath: i, fillPath: a, zeroLinePath: o, dotPositions: s } = kf(e.points, e.clipMinX, e.clipMinY, e.clipMaxX, e.clipMaxY, n, r);
8400
8426
  return /* @__PURE__ */ g("div", {
8401
8427
  className: "gn-node__curve-wrap",
8402
8428
  children: /* @__PURE__ */ _("svg", {
@@ -8427,7 +8453,7 @@ function Wf({ curve: e, width: t }) {
8427
8453
  })
8428
8454
  });
8429
8455
  }
8430
- function Gf(e) {
8456
+ function qf(e) {
8431
8457
  let { socket: t, position: n, type: r, align: i, suppressDefault: a } = e, o = t.name.trim().length === 0, s = !a && !t.hideValue && t.defaultValue?.kind === "scalar";
8432
8458
  return /* @__PURE__ */ _("div", {
8433
8459
  className: `gn-node__socket-row gn-node__socket-row--${i}`,
@@ -8436,7 +8462,7 @@ function Gf(e) {
8436
8462
  id: t.id,
8437
8463
  type: r,
8438
8464
  position: n,
8439
- className: `gn-socket ${Pf(t.displayShape)}`,
8465
+ className: `gn-socket ${If(t.displayShape)}`,
8440
8466
  style: {
8441
8467
  top: "50%",
8442
8468
  background: t.color,
@@ -8449,15 +8475,15 @@ function Gf(e) {
8449
8475
  }),
8450
8476
  s && t.defaultValue?.kind === "scalar" ? /* @__PURE__ */ g("span", {
8451
8477
  className: "gn-node__value",
8452
- children: Lf(t.defaultValue.value, t.dataType)
8478
+ children: zf(t.defaultValue.value, t.dataType)
8453
8479
  }) : null
8454
8480
  ]
8455
8481
  });
8456
8482
  }
8457
- function Kf(e, t) {
8483
+ function Jf(e, t) {
8458
8484
  return !t && !e.hideValue && e.defaultValue?.kind === "vec";
8459
8485
  }
8460
- function qf() {
8486
+ function Yf() {
8461
8487
  return /* @__PURE__ */ _("div", {
8462
8488
  className: "gn-node__stack",
8463
8489
  "aria-hidden": "true",
@@ -8468,8 +8494,8 @@ function qf() {
8468
8494
  ]
8469
8495
  });
8470
8496
  }
8471
- function Jf(e) {
8472
- let t = e.data, n = kf(), r = new Set(t.connectedInputIds ?? []), i = t.outputs.filter((e) => e.enabled), a = t.inputs.filter((e) => e.enabled), o = t.groupTreeId, s = o !== void 0 && t.groupTreeName !== void 0 && !!n;
8497
+ function Xf(e) {
8498
+ let t = e.data, n = jf(), r = new Set(t.connectedInputIds ?? []), i = t.outputs.filter((e) => e.enabled), a = t.inputs.filter((e) => e.enabled), o = t.groupTreeId, s = o !== void 0 && t.groupTreeName !== void 0 && !!n;
8473
8499
  return /* @__PURE__ */ _("div", {
8474
8500
  className: `gn-node${s ? " gn-node--group nodrag" : ""}`,
8475
8501
  onClick: s ? () => n.openGroup(o) : void 0,
@@ -8484,15 +8510,15 @@ function Jf(e) {
8484
8510
  children: t.label
8485
8511
  })
8486
8512
  }),
8487
- s && /* @__PURE__ */ g(qf, {}),
8488
- t.properties && /* @__PURE__ */ g(Vf, { properties: t.properties }),
8489
- t.floatCurve && /* @__PURE__ */ g(Wf, {
8513
+ s && /* @__PURE__ */ g(Yf, {}),
8514
+ t.properties && /* @__PURE__ */ g(Uf, { properties: t.properties }),
8515
+ t.floatCurve && /* @__PURE__ */ g(Kf, {
8490
8516
  curve: t.floatCurve,
8491
8517
  width: t.width
8492
8518
  }),
8493
8519
  /* @__PURE__ */ _("div", {
8494
8520
  className: "gn-node__body",
8495
- children: [i.map((e) => /* @__PURE__ */ g(Gf, {
8521
+ children: [i.map((e) => /* @__PURE__ */ g(qf, {
8496
8522
  socket: e,
8497
8523
  position: Y.Right,
8498
8524
  type: "source",
@@ -8500,13 +8526,13 @@ function Jf(e) {
8500
8526
  suppressDefault: !0
8501
8527
  }, e.id)), a.map((e) => {
8502
8528
  let t = r.has(e.id);
8503
- return /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g(Gf, {
8529
+ return /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g(qf, {
8504
8530
  socket: e,
8505
8531
  position: Y.Left,
8506
8532
  type: "target",
8507
8533
  align: "left",
8508
8534
  suppressDefault: t
8509
- }), Kf(e, t) ? /* @__PURE__ */ g(Bf, {
8535
+ }), Jf(e, t) ? /* @__PURE__ */ g(Hf, {
8510
8536
  values: e.defaultValue.values,
8511
8537
  dataType: e.dataType
8512
8538
  }) : null] }, e.id);
@@ -8517,7 +8543,7 @@ function Jf(e) {
8517
8543
  }
8518
8544
  //#endregion
8519
8545
  //#region src/gn/components/RerouteNode.tsx
8520
- function Yf(e) {
8546
+ function Zf(e) {
8521
8547
  let t = e.data;
8522
8548
  return /* @__PURE__ */ _("div", {
8523
8549
  className: "gn-reroute",
@@ -8537,7 +8563,7 @@ function Yf(e) {
8537
8563
  }
8538
8564
  //#endregion
8539
8565
  //#region src/gn/components/SimulationZoneFrame.tsx
8540
- function Xf(e) {
8566
+ function Qf(e) {
8541
8567
  let t = e.data;
8542
8568
  return /* @__PURE__ */ g("div", {
8543
8569
  className: "gn-sim-zone",
@@ -8564,30 +8590,30 @@ function Xf(e) {
8564
8590
  }
8565
8591
  //#endregion
8566
8592
  //#region src/gn/components/GeometryNodesFlow.tsx
8567
- var Zf = {
8568
- gnNode: Jf,
8569
- rerouteNode: Yf,
8570
- simulationZone: Xf
8571
- }, Qf = { padding: .08 }, $f = 120;
8572
- function ep(e) {
8593
+ var $f = {
8594
+ gnNode: Xf,
8595
+ rerouteNode: Zf,
8596
+ simulationZone: Qf
8597
+ }, ep = { padding: .08 }, tp = 120;
8598
+ function np(e) {
8573
8599
  let t = e.style?.height;
8574
8600
  if (typeof t == "number") return t;
8575
8601
  let n = e.data, r = Math.max(n?.inputs?.length ?? 0, n?.outputs?.length ?? 0);
8576
8602
  return Math.max(60, 32 + r * 18 + 16);
8577
8603
  }
8578
- function tp(e) {
8604
+ function rp(e) {
8579
8605
  let t = Infinity, n = Infinity, r = -Infinity, i = -Infinity;
8580
8606
  for (let a of e) {
8581
8607
  if (a.parentId) continue;
8582
- let e = a.style?.width ?? a.width ?? 200, o = ep(a);
8608
+ let e = a.style?.width ?? a.width ?? 200, o = np(a);
8583
8609
  t = Math.min(t, a.position.x), n = Math.min(n, a.position.y), r = Math.max(r, a.position.x + e), i = Math.max(i, a.position.y + o);
8584
8610
  }
8585
- return Number.isFinite(t) ? [[t - $f, n - $f], [r + $f, i + $f]] : [[-Infinity, -Infinity], [Infinity, Infinity]];
8611
+ return Number.isFinite(t) ? [[t - tp, n - tp], [r + tp, i + tp]] : [[-Infinity, -Infinity], [Infinity, Infinity]];
8586
8612
  }
8587
- function np(e) {
8588
- let { nodes: t, edges: n, jsonText: r, breadcrumbs: i, onNavigate: o, onSelectionIds: s, onCopiedMagicString: l, zoomOnScroll: p = !0 } = e, { fitView: m } = ll(), h = d(null), v = d(!1), y = d([]), [b, x] = f(null), [S, C] = f(!1), [w, T] = f(!1), E = d([]), [D, O, k] = fd(t), [A, j, M] = pd(n), N = u(() => tp(t), [t]);
8613
+ function ip(e) {
8614
+ let { nodes: t, edges: n, jsonText: r, breadcrumbs: i, onNavigate: o, onSelectionIds: s, onCopiedMagicString: l, zoomOnScroll: p = !0 } = e, { fitView: m } = ll(), h = d(null), v = d(!1), y = d([]), [b, x] = f(null), [S, C] = f(!1), [w, T] = f(!1), E = d([]), [D, O, k] = fd(t), [A, j, M] = pd(n), N = u(() => rp(t), [t]);
8589
8615
  c(() => {
8590
- O(t), s?.([]), v.current = !1, m(Qf);
8616
+ O(t), s?.([]), v.current = !1, m(ep);
8591
8617
  }, [
8592
8618
  t,
8593
8619
  O,
@@ -8599,7 +8625,7 @@ function np(e) {
8599
8625
  let e = h.current;
8600
8626
  if (!e) return;
8601
8627
  let t = new ResizeObserver(() => {
8602
- v.current || m(Qf);
8628
+ v.current || m(ep);
8603
8629
  });
8604
8630
  return t.observe(e), () => t.disconnect();
8605
8631
  }, [m]);
@@ -8616,7 +8642,7 @@ function np(e) {
8616
8642
  }, []), L = a(async () => {
8617
8643
  x(null);
8618
8644
  try {
8619
- let e = JSON.parse(r), t = new Set(y.current.map(Number).filter(Number.isFinite)), n = t.size > 0 ? bf(e, t) : e, i = await wf(JSON.stringify(n));
8645
+ let e = JSON.parse(r), t = new Set(y.current.map(Number).filter(Number.isFinite)), n = t.size > 0 ? Sf(e, t) : e, i = await Ef(JSON.stringify(n));
8620
8646
  if (await navigator.clipboard.writeText(i), l) {
8621
8647
  l();
8622
8648
  return;
@@ -8650,9 +8676,9 @@ function np(e) {
8650
8676
  onEdgesChange: M,
8651
8677
  onSelectionChange: F,
8652
8678
  onMoveStart: P,
8653
- nodeTypes: Zf,
8679
+ nodeTypes: $f,
8654
8680
  fitView: !0,
8655
- fitViewOptions: Qf,
8681
+ fitViewOptions: ep,
8656
8682
  minZoom: .2,
8657
8683
  translateExtent: N,
8658
8684
  nodesDraggable: !1,
@@ -8672,7 +8698,8 @@ function np(e) {
8672
8698
  children: [
8673
8699
  /* @__PURE__ */ g(bd, {
8674
8700
  gap: 20,
8675
- size: 1
8701
+ size: 1,
8702
+ color: "var(--grid-dot, #3a3a3a)"
8676
8703
  }),
8677
8704
  /* @__PURE__ */ g(kd, { showInteractive: !1 }),
8678
8705
  /* @__PURE__ */ g(Sc, {
@@ -8681,7 +8708,7 @@ function np(e) {
8681
8708
  className: "gn-top-left",
8682
8709
  children: [/* @__PURE__ */ _("span", {
8683
8710
  className: "gn-version-badge",
8684
- children: ["node-web-render v", "0.3.11"]
8711
+ children: ["node-web-render v", "0.3.13"]
8685
8712
  }), i.length > 1 ? /* @__PURE__ */ g("nav", {
8686
8713
  className: "gn-breadcrumbs",
8687
8714
  "aria-label": "Node group path",
@@ -8734,19 +8761,19 @@ function np(e) {
8734
8761
  ]
8735
8762
  });
8736
8763
  }
8737
- function rp(e) {
8764
+ function ap(e) {
8738
8765
  let { jsonText: t, showHeader: n = !0, onSelectionChange: r, onCopiedMagicString: i, zoomOnScroll: o = !0 } = e, [s, l] = f({
8739
8766
  json: t,
8740
8767
  ids: []
8741
8768
  }), d = u(() => {
8742
8769
  if (!t.trim()) return null;
8743
8770
  try {
8744
- let { rootId: e, trees: n } = ff(JSON.parse(t)), r = {};
8771
+ let { rootId: e, trees: n } = mf(JSON.parse(t)), r = {};
8745
8772
  for (let e of Object.values(n)) {
8746
- let t = hf(e);
8773
+ let t = _f(e);
8747
8774
  r[t.id] = {
8748
8775
  graph: t,
8749
- flow: yf(t)
8776
+ flow: xf(t)
8750
8777
  };
8751
8778
  }
8752
8779
  return {
@@ -8810,9 +8837,9 @@ function rp(e) {
8810
8837
  className: "flow-error",
8811
8838
  role: "alert",
8812
8839
  children: [/* @__PURE__ */ g("strong", { children: "Parse error" }), /* @__PURE__ */ g("span", { children: d.error })]
8813
- }) : m ? /* @__PURE__ */ g(Of.Provider, {
8840
+ }) : m ? /* @__PURE__ */ g(Af.Provider, {
8814
8841
  value: v,
8815
- children: /* @__PURE__ */ g(sd, { children: /* @__PURE__ */ g(np, {
8842
+ children: /* @__PURE__ */ g(sd, { children: /* @__PURE__ */ g(ip, {
8816
8843
  nodes: m.flow.nodes,
8817
8844
  edges: m.flow.edges,
8818
8845
  jsonText: t,
@@ -8834,7 +8861,7 @@ function rp(e) {
8834
8861
  }
8835
8862
  //#endregion
8836
8863
  //#region src/components/TreeClipperLogo.tsx
8837
- function ip({ className: e }) {
8864
+ function op({ className: e }) {
8838
8865
  return /* @__PURE__ */ _("svg", {
8839
8866
  viewBox: "0 0 256 256",
8840
8867
  className: e,
@@ -8895,7 +8922,7 @@ function ip({ className: e }) {
8895
8922
  }
8896
8923
  //#endregion
8897
8924
  //#region src/embed.tsx
8898
- function ap(e) {
8925
+ function sp(e) {
8899
8926
  let { payload: t } = e, [n, r] = f(""), [i, a] = f(null), [o, s] = f(!0), [l, u] = f(!1), [p, m] = f(!1), v = d(!1), y = d(!1), b = d(null), S = d(null), C = d(null), w = () => {
8900
8927
  !y.current || v.current || (m(!0), C.current && clearTimeout(C.current), C.current = setTimeout(() => {
8901
8928
  u(!1), m(!1);
@@ -8934,7 +8961,7 @@ function ap(e) {
8934
8961
  className: "gnwr-loading",
8935
8962
  role: "status",
8936
8963
  "aria-live": "polite",
8937
- children: [/* @__PURE__ */ g(ip, { className: "gnwr-loading__logo" }), /* @__PURE__ */ g("span", {
8964
+ children: [/* @__PURE__ */ g(op, { className: "gnwr-loading__logo" }), /* @__PURE__ */ g("span", {
8938
8965
  className: "gnwr-loading__label",
8939
8966
  children: "Loading graph…"
8940
8967
  })]
@@ -8943,7 +8970,7 @@ function ap(e) {
8943
8970
  role: "alert",
8944
8971
  children: [/* @__PURE__ */ g("strong", { children: "Decode error" }), /* @__PURE__ */ g("span", { children: i })]
8945
8972
  }) : /* @__PURE__ */ _(h, { children: [
8946
- /* @__PURE__ */ g(rp, {
8973
+ /* @__PURE__ */ g(ap, {
8947
8974
  jsonText: n,
8948
8975
  showHeader: !1,
8949
8976
  zoomOnScroll: !1,
@@ -8968,7 +8995,7 @@ function ap(e) {
8968
8995
  strokeLinecap: "round",
8969
8996
  strokeLinejoin: "round"
8970
8997
  })
8971
- }), /* @__PURE__ */ g("span", { children: "Copied!" })] }) : /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(ip, { className: "gnwr-copy-button__logo" }), /* @__PURE__ */ g("span", { children: "Copy TreeClipper Magic String" })] })
8998
+ }), /* @__PURE__ */ g("span", { children: "Copied!" })] }) : /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(op, { className: "gnwr-copy-button__logo" }), /* @__PURE__ */ g("span", { children: "Copy TreeClipper Magic String" })] })
8972
8999
  }),
8973
9000
  (l || p) && /* @__PURE__ */ _("div", {
8974
9001
  className: `gnwr-copy-toast${p ? " gnwr-leaving" : ""}`,
@@ -8993,22 +9020,22 @@ function ap(e) {
8993
9020
  })
8994
9021
  });
8995
9022
  }
8996
- var op = /* @__PURE__ */ new Map(), sp = null;
8997
- function cp(e, t) {
8998
- op.get(e)?.unmount();
9023
+ var cp = /* @__PURE__ */ new Map(), lp = null;
9024
+ function up(e, t) {
9025
+ cp.get(e)?.unmount();
8999
9026
  let r = m(e);
9000
- op.set(e, r), sp = e;
9027
+ cp.set(e, r), lp = e;
9001
9028
  let i = t.onClose;
9002
- return r.render(n(ap, {
9029
+ return r.render(n(sp, {
9003
9030
  ...t,
9004
9031
  onClose: i ? () => {
9005
- lp(e), i();
9032
+ dp(e), i();
9006
9033
  } : void 0
9007
- })), () => lp(e);
9034
+ })), () => dp(e);
9008
9035
  }
9009
- function lp(e) {
9010
- let t = e ?? sp;
9011
- t && (op.get(t)?.unmount(), op.delete(t), t === sp && (sp = null));
9036
+ function dp(e) {
9037
+ let t = e ?? lp;
9038
+ t && (cp.get(t)?.unmount(), cp.delete(t), t === lp && (lp = null));
9012
9039
  }
9013
9040
  //#endregion
9014
- export { ap as GraphView, cp as mountGraphView, lp as unmountGraphView };
9041
+ export { sp as GraphView, up as mountGraphView, dp as unmountGraphView };
@@ -1 +1 @@
1
- export declare function nodeHeaderColor(blIdname: string): string;
1
+ export declare function nodeHeaderColor(blIdname: string, dataType?: string): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "geonodes-web-render",
3
- "version": "0.3.11",
3
+ "version": "0.3.13",
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": {