@@ -82,10 +82,12 @@ export default class AttributeWrapper extends BaseAttributeWrapper {
82
82
const element = this . parent ;
83
83
const { name, property_name, should_cache, is_indirectly_bound_value } = this ;
84
84
85
+ const is_custom_element = / - / . test ( element . node . name ) ;
86
+
85
87
// xlink is a special case... we could maybe extend this to generic
86
88
// namespaced attributes but I'm not sure that's applicable in
87
89
// HTML5?
88
- const method = / - / . test ( element . node . name )
90
+ const method = is_custom_element
89
91
? '@set_custom_element_data'
90
92
: name . slice ( 0 , 6 ) === 'xlink:'
91
93
? '@xlink_attr'
@@ -130,10 +132,12 @@ export default class AttributeWrapper extends BaseAttributeWrapper {
130
132
? b `@prop_dev(${ element . var } , "${ property_name } ", ${ should_cache ? this . last : value } );`
131
133
: b `${ element . var } .${ property_name } = ${ should_cache ? this . last : value } ;` ;
132
134
} else {
135
+ // use this.node.name when the element is a custom element to preserve property case-sensitivity
136
+ const custom_element_aware_name = is_custom_element ? this . node . name : name ;
133
137
block . chunks . hydrate . push (
134
- b `${ method } (${ element . var } , "${ name } ", ${ init } );`
138
+ b `${ method } (${ element . var } , "${ custom_element_aware_name } ", ${ init } );`
135
139
) ;
136
- updater = b `${ method } (${ element . var } , "${ name } ", ${ should_cache ? this . last : value } );` ;
140
+ updater = b `${ method } (${ element . var } , "${ custom_element_aware_name } ", ${ should_cache ? this . last : value } );` ;
137
141
}
138
142
139
143
if ( is_indirectly_bound_value ) {
@@ -387,4 +391,4 @@ function is_indirectly_bound_value(attribute: AttributeWrapper) {
387
391
( binding ) =>
388
392
/ c h e c k e d | g r o u p / . test ( binding . name )
389
393
) ) ) ;
390
- }
394
+ }
0 commit comments