index.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import _extends from "@babel/runtime/helpers/esm/extends";
  2. import { genComponentStyleHook, mergeToken } from '../../theme/internal';
  3. // ============================== Row-Shared ==============================
  4. const genGridRowStyle = token => {
  5. const {
  6. componentCls
  7. } = token;
  8. return {
  9. // Grid system
  10. [componentCls]: {
  11. display: 'flex',
  12. flexFlow: 'row wrap',
  13. minWidth: 0,
  14. '&::before, &::after': {
  15. display: 'flex'
  16. },
  17. '&-no-wrap': {
  18. flexWrap: 'nowrap'
  19. },
  20. // The origin of the X-axis
  21. '&-start': {
  22. justifyContent: 'flex-start'
  23. },
  24. // The center of the X-axis
  25. '&-center': {
  26. justifyContent: 'center'
  27. },
  28. // The opposite of the X-axis
  29. '&-end': {
  30. justifyContent: 'flex-end'
  31. },
  32. '&-space-between': {
  33. justifyContent: 'space-between'
  34. },
  35. '&-space-around ': {
  36. justifyContent: 'space-around'
  37. },
  38. '&-space-evenly ': {
  39. justifyContent: 'space-evenly'
  40. },
  41. // Align at the top
  42. '&-top': {
  43. alignItems: 'flex-start'
  44. },
  45. // Align at the center
  46. '&-middle': {
  47. alignItems: 'center'
  48. },
  49. '&-bottom': {
  50. alignItems: 'flex-end'
  51. }
  52. }
  53. };
  54. };
  55. // ============================== Col-Shared ==============================
  56. const genGridColStyle = token => {
  57. const {
  58. componentCls
  59. } = token;
  60. return {
  61. // Grid system
  62. [componentCls]: {
  63. position: 'relative',
  64. maxWidth: '100%',
  65. // Prevent columns from collapsing when empty
  66. minHeight: 1
  67. }
  68. };
  69. };
  70. const genLoopGridColumnsStyle = (token, sizeCls) => {
  71. const {
  72. componentCls,
  73. gridColumns
  74. } = token;
  75. const gridColumnsStyle = {};
  76. for (let i = gridColumns; i >= 0; i--) {
  77. if (i === 0) {
  78. gridColumnsStyle[`${componentCls}${sizeCls}-${i}`] = {
  79. display: 'none'
  80. };
  81. gridColumnsStyle[`${componentCls}-push-${i}`] = {
  82. insetInlineStart: 'auto'
  83. };
  84. gridColumnsStyle[`${componentCls}-pull-${i}`] = {
  85. insetInlineEnd: 'auto'
  86. };
  87. gridColumnsStyle[`${componentCls}${sizeCls}-push-${i}`] = {
  88. insetInlineStart: 'auto'
  89. };
  90. gridColumnsStyle[`${componentCls}${sizeCls}-pull-${i}`] = {
  91. insetInlineEnd: 'auto'
  92. };
  93. gridColumnsStyle[`${componentCls}${sizeCls}-offset-${i}`] = {
  94. marginInlineEnd: 0
  95. };
  96. gridColumnsStyle[`${componentCls}${sizeCls}-order-${i}`] = {
  97. order: 0
  98. };
  99. } else {
  100. gridColumnsStyle[`${componentCls}${sizeCls}-${i}`] = {
  101. display: 'block',
  102. flex: `0 0 ${i / gridColumns * 100}%`,
  103. maxWidth: `${i / gridColumns * 100}%`
  104. };
  105. gridColumnsStyle[`${componentCls}${sizeCls}-push-${i}`] = {
  106. insetInlineStart: `${i / gridColumns * 100}%`
  107. };
  108. gridColumnsStyle[`${componentCls}${sizeCls}-pull-${i}`] = {
  109. insetInlineEnd: `${i / gridColumns * 100}%`
  110. };
  111. gridColumnsStyle[`${componentCls}${sizeCls}-offset-${i}`] = {
  112. marginInlineStart: `${i / gridColumns * 100}%`
  113. };
  114. gridColumnsStyle[`${componentCls}${sizeCls}-order-${i}`] = {
  115. order: i
  116. };
  117. }
  118. }
  119. return gridColumnsStyle;
  120. };
  121. const genGridStyle = (token, sizeCls) => genLoopGridColumnsStyle(token, sizeCls);
  122. const genGridMediaStyle = (token, screenSize, sizeCls) => ({
  123. [`@media (min-width: ${screenSize}px)`]: _extends({}, genGridStyle(token, sizeCls))
  124. });
  125. // ============================== Export ==============================
  126. export const useRowStyle = genComponentStyleHook('Grid', token => [genGridRowStyle(token)]);
  127. export const useColStyle = genComponentStyleHook('Grid', token => {
  128. const gridToken = mergeToken(token, {
  129. gridColumns: 24 // Row is divided into 24 parts in Grid
  130. });
  131. const gridMediaSizesMap = {
  132. '-sm': gridToken.screenSMMin,
  133. '-md': gridToken.screenMDMin,
  134. '-lg': gridToken.screenLGMin,
  135. '-xl': gridToken.screenXLMin,
  136. '-xxl': gridToken.screenXXLMin
  137. };
  138. return [genGridColStyle(gridToken), genGridStyle(gridToken, ''), genGridStyle(gridToken, '-xs'), Object.keys(gridMediaSizesMap).map(key => genGridMediaStyle(gridToken, gridMediaSizesMap[key], key)).reduce((pre, cur) => _extends(_extends({}, pre), cur), {})];
  139. });