123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.getMultipleSelectorUnit = exports.genOverflowStyle = exports.default = void 0;
- var _cssinjs = require("@ant-design/cssinjs");
- var _style = require("../../style");
- var _internal = require("../../theme/internal");
- /**
- * Get multiple selector needed style. The calculation:
- *
- * ContainerPadding = BasePadding - ItemMargin
- *
- * Border: ╔═══════════════════════════╗ ┬
- * ContainerPadding: ║ ║ │
- * ╟───────────────────────────╢ ┬ │
- * Item Margin: ║ ║ │ │
- * ║ ┌──────────┐ ║ │ │
- * Item(multipleItemHeight): ║ BasePadding │ Item │ ║ Overflow Container(ControlHeight)
- * ║ └──────────┘ ║ │ │
- * Item Margin: ║ ║ │ │
- * ╟───────────────────────────╢ ┴ │
- * ContainerPadding: ║ ║ │
- * Border: ╚═══════════════════════════╝ ┴
- */
- const getMultipleSelectorUnit = token => {
- const {
- multipleSelectItemHeight,
- paddingXXS,
- lineWidth,
- INTERNAL_FIXED_ITEM_MARGIN
- } = token;
- const basePadding = token.max(token.calc(paddingXXS).sub(lineWidth).equal(), 0);
- const containerPadding = token.max(token.calc(basePadding).sub(INTERNAL_FIXED_ITEM_MARGIN).equal(), 0);
- return {
- basePadding,
- containerPadding,
- itemHeight: (0, _cssinjs.unit)(multipleSelectItemHeight),
- itemLineHeight: (0, _cssinjs.unit)(token.calc(multipleSelectItemHeight).sub(token.calc(token.lineWidth).mul(2)).equal())
- };
- };
- exports.getMultipleSelectorUnit = getMultipleSelectorUnit;
- const getSelectItemStyle = token => {
- const {
- multipleSelectItemHeight,
- selectHeight,
- lineWidth
- } = token;
- const selectItemDist = token.calc(selectHeight).sub(multipleSelectItemHeight).div(2).sub(lineWidth).equal();
- return selectItemDist;
- };
- /**
- * Get the `rc-overflow` needed style.
- * It's a share style which means not affected by `size`.
- */
- const genOverflowStyle = token => {
- const {
- componentCls,
- iconCls,
- borderRadiusSM,
- motionDurationSlow,
- paddingXS,
- multipleItemColorDisabled,
- multipleItemBorderColorDisabled,
- colorIcon,
- colorIconHover,
- INTERNAL_FIXED_ITEM_MARGIN
- } = token;
- const selectOverflowPrefixCls = `${componentCls}-selection-overflow`;
- return {
- /**
- * Do not merge `height` & `line-height` under style with `selection` & `search`, since chrome
- * may update to redesign with its align logic.
- */
- // =========================== Overflow ===========================
- [selectOverflowPrefixCls]: {
- position: 'relative',
- display: 'flex',
- flex: 'auto',
- flexWrap: 'wrap',
- maxWidth: '100%',
- '&-item': {
- flex: 'none',
- alignSelf: 'center',
- // https://github.com/ant-design/ant-design/issues/54179
- maxWidth: 'calc(100% - 4px)',
- display: 'inline-flex'
- },
- // ======================== Selections ==========================
- [`${componentCls}-selection-item`]: {
- display: 'flex',
- alignSelf: 'center',
- flex: 'none',
- boxSizing: 'border-box',
- maxWidth: '100%',
- marginBlock: INTERNAL_FIXED_ITEM_MARGIN,
- borderRadius: borderRadiusSM,
- cursor: 'default',
- transition: `font-size ${motionDurationSlow}, line-height ${motionDurationSlow}, height ${motionDurationSlow}`,
- marginInlineEnd: token.calc(INTERNAL_FIXED_ITEM_MARGIN).mul(2).equal(),
- paddingInlineStart: paddingXS,
- paddingInlineEnd: token.calc(paddingXS).div(2).equal(),
- [`${componentCls}-disabled&`]: {
- color: multipleItemColorDisabled,
- borderColor: multipleItemBorderColorDisabled,
- cursor: 'not-allowed'
- },
- // It's ok not to do this, but 24px makes bottom narrow in view should adjust
- '&-content': {
- display: 'inline-block',
- marginInlineEnd: token.calc(paddingXS).div(2).equal(),
- overflow: 'hidden',
- whiteSpace: 'pre',
- // fix whitespace wrapping. custom tags display all whitespace within.
- textOverflow: 'ellipsis'
- },
- '&-remove': Object.assign(Object.assign({}, (0, _style.resetIcon)()), {
- display: 'inline-flex',
- alignItems: 'center',
- color: colorIcon,
- fontWeight: 'bold',
- fontSize: 10,
- lineHeight: 'inherit',
- cursor: 'pointer',
- [`> ${iconCls}`]: {
- verticalAlign: '-0.2em'
- },
- '&:hover': {
- color: colorIconHover
- }
- })
- }
- }
- };
- };
- exports.genOverflowStyle = genOverflowStyle;
- const genSelectionStyle = (token, suffix) => {
- const {
- componentCls,
- INTERNAL_FIXED_ITEM_MARGIN
- } = token;
- const selectOverflowPrefixCls = `${componentCls}-selection-overflow`;
- const selectItemHeight = token.multipleSelectItemHeight;
- const selectItemDist = getSelectItemStyle(token);
- const suffixCls = suffix ? `${componentCls}-${suffix}` : '';
- const multipleSelectorUnit = getMultipleSelectorUnit(token);
- return {
- [`${componentCls}-multiple${suffixCls}`]: Object.assign(Object.assign({}, genOverflowStyle(token)), {
- // ========================= Selector =========================
- [`${componentCls}-selector`]: {
- display: 'flex',
- alignItems: 'center',
- width: '100%',
- height: '100%',
- // Multiple is little different that horizontal is follow the vertical
- paddingInline: multipleSelectorUnit.basePadding,
- paddingBlock: multipleSelectorUnit.containerPadding,
- borderRadius: token.borderRadius,
- [`${componentCls}-disabled&`]: {
- background: token.multipleSelectorBgDisabled,
- cursor: 'not-allowed'
- },
- '&:after': {
- display: 'inline-block',
- width: 0,
- margin: `${(0, _cssinjs.unit)(INTERNAL_FIXED_ITEM_MARGIN)} 0`,
- lineHeight: (0, _cssinjs.unit)(selectItemHeight),
- visibility: 'hidden',
- content: '"\\a0"'
- }
- },
- // ======================== Selections ========================
- [`${componentCls}-selection-item`]: {
- height: multipleSelectorUnit.itemHeight,
- lineHeight: (0, _cssinjs.unit)(multipleSelectorUnit.itemLineHeight)
- },
- // ========================== Wrap ===========================
- [`${componentCls}-selection-wrap`]: {
- alignSelf: 'flex-start',
- '&:after': {
- lineHeight: (0, _cssinjs.unit)(selectItemHeight),
- marginBlock: INTERNAL_FIXED_ITEM_MARGIN
- }
- },
- // ========================== Input ==========================
- [`${componentCls}-prefix`]: {
- marginInlineStart: token.calc(token.inputPaddingHorizontalBase).sub(multipleSelectorUnit.basePadding).equal()
- },
- [`${selectOverflowPrefixCls}-item + ${selectOverflowPrefixCls}-item,
- ${componentCls}-prefix + ${componentCls}-selection-wrap
- `]: {
- [`${componentCls}-selection-search`]: {
- marginInlineStart: 0
- },
- [`${componentCls}-selection-placeholder`]: {
- insetInlineStart: 0
- }
- },
- // https://github.com/ant-design/ant-design/issues/44754
- // Same as `wrap:after`
- [`${selectOverflowPrefixCls}-item-suffix`]: {
- minHeight: multipleSelectorUnit.itemHeight,
- marginBlock: INTERNAL_FIXED_ITEM_MARGIN
- },
- [`${componentCls}-selection-search`]: {
- display: 'inline-flex',
- position: 'relative',
- maxWidth: '100%',
- marginInlineStart: token.calc(token.inputPaddingHorizontalBase).sub(selectItemDist).equal(),
- [`
- &-input,
- &-mirror
- `]: {
- height: selectItemHeight,
- fontFamily: token.fontFamily,
- lineHeight: (0, _cssinjs.unit)(selectItemHeight),
- transition: `all ${token.motionDurationSlow}`
- },
- '&-input': {
- width: '100%',
- minWidth: 4.1 // fix search cursor missing
- },
- '&-mirror': {
- position: 'absolute',
- top: 0,
- insetInlineStart: 0,
- insetInlineEnd: 'auto',
- zIndex: 999,
- whiteSpace: 'pre',
- // fix whitespace wrapping caused width calculation bug
- visibility: 'hidden'
- }
- },
- // ======================= Placeholder =======================
- [`${componentCls}-selection-placeholder`]: {
- position: 'absolute',
- top: '50%',
- insetInlineStart: token.calc(token.inputPaddingHorizontalBase).sub(multipleSelectorUnit.basePadding).equal(),
- insetInlineEnd: token.inputPaddingHorizontalBase,
- transform: 'translateY(-50%)',
- transition: `all ${token.motionDurationSlow}`
- }
- })
- };
- };
- function genSizeStyle(token, suffix) {
- const {
- componentCls
- } = token;
- const suffixCls = suffix ? `${componentCls}-${suffix}` : '';
- const rawStyle = {
- [`${componentCls}-multiple${suffixCls}`]: {
- fontSize: token.fontSize,
- // ========================= Selector =========================
- [`${componentCls}-selector`]: {
- [`${componentCls}-show-search&`]: {
- cursor: 'text'
- }
- },
- [`
- &${componentCls}-show-arrow ${componentCls}-selector,
- &${componentCls}-allow-clear ${componentCls}-selector
- `]: {
- paddingInlineEnd: token.calc(token.fontSizeIcon).add(token.controlPaddingHorizontal).equal()
- }
- }
- };
- return [genSelectionStyle(token, suffix), rawStyle];
- }
- const genMultipleStyle = token => {
- const {
- componentCls
- } = token;
- const smallToken = (0, _internal.mergeToken)(token, {
- selectHeight: token.controlHeightSM,
- multipleSelectItemHeight: token.multipleItemHeightSM,
- borderRadius: token.borderRadiusSM,
- borderRadiusSM: token.borderRadiusXS
- });
- const largeToken = (0, _internal.mergeToken)(token, {
- fontSize: token.fontSizeLG,
- selectHeight: token.controlHeightLG,
- multipleSelectItemHeight: token.multipleItemHeightLG,
- borderRadius: token.borderRadiusLG,
- borderRadiusSM: token.borderRadius
- });
- return [genSizeStyle(token),
- // ======================== Small ========================
- genSizeStyle(smallToken, 'sm'),
- // Padding
- {
- [`${componentCls}-multiple${componentCls}-sm`]: {
- [`${componentCls}-selection-placeholder`]: {
- insetInline: token.calc(token.controlPaddingHorizontalSM).sub(token.lineWidth).equal()
- },
- // https://github.com/ant-design/ant-design/issues/29559
- [`${componentCls}-selection-search`]: {
- marginInlineStart: 2 // Magic Number
- }
- }
- },
- // ======================== Large ========================
- genSizeStyle(largeToken, 'lg')];
- };
- var _default = exports.default = genMultipleStyle;
|