@@ -89,7 +89,7 @@ export class Renderer {
8989 * State that is local to the branch it is declared in.
9090 * It will be shallow-copied to all children.
9191 *
92- * @type {{ select_value: any, select_default_multiple : boolean } }
92+ * @type {{ select_value: any, multiple : boolean } }
9393 */
9494 local ;
9595
@@ -101,9 +101,7 @@ export class Renderer {
101101 this . #parent = parent ;
102102
103103 this . global = global ;
104- this . local = parent
105- ? { ...parent . local }
106- : { select_value : undefined , select_default_multiple : false } ;
104+ this . local = parent ? { ...parent . local } : { select_value : undefined , multiple : false } ;
107105 this . type = parent ? parent . type : 'body' ;
108106 }
109107
@@ -346,8 +344,7 @@ export class Renderer {
346344 this . push ( `<select${ attributes ( select_attrs , css_hash , classes , styles , flags ) } >` ) ;
347345 this . child ( ( renderer ) => {
348346 renderer . local . select_value = value === undefined ? defaultValue : value ;
349- renderer . local . select_default_multiple =
350- value === undefined && Boolean ( select_attrs . multiple ) ;
347+ renderer . local . multiple = ! ! select_attrs . multiple ;
351348 fn ( renderer ) ;
352349 } ) ;
353350 this . push ( `${ is_rich ? '<!>' : '' } </select>` ) ;
@@ -375,10 +372,14 @@ export class Renderer {
375372 value = attrs . value ;
376373 }
377374
375+ var select_value = this . local . select_value ;
376+
378377 if (
379- this . local . select_default_multiple
380- ? is_array ( this . local . select_value ) && this . local . select_value . includes ( value )
381- : value === this . local . select_value
378+ // Super edge-case, but theoretically someone could use arrays with non-multiple selects,
379+ // so we gotta check for the multiple attribute presence, too.
380+ this . local . multiple && is_array ( select_value )
381+ ? select_value . includes ( value )
382+ : value === select_value
382383 ) {
383384 renderer . #out. push ( ' selected=""' ) ;
384385 }
0 commit comments