@@ -30,7 +30,6 @@ export class UUIComboboxElement extends FormControlMixin(LitElement) {
30
30
static styles = [
31
31
css `
32
32
:host {
33
- position: relative;
34
33
display: inline-block;
35
34
}
36
35
@@ -40,8 +39,9 @@ export class UUIComboboxElement extends FormControlMixin(LitElement) {
40
39
}
41
40
42
41
#scroll-container {
43
- max-height: var(--uui-combobox-popover-max-height, 500px);
44
42
overflow-y: auto;
43
+ width: 100%;
44
+ max-height: var(--uui-combobox-popover-max-height, 500px);
45
45
}
46
46
47
47
#dropdown {
@@ -66,6 +66,32 @@ export class UUIComboboxElement extends FormControlMixin(LitElement) {
66
66
flex-shrink: 0;
67
67
margin-top: -1px;
68
68
}
69
+
70
+ #phone-wrapper {
71
+ position: fixed;
72
+ inset: 0;
73
+ display: flex;
74
+ flex-direction: column;
75
+ z-index: 1;
76
+ font-size: 1.1em;
77
+ }
78
+
79
+ #phone-wrapper #dropdown {
80
+ display: flex;
81
+ }
82
+
83
+ #phone-wrapper #combobox-input {
84
+ height: var(--uui-size-16);
85
+ }
86
+
87
+ #phone-wrapper > uui-button {
88
+ height: var(--uui-size-14);
89
+ width: 100%;
90
+ }
91
+
92
+ #phone-wrapper #scroll-container {
93
+ max-height: unset;
94
+ }
69
95
` ,
70
96
] ;
71
97
@@ -106,6 +132,15 @@ export class UUIComboboxElement extends FormControlMixin(LitElement) {
106
132
@property ( { type : Boolean } )
107
133
public open = false ;
108
134
135
+ /**
136
+ * Specifies the button label for the close button in mobile mode
137
+ * @type { string }
138
+ * @attr
139
+ * @default "Close"
140
+ */
141
+ @property ( { type : String } )
142
+ public closeLabel = 'Close' ;
143
+
109
144
@query ( '#combobox-input' )
110
145
private _input ! : HTMLInputElement ;
111
146
@@ -116,18 +151,27 @@ export class UUIComboboxElement extends FormControlMixin(LitElement) {
116
151
private _comboboxListElements ?: UUIComboboxListElement [ ] ;
117
152
118
153
private _comboboxList ! : UUIComboboxListElement ;
154
+ private phoneMediaQuery ! : MediaQueryList ;
155
+
119
156
@state ( )
120
157
private _displayValue = '' ;
121
158
122
159
@state ( )
123
160
private _search = '' ;
124
161
162
+ @state ( )
163
+ private _isPhone = false ;
164
+
125
165
connectedCallback ( ) : void {
126
166
super . connectedCallback ( ) ;
127
167
128
168
this . addEventListener ( 'blur' , this . _onBlur ) ;
129
169
this . addEventListener ( 'mousedown' , this . _onMouseDown ) ;
130
170
171
+ this . phoneMediaQuery = window . matchMedia ( '(max-width: 600px)' ) ;
172
+ this . _onPhoneChange ( ) ;
173
+ this . phoneMediaQuery . addEventListener ( 'change' , this . _onPhoneChange ) ;
174
+
131
175
demandCustomElement ( this , 'uui-icon' ) ;
132
176
demandCustomElement ( this , 'uui-input' ) ;
133
177
demandCustomElement ( this , 'uui-button' ) ;
@@ -141,6 +185,7 @@ export class UUIComboboxElement extends FormControlMixin(LitElement) {
141
185
142
186
this . removeEventListener ( 'blur' , this . _onBlur ) ;
143
187
this . removeEventListener ( 'mousedown' , this . _onMouseDown ) ;
188
+ this . phoneMediaQuery . removeEventListener ( 'change' , this . _onPhoneChange ) ;
144
189
}
145
190
146
191
protected async firstUpdated ( ) {
@@ -161,6 +206,10 @@ export class UUIComboboxElement extends FormControlMixin(LitElement) {
161
206
}
162
207
}
163
208
209
+ private _onPhoneChange = ( ) => {
210
+ this . _isPhone = this . phoneMediaQuery . matches ;
211
+ } ;
212
+
164
213
private _updateValue ( value : string ) {
165
214
if ( this . _comboboxList ) {
166
215
this . _comboboxList . value = value ;
@@ -295,14 +344,23 @@ export class UUIComboboxElement extends FormControlMixin(LitElement) {
295
344
} ;
296
345
297
346
render ( ) {
298
- return html `
299
- < uui-popover
300
- .open = ${ this . open }
301
- .margin = ${ - 1 }
302
- @close= ${ ( ) => this . _onClose ( ) } >
347
+ if ( this . _isPhone && this . open ) {
348
+ return html ` < div id =" phone-wrapper " >
349
+ < uui-button label =" close " look =" primary " @click = ${ this . _onClose } >
350
+ ${ this . closeLabel }
351
+ </ uui-button >
303
352
${ this . _renderInput ( ) } ${ this . _renderDropdown ( ) }
304
- </ uui-popover >
305
- ` ;
353
+ </ div > ` ;
354
+ } else {
355
+ return html `
356
+ < uui-popover
357
+ .open =${ this . open }
358
+ .margin =${ - 1 }
359
+ @close=${ ( ) => this . _onClose ( ) } >
360
+ ${ this . _renderInput ( ) } ${ this . _renderDropdown ( ) }
361
+ </ uui-popover >
362
+ ` ;
363
+ }
306
364
}
307
365
}
308
366
0 commit comments