index.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.prepareComponentToken = exports.default = void 0;
  6. var _cssinjs = require("@ant-design/cssinjs");
  7. var _internal = require("../../theme/internal");
  8. const skeletonClsLoading = new _cssinjs.Keyframes(`ant-skeleton-loading`, {
  9. '0%': {
  10. backgroundPosition: '100% 50%'
  11. },
  12. '100%': {
  13. backgroundPosition: '0 50%'
  14. }
  15. });
  16. const genSkeletonElementCommonSize = size => ({
  17. height: size,
  18. lineHeight: (0, _cssinjs.unit)(size)
  19. });
  20. const genSkeletonElementAvatarSize = size => Object.assign({
  21. width: size
  22. }, genSkeletonElementCommonSize(size));
  23. const genSkeletonColor = token => ({
  24. background: token.skeletonLoadingBackground,
  25. backgroundSize: '400% 100%',
  26. animationName: skeletonClsLoading,
  27. animationDuration: token.skeletonLoadingMotionDuration,
  28. animationTimingFunction: 'ease',
  29. animationIterationCount: 'infinite'
  30. });
  31. const genSkeletonElementInputSize = (size, calc) => Object.assign({
  32. width: calc(size).mul(5).equal(),
  33. minWidth: calc(size).mul(5).equal()
  34. }, genSkeletonElementCommonSize(size));
  35. const genSkeletonElementAvatar = token => {
  36. const {
  37. skeletonAvatarCls,
  38. gradientFromColor,
  39. controlHeight,
  40. controlHeightLG,
  41. controlHeightSM
  42. } = token;
  43. return {
  44. [skeletonAvatarCls]: Object.assign({
  45. display: 'inline-block',
  46. verticalAlign: 'top',
  47. background: gradientFromColor
  48. }, genSkeletonElementAvatarSize(controlHeight)),
  49. [`${skeletonAvatarCls}${skeletonAvatarCls}-circle`]: {
  50. borderRadius: '50%'
  51. },
  52. [`${skeletonAvatarCls}${skeletonAvatarCls}-lg`]: Object.assign({}, genSkeletonElementAvatarSize(controlHeightLG)),
  53. [`${skeletonAvatarCls}${skeletonAvatarCls}-sm`]: Object.assign({}, genSkeletonElementAvatarSize(controlHeightSM))
  54. };
  55. };
  56. const genSkeletonElementInput = token => {
  57. const {
  58. controlHeight,
  59. borderRadiusSM,
  60. skeletonInputCls,
  61. controlHeightLG,
  62. controlHeightSM,
  63. gradientFromColor,
  64. calc
  65. } = token;
  66. return {
  67. [skeletonInputCls]: Object.assign({
  68. display: 'inline-block',
  69. verticalAlign: 'top',
  70. background: gradientFromColor,
  71. borderRadius: borderRadiusSM
  72. }, genSkeletonElementInputSize(controlHeight, calc)),
  73. [`${skeletonInputCls}-lg`]: Object.assign({}, genSkeletonElementInputSize(controlHeightLG, calc)),
  74. [`${skeletonInputCls}-sm`]: Object.assign({}, genSkeletonElementInputSize(controlHeightSM, calc))
  75. };
  76. };
  77. const genSkeletonElementImageSize = size => Object.assign({
  78. width: size
  79. }, genSkeletonElementCommonSize(size));
  80. const genSkeletonElementImage = token => {
  81. const {
  82. skeletonImageCls,
  83. imageSizeBase,
  84. gradientFromColor,
  85. borderRadiusSM,
  86. calc
  87. } = token;
  88. return {
  89. [skeletonImageCls]: Object.assign(Object.assign({
  90. display: 'inline-flex',
  91. alignItems: 'center',
  92. justifyContent: 'center',
  93. verticalAlign: 'middle',
  94. background: gradientFromColor,
  95. borderRadius: borderRadiusSM
  96. }, genSkeletonElementImageSize(calc(imageSizeBase).mul(2).equal())), {
  97. [`${skeletonImageCls}-path`]: {
  98. fill: '#bfbfbf'
  99. },
  100. [`${skeletonImageCls}-svg`]: Object.assign(Object.assign({}, genSkeletonElementImageSize(imageSizeBase)), {
  101. maxWidth: calc(imageSizeBase).mul(4).equal(),
  102. maxHeight: calc(imageSizeBase).mul(4).equal()
  103. }),
  104. [`${skeletonImageCls}-svg${skeletonImageCls}-svg-circle`]: {
  105. borderRadius: '50%'
  106. }
  107. }),
  108. [`${skeletonImageCls}${skeletonImageCls}-circle`]: {
  109. borderRadius: '50%'
  110. }
  111. };
  112. };
  113. const genSkeletonElementButtonShape = (token, size, buttonCls) => {
  114. const {
  115. skeletonButtonCls
  116. } = token;
  117. return {
  118. [`${buttonCls}${skeletonButtonCls}-circle`]: {
  119. width: size,
  120. minWidth: size,
  121. borderRadius: '50%'
  122. },
  123. [`${buttonCls}${skeletonButtonCls}-round`]: {
  124. borderRadius: size
  125. }
  126. };
  127. };
  128. const genSkeletonElementButtonSize = (size, calc) => Object.assign({
  129. width: calc(size).mul(2).equal(),
  130. minWidth: calc(size).mul(2).equal()
  131. }, genSkeletonElementCommonSize(size));
  132. const genSkeletonElementButton = token => {
  133. const {
  134. borderRadiusSM,
  135. skeletonButtonCls,
  136. controlHeight,
  137. controlHeightLG,
  138. controlHeightSM,
  139. gradientFromColor,
  140. calc
  141. } = token;
  142. return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({
  143. [skeletonButtonCls]: Object.assign({
  144. display: 'inline-block',
  145. verticalAlign: 'top',
  146. background: gradientFromColor,
  147. borderRadius: borderRadiusSM,
  148. width: calc(controlHeight).mul(2).equal(),
  149. minWidth: calc(controlHeight).mul(2).equal()
  150. }, genSkeletonElementButtonSize(controlHeight, calc))
  151. }, genSkeletonElementButtonShape(token, controlHeight, skeletonButtonCls)), {
  152. [`${skeletonButtonCls}-lg`]: Object.assign({}, genSkeletonElementButtonSize(controlHeightLG, calc))
  153. }), genSkeletonElementButtonShape(token, controlHeightLG, `${skeletonButtonCls}-lg`)), {
  154. [`${skeletonButtonCls}-sm`]: Object.assign({}, genSkeletonElementButtonSize(controlHeightSM, calc))
  155. }), genSkeletonElementButtonShape(token, controlHeightSM, `${skeletonButtonCls}-sm`));
  156. };
  157. // =============================== Base ===============================
  158. const genBaseStyle = token => {
  159. const {
  160. componentCls,
  161. skeletonAvatarCls,
  162. skeletonTitleCls,
  163. skeletonParagraphCls,
  164. skeletonButtonCls,
  165. skeletonInputCls,
  166. skeletonImageCls,
  167. controlHeight,
  168. controlHeightLG,
  169. controlHeightSM,
  170. gradientFromColor,
  171. padding,
  172. marginSM,
  173. borderRadius,
  174. titleHeight,
  175. blockRadius,
  176. paragraphLiHeight,
  177. controlHeightXS,
  178. paragraphMarginTop
  179. } = token;
  180. return {
  181. [componentCls]: {
  182. display: 'table',
  183. width: '100%',
  184. [`${componentCls}-header`]: {
  185. display: 'table-cell',
  186. paddingInlineEnd: padding,
  187. verticalAlign: 'top',
  188. // Avatar
  189. [skeletonAvatarCls]: Object.assign({
  190. display: 'inline-block',
  191. verticalAlign: 'top',
  192. background: gradientFromColor
  193. }, genSkeletonElementAvatarSize(controlHeight)),
  194. [`${skeletonAvatarCls}-circle`]: {
  195. borderRadius: '50%'
  196. },
  197. [`${skeletonAvatarCls}-lg`]: Object.assign({}, genSkeletonElementAvatarSize(controlHeightLG)),
  198. [`${skeletonAvatarCls}-sm`]: Object.assign({}, genSkeletonElementAvatarSize(controlHeightSM))
  199. },
  200. [`${componentCls}-content`]: {
  201. display: 'table-cell',
  202. width: '100%',
  203. verticalAlign: 'top',
  204. // Title
  205. [skeletonTitleCls]: {
  206. width: '100%',
  207. height: titleHeight,
  208. background: gradientFromColor,
  209. borderRadius: blockRadius,
  210. [`+ ${skeletonParagraphCls}`]: {
  211. marginBlockStart: controlHeightSM
  212. }
  213. },
  214. // paragraph
  215. [skeletonParagraphCls]: {
  216. padding: 0,
  217. '> li': {
  218. width: '100%',
  219. height: paragraphLiHeight,
  220. listStyle: 'none',
  221. background: gradientFromColor,
  222. borderRadius: blockRadius,
  223. '+ li': {
  224. marginBlockStart: controlHeightXS
  225. }
  226. }
  227. },
  228. [`${skeletonParagraphCls}> li:last-child:not(:first-child):not(:nth-child(2))`]: {
  229. width: '61%'
  230. }
  231. },
  232. [`&-round ${componentCls}-content`]: {
  233. [`${skeletonTitleCls}, ${skeletonParagraphCls} > li`]: {
  234. borderRadius
  235. }
  236. }
  237. },
  238. [`${componentCls}-with-avatar ${componentCls}-content`]: {
  239. // Title
  240. [skeletonTitleCls]: {
  241. marginBlockStart: marginSM,
  242. [`+ ${skeletonParagraphCls}`]: {
  243. marginBlockStart: paragraphMarginTop
  244. }
  245. }
  246. },
  247. // Skeleton element
  248. [`${componentCls}${componentCls}-element`]: Object.assign(Object.assign(Object.assign(Object.assign({
  249. display: 'inline-block',
  250. width: 'auto'
  251. }, genSkeletonElementButton(token)), genSkeletonElementAvatar(token)), genSkeletonElementInput(token)), genSkeletonElementImage(token)),
  252. // Skeleton Block Button, Input
  253. [`${componentCls}${componentCls}-block`]: {
  254. width: '100%',
  255. [skeletonButtonCls]: {
  256. width: '100%'
  257. },
  258. [skeletonInputCls]: {
  259. width: '100%'
  260. }
  261. },
  262. // With active animation
  263. [`${componentCls}${componentCls}-active`]: {
  264. [`
  265. ${skeletonTitleCls},
  266. ${skeletonParagraphCls} > li,
  267. ${skeletonAvatarCls},
  268. ${skeletonButtonCls},
  269. ${skeletonInputCls},
  270. ${skeletonImageCls}
  271. `]: Object.assign({}, genSkeletonColor(token))
  272. }
  273. };
  274. };
  275. // ============================== Export ==============================
  276. const prepareComponentToken = token => {
  277. const {
  278. colorFillContent,
  279. colorFill
  280. } = token;
  281. const gradientFromColor = colorFillContent;
  282. const gradientToColor = colorFill;
  283. return {
  284. color: gradientFromColor,
  285. colorGradientEnd: gradientToColor,
  286. gradientFromColor,
  287. gradientToColor,
  288. titleHeight: token.controlHeight / 2,
  289. blockRadius: token.borderRadiusSM,
  290. paragraphMarginTop: token.marginLG + token.marginXXS,
  291. paragraphLiHeight: token.controlHeight / 2
  292. };
  293. };
  294. exports.prepareComponentToken = prepareComponentToken;
  295. var _default = exports.default = (0, _internal.genStyleHooks)('Skeleton', token => {
  296. const {
  297. componentCls,
  298. calc
  299. } = token;
  300. const skeletonToken = (0, _internal.mergeToken)(token, {
  301. skeletonAvatarCls: `${componentCls}-avatar`,
  302. skeletonTitleCls: `${componentCls}-title`,
  303. skeletonParagraphCls: `${componentCls}-paragraph`,
  304. skeletonButtonCls: `${componentCls}-button`,
  305. skeletonInputCls: `${componentCls}-input`,
  306. skeletonImageCls: `${componentCls}-image`,
  307. imageSizeBase: calc(token.controlHeight).mul(1.5).equal(),
  308. borderRadius: 100,
  309. // Large number to make capsule shape
  310. skeletonLoadingBackground: `linear-gradient(90deg, ${token.gradientFromColor} 25%, ${token.gradientToColor} 37%, ${token.gradientFromColor} 63%)`,
  311. skeletonLoadingMotionDuration: '1.4s'
  312. });
  313. return genBaseStyle(skeletonToken);
  314. }, prepareComponentToken, {
  315. deprecatedTokens: [['color', 'gradientFromColor'], ['colorGradientEnd', 'gradientToColor']]
  316. });