//--------------------------------------
//               PowerUI
//
//        For documentation or 
//    if you have any issues, visit
//        powerUI.kulestar.com
//
//    Copyright  2013 Kulestar Ltd
//          www.kulestar.com
//--------------------------------------

namespace Css{
	
	/// <summary>
	/// Values of the display: property.
	/// </summary>
	
	public static class DisplayMode{
	
		// Box
		public const int None=0;
		public const int Contents=1;
		
		// Outside
		public const int OutsideBlock=1 << 1;
		public const int OutsideInline=1 << 2;
		public const int OutsideRunIn=1 << 3;
		
		// Inside
		public const int InsideFlow=1 << 4;
		public const int InsideFlowRoot=1 << 5;
		public const int InsideTable=1 << 6;
		public const int InsideFlex=1 << 7;
		public const int InsideGrid=1 << 8;
		public const int InsideRuby=1 << 9;
		
		// List item
		public const int InternalListItem=1 << 10;
		
		// Internal
		public const int InternalTableRowGroup=1 << 11;
		public const int InternalTableHeaderGroup=1 << 12;
		public const int InternalTableFooterGroup=1 << 13;
		public const int InternalTableRow=1 << 14;
		public const int InternalTableCell=1 << 15;
		public const int InternalTableColumnGroup=1 << 16;
		public const int InternalTableColumn=1 << 17;
		public const int InternalTableCaption=1 << 18;
		public const int InternalRubyBase=1 << 19;
		public const int InternalRubyText=1 << 20;
		public const int InternalRubyBaseContainer=1 << 21;
		public const int InternalRubyTextContainer=1 << 22;
		
		// Note: Everything below here is an abstraction of the above
		// display modes.
		
		// Legacy
		public const int InlineBlock= OutsideInline | InsideFlowRoot;
		public const int InlineListItem=InternalListItem | OutsideInline | InsideFlow;
		public const int InlineTable=OutsideInline | InsideTable;
		public const int InlineFlex=OutsideInline | InsideFlex;
		public const int InlineGrid=OutsideInline | InsideGrid;
		
		// Short display forms
		public const int Block = OutsideBlock | InsideFlow;
		public const int FlowRoot = OutsideBlock | InsideFlowRoot;
		public const int Inline = OutsideInline | InsideFlow;
		public const int RunIn = OutsideRunIn | InsideFlow;
		public const int ListItem = InternalListItem | OutsideBlock | InsideFlow;
		public const int Flex=OutsideBlock | InsideFlex;
		public const int Grid=OutsideBlock | InsideGrid;
		public const int Ruby=OutsideInline | InsideRuby;
		public const int BlockRuby=OutsideBlock | InsideRuby;
		public const int Table=OutsideBlock | InsideTable;
		public const int TableCell=InternalTableCell | InsideFlow;
		public const int TableCaption=InternalTableCaption | InsideFlow;
		public const int RubyBase=InternalRubyBase | InsideFlow;
		public const int RubyText=InternalRubyText | InsideFlow;
		
		// Other internals
		public const int TableRowGroup=InternalTableRowGroup;
		public const int TableHeaderGroup=InternalTableHeaderGroup;
		public const int TableFooterGroup=InternalTableFooterGroup;
		public const int TableRow=InternalTableRow;
		public const int TableColumnGroup=InternalTableColumnGroup;
		public const int TableColumn=InternalTableColumn;
		public const int RubyBaseContainer=InternalRubyBaseContainer;
		public const int RubyTextContainer=InternalRubyTextContainer;
		
		public const int SupportsLine=InsideFlowRoot | OutsideBlock;
		
		// Combined properties
		public const int ShrinkToFit=InsideFlowRoot | InternalTableCell;
		public const int BlockWidth=InternalListItem | InsideTable | InternalTableCell | OutsideBlock | InsideFlowRoot;
		
		public const int TableCellOrTable=InsideTable | InternalTableCell;
		
	}
	
}