From ab4478c9f4aab3e20fe3b5e31e6dcd08f12df5f6 Mon Sep 17 00:00:00 2001 From: tanjinzhou <415800467@qq.com> Date: Thu, 13 May 2021 18:30:55 +0800 Subject: [PATCH] feat: new-menu --- components/new-menu/index.tsx | 0 components/new-menu/src/Divider.tsx | 13 + components/new-menu/src/ItemGroup.tsx | 16 + components/new-menu/src/Menu.tsx | 10 + components/new-menu/src/MenuItem.tsx | 10 + components/new-menu/src/SubMenu.tsx | 10 + components/new-menu/style/dark.less | 156 ++++++ components/new-menu/style/index.less | 651 ++++++++++++++++++++++++++ components/new-menu/style/index.tsx | 6 + components/new-menu/style/rtl.less | 164 +++++++ components/new-menu/style/status.less | 47 ++ v2-doc | 2 +- 12 files changed, 1084 insertions(+), 1 deletion(-) create mode 100644 components/new-menu/index.tsx create mode 100644 components/new-menu/src/Divider.tsx create mode 100644 components/new-menu/src/ItemGroup.tsx create mode 100644 components/new-menu/src/Menu.tsx create mode 100644 components/new-menu/src/MenuItem.tsx create mode 100644 components/new-menu/src/SubMenu.tsx create mode 100644 components/new-menu/style/dark.less create mode 100644 components/new-menu/style/index.less create mode 100644 components/new-menu/style/index.tsx create mode 100644 components/new-menu/style/rtl.less create mode 100644 components/new-menu/style/status.less diff --git a/components/new-menu/index.tsx b/components/new-menu/index.tsx new file mode 100644 index 000000000..e69de29bb diff --git a/components/new-menu/src/Divider.tsx b/components/new-menu/src/Divider.tsx new file mode 100644 index 000000000..8e9d99ad5 --- /dev/null +++ b/components/new-menu/src/Divider.tsx @@ -0,0 +1,13 @@ +import { defineComponent } from 'vue'; + +export default defineComponent({ + name: 'Divider', + props: { + prefixCls: String, + }, + setup(props) { + return () => { + return
  • ; + }; + }, +}); diff --git a/components/new-menu/src/ItemGroup.tsx b/components/new-menu/src/ItemGroup.tsx new file mode 100644 index 000000000..191c16447 --- /dev/null +++ b/components/new-menu/src/ItemGroup.tsx @@ -0,0 +1,16 @@ +import { getPropsSlot } from '../../_util/props-util'; +import { defineComponent } from 'vue'; + +export default defineComponent({ + name: 'AMenuItemGroup', + setup(props, { slots }) { + return () => { + return ( +
  • + {getPropsSlot(slots, props, 'title')} + +
  • + ); + }; + }, +}); diff --git a/components/new-menu/src/Menu.tsx b/components/new-menu/src/Menu.tsx new file mode 100644 index 000000000..0bf679ac7 --- /dev/null +++ b/components/new-menu/src/Menu.tsx @@ -0,0 +1,10 @@ +import { defineComponent } from 'vue'; + +export default defineComponent({ + name: 'AMenu', + setup(props, { slots }) { + return () => { + return
    {slots.default?.()}
    ; + }; + }, +}); diff --git a/components/new-menu/src/MenuItem.tsx b/components/new-menu/src/MenuItem.tsx new file mode 100644 index 000000000..20268d09a --- /dev/null +++ b/components/new-menu/src/MenuItem.tsx @@ -0,0 +1,10 @@ +import { defineComponent } from 'vue'; + +export default defineComponent({ + name: 'AMenuItem', + setup(props, { slots }) { + return () => { + return
  • {slots.default?.()}
  • ; + }; + }, +}); diff --git a/components/new-menu/src/SubMenu.tsx b/components/new-menu/src/SubMenu.tsx new file mode 100644 index 000000000..b88004338 --- /dev/null +++ b/components/new-menu/src/SubMenu.tsx @@ -0,0 +1,10 @@ +import { defineComponent } from 'vue'; + +export default defineComponent({ + name: 'ASubMenu', + setup(props, { slots }) { + return () => { + return ; + }; + }, +}); diff --git a/components/new-menu/style/dark.less b/components/new-menu/style/dark.less new file mode 100644 index 000000000..1ad2abf99 --- /dev/null +++ b/components/new-menu/style/dark.less @@ -0,0 +1,156 @@ +.@{menu-prefix-cls} { + // dark theme + &&-dark, + &-dark &-sub, + &&-dark &-sub { + color: @menu-dark-color; + background: @menu-dark-bg; + .@{menu-prefix-cls}-submenu-title .@{menu-prefix-cls}-submenu-arrow { + opacity: 0.45; + transition: all 0.3s; + &::after, + &::before { + background: @menu-dark-arrow-color; + } + } + } + + &-dark&-submenu-popup { + background: transparent; + } + + &-dark &-inline&-sub { + background: @menu-dark-inline-submenu-bg; + } + + &-dark&-horizontal { + border-bottom: 0; + } + + &-dark&-horizontal > &-item, + &-dark&-horizontal > &-submenu { + top: 0; + margin-top: 0; + padding: @menu-item-padding; + border-color: @menu-dark-bg; + border-bottom: 0; + } + + &-dark&-horizontal > &-item:hover { + background-color: @menu-dark-item-active-bg; + } + + &-dark&-horizontal > &-item > a::before { + bottom: 0; + } + + &-dark &-item, + &-dark &-item-group-title, + &-dark &-item > a, + &-dark &-item > span > a { + color: @menu-dark-color; + } + + &-dark&-inline, + &-dark&-vertical, + &-dark&-vertical-left, + &-dark&-vertical-right { + border-right: 0; + } + + &-dark&-inline &-item, + &-dark&-vertical &-item, + &-dark&-vertical-left &-item, + &-dark&-vertical-right &-item { + left: 0; + margin-left: 0; + border-right: 0; + &::after { + border-right: 0; + } + } + + &-dark&-inline &-item, + &-dark&-inline &-submenu-title { + width: 100%; + } + + &-dark &-item:hover, + &-dark &-item-active, + &-dark &-submenu-active, + &-dark &-submenu-open, + &-dark &-submenu-selected, + &-dark &-submenu-title:hover { + color: @menu-dark-highlight-color; + background-color: transparent; + > a, + > span > a { + color: @menu-dark-highlight-color; + } + > .@{menu-prefix-cls}-submenu-title, + > .@{menu-prefix-cls}-submenu-title:hover { + > .@{menu-prefix-cls}-submenu-arrow { + opacity: 1; + &::after, + &::before { + background: @menu-dark-highlight-color; + } + } + } + } + &-dark &-item:hover { + background-color: @menu-dark-item-hover-bg; + } + + &-dark&-dark:not(&-horizontal) &-item-selected { + background-color: @menu-dark-item-active-bg; + } + + &-dark &-item-selected { + color: @menu-dark-highlight-color; + border-right: 0; + &::after { + border-right: 0; + } + > a, + > span > a, + > a:hover, + > span > a:hover { + color: @menu-dark-highlight-color; + } + + .@{menu-prefix-cls}-item-icon, + .@{iconfont-css-prefix} { + color: @menu-dark-selected-item-icon-color; + + + span { + color: @menu-dark-selected-item-text-color; + } + } + } + + &&-dark &-item-selected, + &-submenu-popup&-dark &-item-selected { + background-color: @menu-dark-item-active-bg; + } + + // Disabled state sets text to dark gray and nukes hover/tab effects + &-dark &-item-disabled, + &-dark &-submenu-disabled { + &, + > a, + > span > a { + color: @disabled-color-dark !important; + opacity: 0.8; + } + > .@{menu-prefix-cls}-submenu-title { + color: @disabled-color-dark !important; + > .@{menu-prefix-cls}-submenu-arrow { + &::before, + &::after { + background: @disabled-color-dark !important; + } + } + } + } +} diff --git a/components/new-menu/style/index.less b/components/new-menu/style/index.less new file mode 100644 index 000000000..b8956d2fc --- /dev/null +++ b/components/new-menu/style/index.less @@ -0,0 +1,651 @@ +@import '../../style/themes/index'; +@import '../../style/mixins/index'; +@import './status'; + +@menu-prefix-cls: ~'@{ant-prefix}-menu'; +@menu-animation-duration-normal: 0.15s; + +.accessibility-focus() { + box-shadow: 0 0 0 2px fade(@primary-color, 20%); +} + +// TODO: Should remove icon style compatible in v5 + +// default theme +.@{menu-prefix-cls} { + .reset-component(); + + margin-bottom: 0; + padding-left: 0; // Override default ul/ol + color: @menu-item-color; + font-size: @menu-item-font-size; + line-height: 0; // Fix display inline-block gap + text-align: left; + list-style: none; + background: @menu-bg; + outline: none; + box-shadow: @box-shadow-base; + transition: background @animation-duration-slow, + width @animation-duration-slow cubic-bezier(0.2, 0, 0, 1) 0s; + .clearfix(); + + &&-root:focus-visible { + .accessibility-focus(); + } + + ul, + ol { + margin: 0; + padding: 0; + list-style: none; + } + + &-hidden, + &-submenu-hidden { + display: none; + } + + &-item-group-title { + height: @menu-item-group-height; + padding: 8px 16px; + color: @menu-item-group-title-color; + font-size: @menu-item-group-title-font-size; + line-height: @menu-item-group-height; + transition: all @animation-duration-slow; + } + + &-horizontal &-submenu { + transition: border-color @animation-duration-slow @ease-in-out, + background @animation-duration-slow @ease-in-out; + } + &-submenu, + &-submenu-inline { + transition: border-color @animation-duration-slow @ease-in-out, + background @animation-duration-slow @ease-in-out, + padding @menu-animation-duration-normal @ease-in-out; + } + + &-submenu-selected { + color: @menu-highlight-color; + } + + &-item:active, + &-submenu-title:active { + background: @menu-item-active-bg; + } + + &-submenu &-sub { + cursor: initial; + transition: background @animation-duration-slow @ease-in-out, + padding @animation-duration-slow @ease-in-out; + } + + &-item a { + color: @menu-item-color; + &:hover { + color: @menu-highlight-color; + } + &::before { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: transparent; + content: ''; + } + } + + // https://github.com/ant-design/ant-design/issues/19809 + &-item > .@{ant-prefix}-badge a { + color: @menu-item-color; + &:hover { + color: @menu-highlight-color; + } + } + + &-item-divider { + height: 1px; + overflow: hidden; + line-height: 0; + background-color: @border-color-split; + } + + &-item:hover, + &-item-active, + &:not(&-inline) &-submenu-open, + &-submenu-active, + &-submenu-title:hover { + color: @menu-highlight-color; + } + + &-horizontal &-item, + &-horizontal &-submenu { + margin-top: -1px; + } + + &-horizontal > &-item:hover, + &-horizontal > &-item-active, + &-horizontal > &-submenu &-submenu-title:hover { + background-color: transparent; + } + + &-item-selected { + color: @menu-highlight-color; + a, + a:hover { + color: @menu-highlight-color; + } + } + + &:not(&-horizontal) &-item-selected { + background-color: @menu-item-active-bg; + } + + &-inline, + &-vertical, + &-vertical-left { + border-right: @border-width-base @border-style-base @border-color-split; + } + + &-vertical-right { + border-left: @border-width-base @border-style-base @border-color-split; + } + + &-vertical&-sub, + &-vertical-left&-sub, + &-vertical-right&-sub { + min-width: 160px; + max-height: calc(100vh - 100px); + padding: 0; + overflow: hidden; + border-right: 0; + + // https://github.com/ant-design/ant-design/issues/22244 + // https://github.com/ant-design/ant-design/issues/26812 + &:not([class*='-active']) { + overflow-x: hidden; + overflow-y: auto; + } + + .@{menu-prefix-cls}-item { + left: 0; + margin-left: 0; + border-right: 0; + &::after { + border-right: 0; + } + } + > .@{menu-prefix-cls}-item, + > .@{menu-prefix-cls}-submenu { + transform-origin: 0 0; + } + } + + &-horizontal&-sub { + min-width: 114px; // in case of submenu width is too big: https://codesandbox.io/s/qvpwm6mk66 + } + + &-horizontal &-item, + &-horizontal &-submenu-title { + transition: border-color @animation-duration-slow, background @animation-duration-slow; + } + + &-item, + &-submenu-title { + position: relative; + display: block; + margin: 0; + padding: @menu-item-padding; + white-space: nowrap; + cursor: pointer; + transition: border-color @animation-duration-slow, background @animation-duration-slow, + padding @animation-duration-slow @ease-in-out; + + .@{menu-prefix-cls}-item-icon, + .@{iconfont-css-prefix} { + min-width: 14px; + font-size: @menu-icon-size; + transition: font-size @menu-animation-duration-normal @ease-out, + margin @animation-duration-slow @ease-in-out, color @animation-duration-slow; + + span { + margin-left: @menu-icon-margin-right; + opacity: 1; + // transition: opacity @animation-duration-slow @ease-in-out, + // width @animation-duration-slow @ease-in-out, color @animation-duration-slow; + transition: opacity @animation-duration-slow @ease-in-out, margin @animation-duration-slow, + color @animation-duration-slow; + } + } + + &.@{menu-prefix-cls}-item-only-child { + > .@{iconfont-css-prefix}, + > .@{menu-prefix-cls}-item-icon { + margin-right: 0; + } + } + + &:focus-visible { + .accessibility-focus(); + } + } + + & > &-item-divider { + height: 1px; + margin: 1px 0; + padding: 0; + overflow: hidden; + line-height: 0; + background-color: @border-color-split; + } + + &-submenu { + &-popup { + position: absolute; + z-index: @zindex-dropdown; + background: transparent; + border-radius: @border-radius-base; + box-shadow: none; + transform-origin: 0 0; + + // https://github.com/ant-design/ant-design/issues/13955 + &::before { + position: absolute; + top: -7px; + right: 0; + bottom: 0; + left: 0; + z-index: -1; + width: 100%; + height: 100%; + opacity: 0.0001; + content: ' '; + } + } + + // https://github.com/ant-design/ant-design/issues/13955 + &-placement-rightTop::before { + top: 0; + left: -7px; + } + + > .@{menu-prefix-cls} { + background-color: @menu-bg; + border-radius: @border-radius-base; + &-submenu-title::after { + transition: transform @animation-duration-slow @ease-in-out; + } + } + + &-popup > .@{menu-prefix-cls} { + background-color: @menu-popup-bg; + } + + &-expand-icon, + &-arrow { + position: absolute; + top: 50%; + right: 16px; + width: 10px; + color: @menu-item-color; + transform: translateY(-50%); + transition: transform @animation-duration-slow @ease-in-out; + } + + &-arrow { + // → + &::before, + &::after { + position: absolute; + width: 6px; + height: 1.5px; + background-color: currentColor; + border-radius: 2px; + transition: background @animation-duration-slow @ease-in-out, + transform @animation-duration-slow @ease-in-out, top @animation-duration-slow @ease-in-out, + color @animation-duration-slow @ease-in-out; + content: ''; + } + &::before { + transform: rotate(45deg) translateY(-2.5px); + } + &::after { + transform: rotate(-45deg) translateY(2.5px); + } + } + + &:hover > &-title > &-expand-icon, + &:hover > &-title > &-arrow { + color: @menu-highlight-color; + } + + .@{menu-prefix-cls}-inline-collapsed &-arrow, + &-inline &-arrow { + // ↓ + &::before { + transform: rotate(-45deg) translateX(2.5px); + } + &::after { + transform: rotate(45deg) translateX(-2.5px); + } + } + + &-horizontal &-arrow { + display: none; + } + + &-open&-inline > &-title > &-arrow { + // ↑ + transform: translateY(-2px); + &::after { + transform: rotate(-45deg) translateX(-2.5px); + } + &::before { + transform: rotate(45deg) translateX(2.5px); + } + } + } + + &-vertical &-submenu-selected, + &-vertical-left &-submenu-selected, + &-vertical-right &-submenu-selected { + color: @menu-highlight-color; + } + + &-horizontal { + line-height: @menu-horizontal-line-height; + border: 0; + border-bottom: @border-width-base @border-style-base @border-color-split; + box-shadow: none; + + &:not(.@{menu-prefix-cls}-dark) { + > .@{menu-prefix-cls}-item, + > .@{menu-prefix-cls}-submenu { + margin: @menu-item-padding; + margin-top: -1px; + margin-bottom: 0; + padding: @menu-item-padding; + padding-right: 0; + padding-left: 0; + + &:hover, + &-active, + &-open, + &-selected { + color: @menu-highlight-color; + border-bottom: 2px solid @menu-highlight-color; + } + } + } + + > .@{menu-prefix-cls}-item, + > .@{menu-prefix-cls}-submenu { + position: relative; + top: 1px; + display: inline-block; + vertical-align: bottom; + border-bottom: 2px solid transparent; + } + + > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title { + padding: 0; + } + + > .@{menu-prefix-cls}-item { + a { + color: @menu-item-color; + &:hover { + color: @menu-highlight-color; + } + &::before { + bottom: -2px; + } + } + &-selected a { + color: @menu-highlight-color; + } + } + + &::after { + display: block; + clear: both; + height: 0; + content: '\20'; + } + } + + &-vertical, + &-vertical-left, + &-vertical-right, + &-inline { + .@{menu-prefix-cls}-item { + position: relative; + &::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + border-right: @menu-item-active-border-width solid @menu-highlight-color; + transform: scaleY(0.0001); + opacity: 0; + transition: transform @menu-animation-duration-normal @ease-out, + opacity @menu-animation-duration-normal @ease-out; + content: ''; + } + } + + .@{menu-prefix-cls}-item, + .@{menu-prefix-cls}-submenu-title { + height: @menu-item-height; + margin-top: @menu-item-vertical-margin; + margin-bottom: @menu-item-vertical-margin; + padding: 0 16px; + overflow: hidden; + line-height: @menu-item-height; + text-overflow: ellipsis; + } + + // disable margin collapsed + .@{menu-prefix-cls}-submenu { + padding-bottom: 0.02px; + } + + .@{menu-prefix-cls}-item:not(:last-child) { + margin-bottom: @menu-item-boundary-margin; + } + + > .@{menu-prefix-cls}-item, + > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title { + height: @menu-inline-toplevel-item-height; + line-height: @menu-inline-toplevel-item-height; + } + } + + &-vertical { + .@{menu-prefix-cls}-item-group-list .@{menu-prefix-cls}-submenu-title, + .@{menu-prefix-cls}-submenu-title { + padding-right: 34px; + } + } + + &-inline { + width: 100%; + .@{menu-prefix-cls}-selected, + .@{menu-prefix-cls}-item-selected { + &::after { + transform: scaleY(1); + opacity: 1; + transition: transform @menu-animation-duration-normal @ease-in-out, + opacity @menu-animation-duration-normal @ease-in-out; + } + } + + .@{menu-prefix-cls}-item, + .@{menu-prefix-cls}-submenu-title { + width: ~'calc(100% + 1px)'; + } + + .@{menu-prefix-cls}-item-group-list .@{menu-prefix-cls}-submenu-title, + .@{menu-prefix-cls}-submenu-title { + padding-right: 34px; + } + + // Motion enhance for first level + &.@{menu-prefix-cls}-root { + .@{menu-prefix-cls}-item, + .@{menu-prefix-cls}-submenu-title { + display: flex; + align-items: center; + transition: border-color @animation-duration-slow, background @animation-duration-slow, + padding 0.1s @ease-out; + + > .@{menu-prefix-cls}-title-content { + flex: auto; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + } + + > * { + flex: none; + } + } + } + } + + &&-inline-collapsed { + width: @menu-collapsed-width; + + > .@{menu-prefix-cls}-item, + > .@{menu-prefix-cls}-item-group + > .@{menu-prefix-cls}-item-group-list + > .@{menu-prefix-cls}-item, + > .@{menu-prefix-cls}-item-group + > .@{menu-prefix-cls}-item-group-list + > .@{menu-prefix-cls}-submenu + > .@{menu-prefix-cls}-submenu-title, + > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title { + left: 0; + padding: 0 ~'calc(50% - @{menu-icon-size-lg} / 2)'; + text-overflow: clip; + + .@{menu-prefix-cls}-submenu-arrow { + opacity: 0; + } + + .@{menu-prefix-cls}-item-icon, + .@{iconfont-css-prefix} { + margin: 0; + font-size: @menu-icon-size-lg; + line-height: @menu-item-height; + + span { + display: inline-block; + opacity: 0; + } + } + } + + .@{menu-prefix-cls}-item-icon, + .@{iconfont-css-prefix} { + display: inline-block; + } + + &-tooltip { + pointer-events: none; + + .@{menu-prefix-cls}-item-icon, + .@{iconfont-css-prefix} { + display: none; + } + a { + color: @text-color-dark; + } + } + + .@{menu-prefix-cls}-item-group-title { + padding-right: 4px; + padding-left: 4px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + } + + &-item-group-list { + margin: 0; + padding: 0; + .@{menu-prefix-cls}-item, + .@{menu-prefix-cls}-submenu-title { + padding: 0 16px 0 28px; + } + } + + &-root&-vertical, + &-root&-vertical-left, + &-root&-vertical-right, + &-root&-inline { + box-shadow: none; + } + + &-root&-inline-collapsed { + .@{menu-prefix-cls}-item, + .@{menu-prefix-cls}-submenu .@{menu-prefix-cls}-submenu-title { + > .@{menu-prefix-cls}-inline-collapsed-noicon { + font-size: @menu-icon-size-lg; + text-align: center; + } + } + } + + &-sub&-inline { + padding: 0; + background: @menu-inline-submenu-bg; + border: 0; + border-radius: 0; + box-shadow: none; + & > .@{menu-prefix-cls}-item, + & > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title { + height: @menu-item-height; + line-height: @menu-item-height; + list-style-position: inside; + list-style-type: disc; + } + + & .@{menu-prefix-cls}-item-group-title { + padding-left: 32px; + } + } + + // Disabled state sets text to gray and nukes hover/tab effects + &-item-disabled, + &-submenu-disabled { + color: @disabled-color !important; + background: none; + border-color: transparent !important; + cursor: not-allowed; + a { + color: @disabled-color !important; + pointer-events: none; + } + > .@{menu-prefix-cls}-submenu-title { + color: @disabled-color !important; + cursor: not-allowed; + > .@{menu-prefix-cls}-submenu-arrow { + &::before, + &::after { + background: @disabled-color !important; + } + } + } + } +} + +// Integration with header element so menu items have the same height +.@{ant-prefix}-layout-header { + .@{menu-prefix-cls} { + line-height: inherit; + } +} + +@import './dark'; +@import './rtl'; diff --git a/components/new-menu/style/index.tsx b/components/new-menu/style/index.tsx new file mode 100644 index 000000000..be4998634 --- /dev/null +++ b/components/new-menu/style/index.tsx @@ -0,0 +1,6 @@ +import '../../style/index.less'; +import './index.less'; + +// style dependencies +// deps-lint-skip: layout +import '../../tooltip/style'; diff --git a/components/new-menu/style/rtl.less b/components/new-menu/style/rtl.less new file mode 100644 index 000000000..a7edba5bb --- /dev/null +++ b/components/new-menu/style/rtl.less @@ -0,0 +1,164 @@ +@import '../../style/themes/index'; +@import '../../style/mixins/index'; + +@menu-prefix-cls: ~'@{ant-prefix}-menu'; + +.@{menu-prefix-cls} { + &&-rtl { + direction: rtl; + text-align: right; + } + + &-item-group-title { + .@{menu-prefix-cls}-rtl & { + text-align: right; + } + } + + &-inline, + &-vertical { + .@{menu-prefix-cls}-rtl& { + border-right: none; + border-left: @border-width-base @border-style-base @border-color-split; + } + } + + &-dark&-inline, + &-dark&-vertical { + .@{menu-prefix-cls}-rtl& { + border-left: none; + } + } + + &-vertical&-sub, + &-vertical-left&-sub, + &-vertical-right&-sub { + > .@{menu-prefix-cls}-item, + > .@{menu-prefix-cls}-submenu { + .@{menu-prefix-cls}-rtl& { + transform-origin: top right; + } + } + } + + &-item, + &-submenu-title { + .@{menu-prefix-cls}-item-icon, + .@{iconfont-css-prefix} { + .@{menu-prefix-cls}-rtl & { + margin-right: auto; + margin-left: @menu-icon-margin-right; + } + } + + &.@{menu-prefix-cls}-item-only-child { + > .@{menu-prefix-cls}-item-icon, + > .@{iconfont-css-prefix} { + .@{menu-prefix-cls}-rtl & { + margin-left: 0; + } + } + } + } + + &-submenu { + &-rtl.@{menu-prefix-cls}-submenu-popup { + transform-origin: 100% 0; + } + + &-vertical, + &-vertical-left, + &-vertical-right, + &-inline { + > .@{menu-prefix-cls}-submenu-title .@{menu-prefix-cls}-submenu-arrow { + .@{menu-prefix-cls}-rtl & { + right: auto; + left: 16px; + } + } + } + + &-vertical, + &-vertical-left, + &-vertical-right { + > .@{menu-prefix-cls}-submenu-title .@{menu-prefix-cls}-submenu-arrow { + &::before { + .@{menu-prefix-cls}-rtl & { + transform: rotate(-45deg) translateY(-2px); + } + } + &::after { + .@{menu-prefix-cls}-rtl & { + transform: rotate(45deg) translateY(2px); + } + } + } + } + } + + &-vertical, + &-vertical-left, + &-vertical-right, + &-inline { + .@{menu-prefix-cls}-item { + &::after { + .@{menu-prefix-cls}-rtl& { + right: auto; + left: 0; + } + } + } + + .@{menu-prefix-cls}-item, + .@{menu-prefix-cls}-submenu-title { + .@{menu-prefix-cls}-rtl& { + text-align: right; + } + } + } + + &-inline { + .@{menu-prefix-cls}-submenu-title { + .@{menu-prefix-cls}-rtl& { + padding-right: 0; + padding-left: 34px; + } + } + } + + &-vertical { + .@{menu-prefix-cls}-submenu-title { + .@{menu-prefix-cls}-rtl& { + padding-right: 16px; + padding-left: 34px; + } + } + } + + &-inline-collapsed&-vertical { + .@{menu-prefix-cls}-submenu-title { + .@{menu-prefix-cls}-rtl& { + padding: 0 ~'calc(50% - @{menu-icon-size-lg} / 2)'; + } + } + } + + &-item-group-list { + .@{menu-prefix-cls}-item, + .@{menu-prefix-cls}-submenu-title { + .@{menu-prefix-cls}-rtl & { + padding: 0 28px 0 16px; + } + } + } + + &-sub&-inline { + border: 0; + & .@{menu-prefix-cls}-item-group-title { + .@{menu-prefix-cls}-rtl& { + padding-right: 32px; + padding-left: 0; + } + } + } +} diff --git a/components/new-menu/style/status.less b/components/new-menu/style/status.less new file mode 100644 index 000000000..5e5d66c05 --- /dev/null +++ b/components/new-menu/style/status.less @@ -0,0 +1,47 @@ +@import './index'; + +.@{menu-prefix-cls} { + // Danger + &-item-danger&-item { + color: @menu-highlight-danger-color; + + &:hover, + &-active { + color: @menu-highlight-danger-color; + } + + &:active { + background: @menu-item-active-danger-bg; + } + + &-selected { + color: @menu-highlight-danger-color; + > a, + > a:hover { + color: @menu-highlight-danger-color; + } + } + + .@{menu-prefix-cls}:not(.@{menu-prefix-cls}-horizontal) &-selected { + background-color: @menu-item-active-danger-bg; + } + + .@{menu-prefix-cls}-inline &::after { + border-right-color: @menu-highlight-danger-color; + } + } + + // ==================== Dark ==================== + &-dark &-item-danger&-item { + &, + &:hover, + & > a { + color: @menu-dark-danger-color; + } + } + + &-dark&-dark:not(&-horizontal) &-item-danger&-item-selected { + color: @menu-dark-highlight-color; + background-color: @menu-dark-item-active-danger-bg; + } +} diff --git a/v2-doc b/v2-doc index eacad021c..a7013ae87 160000 --- a/v2-doc +++ b/v2-doc @@ -1 +1 @@ -Subproject commit eacad021cf9e4d7d18fe4c4b9a38cbd7e3378d49 +Subproject commit a7013ae87f69dcbcf547f4b023255b8a7a775557