<div style={{ ...style, position: 'absolute', width: 285, zIndex: 2 }}>
<Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>
{({ opacity, scaleX, scaleY }) => (
- <div className='drawer--search--popout' style={{ opacity: opacity, transform: `scale(${scaleX}, ${scaleY})` }}>
+ <div className='search-popout' style={{ opacity: opacity, transform: `scale(${scaleX}, ${scaleY})` }}>
<h4><FormattedMessage id='search_popout.search_format' defaultMessage='Advanced search format' /></h4>
<ul>
render () {
const { intl, value, submitted } = this.props;
const { expanded } = this.state;
- const active = value.length > 0 || submitted;
- const computedClass = classNames('drawer--search', { active });
+ const hasValue = value.length > 0 || submitted;
return (
- <div className={computedClass}>
+ <div className='search'>
<label>
<span style={{ display: 'none' }}>{intl.formatMessage(messages.placeholder)}</span>
<input
+ className='search__input'
type='text'
placeholder={intl.formatMessage(messages.placeholder)}
value={value || ''}
onBlur={this.handleBlur}
/>
</label>
+
<div
aria-label={intl.formatMessage(messages.placeholder)}
- className='icon'
+ className='search__icon'
onClick={this.handleClear}
role='button'
tabIndex='0'
>
- <Icon icon='search' />
- <Icon icon='times-circle' />
+ <Icon icon='search' className={hasValue ? '' : 'active'} />
+ <Icon icon='times-circle' className={hasValue ? 'active' : ''} />
</div>
- <Overlay show={expanded && !active} placement='bottom' target={this}>
+
+ <Overlay show={expanded && !hasValue} placement='bottom' target={this}>
<SearchPopout />
</Overlay>
</div>
}
}
-.drawer--search {
+.search {
position: relative;
margin-bottom: 10px;
flex: none;
@include limited-single-column('screen and (max-width: 360px)') { margin-bottom: 0 }
@include single-column('screen and (max-width: 630px)') { font-size: 16px }
-
- input {
- display: block;
- box-sizing: border-box;
- margin: 0;
- border: none;
- padding: 15px 30px 15px 15px;
- width: 100%;
- outline: 0;
- color: $darker-text-color;
- background: $ui-base-color;
- font-size: 14px;
- font-family: inherit;
- line-height: 16px;
-
- &:focus {
- outline: 0;
- background: lighten($ui-base-color, 4%);
- }
- }
-
- & > .icon {
- display: block;
- position: absolute;
- top: 10px;
- right: 10px;
- width: 18px;
- height: 18px;
- color: $secondary-text-color;
- font-size: 18px;
- line-height: 18px;
- z-index: 2;
-
- .fa {
- display: inline-block;
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- opacity: 0;
- cursor: default;
- pointer-events: none;
- transition: all 100ms linear;
- transition-property: color, transform, opacity;
- }
-
- .fa-search {
- opacity: 0.3;
- transform: rotate(0deg);
- }
-
- .fa-times-circle {
- transform: rotate(-90deg);
- cursor: pointer;
-
- &:hover { color: $primary-text-color }
- }
- }
-
- &.active {
- & > .icon {
- .fa-search {
- opacity: 0;
- transform: rotate(90deg);
- }
-
- .fa-times-circle {
- opacity: 0.3;
- pointer-events: auto;
- transform: rotate(0deg);
- }
- }
- }
}
-.drawer--search--popout {
+.search-popout {
@include search-popout();
}
}
.search__input {
+ @include search-input();
+
display: block;
- padding: 10px;
+ padding: 15px;
padding-right: 30px;
- @include search-input();
+ line-height: 18px;
+ font-size: 16px;
}
.search__icon {
+ &::-moz-focus-inner {
+ border: 0;
+ }
+
+ &::-moz-focus-inner,
+ &:focus {
+ outline: 0 !important;
+ }
+
.fa {
position: absolute;
top: 16px;
display: inline-block;
opacity: 0;
transition: all 100ms linear;
- transition-property: transform, opacity;
+ transition-property: color, transform, opacity;
font-size: 18px;
width: 18px;
height: 18px;
}
.fa-search {
- transform: rotate(90deg);
+ transform: rotate(0deg);
&.active {
- pointer-events: none;
- transform: rotate(0deg);
+ pointer-events: auto;
+ opacity: 0.3;
}
}
.fa-times-circle {
top: 17px;
transform: rotate(0deg);
+ color: $action-button-color;
cursor: pointer;
&.active {
}
&:hover {
- color: $primary-text-color;
+ color: lighten($action-button-color, 7%);
}
}
}