| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786 |
- import _extends from "@babel/runtime/helpers/esm/extends";
- import '../../_util/cssinjs';
- import { genComponentStyleHook, mergeToken } from '../../theme/internal';
- import { genFocusStyle, resetComponent, textEllipsis } from '../../style';
- import genMotionStyle from './motion';
- const genCardStyle = token => {
- const {
- componentCls,
- tabsCardHorizontalPadding,
- tabsCardHeadBackground,
- tabsCardGutter,
- colorSplit
- } = token;
- return {
- [`${componentCls}-card`]: {
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- [`${componentCls}-tab`]: {
- margin: 0,
- padding: tabsCardHorizontalPadding,
- background: tabsCardHeadBackground,
- border: `${token.lineWidth}px ${token.lineType} ${colorSplit}`,
- transition: `all ${token.motionDurationSlow} ${token.motionEaseInOut}`
- },
- [`${componentCls}-tab-active`]: {
- color: token.colorPrimary,
- background: token.colorBgContainer
- },
- [`${componentCls}-ink-bar`]: {
- visibility: 'hidden'
- }
- },
- // ========================== Top & Bottom ==========================
- [`&${componentCls}-top, &${componentCls}-bottom`]: {
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- [`${componentCls}-tab + ${componentCls}-tab`]: {
- marginLeft: {
- _skip_check_: true,
- value: `${tabsCardGutter}px`
- }
- }
- }
- },
- [`&${componentCls}-top`]: {
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- [`${componentCls}-tab`]: {
- borderRadius: `${token.borderRadiusLG}px ${token.borderRadiusLG}px 0 0`
- },
- [`${componentCls}-tab-active`]: {
- borderBottomColor: token.colorBgContainer
- }
- }
- },
- [`&${componentCls}-bottom`]: {
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- [`${componentCls}-tab`]: {
- borderRadius: `0 0 ${token.borderRadiusLG}px ${token.borderRadiusLG}px`
- },
- [`${componentCls}-tab-active`]: {
- borderTopColor: token.colorBgContainer
- }
- }
- },
- // ========================== Left & Right ==========================
- [`&${componentCls}-left, &${componentCls}-right`]: {
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- [`${componentCls}-tab + ${componentCls}-tab`]: {
- marginTop: `${tabsCardGutter}px`
- }
- }
- },
- [`&${componentCls}-left`]: {
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- [`${componentCls}-tab`]: {
- borderRadius: {
- _skip_check_: true,
- value: `${token.borderRadiusLG}px 0 0 ${token.borderRadiusLG}px`
- }
- },
- [`${componentCls}-tab-active`]: {
- borderRightColor: {
- _skip_check_: true,
- value: token.colorBgContainer
- }
- }
- }
- },
- [`&${componentCls}-right`]: {
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- [`${componentCls}-tab`]: {
- borderRadius: {
- _skip_check_: true,
- value: `0 ${token.borderRadiusLG}px ${token.borderRadiusLG}px 0`
- }
- },
- [`${componentCls}-tab-active`]: {
- borderLeftColor: {
- _skip_check_: true,
- value: token.colorBgContainer
- }
- }
- }
- }
- }
- };
- };
- const genDropdownStyle = token => {
- const {
- componentCls,
- tabsHoverColor,
- dropdownEdgeChildVerticalPadding
- } = token;
- return {
- [`${componentCls}-dropdown`]: _extends(_extends({}, resetComponent(token)), {
- position: 'absolute',
- top: -9999,
- left: {
- _skip_check_: true,
- value: -9999
- },
- zIndex: token.zIndexPopup,
- display: 'block',
- '&-hidden': {
- display: 'none'
- },
- [`${componentCls}-dropdown-menu`]: {
- maxHeight: token.tabsDropdownHeight,
- margin: 0,
- padding: `${dropdownEdgeChildVerticalPadding}px 0`,
- overflowX: 'hidden',
- overflowY: 'auto',
- textAlign: {
- _skip_check_: true,
- value: 'left'
- },
- listStyleType: 'none',
- backgroundColor: token.colorBgContainer,
- backgroundClip: 'padding-box',
- borderRadius: token.borderRadiusLG,
- outline: 'none',
- boxShadow: token.boxShadowSecondary,
- '&-item': _extends(_extends({}, textEllipsis), {
- display: 'flex',
- alignItems: 'center',
- minWidth: token.tabsDropdownWidth,
- margin: 0,
- padding: `${token.paddingXXS}px ${token.paddingSM}px`,
- color: token.colorText,
- fontWeight: 'normal',
- fontSize: token.fontSize,
- lineHeight: token.lineHeight,
- cursor: 'pointer',
- transition: `all ${token.motionDurationSlow}`,
- '> span': {
- flex: 1,
- whiteSpace: 'nowrap'
- },
- '&-remove': {
- flex: 'none',
- marginLeft: {
- _skip_check_: true,
- value: token.marginSM
- },
- color: token.colorTextDescription,
- fontSize: token.fontSizeSM,
- background: 'transparent',
- border: 0,
- cursor: 'pointer',
- '&:hover': {
- color: tabsHoverColor
- }
- },
- '&:hover': {
- background: token.controlItemBgHover
- },
- '&-disabled': {
- '&, &:hover': {
- color: token.colorTextDisabled,
- background: 'transparent',
- cursor: 'not-allowed'
- }
- }
- })
- }
- })
- };
- };
- const genPositionStyle = token => {
- const {
- componentCls,
- margin,
- colorSplit
- } = token;
- return {
- // ========================== Top & Bottom ==========================
- [`${componentCls}-top, ${componentCls}-bottom`]: {
- flexDirection: 'column',
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- margin: `0 0 ${margin}px 0`,
- '&::before': {
- position: 'absolute',
- right: {
- _skip_check_: true,
- value: 0
- },
- left: {
- _skip_check_: true,
- value: 0
- },
- borderBottom: `${token.lineWidth}px ${token.lineType} ${colorSplit}`,
- content: "''"
- },
- [`${componentCls}-ink-bar`]: {
- height: token.lineWidthBold,
- '&-animated': {
- transition: `width ${token.motionDurationSlow}, left ${token.motionDurationSlow},
- right ${token.motionDurationSlow}`
- }
- },
- [`${componentCls}-nav-wrap`]: {
- '&::before, &::after': {
- top: 0,
- bottom: 0,
- width: token.controlHeight
- },
- '&::before': {
- left: {
- _skip_check_: true,
- value: 0
- },
- boxShadow: token.boxShadowTabsOverflowLeft
- },
- '&::after': {
- right: {
- _skip_check_: true,
- value: 0
- },
- boxShadow: token.boxShadowTabsOverflowRight
- },
- [`&${componentCls}-nav-wrap-ping-left::before`]: {
- opacity: 1
- },
- [`&${componentCls}-nav-wrap-ping-right::after`]: {
- opacity: 1
- }
- }
- }
- },
- [`${componentCls}-top`]: {
- [`> ${componentCls}-nav,
- > div > ${componentCls}-nav`]: {
- '&::before': {
- bottom: 0
- },
- [`${componentCls}-ink-bar`]: {
- bottom: 0
- }
- }
- },
- [`${componentCls}-bottom`]: {
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- order: 1,
- marginTop: `${margin}px`,
- marginBottom: 0,
- '&::before': {
- top: 0
- },
- [`${componentCls}-ink-bar`]: {
- top: 0
- }
- },
- [`> ${componentCls}-content-holder, > div > ${componentCls}-content-holder`]: {
- order: 0
- }
- },
- // ========================== Left & Right ==========================
- [`${componentCls}-left, ${componentCls}-right`]: {
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- flexDirection: 'column',
- minWidth: token.controlHeight * 1.25,
- // >>>>>>>>>>> Tab
- [`${componentCls}-tab`]: {
- padding: `${token.paddingXS}px ${token.paddingLG}px`,
- textAlign: 'center'
- },
- [`${componentCls}-tab + ${componentCls}-tab`]: {
- margin: `${token.margin}px 0 0 0`
- },
- // >>>>>>>>>>> Nav
- [`${componentCls}-nav-wrap`]: {
- flexDirection: 'column',
- '&::before, &::after': {
- right: {
- _skip_check_: true,
- value: 0
- },
- left: {
- _skip_check_: true,
- value: 0
- },
- height: token.controlHeight
- },
- '&::before': {
- top: 0,
- boxShadow: token.boxShadowTabsOverflowTop
- },
- '&::after': {
- bottom: 0,
- boxShadow: token.boxShadowTabsOverflowBottom
- },
- [`&${componentCls}-nav-wrap-ping-top::before`]: {
- opacity: 1
- },
- [`&${componentCls}-nav-wrap-ping-bottom::after`]: {
- opacity: 1
- }
- },
- // >>>>>>>>>>> Ink Bar
- [`${componentCls}-ink-bar`]: {
- width: token.lineWidthBold,
- '&-animated': {
- transition: `height ${token.motionDurationSlow}, top ${token.motionDurationSlow}`
- }
- },
- [`${componentCls}-nav-list, ${componentCls}-nav-operations`]: {
- flex: '1 0 auto',
- flexDirection: 'column'
- }
- }
- },
- [`${componentCls}-left`]: {
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- [`${componentCls}-ink-bar`]: {
- right: {
- _skip_check_: true,
- value: 0
- }
- }
- },
- [`> ${componentCls}-content-holder, > div > ${componentCls}-content-holder`]: {
- marginLeft: {
- _skip_check_: true,
- value: `-${token.lineWidth}px`
- },
- borderLeft: {
- _skip_check_: true,
- value: `${token.lineWidth}px ${token.lineType} ${token.colorBorder}`
- },
- [`> ${componentCls}-content > ${componentCls}-tabpane`]: {
- paddingLeft: {
- _skip_check_: true,
- value: token.paddingLG
- }
- }
- }
- },
- [`${componentCls}-right`]: {
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- order: 1,
- [`${componentCls}-ink-bar`]: {
- left: {
- _skip_check_: true,
- value: 0
- }
- }
- },
- [`> ${componentCls}-content-holder, > div > ${componentCls}-content-holder`]: {
- order: 0,
- marginRight: {
- _skip_check_: true,
- value: -token.lineWidth
- },
- borderRight: {
- _skip_check_: true,
- value: `${token.lineWidth}px ${token.lineType} ${token.colorBorder}`
- },
- [`> ${componentCls}-content > ${componentCls}-tabpane`]: {
- paddingRight: {
- _skip_check_: true,
- value: token.paddingLG
- }
- }
- }
- }
- };
- };
- const genSizeStyle = token => {
- const {
- componentCls,
- padding
- } = token;
- return {
- [componentCls]: {
- '&-small': {
- [`> ${componentCls}-nav`]: {
- [`${componentCls}-tab`]: {
- padding: `${token.paddingXS}px 0`,
- fontSize: token.fontSize
- }
- }
- },
- '&-large': {
- [`> ${componentCls}-nav`]: {
- [`${componentCls}-tab`]: {
- padding: `${padding}px 0`,
- fontSize: token.fontSizeLG
- }
- }
- }
- },
- [`${componentCls}-card`]: {
- [`&${componentCls}-small`]: {
- [`> ${componentCls}-nav`]: {
- [`${componentCls}-tab`]: {
- padding: `${token.paddingXXS * 1.5}px ${padding}px`
- }
- },
- [`&${componentCls}-bottom`]: {
- [`> ${componentCls}-nav ${componentCls}-tab`]: {
- borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`
- }
- },
- [`&${componentCls}-top`]: {
- [`> ${componentCls}-nav ${componentCls}-tab`]: {
- borderRadius: `${token.borderRadius}px ${token.borderRadius}px 0 0`
- }
- },
- [`&${componentCls}-right`]: {
- [`> ${componentCls}-nav ${componentCls}-tab`]: {
- borderRadius: {
- _skip_check_: true,
- value: `0 ${token.borderRadius}px ${token.borderRadius}px 0`
- }
- }
- },
- [`&${componentCls}-left`]: {
- [`> ${componentCls}-nav ${componentCls}-tab`]: {
- borderRadius: {
- _skip_check_: true,
- value: `${token.borderRadius}px 0 0 ${token.borderRadius}px`
- }
- }
- }
- },
- [`&${componentCls}-large`]: {
- [`> ${componentCls}-nav`]: {
- [`${componentCls}-tab`]: {
- padding: `${token.paddingXS}px ${padding}px ${token.paddingXXS * 1.5}px`
- }
- }
- }
- }
- };
- };
- const genTabStyle = token => {
- const {
- componentCls,
- tabsActiveColor,
- tabsHoverColor,
- iconCls,
- tabsHorizontalGutter
- } = token;
- const tabCls = `${componentCls}-tab`;
- return {
- [tabCls]: {
- position: 'relative',
- display: 'inline-flex',
- alignItems: 'center',
- padding: `${token.paddingSM}px 0`,
- fontSize: `${token.fontSize}px`,
- background: 'transparent',
- border: 0,
- outline: 'none',
- cursor: 'pointer',
- '&-btn, &-remove': _extends({
- '&:focus:not(:focus-visible), &:active': {
- color: tabsActiveColor
- }
- }, genFocusStyle(token)),
- '&-btn': {
- outline: 'none',
- transition: 'all 0.3s'
- },
- '&-remove': {
- flex: 'none',
- marginRight: {
- _skip_check_: true,
- value: -token.marginXXS
- },
- marginLeft: {
- _skip_check_: true,
- value: token.marginXS
- },
- color: token.colorTextDescription,
- fontSize: token.fontSizeSM,
- background: 'transparent',
- border: 'none',
- outline: 'none',
- cursor: 'pointer',
- transition: `all ${token.motionDurationSlow}`,
- '&:hover': {
- color: token.colorTextHeading
- }
- },
- '&:hover': {
- color: tabsHoverColor
- },
- [`&${tabCls}-active ${tabCls}-btn`]: {
- color: token.colorPrimary,
- textShadow: token.tabsActiveTextShadow
- },
- [`&${tabCls}-disabled`]: {
- color: token.colorTextDisabled,
- cursor: 'not-allowed'
- },
- [`&${tabCls}-disabled ${tabCls}-btn, &${tabCls}-disabled ${componentCls}-remove`]: {
- '&:focus, &:active': {
- color: token.colorTextDisabled
- }
- },
- [`& ${tabCls}-remove ${iconCls}`]: {
- margin: 0
- },
- [iconCls]: {
- marginRight: {
- _skip_check_: true,
- value: token.marginSM
- }
- }
- },
- [`${tabCls} + ${tabCls}`]: {
- margin: {
- _skip_check_: true,
- value: `0 0 0 ${tabsHorizontalGutter}px`
- }
- }
- };
- };
- const genRtlStyle = token => {
- const {
- componentCls,
- tabsHorizontalGutter,
- iconCls,
- tabsCardGutter
- } = token;
- const rtlCls = `${componentCls}-rtl`;
- return {
- [rtlCls]: {
- direction: 'rtl',
- [`${componentCls}-nav`]: {
- [`${componentCls}-tab`]: {
- margin: {
- _skip_check_: true,
- value: `0 0 0 ${tabsHorizontalGutter}px`
- },
- [`${componentCls}-tab:last-of-type`]: {
- marginLeft: {
- _skip_check_: true,
- value: 0
- }
- },
- [iconCls]: {
- marginRight: {
- _skip_check_: true,
- value: 0
- },
- marginLeft: {
- _skip_check_: true,
- value: `${token.marginSM}px`
- }
- },
- [`${componentCls}-tab-remove`]: {
- marginRight: {
- _skip_check_: true,
- value: `${token.marginXS}px`
- },
- marginLeft: {
- _skip_check_: true,
- value: `-${token.marginXXS}px`
- },
- [iconCls]: {
- margin: 0
- }
- }
- }
- },
- [`&${componentCls}-left`]: {
- [`> ${componentCls}-nav`]: {
- order: 1
- },
- [`> ${componentCls}-content-holder`]: {
- order: 0
- }
- },
- [`&${componentCls}-right`]: {
- [`> ${componentCls}-nav`]: {
- order: 0
- },
- [`> ${componentCls}-content-holder`]: {
- order: 1
- }
- },
- // ====================== Card ======================
- [`&${componentCls}-card${componentCls}-top, &${componentCls}-card${componentCls}-bottom`]: {
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- [`${componentCls}-tab + ${componentCls}-tab`]: {
- marginRight: {
- _skip_check_: true,
- value: `${tabsCardGutter}px`
- },
- marginLeft: {
- _skip_check_: true,
- value: 0
- }
- }
- }
- }
- },
- [`${componentCls}-dropdown-rtl`]: {
- direction: 'rtl'
- },
- [`${componentCls}-menu-item`]: {
- [`${componentCls}-dropdown-rtl`]: {
- textAlign: {
- _skip_check_: true,
- value: 'right'
- }
- }
- }
- };
- };
- const genTabsStyle = token => {
- const {
- componentCls,
- tabsCardHorizontalPadding,
- tabsCardHeight,
- tabsCardGutter,
- tabsHoverColor,
- tabsActiveColor,
- colorSplit
- } = token;
- return {
- [componentCls]: _extends(_extends(_extends(_extends({}, resetComponent(token)), {
- display: 'flex',
- // ========================== Navigation ==========================
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- position: 'relative',
- display: 'flex',
- flex: 'none',
- alignItems: 'center',
- [`${componentCls}-nav-wrap`]: {
- position: 'relative',
- display: 'flex',
- flex: 'auto',
- alignSelf: 'stretch',
- overflow: 'hidden',
- whiteSpace: 'nowrap',
- transform: 'translate(0)',
- // >>>>> Ping shadow
- '&::before, &::after': {
- position: 'absolute',
- zIndex: 1,
- opacity: 0,
- transition: `opacity ${token.motionDurationSlow}`,
- content: "''",
- pointerEvents: 'none'
- }
- },
- [`${componentCls}-nav-list`]: {
- position: 'relative',
- display: 'flex',
- transition: `opacity ${token.motionDurationSlow}`
- },
- // >>>>>>>> Operations
- [`${componentCls}-nav-operations`]: {
- display: 'flex',
- alignSelf: 'stretch'
- },
- [`${componentCls}-nav-operations-hidden`]: {
- position: 'absolute',
- visibility: 'hidden',
- pointerEvents: 'none'
- },
- [`${componentCls}-nav-more`]: {
- position: 'relative',
- padding: tabsCardHorizontalPadding,
- background: 'transparent',
- border: 0,
- '&::after': {
- position: 'absolute',
- right: {
- _skip_check_: true,
- value: 0
- },
- bottom: 0,
- left: {
- _skip_check_: true,
- value: 0
- },
- height: token.controlHeightLG / 8,
- transform: 'translateY(100%)',
- content: "''"
- }
- },
- [`${componentCls}-nav-add`]: _extends({
- minWidth: `${tabsCardHeight}px`,
- marginLeft: {
- _skip_check_: true,
- value: `${tabsCardGutter}px`
- },
- padding: `0 ${token.paddingXS}px`,
- background: 'transparent',
- border: `${token.lineWidth}px ${token.lineType} ${colorSplit}`,
- borderRadius: `${token.borderRadiusLG}px ${token.borderRadiusLG}px 0 0`,
- outline: 'none',
- cursor: 'pointer',
- color: token.colorText,
- transition: `all ${token.motionDurationSlow} ${token.motionEaseInOut}`,
- '&:hover': {
- color: tabsHoverColor
- },
- '&:active, &:focus:not(:focus-visible)': {
- color: tabsActiveColor
- }
- }, genFocusStyle(token))
- },
- [`${componentCls}-extra-content`]: {
- flex: 'none'
- },
- // ============================ InkBar ============================
- [`${componentCls}-ink-bar`]: {
- position: 'absolute',
- background: token.colorPrimary,
- pointerEvents: 'none'
- }
- }), genTabStyle(token)), {
- // =========================== TabPanes ===========================
- [`${componentCls}-content`]: {
- position: 'relative',
- display: 'flex',
- width: '100%',
- ['&-animated']: {
- transition: 'margin 0.3s'
- }
- },
- [`${componentCls}-content-holder`]: {
- flex: 'auto',
- minWidth: 0,
- minHeight: 0
- },
- [`${componentCls}-tabpane`]: {
- outline: 'none',
- flex: 'none',
- width: '100%'
- }
- }),
- [`${componentCls}-centered`]: {
- [`> ${componentCls}-nav, > div > ${componentCls}-nav`]: {
- [`${componentCls}-nav-wrap`]: {
- [`&:not([class*='${componentCls}-nav-wrap-ping'])`]: {
- justifyContent: 'center'
- }
- }
- }
- }
- };
- };
- // ============================== Export ==============================
- export default genComponentStyleHook('Tabs', token => {
- const tabsCardHeight = token.controlHeightLG;
- const tabsToken = mergeToken(token, {
- tabsHoverColor: token.colorPrimaryHover,
- tabsActiveColor: token.colorPrimaryActive,
- tabsCardHorizontalPadding: `${(tabsCardHeight - Math.round(token.fontSize * token.lineHeight)) / 2 - token.lineWidth}px ${token.padding}px`,
- tabsCardHeight,
- tabsCardGutter: token.marginXXS / 2,
- tabsHorizontalGutter: 32,
- tabsCardHeadBackground: token.colorFillAlter,
- dropdownEdgeChildVerticalPadding: token.paddingXXS,
- tabsActiveTextShadow: '0 0 0.25px currentcolor',
- tabsDropdownHeight: 200,
- tabsDropdownWidth: 120
- });
- return [genSizeStyle(tabsToken), genRtlStyle(tabsToken), genPositionStyle(tabsToken), genDropdownStyle(tabsToken), genCardStyle(tabsToken), genTabsStyle(tabsToken), genMotionStyle(tabsToken)];
- }, token => ({
- zIndexPopup: token.zIndexPopupBase + 50
- }));
|