@import '../variables.less';
@import '../mixins.less';
.citizen-typeahead {
position: absolute;
top: 100%;
left: -1px; // IDK why is it off by 1px
box-sizing: content-box; // Magic to align with search input
width: 100%;
max-height: ~'calc( var( --header-card-maxheight ) - var( --height-search-bar ) )';
margin: 0; // Reset
styles
overflow: auto;
overscroll-behavior: contain;
border-top-color: transparent;
border-bottom-right-radius: var( --border-radius--medium );
border-bottom-left-radius: var( --border-radius--medium );
.citizen-card( false );
a {
&:hover,
&:focus {
text-decoration: none;
}
}
&-input {
// Display overlay instead of the input, but keep the caret
color: transparent;
caret-color: var( --color-base--emphasized );
&-group {
position: relative;
display: flex;
flex-grow: 1;
}
&-overlay {
position: absolute;
inset: 0 var( --height-search-bar ) 0 0; // clear button
display: flex;
align-items: center;
overflow: hidden;
font-size: var( --font-size-small );
white-space: nowrap;
pointer-events: none;
// HACK: Target mobile Safari only to prevent auto zooming the input field
@supports (-webkit-touch-callout: none) {
font-size: 1rem;
}
&-query {
color: var( --color-base--emphasized );
}
}
}
&-item {
&-group {
&-list {
margin: 0;
list-style: none;
}
// FIXME: Use a generic attribute
&[ data-mw-citizen-typeahead-group='action' ] .citizen-typeahead-item-group-list {
display: flex;
gap: var( --space-xxs );
padding-right: var( --space-sm );
padding-left: var( --space-sm );
margin-top: var( --space-xs );
margin-bottom: var( --space-xs );
overflow-x: auto;
}
}
}
&__item {
&--active {
background-color: var( --background-color-quiet--hover );
}
&--hidden {
display: none;
}
&-chip {
white-space: nowrap;
border-radius: var( --border-radius--medium );
.citizen-typeahead {
&__content {
padding: var( --space-xs ) var( --space-sm );
margin: 0;
border: 1px solid var( --border-color-base );
border-radius: var( --border-radius--medium );
}
&__thumbnail {
width: 1rem;
height: 1rem;
}
}
}
&-sm {
font-size: var( --font-size-small );
.citizen-typeahead {
&__content {
padding: var( --space-sm ) 0;
}
&__thumbnail {
height: var( --size-icon );
background-color: transparent;
&.citizen-ui-icon {
width: var( --size-icon );
}
}
}
}
&-md {
.citizen-typeahead {
&__thumbnail {
background-color: #eaecf0;
background-position: center;
background-size: cover;
border-radius: var( --border-radius--medium );
&.citizen-ui-icon {
width: 100%;
height: 60px;
background-color: var( --color-surface-3 );
&::before {
background-size: 20px;
}
}
}
}
}
&-lg {
.citizen-typeahead {
&__content {
flex-direction: column;
padding: var( --space-xl ) 0;
text-align: center;
}
&__thumbnail {
margin-bottom: var( --space-sm );
}
}
}
&-sm,
&-md {
.citizen-typeahead {
&__thumbnail {
margin-right: var( --space-sm );
}
&__text {
white-space: nowrap;
}
}
}
&-md,
&-lg {
.citizen-typeahead {
&__title {
font-weight: var( --font-weight-semibold );
}
&__description {
margin-top: 0.1rem;
}
}
}
}
&__content {
display: flex;
align-items: center;
padding: var( --space-xs ) 0;
margin: 0 var( --space-sm );
color: var( --color-base );
}
&__thumbnail {
flex-shrink: 0;
width: 100%;
max-width: 60px;
height: 60px;
overflow: hidden;
&.citizen-ui-icon::before {
background-size: contain;
}
}
&__text {
flex-grow: 1;
overflow: hidden;
}
&__header {
display: flex;
justify-content: space-between;
}
&__title {
flex-shrink: 0;
color: var( --color-base--emphasized );
}
&__highlight {
font-weight: var( --font-weight-medium );
color: var( --color-base--subtle );
}
&__query {
font-weight: var( --font-weight-semibold );
color: var( --color-base--emphasized );
}
&__label {
display: flex;
gap: var( --space-xxs );
margin-left: var( --space-xs );
font-size: var( --font-size-x-small );
color: var( --color-base );
.citizen-ui-icon {
width: 0.8125rem;
height: 0.8125rem;
margin-right: var( --space-xxs );
}
}
&__labelItem {
display: flex;
align-items: center;
}
&__description {
font-size: var( --font-size-x-small );
color: var( --color-base--subtle );
}
&__title,
&__description {
overflow: hidden;
text-overflow: ellipsis;
}
&__actions {
position: absolute;
right: var( --space-sm );
}
&__keyboard {
display: none;
padding: 0 8px;
background-color: var( --color-surface-1 );
border-radius: var( --border-radius--small );
}
}
.citizen-search__card:has( .citizen-typeahead ) {
border-bottom-color: transparent;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
.citizen-typeahead {
border-top-color: transparent;
}
}
// HACK: This is as close as we can to detect whether there is a keyboard in CSS
@media ( hover: hover ) and ( pointer: fine ) {
.citizen-typeahead {
&__item--active {
.citizen-typeahead__keyboard {
display: block;
}
}
}
}
// HACK: Hide default MW search suggestion if it somehow loaded
// This should be removed when we switch to vue search
.suggestions {
display: none !important;
}