| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- "use strict";
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.MAX_VERTICAL_CONTENT_RADIUS = void 0;
- exports.default = getArrowStyle;
- exports.getArrowOffset = getArrowOffset;
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
- var _roundedArrow = require("./roundedArrow");
- function connectArrowCls(classList) {
- let showArrowCls = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
- return classList.map(cls => `${showArrowCls}${cls}`).join(',');
- }
- const MAX_VERTICAL_CONTENT_RADIUS = exports.MAX_VERTICAL_CONTENT_RADIUS = 8;
- function getArrowOffset(options) {
- const maxVerticalContentRadius = MAX_VERTICAL_CONTENT_RADIUS;
- const {
- sizePopupArrow,
- contentRadius,
- borderRadiusOuter,
- limitVerticalRadius
- } = options;
- const arrowInnerOffset = sizePopupArrow / 2 - Math.ceil(borderRadiusOuter * (Math.sqrt(2) - 1));
- const dropdownArrowOffset = (contentRadius > 12 ? contentRadius + 2 : 12) - arrowInnerOffset;
- const dropdownArrowOffsetVertical = limitVerticalRadius ? maxVerticalContentRadius - arrowInnerOffset : dropdownArrowOffset;
- return {
- dropdownArrowOffset,
- dropdownArrowOffsetVertical
- };
- }
- function getArrowStyle(token, options) {
- const {
- componentCls,
- sizePopupArrow,
- marginXXS,
- borderRadiusXS,
- borderRadiusOuter,
- boxShadowPopoverArrow
- } = token;
- const {
- colorBg,
- showArrowCls,
- contentRadius = token.borderRadiusLG,
- limitVerticalRadius
- } = options;
- const {
- dropdownArrowOffsetVertical,
- dropdownArrowOffset
- } = getArrowOffset({
- sizePopupArrow,
- contentRadius,
- borderRadiusOuter,
- limitVerticalRadius
- });
- const dropdownArrowDistance = sizePopupArrow / 2 + marginXXS;
- return {
- [componentCls]: {
- // ============================ Basic ============================
- [`${componentCls}-arrow`]: [(0, _extends2.default)((0, _extends2.default)({
- position: 'absolute',
- zIndex: 1,
- display: 'block'
- }, (0, _roundedArrow.roundedArrow)(sizePopupArrow, borderRadiusXS, borderRadiusOuter, colorBg, boxShadowPopoverArrow)), {
- '&:before': {
- background: colorBg
- }
- })],
- // ========================== Placement ==========================
- // Here handle the arrow position and rotate stuff
- // >>>>> Top
- [[`&-placement-top ${componentCls}-arrow`, `&-placement-topLeft ${componentCls}-arrow`, `&-placement-topRight ${componentCls}-arrow`].join(',')]: {
- bottom: 0,
- transform: 'translateY(100%) rotate(180deg)'
- },
- [`&-placement-top ${componentCls}-arrow`]: {
- left: {
- _skip_check_: true,
- value: '50%'
- },
- transform: 'translateX(-50%) translateY(100%) rotate(180deg)'
- },
- [`&-placement-topLeft ${componentCls}-arrow`]: {
- left: {
- _skip_check_: true,
- value: dropdownArrowOffset
- }
- },
- [`&-placement-topRight ${componentCls}-arrow`]: {
- right: {
- _skip_check_: true,
- value: dropdownArrowOffset
- }
- },
- // >>>>> Bottom
- [[`&-placement-bottom ${componentCls}-arrow`, `&-placement-bottomLeft ${componentCls}-arrow`, `&-placement-bottomRight ${componentCls}-arrow`].join(',')]: {
- top: 0,
- transform: `translateY(-100%)`
- },
- [`&-placement-bottom ${componentCls}-arrow`]: {
- left: {
- _skip_check_: true,
- value: '50%'
- },
- transform: `translateX(-50%) translateY(-100%)`
- },
- [`&-placement-bottomLeft ${componentCls}-arrow`]: {
- left: {
- _skip_check_: true,
- value: dropdownArrowOffset
- }
- },
- [`&-placement-bottomRight ${componentCls}-arrow`]: {
- right: {
- _skip_check_: true,
- value: dropdownArrowOffset
- }
- },
- // >>>>> Left
- [[`&-placement-left ${componentCls}-arrow`, `&-placement-leftTop ${componentCls}-arrow`, `&-placement-leftBottom ${componentCls}-arrow`].join(',')]: {
- right: {
- _skip_check_: true,
- value: 0
- },
- transform: 'translateX(100%) rotate(90deg)'
- },
- [`&-placement-left ${componentCls}-arrow`]: {
- top: {
- _skip_check_: true,
- value: '50%'
- },
- transform: 'translateY(-50%) translateX(100%) rotate(90deg)'
- },
- [`&-placement-leftTop ${componentCls}-arrow`]: {
- top: dropdownArrowOffsetVertical
- },
- [`&-placement-leftBottom ${componentCls}-arrow`]: {
- bottom: dropdownArrowOffsetVertical
- },
- // >>>>> Right
- [[`&-placement-right ${componentCls}-arrow`, `&-placement-rightTop ${componentCls}-arrow`, `&-placement-rightBottom ${componentCls}-arrow`].join(',')]: {
- left: {
- _skip_check_: true,
- value: 0
- },
- transform: 'translateX(-100%) rotate(-90deg)'
- },
- [`&-placement-right ${componentCls}-arrow`]: {
- top: {
- _skip_check_: true,
- value: '50%'
- },
- transform: 'translateY(-50%) translateX(-100%) rotate(-90deg)'
- },
- [`&-placement-rightTop ${componentCls}-arrow`]: {
- top: dropdownArrowOffsetVertical
- },
- [`&-placement-rightBottom ${componentCls}-arrow`]: {
- bottom: dropdownArrowOffsetVertical
- },
- // =========================== Offset ============================
- // Offset the popover to account for the dropdown arrow
- // >>>>> Top
- [connectArrowCls([`&-placement-topLeft`, `&-placement-top`, `&-placement-topRight`].map(cls => cls += ':not(&-arrow-hidden)'), showArrowCls)]: {
- paddingBottom: dropdownArrowDistance
- },
- // >>>>> Bottom
- [connectArrowCls([`&-placement-bottomLeft`, `&-placement-bottom`, `&-placement-bottomRight`].map(cls => cls += ':not(&-arrow-hidden)'), showArrowCls)]: {
- paddingTop: dropdownArrowDistance
- },
- // >>>>> Left
- [connectArrowCls([`&-placement-leftTop`, `&-placement-left`, `&-placement-leftBottom`].map(cls => cls += ':not(&-arrow-hidden)'), showArrowCls)]: {
- paddingRight: {
- _skip_check_: true,
- value: dropdownArrowDistance
- }
- },
- // >>>>> Right
- [connectArrowCls([`&-placement-rightTop`, `&-placement-right`, `&-placement-rightBottom`].map(cls => cls += ':not(&-arrow-hidden)'), showArrowCls)]: {
- paddingLeft: {
- _skip_check_: true,
- value: dropdownArrowDistance
- }
- }
- }
- };
- }
|