You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							237 lines
						
					
					
						
							4.3 KiB
						
					
					
				
			
		
		
	
	
							237 lines
						
					
					
						
							4.3 KiB
						
					
					
				| import { space } from '../src'
 | |
| 
 | |
| test('returns style objects', () => {
 | |
|   const styles = space({
 | |
|     m: '4px',
 | |
|   })
 | |
|   expect(styles).toEqual({ margin: '4px' })
 | |
| })
 | |
| 
 | |
| test('returns 0 values', () => {
 | |
|   const styles = space({ m: 0 })
 | |
|   expect(styles).toEqual({ margin: 0 })
 | |
| })
 | |
| 
 | |
| test('returns negative pixel values', () => {
 | |
|   const styles = space({ m: -2 })
 | |
|   expect(styles).toEqual({ margin: -8 })
 | |
| })
 | |
| 
 | |
| test('returns negative em values', () => {
 | |
|   const styles = space({ m: '-16em' })
 | |
|   expect(styles).toEqual({ margin: '-16em' })
 | |
| })
 | |
| 
 | |
| test('returns negative theme values', () => {
 | |
|   const styles = space({
 | |
|     theme: {
 | |
|       space: [0, 4, 8],
 | |
|     },
 | |
|     m: -2,
 | |
|   })
 | |
|   expect(styles).toEqual({ margin: -8 })
 | |
| })
 | |
| 
 | |
| test('returns positive theme values', () => {
 | |
|   const styles = space({
 | |
|     theme: {
 | |
|       space: [0, '1em', '2em'],
 | |
|     },
 | |
|     m: 2,
 | |
|   })
 | |
|   expect(styles).toEqual({ margin: '2em' })
 | |
| })
 | |
| 
 | |
