@keyframes running-glow { 0% { box-shadow: 0 0 3px 0px #f0ad4e; } 50% { box-shadow: 0 0 10px 3px #f0ad4e; } 100% { box-shadow: 0 0 3px 0px #f0ad4e; } } @keyframes polling-glow { 0% { box-shadow: 0 0 3px 0px #007bff; } 50% { box-shadow: 0 0 10px 3px #007bff; } 100% { box-shadow: 0 0 3px 0px #007bff; } } .custom-node { border: 2px solid #777; /* Increased border width */ border-radius: 8px; background: #f9f9f9; width: 350px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); transition: border-color 0.3s, box-shadow 0.3s; /* Smooth transition */ } .custom-node.running { border-color: #f0ad4e; animation: running-glow 1.5s infinite; } .custom-node.polling { border-color: #007bff; animation: polling-glow 1.5s infinite; } .custom-node.success { border-color: #5cb85c; } .custom-node.error { border-color: #d9534f; } .custom-node-header { background: #e0e0e0; padding: 10px; border-top-left-radius: 6px; /* Adjusted for new border width */ border-top-right-radius: 6px; border-bottom: 1px solid #ccc; } .custom-node-header strong { font-size: 14px; display: block; } .custom-node-header p { font-family: monospace; font-size: 12px; color: #333; margin: 4px 0 0; } .custom-node-content { padding: 0; } .custom-node-section { padding: 10px; border-bottom: 1px solid #eee; position: relative; } .custom-node-section:last-child { border-bottom: none; } .custom-node-section-title { font-weight: bold; font-size: 11px; color: #888; text-transform: uppercase; margin-bottom: 10px; } .custom-node-input-row, .custom-node-output-row { position: relative; display: flex; flex-direction: column; margin-bottom: 12px; padding-left: 15px; /* Make space for handles */ padding-right: 15px; /* Make space for handles */ } .custom-node-input-row:last-child, .custom-node-output-row:last-child { margin-bottom: 0; } .custom-node-input-row .react-flow__handle, .custom-node-output-row .react-flow__handle { width: 8px; height: 8px; top: 50%; /* Vertically center on the row */ transform: translateY(-50%); } .custom-node-input-row .react-flow__handle-left { left: -4px; } .custom-node-output-row .react-flow__handle-right { right: -4px; } .custom-node-input-row label, .custom-node-output-row label { font-size: 12px; margin-bottom: 5px; font-weight: bold; color: #555; } .custom-node-input-row.connected { padding-top: 8px; padding-bottom: 8px; } .custom-node-input-row.connected label { color: #999; margin-bottom: 0; } .custom-node-input-row.connected span { font-size: 12px; color: #007bff; background-color: #e7f3ff; padding: 8px; border-radius: 4px; border: 1px solid #b3d7ff; margin-top: 5px; } .custom-node-output-row { flex-direction: row; justify-content: space-between; align-items: center; padding-top: 4px; padding-bottom: 4px; } .custom-node-output-row label { margin-bottom: 0; } .custom-node-input-row input[type="text"], .custom-node-input-row input[type="number"], .custom-node-input-row textarea, .custom-node-input-row select { width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; font-size: 12px; } .custom-node-input-row input[type="range"] { width: 100%; } .checkbox-wrapper { display: flex; flex-direction: row; align-items: center; } .checkbox-wrapper input { margin-right: 8px; } .checkbox-wrapper label { margin-bottom: 0; font-weight: normal; } .file-input-wrapper { display: flex; align-items: center; } .file-input-wrapper input[type="file"] { flex-grow: 1; font-size: 11px; } .file-input-wrapper button { padding: 6px 10px; font-size: 12px; background-color: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer; margin-left: 8px; } .file-input-wrapper button:hover { background-color: #0056b3; } .advanced-settings { margin-top: 15px; border-top: 1px solid #eee; padding-top: 10px; } .advanced-settings-toggle { background: none; border: none; cursor: pointer; font-size: 12px; font-weight: bold; color: #007bff; padding: 0; margin-bottom: 10px; } .advanced-settings-toggle:hover { text-decoration: underline; } .custom-node.running .custom-node-header { background-color: #fff3cd; color: #856404; border-color: #ffeeba; } .custom-node.polling .custom-node-header { background-color: #e7f3ff; color: #004085; border-color: #b8daff; } .custom-node.success .custom-node-header { background-color: #d4edda; color: #155724; border-color: #c3e6cb; } .custom-node.error .custom-node-header { background-color: #f8d7da; color: #721c24; border-color: #f5c6cb; } .node-status { float: right; font-size: 10px; font-weight: bold; text-transform: uppercase; padding: 3px 6px; border-radius: 3px; background: rgba(0,0,0,0.1); } /* New styles for JSON path selector */ .json-path-selector { min-width: 120px; margin-right: 12px; position: relative; } .json-path-select { width: 100%; font-size: 11px; padding: 6px; border: 1px solid #ccc; border-radius: 4px; background-color: #fff; color: #555; appearance: menulist; /* Show dropdown arrow */ } /* Style for the JSON output row to make it more distinguishable */ .custom-node-output-row:has(.json-path-selector) { margin-bottom: 8px; border-bottom: 1px dashed #e0e0e0; padding-bottom: 8px; } /* Highlight the JSON output row when hovered */ .custom-node-output-row:has(.json-path-selector):hover { background-color: #f5f9ff; } /* Style for the label when using JSON selector */ .custom-node-output-row:has(.json-path-selector) label { color: #0275d8; font-size: 11px; } /* Make the output row with JSON selector look more organized */ .custom-node-output-row:has(.json-path-selector) { display: grid; grid-template-columns: auto minmax(120px, 1fr) 20px; gap: 8px; align-items: center; }