@use "mixins";

/**
 * Copyright JS Foundation and other contributors, http://js.foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 **/

.nr-ui-view-lasso {
    stroke-width: 1px;
    stroke: var(--red-ui-view-lasso-stroke);
    fill: var(--red-ui-view-lasso-fill);
    stroke-dasharray: 10 5;
}

.nr-ui-view-slice {
    stroke-width: 1px;
    stroke: var(--red-ui-view-lasso-stroke);
    fill: none;
    stroke-dasharray: 10 5;
}

.node_label_italic, // deprecated: use red-ui-flow-node-label-italic
.red-ui-flow-node-label-italic {
    font-style: italic;
}
.red-ui-flow-node-label-white {
    fill: var(--red-ui-view-background) !important;
}
.red-ui-flow-node-label {
    stroke-width: 0;
    fill: var(--red-ui-node-label-color);
    font-size: 14px;
    pointer-events: none;
    -webkit-touch-callout: none;
    @include mixins.disable-selection;

    .red-ui-flow-node-label-text {
        dominant-baseline: middle;
    }

    &.red-ui-flow-node-label-right .red-ui-flow-node-label-text {
        text-anchor: end;
    }
}

.red-ui-flow-port-label {
    stroke-width: 0;
    fill: var(--red-ui-node-port-label-color);
    font-size: 16px;
    dominant-baseline: middle;
    text-anchor: middle;
    pointer-events: none;
    -webkit-touch-callout: none;
    @include mixins.disable-selection;
}


.red-ui-flow-node {
    stroke: var(--red-ui-node-border);
    cursor: move;
    stroke-width: 1;
    .red-ui-workspace-locked & {
        cursor: pointer;
    }
}
.red-ui-workspace-select-mode {
    g.red-ui-flow-node.red-ui-flow-node-hovered * {
        cursor: pointer !important
    }
    g.red-ui-flow-node, g.red-ui-flow-link {
        opacity: 0.5;
    }
    g.red-ui-flow-node.red-ui-flow-node-hovered:not(.red-ui-flow-node-selected) {
        opacity: 0.9;
        .red-ui-flow-node {
            stroke-width: 2;
            stroke: var(--red-ui-node-selected-color) !important;
            stroke-dasharray: 10, 4;
        }
    }
}

.red-ui-flow-group {
    &.red-ui-flow-group-hovered {
        .red-ui-flow-group-outline-select-line {
            stroke-opacity: 0.8 !important;
            stroke-dasharray: 10 4 !important;
        }
        .red-ui-flow-group-outline-select-outline {
            stroke-opacity: 0.8 !important;
        }
    }
    &.red-ui-flow-group-active-hovered:not(.red-ui-flow-group-hovered) {
        .red-ui-flow-group-outline-select {
            stroke: var(--red-ui-link-link-color);
        }
    }
}

.red-ui-flow-group-outline {
    fill: none;
    stroke: var(--red-ui-node-selected-color);
    stroke-opacity: 0;
    stroke-width: 12;
    pointer-events: stroke;
}
.red-ui-flow-group-outline-select {
    cursor: move;
    fill: none;
    stroke: var(--red-ui-node-selected-color);
    pointer-events: none;
    stroke-opacity: 0;
    stroke-width: 2;

    &.red-ui-flow-group-outline-select-outline {
        stroke: var(--red-ui-view-background);
        stroke-width: 4;
    }
    &.red-ui-flow-group-outline-select-background {
        fill: white;
        fill-opacity: 0;
        pointer-events: stroke;
        stroke-width: 16;
    }
}

svg:not(.red-ui-workspace-lasso-active) {
    .red-ui-flow-group:not(.red-ui-flow-group-selected) {
        .red-ui-flow-group-outline-select.red-ui-flow-group-outline-select-background:hover {
            ~ .red-ui-flow-group-outline-select {
                stroke-opacity: 0.4 !important;
            }
            ~ .red-ui-flow-group-outline-select-line {
                stroke-dasharray: 10 4 !important;
            }
        }
    }
}

.red-ui-flow-group-body {
    pointer-events: none;
    fill: var(--red-ui-group-default-fill);
    fill-opacity: var(--red-ui-group-default-fill-opacity);
    stroke-width: 2;
    stroke: var(--red-ui-group-default-stroke);
    stroke-opacity: var(--red-ui-group-default-stroke-opacity);
}
.red-ui-flow-group-label {
    @include mixins.disable-selection;
    fill: var(--red-ui-group-default-label-color);
}

.red-ui-flow-node-ghost {
    opacity: 0.6;
    rect.red-ui-flow-node  {
        stroke: var(--red-ui-node-border-placeholder);
        stroke-dasharray:10,4;
        stroke-width: 2;
    }

}