| test('returns responsive values', () => {
 | |
|   const styles = space({
 | |
|     m: [0, 2, 3],
 | |
|   })
 | |
|   expect(styles).toEqual({
 | |
|     margin: 0,
 | |
|     '@media screen and (min-width: 40em)': { margin: 8 },
 | |
|     '@media screen and (min-width: 52em)': { margin: 16 },
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('returns aliased values', () => {
 | |
|   const styles = space({
 | |
|     px: 2,
 | |
|   })
 | |
|   expect(styles).toEqual({ paddingLeft: 8, paddingRight: 8 })
 | |
| })
 | |
| 
 | |
| test('returns string values from theme', () => {
 | |
|   const styles = space({
 | |
|     theme: {
 | |
|       space: [0, '1em'],
 | |
|     },
 | |
|     padding: 1,
 | |
|   })
 | |
|   expect(styles).toEqual({ padding: '1em' })
 | |
| })
 | |
| 
 | |
| test('returns negative string values from theme', () => {
 | |
|   const styles = space({
 | |
|     theme: {
 | |
|       space: [0, '1em'],
 | |
|     },
 | |
|     margin: -1,
 | |
|   })
 | |
|   expect(styles).toEqual({ margin: '-1em' })
 | |
| })
 | |
| 
 | |
| test('returns values from theme object', () => {
 | |
|   const styles = space({
 | |
|     theme: {
 | |
|       space: { sm: 1 },
 | |
|     },
 | |
|     margin: 'sm',
 | |
|   })
 | |
|   expect(styles).toEqual({ margin: 1 })
 | |
| })
 | |
| 
 | |
| test('pl prop sets paddingLeft', () => {
 | |
|   const styles = space({ pl: 2 })
 | |
|   expect(styles).toEqual({ paddingLeft: 8 })
 | |
| })
 | |
| 
 | |
| test('pl prop sets paddingLeft 0', () => {
 | |
|   const styles = space({ pl: 0 })
 | |
|   expect(styles).toEqual({ paddingLeft: 0 })
 | |
| })
 | |
| 
 | |
| test('px prop overrides pl prop', () => {
 | |
|   const styles = space({
 | |
|     pl: 1,
 | |
|     px: 2,
 | |
|   })
 | |
|   expect(styles).toEqual({ paddingLeft: 8, paddingRight: 8 })
 | |
| })
 | |
| 
 | |
| test('py prop overrides pb prop', () => {
 | |
|   const styles = space({
 | |
|     pb: 1,
 | |
|     py: 2,
 | |
|   })
 | |
|   expect(styles).toEqual({ paddingTop: 8, paddingBottom: 8 })
 | |
| })
 | |
| 
 | |
| test('mx prop overrides mr prop', () => {
 | |
|   const styles = space({
 | |
|     mr: 1,
 | |
|     mx: 2,
 | |
|   })
 | |
|   expect(styles).toEqual({ marginLeft: 8, marginRight: 8 })
 | |
| })
 | |
| 
 | |
| test('my prop overrides mt prop', () => {
 | |
|   const styles = space({
 | |
|     mt: 1,
 | |
|     my: 2,
 | |
|   })
 | |
|   expect(styles).toEqual({ marginTop: 8, marginBottom: 8 })
 | |
| })
 | |
| 
 | |
| test('margin overrides m prop', () => {
 | |
|   const styles = space({
 | |
|     m: 1,
 | |
|     margin: 2,
 | |
|   })
 | |
|   expect(styles).toEqual({ margin: 8 })
 | |
| })
 | |
| 
 | |
| test('handles margin with no theme', () => {
 | |
|   const styles = space({
 | |
|     mt: 12,
 | |
|   })
 | |
|   expect(styles).toEqual({
 | |
|     marginTop: 12,
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('handles overriding margin/padding shortcut props', () => {
 | |
|   const styles = space({
 | |
|     m: 4,
 | |
|     mx: 3,
 | |
|     mr: 2,
 | |
|     p: 4,
 | |
|     py: 3,
 | |
|     pt: 2,
 | |
|   })
 | |
|   expect(styles).toEqual({
 | |
|     margin: 32,
 | |
|     marginLeft: 16,
 | |
|     marginRight: 8,
 | |
|     padding: 32,
 | |
|     paddingBottom: 16,
 | |
|     paddingTop: 8,
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('single directions override axes', () => {
 | |
|   const styles = space({
 | |
|     mx: 3,
 | |
|     ml: 1,
 | |
|     mr: 2,
 | |
|     px: 3,
 | |
|     pl: 1,
 | |
|     pr: 2,
 | |
|   })
 | |
|   expect(styles).toEqual({
 | |
|     marginLeft: 4,
 | |
|     marginRight: 8,
 | |
|     paddingLeft: 4,
 | |
|     paddingRight: 8,
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('supports object values', () => {
 | |
|   const styles = space({
 | |
|     m: {
 | |
|       _: 0,
 | |
|       0: 1,
 | |
|       1: 2,
 | |
|     }
 | |
|   })
 | |
|   expect(styles).toEqual({
 | |
|     margin: 0,
 | |
|     '@media screen and (min-width: 40em)': {
 | |
|       margin: 4,
 | |
|     },
 | |
|     '@media screen and (min-width: 52em)': {
 | |
|       margin: 8,
 | |
|     },
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('supports non-array breakpoints', () => {
 | |
|   const theme = {
 | |
|     disableStyledSystemCache: true,
 | |
|     breakpoints: {
 | |
|       small: '40em',
 | |
|       medium: '52em',
 | |
|     }
 | |
|   }
 | |
|   const styles = space({
 | |
|     theme,
 | |
|     p: {
 | |
|       small: 2,
 | |
|     },
 | |
|     m: {
 | |
|       _: 0,
 | |
|       small: 1,
 | |
|       medium: 2,
 | |
|     }
 | |
|   })
 | |
|   expect(styles).toEqual({
 | |
|     margin: 0,
 | |
|     '@media screen and (min-width: 40em)': {
 | |
|       margin: 4,
 | |
|       padding: 8,
 | |
|     },
 | |
|     '@media screen and (min-width: 52em)': {
 | |
|       margin: 8,
 | |
|     },
 | |
|   })
 | |
| })
 |