123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.prepareComponentToken = exports.default = void 0;
- var _cssinjs = require("@ant-design/cssinjs");
- var _fastColor = require("@ant-design/fast-color");
- var _style = require("../../style");
- var _internal = require("../../theme/internal");
- const genSwitchSmallStyle = token => {
- const {
- componentCls,
- trackHeightSM,
- trackPadding,
- trackMinWidthSM,
- innerMinMarginSM,
- innerMaxMarginSM,
- handleSizeSM,
- calc
- } = token;
- const switchInnerCls = `${componentCls}-inner`;
- const trackPaddingCalc = (0, _cssinjs.unit)(calc(handleSizeSM).add(calc(trackPadding).mul(2)).equal());
- const innerMaxMarginCalc = (0, _cssinjs.unit)(calc(innerMaxMarginSM).mul(2).equal());
- return {
- [componentCls]: {
- [`&${componentCls}-small`]: {
- minWidth: trackMinWidthSM,
- height: trackHeightSM,
- lineHeight: (0, _cssinjs.unit)(trackHeightSM),
- [`${componentCls}-inner`]: {
- paddingInlineStart: innerMaxMarginSM,
- paddingInlineEnd: innerMinMarginSM,
- [`${switchInnerCls}-checked, ${switchInnerCls}-unchecked`]: {
- minHeight: trackHeightSM
- },
- [`${switchInnerCls}-checked`]: {
- marginInlineStart: `calc(-100% + ${trackPaddingCalc} - ${innerMaxMarginCalc})`,
- marginInlineEnd: `calc(100% - ${trackPaddingCalc} + ${innerMaxMarginCalc})`
- },
- [`${switchInnerCls}-unchecked`]: {
- marginTop: calc(trackHeightSM).mul(-1).equal(),
- marginInlineStart: 0,
- marginInlineEnd: 0
- }
- },
- [`${componentCls}-handle`]: {
- width: handleSizeSM,
- height: handleSizeSM
- },
- [`${componentCls}-loading-icon`]: {
- top: calc(calc(handleSizeSM).sub(token.switchLoadingIconSize)).div(2).equal(),
- fontSize: token.switchLoadingIconSize
- },
- [`&${componentCls}-checked`]: {
- [`${componentCls}-inner`]: {
- paddingInlineStart: innerMinMarginSM,
- paddingInlineEnd: innerMaxMarginSM,
- [`${switchInnerCls}-checked`]: {
- marginInlineStart: 0,
- marginInlineEnd: 0
- },
- [`${switchInnerCls}-unchecked`]: {
- marginInlineStart: `calc(100% - ${trackPaddingCalc} + ${innerMaxMarginCalc})`,
- marginInlineEnd: `calc(-100% + ${trackPaddingCalc} - ${innerMaxMarginCalc})`
- }
- },
- [`${componentCls}-handle`]: {
- insetInlineStart: `calc(100% - ${(0, _cssinjs.unit)(calc(handleSizeSM).add(trackPadding).equal())})`
- }
- },
- [`&:not(${componentCls}-disabled):active`]: {
- [`&:not(${componentCls}-checked) ${switchInnerCls}`]: {
- [`${switchInnerCls}-unchecked`]: {
- marginInlineStart: calc(token.marginXXS).div(2).equal(),
- marginInlineEnd: calc(token.marginXXS).mul(-1).div(2).equal()
- }
- },
- [`&${componentCls}-checked ${switchInnerCls}`]: {
- [`${switchInnerCls}-checked`]: {
- marginInlineStart: calc(token.marginXXS).mul(-1).div(2).equal(),
- marginInlineEnd: calc(token.marginXXS).div(2).equal()
- }
- }
- }
- }
- }
- };
- };
- const genSwitchLoadingStyle = token => {
- const {
- componentCls,
- handleSize,
- calc
- } = token;
- return {
- [componentCls]: {
- [`${componentCls}-loading-icon${token.iconCls}`]: {
- position: 'relative',
- top: calc(calc(handleSize).sub(token.fontSize)).div(2).equal(),
- color: token.switchLoadingIconColor,
- verticalAlign: 'top'
- },
- [`&${componentCls}-checked ${componentCls}-loading-icon`]: {
- color: token.switchColor
- }
- }
- };
- };
- const genSwitchHandleStyle = token => {
- const {
- componentCls,
- trackPadding,
- handleBg,
- handleShadow,
- handleSize,
- calc
- } = token;
- const switchHandleCls = `${componentCls}-handle`;
- return {
- [componentCls]: {
- [switchHandleCls]: {
- position: 'absolute',
- top: trackPadding,
- insetInlineStart: trackPadding,
- width: handleSize,
- height: handleSize,
- transition: `all ${token.switchDuration} ease-in-out`,
- '&::before': {
- position: 'absolute',
- top: 0,
- insetInlineEnd: 0,
- bottom: 0,
- insetInlineStart: 0,
- backgroundColor: handleBg,
- borderRadius: calc(handleSize).div(2).equal(),
- boxShadow: handleShadow,
- transition: `all ${token.switchDuration} ease-in-out`,
- content: '""'
- }
- },
- [`&${componentCls}-checked ${switchHandleCls}`]: {
- insetInlineStart: `calc(100% - ${(0, _cssinjs.unit)(calc(handleSize).add(trackPadding).equal())})`
- },
- [`&:not(${componentCls}-disabled):active`]: {
- [`${switchHandleCls}::before`]: {
- insetInlineEnd: token.switchHandleActiveInset,
- insetInlineStart: 0
- },
- [`&${componentCls}-checked ${switchHandleCls}::before`]: {
- insetInlineEnd: 0,
- insetInlineStart: token.switchHandleActiveInset
- }
- }
- }
- };
- };
- const genSwitchInnerStyle = token => {
- const {
- componentCls,
- trackHeight,
- trackPadding,
- innerMinMargin,
- innerMaxMargin,
- handleSize,
- calc
- } = token;
- const switchInnerCls = `${componentCls}-inner`;
- const trackPaddingCalc = (0, _cssinjs.unit)(calc(handleSize).add(calc(trackPadding).mul(2)).equal());
- const innerMaxMarginCalc = (0, _cssinjs.unit)(calc(innerMaxMargin).mul(2).equal());
- return {
- [componentCls]: {
- [switchInnerCls]: {
- display: 'block',
- overflow: 'hidden',
- borderRadius: 100,
- height: '100%',
- paddingInlineStart: innerMaxMargin,
- paddingInlineEnd: innerMinMargin,
- transition: `padding-inline-start ${token.switchDuration} ease-in-out, padding-inline-end ${token.switchDuration} ease-in-out`,
- [`${switchInnerCls}-checked, ${switchInnerCls}-unchecked`]: {
- display: 'block',
- color: token.colorTextLightSolid,
- fontSize: token.fontSizeSM,
- transition: `margin-inline-start ${token.switchDuration} ease-in-out, margin-inline-end ${token.switchDuration} ease-in-out`,
- pointerEvents: 'none',
- minHeight: trackHeight
- },
- [`${switchInnerCls}-checked`]: {
- marginInlineStart: `calc(-100% + ${trackPaddingCalc} - ${innerMaxMarginCalc})`,
- marginInlineEnd: `calc(100% - ${trackPaddingCalc} + ${innerMaxMarginCalc})`
- },
- [`${switchInnerCls}-unchecked`]: {
- marginTop: calc(trackHeight).mul(-1).equal(),
- marginInlineStart: 0,
- marginInlineEnd: 0
- }
- },
- [`&${componentCls}-checked ${switchInnerCls}`]: {
- paddingInlineStart: innerMinMargin,
- paddingInlineEnd: innerMaxMargin,
- [`${switchInnerCls}-checked`]: {
- marginInlineStart: 0,
- marginInlineEnd: 0
- },
- [`${switchInnerCls}-unchecked`]: {
- marginInlineStart: `calc(100% - ${trackPaddingCalc} + ${innerMaxMarginCalc})`,
- marginInlineEnd: `calc(-100% + ${trackPaddingCalc} - ${innerMaxMarginCalc})`
- }
- },
- [`&:not(${componentCls}-disabled):active`]: {
- [`&:not(${componentCls}-checked) ${switchInnerCls}`]: {
- [`${switchInnerCls}-unchecked`]: {
- marginInlineStart: calc(trackPadding).mul(2).equal(),
- marginInlineEnd: calc(trackPadding).mul(-1).mul(2).equal()
- }
- },
- [`&${componentCls}-checked ${switchInnerCls}`]: {
- [`${switchInnerCls}-checked`]: {
- marginInlineStart: calc(trackPadding).mul(-1).mul(2).equal(),
- marginInlineEnd: calc(trackPadding).mul(2).equal()
- }
- }
- }
- }
- };
- };
- const genSwitchStyle = token => {
- const {
- componentCls,
- trackHeight,
- trackMinWidth
- } = token;
- return {
- [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign({}, (0, _style.resetComponent)(token)), {
- position: 'relative',
- display: 'inline-block',
- boxSizing: 'border-box',
- minWidth: trackMinWidth,
- height: trackHeight,
- lineHeight: (0, _cssinjs.unit)(trackHeight),
- verticalAlign: 'middle',
- background: token.colorTextQuaternary,
- border: '0',
- borderRadius: 100,
- cursor: 'pointer',
- transition: `all ${token.motionDurationMid}`,
- userSelect: 'none',
- [`&:hover:not(${componentCls}-disabled)`]: {
- background: token.colorTextTertiary
- }
- }), (0, _style.genFocusStyle)(token)), {
- [`&${componentCls}-checked`]: {
- background: token.switchColor,
- [`&:hover:not(${componentCls}-disabled)`]: {
- background: token.colorPrimaryHover
- }
- },
- [`&${componentCls}-loading, &${componentCls}-disabled`]: {
- cursor: 'not-allowed',
- opacity: token.switchDisabledOpacity,
- '*': {
- boxShadow: 'none',
- cursor: 'not-allowed'
- }
- },
- // rtl style
- [`&${componentCls}-rtl`]: {
- direction: 'rtl'
- }
- })
- };
- };
- // ============================== Export ==============================
- const prepareComponentToken = token => {
- const {
- fontSize,
- lineHeight,
- controlHeight,
- colorWhite
- } = token;
- const height = fontSize * lineHeight;
- const heightSM = controlHeight / 2;
- const padding = 2; // Fixed value
- const handleSize = height - padding * 2;
- const handleSizeSM = heightSM - padding * 2;
- return {
- trackHeight: height,
- trackHeightSM: heightSM,
- trackMinWidth: handleSize * 2 + padding * 4,
- trackMinWidthSM: handleSizeSM * 2 + padding * 2,
- trackPadding: padding,
- // Fixed value
- handleBg: colorWhite,
- handleSize,
- handleSizeSM,
- handleShadow: `0 2px 4px 0 ${new _fastColor.FastColor('#00230b').setA(0.2).toRgbString()}`,
- innerMinMargin: handleSize / 2,
- innerMaxMargin: handleSize + padding + padding * 2,
- innerMinMarginSM: handleSizeSM / 2,
- innerMaxMarginSM: handleSizeSM + padding + padding * 2
- };
- };
- exports.prepareComponentToken = prepareComponentToken;
- var _default = exports.default = (0, _internal.genStyleHooks)('Switch', token => {
- const switchToken = (0, _internal.mergeToken)(token, {
- switchDuration: token.motionDurationMid,
- switchColor: token.colorPrimary,
- switchDisabledOpacity: token.opacityLoading,
- switchLoadingIconSize: token.calc(token.fontSizeIcon).mul(0.75).equal(),
- switchLoadingIconColor: `rgba(0, 0, 0, ${token.opacityLoading})`,
- switchHandleActiveInset: '-30%'
- });
- return [genSwitchStyle(switchToken),
- // inner style
- genSwitchInnerStyle(switchToken),
- // handle style
- genSwitchHandleStyle(switchToken),
- // loading style
- genSwitchLoadingStyle(switchToken),
- // small style
- genSwitchSmallStyle(switchToken)];
- }, prepareComponentToken);
|