.red-ui-flow-node-unknown {
    stroke-dasharray:10,4;
    stroke: var(--red-ui-node-border-unknown);
}
.red-ui-flow-node-placeholder {
    stroke-dasharray:10,4;
    stroke: var(--red-ui-node-border-placeholder);
    fill: var(--red-ui-node-background-placeholder);
    opacity: 0.5;
    stroke-width: 2;
}
.red-ui-flow-node-icon-group {
    text {
        @include mixins.disable-selection;
    }
    .fa-lg {
        @include mixins.disable-selection;
        stroke: none;
        fill: var(--red-ui-node-icon-color);
        text-anchor: middle;
        font-family: FontAwesome;
    }
}
.red-ui-flow-node-icon-shade {
    stroke: none;
    fill: var(--red-ui-node-icon-background-color-fill);
    fill-opacity: var(--red-ui-node-icon-background-color-opacity);
}
.red-ui-flow-node-icon-shade-border {
    stroke-opacity: var(--red-ui-node-icon-border-color-opacity);
    stroke: var(--red-ui-node-icon-border-color);
    stroke-width: 1;
}

.red-ui-flow-node-button {
    fill: inherit;
    &.red-ui-flow-node-button-disabled {
        opacity: 0.4;
        .red-ui-flow-node-button-button {
            cursor: default;
        }
    }
    &.red-ui-flow-node-button-stopped {
        opacity: 0.4;
        .red-ui-flow-node-button-button {
            cursor: default;
            pointer-events: none;
        }
    }
}
.red-ui-flow-node-button-button {
    cursor: pointer;
}
.red-ui-flow-node-button-background {
    fill: var(--red-ui-node-background-placeholder);
}

.red-ui-flow-port {
    stroke: var(--red-ui-node-border);
    stroke-width: 1;
    fill: var(--red-ui-node-port-background);
    cursor: crosshair;
}

.red-ui-flow-node-error {
    fill: var(--red-ui-node-status-error-background);
    stroke: var(--red-ui-node-status-error-border);
    stroke-width:1px;
    cursor: default;
    stroke-linejoin: round;
    stroke-linecap: round;
}
.red-ui-flow-node-changed {
    fill: var(--red-ui-node-status-changed-background);
    stroke: var(--red-ui-node-status-changed-border);
    cursor: default;
    stroke-width:1px;
    stroke-linejoin: round;
    stroke-linecap: round;
}

.red-ui-flow-node-docs {
    stroke-width: 1px;
    stroke-linejoin: round;
    stroke-linecap: round;
    stroke: var(--red-ui-node-border);
    fill: none;
    cursor: pointer;
    rect {
        fill: white;
    }
}

g.red-ui-flow-node-selected {
    .red-ui-workspace-select-mode & {
        opacity: 1;
    }
    .red-ui-flow-node,.red-ui-flow-subflow-port {
        stroke-width: 2;
        stroke: var(--red-ui-node-selected-color) !important;
    }
}
.red-ui-flow-node-highlighted {
    border-color: var(--red-ui-node-selected-color) !important;
    border-style: dashed !important;
    stroke: var(--red-ui-node-selected-color);
    stroke-width: 3;
    stroke-dasharray: 8, 4;
}

.red-ui-flow-subflow .red-ui-flow-node {
}

.red-ui-workspace-disabled {
    .red-ui-flow-node {
        stroke-dasharray: 8, 3;
        fill-opacity: 0.5;
    }
    .red-ui-flow-link-line {
        stroke-dasharray: 10,8 !important;
        stroke-width: 2 !important;
        stroke: var(--red-ui-link-disabled-color);
    }
    .red-ui-flow-port {
        fill-opacity: 1;
        stroke-dasharray: none;
    }
    .red-ui-flow-group, .red-ui-flow-group-body {
        stroke-dasharray: 8, 3;
    }
}
.red-ui-flow-node-disabled {
    &.red-ui-flow-node, .red-ui-flow-node {
        stroke-dasharray: 8, 3;
        fill-opacity: 0.5;
    }
    &.red-ui-flow-link-line {
        stroke-dasharray: 10,8 !important;
        stroke-width: 2 !important;
        stroke: var(--red-ui-link-disabled-color);
    }
    .red-ui-flow-port {
        fill-opacity: 1;
        stroke-dasharray: none;
    }
}
@each $current-color in red green yellow blue grey gray {
    .red-ui-flow-node-status-dot-#{""+$current-color} {
        fill: var(--red-ui-node-status-colors-#{"" + $current-color});
        stroke: var(--red-ui-node-status-colors-#{"" + $current-color});
    }
    .red-ui-flow-node-status-ring-#{""+$current-color} {
        fill: var(--red-ui-view-background);
        stroke: var(--red-ui-node-status-colors-#{"" + $current-color});
    }
}
.red-ui-flow-node-status-background {
    stroke: none;
    fill: var(--red-ui-view-background);
    fill-opacity: 0.9;
}
.red-ui-flow-node-status-label {
    @include mixins.disable-selection;
    stroke-width: 0;
    fill: var(--red-ui-secondary-text-color);
    font-size:9pt;
    text-anchor:start;
}

#red-ui-workspace:not(.red-ui-workspace-locked) {
    .red-ui-flow-port-hovered {
        stroke: var(--red-ui-port-selected-color);
        fill:  var(--red-ui-port-selected-color);
    }
}

