schangxiang@126.com
2025-05-06 358e8f30447f8ba05af42b66d45ddf1a93878b6d
HIAWms/web/src/components/vue3-context-menu/ContextMenu.scss
对比新文件
@@ -0,0 +1,518 @@
//CSS Vars
:root {
  //Backgroud
  --mx-menu-backgroud: #fff;
  --mx-menu-hover-backgroud: #f1f1f1;
  --mx-menu-active-backgroud: #dfdfdf;
  --mx-menu-open-backgroud: #f1f1f1;
  --mx-menu-open-hover-backgroud: #f1f1f1;
  --mx-menu-divider: #f0f0f0;
  //Text
  --mx-menu-text: #2e2e2e;
  --mx-menu-hover-text: #2e2e2e;
  --mx-menu-active-text: #2e2e2e;
  --mx-menu-open-text: #2e2e2e;
  --mx-menu-open-hover-text: #2e2e2e;
  --mx-menu-disabled-text: #c9c8c8;
  --mx-menu-icon-size: 16px;
  //Shadow
  --mx-menu-shadow-color: rgba(0, 0, 0, 0.1);
  --mx-menu-backgroud-radius: 10px;
  //Shortcut badge
  --mx-menu-shortcut-backgroud: #ebebeb;
  --mx-menu-shortcut-backgroud-hover:#ebebeb;
  --mx-menu-shortcut-backgroud-active:#ebebeb;
  --mx-menu-shortcut-backgroud-open:#ebebeb;
  --mx-menu-shortcut-backgroud-disabled:#fdfdfd;
  --mx-menu-shortcut-text: #424242;
  --mx-menu-shortcut-text-hover: #424242;
  --mx-menu-shortcut-text-active: #424242;
  --mx-menu-shortcut-text-open: #424242;
  --mx-menu-shortcut-text-disabled: #a5a5a5;
  //Focus border color
  --mx-menu-focus-color: #0085f1;
  //Icon placeholder width
  --mx-menu-placeholder-width: 24px;
}
//Base hosts
.mx-context-menu {
  pointer-events: all;
  display: inline-block;
  overflow: visible;
  position: absolute;
  background-color: var(--mx-menu-backgroud);
  border-radius: var(--mx-menu-backgroud-radius);
  padding: 12px 0;
  box-shadow: 0px 10px 40px 10px var(--mx-menu-shadow-color);
  opacity: 1;
  transition: opacity 0.2s ease-in-out;
}
.mx-context-menu-items {
  position: relative;
  overflow: visible;
}
.mx-context-menu-scroll {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 1px;
  pointer-events: none;
}
//Up down button
.mx-context-menu-updown {
  pointer-events: all;
  position: absolute;
  left: 0;
  right: 0;
  height: 15px;
  border-radius: 10px;
  background-color: var(--mx-menu-backgroud);
  user-select: none;
  cursor: pointer;
  &.placeholder {
    position: relative;
    cursor: default;
  }
  &.disabled {
    color: var(--mx-menu-disabled-text);
    cursor: default;
    .mx-right-arrow  {
      fill: var(--mx-menu-disabled-text);
    }
  }
  &:hover:not(.disabled) {
    background-color: var(--mx-menu-hover-backgroud);
  }
  &:active {
    background-color: var(--mx-menu-active-backgroud);
  }
  &.up {
    top: 0px;
    .mx-right-arrow {
      transform: translateX(-50%) rotate(270deg);
    }
  }
  &.down {
    bottom: -1px;
    .mx-right-arrow {
      transform: translateX(-50%) rotate(90deg);
    }
  }
  .mx-right-arrow {
    display: inline-block;
    position: absolute;
    height: 12px;
    left: 50%;
    top: 0px;
    padding: 0;
  }
}
//Item
.mx-context-menu-item {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  align-items: center;
  position: relative;
  padding: 6px 15px;
  user-select: none;
  overflow: visible;
  white-space: nowrap;
  text-overflow: ellipsis;
  color: var(--mx-menu-text);
  .mx-right-arrow, .mx-checked-mark {
    fill: var(--mx-menu-text);
  }
  //Mouse hover
  &:hover {
    background-color: var(--mx-menu-hover-backgroud);
    color: var(--mx-menu-hover-text);
    .mx-right-arrow, .mx-checked-mark {
      fill: var(--mx-menu-hover-text);
    }
    .mx-shortcut {
      background-color: var(--mx-menu-shortcut-backgroud-hover);
      color: var(--mx-menu-shortcut-text-hover);
    }
  }
  //Mouse press
  &:active {
    background-color: var(--mx-menu-active-backgroud);
    color: var(--mx-menu-active-text);
    .mx-right-arrow, .mx-checked-mark {
      fill: var(--mx-menu-active-text);
    }
    .mx-shortcut {
      background-color: var(--mx-menu-shortcut-backgroud-active);
      color: var(--mx-menu-shortcut-text-active);
    }
  }
  //With submenu open state
  &.open {
    background-color: var(--mx-menu-open-backgroud);
    color: var(--mx-menu-open-text);
    &:hover {
      background-color: var(--mx-menu-open-hover-backgroud);
      color: var(--mx-menu-open-hover-text);
    }
    .mx-right-arrow, .mx-checked-mark {
      fill: var(--mx-menu-open-text);
    }
    .mx-shortcut {
      background-color: var(--mx-menu-shortcut-backgroud-open);
      color: var(--mx-menu-shortcut-text-open);
    }
  }
  //Focus by keyboard
  &.keyboard-focus {
    background-color: var(--mx-menu-active-backgroud);
    outline: 2px solid var(--mx-menu-focus-color);
  }
  //disabled
  &.disabled {
    color: var(--mx-menu-disabled-text);
    cursor: not-allowed;
    &:hover, &:active {
      background-color: transparent;
    }
    .mx-right-arrow, .mx-checked-mark {
      fill: var(--mx-menu-disabled-text);
    }
    .mx-shortcut {
      background-color: var(--mx-menu-shortcut-backgroud-disabled);
      color: var(--mx-menu-shortcut-text-second);
    }
  }
  .mx-item-row {
    display: flex;
    flex-direction: row;
    align-items: center;
    max-width: 100%;
  }
  .mx-icon-placeholder {
    position: relative;
    display: flex;
    flex-direction: row;
    align-items: center;
    height: auto;
    overflow: hidden;
    &.preserve-width {
      width: var(--mx-menu-placeholder-width);
    }
  }
  .icon  {
    display: inline-block;
    font-size: var(--mx-menu-icon-size);
    &.svg {
      width: var(--mx-menu-icon-size);
      height: var(--mx-menu-icon-size);
    }
  }
  .label {
    font-size: 14px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    padding-right: 16px;
  }
}
.mx-context-menu-item-wrapper {
  position: relative;
}
//Sperator
.mx-context-menu-item-sperator  {
  display: block;
  padding: 5px 0;
  background-color: var(--mx-menu-backgroud);
  &:after {
    display: block;
    content: '';
    background-color: var(--mx-menu-divider);
    height: 1px;
  }
}
//Right arrow
.mx-right-arrow  {
  width: 14px;
  height: 14px;
}
//Check mark
.mx-checked-mark {
  width: var(--mx-menu-icon-size);
  height: var(--mx-menu-icon-size);
}
//Shortcut
.mx-shortcut {
  position: relative;
  justify-self: flex-end;
  font-size: 11.5px;
  padding: 2px 4px;
  background-color: var(--mx-menu-shortcut-backgroud);
  color: var(--mx-menu-shortcut-text);
}
//Dark theme
//===================================================
.mx-menu-bar.dark,
.mx-context-menu.dark {
  //CSS Vars
  //Backgroud
  --mx-menu-backgroud: #303031;
  --mx-menu-hover-backgroud: #636363;
  --mx-menu-active-backgroud: #555555;
  --mx-menu-open-backgroud: #636363;
  --mx-menu-open-hover-backgroud: #636363;
  --mx-menu-divider: #464646;
  //Text
  --mx-menu-text: #ffffff;
  --mx-menu-hover-text: #ffffff;
  --mx-menu-active-text: #ffffff;
  --mx-menu-open-text: #ffffff;
  --mx-menu-open-hover-text: #ffffff;
  --mx-menu-disabled-text: #9c9c9c;
  //Shadow
  --mx-menu-shadow-color: rgba(51, 51, 51, 0.2);
  //Shortcut badge
  --mx-menu-shortcut-backgroud: #505050;
  --mx-menu-shortcut-backgroud-hover:#505050;
  --mx-menu-shortcut-backgroud-active:#505050;
  --mx-menu-shortcut-backgroud-open:#505050;
  --mx-menu-shortcut-backgroud-disabled:#444444;
  --mx-menu-shortcut-text: #f1f1f1;
  --mx-menu-shortcut-text-hover: #ffffff;
  --mx-menu-shortcut-text-active: #ffffff;
  --mx-menu-shortcut-text-open: #ffffff;
  --mx-menu-shortcut-text-disabled: #9d9d9d;
}
//Flat theme
//===================================================
.mx-menu-bar.flat,
.mx-context-menu.flat {
  border-radius: 0;
  padding: 7px 0;
  box-shadow: 0px 1px 2px 1px var(--mx-menu-shadow-color);
  .mx-context-menu-item {
    padding: 3px 12px;
  }
}
//win10 theme
//===================================================
.mx-menu-bar.win10,
.mx-context-menu.win10 {
  & {
    --mx-menu-backgroud: #eeeeee;
    --mx-menu-hover-backgroud: #d8d8d8;
    --mx-menu-active-backgroud: #dfdfdf;
    --mx-menu-open-backgroud: #f1f1f1;
    --mx-menu-open-hover-backgroud: #d8d8d8;
    --mx-menu-divider: #aaaaaa;
    --mx-menu-border-color: #b1b1b1;
    --mx-menu-shortcut-backgroud: transparent;
    --mx-menu-shortcut-backgroud-hover: transparent;
    --mx-menu-shortcut-backgroud-active: transparent;
    --mx-menu-shortcut-backgroud-open: transparent;
    --mx-menu-shortcut-backgroud-disabled:transparent;
    --mx-menu-shortcut-text: #272727;
    --mx-menu-shortcut-text-hover: #272727;
    --mx-menu-shortcut-text-active: #272727;
    --mx-menu-shortcut-text-open: #272727;
    --mx-menu-shortcut-text-disabled: #6b6b6b;
    .mx-context-menu-item {
      padding: 2px 4px;
      margin: 0 4px;
    }
    .mx-context-menu-item-sperator {
      margin: 0 4px;
    }
  }
  &.dark {
    --mx-menu-backgroud: #303031;
    --mx-menu-hover-backgroud: #636363;
    --mx-menu-active-backgroud: #555555;
    --mx-menu-open-backgroud: #636363;
    --mx-menu-open-hover-backgroud: #636363;
    --mx-menu-divider: #808080;
    --mx-menu-border-color: #656565;
    --mx-menu-shortcut-backgroud: #505050;
    --mx-menu-shortcut-backgroud-hover:#505050;
    --mx-menu-shortcut-backgroud-active:#505050;
    --mx-menu-shortcut-backgroud-open:#505050;
    --mx-menu-shortcut-backgroud-disabled:#444444;
    --mx-menu-shortcut-text: #f1f1f1;
    --mx-menu-shortcut-text-hover: #ffffff;
    --mx-menu-shortcut-text-active: #ffffff;
    --mx-menu-shortcut-text-open: #ffffff;
    --mx-menu-shortcut-text-disabled: #9d9d9d;
    padding: 8px 0;
    .mx-context-menu-item {
      padding: 6px 12px;
      margin: 0;
    }
    .mx-context-menu-item-sperator {
      margin: 0 7px;
    }
  }
  border-radius: 0;
  padding: 8px 0;
  border: 1px solid var(--mx-menu-border-color);
  box-shadow: 2px 2px 1px 0 var(--mx-menu-shadow-color);
}
//Mac theme
//===================================================
.mx-menu-bar.mac,
.mx-context-menu.mac {
  & {
    //Backgroud
    --mx-menu-backgroud: #ececec;
    --mx-menu-hover-backgroud: #0165e1;
    --mx-menu-active-backgroud: #0165e1;
    --mx-menu-open-backgroud: #858585;
    --mx-menu-open-hover-backgroud: #0165e1;
    --mx-menu-divider: #d2d2d2;
    //Text
    --mx-menu-text: #232323;
    --mx-menu-hover-text: #fff;
    --mx-menu-active-text: #fff;
    --mx-menu-open-text: #fff;
    --mx-menu-open-hover-text: #fff;
    --mx-menu-disabled-text: #bbbbbb;
    //Shadow
    --mx-menu-shadow-color: rgba(0, 0, 0, 0.1);
    --mx-menu-backgroud-radius: 10px;
    //Shortcut badge
    --mx-menu-shortcut-backgroud: transparent;
    --mx-menu-shortcut-backgroud-hover:transparent;
    --mx-menu-shortcut-backgroud-active:transparent;
    --mx-menu-shortcut-backgroud-open:transparent;
    --mx-menu-shortcut-backgroud-disabled:transparent;
    --mx-menu-shortcut-text: #424242;
    --mx-menu-shortcut-text-hover: #fff;
    --mx-menu-shortcut-text-active: #fff;
    --mx-menu-shortcut-text-open: #fff;
    --mx-menu-shortcut-text-disabled: #a5a5a5;
    //Focus border color
    --mx-menu-focus-color: transparent;
    --mx-menu-border-color: #bbbbbb;
  }
  &.dark {
    //Backgroud
    --mx-menu-backgroud: #333333;
    --mx-menu-hover-backgroud: #0153d2;
    --mx-menu-active-backgroud: #0153d2;
    --mx-menu-open-hover-backgroud: #0153d2;
    --mx-menu-open-backgroud: #414346;
    --mx-menu-divider: #575757;
    //Text
    --mx-menu-text: #dcdcdc;
    --mx-menu-hover-text: #fff;
    --mx-menu-active-text: #fff;
    --mx-menu-open-text: #fff;
    --mx-menu-open-hover-text: #fff;
    --mx-menu-disabled-text: #6a6a6a;
    //Shadow
    --mx-menu-shadow-color: rgba(0, 0, 0, 0.1);
    --mx-menu-backgroud-radius: 10px;
    //Shortcut badge
    --mx-menu-shortcut-backgroud: transparent;
    --mx-menu-shortcut-backgroud-hover:transparent;
    --mx-menu-shortcut-backgroud-active:transparent;
    --mx-menu-shortcut-backgroud-open:transparent;
    --mx-menu-shortcut-backgroud-disabled:transparent;
    --mx-menu-shortcut-text: #dadada;
    --mx-menu-shortcut-text-hover: #fff;
    --mx-menu-shortcut-text-active: #fff;
    --mx-menu-shortcut-text-open: #fff;
    --mx-menu-shortcut-text-disabled: #6a6a6a;
    //Focus border color
    --mx-menu-focus-color: transparent;
    --mx-menu-border-color: #222;
  }
  padding: 8px 0;
  box-shadow: 0px 5px 7px 1px var(--mx-menu-shadow-color);
  border: 1px solid var(--mx-menu-border-color);
  .mx-context-menu-item {
    border-radius: 5px;
    margin: 0 6px;
    padding: 3px 6px;
    //Focus by keyboard
    &.keyboard-focus {
      background-color: var(--mx-menu-active-backgroud);
      color: var(--mx-menu-active-text);
      outline: none;
      .mx-right-arrow, .mx-checked-mark {
        fill: var(--mx-menu-active-text);
      }
      .mx-shortcut {
        background-color: var(--mx-menu-shortcut-backgroud-active);
        color: var(--mx-menu-shortcut-text-active);
      }
    }
  }
  .mx-context-menu-item-sperator {
    margin: 0 12px;
  }
}