UNPKG

@aplus-frontend/antdv

Version:

Vue basic component library maintained based on ant-design-vue

164 lines 5.88 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import { genComponentStyleHook, mergeToken } from '../../theme/internal'; import { resetComponent, textEllipsis } from '../../style'; // ============================== Mixins ============================== function getItemDisabledStyle(cls, token) { return { [`${cls}, ${cls}:hover, ${cls}:focus`]: { color: token.colorTextDisabled, cursor: 'not-allowed' } }; } function getItemSelectedStyle(token) { return { backgroundColor: token.bgColorSelected, boxShadow: token.boxShadow }; } const segmentedTextEllipsisCss = _extends({ overflow: 'hidden' }, textEllipsis); // ============================== Styles ============================== const genSegmentedStyle = token => { const { componentCls } = token; return { [componentCls]: _extends(_extends(_extends(_extends({}, resetComponent(token)), { display: 'inline-block', padding: token.segmentedContainerPadding, color: token.labelColor, backgroundColor: token.bgColor, borderRadius: token.borderRadius, transition: `all ${token.motionDurationMid} ${token.motionEaseInOut}`, [`${componentCls}-group`]: { position: 'relative', display: 'flex', alignItems: 'stretch', justifyItems: 'flex-start', width: '100%' }, // RTL styles [`&${componentCls}-rtl`]: { direction: 'rtl' }, // block styles [`&${componentCls}-block`]: { display: 'flex' }, [`&${componentCls}-block ${componentCls}-item`]: { flex: 1, minWidth: 0 }, // item styles [`${componentCls}-item`]: { position: 'relative', textAlign: 'center', cursor: 'pointer', transition: `color ${token.motionDurationMid} ${token.motionEaseInOut}`, borderRadius: token.borderRadiusSM, '&-selected': _extends(_extends({}, getItemSelectedStyle(token)), { color: token.labelColorHover }), '&::after': { content: '""', position: 'absolute', width: '100%', height: '100%', top: 0, insetInlineStart: 0, borderRadius: 'inherit', transition: `background-color ${token.motionDurationMid}`, pointerEvents: 'none' }, [`&:hover:not(${componentCls}-item-selected):not(${componentCls}-item-disabled)`]: { color: token.labelColorHover, '&::after': { backgroundColor: token.bgColorHover } }, '&-label': _extends({ minHeight: token.controlHeight - token.segmentedContainerPadding * 2, lineHeight: `${token.controlHeight - token.segmentedContainerPadding * 2}px`, padding: `0 ${token.segmentedPaddingHorizontal}px` }, segmentedTextEllipsisCss), // syntactic sugar to add `icon` for Segmented Item '&-icon + *': { marginInlineStart: token.marginSM / 2 }, '&-input': { position: 'absolute', insetBlockStart: 0, insetInlineStart: 0, width: 0, height: 0, opacity: 0, pointerEvents: 'none' } }, // thumb styles [`${componentCls}-thumb`]: _extends(_extends({}, getItemSelectedStyle(token)), { position: 'absolute', insetBlockStart: 0, insetInlineStart: 0, width: 0, height: '100%', padding: `${token.paddingXXS}px 0`, borderRadius: token.borderRadiusSM, transition: `transform ${token.motionDurationSlow} ${token.motionEaseInOut}, width ${token.motionDurationSlow} ${token.motionEaseInOut}`, willChange: 'transform, width', [`& ~ ${componentCls}-item:not(${componentCls}-item-selected):not(${componentCls}-item-disabled)::after`]: { backgroundColor: 'transparent' } }), // size styles [`&${componentCls}-lg`]: { borderRadius: token.borderRadiusLG, [`${componentCls}-item-label`]: { minHeight: token.controlHeightLG - token.segmentedContainerPadding * 2, lineHeight: `${token.controlHeightLG - token.segmentedContainerPadding * 2}px`, padding: `0 ${token.segmentedPaddingHorizontal}px`, fontSize: token.fontSizeLG }, [`${componentCls}-item, ${componentCls}-thumb`]: { borderRadius: token.borderRadius } }, [`&${componentCls}-sm`]: { borderRadius: token.borderRadiusSM, [`${componentCls}-item-label`]: { minHeight: token.controlHeightSM - token.segmentedContainerPadding * 2, lineHeight: `${token.controlHeightSM - token.segmentedContainerPadding * 2}px`, padding: `0 ${token.segmentedPaddingHorizontalSM}px` }, [`${componentCls}-item, ${componentCls}-thumb`]: { borderRadius: token.borderRadiusXS } } }), getItemDisabledStyle(`&-disabled ${componentCls}-item`, token)), getItemDisabledStyle(`${componentCls}-item-disabled`, token)) }; }; // ============================== Export ============================== export default genComponentStyleHook('Segmented', token => { const { lineWidthBold, lineWidth, colorTextLabel, colorText, colorFillSecondary, colorBgLayout, colorBgElevated } = token; const segmentedToken = mergeToken(token, { segmentedPaddingHorizontal: token.controlPaddingHorizontal - lineWidth, segmentedPaddingHorizontalSM: token.controlPaddingHorizontalSM - lineWidth, segmentedContainerPadding: lineWidthBold, labelColor: colorTextLabel, labelColorHover: colorText, bgColor: colorBgLayout, bgColorHover: colorFillSecondary, bgColorSelected: colorBgElevated }); return [genSegmentedStyle(segmentedToken)]; });