index.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.useRowStyle = exports.useColStyle = exports.prepareRowComponentToken = exports.prepareColComponentToken = exports.getMediaSize = void 0;
  6. var _cssinjs = require("@ant-design/cssinjs");
  7. var _internal = require("../../theme/internal");
  8. // ============================== Row-Shared ==============================
  9. const genGridRowStyle = token => {
  10. const {
  11. componentCls
  12. } = token;
  13. return {
  14. // Grid system
  15. [componentCls]: {
  16. display: 'flex',
  17. flexFlow: 'row wrap',
  18. minWidth: 0,
  19. '&::before, &::after': {
  20. display: 'flex'
  21. },
  22. '&-no-wrap': {
  23. flexWrap: 'nowrap'
  24. },
  25. // The origin of the X-axis
  26. '&-start': {
  27. justifyContent: 'flex-start'
  28. },
  29. // The center of the X-axis
  30. '&-center': {
  31. justifyContent: 'center'
  32. },
  33. // The opposite of the X-axis
  34. '&-end': {
  35. justifyContent: 'flex-end'
  36. },
  37. '&-space-between': {
  38. justifyContent: 'space-between'
  39. },
  40. '&-space-around': {
  41. justifyContent: 'space-around'
  42. },
  43. '&-space-evenly': {
  44. justifyContent: 'space-evenly'
  45. },
  46. // Align at the top
  47. '&-top': {
  48. alignItems: 'flex-start'
  49. },
  50. // Align at the center
  51. '&-middle': {
  52. alignItems: 'center'
  53. },
  54. '&-bottom': {
  55. alignItems: 'flex-end'
  56. }
  57. }
  58. };
  59. };
  60. // ============================== Col-Shared ==============================
  61. const genGridColStyle = token => {
  62. const {
  63. componentCls
  64. } = token;
  65. return {
  66. // Grid system
  67. [componentCls]: {
  68. position: 'relative',
  69. maxWidth: '100%',
  70. // Prevent columns from collapsing when empty
  71. minHeight: 1
  72. }
  73. };
  74. };
  75. const genLoopGridColumnsStyle = (token, sizeCls) => {
  76. const {
  77. prefixCls,
  78. componentCls,
  79. gridColumns
  80. } = token;
  81. const gridColumnsStyle = {};
  82. for (let i = gridColumns; i >= 0; i--) {
  83. if (i === 0) {
  84. gridColumnsStyle[`${componentCls}${sizeCls}-${i}`] = {
  85. display: 'none'
  86. };
  87. gridColumnsStyle[`${componentCls}-push-${i}`] = {
  88. insetInlineStart: 'auto'
  89. };
  90. gridColumnsStyle[`${componentCls}-pull-${i}`] = {
  91. insetInlineEnd: 'auto'
  92. };
  93. gridColumnsStyle[`${componentCls}${sizeCls}-push-${i}`] = {
  94. insetInlineStart: 'auto'
  95. };
  96. gridColumnsStyle[`${componentCls}${sizeCls}-pull-${i}`] = {
  97. insetInlineEnd: 'auto'
  98. };
  99. gridColumnsStyle[`${componentCls}${sizeCls}-offset-${i}`] = {
  100. marginInlineStart: 0
  101. };
  102. gridColumnsStyle[`${componentCls}${sizeCls}-order-${i}`] = {
  103. order: 0
  104. };
  105. } else {
  106. gridColumnsStyle[`${componentCls}${sizeCls}-${i}`] = [
  107. // https://github.com/ant-design/ant-design/issues/44456
  108. // Form set `display: flex` on Col which will override `display: block`.
  109. // Let's get it from css variable to support override.
  110. {
  111. ['--ant-display']: 'block',
  112. // Fallback to display if variable not support
  113. display: 'block'
  114. }, {
  115. display: 'var(--ant-display)',
  116. flex: `0 0 ${i / gridColumns * 100}%`,
  117. maxWidth: `${i / gridColumns * 100}%`
  118. }];
  119. gridColumnsStyle[`${componentCls}${sizeCls}-push-${i}`] = {
  120. insetInlineStart: `${i / gridColumns * 100}%`
  121. };
  122. gridColumnsStyle[`${componentCls}${sizeCls}-pull-${i}`] = {
  123. insetInlineEnd: `${i / gridColumns * 100}%`
  124. };
  125. gridColumnsStyle[`${componentCls}${sizeCls}-offset-${i}`] = {
  126. marginInlineStart: `${i / gridColumns * 100}%`
  127. };
  128. gridColumnsStyle[`${componentCls}${sizeCls}-order-${i}`] = {
  129. order: i
  130. };
  131. }
  132. }
  133. // Flex CSS Var
  134. gridColumnsStyle[`${componentCls}${sizeCls}-flex`] = {
  135. flex: `var(--${prefixCls}${sizeCls}-flex)`
  136. };
  137. return gridColumnsStyle;
  138. };
  139. const genGridStyle = (token, sizeCls) => genLoopGridColumnsStyle(token, sizeCls);
  140. const genGridMediaStyle = (token, screenSize, sizeCls) => ({
  141. [`@media (min-width: ${(0, _cssinjs.unit)(screenSize)})`]: Object.assign({}, genGridStyle(token, sizeCls))
  142. });
  143. const prepareRowComponentToken = () => ({});
  144. exports.prepareRowComponentToken = prepareRowComponentToken;
  145. const prepareColComponentToken = () => ({});
  146. // ============================== Export ==============================
  147. exports.prepareColComponentToken = prepareColComponentToken;
  148. const useRowStyle = exports.useRowStyle = (0, _internal.genStyleHooks)('Grid', genGridRowStyle, prepareRowComponentToken);
  149. const getMediaSize = token => {
  150. const mediaSizesMap = {
  151. xs: token.screenXSMin,
  152. sm: token.screenSMMin,
  153. md: token.screenMDMin,
  154. lg: token.screenLGMin,
  155. xl: token.screenXLMin,
  156. xxl: token.screenXXLMin
  157. };
  158. return mediaSizesMap;
  159. };
  160. exports.getMediaSize = getMediaSize;
  161. const useColStyle = exports.useColStyle = (0, _internal.genStyleHooks)('Grid', token => {
  162. const gridToken = (0, _internal.mergeToken)(token, {
  163. gridColumns: 24 // Row is divided into 24 parts in Grid
  164. });
  165. const gridMediaSizesMap = getMediaSize(gridToken);
  166. delete gridMediaSizesMap.xs;
  167. return [genGridColStyle(gridToken), genGridStyle(gridToken, ''), genGridStyle(gridToken, '-xs'), Object.keys(gridMediaSizesMap).map(key => genGridMediaStyle(gridToken, gridMediaSizesMap[key], `-${key}`)).reduce((pre, cur) => Object.assign(Object.assign({}, pre), cur), {})];
  168. }, prepareColComponentToken);