File tree Expand file tree Collapse file tree 4 files changed +88
-2
lines changed
src/compiler/phases/3-transform/client/visitors
tests/runtime-runes/samples/svelte-element-css-hash Expand file tree Collapse file tree 4 files changed +88
-2
lines changed Original file line number Diff line number Diff line change 1+ ---
2+ ' svelte ' : patch
3+ ---
4+
5+ fix : bug "$0 is not defined" on svelte: element with a function call on class
Original file line number Diff line number Diff line change @@ -83,9 +83,10 @@ export function SvelteElement(node, context) {
8383 if (
8484 attributes . length === 1 &&
8585 attributes [ 0 ] . type === 'Attribute' &&
86- attributes [ 0 ] . name . toLowerCase ( ) === 'class'
86+ attributes [ 0 ] . name . toLowerCase ( ) === 'class' &&
87+ is_text_attribute ( attributes [ 0 ] )
8788 ) {
88- // special case when there only a class attribute
89+ // special case when there only a class attribute, without call expression
8990 let { value, has_state } = build_attribute_value (
9091 attributes [ 0 ] . value ,
9192 context ,
Original file line number Diff line number Diff line change 1+ import { flushSync } from 'svelte' ;
2+ import { ok , test } from '../../test' ;
3+
4+ export default test ( {
5+ html : `
6+ <div></div>
7+ <div class="red svelte-p153w3"></div>
8+ <div></div>
9+ <div class="red svelte-p153w3"></div>
10+ <div class="blue svelte-p153w3"></div>
11+ <div class="blue svelte-p153w3"></div>
12+ ` ,
13+
14+ async test ( { assert, target, component } ) {
15+ component . active = true ;
16+ flushSync ( ) ;
17+
18+ assert . htmlEqual (
19+ target . innerHTML ,
20+ `
21+ <div></div>
22+ <div class="red svelte-p153w3"></div>
23+ <div class="active"></div>
24+ <div class="red svelte-p153w3 active"></div>
25+ <div class="blue svelte-p153w3"></div>
26+ <div class="blue svelte-p153w3 active"></div>
27+ `
28+ ) ;
29+
30+ component . tag = 'span' ;
31+ flushSync ( ) ;
32+
33+ assert . htmlEqual (
34+ target . innerHTML ,
35+ `
36+ <span></span>
37+ <span class="red svelte-p153w3"></span>
38+ <span class="active"></span>
39+ <span class="red svelte-p153w3 active"></span>
40+ <span class="blue svelte-p153w3"></span>
41+ <span class="blue svelte-p153w3 active"></span>
42+ `
43+ ) ;
44+
45+ component . active = false ;
46+ flushSync ( ) ;
47+
48+ assert . htmlEqual (
49+ target . innerHTML ,
50+ `
51+ <span></span>
52+ <span class="red svelte-p153w3"></span>
53+ <span class=""></span>
54+ <span class="red svelte-p153w3"></span>
55+ <span class="blue svelte-p153w3"></span>
56+ <span class="blue svelte-p153w3"></span>
57+ `
58+ ) ;
59+ }
60+ } ) ;
Original file line number Diff line number Diff line change 1+ <script >
2+ let { tag = " div" , active = false } = $props ();
3+
4+ function cn (classname ) {
5+ return classname;
6+ }
7+ </script >
8+
9+ <svelte:element this ={tag }></svelte:element >
10+ <svelte:element this ={tag } class =" red" ></svelte:element >
11+ <svelte:element this ={tag } class:active ={active }></svelte:element >
12+ <svelte:element this ={tag } class ="red" class:active ={active }></svelte:element >
13+ <svelte:element this ={tag } class ={cn (" blue" )}></svelte:element >
14+ <svelte:element this ={tag } class ={cn (" blue" )} class:active ={active }></svelte:element >
15+
16+ <style >
17+ .red {
18+ color : red ;
19+ }
20+ </style >
You can’t perform that action at this time.
0 commit comments