index.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  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 _style = require("../../style");
  8. var _internal = require("../../theme/internal");
  9. const genBorderedStyle = token => {
  10. const {
  11. listBorderedCls,
  12. componentCls,
  13. paddingLG,
  14. margin,
  15. itemPaddingSM,
  16. itemPaddingLG,
  17. marginLG,
  18. borderRadiusLG
  19. } = token;
  20. return {
  21. [listBorderedCls]: {
  22. border: `${(0, _cssinjs.unit)(token.lineWidth)} ${token.lineType} ${token.colorBorder}`,
  23. borderRadius: borderRadiusLG,
  24. [`${componentCls}-header,${componentCls}-footer,${componentCls}-item`]: {
  25. paddingInline: paddingLG
  26. },
  27. [`${componentCls}-pagination`]: {
  28. margin: `${(0, _cssinjs.unit)(margin)} ${(0, _cssinjs.unit)(marginLG)}`
  29. }
  30. },
  31. [`${listBorderedCls}${componentCls}-sm`]: {
  32. [`${componentCls}-item,${componentCls}-header,${componentCls}-footer`]: {
  33. padding: itemPaddingSM
  34. }
  35. },
  36. [`${listBorderedCls}${componentCls}-lg`]: {
  37. [`${componentCls}-item,${componentCls}-header,${componentCls}-footer`]: {
  38. padding: itemPaddingLG
  39. }
  40. }
  41. };
  42. };
  43. const genResponsiveStyle = token => {
  44. const {
  45. componentCls,
  46. screenSM,
  47. screenMD,
  48. marginLG,
  49. marginSM,
  50. margin
  51. } = token;
  52. return {
  53. [`@media screen and (max-width:${screenMD}px)`]: {
  54. [componentCls]: {
  55. [`${componentCls}-item`]: {
  56. [`${componentCls}-item-action`]: {
  57. marginInlineStart: marginLG
  58. }
  59. }
  60. },
  61. [`${componentCls}-vertical`]: {
  62. [`${componentCls}-item`]: {
  63. [`${componentCls}-item-extra`]: {
  64. marginInlineStart: marginLG
  65. }
  66. }
  67. }
  68. },
  69. [`@media screen and (max-width: ${screenSM}px)`]: {
  70. [componentCls]: {
  71. [`${componentCls}-item`]: {
  72. flexWrap: 'wrap',
  73. [`${componentCls}-action`]: {
  74. marginInlineStart: marginSM
  75. }
  76. }
  77. },
  78. [`${componentCls}-vertical`]: {
  79. [`${componentCls}-item`]: {
  80. flexWrap: 'wrap-reverse',
  81. [`${componentCls}-item-main`]: {
  82. minWidth: token.contentWidth
  83. },
  84. [`${componentCls}-item-extra`]: {
  85. margin: `auto auto ${(0, _cssinjs.unit)(margin)}`
  86. }
  87. }
  88. }
  89. }
  90. };
  91. };
  92. // =============================== Base ===============================
  93. const genBaseStyle = token => {
  94. const {
  95. componentCls,
  96. antCls,
  97. controlHeight,
  98. minHeight,
  99. paddingSM,
  100. marginLG,
  101. padding,
  102. itemPadding,
  103. colorPrimary,
  104. itemPaddingSM,
  105. itemPaddingLG,
  106. paddingXS,
  107. margin,
  108. colorText,
  109. colorTextDescription,
  110. motionDurationSlow,
  111. lineWidth,
  112. headerBg,
  113. footerBg,
  114. emptyTextPadding,
  115. metaMarginBottom,
  116. avatarMarginRight,
  117. titleMarginBottom,
  118. descriptionFontSize
  119. } = token;
  120. return {
  121. [componentCls]: Object.assign(Object.assign({}, (0, _style.resetComponent)(token)), {
  122. position: 'relative',
  123. // fix https://github.com/ant-design/ant-design/issues/46177
  124. ['--rc-virtual-list-scrollbar-bg']: token.colorSplit,
  125. '*': {
  126. outline: 'none'
  127. },
  128. [`${componentCls}-header`]: {
  129. background: headerBg
  130. },
  131. [`${componentCls}-footer`]: {
  132. background: footerBg
  133. },
  134. [`${componentCls}-header, ${componentCls}-footer`]: {
  135. paddingBlock: paddingSM
  136. },
  137. [`${componentCls}-pagination`]: {
  138. marginBlockStart: marginLG,
  139. // https://github.com/ant-design/ant-design/issues/20037
  140. [`${antCls}-pagination-options`]: {
  141. textAlign: 'start'
  142. }
  143. },
  144. [`${componentCls}-spin`]: {
  145. minHeight,
  146. textAlign: 'center'
  147. },
  148. [`${componentCls}-items`]: {
  149. margin: 0,
  150. padding: 0,
  151. listStyle: 'none'
  152. },
  153. [`${componentCls}-item`]: {
  154. display: 'flex',
  155. alignItems: 'center',
  156. justifyContent: 'space-between',
  157. padding: itemPadding,
  158. color: colorText,
  159. [`${componentCls}-item-meta`]: {
  160. display: 'flex',
  161. flex: 1,
  162. alignItems: 'flex-start',
  163. maxWidth: '100%',
  164. [`${componentCls}-item-meta-avatar`]: {
  165. marginInlineEnd: avatarMarginRight
  166. },
  167. [`${componentCls}-item-meta-content`]: {
  168. flex: '1 0',
  169. width: 0,
  170. color: colorText
  171. },
  172. [`${componentCls}-item-meta-title`]: {
  173. margin: `0 0 ${(0, _cssinjs.unit)(token.marginXXS)} 0`,
  174. color: colorText,
  175. fontSize: token.fontSize,
  176. lineHeight: token.lineHeight,
  177. '> a': {
  178. color: colorText,
  179. transition: `all ${motionDurationSlow}`,
  180. '&:hover': {
  181. color: colorPrimary
  182. }
  183. }
  184. },
  185. [`${componentCls}-item-meta-description`]: {
  186. color: colorTextDescription,
  187. fontSize: descriptionFontSize,
  188. lineHeight: token.lineHeight
  189. }
  190. },
  191. [`${componentCls}-item-action`]: {
  192. flex: '0 0 auto',
  193. marginInlineStart: token.marginXXL,
  194. padding: 0,
  195. fontSize: 0,
  196. listStyle: 'none',
  197. '& > li': {
  198. position: 'relative',
  199. display: 'inline-block',
  200. padding: `0 ${(0, _cssinjs.unit)(paddingXS)}`,
  201. color: colorTextDescription,
  202. fontSize: token.fontSize,
  203. lineHeight: token.lineHeight,
  204. textAlign: 'center',
  205. '&:first-child': {
  206. paddingInlineStart: 0
  207. }
  208. },
  209. [`${componentCls}-item-action-split`]: {
  210. position: 'absolute',
  211. insetBlockStart: '50%',
  212. insetInlineEnd: 0,
  213. width: lineWidth,
  214. height: token.calc(token.fontHeight).sub(token.calc(token.marginXXS).mul(2)).equal(),
  215. transform: 'translateY(-50%)',
  216. backgroundColor: token.colorSplit
  217. }
  218. }
  219. },
  220. [`${componentCls}-empty`]: {
  221. padding: `${(0, _cssinjs.unit)(padding)} 0`,
  222. color: colorTextDescription,
  223. fontSize: token.fontSizeSM,
  224. textAlign: 'center'
  225. },
  226. [`${componentCls}-empty-text`]: {
  227. padding: emptyTextPadding,
  228. color: token.colorTextDisabled,
  229. fontSize: token.fontSize,
  230. textAlign: 'center'
  231. },
  232. // ============================ without flex ============================
  233. [`${componentCls}-item-no-flex`]: {
  234. display: 'block'
  235. }
  236. }),
  237. [`${componentCls}-grid ${antCls}-col > ${componentCls}-item`]: {
  238. display: 'block',
  239. maxWidth: '100%',
  240. marginBlockEnd: margin,
  241. paddingBlock: 0,
  242. borderBlockEnd: 'none'
  243. },
  244. [`${componentCls}-vertical ${componentCls}-item`]: {
  245. alignItems: 'initial',
  246. [`${componentCls}-item-main`]: {
  247. display: 'block',
  248. flex: 1
  249. },
  250. [`${componentCls}-item-extra`]: {
  251. marginInlineStart: marginLG
  252. },
  253. [`${componentCls}-item-meta`]: {
  254. marginBlockEnd: metaMarginBottom,
  255. [`${componentCls}-item-meta-title`]: {
  256. marginBlockStart: 0,
  257. marginBlockEnd: titleMarginBottom,
  258. color: colorText,
  259. fontSize: token.fontSizeLG,
  260. lineHeight: token.lineHeightLG
  261. }
  262. },
  263. [`${componentCls}-item-action`]: {
  264. marginBlockStart: padding,
  265. marginInlineStart: 'auto',
  266. '> li': {
  267. padding: `0 ${(0, _cssinjs.unit)(padding)}`,
  268. '&:first-child': {
  269. paddingInlineStart: 0
  270. }
  271. }
  272. }
  273. },
  274. [`${componentCls}-split ${componentCls}-item`]: {
  275. borderBlockEnd: `${(0, _cssinjs.unit)(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,
  276. '&:last-child': {
  277. borderBlockEnd: 'none'
  278. }
  279. },
  280. [`${componentCls}-split ${componentCls}-header`]: {
  281. borderBlockEnd: `${(0, _cssinjs.unit)(token.lineWidth)} ${token.lineType} ${token.colorSplit}`
  282. },
  283. [`${componentCls}-split${componentCls}-empty ${componentCls}-footer`]: {
  284. borderTop: `${(0, _cssinjs.unit)(token.lineWidth)} ${token.lineType} ${token.colorSplit}`
  285. },
  286. [`${componentCls}-loading ${componentCls}-spin-nested-loading`]: {
  287. minHeight: controlHeight
  288. },
  289. [`${componentCls}-split${componentCls}-something-after-last-item ${antCls}-spin-container > ${componentCls}-items > ${componentCls}-item:last-child`]: {
  290. borderBlockEnd: `${(0, _cssinjs.unit)(token.lineWidth)} ${token.lineType} ${token.colorSplit}`
  291. },
  292. [`${componentCls}-lg ${componentCls}-item`]: {
  293. padding: itemPaddingLG
  294. },
  295. [`${componentCls}-sm ${componentCls}-item`]: {
  296. padding: itemPaddingSM
  297. },
  298. // Horizontal
  299. [`${componentCls}:not(${componentCls}-vertical)`]: {
  300. [`${componentCls}-item-no-flex`]: {
  301. [`${componentCls}-item-action`]: {
  302. float: 'right'
  303. }
  304. }
  305. }
  306. };
  307. };
  308. const prepareComponentToken = token => ({
  309. contentWidth: 220,
  310. itemPadding: `${(0, _cssinjs.unit)(token.paddingContentVertical)} 0`,
  311. itemPaddingSM: `${(0, _cssinjs.unit)(token.paddingContentVerticalSM)} ${(0, _cssinjs.unit)(token.paddingContentHorizontal)}`,
  312. itemPaddingLG: `${(0, _cssinjs.unit)(token.paddingContentVerticalLG)} ${(0, _cssinjs.unit)(token.paddingContentHorizontalLG)}`,
  313. headerBg: 'transparent',
  314. footerBg: 'transparent',
  315. emptyTextPadding: token.padding,
  316. metaMarginBottom: token.padding,
  317. avatarMarginRight: token.padding,
  318. titleMarginBottom: token.paddingSM,
  319. descriptionFontSize: token.fontSize
  320. });
  321. // ============================== Export ==============================
  322. exports.prepareComponentToken = prepareComponentToken;
  323. var _default = exports.default = (0, _internal.genStyleHooks)('List', token => {
  324. const listToken = (0, _internal.mergeToken)(token, {
  325. listBorderedCls: `${token.componentCls}-bordered`,
  326. minHeight: token.controlHeightLG
  327. });
  328. return [genBaseStyle(listToken), genBorderedStyle(listToken), genResponsiveStyle(listToken)];
  329. }, prepareComponentToken);