"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 } });