
/*
 * A Fan is a layout that consists of two parts:
 * The base and the surface, named after a hand fan.
 * The base is always left handed, where as the surface
 * can be right of the base or below.
 */

/** #####################
 * Block Modifiers Mixins
 * ###################### */

RV-Fan--horizontal__Surface()
	+RV-Element()
		RV-BreakPoint__Item(--localBreakPoint)

RV-Fan--horizontal__Base()
	+RV-Element()
		RV-BreakPoint__Item(--localBreakPoint)
		RV-BreakPoint__Item--outside()
			
		flex-basis --base-width
		flex-grow 0

/*
 * Base on the left, Surface on the right
 * Base is fixed, given size, Surface is given height
 * but will fill the parent's width
 */
RV-Fan--horizontal(base-height, base-width)
	+RV-Block--modifier()
		RV-CSSParameter({
			localBreakPoint: 'calc(2 * %s)' % base-width
		})
		RV-BreakPoint(--localBreakPoint)
		RV-Fan--horizontal__Surface()
		RV-Fan--horizontal__Base()

		RV-BreakPoint--horizontal()
		min-width base-width


RV-Fan--vertical__Surface()
	+RV-Element()
		width base-width
		min-width initial
		min-height base-height

/*
 * Base above, Surfce below
 * Base is fixed, given size, base is given width
 * minimal height is given height, will grow with content
 */
RV-Fan--vertical(base-height, base-width)
	+RV-Block--modifier()
		flex-direction column
		width base-width
		min-width initial
		RV-Fan--vertical__Surface()

RV-Fan--auto__Base()
	+RV-Element()
		flex-grow 1
		
RV-Fan--auto__Surface()
	+RV-Element()
		box-sizing border-box
		flex-grow 99999

/*
 * Initialy horizontal, changes to vertical when
 * the width of the parent is less than 2 x base-width
 * Width of the base and surface in vertical are base-width
 */
RV-Fan--auto(base-height, base-width)
	+RV-Block--modifier()
		flex-flow row wrap
		min-width unset
		
		RV-Fan--auto__Base()
		RV-Fan--auto__Surface()


/* ###############
 * Element Mixins
 * ############### */
RV-Fan__Base(base-height, base-width)
	+RV-Element()
		box-sizing border-box
		flex-basis base-width
		flex-shrink 0
		flex-grow 0
		
		height base-height
		width base-width
		
		> *
			height calc_height()
			width calc_width()

RV-Fan__Surface--fixedHeight(height)
	+RV-Element--modifier()
		height height
		box-sizing border-box

RV-Fan__Surface--fixedWidth(width)
	+RV-Element--modifier()
		max-width width
		box-sizing border-box

RV-Fan__Surface(base-height, base-width)
	+RV-Element()
		overflow hidden
		box-sizing border-box
		height base-height
		flex-basis base-width
		min-width base-width
		flex-grow 1
		
		> *
			height calc_height(100%)
			width calc_width(100%)
			
		RV-Fan__Surface--fixedHeight(base-height)
		RV-Fan__Surface--fixedWidth(base-width)

/* ############
 * Block Mixin
 * ############ */
RV-Fan(base-height, base-width)
	+RV-Block()
		RV-CSSParameter({
			base-height: base-height,
			base-width: base-width
		})
		display flex
		position relative
		min-width min-content

		RV-Fan__Base(--base-height, --base-width)
		RV-Fan__Surface(--base-height, --base-width)
		
		RV-Fan--auto(--base-height, --base-width)
		RV-Fan--vertical(--base-height, --base-width)
		RV-Fan--horizontal(--base-height, --base-width)

RV-Fan(280px, 320px)