UNPKG

@aplus-frontend/antdv

Version:

Vue basic component library maintained based on ant-design-vue

320 lines (319 loc) 10.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _cssinjs = require("../../_util/cssinjs"); var _internal = require("../../theme/internal"); const skeletonClsLoading = new _cssinjs.Keyframes(`ant-skeleton-loading`, { '0%': { transform: 'translateX(-37.5%)' }, '100%': { transform: 'translateX(37.5%)' } }); const genSkeletonElementCommonSize = size => ({ height: size, lineHeight: `${size}px` }); const genSkeletonElementAvatarSize = size => (0, _extends2.default)({ width: size }, genSkeletonElementCommonSize(size)); const genSkeletonColor = token => ({ position: 'relative', // fix https://github.com/ant-design/ant-design/issues/36444 // https://monshin.github.io/202109/css/safari-border-radius-overflow-hidden/ /* stylelint-disable-next-line property-no-vendor-prefix,value-no-vendor-prefix */ zIndex: 0, overflow: 'hidden', background: 'transparent', '&::after': { position: 'absolute', top: 0, insetInlineEnd: '-150%', bottom: 0, insetInlineStart: '-150%', background: token.skeletonLoadingBackground, animationName: skeletonClsLoading, animationDuration: token.skeletonLoadingMotionDuration, animationTimingFunction: 'ease', animationIterationCount: 'infinite', content: '""' } }); const genSkeletonElementInputSize = size => (0, _extends2.default)({ width: size * 5, minWidth: size * 5 }, genSkeletonElementCommonSize(size)); const genSkeletonElementAvatar = token => { const { skeletonAvatarCls, color, controlHeight, controlHeightLG, controlHeightSM } = token; return { [`${skeletonAvatarCls}`]: (0, _extends2.default)({ display: 'inline-block', verticalAlign: 'top', background: color }, genSkeletonElementAvatarSize(controlHeight)), [`${skeletonAvatarCls}${skeletonAvatarCls}-circle`]: { borderRadius: '50%' }, [`${skeletonAvatarCls}${skeletonAvatarCls}-lg`]: (0, _extends2.default)({}, genSkeletonElementAvatarSize(controlHeightLG)), [`${skeletonAvatarCls}${skeletonAvatarCls}-sm`]: (0, _extends2.default)({}, genSkeletonElementAvatarSize(controlHeightSM)) }; }; const genSkeletonElementInput = token => { const { controlHeight, borderRadiusSM, skeletonInputCls, controlHeightLG, controlHeightSM, color } = token; return { [`${skeletonInputCls}`]: (0, _extends2.default)({ display: 'inline-block', verticalAlign: 'top', background: color, borderRadius: borderRadiusSM }, genSkeletonElementInputSize(controlHeight)), [`${skeletonInputCls}-lg`]: (0, _extends2.default)({}, genSkeletonElementInputSize(controlHeightLG)), [`${skeletonInputCls}-sm`]: (0, _extends2.default)({}, genSkeletonElementInputSize(controlHeightSM)) }; }; const genSkeletonElementImageSize = size => (0, _extends2.default)({ width: size }, genSkeletonElementCommonSize(size)); const genSkeletonElementImage = token => { const { skeletonImageCls, imageSizeBase, color, borderRadiusSM } = token; return { [`${skeletonImageCls}`]: (0, _extends2.default)((0, _extends2.default)({ display: 'flex', alignItems: 'center', justifyContent: 'center', verticalAlign: 'top', background: color, borderRadius: borderRadiusSM }, genSkeletonElementImageSize(imageSizeBase * 2)), { [`${skeletonImageCls}-path`]: { fill: '#bfbfbf' }, [`${skeletonImageCls}-svg`]: (0, _extends2.default)((0, _extends2.default)({}, genSkeletonElementImageSize(imageSizeBase)), { maxWidth: imageSizeBase * 4, maxHeight: imageSizeBase * 4 }), [`${skeletonImageCls}-svg${skeletonImageCls}-svg-circle`]: { borderRadius: '50%' } }), [`${skeletonImageCls}${skeletonImageCls}-circle`]: { borderRadius: '50%' } }; }; const genSkeletonElementButtonShape = (token, size, buttonCls) => { const { skeletonButtonCls } = token; return { [`${buttonCls}${skeletonButtonCls}-circle`]: { width: size, minWidth: size, borderRadius: '50%' }, [`${buttonCls}${skeletonButtonCls}-round`]: { borderRadius: size } }; }; const genSkeletonElementButtonSize = size => (0, _extends2.default)({ width: size * 2, minWidth: size * 2 }, genSkeletonElementCommonSize(size)); const genSkeletonElementButton = token => { const { borderRadiusSM, skeletonButtonCls, controlHeight, controlHeightLG, controlHeightSM, color } = token; return (0, _extends2.default)((0, _extends2.default)((0, _extends2.default)((0, _extends2.default)((0, _extends2.default)({ [`${skeletonButtonCls}`]: (0, _extends2.default)({ display: 'inline-block', verticalAlign: 'top', background: color, borderRadius: borderRadiusSM, width: controlHeight * 2, minWidth: controlHeight * 2 }, genSkeletonElementButtonSize(controlHeight)) }, genSkeletonElementButtonShape(token, controlHeight, skeletonButtonCls)), { [`${skeletonButtonCls}-lg`]: (0, _extends2.default)({}, genSkeletonElementButtonSize(controlHeightLG)) }), genSkeletonElementButtonShape(token, controlHeightLG, `${skeletonButtonCls}-lg`)), { [`${skeletonButtonCls}-sm`]: (0, _extends2.default)({}, genSkeletonElementButtonSize(controlHeightSM)) }), genSkeletonElementButtonShape(token, controlHeightSM, `${skeletonButtonCls}-sm`)); }; // =============================== Base =============================== const genBaseStyle = token => { const { componentCls, skeletonAvatarCls, skeletonTitleCls, skeletonParagraphCls, skeletonButtonCls, skeletonInputCls, skeletonImageCls, controlHeight, controlHeightLG, controlHeightSM, color, padding, marginSM, borderRadius, skeletonTitleHeight, skeletonBlockRadius, skeletonParagraphLineHeight, controlHeightXS, skeletonParagraphMarginTop } = token; return { [`${componentCls}`]: { display: 'table', width: '100%', [`${componentCls}-header`]: { display: 'table-cell', paddingInlineEnd: padding, verticalAlign: 'top', // Avatar [`${skeletonAvatarCls}`]: (0, _extends2.default)({ display: 'inline-block', verticalAlign: 'top', background: color }, genSkeletonElementAvatarSize(controlHeight)), [`${skeletonAvatarCls}-circle`]: { borderRadius: '50%' }, [`${skeletonAvatarCls}-lg`]: (0, _extends2.default)({}, genSkeletonElementAvatarSize(controlHeightLG)), [`${skeletonAvatarCls}-sm`]: (0, _extends2.default)({}, genSkeletonElementAvatarSize(controlHeightSM)) }, [`${componentCls}-content`]: { display: 'table-cell', width: '100%', verticalAlign: 'top', // Title [`${skeletonTitleCls}`]: { width: '100%', height: skeletonTitleHeight, background: color, borderRadius: skeletonBlockRadius, [`+ ${skeletonParagraphCls}`]: { marginBlockStart: controlHeightSM } }, // paragraph [`${skeletonParagraphCls}`]: { padding: 0, '> li': { width: '100%', height: skeletonParagraphLineHeight, listStyle: 'none', background: color, borderRadius: skeletonBlockRadius, '+ li': { marginBlockStart: controlHeightXS } } }, [`${skeletonParagraphCls}> li:last-child:not(:first-child):not(:nth-child(2))`]: { width: '61%' } }, [`&-round ${componentCls}-content`]: { [`${skeletonTitleCls}, ${skeletonParagraphCls} > li`]: { borderRadius } } }, [`${componentCls}-with-avatar ${componentCls}-content`]: { // Title [`${skeletonTitleCls}`]: { marginBlockStart: marginSM, [`+ ${skeletonParagraphCls}`]: { marginBlockStart: skeletonParagraphMarginTop } } }, // Skeleton element [`${componentCls}${componentCls}-element`]: (0, _extends2.default)((0, _extends2.default)((0, _extends2.default)((0, _extends2.default)({ display: 'inline-block', width: 'auto' }, genSkeletonElementButton(token)), genSkeletonElementAvatar(token)), genSkeletonElementInput(token)), genSkeletonElementImage(token)), // Skeleton Block Button, Input [`${componentCls}${componentCls}-block`]: { width: '100%', [`${skeletonButtonCls}`]: { width: '100%' }, [`${skeletonInputCls}`]: { width: '100%' } }, // With active animation [`${componentCls}${componentCls}-active`]: { [` ${skeletonTitleCls}, ${skeletonParagraphCls} > li, ${skeletonAvatarCls}, ${skeletonButtonCls}, ${skeletonInputCls}, ${skeletonImageCls} `]: (0, _extends2.default)({}, genSkeletonColor(token)) } }; }; // ============================== Export ============================== var _default = exports.default = (0, _internal.genComponentStyleHook)('Skeleton', token => { const { componentCls } = token; const skeletonToken = (0, _internal.mergeToken)(token, { skeletonAvatarCls: `${componentCls}-avatar`, skeletonTitleCls: `${componentCls}-title`, skeletonParagraphCls: `${componentCls}-paragraph`, skeletonButtonCls: `${componentCls}-button`, skeletonInputCls: `${componentCls}-input`, skeletonImageCls: `${componentCls}-image`, imageSizeBase: token.controlHeight * 1.5, skeletonTitleHeight: token.controlHeight / 2, skeletonBlockRadius: token.borderRadiusSM, skeletonParagraphLineHeight: token.controlHeight / 2, skeletonParagraphMarginTop: token.marginLG + token.marginXXS, borderRadius: 100, skeletonLoadingBackground: `linear-gradient(90deg, ${token.color} 25%, ${token.colorGradientEnd} 37%, ${token.color} 63%)`, skeletonLoadingMotionDuration: '1.4s' }); return [genBaseStyle(skeletonToken)]; }, token => { const { colorFillContent, colorFill } = token; return { color: colorFillContent, colorGradientEnd: colorFill }; });