rulechain.scss

512 lines | 9.324 kB Blame History Raw Download
/**
 * Copyright © 2016-2018 The Thingsboard Authors
 *
 * 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.
 */

.tb-rulechain {
  .tb-fullscreen-button-style {
    z-index: 1;
  }
  section.tb-header-buttons.tb-library-open {
    pointer-events: none;
    position: absolute;
    left: 0px;
    top: 0px;
    z-index: 1;
    .md-button.tb-btn-open-library {
      left: 0px;
      top: 0px;
      line-height: 36px;
      width: 36px;
      height: 36px;
      margin: 4px 0 0 4px;
      opacity: 0.5;
    }
  }
  .tb-rulechain-library {
    width: 250px;
    min-width: 250px;
    z-index: 1;
    md-toolbar {
      min-height: 48px;
      height: 48px;
      .md-toolbar-tools>.md-button:last-child {
        margin-right: 0px;
      }
      .md-toolbar-tools {
        font-size: 14px;
        padding: 0px 6px;
        height: 48px;
        .md-button.md-icon-button {
          margin: 0px;
          &.tb-small {
            height: 32px;
            min-height: 32px;
            line-height: 20px;
            padding: 6px;
            width: 32px;
            md-icon {
              line-height: 20px;
              font-size: 20px;
              height: 20px;
              width: 20px;
              min-height: 20px;
              min-width: 20px;
            }
          }
        }
      }
    }
    .tb-rulechain-library-panel-group {
      overflow-y: auto;
      overflow-x: hidden;
      .tb-panel-title {
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
        min-width: 150px;
      }
      .fc-canvas {
        background: #f9f9f9;
      }
      md-icon.md-expansion-panel-icon {
        margin-right: 0px;
      }
      md-expansion-panel-collapsed, .md-expansion-panel-header-container {
        background: #e6e6e6;
        border-color: #909090;
        position: static;
      }
      md-expansion-panel {
        &.md-open {
          margin-top: 0;
          margin-bottom: 0;
        }
      }
      md-expansion-panel-content {
        padding: 0px;
      }
    }
  }
  .tb-rulechain-graph {
    z-index: 0;
    overflow: auto;
  }
}

#tb-rule-chain-context-menu {
  padding-top: 0px;
  border-radius: 8px;
  max-height: 404px;
  .tb-context-menu-header {
    padding: 8px 5px 5px;
    font-size: 14px;
    display: flex;
    flex-direction: row;
    height: 36px;
    min-height: 36px;
    &.tb-rulechain {
      background-color: #aac7e4;
    }
    &.tb-link {
      background-color: #aac7e4;
    }
    md-icon {
      padding-left: 2px;
      padding-right: 10px;
    }
    .tb-context-menu-title {
      font-weight: 500;
    }
    .tb-context-menu-subtitle {
      font-size: 12px;
    }
  }
}

.fc-canvas {
  min-width: 100%;
  min-height: 100%;
  outline: none;
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  svg {
    display: block;
  }
}

.tb-rule-node, #tb-rule-chain-context-menu .tb-context-menu-header {
  &.tb-filter-type {
    background-color: #f1e861;
  }
  &.tb-enrichment-type {
    background-color: #cdf14e;
  }
  &.tb-transformation-type {
    background-color: #79cef1;
  }
  &.tb-action-type {
    background-color: #f1928f;
  }
  &.tb-external-type {
    background-color: #fbc766;
  }
  &.tb-rule-chain-type {
    background-color: #d6c4f1;
  }
}

.tb-rule-node {
  display: flex;
  flex-direction: row;
  min-width: 150px;
  max-width: 150px;
  min-height: 32px;
  max-height: 32px;
  height: 32px;
  padding: 5px 10px;
  border-radius: 5px;
  background-color: #F15B26;
  pointer-events: none;
  color: #333;
  border: solid 1px #777;
  font-size: 12px;
  line-height: 16px;
  &.tb-rule-node-highlighted:not(.tb-rule-node-invalid) {
    box-shadow: 0 0 10px 6px #51cbee;
    .tb-node-title {
      text-decoration: underline;
      font-weight: bold;
    }
  }
  &.tb-rule-node-invalid {
    box-shadow: 0 0 10px 6px #ff5c50;
  }
  &.tb-input-type {
    background-color: #a3eaa9;
    user-select: none;
  }
  md-icon {
    font-size: 20px;
    width: 20px;
    height: 20px;
    min-height: 20px;
    min-width: 20px;
    padding-right: 4px;
  }
  .tb-node-type {

  }
  .tb-node-title {
    font-weight: 500;
  }
  .tb-node-type, .tb-node-title {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
  }
}

.fc-node {
  z-index: 1;
  outline: none;
  border-radius: 8px;
  &.fc-dragging {
    z-index: 10;
  }
  p {
    padding: 0 15px;
    text-align: center;
  }
  .fc-node-overlay {
    position: absolute;
    pointer-events: none;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    background-color: #000;
    opacity: 0;
    border-radius: 5px;
  }
  &.fc-hover {
    .fc-node-overlay {
      opacity: 0.25;
    }
  }
  &.fc-selected {
    .fc-node-overlay {
      opacity: 0.25;
    }
  }
  &.fc-selected {
    &:not(.fc-edit) {
      border: solid 3px red;
      margin: -3px;
    }
  }
}

