useFlexboxGrid.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. import useVars from './useVars.js'
  2. import { getClasses } from '../utils/classes.js'
  3. function getGridTemplateRepeats(max = 12) {
  4. const arr = new Array(max).fill('').map((d, i) => {
  5. let index = i + 1
  6. return {
  7. name: index,
  8. value: `repeat(${index}, minmax(0, 1fr))`
  9. }
  10. })
  11. return arr
  12. }
  13. function getGridColumnStartEnd(name = 'col', vname = 'column', max = 12) {
  14. let arr = [{ name: `${name}-auto`, value: [`grid-${vname}: auto;`] }]
  15. for (let i = 1; i <= max; i++) {
  16. if (i <= max) {
  17. arr.push({ name: `${name}-span-${i}`, value: [`grid-${vname}: span ${i} / span ${i};`] })
  18. }
  19. arr.push({ name: `${name}-start-${i}`, value: [`grid-${vname}-start: ${i};`] })
  20. arr.push({ name: `${name}-end-${i}`, value: [`grid-${vname}-end: ${i};`] })
  21. }
  22. arr.push({ name: `${name}-span-full`, value: [`grid-${vname}: 1 / -1;`] })
  23. arr.push({ name: `${name}-start-auto`, value: [`grid-${vname}-start: auto;`] })
  24. arr.push({ name: `${name}-end-auto`, value: [`grid-${vname}-end: auto;`] })
  25. return arr
  26. }
  27. function useHook() { // useFlexboxGrid
  28. const { pxs, percents } = useVars()
  29. const FlexBasis = {
  30. title: 'Flex Basis',
  31. classes: [...getClasses(pxs, {
  32. name: ['basis-'],
  33. value: ['flex-basis'],
  34. }), ...getClasses(percents, {
  35. name: ['basis-'],
  36. value: ['flex-basis'],
  37. })]
  38. }
  39. const FlexDirection = {
  40. title: 'Flex Direction',
  41. classes: getClasses('row, row-reverse, col, col-reverse', { name: 'flex-', value: 'flex-direction' }),
  42. }
  43. const FlexWrap = {
  44. title: 'Flex Wrap',
  45. classes: getClasses('wrap, wrap-reverse, nowrap', { name: 'flex-', value: 'flex-wrap' }),
  46. }
  47. const Flex = {
  48. title: 'Flex',
  49. classes: getClasses('1: 1 1 0%, auto: 1 1 0%, initial: 0 1 auto, none', { name: 'flex-', value: 'flex' }),
  50. }
  51. const FlexGrow = {
  52. title: 'Flex Grow',
  53. classes: getClasses(':1, 0', { name: 'grow-', value: 'grow' }),
  54. }
  55. const FlexShrink = {
  56. title: 'Flex Shrink',
  57. classes: getClasses(':1, 0', { name: 'shrink-', value: 'shrink' }),
  58. }
  59. const Order = {
  60. title: 'Order',
  61. classes: getClasses('1,2,3,4,5,6,7,8,9,10,11,12,first: -9999,last: 9999,none: 0', { name: 'order-', value: 'order' }),
  62. }
  63. const GridTemplateColumns = {
  64. title: 'Grid Template Columns',
  65. classes: getClasses([...getGridTemplateRepeats(12), { name: 'none' }], { name: 'grid-cols-', value: 'grid-template-columns' }),
  66. }
  67. const GridColumnStartEnd = {
  68. title: 'Grid Column Start End',
  69. classes: getGridColumnStartEnd(),
  70. }
  71. const GridTemplateRows = {
  72. title: 'Grid Template Rows',
  73. classes: getClasses([...getGridTemplateRepeats(6), { name: 'none' }], { name: 'grid-rows-', value: 'grid-template-rows' }),
  74. }
  75. const GridRowStartEnd = {
  76. title: 'Grid Row Start End',
  77. classes: getGridColumnStartEnd('row', 'row', 6),
  78. }
  79. const GridAutoFlow = {
  80. title: 'Grid Auto Flow',
  81. classes: getClasses('row, col, dense, row-dense, col-dense', { name: 'grid-flow-', value: 'grid-auto-flow' }),
  82. }
  83. const GridAutoColumns = {
  84. title: 'Grid Auto Columns',
  85. classes: getClasses([
  86. { name: 'auto', value: 'auto' },
  87. { name: 'min', value: 'min-content' },
  88. { name: 'max', value: 'max-content' },
  89. { name: 'fr', value: 'minmax(0, 1fr)' },
  90. ], { name: 'auto-cols-', value: 'grid-auto-columns' }),
  91. }
  92. const GridAutoRows = {
  93. title: 'Grid Auto Rows',
  94. classes: getClasses([
  95. { name: 'auto', value: 'auto' },
  96. { name: 'min', value: 'min-content' },
  97. { name: 'max', value: 'max-content' },
  98. { name: 'fr', value: 'minmax(0, 1fr)' },
  99. ], { name: 'auto-rows-', value: 'grid-auto-rows' }),
  100. }
  101. const Gap = {
  102. title: 'Gap',
  103. classes: getClasses(pxs, { name: ['gap-', 'gap-x-', 'gap-y-'], value: ['gap', 'column-gap', 'row-gap'] }),
  104. }
  105. const JustifyContent = {
  106. title: 'Justify Content',
  107. classes: getClasses('normal, start: flex-start, end: flex-end, center, between: space-between, around: space-around, evenly: space-evenly, stretch', { name: 'justify-', value: 'justify-content' }),
  108. }
  109. const JustifyItems = {
  110. title: 'Justify Items',
  111. classes: getClasses('start, end, center, stretch', { name: 'justify-items-', value: 'justify-items' }),
  112. }
  113. const JustifySelf = {
  114. title: 'Justify Self',
  115. classes: getClasses('auto, start, end, center, stretch', { name: 'justify-self-', value: 'justify-self' }),
  116. }
  117. const AlignContent = {
  118. title: 'Align Content',
  119. classes: getClasses('normal, center, start: flex-start, end: flex-end, between: space-between, around: space-around, evenly: space-evenly, baseline, stretch', { name: 'content-', value: 'align-content' }),
  120. }
  121. const AlignItems = {
  122. title: 'Align Items',
  123. classes: getClasses('start: flex-start, end, center, baseline, stretch', { name: 'items-', value: 'align-items' }),
  124. }
  125. const AlignSelf = {
  126. title: 'Align Self',
  127. classes: getClasses('auto, start: flex-start, end: flex-end, center, stretch, baseline', { name: 'self-', value: 'align-self' }),
  128. }
  129. const PlaceContent = {
  130. title: 'Place Content',
  131. classes: getClasses('center, start, end, between: space-between, around: space-around, evenly: space-evenly, baseline, stretch', { name: 'place-content-', value: 'place-content' }),
  132. }
  133. const PlaceItems = {
  134. title: 'Place Items',
  135. classes: getClasses('start, end, center, baseline, stretch', { name: 'place-items-', value: 'place-items' }),
  136. }
  137. const PlaceSelf = {
  138. title: 'Place Self',
  139. classes: getClasses('auto, start, end, center, stretch', { name: 'place-self-', value: 'place-self' }),
  140. }
  141. return {
  142. FlexBasis,
  143. FlexDirection,
  144. FlexWrap,
  145. Flex,
  146. FlexGrow,
  147. FlexShrink,
  148. Order,
  149. GridTemplateColumns,
  150. GridColumnStartEnd,
  151. GridTemplateRows,
  152. GridRowStartEnd,
  153. GridAutoFlow,
  154. GridAutoColumns,
  155. GridAutoRows,
  156. Gap,
  157. JustifyContent,
  158. JustifyItems,
  159. JustifySelf,
  160. AlignContent,
  161. AlignItems,
  162. AlignSelf,
  163. PlaceContent,
  164. PlaceItems,
  165. PlaceSelf
  166. }
  167. }
  168. export default useHook