.red-ui-flow-subflow-port {
    fill: var(--red-ui-node-background-placeholder);
    stroke: var(--red-ui-node-border);
}

.red-ui-flow-drag-line {
    stroke: var(--red-ui-node-selected-color) !important;
    stroke-width: 3;
    fill: none;
    pointer-events: none;
}

.red-ui-flow-link-line {
    stroke: var(--red-ui-link-color);
    stroke-width: 3;
    fill: none;
    pointer-events: none;
}
.red-ui-flow-link-link {
    stroke-width: 2;
    stroke: var(--red-ui-link-link-color);
    fill: none;
    stroke-dasharray: 25,4;
}
.red-ui-flow-link-off-flow {
    stroke-width: 2;
}

.red-ui-flow-link-port {
    fill: var(--red-ui-node-link-port-background);
    stroke: var(--red-ui-link-link-color);
    stroke-width: 1;
}
.red-ui-flow-link-group-active .red-ui-flow-link-port {
    stroke: var(--red-ui-link-link-active-color);
}
.red-ui-flow-link-group:hover {
    cursor: pointer;
}

.red-ui-flow-link-outline {
    stroke: var(--red-ui-view-background);
    stroke-opacity: 0.4;
    stroke-width: 5;
    cursor: crosshair;
    fill: none;
    pointer-events: none;
}
.red-ui-flow-link-background {
    stroke: var(--red-ui-view-background);
    opacity: 0;
    stroke-width: 20;
    cursor: crosshair;
    fill: none;
}
.red-ui-flow-link-splice > .red-ui-flow-link-line {
    stroke-dasharray: 15,8;
}

g.red-ui-flow-link-selected path.red-ui-flow-link-line {
    stroke: var(--red-ui-node-selected-color);
}

g.red-ui-flow-link-ghost path.red-ui-flow-link-line {
    stroke: var(--red-ui-node-border-placeholder);
    stroke-width: 2;
    stroke-dasharray: 10, 4;
}

g.red-ui-flow-link-unknown path.red-ui-flow-link-line {
    stroke: var(--red-ui-link-unknown-color);
    stroke-width: 2;
    stroke-dasharray: 10, 4;
}

// @keyframes *must* be on multiple lines so build-custom-theme can filter them out
@keyframes red-ui-flow-port-tooltip-fadeIn {
    from { opacity:0; } to { opacity:1; }
}

.red-ui-flow-port-tooltip {
    opacity:0;
    animation: 0.1s ease-in 0s 1 normal forwards red-ui-flow-port-tooltip-fadeIn;
    pointer-events: none;

    path:first-child {
        fill: var(--red-ui-popover-background);
        stroke: var(--red-ui-popover-background);
        stroke-width: 1;
    }
}
.red-ui-flow-port-tooltip-label {
    stroke-width: 0;
    fill: var(--red-ui-popover-color);
    font-family: var(--red-ui-primary-font);
    font-size: 12px;
    pointer-events: none;
    -webkit-touch-callout: none;
    white-space: pre;
    @include mixins.disable-selection;
}
.red-ui-flow-junction-dragging {
    .red-ui-flow-junction-background {
        background: red !important
    }
}
.red-ui-flow-junction:not(.red-ui-flow-junction-dragging):hover {
    .red-ui-flow-junction-background {
        transform: scale(1.4);
        stroke-width: 0.6;
    }
    .red-ui-flow-junction-port {
        opacity: 1;
        pointer-events: auto;
    }
    .red-ui-flow-junction-port-input {
        transform: translate(-10px,0)
    }
    .red-ui-flow-junction-port-output {
        transform: translate(10px,0)
    }
}
.red-ui-flow-junction-port {
    stroke: var(--red-ui-node-border);
    stroke-width: 1;
    fill: var(--red-ui-node-port-background);
    cursor: crosshair;
    transition: transform 0.1s;
    opacity: 0;
    pointer-events: none;
}
.red-ui-flow-junction-background {
    stroke: var(--red-ui-node-border);
    stroke-width: 1;
    fill: var(--red-ui-node-port-background);
    cursor: crosshair;
    transform: scale(1);
    transition: transform 0.1s;
    &:hover {

    }
}
.red-ui-flow-junction-hovered {
    stroke: var(--red-ui-port-selected-color);
    fill:  var(--red-ui-port-selected-color);
}
.red-ui-flow-junction.selected .red-ui-flow-junction-background {
    stroke: var(--red-ui-port-selected-color);
    // fill:  var(--red-ui-port-selected-color);
}