.fc-leftConnectors, .fc-rightConnectors {
  position: absolute;
  top: 0;
  height: 100%;

  display: flex;
  flex-direction: column;

  z-index: 0;
  .fc-magnet {
    align-items: center;
  }
}

.fc-leftConnectors {
  left: -20px;
}

.fc-rightConnectors {
  right: -20px;
}

.fc-magnet {
  display: flex;
  flex-grow: 1;
  height: 60px;
  justify-content: center;
}

.fc-connector {
  width: 14px;
  height: 14px;
  border: 1px solid #333;
  margin: 10px;
  border-radius: 5px;
  background-color: #ccc;
  pointer-events: all;
}

.fc-connector.fc-hover {
  background-color: #000;
}

.fc-arrow-marker {
  polygon {
    stroke: gray;
    fill: gray;
  }
}

.fc-arrow-marker-selected {
  polygon {
    stroke: red;
    fill: red;
  }
}

.fc-edge {
  outline: none;
  stroke: gray;
  stroke-width: 4;
  fill: transparent;
  transition: stroke-width .2s;
  &.fc-selected {
    stroke: red;
    stroke-width: 4;
    fill: transparent;
  }
  &.fc-active {
    animation: dash 3s linear infinite;
    stroke-dasharray: 20;
  }
  &.fc-hover {
    stroke: gray;
    stroke-width: 6;
    fill: transparent;
  }
  &.fc-dragging {
    pointer-events: none;
  }
}

.edge-endpoint {
  fill: gray;
}

.fc-nodedelete {
  display: none;
  font-size: 18px;
}

.fc-nodeedit {
  display: none;
  font-size: 15px;
}

.fc-edit {
  .fc-nodedelete, .fc-nodeedit {
    outline: none;
    display: block;
    position: absolute;
    border: solid 2px white;
    border-radius: 50%;
    font-weight: 600;
    line-height: 20px;
    height: 20px;
    padding-top: 2px;
    width: 22px;
    background: #f83e05;
    color: #fff;
    text-align: center;
    vertical-align: bottom;
    cursor: pointer;
  }

  .fc-nodeedit {
    top: -24px;
    right: 16px;
  }

  .fc-nodedelete {
    top: -24px;
    right: -13px;
  }

}

.fc-noselect {
  -webkit-touch-callout: none; /* iOS Safari */
  -webkit-user-select: none; /* Safari */
  -khtml-user-select: none; /* Konqueror HTML */
  -moz-user-select: none; /* Firefox */
  -ms-user-select: none; /* Internet Explorer/Edge */
  user-select: none; /* Non-prefixed version, currently
                                  supported by Chrome and Opera */
}

.fc-edge-label {
  position: absolute;
  transition: transform .2s;
//  opacity: 0.8;
  &.ng-leave {
    transition: 0s none;
  }
  &.fc-hover {
    transform: scale(1.25);
  }
  &.fc-selected {
    .fc-edge-label-text {
      span {
        border: solid red;
        color: #fff;
        font-weight: 600;
        background-color: red;
      }
    }
  }
  .fc-nodeedit {
    top: -30px;
    right: 14px;
  }
  .fc-nodedelete {
    top: -30px;
    right: -13px;
  }
  &:focus {
    outline: 0;
  }
}

.fc-edge-label-text {
  position: absolute;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  white-space: nowrap;
  text-align: center;
  font-size: 14px;
  font-weight: 600;
  span {
    cursor: default;
    border: solid 2px #003a79;
    border-radius: 10px;
    color: #003a79;
    background-color: #fff;
    padding: 3px 5px;
  }
}

.fc-select-rectangle {
  border: 2px dashed #5262ff;
  position: absolute;
  background: rgba(20,125,255,0.1);
  z-index: 2;
}

@keyframes dash {
  from {
    stroke-dashoffset: 500;
  }
}

.tb-rule-node-tooltip, .tb-rule-node-help {
  color: #333;
}

.tb-rule-node-tooltip {
  font-size: 14px;
  max-width: 300px;
  &.tb-lib-tooltip {
    width: 300px;
  }
}

.tb-rule-node-help {
  font-size: 16px;
}

.tb-rule-node-error-tooltip {
  font-size: 16px;
  color: #ea0d0d;
}

.tb-rule-node-tooltip, .tb-rule-node-error-tooltip, .tb-rule-node-help {
  #tb-node-content {
    .tb-node-title {
      font-weight: 600;
    }
    .tb-node-description {
      font-style: italic;
      color: #555;
    }
    .tb-node-details {
      padding-top: 10px;
      padding-bottom: 10px;
    }
    code {
      padding: 0px 3px 2px 3px;
      margin: 1px;
      color: #AD1625;
      white-space: nowrap;
      background-color: #f7f7f9;
      border: 1px solid #e1e1e8;
      border-radius: 2px;
      font-size: 12px;
    }
  }
}