235 lines
7.6 KiB
JavaScript
235 lines
7.6 KiB
JavaScript
"use strict";
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
var _style = require("../../style");
|
|
var _compactItem = require("../../style/compact-item");
|
|
var _internal = require("../../theme/internal");
|
|
var _dropdown = _interopRequireDefault(require("./dropdown"));
|
|
var _multiple = _interopRequireDefault(require("./multiple"));
|
|
var _single = _interopRequireDefault(require("./single"));
|
|
var _token = require("./token");
|
|
var _variants = _interopRequireDefault(require("./variants"));
|
|
// ============================= Selector =============================
|
|
const genSelectorStyle = token => {
|
|
const {
|
|
componentCls
|
|
} = token;
|
|
return {
|
|
position: 'relative',
|
|
transition: `all ${token.motionDurationMid} ${token.motionEaseInOut}`,
|
|
input: {
|
|
cursor: 'pointer'
|
|
},
|
|
[`${componentCls}-show-search&`]: {
|
|
cursor: 'text',
|
|
input: {
|
|
cursor: 'auto',
|
|
color: 'inherit',
|
|
height: '100%'
|
|
}
|
|
},
|
|
[`${componentCls}-disabled&`]: {
|
|
cursor: 'not-allowed',
|
|
input: {
|
|
cursor: 'not-allowed'
|
|
}
|
|
}
|
|
};
|
|
};
|
|
// ============================== Styles ==============================
|
|
// /* Reset search input style */
|
|
const getSearchInputWithoutBorderStyle = token => {
|
|
const {
|
|
componentCls
|
|
} = token;
|
|
return {
|
|
[`${componentCls}-selection-search-input`]: {
|
|
margin: 0,
|
|
padding: 0,
|
|
background: 'transparent',
|
|
border: 'none',
|
|
outline: 'none',
|
|
appearance: 'none',
|
|
fontFamily: 'inherit',
|
|
'&::-webkit-search-cancel-button': {
|
|
display: 'none',
|
|
'-webkit-appearance': 'none'
|
|
}
|
|
}
|
|
};
|
|
};
|
|
// =============================== Base ===============================
|
|
const genBaseStyle = token => {
|
|
const {
|
|
antCls,
|
|
componentCls,
|
|
inputPaddingHorizontalBase,
|
|
iconCls
|
|
} = token;
|
|
return {
|
|
[componentCls]: Object.assign(Object.assign({}, (0, _style.resetComponent)(token)), {
|
|
position: 'relative',
|
|
display: 'inline-block',
|
|
cursor: 'pointer',
|
|
[`&:not(${componentCls}-customize-input) ${componentCls}-selector`]: Object.assign(Object.assign({}, genSelectorStyle(token)), getSearchInputWithoutBorderStyle(token)),
|
|
// ======================== Selection ========================
|
|
[`${componentCls}-selection-item`]: Object.assign(Object.assign({
|
|
flex: 1,
|
|
fontWeight: 'normal',
|
|
position: 'relative',
|
|
userSelect: 'none'
|
|
}, _style.textEllipsis), {
|
|
// https://github.com/ant-design/ant-design/issues/40421
|
|
[`> ${antCls}-typography`]: {
|
|
display: 'inline'
|
|
}
|
|
}),
|
|
// ======================= Placeholder =======================
|
|
[`${componentCls}-selection-placeholder`]: Object.assign(Object.assign({}, _style.textEllipsis), {
|
|
flex: 1,
|
|
color: token.colorTextPlaceholder,
|
|
pointerEvents: 'none'
|
|
}),
|
|
// ========================== Arrow ==========================
|
|
[`${componentCls}-arrow`]: Object.assign(Object.assign({}, (0, _style.resetIcon)()), {
|
|
position: 'absolute',
|
|
top: '50%',
|
|
insetInlineStart: 'auto',
|
|
insetInlineEnd: inputPaddingHorizontalBase,
|
|
height: token.fontSizeIcon,
|
|
marginTop: token.calc(token.fontSizeIcon).mul(-1).div(2).equal(),
|
|
color: token.colorTextQuaternary,
|
|
fontSize: token.fontSizeIcon,
|
|
lineHeight: 1,
|
|
textAlign: 'center',
|
|
pointerEvents: 'none',
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
transition: `opacity ${token.motionDurationSlow} ease`,
|
|
[iconCls]: {
|
|
verticalAlign: 'top',
|
|
transition: `transform ${token.motionDurationSlow}`,
|
|
'> svg': {
|
|
verticalAlign: 'top'
|
|
},
|
|
[`&:not(${componentCls}-suffix)`]: {
|
|
pointerEvents: 'auto'
|
|
}
|
|
},
|
|
[`${componentCls}-disabled &`]: {
|
|
cursor: 'not-allowed'
|
|
},
|
|
'> *:not(:last-child)': {
|
|
marginInlineEnd: 8 // FIXME: magic
|
|
}
|
|
}),
|
|
// ========================== Clear ==========================
|
|
[`${componentCls}-clear`]: {
|
|
position: 'absolute',
|
|
top: '50%',
|
|
insetInlineStart: 'auto',
|
|
insetInlineEnd: inputPaddingHorizontalBase,
|
|
zIndex: 1,
|
|
display: 'inline-block',
|
|
width: token.fontSizeIcon,
|
|
height: token.fontSizeIcon,
|
|
marginTop: token.calc(token.fontSizeIcon).mul(-1).div(2).equal(),
|
|
color: token.colorTextQuaternary,
|
|
fontSize: token.fontSizeIcon,
|
|
fontStyle: 'normal',
|
|
lineHeight: 1,
|
|
textAlign: 'center',
|
|
textTransform: 'none',
|
|
cursor: 'pointer',
|
|
opacity: 0,
|
|
transition: `color ${token.motionDurationMid} ease, opacity ${token.motionDurationSlow} ease`,
|
|
textRendering: 'auto',
|
|
'&:before': {
|
|
display: 'block'
|
|
},
|
|
'&:hover': {
|
|
color: token.colorTextTertiary
|
|
}
|
|
},
|
|
'&:hover': {
|
|
[`${componentCls}-clear`]: {
|
|
opacity: 1
|
|
},
|
|
// Should use the following selector, but since `:has` has poor compatibility,
|
|
// we use `:not(:last-child)` instead, which may cause some problems in some cases.
|
|
// [`${componentCls}-arrow:has(+ ${componentCls}-clear)`]: {
|
|
[`${componentCls}-arrow:not(:last-child)`]: {
|
|
opacity: 0
|
|
}
|
|
}
|
|
}),
|
|
// ========================= Feedback ==========================
|
|
[`${componentCls}-has-feedback`]: {
|
|
[`${componentCls}-clear`]: {
|
|
insetInlineEnd: token.calc(inputPaddingHorizontalBase).add(token.fontSize).add(token.paddingXS).equal()
|
|
}
|
|
}
|
|
};
|
|
};
|
|
// ============================== Styles ==============================
|
|
const genSelectStyle = token => {
|
|
const {
|
|
componentCls
|
|
} = token;
|
|
return [{
|
|
[componentCls]: {
|
|
// ==================== In Form ====================
|
|
[`&${componentCls}-in-form-item`]: {
|
|
width: '100%'
|
|
}
|
|
}
|
|
},
|
|
// =====================================================
|
|
// == LTR ==
|
|
// =====================================================
|
|
// Base
|
|
genBaseStyle(token),
|
|
// Single
|
|
(0, _single.default)(token),
|
|
// Multiple
|
|
(0, _multiple.default)(token),
|
|
// Dropdown
|
|
(0, _dropdown.default)(token),
|
|
// =====================================================
|
|
// == RTL ==
|
|
// =====================================================
|
|
{
|
|
[`${componentCls}-rtl`]: {
|
|
direction: 'rtl'
|
|
}
|
|
},
|
|
// =====================================================
|
|
// == Space Compact ==
|
|
// =====================================================
|
|
(0, _compactItem.genCompactItemStyle)(token, {
|
|
borderElCls: `${componentCls}-selector`,
|
|
focusElCls: `${componentCls}-focused`
|
|
})];
|
|
};
|
|
// ============================== Export ==============================
|
|
var _default = exports.default = (0, _internal.genStyleHooks)('Select', (token, _ref) => {
|
|
let {
|
|
rootPrefixCls
|
|
} = _ref;
|
|
const selectToken = (0, _internal.mergeToken)(token, {
|
|
rootPrefixCls,
|
|
inputPaddingHorizontalBase: token.calc(token.paddingSM).sub(1).equal(),
|
|
multipleSelectItemHeight: token.multipleItemHeight,
|
|
selectHeight: token.controlHeight
|
|
});
|
|
return [genSelectStyle(selectToken), (0, _variants.default)(selectToken)];
|
|
}, _token.prepareComponentToken, {
|
|
unitless: {
|
|
optionLineHeight: true,
|
|
optionSelectedFontWeight: true
|
|
}
|
|
}); |