////
///
/// @group addons
////


/// This popup is rendered as an overlay outside of the container that holds the theme name class. 
/// Until this is resolved, it has to be included 'outside' of the respective theme root. Otherwise
/// none of its definitions will have any effect.
///
/// Replaces a css file located in org.eclipse.osbp.widgetset that would otherwise be 
/// loaded *after* the main stylesheet and thus override certain style definitions.
@mixin os-suggesttext() {
	.o-SuggestBoxPopup  {
	    z-index: 99999;
	    
		.popupContent {
			@include valo-datefield-popup-style();
			color: $v-focus-color;
			}
		table {
			width: $v-default-field-width - $v-unit-size;
	    	}
		}
	
	.item {
		color: valo-font-color($v-overlay-background-color);
		}
	.item-selected {
		background-color: $v-focus-color;
		color: valo-font-color($v-focus-color);
		}
	
 	.o-XSuggestBox {
 		background-color:  $os-textfield-shade;
 		> .v-textfield {
 			@include os-textfield; 
 			width: $v-default-field-width - $v-unit-size  ;
 			height: $v-unit-size !important;  			
 			} 
		
 		.enableSuggestions { 
 		    @include os-button-in-disguise;
 		    border-bottom: $v-border;
            height: $v-unit-size - first-number($v-border); /* apparently behaves differently here... */
 			@include os-icon-font($content: '\f08d'); 
 			float: right; 
			}
 		.enableSuggestions.selected { 
 			@include os-icon-font($content: '\f002'); 
 			float: right; 
 			}
	    } 
	}

/* Original css file 

/**
 *                                                                            
 * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 *                                                                            
 * All rights reserved. This program and the accompanying materials           
 * are made available under the terms of the Eclipse Public License v1.0       
 * which accompanies this distribution, and is available at                  
 * http://www.eclipse.org/legal/epl-v10.html                                 
 *                                                                            
 * Contributors:   
 * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
 */

/* Style defined in theme project

.o-SuggestBoxPopup {
	background-color: white;
	color: darkgray;
	
	font-style: normal;
    font-variant: normal;
    font-weight: 300;
    font-stretch: normal;
    font-size: 16px;
    line-height: 1.55;
    font-family: 'Open Sans', sans-serif;
}

.o-SuggestBoxPopup .item-selected {
	background-color: darkgray;
	color: white;
}

*/

